基于ros_arduino_bridge的智能小车----下位机篇

基于ros_arduino_bridge的智能小车----下位机篇

参考文章:
基于ros_arduino_bridge的智能小车----上位机篇
基于ros_arduino_bridge的智能小车----硬件篇

下位机部分实际上可以视作完全独立的一部分,我们从Github下载ros_arduino_bridge后,可以从它的文件中得到小车的下位机部分:

git clone https://github.com/hbrobotics/ros_arduino_bridge.git

下载后你可以得到一个文件夹ros_arduino_bridge
在这里插入图片描述
在文件夹这个位置就是arduino的下位机程序,内容是:
基于ros_arduino_bridge的智能小车----下位机篇_第1张图片
我对内容作了一定的修改,使之能够可以被我自己的小车使用,毕竟我的小车驱动部分并没有按照ros_arduino_bridge作者的来。实际上,作者的项目已经很老了,一些东西又贵
又难买,性能还不咋地。

这里我给出了修改版的下位机代码,是在[https://blog.csdn.net/qq_29735067/article/details/81561261]的基础上稍微又修改了一下,主要是修改了控制电机的部分,下面给出下载链接:

https://pan.baidu.com/s/1my9Xh-1gGzufPR_cZpov7w
提取码:ibqk

可以打开ROSArduinoBridge.ino来上传程序,也可以加入arduino库中
基于ros_arduino_bridge的智能小车----下位机篇_第2张图片

请注意,程序默认串口波特率57600,上传好程序后,打开串口监视器
基于ros_arduino_bridge的智能小车----下位机篇_第3张图片
其中左上角是你自己arduino连接主机后显示的串口号,windows下一般是COM*,如COM5,ubuntu下一般是
/dev/tty*,例如/dev/ttyUSB0。

上传好程序后就可以测试了,你可以手动为串口输入控制命令,毕竟上位机是通过相同的命令来控制小
车,这在arduino程序中被定义了:

/* Define single-letter commands that will be sent by the PC over the
   serial link.
*/
 
#ifndef COMMANDS_H
#define COMMANDS_H
 
#define ANALOG_READ    'a' // 模拟读取
#define GET_BAUDRATE   'b' // 获取波特率
#define PIN_MODE       'c' // 接口模式
#define DIGITAL_READ   'd' // 数字读取
#define READ_ENCODERS  'e' // 读取编码器数据 输出为:左数据,右数据
#define MOTOR_SPEEDS   'm' // 设置马达速度,脉冲计数 如: m 20 20 会以一个很低的速度转动
#define PING           'p' // 
#define RESET_ENCODERS 'r' // 重设编码器读数
#define SERVO_WRITE    's' // 舵机相关,我这里没有用到
#define SERVO_READ     't' // 舵机相关,我这里没有用到
#define UPDATE_PID     'u' // 更新pid参数
#define DIGITAL_WRITE  'w' // 数字端口设置
#define ANALOG_WRITE   'x' // 模拟端口设置
#define READ_PIDOUT  'f'   // 读取pid计算出的速度(脉冲数计数)
#define READ_PIDIN  'i'    // 读取进入pid的速度
 
#define LEFT            0
#define RIGHT           1
 
#define FORWARDS true   //FORWARDS前进代表bool真值true
#define BACKWARDS false //BACKWARDS后退代表bool假值false
 
#endif

例子:

输入e:

可以看到下位机回传了编码器信息(原谅我的图片如此糟糕,毕竟我的真实上位机是树莓派,博客又是在电脑上编辑了,只能通过拍照获取图片)

输入m 44 44:

下位机返回OK,表示接收到控制信号,同时小车轮子开始转动,两秒后中停止,修改ROSArduinoBridge.ino中的这一段

#define AUTO_STOP_INTERVAL 2000  

可以改变每一个控制命令的作用时间,单位是毫秒

我的小车:
基于ros_arduino_bridge的智能小车----下位机篇_第4张图片

你可能感兴趣的:(ros小车)