Turtlebot机械臂入门教程-校准kinect

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纸上,附在工作区上,确保能让机械臂到达图案的每个点。
  • 如图:
    physical_setup

校准说明

  • 在上网本启动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. 
  • 下一步是将抓手的边缘移动到四个指定的点上。

  • 请注意,有一个特定的边缘,如果你定位的手臂,抓手的不动侧夹持器是在左边,它将是底部的左点。

  • 确保您的设置与下面的一张照片相匹配。
    请输入图片描述

  • 下一步,将接触点移到图像上的四个点上,每次你有正确的位置时,按回车键。
    step1
    step2
    step3
    step4

应用校准

  • 在移动到第四点后,校准脚本将输出类似以下的东西:
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)和机械臂实际位置应该保持一致的。如图:
    rviz_calibration_result

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: turtlebot机械臂入门教程