ROS 手眼标定 realsense435i+ur5e

news2025/1/21 9:19:54

 手眼标定的原理

基坐标系(base_tree)和相机(camera_tree)两个坐标系属于不同的tree,通过将标签贴到手上,相机识别出标签的position和orention,并通过easy_handeye标定包得到tool0(机械手),进一步得到相对于base的位置关系。即子坐标系(camera_rgb_optical_frame)到父坐标系(base_link)之间的关系。

对于手眼标定,场景主要有以下两种,

    eye-to-hand,眼在手外。
    这种场景下我们已知机械臂终端end_link与base_link、相机camera_link与识别物体object_link之间的关系;
    需要求解camera_link与base_link之间的变换。

    eye-in-hand,眼在手上。
    这种场景base_link和机械臂各关节joint_link、end_link已经通过URDF发布了;
    只需要求解camera_link与end_link之间的变换。

在ros中相机的坐标系和相机光学成像坐标系是不一样的

安装librealsense

# 下载安装包
git clone https://github.com/IntelRealSense/librealsense.git
cd librealsense

# 更新依赖库
sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

# 安装依赖库
sudo apt-get install libudev-dev pkg-config libgtk-3-dev
sudo apt-get install libusb-1.0-0-dev pkg-config
sudo apt-get install libglfw3-dev
sudo apt-get install libssl-dev

# 运行Intel Realsense许可脚本
./scripts/setup_udev_rules.sh

# 下载并编译内核模块
./scripts/patch-realsense-ubuntu-lts.sh

# 编译SDK2.0
cd librealsense
mkdir build
cd build
cmake ../ -DBUILD_EXAMPLES=true
make
sudo make install

测试是否安装完成

方式一:

cd examples/capture
./rs-capture

方式二:

realsense-viewer

安装librealsense-ros与easy_handeye

# 建立workspace
mkdir -p ~/realsense_ws/src
cd ~/realsense_ws/src/
catkin_init_workspace 
cd ..
catkin_make
echo "source ~/realsense_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

# 在realsense_ws/src/下载源程序
# 下载机械臂驱动
cd src
#安装realsense_ros
git clone https://github.com/IntelRealSense/realsense-ros.git
# catkin_make编译
cd ~/realsense_ws && catkin_make

git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git Universal_Robots_ROS_Driver
git clone -b calibration_devel https://github.com/fmauch/universal_robot.git fmauch_universal_robot

# aruco
git clone -b noetic-devel https://github.com/pal-robotics/aruco_ros.git

# vision_visp
git clone -b noetic-devel https://github.com/lagadic/vision_visp.git

# easy_hand_eye
git clone https://github.com/IFL-CAMP/easy_handeye

# 下载依赖
cd ..
sudo apt update
rosdep update
rosdep install --from-paths src --ignore-src -y
# empy
pip install empy
# pyqt
pip install PyQt5
 
# 编译
catkin_make                    

launch 文件配置:

标定过程需启动 ur5 机械臂的相关节点,realsense 节点,aruco 节点,easy_handeye 节点。

在xxx/realsense_ws/src/easy_handeye/easy_handeye/launch/eye_to_hand_calibration1.launch目录下,同时启动上述节点。

将launch文件修改成如下:

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

    <arg name="robot_ip" doc="The IP address of the UR5 robot" />

    <arg name="marker_size" doc="Size of the ArUco marker used, in meters" default="0.1" />#0.1为标定版的尺寸单位为m
    <arg name="marker_id" doc="The ID of the ArUco marker used" default="571"/>#571为自己所使用的标定版号

   <!-- start the realsen435 -->
    <include file="$(find realsense2_camera)/launch/rs_camera.launch" >
       <!-- <arg name="depth_registration" value="true" /> -->
    </include>
    
    <!-- 2. start ArUco -->
    <node name="aruco_tracker" pkg="aruco_ros" type="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 marker_size)"/>
        <param name="marker_id"          value="$(arg marker_id)"/>
        <param name="reference_frame"    value="camera_color_optical_frame"/>
        <param name="camera_frame"       value="camera_color_optical_frame"/>
        <param name="marker_frame"       value="camera_marker" />
    </node>


<!-- start the robot -->
    <include file="$(find ur_robot_driver)/launch/ur5e_bringup.launch">
        
        <arg name="robot_ip" value="192.168.1.11" />#value值为所使用机器人的ip
    </include>
    <include file="$(find ur5e_moveit_config)/launch/ur5e_moveit_planning_execution.launch">
        
    </include>
    
    
    
    <!-- 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="true" />#使用眼在手上,value值为true,若使用眼在手外,则value=false

        <arg name="tracking_base_frame" value="camera_color_frame" />
        <arg name="tracking_marker_frame" value="camera_marker" />
        <arg name="robot_base_frame" value="base" />
        <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>

1、Realsense435i节点
把rs_camera.launch文件<include>导入
2、ArUco节点

    修改:/camera_info / /image / reference_frame 和 camera_frame
    从https://chev.me/arucogen/中下载aruco二维码并打印出来
    注意:
     Dictionary 一定要选 Original ArUco
     Marker ID 和 Marker size 自选,在launch 文件中做相应的修改
     打印时注意选择原始大小,否则要测量一下打印出来的真实大小

3、easy_handeye节点

    <arg name="eye_on_hand" value="true"/> :眼在手上时,value 为 true
    tracking_base_frame :为相机坐标系 camera_color_frame
    robot_base_frame :为机器人基座坐标系,示例里写的是 base_link,我在 rviz 中查看 base 才是真实的基座坐标系
    robot_effector_frame:为工具坐标系,因为我安装了 robotiq相机/力传感器和夹爪,所以TCP 改变了

启动该launch文件进行手眼标定

cd realsense_wc
roslaunch easy_handeye eye_to_hand_calibration1.launch

出现如下窗口:

在启动的rvize中添加image,确认可以识别出aruco码。

同时在如下两个窗口进行标定

 在第三个窗口点击next pose -> plan -> execute,当点完 plan ,出现绿色框,则说明规划成功,然后可以点击 execute让机械臂执行动作

然后在第二个窗口,点击take sample采样

17个动作执行完成,回到第二个界面,点击compute,然后出现结果的姿态矩阵,然后可以点击save保存 

参考链接:

[1]ros realsense ur5手眼标定_realsense 坐标系-CSDN博客

[2]UR+RealSense手眼标定(eye-to-hand)_normalizeimageillumination is unimplemented!-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1681878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业数据治理:挑战与机遇并存的道路

在数字化浪潮席卷全球的今天&#xff0c;数据已经成为企业最宝贵的资产之一。然而&#xff0c;如何有效地管理和利用这些数据&#xff0c;确保数据的准确性、可靠性和安全性&#xff0c;成为了摆在企业面前的一大难题。数据治理&#xff0c;作为这一难题的解决方案&#xff0c;…

03-行为型模式(共10种)

上一篇: 02-结构型设计模式(共7种) 1. Strategy(策略模式) 策略模式是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;将每个算法封装到独立的类中&#xff0c;并使它们可以互相替换。这样可以使算法的变化独立于使用算法的客户端。 在 C 中&#xff0c;策略模式…

数据结构复习指导之图的遍历

文章目录 图的遍历 考纲内容 复习提示 1.广度优先搜索 1.1BFS算法的性能分析 1.2BFS算法求解单源最短路径问题 1.3广度优先生成树 2.深度优先搜索 2.1DFS算法的性能分析 2.2深度优先的生成树和生成森林 3.图的遍历与图的连通性 4.知识回顾 图的遍历 考纲内容 &…

Signal 即将成为JavaScript的一部分

什么是响应性&#xff1f; 在过去的几年中&#xff0c;响应性成为了所有现代前端框架以及React库的核心。 对于不熟悉前端开发的人来说&#xff0c;起初这可能是一个令人困惑的概念&#xff0c;因为它改变了常规的、自上而下的、从调用者到被调用者的顺序工作流。 在响应性范…

GIT基础02 多机器协作等命令

前言 首先我们知道git给我们提供了分支管理的功能 我们一般使用master分支作为线上环境,master分支一般是一个稳定的分支 我们通常是会创建一个其他分支进行开发,这样不会影响线上的机器运行 如果没有git提供这样的分支功能,就无法做到这一套了 指令学习 假设软件出现问题咋办…

得物质量管理体系的建设与应用

一、背景 质量保障是一门基于软件测试的系统化工程&#xff0c;遵循渐进式的发展规律。通过因地制宜地制定落地策略&#xff0c;设计场景方案&#xff0c;获取试验结果&#xff0c;并加以循环往复。最终&#xff0c;在每一位得物测试工程师的共同努力下&#xff0c;积累出一套…

Moe 混合多专家模型 原理 + 大模型的有性繁殖

Moe 混合多专家模型 原理 大模型的有性繁殖 MoE 介绍标准 Transformer 编码器MoE Transformer 编码器专家网络层 大模型的有性繁殖mergekit 合并 多个专家模型 的方式1. SLERP&#xff08;球面线性插值&#xff09;2. TIES3. DARE4. Passthrough5. Linear mergekit 合并 多个专…

vue3中实现简繁体转换

由于项目在大陆和台湾同胞同步使用&#xff0c;因此需要实现中文的简繁体转换&#xff0c;实现输入简体&#xff0c;能搜索出简体和繁体的相关内容&#xff0c;输入繁体&#xff0c;也能搜索出简繁体相关内容。忽略简繁体&#xff0c;扩大搜索范围。 引入插件&#xff1a; np…

一休:一款专业的休息提醒软件

对于长期使用电子产品的人来说&#xff0c;保护眼睛至关重要&#xff0c;不论是工作还是学习&#xff0c;适当的休息都是必要的&#xff0c;保护视力要牢记20-20-20法则&#xff0c;眼科医生陶勇也科普过&#xff1a; 使用电脑工作和学习时&#xff0c;容易会忘记时间&#x…

在面对各种问题时,我们应该如何进行数据分析

python数据分析汇总 前言一、对比分析概念特征类型案例Matplotlib的颜色字母对照表解决遇到未知函数 二、相关性分析概念类型案例一案例二 三、时间序列分析概念类型案例 四、回归分析概念类型案例一案例二案例三 五、决策树概念计算过程案例 六、主成分分析概念计算过程案例 七…

【手势识别-UILongPressGestureRecognizer长按 Objective-C语言】

一、我们来说这个长按啊, 1.长按这个手势,也是,步骤都是一样的,首先,也是这三大步啊, 1)创建手势对象 2)对某一个view添加手势 3)实现手势的方法 首先,也是三大步, 1)创建手势对象:首先,你要告诉我,你要使用哪一个手势,我要使用一个叫做UILongPressGesture…

[牛客网]——C语言刷题day4

答案&#xff1a;B 解析&#xff1a; a是数组首元素的地址,a1的步长是int&#xff0c;所以是2 &a是数组的首地址&#xff0c;&a1步长是int[5] ptr是int类型的指针&#xff0c;指向a数组的尾后位置&#xff0c;ptr-1的步长是int,所以是a数组的最后一个元素5 答案&am…

【无标题】海图微电子产品

一、HT2300 1、产品介绍 HT2300在全分辨率 (1920 H 1080 V) 下&#xff0c;它们的帧率可达2500fps。加上全局快门像素和低噪声等特性&#xff0c;可满足对高分辨率&#xff0c;高速CMOS图像传感器的需求&#xff0c;适用于科学研究&#xff0c;工业检测和数字影视中高速视频捕捉…

WebRTC实时音视频通话之语音通话设计与实践

一、背景 在移动互联网流量时代&#xff0c;很多业务场景都有音视频通信的需求&#xff0c;比如IM场景&#xff0c;除了文字交流还需要音视频通话进行实时交互。为了帮助58、赶集、安居客等业务线更好的为用户提供服务&#xff0c;节约沟通成本&#xff0c;提升效率&#xff0…

HNU-算法设计与分析-作业5

第五次作业【回溯算法】 文章目录 第五次作业【回溯算法】<1> 算法分析题5-3 回溯法重写0-1背包<2> 算法分析题5-5 旅行商问题&#xff08;剪枝&#xff09;<3> 算法实现题5-2 最小长度电路板排列问题<4> 算法实现题5-7 n色方柱问题<5> 算法实现…

最近很火的粘土滤镜被玩坏了,教你用AI绘画SD免费无限制使用,附教程!

大家好&#xff0c;我是阿威。 最近在小红书上&#xff0c;“粘土特效”、“粘土滤镜”异常爆火&#xff0c;被网友玩出了花。 原来&#xff0c;一款海外修图工具——Remini&#xff08;类似妙鸭相机&#xff09;上线AI滤镜功能&#xff0c;其中就包括粘土滤镜&#xff0c;非常…

WPS如何把多个表格合并到一个表格里面?

注意&#xff1a;此功能需要wps会员。 例如&#xff1a;这里有3个表格。 现在希望合并3个表格到一起&#xff0c;如下图所示。 新建一个表格&#xff0c;打开表格。 选择 开始->工作表->合并表格->整合成为一个工作薄。 弹出对话框&#xff0c;选择添加文件&#xff…

Pencils Protocol Season 2 收官在即,Season 3 携系列重磅权益来袭

此前Scroll生态LaunchPad &聚合收益平台Pencils Protocol&#xff08;原Penpad&#xff09;&#xff0c;推出了首个资产即其生态代币PDD的Launch&#xff0c;Season 2活动主要是用户通过质押ETH代币、组件战队等方式&#xff0c;来获得Point奖励&#xff0c;并以该Point为依…

剪辑师创作必备声音素材,BGM背景音效素材合集1万款

一、素材描述 本套音效包含了全面丰富的声音效果&#xff0c;如动物、运输、人群、天气、航空、军事、Foley声音等&#xff0c;以及世界各地的场景声效等&#xff0c;可能是同类音效中最为全面的&#xff0c;共由三套声音素材组合而成&#xff0c;1、熊猫背景音乐3800首&#…

Java数据类型:引用类型

Java的数据类型可以分为基本数据类型(8种)和引用类型。 本文将深入探讨引用类型的概念、使用方法、工作原理&#xff0c;并通过代码示例加以说明&#xff0c;帮助读者全面理解这一Java编程的核心要素。 1. 引用类型的定义 引用类型&#xff0c;顾名思义&#xff0c;是用于存…