环境:
本文主要使用kinova mico机械臂 + RealSense D435i深度相机进行了eye to hand的手眼标定。 系统环境:Ubuntu18.04,ROS Melodic 硬件:Kinova mico,RealSense D435i 特别注意:经测试,本方法有效可行,好多博客里说的运行写好的标定launch文件后,只有两个rviz界面,而没有标定的rqt_easy_handeye问题也可以解决。 准备工作:如果ubuntu系统长时间未使用,
一. RealSense D435i安装
完成realsense驱动及其ros接口的安装测试,详细步骤查阅我前面写的ubuntu18.04安装Realsense D435i相机SDK及realsense-ros记录,为后期运行yolo v5作准备
二. Kinova-ROS安装
(1)安装kinova-ros接口
cd ~ / cat_ws/ src
git clone https:
cd ~ / cat_ws
catkin_make
注意: 1.我的工作空间名是cat_ws, 2. 如果git clone出错,是因为网络的原因,可以试着科学上网,或一直重复此步骤,这里就不教给大家科学上网的过程了 3.要通过 USB 访问 arm,要将 udev 规则文件 10-kinova-arm.rules从~/cat_ws/src/kinova-ros/kinova_driver/udev复制到/etc/udev/rules.d/中:
cd cat_ws/ src/ kinova- ros
sudo cp kinova_driver/ udev/ 10 - kinova- arm. rules / etc/ udev/ rules. d/
(2)安装moveit
sudo apt- get install ros- melodic- moveit
sudo apt- get install ros- melodic- trac- ik
(3)验证机械臂和moveit可用:
cd cat_ws
source / devel. setup. bash
roslaunch kinova_bringup kinova_robot. launch kinova_robotType: = m1n6s300
#重新打开一个终端运行
roslaunch m1n6s300_moveit_config m1n6s300_demo. launch
三、手眼标定环境配置 1、aruco_ros安装
我一般都从github下载压缩包,然后解压到src,这样可以避免下错版本,我下载的都是melodic版本的。 也可以使用下面指令进行安装,但是不建议
cd ~ / cat_ws/ src
git clone - b melodic- devel https:
cd . .
catkin_make
2、vision_visp / visp_hand2eye_calibration安装
sudo apt- get install ros- melodic- visp
cd ~ / cat_ws/ src
git clone - b melodic- devel https:
cd . .
catkin_make -- pkg visp_hand2eye_calibration
3、easy_handeye安装
cd ~ / cat_ws/ src # replace with path to your workspace
git clone https:
cd . . # now we are inside ~ / cat_ws
rosdep install - iyr -- from- paths src
catkin_make
注:此处可能会报错:缺少transforms3d库。
执行命令
pip install transforms3d
但还是报错 解决办法:更新一下pip,再安装
pip install -- upgrade pip
然后重新在cat_ws文件夹下执行上述两个步骤:
pip install transforms3d
rosdep install - iyr -- from- paths src
这一步是必须的,不然后面无法出现标定界面
四、手眼标定 1.准备aruco码
网址:https://chev.me/arucogen/ 选项选择如下:
Dictionary: Original ArUco Marker ID:582 Marker size:100 生成PDF之后,原尺寸打印
注:Dictionary必须选Original ArUco。ID和size选择其他选项的,要对应文件中修改成对应的参数(ID要是aruco文件夹中包含的ID)。
2.创建launch文件 注意:RealSense D435i相机和机械臂要分别启动,否则会报错! 在~/cat_ws/src/easy_handeye/easy_handeye/launch文件夹下新建kinova_realsense.launch 如使用其他相机,将相机信息和图像改为对应相机发布的信息,将相机坐标系改为对应相机的坐标系。使用其他机械臂的,launch文件编写请参考其他博主进行编写。
< 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 m1n6s300_moveit_config)/launch/m1n6s300_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= "m1n6s300_link_base" / >
< arg name= "robot_effector_frame" value= "m1n6s300_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 ~/cat_ws/src/easy_handeye/easy_handeye/src/easy_handeye/handeye_calibration_backend_opencv.py
# 将
import cv2
# 改为
import sys
sys. path. remove ( '/ opt/ ros/ melodic/ lib/ python2. 7 / dist- packages')
import cv2
sys. 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;
roslaunch easy_handeye kinova_realsense. launch
(4)配置成功会出现以下三个图; kinova机械臂Check starting pose不好用,所以第三张图片的内容用不到,我是使用遥控的方法,调整标定板的位置。
如果没有出现image_view,就另打开终端,运行rqt指令。在打开的窗口选择plugins->Visualization->image_View,打开image_view界面。选择/aruco_ros/tracker/result话题,确认能检测到aruco码。
遥控调整机械臂的位置,调整一次,采样一次,采样17次后,点击compute,得到坐标转换关系。
完结 撒花~~