0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ROS的运用开发详解

麦辣鸡腿堡 来源:CSDN博客 作者:lwlv 2023-11-21 18:17 次阅读

ROS的运用开发

一般来说市面上机器人的开发分两个主流,一个是移动机器人(AGV),主要运用场景是酒店送餐,餐厅导航+送餐,仓库物流,银行业务处理等;一种是协作机器人,六自由度,用于抓取、焊接等。

当然还有这两种的结合形成可搬运加抓取的复合机器人,一些小的方向还有人形机器人、无人机等。

以开发AGV为例 ,对于AGV来说尤其是室内运用的场景,最重要的就是地图构建和导航,也就是SLAM技术。

这里面主要涉及三大块:

1、建图,比如gmapping,hector_slam,cartographer这几个算法,通过采集点云数据进行地图构建。这里的点云数据一般是一个特定平面的,如何sick tim571、倍加福R2000、镭神这些传感器都能实现该功能,并提供好了对应的ROS包,或者通过kinect、realsense三维传感器将其转换为二维的数据。不管是哪种传感器,不同于接口

激光雷达一般是网口形式,和运行的Ubuntu电脑组成一个局域网,而三维点云一般是通过USB或者串口通信使ROS获取到数据。

所以使用ROS的这点好处就在于,不用太关注于硬件接口甚至物理接口的定义。

对于ROS使用建图包,我在《ROS中slam_gmapping、map_server源码解读及其librviz的使用》中有详细说明。

2、定位, 常用的是AMCL算法,也就是针对上述建图得到的机器人当前在地图中的位置坐标信息,因为是二维地图,得到的数据是x,y坐标和方向角。

AMCL包一般和导航的包是合在一起的。这里单独列出来是为了说明还有其他定位方式,比如光反射导航定位、超声波导航定位、wifi定位等,有篇总结比较好的博客《自主移动机器人常用的导航定位技术及原理》可以参见一下。

3、导航和路径规划,也就是move_base包,里面还包含局部路径规划,全局路径规划,dwa路径搜索和costmap_2d。关于这些包之间的调用,网上有太多这样的图,我就没必要再贴一遍了。

costmap是David V. Lu提出的算法,即代价地图,其核心思想是对所建立的地图包括机器人本身都要进行一定的膨胀,也就是预留一定空间要考虑机器人的体积大小,不然行驶时,尤其是转弯,机器人会碰撞到障碍物。

关于costmap的应用,尤其是添加自己想要的layer,贺一家博士有很好的实践,参见《ROS 教程之 navigation :在 catkin 环境下创建costmap layer plugin》。

有了上述这几个包,机器人就能跑起来了吗?答案肯定是否定的,不过至少这些包可以在Gazebo和rviz中仿真了,看起来效果还是挺不错的。

不过仿真和实际差别还是太大了,比如真实环境中激光雷达采集到的数据,真实环境中所建立的地图等。 此外,搭建一个小型的机器人系统从硬件选型到调试成功也会经历一段非常痛苦的过程

为了快速上手或者验证,可以从一些现成的机器人入手,比如TurtleBot。不过这些更多适用于实验室研究,比如算法的验证等。对于真正的开发机器人产品,也具有一定的参考价值。

一般而言,AGV的系统架构图如下:

图片

可以看到主要核心控制是运行在Ubuntu的工业级电脑上,激光雷达基本是现成的模块,语音系统一般是选配的模块,这种模块也挺多,比如科大讯飞等,根据项目需求来。

同等重要的还有传感器采集模块,也就是ARM层或PLC层,这一层主要用于采集外围的数据包括电机驱动并上传数据给ROS层,所以这个工作量也非常大,涉及到的通信协议也比较多,就相当于一个智能节点。

至关重要的就是ARM层和PC之间的通信,无论是传输速率还是协议的稳定性都有待大量的验证,曾经因为通信协议的问题导致的粘包也是相当难定位的。

所以尽量不要采用自有协议,用稳定的modbus 232,CANopen总线等是比较好的选择。关于和硬件通信方面的问题,引用一个老外的话,我觉得遵循这个原则是比较稳定的,尤其是在加载硬件初始化的过程中。

其次,AGV一般是两轮或者四轮的结构,驱动器和电机的选择也是非常重要的,不然里程计导致的累计误差会影响建图和定位精度。

现在有专门只做AGV控制器公司,也就是图片中的ROS层和ARM层这一块(注:就不一定是采用的ROS框架了),控制器本身就预留有IO,还能适配某些485协议和控制某些型号的电机驱动器,这些模块直接插上去就可以用。

此外,对外还提供了各种各样的接口(TCP server,web,modbus master等)用于二次开发。于是客户更侧重于应用层,也就是HMI这一块,比如手机端应用,web端显示,PC端的软件等,这种二次开发一般采用C/S或者B/S的架构。

我看到一个比较好的AGV调试人机交互界面例子是Ros_Qt5_Gui_App(在GitHub上搜ros qt gui就排在我前面一位)。

最后就是结构问题,我不知道是不是因为腾讯、阿里巴巴、网易、字节跳动等这些互联网巨头公司的影响,我们越来越看重软件的开发,也就是ROS层和嵌入式层的开发。

其实对于制造业产品,工业设计和结构设计非常重要,软件设计再好,结构没设计到位哪怕是一点尺寸的偏差都会导致机器运行不稳定。在ROS中urdf模型文件的定义也跟设计的结构有关(尺寸、位置等)。

另外,结构设计需要考虑是否容易安装、维护、部件的更换、AGV平衡性、精度、美观等等,也不是一件容易的事。

关于开发的调试,ROS上手容易但调试难,一是缺少单步调试,我目前看到的方法是使用GDB调试器,不过感觉还是挺麻烦的,用得人不太多,更多的bug调试还是通过日志查看的。

二由于ROS中设计的各种通信接口,串口调试工具,TCPView,wireshark,CAN analyzer等都是常用的工具。三是window和linux下相互间远程,相互间传文件等,从中可以学到不少东西。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    206

    文章

    27043

    浏览量

    201423
  • 移动机器人
    +关注

    关注

    2

    文章

    718

    浏览量

    33316
  • ROS
    ROS
    +关注

    关注

    1

    文章

    271

    浏览量

    16682
收藏 人收藏

    评论

    相关推荐

    系统镜像Ubuntu_ROS2中ROS2是什么意思,带有ROS2开发环境吗?

    请问一下,百度文库资料里面,下图所示的系统镜像Ubuntu_ROS2中ROS2是什么意思,带有ROS2开发环境吗?与前面4GB版本的镜像有什么区别?
    发表于 03-01 23:06

    【Toybrick RK3399Pro AI开发板试用体验】Fedora系统安装ROS

    本帖最后由 colgame 于 2019-7-16 21:34 编辑 1、在Toybrick RK3399Pro开发板刷linux单系统Fedora固件,参考Toybrick
    发表于 07-07 17:36

    在Android中使用ROS

    由于ROS提供了Android的对应的开发库,我们可以方便的在Android中开发相应的ROS客户端程序。下面介绍一下在Android中使用ROS
    发表于 05-16 19:16

    什么是ROS?如何学习ROS

    什么是ROS?如何学习ROS
    发表于 11-11 07:21

    ROS简介

    目录一、ROS简介1、什么是ROS2、ROS产生、发展和壮大的原因和意义二、在Ubuntu系统中,安装对应版本的ROS软件1、确定Ubuntu配置2、添加
    发表于 12-17 08:24

    什么是ROSROS产生、发展和壮大的原因和意义

    机器人操作系统(ROS)入门(嵌入式系统应用开发)一、ROS 基本问题1. 什么是 ROS2. ROS 产生、发展和壮大的原因和意义二、安装
    发表于 12-17 06:08

    分享一份RK3308开发ROS使用手册指南

    1、ROS使用指南ROS ( Robot Operating System, 机器人操作系统) ,提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、函数库、可视化
    发表于 08-16 18:04

    ROS让机器人开发更便捷,基于RK3568J+Debian系统发布!

    库的支持,ROS系统提供丰富且功能强大的机器人算法库,如坐标变换、运动控制等。机器人开发者可根据开发需要,简单快捷地调用合适的算法库,以提高开发效率,加快
    发表于 11-30 16:01

    基于FreeRTOS的micro(微型)ROS

    。 一、关于ROS ROS:Robot Operating System,,即机器人操作系统。 和普通OS不一样的是,ROS主要是针对机器人,是基于操作系统之上,提供一系列程序库和工具以帮助软件
    的头像 发表于 09-25 14:16 1988次阅读
    基于FreeRTOS的micro(微型)<b class='flag-5'>ROS</b>

    面向ROS开发者的NVIDIA AI Perception

    NVIDIA这一最新宣布,向ROS开发者社区提供整套感知技术。
    发表于 09-29 10:36 1957次阅读
    面向<b class='flag-5'>ROS</b><b class='flag-5'>开发</b>者的NVIDIA AI Perception

    ROS/ROS 2 介绍

    替换之的目的。而学术界,学生和老师们为了减少重复造轮子的工作,往往会拥抱开源社区,选择现有的工具进行开发和研究,最广为人知的便是ROS(Robot Operating System)。
    的头像 发表于 05-19 17:45 3478次阅读
    <b class='flag-5'>ROS</b>/<b class='flag-5'>ROS</b> 2 介绍

    ROS部署PaddlePaddle的CV模型

    paddle_inference_ros_demo功能包是基于paddle_inference_ros开发的,帮助开发者快速体验paddle_inference在
    的头像 发表于 10-20 17:02 299次阅读
    <b class='flag-5'>ROS</b>部署PaddlePaddle的CV模型

    ROS核心框架介绍

    ROS核心框架 对于第一个问题,我也没仔细研究过源码,核心代码基本由python和C++组成,运用了xmlrpc机制,每个运行的节点可以理解成一个进程。进程间通讯有些是共享内存的方式(比如
    的头像 发表于 11-21 18:07 487次阅读
    <b class='flag-5'>ROS</b>核心框架介绍

    ROS的扩展有哪些方法

    ROS的扩展 ROS除了本身框架性的东西以外,最大的特色就是能融合很多其他的东西,形成一个机器人开发生态圈,难怪ROS名为机器人操作系统,使命是powering the world‘s
    的头像 发表于 11-21 18:12 354次阅读

    ROS系统的智能车开发-基于米尔芯驰MYD-JD9X开发

    本篇测评由电子工程世界的优秀测评者“mameng”提供。本文将介绍基于米尔电子MYD-JD9X开发板的ROS系统智能车开发。目前实现ROS的方式主要有两种:Ubuntu系统+
    的头像 发表于 01-26 08:01 353次阅读
    <b class='flag-5'>ROS</b>系统的智能车<b class='flag-5'>开发</b>-基于米尔芯驰MYD-JD9X<b class='flag-5'>开发</b>板