ROS_用Kinect标定机械臂_Calibrating a Kinect to the TurtleBot Arm for Manipulation
机械臂标定一整套流程
每次开一个新终端都得
source hydro/devel/setup.bash
sudo dmesg -c
sudo chmod 666 /dev/ttyUSB0
cd hydro
source devel/setup.bash
rosmake turtlebot_arm_kinect_calibration
roslaunch turtlebot_arm_kinect_calibration calibrate.launch
rosrun tf static_transform_publisher -0.26683 -0.122903 -0.537733 0.5 -0.499602 0.5 0.500398 /arm_base_link /openni_camera 100(记得是利用标定后产生的)
新终端下:
roslaunch turtlebot_arm_moveit_config turtlebot_arm_moveit.launch sim:=true --screen
新终端下:
rosrun turtlebot_arm_moveit_demos pick_and_place.py
http://wiki.ros.org/turtlebot_kinect_arm_calibration/Tutorials/CalibratingKinectToTurtleBotArm
Introduction
http://www.ncnynl.com/archives/201611/1117.html
Turtlebot机械臂入门教程-校准kinect
说明
- 介绍针对机械臂校准kinect
- 介绍On-board和Off-board的校准方法
校准(What and Why)
- 一般情况下,校准是指外在的校准或校准相机的物理位置到一些参考系
- 如果你有相机固定在Turtlebot上,这已经是校准的。但是这个相机不能看到机械臂的工作空间。
- 为了感知机械臂在干什么,就需要做一些调整:
- 增加第二个kinect去监视工作空间
- 移动在机器人上的kinect
- 如果你增加kinect或移动现有的kinect,就有这个问题,不知道相机在三维空间中的精确位置。
- 这就需要使用机械臂来确定kinect相对于固定参考系的位置。
On-board vs. Off-board
- On-board是指kinect安装在turtlebot上
- Off-board是指kinect不安装在turtlebot上
- On-board的优点是能让kinect跟这机器人一起移动并执行一些操作。
- 由于kinect不得不移动到能让turtlebot导航的位置,你必需添加另一个kinect用来导航
- 或用某些方法改写kinect采集的数据使得同时可用于避障。
- Off-board即不改变现有的turtlebot结构,给出一个有保证的工作空间的良好视图。
- 由于是Off-board,每次就只能使用一个工作空间。
方法
- 这种外在的校准程序使用一个校准图案,kinect可以定位非常精确的校准。
- 通过将手臂移动到一定的位置上的图案,我们可以计算出Kinect和机器人上的任何参考系之间的变换。
物理安装
- 校准用的物理安装的摄像头(在这种情况下,Kinect),可以看到工作区(手臂可以达到的工作区)
- 虽然其他有相同高度的桌子都可以,但宜家桌子实际上针对turtlebot机械臂是完美的高度。
- 打印check_7x6_27mm.pdf 校准图案在A4纸上,附在工作区上,确保能让机械臂到达图案的每个点。
- 如图:
校准说明
- 在上网本启动turtlebot,kinect和机械臂
roslaunch turtlebot_bringup kinect.launch
roslaunch turtlebot_arm_bringup arm.launch
-
用某种方法固定kinect,让它能看到整个校准图案,效果如图:
-
工作机上启动正确的launch文件,如果是off-board kinect使用calibrate_old_kinect.launch。
rosmake turtlebot_kinect_arm_calibration
roslaunch turtlebot_kinect_arm_calibration calibrate_turtlebot.launch
-
这应该检测棋盘,弹出如下所示的图像,与校准图案边缘覆盖和四点在图像上的标记。
-
显示校准日志
[ INFO] [1315859455.713597743]: [calibrate] Initialized.
[ INFO] [1315859455.919527989]: [calibrate] Got image info!
Got an image callback!
Is the checkerboard correct?
Move edge of gripper to point 1 in image and press Enter.
-
下一步是将抓手的边缘移动到四个指定的点上。
-
请注意,有一个特定的边缘,如果你定位的手臂,抓手的不动侧夹持器是在左边,它将是底部的左点。
-
确保您的设置与下面的一张照片相匹配。
-
下一步,将接触点移到图像上的四个点上,每次你有正确的位置时,按回车键。
应用校准
- 在移动到第四点后,校准脚本将输出类似以下的东西:
Resulting transform (camera frame -> fixed frame):
1 0 0 0.22683
0 1 0 0.122903
0 0 1 0.537765
0 0 0 1
Resulting transform (fixed frame -> camera frame):
0.000796318 0.000796288 0.999999 0.538043
-1 5.96046e-07 0.000796288 -0.266402
2.98023e-08 -1 0.000796318 -0.122475
4.56515e-41 0 4.56515e-41 1
Static transform publisher (use for external kinect):
rosrun tf static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms
rosrun tf static_transform_publisher -0.26683 -0.122903 -0.537733 0.5 -0.499602 0.5 0.500398 /arm_base_link /openni_camera 100
URDF output (use for kinect on robot):
<?xml version="1.0"?>
<robot>
<property name="turtlebot_calib_cam_x" value="-0.26683" />
<property name="turtlebot_calib_cam_y" value="-0.122903" />
<property name="turtlebot_calib_cam_z" value="-0.537733" />
<property name="turtlebot_calib_cam_rr" value="0.785417" />
<property name="turtlebot_calib_cam_rp" value="-1.5696" />
<property name="turtlebot_calib_cam_ry" value="0.785417" />
<property name="turtlebot_kinect_frame_name" value="/arm_base_link" />
</robot>
-
On-board应用
- 如果你在turtlebot校准Kinect,你需要更新机器人反映摄像头的新位置的标定urdf。
- 在上网本终端,输入roscd turtlebot_description命令,进入jiturtlebot模型包
- 打开urdf/turtlebot_calibration.xacro文件
- 备份文件,在把内容替换成校准脚本输出的URDF部分内容
- 再重启节点,让新校准生效
-
Off-board应用
- 如果你校准外部Kinect,打开新的终端窗口,运行静态的脚本转换输出,如:
rosrun tf static_transform_publisher -0.26683 -0.122903 -0.537733 0.5 -0.499602 0.5 0.500398 /arm_base_link /openni_camera 100
- 如果你运行这个命令,static_transform_publisher会一直发布turtlebot上的参考系和kinect参考系之间的变换。
- 如果你移动相机,那么就要重新做校准。
效果
- 无论是on-board或off-board,在rviz里面的kinect显示的点云(通常发布在/camera/rgb/points)和机械臂实际位置应该保持一致的。如图: