引言

本文是针对一个实际的机械臂来控制的,而且这个机械臂很便宜,即使是平民玩家也玩得起。
在前面两章,我们介绍了对机械手臂的开环控制,主要是让初学者明白一些简单的东西。
第一章,根据小强给的少的可怜的教程简单的驱动机械手臂。
第二章,自己写一个publisher和一个launch文件,实现对动作的发布和执行,让机械手臂不停地动起来。

下面,我们将进入实际的人工智能模式,利用opencv PCL等工具实现对机械手臂的控制。

一、相关工作

  1. 这个手眼标定是相机在机械手臂上的,但是他介绍了很多理论知识,我们在这部分的理论知识也是照搬他们了,。
  2. 这里有更多的参考,反正在准备之前需要大量阅读资料,想吃现成的基本不可能。
  3. 这个是关于Halcon标定的教学,就4分钟,英文的,但是说的很慢,可以听得懂,主要是人家有字母。

二、数学原理

手眼标定实际上是求解矩阵方程:AX = XB ;
A是摄像机(单目或双目)前后两次空间变换的齐次矩阵 ; B是机械臂末端坐标系前后两次变换的齐次矩阵 ; X为待求解的手眼矩阵;通过多次求解该方程,即可解出X(A 、B矩阵求法如下)

三、基于easy_handeye的相机标定的准备工作

aruco_ros安装

安装这个是为了识别ArUco marker

cd ~/catkin_ws/src
git clone -b melodic-devel https://github.com/pal-robotics/aruco_ros.git
cd ..
catkin_make

vision_visp / visp_hand2eye_calibration安装

cd ~/catkin_ws
sudo apt-get install ros-melodic-visp
cd src
git clone -b melodic-devel https://github.com/lagadic/vision_visp.git
cd ..
catkin_make --pkg visp_hand2eye_calibration

easy_handeye安装

cd ~/catkin_ws/src
git clone https://github.com/IFL-CAMP/easy_handeye
cd ..
catkin_make

打印ArUco marker

在线生成地址:https://chev.me/arucogen/
注意,一定要在Dictionary中选择而Original Arcuo

然后找个打印机按照原尺寸打印下来,注意,打印下来要自己用尺寸量一下尺寸,后面有用。
同样,把这个码贴在一个硬纸板上。

四、基于easy_handeye的相机标定的准备工作

首先看看进行 手眼标定的机械臂的启动文件

<?xml version="1.0"?>
<launch>
<!-- start action server node  --><node pkg="probot_grasp" name="qidong_robot" type="myrobot_driver" />
<!-- start robot model and  rviz --><include file="$(find lobot_arm_moveit_config)/launch/demo.launch"/>
<!-- srart the USB Serial port --><node pkg="rosserial_python" name="qidong_chuankou" type="serial_node.py" args="/dev/ttyUSB0"/><!-- start USB camera --><!-- start the calibration publish--></launch>

写一个luanch文件,直接启动所有程序

文件名:calib_usb_lot.launch

<?xml version="1.0"?>
<launch><arg name="namespace_prefix" default="lobot_arm_usb_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"/><arg name="marker_id" doc="The ID of the ArUco marker used" default="100"/><arg name="eye" default="left"/> <!-- start the usb camera --><!--include file="$(find freenect_launch)/launch/freenect.launch" ><arg name="depth_registration" value="true" /></include--><include file="$(find detection_color)/launch/usb_cam.launch" /><!-- start ArUco --><node name="aruco_tracker" pkg="aruco_ros" type="single"><remap from="/camera_info" to="/usb_cam/camera_info" /><remap from="/image" to="/usb_cam/image_raw" /><param name="image_is_rectified" value="true"/><param name="marker_size"        value="0.0967"/><param name="marker_id"          value="200"/><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 probot_grasp)/launch/startup_robot.launch" /><!--arg name="limited" value="true" /><arg name="robot_ip" value="192.168.0.21" /--><!--/include><include file="$(find ur5_moveit_config)/launch/ur5_moveit_planning_execution.launch"><arg name="limited" value="true" /></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="false" /><arg name="tracking_base_frame" value="camera_link" /><arg name="tracking_marker_frame" value="camera_marker" /><arg name="robot_base_frame" value="base_link" /><arg name="robot_effector_frame" value="link5" /><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>

我们采集的二维码的ID是200,尺寸大小是9.6厘米。

        <param name="marker_size"        value="0.0967"/><param name="marker_id"          value="200"/>

说明一点

在采集数据是,可以自动控制机械臂的位姿,也可以自己手动调节位姿。
由于我的程序无法自动调节机械臂位姿,也就是没法用Next pose。所以我在rviz中自己调节了。
数据采集最少17个点,我的原则是越多越好。

启动标定程序

roslaunch probot_grasp calib_usb_lot.launch

启动之后,除了rviz之外,还有两个窗口,如下:

正常来讲,在那个大的窗口上是可以打开
/aruco_tracker/result的,从而显示识别二维码的窗口。但是我这个没有,因此我们需要手动打开。
在工作空间下打开一个终端,输入:

rosrun image_view image_view image:=/aruco_tracker/result

然后就出现如下窗口了

首先,对于这个窗口,我没法使用next pose。因此我就不操作这个窗口了。

我们主要在在rviz下面,通过这个选择窗口,控制机械臂位姿,从容选择合适的位姿。

在选择合适的位姿后,合适的位姿就是摄像头可以识别出二维码ID。
然后点击take sample
点击一次,移动一次机械臂

采集第一个样本是这样的

然后依次移动机械臂运动,在点击take sample

我最终采集了35个位姿

然后点击compute

右侧计算出了最终的坐标转换关系。
然后点击save
这个时候,我们到终端看一下,可以找到转换矩阵的保存位置

这个时候,我们需要到home文件夹下面的,ros下面去寻找文件。由于.ros是隐藏文件,因此我们需要按Ctrl+H显示隐藏文件。

进入.ros下面
找到lobot_arm_usb_handeyecalibration_eye_on_base.yaml文件

这时,我们在机械臂的启动文件里添加启动摄像头和发布标定信息的节点
修改后的相机启动文件startup_robot.launch如下:

<?xml version="1.0"?>
<launch>
<!-- start action server node  --><node pkg="probot_grasp" name="qidong_robot" type="myrobot_driver" />
<!-- start robot model and  rviz --><include file="$(find lobot_arm_moveit_config)/launch/demo.launch"/>
<!-- srart the USB Serial port --><node pkg="rosserial_python" name="qidong_chuankou" type="serial_node.py" args="/dev/ttyUSB0"/><!-- start USB camera --><include file="$(find detection_color)/launch/usb_cam.launch" /><!-- start the calibration publish--><node name="link1_broadcaster" pkg="tf" type="static_transform_publisher" args="-0.0038246100436423597 -0.0023318449115560143 0.13466109184238712 0.9882889926593997 -0.09317833339710963 0.0527325627198183 -0.10872875425850478 base_link camera_link 100"/></launch>

至此,相机外参标定成功

实际的机械臂控制(7)USB相机与小强机械臂Lobot机械臂的标定方法相关推荐

  1. 绝了!多个激光雷达和相机的快速且鲁棒的外参标定方法(代码开源)

    文章:Fast and Accurate Extrinsic Calibration for Multiple LiDARs and Cameras 作者:Xiyuan Liu , Chongjian ...

  2. 机械臂控制C语言程序,51单片机的6自由度机械臂 16路舵机控制 源码

    /*************************************************************************************************** ...

  3. 内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangdashi888/article/details/51356385 1. 相机参数是三种不同的 ...

  4. 【从零开始的ROS四轴机械臂控制】(四)- ros、gazebo与opencv,图像处理节点

    [从零开始的ROS四轴机械臂控制(四)] 七.图像处理节点 1.节点功能与实现方法 2.iamge_process 相关程序 部分程序解释 3.节点运行与测试 七.图像处理节点 1.节点功能与实现方法 ...

  5. 【从零开始的ROS四轴机械臂控制】(三) - 为机械臂添加摄像头和夹爪、解决gazebo模型抖动、使用gazebo建立sdf模型

    [从零开始的ROS四轴机械臂控制(三)] 五.在gazebo中添加摄像头 1.修改arm1.gazebo.xacro文件 2.修改arm1.urdf.xacro文件 3.查看摄像头图像 六.为模型添加 ...

  6. 【从零开始的ROS四轴机械臂控制】(二) - ROS与Gazebo连接,Gazebo仿真及urdf文件修改

    [从零开始的ROS四轴机械臂控制(二)] 四.urdf文件及gazebo仿真 1.simple_arm示例 (1)config文件夹 (2)launch文件夹 (3)meshes文件夹 (4)urdf ...

  7. Ubuntu18.04 + kinova joca2机械臂 + RealSense D435i深度相机进行eye to hand手眼标定

    文章目录 前言 一.前期准备 1. RealSense D435i安装 2. Kinova-ROS安装 二.手眼标定环境配置 1. visip 2. aruco_ros 3. easy_handeye ...

  8. 六轴机械臂与单目相机的标定和视觉伺服的理解

    参考: 六轴机械手与相机的手眼标定https://blog.csdn.net/Isaac320/article/details/80078579 最详细.最完整的相机标定讲解https://blog. ...

  9. aubo机械臂控制方式

    操作aubo机械臂的方法主要有三种: 一.使用aubo官方提供的示教器来操作.示教操作的本质是,先演示一遍操作过程,过程中机械臂在必要的路径节点时记录机械臂各个joint的关节角的值.用这记录的一系列 ...

最新文章

  1. php 结构体_PHP底层原理知其然知其所以然
  2. js new Date()不带时分秒时,时间变了 问题解决
  3. B-Tree索引在sqlserver和mysql中的应用
  4. 医院信息化建设历程(5)互联互通的数字化医院阶段
  5. android倒计时功能,Android 实现列表倒计时功能
  6. java清理语句,java – 如何在不使用准备语句的情况下对SQL进行清理
  7. 刷新SOTA ! 视频恢复的重中之重:时间对齐!
  8. 攻防世界逆向——key
  9. 以图搜图:Python实现dHash算法
  10. 使用supervisor / systemctl nginx uwsgi 运行odoo
  11. hdu 1394 Minimum Inversion Number(树状数组)
  12. PS制作gif表情包
  13. 电商宝:做最懂电商卖家的财务管理“小秘书”
  14. 企业联合体的形式_企业组织形式的概念与类型怎么分?
  15. 台式计算机快捷键大全,台式电脑截图快捷键是哪一个?(电脑快捷键使用大全)...
  16. Axure RP9 水平滑动效果制作
  17. 等保是强制的吗?企业不办等保有啥处罚?
  18. Oracle学习笔记:使用replace、regexp_replace实现字符替换、姓名脱敏
  19. 软件设计的基本原理和流程
  20. 保健中的深度学习nlp技术用于决策

热门文章

  1. docx poi 原理_TDS-基本原理.docx
  2. python获取图片分辨率或大小
  3. bashrc文件的作用
  4. U盘故障的详细维修方法
  5. 【宝信IPLAT4J.V6】表格Grid的标题行合并和列合并写法
  6. FreeSWITCH 电话会议(ESL实现)
  7. 腾讯王者服务器性能,性能不够腾讯来凑 OPPO合作的不止王者荣耀
  8. the bundle at bundle path is not signed using an apple submission certificate
  9. 轻量化的分布式服务框架 Hasor-RSF 盘点
  10. IF以及LIF神经分析