ROS 三向轮移动底盘硬件
01 简介
在机器人开发中, 首先要设计的就是移动机器人底盘, 需要根据机器人的应用场景来设计符合不同要求的移动底盘。 最为震惊的还是波士顿动力实验室设计的各种移动机器人。
02 差速驱动
差速驱动是一个两轮驱动的系统, 每个轮子都带有独立的执行机构 (如直流电机), 机器人的运动矢量是每个独立车轮运动的总和。对于差速驱动的机器人来说直线运动可能是比较困难的, 因为每个驱动轮是独立的, 一旦它们的转速不是精确相同的话, 机器人就会向一边偏离。
由于电动机轻微的速度差异、马达驱动系统的摩擦力差异以及轮子与地面的摩擦力差异, 实现驱动轮电动机以相同速率旋转是很困难的。 为了保证机器人直线运动, 有必要通过每秒多次的频率调整 PWM 值来调整电动机的 RPM。
PID 控制器 (比例 - 积分 - 微分控制器) 是一个在工业控制应用中常见的反馈回路部件, 由比例单元 P、积分单元 I 和 微分单元 D 组成。 PID 控制器的基础是比例控制, 用来调整系统的开环增益, 提高系统的稳态精度, 降低系统的惰性, 加快响应速度; 积分控制可消除稳态误差, 但可能增加超调; 微分控制可加快惯性系统响应速度以及减弱超调趋势。
03 全向轮
全向轮底盘, 肯定离不开全向轮的了。 直接淘宝一搜 全向轮, 就知道是什么样的了。
04 三轮全向轮的结构设计
需要三个轮子, 每两个轮子之间相差 120°, 车轮的安装方式决定了我们的运动学模型。 机器人控制的基础是运行学分析, 利用运动学分析, 可以得出机器人运动过程中各类参数的变化规律和相互之间的关系, 对这些参数进行控制, 才能使机器人在我们的控制下进行移动。
05 直流减速电机选择的注意事项
-
- 电机的扭矩和减速比, 需要根据底盘的负载来进行选择, 减速比越大则扭矩越大, 但是对应的电机的转速也会降低.
-
- 对应电机的转速需要根据轮子大小和机器人移动速度来选择, 一般情况下载室内移动的机器人移动速度不能超过 1m/s, 不然感觉会控制不住, 跑太快了, ROS 小课堂的大大选择的移动速度是 0.3m/s。0.3 是运动合成后的速度, 并不直接就是电机的速度。
-
- 对车轮的测速就需要选择带编码器的电机, 编码器分为光电编码器和霍尔传感器两种, 码盘的精度需要根据主控板的处理精度来选择, 若使用 Arduino Mega2560 来控制的话, 500 线的码盘, Arduino 是可以处理过来的, 只不过有点吃力, 最好还是选择 STM32 来作为主控板, 这样就会麻烦点, 需要自己编写通信协议来完成与 ROS 之间的数据通信, 主控板一般都需要通过 PID 来调整 PWM 输出来控制驱动板, 使驱动板来控制各路电机的转速。
-
- 电机驱动板选择, 目前都是双路或者四路驱动板, 基本上看不到有三路直流电机的驱动板。 选择的驱动板最好要带光耦隔离, 这样可以防止电机堵转或者不稳定电流把主控板烧坏。
06 锂电池的选择
锂电池的选择是个比较麻烦的事情, 需要根据电机的额定电压和额定功率来定, 但是电机的额定功率又根据底盘的负载来考虑, 还有设计需求底盘的工作时间是多久, 工作时间越长那么选择电池的标称容量也就越大, 但是也会引起电池体积过大, 体积过大又引起重量增加又反过来影响底盘的负载, 所以需要多方面因素综合考虑来选择锂电池。 举个栗子:
- 电机
- 额定电压: 12V
- 额定电流: 1.5A
- 那么就得出电机的额定功率 : P_Motor = U x I = 12 * 1.5 = 18W
- 锂电池
- 标称电压: 12V
- 标称容量: 13000mAH
- 那么就能得出锂电池的功率 : P_Bat = 12 x 1.3 = 15.6WH
- 工作时间
- 如果使用上面的锂电池给上面的电机供电, 那么电机在额定功率下的额定工作时间为 : Time = P_Bat / P_Motor = 15.6/18 = 0.86 小时 = 52 分钟
07 移动底盘需要安装各种避障用的传感器
一般包括 :
- 碰撞避障 : 也叫微型快动开关, 是一种由很小的物理力启动的电子开关。
- 防跌落传感器 : 一种短距离红外测距模块, 有效距离一般为 10cm, 开关量数字信号输出。
- 超声波传感器 : 采用超声波回声测距原理, 运用精准的时差测量技术, 检测传感器与目标之间的距离。
- 红外测距传感器 : 用红外线为介质的测量系统。
08 控制电机驱动板
性价比好的使用 Arduino Mega2560, 采用 USB 接口的核心电路板, 具有 54 路数字输入输出, 适合需要大量 IO 接口的设计。 处理器黑心是 ATmega2560, 同时具有 54 路数字输入 / 输出口 (其中 16 路可作为 PWM 输出), 16 路模拟输入, 4 路 UART 接口。6 路外部中断: 2(中断 0), 3(中断 1), 18(中断 5), 19(中断 4), 20(中断 3), 21(中断 2)。 触发中断引脚可设置成上升沿、下降沿或者上升下降沿同时触发, 使用这些中断可以测量编码器脉冲个数, 进行车轮测速。
09 运行 ROS 的主控板
这里选择树莓派, 已经能成功的在树莓派上运行 ROS 系统。 这样就能将 Arduino 的板子接在树莓派上, 使用 arduino 作为 ROS 的一个节点, 这样就能组成一个完整的基于 ROS 控制的移动底盘。