dajianli

金牌会员
  • 主题:31
  • 回复:288
  • 金钱:1016
  • 积分:1674
如果从核心架构来说,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)编程控制机器人了。

所以总结一下就是:
第一、建立机器人的模型
第二、配置机器人的MoveIt
第三、编写机器人的控制器(包括设备驱动)
第四、整合上述所有内容,最终控制机器人。


由于ROS本质上还是一个关于机器人知识系统共享的平台,所以它涵盖的内容要远远多于我上述所列的内容,更多的功能应用,对于有各种特殊需求的开发人员来说,还需要不断的深入。


文章来自知乎大神:
独孤放