fetch实现建图、导航、语音、图像处理、机械臂抓取

  • 实验内容介绍
  • 技术实现
    • 1. 建图(Karto_Slam)
    • 2. 语音识别(Pocketphinx)+导航(amcl)
    • 3. 图像识别(YOLO V3)
    • 4. 机械臂(Moveit!)
  • 实验总结

实验内容介绍

fetch是硅谷机器人公司FetchRobotics的仓储机器人,Fetch的机器人可以根据订单把货架上的商品拿下来,放到另一个叫Freight的机器人里运回打包
本次实验使用fetch机器人,完成了语音识别(Pocketphinx)、建图(Karto_Slam)与导航(amcl)、图像处理(YOLO V3)、机械臂抓取功能(Moveit!),其中将语音识别和建图与导航进行了结合,通过识别关键词"Move",实现机器人自动导航至指定地点,基于建图生成的地图完成机器人的自我位置的标定,通过yolo识别物体并且实现机械臂抓取物块的功能。

技术实现

1. 建图(Karto_Slam)

Cartographer用分支定界原理加速求解过程(相对于暴力求解),进行深度有限优先搜索,CSM计算得到初始最高分数,确定深度,分支就是进行拓展,定界就是剪枝。提高运算效率。

先有一定数量的laser scan构建submap,由submap拼接成地图,所谓的回环检测,就是间隔一定数量的扫描进行一次所有submap的图优化(SPA,运用了分支定界原理进行加速)。
功能实现
在开启机器人模型及gazebo世界后,打开建图,使用rviz进行可视化,通过键盘控制,在地图中进行移动,保证机器人能够观测到地图中的每一个角落,并且环绕物体四周,保证建立物体的完整图像
在调用rviz之前,要先进入fetch机器人的navigation文件中,从而调用Karto_Slam方法进行建图

//建图可视
roscd fetch_navigation/config
rviz -d navigation.rviz

在建图完成后要进行地图保存,将其保存到/tmp文件夹

rosrun map_server map_saver -f /tmp/fetch_map

问题解决

  • 建图缓慢且误差大
    在一开始使用的是gmapping方法,建图非常满,而且起始位置以及建图路径都对结果影响极大,查询后了解到gmapping严重依赖里程计,无法适应无人机及地面不平坦的区域,无回环(激光SLAM很难做回环检测),大的场景,粒子较多的情况下,特别消耗资源。于是换成了Karto_Slam
    在更换建图方法后,建图成功率大大提高,偶尔会出现失败的情况,推测原因为在没有建立好周围环境的情况下,在内部建图出现视深偏差,尽量保证贴着墙体走可以提高成功率
  • 文件保存位置
    默认保存位置为/tmp文件夹,但在重启后文件会清空,导致无法调用地图,在生成后复制到其他位置即可

2. 语音识别(Pocketphinx)+导航(amcl)

软件包提供对CMU Pocket Sphinx语音识别器的访问。它使用gstreamer自动将传入的音频分割为要识别的语音,并提供启动和停止识别的服务。

功能实现
下载好相关依赖后,通过调用软件包中的launch文件可以开启语音识别,此时电脑开启麦克风,软件包将会对关键词进行识别
为了在识别到关键词后作出自定义动作,我们编写了一个py文件,通过发布ros相关节点,对机器人进行姿态控制,为了加深ros应用并更好的体现自动控制,实验中将语音识别与导航进行了结合,规定关键词Move为导航触发词,当软件包识别到Move后,将小车移动到位置2.95,3.3,0,部分代码如下

#语音py文件中对识别到的关键词进行自定义操作
elif detected_words.data.find("move") > -1:print('move')nv2.main(2.95,3.3,0)# 导航文件中的main函数def main(X,Y,theta):X,Y,theta = float(X),float(Y),float(theta)target_pose=[X,Y,theta]parser = argparse.ArgumentParser(description='move_base navigation')parser.add_argument('--nonblocking', help='Send the goal in non-blocking mode', action='store_true')args = parser.parse_args()nav = NavToPoint()nav.goto(target_pose,not args.nonblocking) # 这是主要的移动函数,具体内容请看源码

问题解决

  • 语音识别不准确
    在调用pocketphinx软件包时,会出现关键词检测不到的情况,在测试过程中发现是发音的问题,通过使用英语软件发音即可
  • 语音与导航的连接
    在测试时,语音和导航的py文件是各自独立的,这样就没有办法通过语音驱动机器人导航运动,通过阅读代码,发现可以在语音py文件中识别到关键词后,调用导航的py文件,根据上文的代码部分,即可实现二者功能的连接,但是在运行时出现了错误
    提示
【ROS_bug】rospy.init_node() has already been called with different arguments

该问题的错误是因为一个 python 文件中只能初始化一个节点,而语音和导航py文件都各自初始化了节点,所以导致运行错误
修改

# 直接在语音的py文件中初始两个节点
rospy.init_node("asr_control",'navtopoint')
  • 导航至目标位置后姿态角与设定不符
    通过代码可以知道,设定的thata角为0,但是在实际运行的过程中,机器人到达指定的X,Y后总是出现很大的姿态偏角,影响到后续的物块识别以及机械臂抓取
    进行相关了解后,机器人在导航的过程会不断识别周围的物体进行自我定位,如果可识别特征较少,将可能出现错误导航以及长时间位置寻找的过程,于是本次实验在初始的地图上添加了新的方块以便特征读取及位置定位,但仍需一定时间稳定位置,下面是添加方块前后的建图

3. 图像识别(YOLO V3)

YOLO(You Only Look
Once)将整个图像输入到网络中,可以直接预测目标位置和对应的类别.这使得YOLO推理速度很快并且保持较高的精度.

功能实现
本次实验采用darknet_ros网络,通过launch文件直接调用yolo目标检测
roslaunch darknet_ros darknet_ros.launch
问题解决

  • darknet_ros编译错误
    在进行catkin_make编译后无法寻找到launch文件,添加路径、删除build文件夹方法都失败,不太清楚出了什么问题,最终解决是将darknet_ros放置到其他文件夹进行编译并添加全局路径
  • FPS只有2-3
    通过修改void *YoloObjectDetector::detectInThread()中的内容即可修改FPS,修改内容根据具体情况添加

4. 机械臂(Moveit!)

使用机械臂实现了对物块抓取及摆放功能

功能实现
基于Moveit,识别视野内的物体,如果发现目标,则展开机械臂对其进行抓取,抓取后中空中进行一定程度的转动,随后放置回桌子上
问题解决

  • 安装Moveit提示Could not find a package configuration file provided by “manipulation_msg”
    在对应的src文件夹下git clone缺少的文件
  • 抓取失败
    在实验的过程中,出现了多次抓取失败的例子,总结有以下原因:

    1. 视野内未发现物块
      该方法是因为机器人位置的问题,要注意将机器人移动到物块面前,通过rqt_image_view来查看机器人的视野,从而确定位置是否可以进行抓取
    2. 机器人在移动机械臂的过程出现了位置移动
      在实验中,出现因为移动机械臂导致了碰撞,使得机器人发生了位移,从而视野中丢失物块,解决办法同上
    3. 因物体物理属性导致抓取失败
      如果物体过大或者质量过大,都会导致失败,前者超出fetch机器人机械臂的抓取宽度,则无法抓取;后者在抓取的过程中受重力的原因可能会导致物体掉落

实验总结

在ros平台下,需要很多的配置以及命令调用,安装相关依赖以及项目部署的时候,会有各种各样的问题,不同的设备也会有不同的情况,首先是需要有耐心和细心去查看问题,并且要利用好网络上的资源,了解别人的解决办法,从而解决自己的问题
单个功能的实现是比较简单的,但是当多个功能综合应用的时候,会出现很多的问题,比如在本次实验中语音导航后进行机械臂抓取就会遇到视野丢失物块的问题,除了多次重复实验,还要去注意为什么会出现定位偏差,为什么位置确认耗时较长,这些都会影响到整体程序的运行
将网上的资源进行调用时,要学会明白其中的原委,这样在完成自己需求的特定功能时,会知道如何修改,建议可以多花一些时间去阅读源码,这样既可以了解别人的优秀编写,也更方便二次开发,将开源的利发挥的更大

ros机器人gazebo仿真相关推荐

  1. 遨博协作机器人ROS开发 - Gazebo仿真与控制真实机器人

    目录 一.简介 二.环境版本 三.Gazebo仿真 1.gazebo使用 2. 仿真遨博机械臂 四.ROS控制真实机器人 1. 网络配置 2. 真实机器人控制 3. 真实机器人运动速度调节 五.小结 ...

  2. ROS机器人导航仿真(kinetic版本)

    准备工作: ubuntu 16.04系统;ROS kinetic版本;ROS包turtlebot,导航包rbx1,模拟器arbotix,可视化rviz 1.安装ubuntu 16.04系统与安装ROS ...

  3. 【ROS仿真实战】Gazebo仿真平台介绍及安装方法(一)

    文章目录 前言 一.Gazebo简介 二.Gazebo仿真平台的基本概念 三.Gazebo仿真平台的安装方法 四.总结 前言 Gazebo仿真平台是一个广泛应用于机器人研发.测试和教育等领域的开源软件 ...

  4. ROS机器人程序设计(原书第2版).

    机器人设计与制作系列 ROS机器人程序设计 (原书第2版) Learning ROS for Robotics Programming,Second Edition 恩里克·费尔南德斯(Enrique ...

  5. 【实战+源码】RGB-D移动抓取服务机器人(四)——完结篇(ROS机器人、系统设计、运动规划、目标定位)

    毕业设计已经完成三个多月了,四月底答辩结束,上周办完离校手续!善始善终,最后一篇结束把这个题目告一段落! 完整代码github托管地址:https://github.com/pengxinyi-up/ ...

  6. Gazebo仿真记录 Turtlebot3 + D435i

    在Gazebo环境中在Turtlebot3上添加深度相机D435和IMU. 步骤 1.准备工作 创建ROS工作空间,下载turtlebot3相关代码和realsense2_description 模型 ...

  7. ROS(indigo)机器人操作系统学习有趣丰富的Gazebo仿真示例evarobot

    通过网页快速了解Linux(Ubuntu)和ROS机器人操作系统,请参考实验楼在线系统如下: 初级教程可参考:https://www.shiyanlou.com/courses/854 邀请码:U23 ...

  8. ROS入门(八)——仿真机器人四(Gazebo+Rviz+雷达、摄像头、kinet仿真显示)

    所用的学习链接: [奥特学园]ROS机器人入门课程<ROS理论与实践>零基础教程P278-288 [以上视频笔记见http://www.autolabor.com.cn/book/ROST ...

  9. 【ros学习】14.urdf、xacro机器人建模与rviz、gazebo仿真详解

    一.起因 学校的这学期课程是ros机器人开发实战,我们学习小组也要搞一个自己的机器人模型,我们组又叫葫芦组,所以我就做了个葫芦形状的机器人,虽说有点丑,本来想用maya建模再导入的,奈何不太懂maya ...

最新文章

  1. Kubernetes对象模型
  2. hdu 5339 Untitled【搜索】
  3. 使用Powershell来修改Hyper-v Server本地管理员密码为永不过期
  4. 【原创】StreamInsight查询系列(三)——基本查询操作之过滤
  5. Channel shutdown: channel error; protocol method
  6. java线程future_Java中多线程对运行结果怎么利用future获取
  7. vue中的静态资源打包
  8. 多线程压测_京东618压测时自研中间件暴露出的问题,压测级别数十万/秒
  9. Mesos和Marathon下容器无法正常部署可能的原因
  10. iOS应用开发应遵循的10条设计原则
  11. 矩阵分析与应用课程资料
  12. VC++2010Express下载
  13. Checkra1n 越狱常见问题大全
  14. python aic准则_在Python中手工计算Akaike信息标准(AIC)
  15. 索尼MUC-M2BT1换电池+爆改
  16. oa处理会签流程图_关于合同会签OA流程使用说明
  17. (一)PBR材质理论
  18. 陶哲轩实分析 习题 12.5.12
  19. 万万没想到!TCP/IP 协议会有这么多漏洞
  20. c语言负2是偶数吗,负2是偶数还是奇数 奇偶数有正负之分吗

热门文章

  1. 【阿里云总监课】存储系统设计——NVMe SSD性能影响因素一探究竟
  2. 数据结构和算法(Java),上
  3. TS中ts和.d.ts文件的区别
  4. Win7环境下STAF安装STAX遇到的问题及解决方法
  5. 大二下学期ACM比赛总结
  6. HIT-2022年春季学期《软件构造》Lab 1实验心得
  7. it职业生涯_如何通过这些有用的网站提升您的自由职业生涯
  8. vue父与子组件,子与子组件间的方法调用和通信
  9. 微信公众平台开发(34)微相册
  10. c atol()函数_atol()函数以及C ++中的示例