实体机器人实现物体的识别定位抓取

实体机器人识别定位抓取

由于CSDN上关于使用实体机器人实现机器人定位抓取的文章较少,为了回馈该社区对我的帮助,故作此文。

文章目录

  • 实体机器人识别定位抓取
    • 1.机器人介绍
    • 2.视觉系统
      • 2.1 摄像机选择
      • 2.2 视觉识别与定位的实现
    • 3.智能控制系统
      • 3.1 urdf
      • 3.2 手眼标定实现
      • 3.3 任务构建
      • 3.4 系统框图

1.机器人介绍

本文所使用的机器人为新松公司打造的双臂机器人DSCR5,它可支持movel,movej之类的脚本函数,与上位机的通讯主要依靠TCP/IP的方式,机器人在上电后会自动作为socket的服务端等待接受脚本程序,它也会以10hz的频率来反馈真实的关节信息给上位机控制系统。

2.视觉系统

2.1 摄像机选择

本文所使用的摄像机为乐视的深度摄像机,价格经济实惠,性能尚可

2.2 视觉识别与定位的实现

在ros系统内实现视觉识别和定位,主要参考了github上的开源代码,具体实现可参考我另一篇博文。https://blog.csdn.net/xyc99999/article/details/114390141?spm=1001.2014.3001.5501

3.智能控制系统

本部分主要使用了moveit实现路径规划

3.1 urdf

根据真实机器人的参数信息创建urdf文件,并使仿真环境中的机器人关节坐标系和真实机器人的关节坐标系保持一致。用Rviz可视化调试界面观察仿真环境中机器人的运动轨迹和关节位置,对比真实机器人的执行情况,通过调试使两者保持一致。机器人的urdf模型可用ROS的可视化插件检查其正确性。具体实现可参考另一篇博文,https://blog.csdn.net/xyc99999/article/details/112545626?spm=1001.2014.3001.5501。

3.2 手眼标定实现

通过Github上开源代码Easy_handeye可以实现手眼标定,该程序通过tf对机器人位置和跟踪系统输出进行采样。通过OpenCV库的Tsai-Lenz算法实现,计算眼对机器人基坐标系或眼对手的校准矩阵并存储校准的结果。在随后的每次启动时,将校准程序的结果作为tf变换发布在Ros系统中以供后续使用。

实体机器人实现物体的识别定位抓取_第1张图片

该程序订阅了机器人的基座标系到末端执行器的坐标变化关系(tf)和图像话题,打印标定板后,将带有标定板的手臂移动到不同的位置,重复移动数十次便可以得到一个包含外参数的.yaml文件。

将参数文件包含在机器人的launch文件在手眼标定后,摄像机坐标系会可视化的显示在Rviz仿真环境当中,红绿蓝分别代表xyz轴的正方向。摄像机坐标系和机器人基座标系以及各关节坐标系之间的关系也可以通过该界面清晰的观测到。

实体机器人实现物体的识别定位抓取_第2张图片
图中camera_link为摄像机坐标系,base_link为机器人基座标系,其余为各关节坐标系。机器人在仿真环境中的坐标系与真实机器人的坐标系保持一致,使摄像机坐标系位于机器人的基座标系水平距离1.2米,竖直距离1.25米,X轴与水平平面保持45度的夹角。

3.3 任务构建

实验测试手眼系统的有效性,在ubuntu 16.04环境下运行代码,首先需要使用ssh服务连接树莓派并运行夹持器控制程序,此socket程序处于轮询状态中等待上位机发送执行夹持器开合的信号,然后打开用于集合双臂路点的action client程序,然后使用roslaunch 打开机器人的视觉系统launch文件,该终端使用ROS_INFO函数实时的发布左右杯子的实时三维坐标点用于用户观察,输出信息为杯子在摄像机坐标系下的三维坐标点以及转化到机器人基座标系下的三维坐标点,单位均为m。

然后再使用roslaunch打开机器人仿真环境Rviz,最后分别运行左臂的运动规划程序和右臂的运动规划程序完成路点的输出,若是路径规划成功,终端会输出成功的标志,规划失败输出fail并重新进行规划,规划失败的原因在于找不到解,终端会提示用户移动杯子,直到规划成功或者用户终止(ctrl+c)后才停止,将处理后的路点通过socket的方式发送给机器人后机器人便会执行指定任务。

实体机器人实现物体的识别定位抓取_第3张图片

在20次的实验中,抓取杯子实现倒水动作总计成功16次,总结实验失败的原因在于误差修正的方法不够精确,简单修正后的目标点仍然与最佳运动目标点在机器人基座标系下的XYZ方向均有大约1cm的误差。

3.4 系统框图

将深度摄像机采集到的彩色图像信息和深度图像信息处理后得出的物体类别信息和三维坐标信息作为上位机控制系统MoveIt路径规划的信息输入,输出路点给机器人,再将路点信息封装为机器人脚本语言通过TCP/IP发送给双臂机器人,然后将真实关节信息封装为ROS话题(topic)‘/state’,使用上位机控制系统的PID控制节点订阅‘/state’话题形成闭环控制。

本系统所有代码均已上传到GITHUB上,感兴趣的同学可以自取,里面有详细的运行方法

https://github.com/UndergroundCoderNeo/dual_arm_robot/tree/master

你可能感兴趣的:(机器人,深度学习)