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

     

     

     

     

     

     

     

     

     

    雪儿言
  • 相关阅读:
    Python入门11 —— 基本数据类型的操作
    Win10安装7 —— 系统的优化
    Win10安装6 —— 系统的激活
    Win10安装5 —— 系统安装步骤
    Win10安装4 —— 通过BIOS进入PE
    Win10安装2 —— 版本的选择与下载
    Win10安装1 —— 引言与目录
    Win10安装3 —— U盘启动工具安装
    虚拟机 —— VMware Workstation15安装教程
    Python入门10 —— for循环
  • 原文地址:https://www.cnblogs.com/weixq351/p/14917288.html
Copyright © 2011-2022 走看看