文章目录
前言一、前期准备1. RealSense D435i安装2. Kinova-ROS安装二、手眼标定环境配置1. visip2. aruco_ros3. easy_handeye三、标定前准备1. 终端python版本设置2. opencv4安装四、手眼标定1. 准备aruco码2. 创建launch文件3. 参数修改4. 手眼标定总结参考连接前言
本文主要使用kinova joca2机械臂 + RealSense D435i深度相机进行了eye to hand的手眼标定。
系统环境:Ubuntu18.04,ROS Melodic
硬件:Kinova joca2,RealSense D435i
一、前期准备
1. RealSense D435i安装
(1)完成realsense及其ros接口的安装测试。
请参考:http://zhaoxuhui.top/blog//09/09/intel-realsense-d435i-installation-and-use.html
(2)realsense-ros接口安装部分可以依照官网文档进行安装测试:
/IntelRealSense/realsense-ros
2. Kinova-ROS安装
(1)安装kinova-ros接口
cd ~/catkin_ws/srcgit clone /Kinovarobotics/kinova-ros.git kinova-roscd ~/catkin_wscatkin_make
注意:要通过 USB 访问 arm,要将 udev 规则文件10-kinova-arm.rules
从~/catkin_ws/src/kinova-ros/kinova_driver/udev
复制到/etc/udev/rules.d/
中:
sudo cp kinova_driver/udev/10-kinova-arm.rules /etc/udev/rules.d/
(2)安装moveit
sudo apt-get install ros-melodic-moveitsudo apt-get install ros-melodic-trac-ik
(3)验证机械臂和moveit可用:
# 机械臂roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=j2n6s300# moveitroslaunch j2n6s300_moveit_config j2n6s300_demo.launch
二、手眼标定环境配置
1. visip
sudo apt-get install ros-melodic-vispcd ~/catkin_ws/srcgit clone /lagadic/vision_visp.gitcd ..catkin_make --pkg visp_hand2eye_calibration
2. aruco_ros
cd ~/catkin_ws/srcgit clone /pal-robotics/aruco_roscd ..catkin_make
3. easy_handeye
cd ~/catkin_ws/src # replace with path to your workspacegit clone /IFL-CAMP/easy_handeyecd .. # now we are inside ~/catkin_wsrosdep install -iyr --from-paths srccatkin_make
注:此处可能会报错:缺少transforms3d库。
使用如下指令进行安装:
pip install transforms3d
三、标定前准备
1. 终端python版本设置
查看终端python版本,切换python版本为2.7
参考:/p/159483149
2. opencv4安装
ubuntu18.04默认安装的opencv3。低版本的opencv没有手眼标定函数,因此需要opencv4。
pip2 install opencv-python==4.2.0.32
四、手眼标定
1. 准备aruco码
网址:https://chev.me/arucogen/
选项选择如下:
Dictionary: Original ArUcoMarker ID:582Marker size:100
生成PDF之后,原尺寸打印
注:Dictionary
必须选Original ArUco。ID
和size
选择其他选项的,要对应文件中修改成对应的参数(ID要是aruco文件夹中包含的ID)。
2. 创建launch文件
注意:RealSense D435i相机和机械臂要分别启动,否则会报错!
在~/catkin_ws/src/easy_handeye/easy_handeye/launch
文件夹下新建kinova_realsense.launch
如使用其他相机,将相机信息和图像改为对应相机发布的信息,将相机坐标系改为对应相机的坐标系。使用其他机械臂的,launch文件编写请参考其他博主进行编写。
<remap from="/camera_info" to="/camera/color/camera_info" /><remap from="/image" to="/camera/color/image_raw" /><param name="camera_frame" value="camera_link"/>
文件内容如下:
<launch><arg name="namespace_prefix" default="kinova_d435i_handeyecalibration" /><arg name="marker_size" value="0.1" /><arg name="marker_id" value="582" /><!-- 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_link"/><param name="camera_frame" value="camera_link"/><param name="marker_frame" value="camera_marker" /></node><!-- start the robot --><include file="$(find kinova_bringup)/launch/kinova_robot.launch"></include><include file="$(find j2n6s300_moveit_config)/launch/j2n6s300_demo.launch"></include><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"></node><!-- start easy_handeye --><include file="$(find easy_handeye)/launch/calibrate.launch" ><arg name="namespace_prefix" value="$(arg namespace_prefix)" /><arg name="eye_on_hand" value="false" /><arg name="tracking_base_frame" value="camera_link" /><arg name="tracking_marker_frame" value="camera_marker" /><arg name="robot_base_frame" value="j2n6s300_link_base" /><arg name="robot_effector_frame" value="j2n6s300_link_6" /><!--disable automatic robot movement--><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>
3. 参数修改
(1) 将同目录下calibrate.launch
文件中的第十三行move_group
的default value
改为arm
;
<arg name="move_group" default="arm" doc="the name of move_group for the automatic robot motion with MoveIt!" />
(2)sudo gedit ~/catkin_ws/src/easy_handeye/easy_handeye/src/easy_handeye/handeye_calibration_backend_opencv.py
# 将import cv2# 改为import syssys.path.remove('/opt/ros/melodic/lib/python2.7/dist-packages')import cv2sys.path.append('/opt/ros/melodic/lib/python2.7/dist-packages')
4. 手眼标定
(1)将aruco码固定在joca2机械臂的末端;
(2)启动RealSense D435i深度相机;
roslaunch realsense2_camera rs_camera.launch
(3)启动kinova_realsense.launch
;
cd ~/catkin_ws/src/easy_handeye/easy_handeye/launch
roslaunch kinova_realsense.launch
(4)配置成功会出现以下三个图;
注:我是手动调整机械臂位置进行采样的,所以没用到第三张图。
如果意外遇到图二为空白(写博客准备截图时遇到):
rosrun rqt_gui rqt_gui --clear-config然后选择plugins->configuration->dynamics configu
我没有出现image_view,就另打开终端,运行rqt
指令。在打开的窗口选择plugins->Visualization->image_View
,打开image_view界面。选择/aruco_ros/tracker/result
话题,确认能检测到aruco码。
(5)手动调整机械臂的位置,调整一次,采样一次,采样17次后,点击compute,得到坐标转换关系。
总结
总结下来就是一步一个坑啊。好在是标出来了。此外,十分感谢以下作者的工作,给了我十分重要的帮助!