marm_ros2 机械臂视觉抓取操作流程
MARM视觉抓取
1. OverView
1.1 程序介绍
| name | 介绍 |
| A1_description | marm urdf配置文件 |
| A1_moveit_config | marm moveit配置文件 |
| arm_controller | marm 机械臂硬件控制sdk |
| capture_image | 相机sdk,二维码识别接口 |
| custom_interface | 机械臂控制msg, srv接口 |
| moveit_controller_server | 机械臂控制server接口 |
1.2 系统需求
ubuntu 22.04
ros2 humble, moveit2, rviz2, python-serial, camera-calibration
2. 机械臂使用
2.1 marm从仿真到实体控制
流程:
moveit → joint-states → 机械臂sdk → serial → 机械臂实体控制
启动moveit机械臂
codeBashros2 launch A1_moveit_config demo.launch.py启动成功后可以看到rviz的视图。
启动机械臂sdk
机械臂控制程序依赖串口,刚插入机械臂usb线材后需要给串口增加权限:
sudo chmod 777 /dev/ttyCH341USB0启动机械臂SDK:
python3 arm_controller.py
注意: 如果程序报找不到`serial`库,通过 `pip install python-serial` 指令安装`serial`库。
启动程序后,可以在rviz中看到机械臂的实施状态,拖动轨迹球,然后点击 plan&execute 即可看到机械臂的规划与运动。同时,机械臂sdk会监听moveit中机械臂各个关键的实时状态,并将moveit中的关节角度发布给真实机械臂,实现对机械臂的控制。

RViz界面截图,显示了机械臂模型和各种控制选项。
2.2 机械臂舵机温度参数设计
通过步骤2.1可完成对机械臂的真实控制。机械臂默认的舵机温度保护参数是50度,这里为了方便我们长时间测试机械臂不会温度保护,需要将机械臂的温度保护参数从新设置。
安装cutecom串口工具
sudo apt install cutecom启动发送温度指令
通过CuteCom工具,将六个舵机的温度保护参数设置到80。
CuteCom软件界面,显示了发送到串口的指令,用于设置舵机温度保护参数。
3. 视觉抓取
3.1 相机标定
capture-image包中有两个word文档,分别是标定用的标定板以及识别用的二维码。
标定相机
将打印的标定二维码粘贴到硬纸板上,要求粘贴要平整。启动相机节点
codeBashros2 launch capture_image capture_image.launch.py启动标定节点(需要提前安装camera-calibration)
codeBashros2 run camera_calibration cameracalibrator --size 10x7 --square 0.021 image:=/camera/image_raw camera:=/camera --no-service-check注意: size是标定板的交点个数, square是标定板中每个小方块的实际尺寸。
启动成功后会出现标定界面,左右,前后,旋转倾斜移动二维码版直到标定程序中x, y, size, skew变成绿色则表明标定成功,然后点击 calibrate 进行计算,计算成功后点击 save 按钮将标定结果保存。默认保存在/tmp目录下的一个压缩包,解压后将ost.yaml文件保存到capture_image下替换。

相机标定程序界面,显示了正在标定的棋盘格图案,以及X, Y, Size, Skew等参数条。
3.2 Aruco视觉定位
启动相机
ros2 launch capture_image capture_image.launch.py启动aruco识别
ros2 run capture_image aruco_object_pose_node
启动后可以看到已经识别到二维码,同时终端也会打印识别的位置信息。
Aruco标记检测程序的截图,左侧是摄像头捕捉到的带有Aruco标记的物体,右侧是终端输出的实时位置信息。
3.3 视觉抓取demo测试
通过2.1, 3.1, 3.2可以实现对机械臂的硬件控制,相机的标定,以及二维码识别的部分,完成以上各个部分的测试后可以进行一个完整抓取。
启动moveit
ros2 launch A1_moveit_config demo.launch.py启动arm_control
python3 arm_controller.py启动capture_image
ros2 launch capture_image capture_image.launch.py启动机械臂action控制
ros2 run moveit_controller_server moveit_controller_server_node启动aruco识别
ros2 run capture_image aruco_object_pose_node启动抓取demo
ros2 run moveit_controller_server marm_demo
启动demo程序后,动作步骤如下:
机械臂移动到识别位置,进行aruco定位。

机械臂悬停在一个带有Aruco标记的黄色方块上方。机械臂移动到抓取位置,然后抓取物体。
机械臂的夹爪正在抓取黄色的方块。机械臂移动到stand位置。
机械臂抓着方块移动到预设的站立位置。
机械臂将方块移动到put放取位置。

机械臂将黄色方块放置在目标区域。

Aruco标记检测程序的截图,左侧是摄像头捕捉到的带有Aruco标记的物体,右侧是终端输出的实时位置信息。