9 个回答
如果从核心架构来说,ROS可以看成一个开发机器人控制软件的工具链。
所以,如果说开发机器人的流程,那么其本质就是怎么理解机器人系统。。
按照ROS目前给的主线,我觉得可以这样理解。
机器人模型
就是如何描述一个机器人。核心就是描述机器人的物理结构和运动学链。
这个部分ROS给出的是解决方案是URDF(unified robot description format)以及XACRO。通过编写URDF,可以给出一个机器人的通用描述。这部分ROS的wiki都有详细的介绍,可以参看。
MoveIt
MoveIt可以说是ROS相当重量级的一个应用,它包含了控制机器人运动的核心功能,通过它,你就可以完成构建机器人控制的主要工作。
这个部分内容比较多,主要有如下几个模块。
Setup Assistant:向导工具,帮助配置MoveIt,我们真正使用的一个工具。通过它,我们就可以完成大部分配置工作,这些配置使得下述的模块都可以自动的正确工作。
运动学:通过对URDF的解析生成机器人的运动学求解方法,运动学中最困难的是逆运动学是用一个叫KDL(kinematics dynamics library)的库实现的,这个求解过程是基于数值计算方法的。如果想使用解析方法,好像OENRAVE提供了一个工具可以帮助生成解析方法的算法源代码。具体可以查看相关的wiki。
轨迹规划:机器人从一个关节姿态到另一个关节姿态的运动求解,ROS使用了一个叫OMPL的第三方库来实现这个功能,这个库是基于随机化算法的。moveit中还提供了一个时间参数化的控制点插值,将轨迹分为很多小点列,以方便控制器控制关节运动。
3D视觉,这个部分我也不太熟悉,应该就是跟机器人视觉传感器采集处理数据有关。
控制器接口:用来向和机器人关节控制器发送轨迹规划生成的位置信息。
Rviz: 人机界面,用来提供人机交互功能。
其他各种模块:我就不一一列举了。
机器人控制器
控制器就是闭环控制的主要部分,就是要接收MoveIt的位置指令,并驱动控制各个关节的电机运动。对于不同的机器人,控制器都是不同的,所以这个部分需要按照机器人具体实现。不管如何设计,本质上,只要参照MoveIt中控制器接口自行进行设计即可。
ROS本身提供了ROS_CONTROL和ROS_CONTROLLER两个相关的软件包可以作为设计上的参考,在控制器中主要需要实现如下一些功能:
传感器、执行器的配置和驱动(如何让控制器正确的理解输入输出关系,正确的获得输入输出数据)
闭环控制(PID)
etc...
说点题外话:有一个问题是,ROS本身不是一个实时的软件,所以在一些应用场合,机器人对实时性要求高的话,则需要解决控制器实时的问题。
如果没有商业的解决方案,个人推荐可以使用一个叫OROCOS的架构,跟ROS不同的是,OROCOS专注于实现底层系统级的实时控制和通讯。而且ROS和OROCOS社区的各种大牛已经完成了ROS和OROCOS的集成工作,可以让两个系统无缝的连接工作。
最后当上述内容完成后,一个最简单的可以驱动机器人运动的系统就搭建完成了。我们就可以在MoveIt提供的界面或者通过MoveIt提供的编程API(move_group)编程控制机器人了。
所以总结一下就是: