性能
实时性:在当前的系统架构下,由于缺失节点执行和消息传递优先级的时间保证,ROS并不具有实时特性。ROS最初设计的目标机器人是PR2,当时只是应用于科研领域因此不需要考虑实时性方面的问题,但伴随ROS已走过11个年头,其得到了极大的推广和应用,尽管依然存在不少局限性但依然无法掩盖它的锋芒。已发布的ROS2已具有实时特性,并相比ROS1提高了系统的稳定性、安全性及分布式处理能力,关于ROS1与ROS2的区别主要如下所示,后续楼主会专门写一篇两者的对比文章。
Node Pipelining:在自动驾驶汽车中,特定的任务以预先定义的恒定速率计算是有益的,例如基于视觉的定位,其输入图像以15Hz记录,那位置的更新通常也应在15Hz速率下。如果是串行处理方式,那从图像获取到内部处理再到结果输出,其整个更新速率显然不是15Hz。但如果将单个或多个处理步骤分解成更小的单元则可满足期望的时间限制,这就是Node Pipelining的概念。
仿真和调试
离线处理:为了仿真和分析子系统及调试系统关键错误。对系统中传递的数据进行有选择的记录是ROS的基础特性。
以一个简化的视觉定位的案例具体说明下,如上图所示,用于定位组件的输入信息以Rosbag的形式记录并存储下来,存储的数据会保留时间戳及消息内容,以便及时准确的重放所有实时数据用于离线系统的仿真模拟或数据分析。另外,依赖于硬件设备,尤其是网络带宽和存储的吞吐量,所有主题信息都可在车辆行驶时在线记录以分析关键驾驶场景和决策,如路径规划和控制等。
仿真: ROS的模块化消息架构允许数据输入源的更换,因此节点可很容易的基于记录的数据进行测试。如果在仿真时还需要用户手工输入一些信息,那么Rviz(一个强大的可视化调试和仿真工具)则提供了一系列交互式标签以用于定位和定向障碍物等。