MoveIt编程实现机械臂自主避障运动(六)

MoveIt编程实现机械臂自主避障运动(六)

调研结果如下: Moveit在规划路径的时候考虑如何躲避障碍物的问题,Moveit可以实时的检测空间中的障碍物,并 规划出轨迹绕过障碍物。

在场景中加入障碍物方式:

 

 

 

在Moveit中 具有一个规划场景监听器的模块结构,可以用来检测机器人场景中是否存在障碍物。

障 碍物有几种方式可以告诉监听器:

1. 通过Rviz界面的形式添加。

  1. 通过机器人的外部传感器,例如通过Kinect深度相机实时检测到的信息加入到场景中。

  2. 通过程序(C++/Python)编程进行添加。

     

机械臂避障视频:

https://www.youtube.com/watch?v=I0V4IsXn8bo

https://www.youtube.com/watch?v=jXBV7_y4150

 

1、通过Rviz界面的形式添加

 

1、在Rviz中,有Scene Objects选项卡,有Scene Objects选项卡,可以添加场景物体(机械臂);

2、再自己添加一些模型(障碍物)进来,点击Publish Scene将障碍物的位置发布出去;

3.拖拽机械臂,使机械臂碰撞障碍物,就会发现机械臂发生碰撞的部分变成了红色;

  1. 再次进行规划的时候,机械臂就会自动避开障碍物。

这种方法主要是 书籍《ROS机器人开发实践》和 古月居视频中介绍的方法。

2、通过程序(C++/Python)编程进行添加

当机械臂抓取到某个物体之后,它的轨迹进行规划的时候,需要将抓取得到的物体当作机械臂本身 的一部分,必要的时候要考虑抓取到的物体也不能发生碰撞。

 

打开模型,并进行附着物避障,是通过命 令 rosrun demo demo.py文件 ,即让抓到的物体也会进行避障,.py文件需要自己编写,主要涉及 关键API:

1、tool附着到机器人的终端,附着某物体到机器人上

scene.attach_box(end_effector_link, 'tool', p, tool_size)

将 end_effector_link为机械臂终端的坐标系

'tool'是要附着的对象 p为附着物的位置

tool_size为附着物体的尺寸

 

2、添加障碍物 scene.add_box('table', table_pose, table_size)

'table'是要添加的障碍物对象

table_pose为障碍物的姿态信息

table_size为障碍物的大小

 

3、通过机器人的外部传感器,例如通过Kinect深度相机实 时检测到的信息加入到场景中

大量调研和查阅知乎博客 ,看youtube视频,有了解到:Kinect深度相机实时检测到的信息,深度 图像和点云数据 真实的Kinect相机如下图:

 

 

 

 

 

真实相机:Kinect深度相机 ; 仿真相机 Camera ,在RVIZ仿真器里面有。

 

OpenCV :是一个插件,里面包含了许多的图像处理和视觉信息的算法,可以通过命令进行安装; CvBridge:是ROS提供的package,v_bridge用于ROS图像和OpenCV图像的转换

 

流程如下:

1、传感器 摄像头(比如Kinect深度相机摄像头)拍摄的RGB图像数据,通过回调函数转为OpenCV 中的Mat数据格式;

2、OpenCV把图像信息转为CvBridge格式;

3、CvBridge格式可以转化为ROS 图像信息;

4、OpenCV和ROS之间可以进行图像信息的相互转换 需要注意的是ROS中发布的消息是不支持图片的,所以需要image_transport(image_transport实 例,用来发布和订阅ROS系统的图像)的支持。 但是image_transport实例包和openCV的格式不兼容,所以需要cv_bridge做格式变换。最后照相 机发布的消息类型是sensor_msgs包中的。

 

cv_bridge用于ROS图像和OpenCV图像的转换

 

  1. ROS图像消息转换为OpenCV图像的函数

cv_bridge源码中执行转换的类为CvImage,该类包含了OpenCV的Mat格式的图像、该消息的 encoding以及ROS header。 当cv_bridge将ROS的图像消息转换为OpenCV图像格式时都是通过CvImage类实现的。一般来 说,cv_bridge提供了两种方式转换为CvImage类,分别为复制(copy)和共享(share)。

  1. OpenCV图像转换为ROS消息的函数 在CvI

    mage类中执行的OpenCV图像转换为ROS消息的成员函数为 toImageMsg()。

     

深度图像和点云:

 

 

 参考博客:https://blog.csdn.net/zzu_seu/article/details/90642477

 

 

 

 

 

 

 

 

 

posted @ 2021-06-22 10:11  白雪儿  Views(2104)  Comments(0Edit  收藏  举报