UR10e+d405相机 easy_handeye眼在手上标定过程记录

具体环境搭建可以参考我之前的这篇博客UR10e+D435+ag95夹爪 gazebo 仿真记录(三)D405相机在ROS1中利用官方的包是无法识别的需要修改realsense-ros->realsense2_camera->include->constants.h,第37行D405部分为,即可。

const uint16_t RS405_PID        = 0x0B5B; // DS5U

具体流程参考了这篇知乎文章,整体过程是比较顺利的,这里简单记录一下,主要说说遇到的问题RM机械臂与Realsense D435手眼标定教程 - 知乎 (zhihu.com)

主要用的包有Universal_Robots_ROS_Driver,easy_handeye,aruco_ros,realsense-ros这四个功能包。

一、准备工作

首先要把相机安装到机械臂的末端,这个就不细说了,自己根据需求设计工装安装吧(●ˇ∀ˇ●)

然后就是把数据线都接好,相机的数据线和UR机械臂的网线。具体的配置啥的参考我之前写的这篇博客通过PC驱动真实UR10e机械臂(ROS)_S1aoXuan_的博客-优快云博客

因为要用到aruco码,所以我们需要打印出来一个,可以从这个网站自行选择Marker ID 和 Marker Size,这两个参数后续需要输入所以务必记住。建议就用Original ArUco的582ID(因为默认是这个,能少改一点是一点吧○| ̄|_)Online ArUco markers generator (chev.me)

二、文件配置

1.aruco_ros single.launch 修改

复制粘贴一个aruco_ros/aruco_ros/launch文件夹下的single.launch文件,进行修改,修改完之后是这样。

修改前面的配置选项,markerId和markerSize根据之前打印时选择的设定。

修改ref_frame为相机的坐标系,对于Realsense相机都是camera_color_frame。

修改节点aruco_single下面的配置文件,对于相机话题不确定的可以在ros中启动自己的相机,通过rostopic去寻找对应的话题。

  • <remap from="/camera_info" to="/camera/color/camera_info" />:将/camera_info重映射为对应Realsense实际发布的相应的Topic即/camera/color/camera_info
  • <remap from="/image" to="/camera/color/image_raw" />:将/image重映射为对应Realsense实际发布的相应的Topic即/camera/color/image_raw
  • camera_frame:相机坐标系,修改为实际的相机坐标系camera_color_frame
<launch>

    <arg name="markerId"        default="582"/>
    <arg name="markerSize"      default="0.1"/>    <!-- in m -->
    <arg name="eye"             default="left"/>
    <arg name="marker_frame"    default="aruco_marker_frame"/>
    <arg name="ref_frame"       default="camera_color_frame"/>  <!-- leave empty and the pose will be published wrt param parent_name -->
    <arg name="corner_refinement" default="LINES" /> <!-- NONE, HARRIS, LINES, SUBPIX -->


    <node pkg="aruco_ros" type="single" name="aruco_single">
        <remap from="/camera_info" to="/camera/color/camera_info" />
        <remap from="/image" to="/camera/color/image_raw" />
        <param name="image_is_rectified" value="True"/>
        <param name="marker_size"        value="$(arg markerSize)"/>
        <param name="marker_id"          value="$(arg markerId)"/>
        <param name="reference_frame"    value="$(arg ref_frame)"/>   <!-- frame in which the marker pose will be refered -->
        <param name="camera_frame"       value="camera_color_frame"/>
        <param name="marker_frame"       value="$(arg marker_frame)" />
        <param name="corner_refinement"  value="$(arg corner_refinement)" />
    </node>

</launch>

2.手眼标定启动文件设置

主要分为相机启动,aruco启动,和easy_handeye节点启动

相机启动部分直接启动rs_camera.launch文件即可,对D405相机要先修改之前提到的头文件编译通过之后才能识别设备,这里设置publish_tf为false可以避免出现无法找到相机坐标系到机械臂base_link的转换,因为这两个就不在一个Tftree里面。

ArUco启动,参数修改和之前修改single.launch文件的思路一样基本就是对着改就行。

easy_handeye启动,设置eye_on_hand为true,robot_effector_frame选择机械臂最末端的坐标系。

眼在手上:得到的转换矩阵为相机坐标系到机械臂末端TCP坐标系

眼在手外:得到的转换矩阵为相机坐标系到机械臂底座坐标系

<launch>
    <arg name="namespace_prefix" default="ur10e_realsense_handeyecalibration" />

    <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="582"/>


    <!-- start the Realsense405 -->
    <include file="$(find realsense2_camera)/launch/rs_camera.launch" >
        <arg name="publish_tf" value="false" />
    </include>

    <!-- 2. start ArUco -->
    <node name="aruco_tracker" pkg="aruco_ros" type="single">
        <!--<remap from="/camera_info" to="/camera/rgb" />-->
        <remap from="/camera_info" to="/camera/color/camera_info" />
        <!--<remap from="/image" to="/camera/rgb/image_rect_color" />-->
        <remap from="/image" to="/camera/color/image_raw" />
        <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="reference_frame"    value="camera_color_frame"/>
        <!--<param name="camera_frame"       value="camera_rgb_optical_frame"/>-->
        <param name="camera_frame"       value="camera_color_frame"/>
        <param name="marker_frame"       value="aruco_marker_frame" />
    </node>


    <!-- 4. 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="eye_on_hand" value="true" />

        <!--<arg name="tracking_base_frame" value="camera_link" />-->
        <arg name="tracking_base_frame" value="camera_color_frame" />
        <arg name="tracking_marker_frame" value="aruco_marker_frame" />
        <!--<arg name="robot_base_frame" value="base_link" />-->
        <arg name="robot_base_frame" value="base_link" />
        <arg name="robot_effector_frame" value="wrist_3_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>

三、节点启动

这里我们一共要启动4个节点,机械臂与ROS通信的节点,机械臂moveit规划节点(这两个直接有用官方的包,不用任何修改),以及我们上述配置的两个launch文件,依次启动即可。机械臂运动记得在示教器上加载external control程序。

roslaunch ur_robot_driver ur10e_bringup.launch robot_ip:=192.168.56.2

roslaunch ur10e_moveit_config moveit_planning_execution.launch limited:=true

出现这个才说明可以通过远程控制了!!!

 Robot connected to reverse interface. Ready to receive control commands.

之后启动我们配置的两个launch文件,弹出如下窗口

roslaunch ur10e_realsense_handeyecalibration.launch 

roslaunch single_rs_no_robot.launch 

Rviz界面和easy_handeye的两个界面,rviz启动之后会提示坐标错误,修改Global Options->fixed frame 从world修改成base_link。如果motionplanning没有出现末端的圆球无法拖动机械,只需移除重新添加即可。

 可以启动一个rqt_image_viewer节点看一看相机是否识别了ArUco码,订阅aruco_single/result节点即可。(之前的single.launch文件好像就是为了启动这个话题,不然看不到结果)

识别到就是这个样子

之后点击Check starting pose成功了话会提示Ready to start: click on next pose,如果提示失败了需要移动机械臂,继续调整。比较玄学,多试试就行

 之后点击该界面中的Take sample即可得到蓝色部分

 之后就是一直重复1,2,3步骤。规划好了会提示Good plan,然后执行就行,可以看到机械臂会运动,运动完看一下是不是可以识别到目标,识别不到直接next pose让他重新规划,能识别到再点take sample。当达到100%时就标定结束了,点击compute就可以结算出转换矩阵了。计算的转换矩阵点击save会存到.ros/easy_handeye目录下。

 我这里就是中间有个点识别不了,所以最后只有16个路点了。😓

 四、杂谈

在整个过程中我之前是把这些节点写到一个launch文件里依次启动,不知道为啥效果很差。反正把机器人运动的那个单独拎出来启动就能好点,目前就是这样启动了,略显麻烦。

我的笔记本没有网口用的拓展坞,网线接到主机会出现接收不到数据的报错,但是接到虚拟机就没这个问题了,所以建议接好网线直接选择接入虚拟机。。

在手眼标定时,会出现Plan->Execute机械臂没动,然后提示已经到了,看机械臂运动的终端有一个这个报错,这时候看看示教器可能external control程序重启就好了。。。

Could not stop controller 'pos_joint_traj_controller' since it is not running

之后我想试试把机器人末端缓存tool0会不会准一点 

<think>好的,我现在需要帮助用户了解如何使用ROS中的easy_handeye包进行手标定。首先,我得回忆一下手标定的基本概念,分为手上(eye-in-hand)和在手外(eye-to-hand)两种情况。根据用户提供的引用[^2],参数`eye_on_hand`的设置是关键区别,这点必须提到。 用户提到参考了引用[1]和[2],其中引用[1]给出了运行ur10e_handeye_calibration.launch的例子,而引用[2]指出D435i使用时需要调整`eye_on_hand`参数。我需要确保在步骤中涵盖这些信息。 接下来,我应该组织步骤流程,从准备工作到启动节点,再到数据采集和计算标定结果。可能还需要安装相关依赖包,比如easy_handeye和aruco_ros,用户可能不知道这些,所以需要明确说明。 在启动步骤中,需要区分手上在手外的不同参数设置,引用[^2]中的例子是在手外的情况,设置为false,而手上则为true。同时,需要替换机器人和相机的启动文件,比如UR10e和D435i的例子,这里用户提到的引用[^1]和[^2]正好对应这两种设备,需要正确引用。 数据采集部分,用户可能需要知道如何移动机械臂来获取足够的样本,以及如何通过RQT界面进行操作。最后,应用标定结果时,要说明生成的YAML文件及其用途。 生成相关问题的时候,要考虑用户可能遇到的后续问题,比如标定结果验证、参数调整、不同机器人或相机的适配、标定精度提升以及与其他工具的比较。这些问题需要自然延伸当前主题,并覆盖用户可能的需求。 最后,确保所有LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,但当前问题中没有涉及数学公式,可能不需要使用。同时,回答要用中文,结构清晰,分步骤说明,并在引用处正确标注和。</think>### ROS中easy_handeye标定使用教程 #### 一、标定前准备 1. **安装依赖包** - 安装`easy_handeye`和`aruco_ros`包: ```bash sudo apt-get install ros-<distro>-easy-handeye ros-<distro>-aruco-ros ``` - 需替换`<distro>`为ROS版本(如noetic、melodic) 2. **环境配置** - 确保机械臂和相机(如D435i)的ROS驱动已正确运行 - 准备标定板(推荐使用ArUco码),需与`aruco_ros`参数匹配 #### 二、标定流程 1. **启动标定节点** ```bash roslaunch easy_handeye ur10e_handeye_calibration.launch ``` - 根据手上/手外修改参数: ```xml <arg name="eye_on_hand" value="false" /> <!-- 在手外设为false,在手上设为true --> ``` - 替换`ur10e_handeye_calibration.launch`中对应的机器人/相机启动文件 2. **数据采集** - 通过RQT界面操作机械臂到多个不同位姿 - 每个位姿需确保标定板完整出现在相机视野中 - 建议采集15-20组样本(界面会显示已采集样本数) 3. **计算标定结果** - 点击`Compute`生成标定矩阵 - 点击`Save`保存结果为`handeye.yaml`文件 #### 三、应用标定结果 将生成的YAML文件路径配置到机器人控制节点中,实现视觉-机械臂坐标系统一。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值