Kinect内参标定
http://wiki.ros.org/openni_launch/Tutorials/IntrinsicCalibration
安装相关ROS工具包
安装visp
sudo apt-get install ros-kinetic-visp-*
安装aruco_ros
cd ~/catkin_ws/src
git clone -b kinetic-devel https://github.com/pal-robotics/aruco_ros
cd ..
catkin_make
安装easy_handeye
cd ~/catkin_ws/src
git clone https://github.com/IFL-CAMP/easy_handeye
cd ..
catkin_make
下载ArUco markers
通过http://chev.me/arucogen/ 可以在线生成ArUco markers,注意选择Original ArUco,设置相应的ID和尺寸。
通过其他途径下载的aruco markers可能会导致后面教程相机无法识别到。
修改ur5_kinect_calibration.launch文件
可以在/easy_handeye/docs下找到,将它移到launch文件夹下,或自己重新创建.launch文件。
<!-- filename: calibrate.launch -->
<launch>
<arg name="namespace_prefix" default="ur5_kinect_handeyecalibration" />
<arg name="robot_ip" doc="The IP address of the UR5 robot" />
<!--<arg name="marker_frame" default="aruco_marker_frame"/>-->
<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="101" />
<!-- 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/rgb/camera_info" />
<remap from="/image" to="/camera/rgb/image_rect_color" />
<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_rgb_optical_frame"/>
<param name="marker_frame" value="camera_marker" />
</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="base_link" />
<arg name="robot_effector_frame" value="ee_link" />
<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>
注意:一定要根据实际的情况来进行修改,深度相机和机械臂的tf坐标、对应的话题、ArUco的ID和尺寸都得进行修改。后面出现的相机识别不出ArUco码、窗口闪退等问题都与之相关。
启动UR5机械臂
roslaunch ur_modern_driver ur5_bringup.launch robot_ip:=xxx.xxx.x.xx
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch
启动手动标定
roslaunch easy_handeye ur5_kinect_calibration.launch
会出现RVIZ和两个可视化窗口
点击第二张图左上角的Plugins->Visualization->Image View, 选择/aruco_tracker/result会显示出图像以及自动识别ArUco码,若不显示或识别不出请检查ur5_kinect_calibration.launch配置参数,也可能是ArUco码有问题。
接下来点击中间窗口的cherk starting pose按钮,让你采集17个点,继续下面两个步骤
1.依次点击Next Pose->Plan->Excute;
2.点击后方窗口的Take Sample,下方的Samples窗口会出现位姿数据;
重复执行1、2步骤17次(可能会出现当前位姿检测不到的情况,继续点击Next按钮即可),完成后点击Compute显示标定的结果,再点击Save保存数据。
生成的ur5_kinect_handeyecalibration_eye_on_base.yaml文件保存在.ros/easy_handeye文件夹里
.ros/easy_handeye
vim ur5_kinect_handeyecalibration_eye_on_base.yaml
可以查阅到相关的tf变换信息,将其通过静态变换放置在启动的launch文件。
eye_on_hand: false
robot_base_frame: base_link
tracking_base_frame: camera_link
transformation: {qw: 0.9717625847217112, qx: 0.003422921225947768, qy: -0.05367481903845219,
qz: -0.22974937724931785, x: -0.11453255054685166, y: 0.7892102654016733, z: 0.5210149025720693}