ROS 手眼标定 realsense435i+ur5e

 手眼标定的原理

基坐标系(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_makegit 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.hqwc.cn/news/704366.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java—字节码文件解读

原文 public class ClassIntrucation {public static void main(String[] args) {int i 10;int j i;j;j;} } 查看字节码文件命令 javap -c 字节码文件例如&#xff1a; javap -c ClassIntrucation 结果 public class ClassIntrucation {public ClassIntrucation();Code:…

用c++实现快速排序、最大子段和问题

6.2.2 快速排序 【问题】快速排序(quick sort)的分治策略如下&#xff08;图6-5)。 (1)划分&#xff1a;&#xff08;选定一个记录作为轴值&#xff0c;以轴值为基准将整个序列划分为两个子序列&#xff0c;轴值的位置在划分的过程中确定&#xff0c;并且左侧子序列的所有记录…

Linux连接文件那点事

什么是连接文件 将一个文件和另一个文件建立联系&#xff0c;分为硬链接和软连接&#xff08;符号连接&#xff09;。 硬链接 Linux中&#xff0c;所有的文件都有一个inode&#xff0c;这个东西就是文件的ID号&#xff0c;硬链接的方式就是通过这个inode来产生新的文件名来建…

公共命名空间和RHP

概述 RHP的全称是&#xff1a;the little Robot that Helped me Program&#xff0c;帮我编程序的小机器人。 RHP必然存在&#xff0c;C语言的宏、C的模板&#xff0c;都是RHP&#xff1b;更复杂的例子&#xff0c;是lex和yacc&#xff0c;它们是制作程序的程序&#xff0c;也…

ChatGPT官网5月14日凌晨1点发布会推出最新GPT4o大模型,贾维斯时刻要来了?

就在今天北京时间2024年5月14日凌晨1点中&#xff0c;OpenAI进行了发布会&#xff0c;这次发布会的内容炸裂&#xff0c;一起来看下吧&#xff01; GPT4o多模态大模型发布 首先公开的是GPT4o多模态大模型的发布&#xff0c;相较于GPT-4turbo速度更快&#xff0c;更便宜。我刚开…

Redis数据结构-RedisObject

1.7 Redis数据结构-RedisObject Redis中的任意数据类型的键和值都会被封装为一个RedisObject&#xff0c;也叫做Redis对象&#xff0c;源码如下&#xff1a; 1、什么是redisObject&#xff1a; 从Redis的使用者的角度来看&#xff0c;⼀个Redis节点包含多个database&#xff…

【Linux】常用指令、热键与权限管理

一、常用指令 &#xff08;1&#xff09;ls 功能&#xff1a;列出指定目录下的所有子目录与文件 用法&#xff1a;ls &#xff08;选项&#xff09; &#xff08;目录或文件名&#xff09; 常用选项&#xff1a; -a&#xff1a;列出目录下的所有文件&#xff0c;包括隐藏…

ubuntu在conda环境中使用 pip install -r requirements.txt但是没有安装在虚拟环境中

whereis pip pip listubuntu在conda环境中使用pip install lpips0.1.3 但是安装在了这里 Requirement already satisfied: lpips0.1.3 in /home/uriky/anaconda3/lib/python3.11/site-packages (0.1.3) 就会出现黄色波浪&#xff0c;未在虚拟环境中安装包 解决办法1&#xff1…

css笔记总结2

找到所有的 h1 标签。 选择器&#xff08;选对人&#xff09; 设置这些标签的样式&#xff0c;比如颜色为红色&#xff08;做对事&#xff09;。 ##css基础选择器 基础选择器又包括&#xff1a;标签选择器、类选择器、id 选择器和通配符选择器 ###标签选择器&#xff1a; 标签…

红黑树底层封装map、set C++

目录 一、框架思考 三个问题 问题1的解决 问题2的解决&#xff1a; 问题3的解决&#xff1a; 二、泛型编程 1、仿函数的泛型编程 2、迭代器的泛型编程 3、typename&#xff1a; 4、/--重载 三、原码 红黑树 map set 一、框架思考 map和set都是使用红黑树底层&…

安装ArcGIS失败,提示无效驱动器Error1327.Invalid Drive G错误

安装ArcGIS的时候&#xff0c;出现图中错误该怎么解决呢&#xff1f; Error 1327.Invalid Drive:G:\ 即错误代码&#xff1a;1327。无效驱动器G盘 出现以上问题的原因是 注册表中包含了该硬盘驱动器或网络驱动器的引用 但是在我的电脑中又没有该盘符 一般是已经卸载或者更换…

2024五月母亲节嘉年华活动方案

2024以花之名 致谢母亲簪花趣味亲子五月母亲节嘉年华活动方案-43P 活动策划信息&#xff1a; 方案页码&#xff1a;43页 文件格式&#xff1a;PPT 方案简介&#xff1a; 岁月温柔治愈 母爱闪闪发光 一年一度的PY圈孝子孝女大赛即将到来 本次母亲节&#xff0c;“以花之名…