Kinova-Jaco2 与Kinect2进行手眼标定

纪念下第一次写博客

手眼标定有两种eye to hand(眼在外)与eye in hand (眼在手上),本文是进行了eye to hand(眼在外)的标定,即相机固定在相对于机械臂固定的基座上。使用的是ubuntu18.04,Ros Melodic, Kinova Jaco2 以及KinectV2。

主要参考链接

  1. 主链接https://github.com/IFL-CAMP/easy_handeye/issues/19.
    博主的launch主要根据上面的链接写的,后面有详细说明。
  2. 主程序包的依赖:https://github.com/IFL-CAMP/easy_handeye.该程序包提供了对UR5与kinect标定的demo。
  3. 其他依赖包的安装参考如下两个链接,是一对师兄弟做的关于ur5与kinect的eye to hand标定
    (1)https://blog.csdn.net/sinat_23853639/article/details/80276848. (师兄)
    (2)https://blog.csdn.net/zhang970187013/article/details/81098175.(师弟)
  4. 该博主进行了kinova与sr300的手眼标定(eye to hand),主要参考其遇到的问题https://blog.csdn.net/qq_29921623/article/details/85547654.

注:链接使用顺序,建议先安装“师弟”的链接进行前面的依赖包安装,当安装完成并分别跑通了kinova与kinect2后,参考链接一中的文件编写自己launch文件。中间遇到其它问题可以参考链接4。

Launch文件说明

参考说明

Launch 文件主要参考了链接一中的两位提问者的代码
代码一进行的是关于Kinova与Poly Camera的eye in hand的标定

<arg name="marker_size" value="0.12558" doc="Size of the ArUco marker used, in meters" />
<arg name="marker_id" value="566" doc="The ID of the ArUco marker used" />

<!-- start the Camera -->
<include file="$(find pylon_camera)/launch/pylon_camera_node.launch" >
</include>

<!-- start ArUco -->
<node name="aruco_tracker" pkg="aruco_ros" type="single">
    <remap from="/camera_info" to="/pylon_camera_node/camera_info" />
    <remap from="/image" to="/pylon_camera_node/image_rect" />
    <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=""/>
    <param name="camera_frame"       value="pylon_camera"/>
    <param name="marker_frame"       value="camera_marker" />
</node>

<!-- start the robot -->
<include file="$(find kinova_bringup)/launch/kinova_robot.launch">
</include>
<include file="$(find j2n6s300_moveit_config)/launch/j2n6s300_demo.launch">
</include>

<!-- 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="true" />

    <arg name="tracking_base_frame" value="pylon_camera" />
    <arg name="tracking_marker_frame" value="camera_marker" />
    <arg name="robot_base_frame" value="j2n6s300_link_base" />
    <arg name="robot_effector_frame" value="j2n6s300_end_effector" />

    <arg name="freehand_robot_movement" value="false" />
    <arg name="robot_velocity_scaling" value="0.5" />
    <arg name="robot_acceleration_scaling" value="0.2" />
</include>

代码二是关于Kinova与Kinect的eye to hand的标定,与博主一样
在这里插入图片描述
其中有代码一中会报错,具体是找到calibrate.launch line 25将group name 设置为arm。
博主的launch.file如下:基本上参考上面两个代码以及链接3中师弟的代码改的

<?xml version="1.0" ?>
<launch>
<arg name="namespace_prefix" default="jaco_kinect_handeyecalibration" />
<arg name="marker_size" value="0.0497" doc="Size of the ArUco marker used, in meters" />
<arg name="marker_id" value="100" doc="The ID of the ArUco marker used" />

<!-- start the robot -->
<include file="$(find kinova_bringup)/launch/kinova_robot.launch">
</include>
<include file="$(find j2n6s300_moveit_config)/launch/j2n6s300_demo.launch">
</include>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">

</node>


<!-- start the Camera -->
<include file="$(find kinect2_bridge)/launch/kinect2_bridge.launch" >
</include>

<!-- start ArUco -->
<node name="aruco_tracker" pkg="aruco_ros" type="single">
    <remap from="/camera_info" to="/kinect2/hd/camera_info" />
    <remap from="/image" to="/kinect2/hd/image_color_rect" />
    <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="kinect2_rgb_optical_frame"/>
    <param name="camera_frame"       value="kinect2_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="kinect2_rgb_optical_frame" />
    <arg name="tracking_marker_frame" value="camera_marker" />
    <arg name="robot_base_frame" value="j2n6s300_link_base" />
    <arg name="robot_effector_frame" value="j2n6s300_end_effector" />

    <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>

后续标定操作

具体操作可以参考链接三中的师弟做法,后面有详细说明。
但有所不同的是,由于easy_handeye这个包的作者是针对UR5做了个demo,通过让机械臂运动17个点,采集摄像机与机械臂对应的位姿数据。在运行机械臂的时候,没法执行作者给出的17个点,事实上连一个点都无法运行。如下图所示,当点击plan后,窗口直接关闭了。
在这里插入图片描述

急中生智

机智的博主并没有死磕这个错误。事实上,在链接1中,有提问者问过相关问题,作者也进行了回答,可是效果如何并没有人知道。当看到下图时发现,当前的Aruco marker位置下,可以读到相机与机械臂四元数,碰巧kinova配备操控杆,于是通过手动移动了20个位置并记录了样本点。记录完成后直接点击compute就可求出机械臂基座到相机坐标系位姿转换了。
在这里插入图片描述

总结

虽然粗糙的完成了手眼标定,可是效果如何还不知道,后续会继续更新如何验证标定结果,以及实现简单的基于视觉的工件定位与抓取。
第一次写博客,略感激动,如有不清楚的地方欢迎留言。(o゜▽゜)o☆[BINGO!]

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值