A-A+

最小的ROS移动机器人ROM有多小?——从16G到500M开发手记

2017年07月10日 ROS 暂无评论 阅读 313 次

作者:ChaoguoZhao       公众号:机器人软件研究

授权ExBot转发

 

Top按:用了4个月的时间,朝国兄和小伙伴们终于完成了嵌入式ROS ROM的闭关开发,取得了阶段性成果,为此朝国兄写了一篇记录与大家分享,如有其他无需求,可联系微信号:zhao_chao_guo。

 

背景

关于ROS,大家对它的吐槽点主要集中在两点:一是多进程/分布式设计带来的性能开销。二是系统冗余,过于庞大。实际上,采用了plugin和nodelet技术实现零拷贝,第一点关于性能的问题已经不是很大的问题了。关于plugin和nodelet技术的应用,move_base框架做了一个很好的样板,它把cost_map,loca_planners和global_planners通过plugin技术集成到一个进程中,即解决了性能问题,又保持了非常强的灵活性和易用性,是一个比较经典的设计案例。

解决了性能问题,ROS脱离“快速原型验证系统”走向产品化平台算走了一小半,为了让ROS产品化更近一步,小伙伴把攻关的目标放在解决第二个痛点上--给ROS瘦身。长期以来ROS支持完整特性的操作系统只有ubuntu和debian,但是这两个桌面系统,动不动十几G的ROM,和自主机器人移动和嵌入式的需求实在不匹配。所以我们定了一个小目标:打造一个基于嵌入式Linux的ROS ROM。估计有人要疑惑:ROS不是一直支持嵌入式平台OpenEmbedded么?甚至在某个版本还支持一个RTOS QNX。嗯,确实是有支持,但是--但是,当你真正想用他们构建一个完整的移动机器人时,你就会发现:他们只是支持了ROS CORE的部分功能,从来没有发布过完整功能的软件栈,可以说除了ubuntu和debian,其它系统的ROS还是开发人员的玩具。如果要用ROS做一个嵌入式移动机器人的ROM,这个ROM最小能有多小呢,我们在尝试。

方案和进展

考虑技术成熟度,我们选择先从最成熟的激光雷达SLAM软件开始移植

主控硬件:allwinner 4核A7平台

操作系统:TinaLinux

激光雷达:neato xv_11

运动控制:arduino

在这样平台上实现支持SLAM功能的移动机器人ROM大小:500M,这个大小仅考虑功能实现,并未做细致瘦身,所以继续优化的潜力还很大。

ROS主要模块:

costmap_2d,local_planner,golbal_planner

map_server

SALM:gmapping

底盘控制:ros_arduino_python

Tina系统查到的ROS Node和Topic是这样的:

实测这个500M的系统SLAM效果和16G的树莓派3+ubuntu没有区别。

小吐槽

不得不吐槽一下ROS的依赖设计:在动手前我们一直知道ROS激光导航软件依赖PCL库,这是一个庞大的库,它的背后还依赖一堆GUI库,毕竟点云格式只是ROS激光雷达的一种输入格式,对于2D SLAM,我们用LaserScan,应该不需要依赖PCL吧...,但是随着移植进展,当我看到这个代码时,心里挖凉挖凉的:

在导航内核依赖庞大的外部库,典型的反向依赖。就因为PCL是Willow Garage的亲儿子?

小幸运--ROS IDE

嵌入式系统开发人员最怕什么,应该是没有IDE吧,我们也无法想象在嵌入式环境开发ROS如果没有IDE有多悲催。所以在Tina上ROS移植完成后,我们迫不及待要试一下IDE,我们得感谢一下RoboWare(http://roboware.me/#/)开发团队(这是我们国内的开发团队)。目前的RoboWare版本直接用在Tina ROS上还不行,但是还好,我们可以自己做一点简单修改就可以了,看看效果:

期待roboware后续版本能直接支持就更好了:)

展望

优化还在继续,除了激光导航外的更多功能也在继续加入,想象可能一两百M甚至几十M的ROM就能实现机器人自主导航,有点小激动,后续进展我还会及时给大家汇报,我们一起期待。

标签:

给我留言

Copyright © ExBot易科机器人实验室 保留所有权利.   Theme   Robin modified by poyoten

用户登录

分享到: