最小的ROS移动机器人ROM有多小(转自微信公众号“机器人软件研究”)

2019-07-13 02:11发布

2017-06-29 ChaoguoZhao 机器人软件研究 转眼这个公众号有4个月没有更新了,因为这几个月和小伙伴们在做一个嵌入式ROS ROM的闭关开发,实在无法顾及总结技术文章:),好在最近开发终于有了阶段性成果,赶紧上来汇报一下。 背景 关于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就能实现机器人自主导航,有点小激动,后续进展我还会及时给大家汇报,我们一起期待。


----------------------------正文分割线------------------------------------------------------------
本文由公众号“机器人软件研究”原创,转载请说明。 对嵌入式ROS系统有任何建议请关注公众号"机器人软件研究"在后台留言,或联系微信号:zhao_chao_guo。