使用Arduino开发板作为底层控制(base_controller),有rosserial_arduino和ros_arduino_bridge两种实现方式。其中 rosserial_arduino 将航迹推演、话题发布等都放在Arduino开发板上,占用资源大;而ros_arduino_bridge在Arduino开发板上只用来控制电机、舵机驱动,将计算部分放在ROS从机中,大大节省Arduino开发板占用资源,此外可外接更多传感器。
本ROS小车选择ros_arduino_bridge作为底层控制(base_controller)。
ros_arduino_bridge 框架结构(arduino篇)
ROSArduinoBridge #Arduino相关库定义
├── commands.h #定义命令
├── diff_controller.h #差分轮PID控制头文件
├── encoder_driver.h #编码器驱动头文件,定义插脚(pins)
├── encoder_driver.ino #编码器驱动实现, 读取编码器数据,重置编码器等
├── motor_driver.h #电机驱动头文件
├── motor_driver.ino #电机驱动实现,初始化控制器,设置速度
├── ROSArduinoBridge.ino #核心功能实现,
├── sensors.h #传感器头文件及实现
├── servos.h #伺服器头文件,定义插脚,类
└── servos.ino #伺服器实现 对底层控制 ros_arduino_bridge 代码修改主要放在encoder_driver、motor_driver、ROSArduinoBridge、commands上,其它如diff_controller等暂时不需要修改。已整理修改后的代码,见 ROS-robot。