机械臂与RealSense相机手眼标定

环境:

本文主要使用kinova mico机械臂 + RealSense D435i深度相机进行了eye to hand的手眼标定。
系统环境:Ubuntu18.04,ROS Melodic
硬件:Kinova mico,RealSense D435i
特别注意:经测试,本方法有效可行,好多博客里说的运行写好的标定launch文件后,只有两个rviz界面,而没有标定的rqt_easy_handeye问题也可以解决。
准备工作:如果ubuntu系统长时间未使用,

一. RealSense D435i安装

完成realsense驱动及其ros接口的安装测试,详细步骤查阅我前面写的ubuntu18.04安装Realsense D435i相机SDK及realsense-ros记录,为后期运行yolo v5作准备

二. Kinova-ROS安装

(1)安装kinova-ros接口

cd ~/cat_ws/src
git clone https://github.com/Kinovarobotics/kinova-ros.git kinova-ros
cd ~/cat_ws
catkin_make

注意:
1.我的工作空间名是cat_ws,
2. 如果git clone出错,是因为网络的原因,可以试着科学上网,或一直重复此步骤,这里就不教给大家科学上网的过程了
3.要通过 USB 访问 arm,要将 udev 规则文件 10-kinova-arm.rules从~/cat_ws/src/kinova-ros/kinova_driver/udev复制到/etc/udev/rules.d/中:

cd cat_ws/src/kinova-ros
sudo cp kinova_driver/udev/10-kinova-arm.rules /etc/udev/rules.d/

(2)安装moveit

sudo apt-get install ros-melodic-moveit
sudo apt-get install ros-melodic-trac-ik

(3)验证机械臂和moveit可用:

cd cat_ws
source /devel.setup.bash
roslaunch kinova_bringup kinova_robot.launch kinova_robotType:=m1n6s300
#重新打开一个终端运行
roslaunch m1n6s300_moveit_config m1n6s300_demo.launch

三、手眼标定环境配置
1、aruco_ros安装

我一般都从github下载压缩包,然后解压到src,这样可以避免下错版本,我下载的都是melodic版本的。
也可以使用下面指令进行安装,但是不建议

    cd ~/cat_ws/srcgit clone -b melodic-devel https://github.com/pal-robotics/aruco_ros.gitcd ..catkin_make

2、vision_visp / visp_hand2eye_calibration安装

    sudo apt-get install ros-melodic-vispcd ~/cat_ws/srcgit clone -b melodic-devel https://github.com/lagadic/vision_visp.gitcd ..catkin_make --pkg visp_hand2eye_calibration

3、easy_handeye安装

cd ~/cat_ws/src    # replace with path to your workspace
git clone https://github.com/IFL-CAMP/easy_handeye
cd ..              # now we are inside ~/cat_ws
rosdep install -iyr --from-paths src
catkin_make

注:此处可能会报错:缺少transforms3d库。

执行命令

pip install transforms3d

但还是报错
在这里插入图片描述解决办法:更新一下pip,再安装

pip install --upgrade pip

然后重新在cat_ws文件夹下执行上述两个步骤:

pip install transforms3d
rosdep install -iyr --from-paths src

这一步是必须的,不然后面无法出现标定界面

四、手眼标定
1.准备aruco码

网址:https://chev.me/arucogen/
选项选择如下:

Dictionary: Original ArUco
Marker ID:582
Marker size:100
生成PDF之后,原尺寸打印

注:Dictionary必须选Original ArUco。ID和size选择其他选项的,要对应文件中修改成对应的参数(ID要是aruco文件夹中包含的ID)。

2.创建launch文件
注意:RealSense D435i相机和机械臂要分别启动,否则会报错!
在~/cat_ws/src/easy_handeye/easy_handeye/launch文件夹下新建kinova_realsense.launch
如使用其他相机,将相机信息和图像改为对应相机发布的信息,将相机坐标系改为对应相机的坐标系。使用其他机械臂的,launch文件编写请参考其他博主进行编写。

<launch><arg name="namespace_prefix" default="kinova_d435i_handeyecalibration" /><arg name="marker_size" value="0.1" /><arg name="marker_id" value="582" /><!-- 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_link"/><param name="camera_frame"       value="camera_link"/><param name="marker_frame"       value="camera_marker" /></node><!-- start the robot --><include file="$(find kinova_bringup)/launch/kinova_robot.launch"></include><include file="$(find m1n6s300_moveit_config)/launch/m1n6s300_demo.launch"></include><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"></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="camera_link" /><arg name="tracking_marker_frame" value="camera_marker" /><arg name="robot_base_frame" value="m1n6s300_link_base" /><arg name="robot_effector_frame" value="m1n6s300_link_6" /><!--disable automatic robot movement--><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>

3.参数修改

(1)将同目录下calibrate.launch文件中的第十三行move_group的default value改为arm;

<arg name="move_group" default="arm"  doc="the name of move_group for the automatic robot motion with MoveIt!" />

2)sudo gedit ~/cat_ws/src/easy_handeye/easy_handeye/src/easy_handeye/handeye_calibration_backend_opencv.py

# 将
import cv2
# 改为
import sys
sys.path.remove('/opt/ros/melodic/lib/python2.7/dist-packages')
import cv2
sys.path.append('/opt/ros/melodic/lib/python2.7/dist-packages')

4.手眼标定

(1)将aruco码固定在joca2机械臂的末端;
(2)启动RealSense D435i深度相机;

roslaunch realsense2_camera rs_camera.launch

(3)启动kinova_realsense.launch;

roslaunch easy_handeye kinova_realsense.launch

(4)配置成功会出现以下三个图;
在这里插入图片描述在这里插入图片描述在这里插入图片描述kinova机械臂Check starting pose不好用,所以第三张图片的内容用不到,我是使用遥控的方法,调整标定板的位置。

如果没有出现image_view,就另打开终端,运行rqt指令。在打开的窗口选择plugins->Visualization->image_View,打开image_view界面。选择/aruco_ros/tracker/result话题,确认能检测到aruco码。

遥控调整机械臂的位置,调整一次,采样一次,采样17次后,点击compute,得到坐标转换关系。

完结 撒花~~

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

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

相关文章

【Python】Python实现串口通信(Python+Stm32)

&#x1f389;欢迎来到Python专栏~Python实现串口通信 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;Python学习专栏 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望…

Js语法学习实战 -数据类型

Js语法学习实战 -数据类型 1. undefined2. null3. Boolean4. Number5. String5.1 常用方法5.2 字符串迭代遍历方法5.3 字符串替换 6. Symbol类型7. Object7.1 基本使用7.2 对象遍历7.3 复制对象方法 8. 数组 - Array8.1 数组的常用方法8.2 数组遍历 9. Function JS语法学习实战…

18.JavaWeb-JWT(登录、鉴权)

1.CSRF跨站请求伪造 跨站请求伪造&#xff08;英语&#xff1a;Cross-site request forgery&#xff09;&#xff0c;也被称为 one-click attack 或者 session riding&#xff0c;通常缩写为 CSRF 或者 XSRF&#xff0c; 是一种挟制用户在当前已登录的Web应用程序上执行非本意的…

postman测试传参格式

postman测试传参格式 创建User实体 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data NoArgsConstructor AllArgsConstructor public class User {private Integer id;private String name; }接口参数是集合 PostMapping("…

第50步 深度学习图像识别:Data-efficient Image Transformers建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;Data-efficient Image Transformers Data-efficient Image Transformers (DeiT)是一种用于图像分类的新型模型&#xff0c;由Facebook AI在2020年底提出。这种方法基于视觉Transformer&#xff0c;通过训练策…

LoRA指令微调——源码解析

目录 1. lit-llama工程2. LoRA部分3. 代码部分4. LoRA模型文件 &#xff08;本次博文的LoRA代码主要基于lit-llama工程&#xff09; 1. lit-llama工程 lit-llama是一个大语言模型的工程&#xff0c;可用于语言模型的训练、测试等优点&#xff1a;很简洁&#xff0c;代码也很容…

健身房综合云管理项目

博主简介&#xff1a; 河南沐斯特网络科技有限公司技术顾问&#xff1b; 天津集创科技有限公司创始人之一兼前端开发工程师/python开发&#xff1b; 第十四届中国服务外包大赛华北地区(九个省加自治区直辖市)三等奖&#xff1b; CSDN官方内容合伙人&#xff0c; CSDN.2023年…

C++_简单模拟实现string的增删查改

目录 一、模拟reserve 二、模拟push_back 三、模拟append 四、模拟operator 五、模拟insert 六、模拟erase 七、模拟find 八、模拟substr 一、模拟reserve 要添加数据&#xff0c;首先要考虑的是扩容。有必要用reserve辅助扩容。reserve的作用就是给一个预期的值作为扩…

2023金九银十大厂 Java 面试八股文大全(整理版)附答案详解

Java 面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这种模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。现如今&#xff0c;Java 面试的本质就是八股文&#xff0c;把八股文面试题背好&#xff0c;面试才有可能表现好。…

STM32 Proteus仿真空气质量检测环境监测苯PM2.5 MQ135温度湿度 -0068

STM32 Proteus仿真空气质量检测环境监测苯PM2.5 MQ135温度湿度 -0068 Proteus仿真小实验&#xff1a; STM32 Proteus仿真空气质量检测环境监测苯PM2.5 MQ135温度湿度 -0068 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 LCD1602显示器DHT11温度湿度多个按键蜂鸣…

Visual Studio 2017下的C++开发环境搭建

Visual Studio 是Microsoft旗下的开发工具包系列产品&#xff0c;是一个基本完整的开发工具集&#xff0c;它包括整个软件生命周期中所需要的大部分工具&#xff0c;如UML工具、代码管控工具、集成开发环境(IDE)等等&#xff0c;是最流行的Windows平台应用程序的集成开发环境。…

ESPHOME max7219点阵时钟

Note ESPHome中max7219digit驱动仅支持驱动点阵显示&#xff0c;对于7段数码管&#xff0c;请参考官方原文MAX7219 7-Segment Display。 本文参考自官方文档MAX7219 Digit Display 硬件连接 由于与MAX7219Digit的通信是使用SPI进行此集成的&#xff0c;因此您需要在配置中使用…