1 ROS是什么?
- ROS的核心是一个分布式、低耦合的通讯机制;
- ROS提供多种机器人开发工具,实现数据可视化、机器人仿真等功能;
- ROS开源社区中包含大量机器人应用功能,可快速开发功能原型;
- ROS已经成为一个庞大的生态系统,包含机器人领域的方方面面,同时也得到了越来越多第三方工具的支持,为机器人开发提供了系统化的解决方案。包含了函数库、客户端库、中心服务器、一系列命令行工具、图形化界面以及编译环境。
2 ROS能干什么?
ROS采用松耦合点对点进程网络通信,提供了操作系统应用的各种服务(如:硬件抽象、底层设备控制、常用函数实现、进程间消息传递、软件包管理等),也提供了用于获取、编译、跨平台运行代码的工具和函数。用机器人操作系统(ROS)这层中间件是为了便于采包和可视化,利于寻找机械,通讯层,控制,状态估计,和路径规划的问题。
3 存在的瓶颈?
为了机电系统的稳定,还需要搭配运行在实时操作系统下的嵌入式设备,来完成高频的估计和控制。
跑起演示来对系统集成能力要求较高,容易卡在某一项细节里,失去对关键瓶颈的判断。
例如,在跑通视觉惯导里程计时,需要先解决如下工程问题:
a) 跑通相机驱动器;
b) 选取镜头和对应的摄像机模型;
c) 安装和标定双目摄像机内参和外参;
d) 减震安装和标定惯导与相机外参;
在使用里程计中,需要上下端通讯,并了解平台的运动学,可能会遇到如下问题:
a) 在复杂电磁环境中通讯系统的抗噪;
b) 理解几种旋转的表示方法;
c) 位置和速度在体坐标系和空间坐标系之间的转换;
4 涉及的技术(概率机器人技术)
(1)状态估计
其核心是用传感器数据来估计状态的思路。
机器人与环境交互的一个过程,传感器负责从环境测量信息,控制机构负责用来作用于环境。用概率模型来表示这个交互过程,就是贝叶斯迭代网络。
(2)贝叶斯滤波及其各种实现算法
对于贝叶斯滤波算法的实现,主要分为参数化、非参数两种实现方法。
参数化实现算法:卡尔曼滤波(KF、EKF、UKF)、信息滤波(IF、EIF)
非参数化实现算法:直方图滤波(马尔可夫定位)、粒子滤波(蒙特卡洛定位)
(3)机器人中的运动与测量概率模型
机器人的运动和测量概率模型对算法中的预测和更新步骤起着至关重要的作用。
(4)移动机器人定位与建图
定位其实就是位姿估计问题,位姿估计的概率实现算法可以有上面提到的EKF、AMCL(自适应的蒙特卡洛定位法)等算法来实现。
机器人的建图其实就是环境特征估计,同样也可以用概率的方法进行估计。
(5)SLAM同时定位与建图
独立的定位问题是建立在地图已知的情况下的,单独的建图问题也是建立在定位已知的情况下的。当机器人不能得到环境地图,也不知道自身位姿的时候,SLAM就出现了。
(6)机器人自主导航与动态避障
机器人自主导航可以分成两个实现部分,第一个部分就是路径规划,第二个部分就是控制策略。路径规划利用地图信息寻找一条能到达目标的全局路径,全局路径在机器人导航过程中起到全局战略性的指导。理想情况是,机器人完全按照全局路径移动到目标,但是实际环境往往是多变和复杂的,而且机器人实际控制也会存在偏差,所以机器人的实际运动控制需要有一套控制策略来最终实现。控制策略需要尽量逼近全局路径、尽量远离障碍物、最快时间到达目标等因素,这些因素可以用一个回报函数来评价,寻找最佳控制策略的过程中递归的计算每一次行动的回报函数值。这样控制策略在回报函数的指引下,就可以给出最佳的控制策略,控制策略控制机器人完成实际的移动。
路径规划主要分为:基于图的搜索算法、基于采样的算法、局部规划的算法。
5 内部构造
(1)硬件构造
一个典型的ROS移动机器人的硬件构造包括:带编码器的减速电机、电机驱动板、IMU模块、激光雷达、ROS主机、麦克风、摄像头、喇叭。带编码器的减速电机、电机驱动板、IMU模块(惯性测量单元,装有三轴的陀螺仪和三个方向的加速度计,来测量物体在三维空间中的角速度和加速度,并以此解算出物体的姿态)、激光雷达应该是SLAM导航避障的标配硬件,ROS主机是机器人的计算中心(运行SLAM导航算法等),麦克风、摄像头、喇叭是完成语音交互和图像感知时需要的
(2)软件组成
机器人的各种算法的开发还是基于我们常见的C++和Python的。
主要分为节点和功能包。节点是主要的计算执行进程,功能包中创建的每个可执行程序在被启动加载到系统进程中后,该进程就是一个ROS节点,node1、node2、node3等都是节点(node)。节点都是各自独立的可执行文件,能够通过主题(topic)、服务(server)或参数服务器(parameter server)与其他节点通信。ROS通过使用节点将代码和功能解耦,提高了系统的容错力和可维护性。一个ROS程序的不同组件要被放在不同的文件夹下,这些文件夹是根据不同的功能来对文件进行组织的。