《精通ROS机器人编程(原书第2版) 》 —1.2 在机器人开发中,人们为什么更愿意选择ROS

举报
华章计算机 发表于 2020/02/10 12:10:18 2020/02/10
【摘要】 本节书摘来自华章计算机《精通ROS机器人编程(原书第2版) 》 一书中第1章,第1.2节,作者是[印度]郎坦·约瑟夫(Lentin Joseph)[意大利]乔纳森·卡卡切(Jonathan Cacace),张新宇 张志杰 等译 。

1.2 在机器人开发中,人们为什么更愿意选择ROS

设想我们要搭建一个自主移动的机器人,以下是我们放弃其他机器人开发平台(如Player、YARP、Orocos、MRPT等),选择ROS的一些主要原因:

高端功能:ROS自带现成的算法。比如,即时定位与地图构建(Simultaneous Loc-ali-zation and Mapping,SLAM)和自适应蒙特卡罗定位(Adaptive Monte Carlo Localiza-tion,AMCL),这两个软件包可用于移动机器人的自主导航。MoveIt!软件包可以用于机械臂的运动规划。这些功能可以非常方便地直接应用于机器人软件中。这些功能在ROS中的实现方式也是最好的,为已有的功能编写新代码就像“重复发明轮子”。除此之外,这些功能是高度可配置的,允许用户根据需要对各功能的参数进行微调。

大量的工具:ROS 集中了大量的工具软件,如调试、可视化、仿真等。其中有一些功能很强的开源工具,如用于调试的rqt_gui、可视化的RViz 、仿真用的Gazebo等。其他机器人开发框架很少有如此全的工具。

对高端传感器和执行器的支持:ROS 包含了机器人领域中各类传感器和执行器的驱动程序和软件接口。高端传感器包括Velodyne激光雷达、激光雷达扫描设备、Kinect体感设备等。还有DYNAMIXEL伺服驱动器这样的执行机构。这样,我们就可以非常方便地将这些设备与ROS连接起来。

平台内操作:ROS 的消息传递机制允许在不同节点间进行通信。我们可以用C++或C语言对节点进行编程,当然也可以用Python 或 Java 语言。只要这一语言带有ROS客户端库,我们就可以用这种语言对节点进行编程。这样的灵活性在其他机器人框架中是没有的。

模块化:大多数独立运行的机器人应用程序都可能出现这样的问题:如果主代码的某一个线程崩溃,整个机器人系统就会停止运行。ROS的情形则不一样,每个进程对应一个节点,如果某一个节点崩溃,整个系统仍然可以运行。除此之外,如果某个传感器或马达出现故障,ROS 提供了鲁棒的方法来重启操作。

资源并发处理:通过两个以上的进程处理硬件资源,一直以来就是件麻烦事。设想一下,从相机读取一幅图像,既要做人脸检测,又要做运动检测。我们有两种处理方式:一种是写一段可以处理两个任务的代码,另一种是写两段代码,用两个线程并行运行。如果有两个以上的任务,应用系统就变得复杂起来,调试也不容易。在ROS中,我们则可以利用ROS驱动程序发布的ROS话题(topic)访问硬件设备。无论ROS节点数量的多少,都可以同时订阅来自相机驱动程序发布的图像消息。不同节点可以执行不同的功能。这种机制可以降低计算复杂性,提高整个系统的可调试能力。

活跃社区:当我们选择一个软件库或软件框架,特别是来自开源社区时,使用之前考虑的主要因素之一是软件技术支持和开发者社区。有些开源工具可能有较好的技术支持,而很多是没有的。在ROS中,技术支持社区很活跃,还有一个门户网站(http://answers.ros.org),处理来自用户的技术问题。目前,ROS社区开发者人数保持稳定的增长。

选择ROS的原因还有很多,不仅限于以上几点。

下面,我们不妨看看人们不愿意使用 ROS 的各种原因。这里列出了几种原因。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。