zoukankan      html  css  js  c++  java
  • 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

     

     

     

     

     

     

     

     

     

    雪儿言
  • 相关阅读:
    小程序云开发(一)
    原来你是这样的"layui"啊
    记个笔记(项目中遇到的关于input的一些操作)
    vue的学习之路 vue-cli与axios
    小程序 上传图片
    文字滚动
    css 隐藏滚动条
    linux基础
    接口测试
    整理python循环,列表,字典笔记
  • 原文地址:https://www.cnblogs.com/weixq351/p/14917288.html
Copyright © 2011-2022 走看看