[Tutorial de inicio del brazo robótico ROS]

En primer lugar, permítanme declarar que este proyecto se basa en el [Tutorial de introducción de brazo robótico ROS] de Kazakhstan UP en la estación B , y se reprodujo en la etapa inicial [Toma de visión de brazo robótico de la teoría al combate práctico].
visualización de logros por fases y tecnología de su carrera de posgrado Compartir, todos los datos y el código son de código abierto. Entonces, Pengpeng, lo reproduzco nuevamente. El hardware que uso es diferente. El maestro UP usa UR5 y mi laboratorio usa UR3. Los materiales relevantes UR3CB3.12 se enumeran a continuación: https: //www.universal
inserte la descripción de la imagen aquí-robots . cn/cb3/
[Actualización del sistema UR3 a CB3.12 con URcap1.05]

soporte de hardware

número de serie nombre Función
1 brazo robótico UR3 ejecutor de todas las acciones
2 D435i los ojos del ejecutor
3 Entorno de aprendizaje profundo de Ubuntu cerebro de pensamiento ejecutivo
4 Plataforma de agarre de avión Entorno operativo experimental
5 Tablero de calibración de tablero de ajedrez en blanco y negro 6*6 Calibración del ojo de la cámara fuera de la mano
6 Cubo pequeño de impresión 3D de 3x3x3cm actor de artefactos

El código es compatible con
el código del tutorial de entrada del brazo robótico ros versión 3.0 enlace:
enlace: https://pan.baidu.com/s/1KFLQXVWShG5KfroCd6eM0A=8888
código de extracción: 8888
[Tutorial de entrada del brazo robótico ROS - cinco pequeños]
Enlace PPT: https :/ /pan.baidu.com/s/18ierKnf8OJPPvGn8uOf1hw=8888
Código de extracción: 8888

1. Información general

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

[Tutorial principal de Autolabor] Introducción a los robots ROS

Tutorial de inicio rápido de ROS del sistema operativo de robot

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

2. Introducción a ROS

inserte la descripción de la imagen aquí

2.1 Introducción a ROS

Sitio web oficial de ROS: http://wiki.ros.org/
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquíinserte la descripción de la imagen aquíinserte la descripción de la imagen aquídirección de trabajo automático: http://www.autolabor.com.cn/book/ROSTutorials/

inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
API de Moveit: https://moveit.ros.org/documentation/source-code-api/

inserte la descripción de la imagen aquí

melódico: http://docs.ros.org/en/melodic/api/moveit_tutorials/html/index.html

inserte la descripción de la imagen aquí

2.2 Paquete de robots ROSinserte la descripción de la imagen aquí

inserte la descripción de la imagen aquíros-melodic: git clon https://github.com/ros-industrial/universal_robot.git
ros-noetic: https://blog.csdn.net/Dawn_yc/article/details/114791755

3. Modelado de robots URDF

inserte la descripción de la imagen aquí

3.1 Introducción a URDF

inserte la descripción de la imagen aquí

URDF es el formato de descripción del modelo de robot en ROS, que incluye la descripción de la apariencia del cuerpo rígido del robot, las propiedades físicas, los tipos de juntas, etc.

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3.2 Ver modelo

inserte la descripción de la imagen aquí
$ check_urdf xxx.urdf Revisa el archivo xxx.urdf y encuentra un error
$ urdf_to_graphiz xxx.urdf
Genera un archivo pdf desde el archivo urdf para visualización
inserte la descripción de la imagen aquí
$ roslaunch ur_description view_ur5.launch Muestra el modelo ur5inserte la descripción de la imagen aquí

3.3 Configurar y guardar Rviz

inserte la descripción de la imagen aquíroslaunch ur_description view_ur5_with_gripper.launch Exposición ur5+robotiq85 modelo
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

roslaunch ur_description view_ur5.launch
rviz

La ruta de guardado de rviz está enuniversal_robot/ur_description/cfg/2222.rviz

<?xml version="1.0"?>
<launch>
  <include file="$(find ur_description)/launch/ur5_upload.launch"/>

  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" >
    <param name="use_gui" value="true"/>
  </node>
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(find ur_description)/cfg/2222.rviz" required="true" />
</launch>

inserte la descripción de la imagen aquí

4. Introducción a la función principal Moveit! y control Rviz

4.1 Introducción a Moveit!

inserte la descripción de la imagen aquíMoveIt! es un software de conjunto de herramientas relacionado con el brazo robótico, que
integra varias funciones:
Ø Cinemática
Ø Planificación de movimiento
Ø Comprobación de colisiones
Ø Percepción 3D
Ø Manipulación
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

4.2 Arquitectura del paquete Robot ROS

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquírosrun moveit_setup_assistant moveit_setup_assistant
Cargue el modelo urdf
inserte la descripción de la imagen aquípara verificar si hay una colisión entre las articulaciones

inserte la descripción de la imagen aquí
Seleccione el solucionador,
inserte la descripción de la imagen aquí
seleccione la conexión de referencia y finalice el solucionador,
inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí
configure la posición de postura relevante,
inserte la descripción de la imagen aquí
recuéstese y ponga en cero
inserte la descripción de la imagen aquí
la postura 0,-1.5708,0-1.5708,0,0

inserte la descripción de la imagen aquíConfigurar la pinza final
inserte la descripción de la imagen aquí

Complete la información personal
inserte la descripción de la imagen aquíy finalmente cree el modelo.
inserte la descripción de la imagen aquí

Importar modelo directamente
inserte la descripción de la imagen aquí

4.3 Configuración de la computadora

inserte la descripción de la imagen aquíHay una demostración de Rviz correspondiente después de la configuración de moveit

roslaunch ur5_moveit_config demo.launch

inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

inserte la descripción de la imagen aquíPosición de destino aleatoria, haga clic en planificar y ejecutar, puede moverse a la posición correspondiente
inserte la descripción de la imagen aquí
Agregar
inserte la descripción de la imagen aquídemostración de pinza de obstáculos

roslaunch ur5_gripper_moveit_config demo.launch

inserte la descripción de la imagen aquí

5. Gazebo simula o controla un robot real

Hiper terminal

sudo apt install terminator

5.1 Conexión entre Moveit y el controlador

inserte la descripción de la imagen aquíinserte la descripción de la imagen aquíCómo utilizar

# gazebo仿真中控制机器人
roslaunch ur_gazebo ur5.launch
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
# 控制真实UR5机器人
一键启动: 
roslaunch ur_planning start_ur5.launch
分开启动:
roslaunch ur_modern_driver ur5_bringup.launch
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
# rviz 仅作可视化显示
roslaunch ur5_moveit_config demo.launch
rosrun ur_planning moveitServer.py

5.2 Simulación de cenador

inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

5.3 Controlar el robot UR5 real

inicio con un solo botón:

roslaunch ur_planning start_ur5.launch

Comience por separado:

roslaunch ur_modern_driver ur5_bringup.launch
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch
roslaunch ur5_moveit_config moveit_rviz.launch config:=true

inserte la descripción de la imagen aquí

6. Conceptos básicos de Moveit (python)

inserte la descripción de la imagen aquí

6.1 Revisión de Moveit!

inserte la descripción de la imagen aquí

6.2 Movimiento espacial conjunto

Instalar moveit_commander en Python

sudo apt-get update
sudo apt-get install ros-melodic-moveit-commander

inserte la descripción de la imagen aquí

# 关节规划,输入6个关节角度(单位:弧度)
    def move_j(self, joint_configuration=None,a=1,v=1):
        # 设置机械臂的目标位置,使用六轴的位置数据进行描述(单位:弧度)
        if joint_configuration==None:
            joint_configuration = [0, -1.5707, 0, -1.5707, 0, 0]
        self.arm.set_max_acceleration_scaling_factor(a)
        self.arm.set_max_velocity_scaling_factor(v)
        self.arm.set_joint_value_target(joint_configuration)
        rospy.loginfo("move_j:"+str(joint_configuration))
        self.arm.go()
        rospy.sleep(1)

inserte la descripción de la imagen aquí

    # 空间规划,输入xyzRPY
    def move_p(self, tool_configuration=None,a=1,v=1):
        if tool_configuration==None:
            tool_configuration = [0.3,0,0.3,0,-np.pi/2,0]
        self.arm.set_max_acceleration_scaling_factor(a)
        self.arm.set_max_velocity_scaling_factor(v)

        target_pose = PoseStamped()
        target_pose.header.frame_id = self.reference_frame
        target_pose.header.stamp = rospy.Time.now()
        target_pose.pose.position.x = tool_configuration[0]
        target_pose.pose.position.y = tool_configuration[1]
        target_pose.pose.position.z = tool_configuration[2]
        q = quaternion_from_euler(tool_configuration[3],tool_configuration[4],tool_configuration[5])
        target_pose.pose.orientation.x = q[0]
        target_pose.pose.orientation.y = q[1]
        target_pose.pose.orientation.z = q[2]
        target_pose.pose.orientation.w = q[3]

        self.arm.set_start_state_to_current_state()
        self.arm.set_pose_target(target_pose, self.end_effector_link)
        rospy.loginfo("move_p:" + str(tool_configuration))
        traj = self.arm.plan()
        self.arm.execute(traj)
        rospy.sleep(1)

6.3 Movimiento espacial cartesiano

inserte la descripción de la imagen aquí

# 空间直线运动,输入(x,y,z,R,P,Y,x2,y2,z2,R2,...)
    # 默认仅执行一个点位,可以选择传入多个点位
    def move_l(self, tool_configuration,waypoints_number=1,a=0.5,v=0.5):
        if tool_configuration==None:
            tool_configuration = [0.3,0,0.3,0,-np.pi/2,0]
        self.arm.set_max_acceleration_scaling_factor(a)
        self.arm.set_max_velocity_scaling_factor(v)

        # 设置路点
        waypoints = []
        for i in range(waypoints_number):
            target_pose = PoseStamped()
            target_pose.header.frame_id = self.reference_frame
            target_pose.header.stamp = rospy.Time.now()
            target_pose.pose.position.x = tool_configuration[6*i+0]
            target_pose.pose.position.y = tool_configuration[6*i+1]
            target_pose.pose.position.z = tool_configuration[6*i+2]
            q = quaternion_from_euler(tool_configuration[6*i+3],tool_configuration[6*i+4],tool_configuration[6*i+5])
            target_pose.pose.orientation.x = q[0]
            target_pose.pose.orientation.y = q[1]
            target_pose.pose.orientation.z = q[2]
            target_pose.pose.orientation.w = q[3]
            waypoints.append(target_pose.pose)
        rospy.loginfo("move_l:" + str(tool_configuration))
        self.arm.set_start_state_to_current_state()
        fraction = 0.0  # 路径规划覆盖率
        maxtries = 100  # 最大尝试规划次数
        attempts = 0  # 已经尝试规划次数

        # 设置机器臂当前的状态作为运动初始状态
        self.arm.set_start_state_to_current_state()

        # 尝试规划一条笛卡尔空间下的路径,依次通过所有路点
        while fraction < 1.0 and attempts < maxtries:
            (plan, fraction) = self.arm.compute_cartesian_path(
                waypoints,  # waypoint poses,路点列表
                0.001,  # eef_step,终端步进值
                0.00,  # jump_threshold,跳跃阈值
                True)  # avoid_collisions,避障规划
            attempts += 1
        if fraction == 1.0:
            rospy.loginfo("Path computed successfully. Moving the arm.")
            self.arm.execute(plan)
            rospy.loginfo("Path execution complete.")
        else:
            rospy.loginfo(
                "Path planning failed with only " + str(fraction) +
                " success after " + str(maxtries) + " attempts.")
        rospy.sleep(1)

6.4 Interactuando con el medio ambiente

inserte la descripción de la imagen aquí

# 在机械臂下方添加一个table,使得机械臂只能够在上半空间进行规划和运动
    # 避免碰撞到下方的桌子等其他物体
    def set_scene(self):
        ## set table
        self.scene = PlanningSceneInterface()
        self.scene_pub = rospy.Publisher('planning_scene', PlanningScene, queue_size=5)
        self.colors = dict()
        rospy.sleep(1)
        table_id = 'table'
        self.scene.remove_world_object(table_id)
        rospy.sleep(1)
        table_size = [2, 2, 0.01]
        table_pose = PoseStamped()
        table_pose.header.frame_id = self.reference_frame
        table_pose.pose.position.x = 0.0
        table_pose.pose.position.y = 0.0
        table_pose.pose.position.z = -table_size[2]/2 -0.02
        table_pose.pose.orientation.w = 1.0
        self.scene.add_box(table_id, table_pose, table_size)
        self.setColor(table_id, 0.5, 0.5, 0.5, 1.0)
        self.sendColors()

7. Fundación Moveit (C++) para lograr la planificación de rutas con restricciones

inserte la descripción de la imagen aquí

8. Motion Planning - ¿Cómo elegir el algoritmo de planificación en Moveit?

8.1 Por qué es necesaria la planificación de rutas

Ø Evitar obstáculos: evitar colisiones con objetos estáticos cerca del brazo robótico, como mesas; evitar
colisiones con objetos dinámicos, como personas (que se acercan repentinamente)
Ø La tarea tiene requisitos en la trayectoria del movimiento: con restricciones cinemáticas o dinámicas, como soldadura , Tome
un vaso lleno de agua , etc.
n Clasificación de planificación de ruta
Ø Basado en búsqueda, Dijkstra, A*, En cualquier momento A*, ARA*, D*
Ø Basado en muestreo, PRM, RRT, RRT-connect, RRT*, Kinodynamic-
RRT* (conforme a la dinámica), RRT en cualquier momento*, RRT informado*
Ø Algoritmos inteligentes como algoritmo genético, algoritmo de colonia de hormigas
inserte la descripción de la imagen aquíAlgoritmo de planificación de rutas basado en muestreo
Ø Conocimientos básicos: introducción completa: la solución se encontrará cuando el tiempo sea infinito;
Ø PRM: 1. Muestreo aleatorio primero n puntos para formar la Figura 2. Búsqueda basada en gráficos
Ø RRT: búsqueda rápida de árboles aleatorios, soluciones no óptimas, consulta cerca puede usar kdtree y otras estructuras de datos para
encontrar rápidamente el nodo más cercano en el tree
Ø RRT-connect: RRT extendido bidireccionalmente, se expande desde el inicio y el objetivo al mismo tiempo, la velocidad de búsqueda es relativamente
rápida, el algoritmo predeterminado de ros-moveit
Ø RRT*: se han realizado dos mejoras, una es cambiar las reglas para conectar nuevos nodos al árbol, y el otro es "podar" la operación del árbol
de búsqueda para acercarla a la ruta óptima real
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

8.2 Cómo elegir un algoritmo de planificación de rutas

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

  1. Rviz
    inserte la descripción de la imagen aquí
  2. Moveit_setup_assistant
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí
  3. en el programa

inserte la descripción de la imagen aquí

9. Evitación visual de obstáculos

inserte la descripción de la imagen aquí

9.1 Introducción

inserte la descripción de la imagen aquí

9.2 Demostración oficial

Ø Solo se necesita una entrada de nube de puntos/mapa de profundidad para generar un mapa ráster;

$ roslaunch moveit_tutorials obstacle_avoidance_demo.launch

Ø Los obstáculos cilíndricos se pueden generar a partir del mapa de cuadrícula

$ roslaunch moveit_tutorials detect_and_add_cylinder_collision_object_demo.launch

(Nota: al ejecutar esta declaración, debe cerrar el comando anterior)
Paquete de funciones:

https://github.com/ros-planning/moveit_tutorials
https://github.com/ros-planning/panda_moveit_config

inserte la descripción de la imagen aquí

9.3 Combate real

roslaunch ur5_moveit_config demo_with_obstacle_avoidance.launch

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Pasos principales
Ø 1. Iniciar el programa camera ros

$ sudo apt-get install ros-melodic-realsense2-camera
$ sudo apt-get install ros-melodic-realsense2-description
$ roslaunch realsense2_camera demo_pointcloud.launch

Ø 2. Modifique el archivo de configuración de moveit
(1) Modifique point_cloud_topic de xxx_moveit_config/config/sensors_kinect_pointcloud.yaml para que sea
el tema publicado por la nube de puntos de su cámara
(2) o modifique image_topic de xxx_moveit_config/config/sensors_kinect_ depthmap.yaml
para que sea el tema publicado por su propia cámara mapa de profundidad
Ø 3 (Opcional) Modifique los parámetros visuales para evitar obstáculos, como la resolución de la cuadrícula octomap_resolución, etc.
Ø 4 (Opcional) Modifique los parámetros de la cámara, como la resolución, la frecuencia de actualización, etc.
Ø 5. Publique el pose de la cámara en relación con las coordenadas base del manipulador

<node pkg="tf2_ros" type="static_transform_publisher"
name="camera_to_robot" args="0.72032458 -0.21936176 0.90925255
0.98422218 0.0969083 -0.04779138 0.14011233 camera_color_optical_frame
world" />

inserte la descripción de la imagen aquí

roslaunch ur5_moveit_config demo_with_obstacle_avoidance.launch

Referencia https://blog.csdn.net/ssw_1990/article/details/104053041
inserte la descripción de la imagen aquíReferencia https://blog.csdn.net/ssw_1990/article/details/104053041
inserte la descripción de la imagen aquí

10. ROS y aprendizaje profundo

10.1 Introducción

ROS-¡Muévete!

ROS-melodic以及之前版本Moveit!默认使用python2.7
ROS-noetic以及ROS2支持python3

Aprendizaje profundo
El aprendizaje profundo utiliza python3, y el aprendizaje profundo generalmente necesita configurar el entorno en un entorno virtual.¿Cómo
integrar el aprendizaje profundo en ROS?
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

10. 2 Combate real

n Coexistencia de ROS y Anaconda
Ø 1. Instalación de ROS con un clic

$ wget http://fishros.com/install -O fishros && bash fishros

Ø 2. Instalar anaconda
https://blog.csdn.net/KIK9973/article/details/118772450
Baidu busca el tutorial de instalación de anaconda correspondiente a la versión de ubuntu
Ø 3. Crear un entorno virtual en anaconda

conda create -n YOUR_ENV_NAME
pyhton=3.7

Ø 4. Instalar la librería ros en el entorno virtual

$ conda activate
$ pip install rospkg/rospy

Nota: Independientemente de si es un entorno virtual o no, siempre que rospkg esté instalado, podrá encontrar paquetes ros como rospy,
std_msgs, etc., para que se pueda realizar la comunicación de temas y la comunicación de servicios.
Encapsule la función moveit en un servidor (Clase 6 - Comunicación de servicio Moveit Basic-python/ros)

$ rosrun ur_planning moveitServer.py

Ø 6. Escriba un cliente en el guión en el entorno y conéctese con la función moveit a través de la comunicación del servicio
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

11. Realice una captura visual de 6 DOF basada en ROS-Moveit

11.1 Acaparamiento visual

  1. Captura de planos
    Ø Conjunto de datos Cornell: 1035 imágenes RGBD, 8019 etiquetas
    Ø Conjunto de datos Jacquard: 54K imágenes RGBD, 1,1 millones de etiquetas
    Ø Algoritmo clásico de captura de planos: GGCNN[1], GRCNN[2],
    Swin-Transformer[3] ]
  2. Seis grados de libertad para capturar
    el conjunto de datos GraspNet-1Billion

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

11. Diseño del marco del sistema

n Planificación de movimiento
Ø Función: Llegar a
la posición y actitud especificada por el algoritmo
Ø Planificación de ruta: Planificar una trayectoria sin colisiones desde la posición actual
hasta la posición esperada n Calibración mano-ojo Ø Función: Obtener la relación entre el sistema de coordenadas del robot y el sistema de coordenadas de la cámara Ø Efecto: Actualmente disponible Lograr error dentro de ± 5 mm




inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

11. 3 Experimento de rastreo

n agarre [6] experimento de agarre de un solo objeto
Lista de elementos agarrados:
11 objetos en total: 1. Manzana 2. Plátano 3. Linterna 4. Béisbol 5. Cepillo para zapatos
6. Caja de bádminton 7. Radio 8. Limpiador de chaqueta de plumas
9. Pequeño Limpiador de zapatos blanco 10. Disco U 11. Mando a distancia
inserte la descripción de la imagen aquí

11.3 Experimento de rastreo

n Agarre[6] escena compleja experimento de agarre continuo
Ø Conclusión: en comparación con otros algoritmos, los resultados de predicción de la postura de agarre de agarre[6] son ​​más precisos;
el agarre también se puede detectar para la mayoría de los objetos pequeños y objetos con el mismo color que el fondo Actitud , la robustez es más fuerte.
Ø Problemas existentes:
l Los objetos que son demasiado "planos" y de poca altura dificultan la detección de la postura de agarre
l Durante el proceso de agarre, pueden ocurrir colisiones con otros objetos
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/vor234/article/details/131633464
Recomendado
Clasificación