很多小伙伴在使用ROS的时候,都会产生类似的疑问,程序写过那么多,仿真也跑过不少,但是如何控制真实机械臂/机器人呢?
今天古月君就来尝试破个题。
首先,解决这个问题的关键词是“接口”。所谓接口,即数据传输的通道,如何将ROS功能包计算得到的数据发给真实机器人并使之运动是问题的关键。
机械臂有点复杂,我们先以简单一些的ROS小车为例,看看ROS是如何让真实小车动起来的。
大家在某宝上搜索“ROS移动机器人”,会出现一系列的小车,看来看去,无非都是类似下图的零部件组成的:
做个分类,大家应该会更清晰一些:
这就是从控制角度看到的机器人四大组成部分,ROS并不是机器人的全部,主要运行于控制系统当中。
以小车的导航为例,从复杂的算法到小车的运动具体经过了哪些步骤呢?
1.使用者在rviz中使用鼠标选择一个导航目标点
2.全局规划器开始路径规划,得到一条从A到B的最优路径
3.本地规划器开始计算机器人每个周期的最佳速度,尽量靠近最优路径并躲避动态障碍物
OK,划重点啦,此时以上还都是ROS功能包完成的工作,我们进一步简化以上步骤,所有功能看成黑盒,输入是目标位置,输出是周期速度,这个周期速度就是“接口”。
接下来我们要做的事情就是让小车的硬件匹配这个周期速度的接口,怎么匹配呢?
小车的运动最后由电机执行,电机要转起来就需要一个电压信号,要产生电压信号就需要将控制信号(PWM)放大,要产生控制信号就需要有一个微控制器(MCU),微控制器的输入指令哪里来,一条电缆(网线或串口线)连接PC和MCU,接口就连上了。
当然,接口连上只是“肉体连接”,要做到“精神连接”还需要完成控制器里的驱动控制,也就是我们常说的PID闭环控制。
至此,我们成功的让小车动起来了,总结一下,我们怎么让小车动起来的:
1.ROS功能包跑起来
2.控制数据传输给小车的控制器
3.控制器里完成底层控制