0.准备工作
1.相机驱动安装:传送门
2.Ur5机器人驱动安装:传送门
硬件条件
UR5机器人 | Realsense D435i |
---|---|
工控机 | i7-11700F RTX 3060 |
系统 | Ubuntu 18.04 |
1.安装一些标定的文件夹
mkdir -p ~/hand_eye/src
cd ~/hand_eye/src
#下载aruco_ros
git clone -b melodic-devel https://github.com/pal-robotics/aruco_ros.git
#下载easy_handeye
git clone https://github.com/IFL-CAMP/easy_handeye
#下载vision_visp / visp_hand2eye_calibration
sudo apt-get install ros-melodic-visp
git clone -b melodic-devel https://github.com/lagadic/vision_visp.git
cd ..
catkin_make --pkg visp_hand2eye_calibration
#编译
catkin_make
上述代码可能存在无法下载的情况,需要在终端添加代理
2.眼在手上的文件配置
在标定的过程中需要启动Ur5机械臂的节点,realsense节点 aruco节点 easy_handeye节点,网上大多数是写一个launch文件一起启动,但是很容易报错,这里是分开写。
2.1 修改配置文件
cp ~/hand_eye/src/easy_handeye/docs/example_launch/ur5_kinect_calibration.launch ~/hand_eye/src/easy_handeye/easy_handeye/launch
sudo gedit ~/hand_eye/src/easy_handeye/easy_handeye/launch/ur5_kinect_calibration.launch
修改内容如下
<launch>
<arg name="namespace_prefix" default="ur5_kinect_handeyecalibration" />
<arg name="robot_ip" doc="The IP address of the UR5 robot" />
//需要根据自己的实际码来 定义 marker_size(打印码的长度单位米)和marker_id(打印码的编号)
<arg name="marker_size" doc="Size of the ArUco marker used, in meters" default = "0.1"/>
<arg name="marker_id" doc="The ID of the ArUco marker used" default = "24"/>
//注释这一部分代码
<!-- start the Kinect
<include file="$(find freenect_launch)/launch/freenect.launch" >
<arg name="depth_registration" value="true" />
</include> -->
//注释这一部分代码
<!-- start ArUco -->
<node name="aruco_tracker" pkg="aruco_ros" type="single">
//注意改变相机的节点
<remap from="/camera_info" to="/camera/color/camera_info" />
<remap from="/image" to="/camera/color/image_raw" />
<param name="image_is_rectified" value="true"/>
<param name="marker_size" value="$(arg marker_size)"/>
<param name="marker_id" value="$(arg marker_id)"/>
//注意改变相机的节点
<param name="reference_frame" value="camera_color_frame"/>
<param name="camera_frame" value="camera_color_frame"/>
<param name="marker_frame" value="camera_marker" />
</node>
//注释机器人的代码
<!-- start the robot
<include file="$(find ur_bringup)/launch/ur5_bringup.launch">
<arg name="limited" value="true" />
<arg name="robot_ip" value="192.168.0.21" />
</include>
<include file="$(find ur5_moveit_config)/launch/ur5_moveit_planning_execution.launch">
<arg name="limited" value="true" />
</include> -->
//注释机器人的代码
<!-- start easy_handeye -->
<include file="$(find easy_handeye)/launch/calibrate.launch" >
<arg name="namespace_prefix" value="$(arg namespace_prefix)" />
//这里眼在手上选择true
<arg name="eye_on_hand" value="true" />
<arg name="tracking_base_frame" value="camera_link" />
<arg name="tracking_marker_frame" value="camera_marker" />
//robot_base_frame 的坐标系改成base
<arg name="robot_base_frame" value="base" />
<arg name="robot_effector_frame" value="tool0_controller" />
<arg name="freehand_robot_movement" value="false" />
<arg name="robot_velocity_scaling" value="0.5" />
<arg name="robot_acceleration_scaling" value="0.2" />
</include>
</launch>
如果复制上述代码,请删除所有中文说明
aruco二维码获取地址:传送门
一定要使用aruco二维码,然后打印出来,测量二维码的尺寸。
这里不要打印太大的Aruco码,会导致机器人识别到Aruco码的次数比较少
这里会有两个问题,在执行手眼标定节点的时候报错
对于rosdep错误,尝试通过命令安装transform3d
pip install transforms3d
对于AttributeError,我认为它类似于这个问题,你可以试试这个命令
python -m pip install opencv-contrib-python
解决方案的原文github链接:传送门
2.启动标定程序
1.realsense相机启动
roslaunch realsense2_camera rs_camera.launch
2.启动机器人
roslaunch ur_robot_driver ur5_bringup.launch limited:=true robot_ip:=192.168.125.100
再打开一个终端
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch limited:=true
3.启动标定程序
roslaunch easy_handeye hand_eye.launch
4.再打开一个rviz终端,输入rqt
点击菜单栏的 Plugins -> Visulization -> Image View,选择 /aruco_tracker/result 话题。如果没有出现 aruco码,注意检查上文 中相机节点是否改变。
5.调整机器人的角度,能够以最好的状态识别Aruco码是最好的。
aruco码最好不要太大,否则会经常出相机视野导致数据采集数量比较少。
6.点击check starting pose,如图所是,若检查成功,界面会出现: 0/17,ready to start
然后点击Next Pose -> Plan -> Execute 执行完成以后如果标定码在视野范围内则 点击Take Sample 如图所示。
循环往复直到执行完17个位姿,点击窗口的Compute 就可以计算出机器人的手眼坐标关系了。
点击保存,数据保存在$HOME/.ros/easy_handeye 目录下的yaml文件中。