1. 环境准备:搭建ROS与硬件基础
第一次接触机械臂手眼标定时,我花了整整三天才把环境搭好。现在回想起来,其实只要按步骤操作,两小时就能搞定。我们先从最基础的Ubuntu和ROS安装说起,这里以Ubuntu 18.04和ROS Melodic为例,因为RealSense D435i对这个组合的兼容性最好。
装完系统后,第一件事是更新软件源。很多人会忽略这步,结果后面装依赖时各种报错。打开终端依次执行:
sudo apt-get update sudo apt-get dist-upgrade rosdep update硬件连接也有讲究。Kinova机械臂需要USB 3.0接口,RealSense相机最好接在独立的USB控制器上。我遇到过因为USB带宽不足导致相机帧率不稳定的情况,后来买了个PCIe转USB扩展卡才解决。记得把相机固定在机械臂工作范围内,高度建议1-1.5米,倾斜角度15-30度最理想。
2. 驱动安装:让硬件"活"起来
2.1 RealSense相机配置
RealSense的官方驱动安装其实比想象中简单。先装内核模块:
sudo apt-get install librealsense2-dkms然后装ROS包:
sudo apt-get install ros-melodic-realsense2-camera测试时有个小技巧:先关闭所有ROS节点,单独运行:
roslaunch realsense2_camera rs_camera.launch然后在rviz里添加PointCloud2显示,如果能看到点云说明驱动正常。常见问题是相机不识别,这时候检查dmesg日志,大概率是USB供电不足。
2.2 机械臂控制配置
Kinova的ROS包安装要注意版本匹配:
cd ~/catkin_ws/src git clone https://github.com/Kinovarobotics/kinova-ros.git cd .. catkin_make这里有个坑:udev规则必须配置,否则每次都要sudo:
sudo cp ~/catkin_ws/src/kinova-ros/kinova_driver/udev/10-kinova-arm.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules验证机械臂时,建议先运行基础驱动:
roslaunch kinova_bringup kinova_robot.launch再开另一个终端测试MoveIt:
roslaunch m1n6s300_moveit_config m1n6s300_demo.launch如果机械臂能在rviz里规划轨迹,说明安装成功。
3. 标定工具链搭建
3.1 ArUco标记识别
手眼标定需要视觉标记物,我推荐用ArUco码。安装时建议源码编译:
cd ~/catkin_ws/src git clone -b melodic-devel https://github.com/pal-robotics/aruco_ros.git cd .. catkin_make --pkg aruco_ros标记生成要注意:必须用Original ArUco字典,尺寸建议10cm×10cm。我常用ID=582的标记,因为这个数字在系统里冲突最少。打印时一定要保证尺寸精确,我用卡尺量过才放心。
3.2 easy_handeye安装
这个包是标定的核心工具,安装时容易踩坑:
git clone https://github.com/IFL-CAMP/easy_handeye.git rosdep install -iyr --from-paths src如果报错说缺transforms3d,先升级pip再装:
pip install --upgrade pip pip install transforms3d有个隐藏问题:ROS Melodic默认用Python2,但有些新包只支持Python3。我后来在.bashrc里加了别名:
alias rosdep='rosdep --rosdistro=melodic'4. 标定实战操作
4.1 launch文件配置
新建kinova_realsense.launch文件,关键参数要注意:
<arg name="marker_size" value="0.1" /> <!-- 必须与实际打印尺寸一致 --> <arg name="eye_on_hand" value="false" /> <!-- Eye-to-Hand模式 --> <arg name="robot_base_frame" value="m1n6s300_link_base" /> <arg name="robot_effector_frame" value="m1n6s300_link_6" />相机和机械臂的坐标系一定要核对清楚。我遇到过因为坐标系定义不对,标定结果偏差20cm的情况。建议先用rostopic echo /tf确认各坐标系关系。
4.2 标定过程技巧
启动顺序很重要:
- 先开相机:
roslaunch realsense2_camera rs_camera.launch - 再启动标定:
roslaunch easy_handeye kinova_realsense.launch
采样时要注意:
- 机械臂末端保持标记正对相机
- 每次移动后等1-2秒让图像稳定
- 建议采集15-20组数据,覆盖整个工作空间
如果image_view不显示,手动启动rqt:
rqt然后在Plugins→Visualization里添加ImageView,订阅/aruco_ros/tracker/result话题。
5. 验证与调试
标定完成后,最重要的验证实际精度。我常用的方法:
- 让机械臂末端走到已知坐标点
- 用测量工具验证实际位置
- 误差应小于3mm才算合格
常见问题排查:
- 标定结果跳变:检查标记是否牢固,相机是否抖动
- rviz显示异常:确认tf树是否正确,
rosrun tf view_frames生成pdf查看 - MoveIt规划失败:检查
robot_base_frame是否与URDF一致
最后记得保存标定结果:
rosservice call /kinova_d435i_handeyecalibration/save这个YAML文件要妥善保管,下次直接加载就能用。