瞬驰(Dash)D1开发手册--下位机使用说明

一、连接方式

  • MAX3421E的USB接口与上位机连接,详细文档参考:https://www.arduino.cc/en/Main/ArduinoUSBHostShield
  • 波特率115200

二、小车的物理参数

  • wheel_diameter: 0.12 //轮子直径,单位:米
  • wheel_track: 0.35 //两个轮子的间距,单位:米
  • encoder_resolution: 1200 //编码器分辨率, 轮子转一圈,编码器产生的脉冲数
  • PID_RATE: 30 //PID调节PWM值的频率

三、支持指令

1. 获取波特率的值

输入:b\r
输出:115200\r

说明:我们已经设置好下位机和上位机通讯的串口比特率为115200, 所以该指令(b)总是会返回固定值115200。该指令主要用于验证刚开机时下位机和上位机通讯是否正常。

2. 读取编码器当前值

输入:e\r
输出:20 20\r

输出类型:long
说明:指令(e)返回底盘左右轮编码器当前值。根据编码器的分辨率(encoder_resolution),就可以推算出底盘移动的距离、朝向、单位时间内的线速度和角速度。

3. 重置编码器的值

输入:r\r
输出:ok\r

说明:指令(r)用于把左右轮编码的计数值重置为零。 每次开机时需要重置下左右轮编码的计数值,防止起始值不正确导致推算出错误的底盘状态。

4. 设置速度的期望值

输入:m 20 -20\r
输出:ok\r
输出类型:int

说明:指令(m)用于设置在单位时间(1/PID_RATE 秒)内底盘移动期望编码器的脉冲数。第一个参数用于设置左轮的速度,第二参数用于设置右轮的速度, 正数代表向前移动,负数代表向后移动。
需要注意的是,这个速度的单位不是m/s, 需要一定的计算来和m/s进行换算。
举例:
假如期望小车以0.3m/s的速度前进,指令(m)的参数计算方法如下:
小车轮子转动一圈,移动的距离为轮子的周长:

wheel_diameter*3.1415926

小车轮子转动一圈,编码器产生的脉冲信号为:

encoder_resolution

所以每移动1米产生脉冲信号为:

ticks_per_meter 
= encoder_resolution /(wheel_diameter*3.1415926)
=1800/(0.12*3.1415926)
= 4774.65

小车以V=0.3m/s的速度前进,1秒钟内产生的脉冲信号为:

V*ticks_per_meter 

又因为PID的频率是1秒钟30次。所以,指令(m)的参数计算方法为:

int(V*ticks_per_meter /PID_RATE)
= int(0.3 * 4774.65/30) = 48

所以,如果我们设置底盘以0.3m/s的速度前进,指令输入为:

m 48 48

如果以0.3m/s的速度后退,指令输入为:

m -48 -48

假如底盘需要转弯,就需要一个轮子正转,一个轮子反转。例如,假如我们需要底盘以V=1弧度/秒的速度转动。计算方法如下:

左轮 vl = V*wheel_track/2.0
右轮 vr = -1*V*wheel_track/2.0

然后在按公式int(V*ticks_per_meter /PID_RATE)分别计算左轮和右轮的速度参数。
如果以1弧度/秒的速度转动,指令输入为

m 28 -28

需要注意的是:当需要小车持续运动是,需要不断地下发指令(m),如果下位机2秒内没收到指令(m),它将停止运行。

5. 更新电机控制PID

输入:u 10:12:0:50\r
输出:ok\r
默认(Kp:Kd:Ki:Ko)800:0:10:1000

说明:该参数用于电机对期望速度的自我调整,一般情况下不需要改动。

注意事项:

1.每个指令都有输入和输出
2.输入指令的格式:以小写字母开头,跟若干个参数,每个参数之间以空格分隔,最后以单字符\r作为结束符。
形如:

m 20 -20\r

3.输出指令的格式: 一个或多个返回值,以空格分隔最后以单字符\r作为结束符。
形如:

ok\r

你可能感兴趣的:(瞬驰(Dash)D1开发手册--下位机使用说明)