1、安装相机的驱动
我们使用的是Intel Realsense D435i深度相机
安装D435I相关的驱动
1.注册服务器的公钥
sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
2.将服务器添加到存储库列表中
sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
3.安装SDK2
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils
4.ROS包安装
sudo apt-get install ros-$ROS_DISTRO-realsense2-camera
sudo apt-get install ros-$ROS_DISTRO-realsense2-description
2、aruco_ros
1、首先下载aruco_ros功能包:https://github.com/pal-robotics/aruco_ros2
2、打印Marker标签:Online ArUco markers generator
Dictionary 一定要选 Original ArUco
Marker ID 和 Marker size 自选,在 launch 文件中做相应的修改
Marker ID:582,Marker size:50mm)
打印时,要选择原始大小,否则要测量一下打印出来的真实大小
3、配置aruco_ros 的 launch 文件
在vscode中打开single_realsense.launch文件
markerId:使用的 Marker 标签的 ID,这里在准备时打印的 Marker 标签 ID 为 582
markerSize:Marker 标签的实际大小,单位为 m,这里在准备时打印的 Marker 标签 实际大小为 5 厘米 即 0.05m
ref_frame:参考坐标系名称,这里选择 Realsense 的 camera_color_frame 作为参考坐 标系
将 /camera_info 重 映 射 为 对 应 Realsense 实 际 发 布 的 相 应 的 Topic 即 /camera/color/camera_info
将 /image 重 映 射 为 对 应 Realsense 实 际 发 布 的 相 应 的 Topic 即 /camera/color/image_raw camera_frame:相机坐标系,修改为实际的相机坐标系 camera_color_frame
3、easy_handeye 配置
easy_handeye 是用于手眼标定的功能包之一,借助它可以实现眼在手上和眼在手外的手 眼 标定,在这里我们使用 easy_handeye 完成眼在手上的手眼标定。
下载功能包:https://github.com/IFL-CAMP/easy_handeye
打开eye_in_hand_calibrate.launch
打开publish.launch
4、进行手眼标定
首先,我们启动机械臂及moveit!
第二、启动相机节点
roslaunch realsense2_camera rs_camera.launch
第三、启动arcuo ros节点,识别marker标签
roslaunch aruco_ros single_realsense.launch
第四、启动image_view节点,并将打印的标签放下面
rosrun image_view image_view image:=/aruco_single/result
最后启动 easy_handeye 手眼标定节点
roslaunch easy_handeye eye_in_hand_calibrate.launch
这里出现0/17时我们点击plan;然后点击Execute机械臂将会移动位姿,然后看image_view,是否在合适位姿,如果在合适位姿,点击Take Sample;最后点击Next Pose;如果没有出现,请调试机械臂位姿,并多次尝试。
点击Compute,点击save
到这里手眼标定就此结束
4、手眼标定常见的问题
问题1:
解决:pip install transforms3d -i https://pypi.tuna.tsinghua.edu.cn/simple
问题2:
解决:pip install tabulate -i https://pypi.tuna.tsinghua.edu.cn/simple
问题3:rviz中的aruco_marker_frame会出现在机械臂上方
解决:修改calibrate.launch文件中的args里面的坐标
-
<group>
元素: 此元素定义了一组节点,这些节点在特定条件下会被执行。条件似乎是由$(arg publish_dummy)
的值决定的。 -
<node>
元素: 这是ROS中的一个节点元素,表示要运行一个节点。代码中有两个<node>
元素,它们分别描述了两种不同的情况。第一个
<node>
元素(在if="$(arg publish_dummy)"
条件下):name="dummy_handeye"
:此节点的名称是 "dummy_handeye"。pkg="tf"
:使用 "tf" 软件包。type="static_transform_publisher"
:运行的节点类型是 "static_transform_publisher",这是一个用于发布静态坐标变换的节点类型。args="1 1 1 0 1.5 -3.14 $(arg robot_base_frame) $(arg tracking_base_frame) 10"
:这些参数是传递给节点的参数。描述了一个静态坐标变换,其中包括平移和旋转信息,以及一些参数值。