搜索内容

  • 主页
  • 未分类
  • 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纸上,附在工作区上,确保能让机械臂到达图案的每个点。
    • 如图:
      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
    THE END
    < <上一篇
    下一篇>>