通过蓝牙向D1发送移动控制指令
D1 的物理参数
- wheel_diameter: 0.1260 //轮子直径,单位:米
- wheel_track: 0.3500 //两个轮子的间距,单位:米
- encoder_resolution: 1200 //编码器分辨率, 轮子转一圈,编码器产生的脉冲数
- PID_RATE: 30 //PID调节PWM值的频率
速度控制指令
基本的速度指令格式,如下:
z 20 -20;
说明:指令用于设置在单位时间(1/PID_RATE 秒)内 D1 移动期望编码器的脉冲数。
第一个参数用于设置左轮的速度,第二参数用于设置右轮的速度, 正数代表向前移动,负数代表向后移动。
注意:这里所说的速度不是以m/s的速度, 而是需要一定的计算来和m/s进行换算。
只有线速度
- 假如 D1 以0.3m/s的速度前进,指令的参数计算方法如下:
D1 轮子转动一圈,移动的距离为轮子的周长:
wheel_diameter * 3.1415926
D1 轮子转动一圈,编码器产生的脉冲信号为:
encoder_resolution
所以每移动1米产生脉冲信号为:
ticks_per_meter
= encoder_resolution /(wheel_diameter*3.1415926)
= 1200/(0.12*3.1415926)
= 3183.10
D1 以V=0.3m/s的速度前进,1秒钟内产生的脉冲信号为:
V * ticks_per_meter
又因为 PID 的频率是1秒钟30次。所以,指令的参数计算方法为:
int(V * ticks_per_meter / PID_RATE)
= int(0.3 * 3183.10/30)
= 32
所以,如果设置 D1 以0.3m/s的速度前进,指令输入为:
z 32 32;
如果以0.3m/s的速度后退,指令输入为:
z -32 -32;
只有角速度
- 假如 D1 自转,就需要一个轮子正转,一个轮子反转。例如,需要 D1 以V=1弧度/秒的速度转动。计算方法如下:
左轮 vl = V * wheel_track / 2.0
右轮 vr = -1 * V * wheel_track / 2.0
然后,按公式 int(V * ticks_per_meter / PID_RATE)
分别计算左轮和右轮的速度参数。
若以1弧度/秒的速度转动,指令输入为
z 19 -19;
线速度与角速度都有
- 假如 D1 向左转弯,就需要一个轮子向前转,一个轮子向后转。例如,需要 D1 以V1=1弧度/秒的速度转动,V2=0.2m/s的速度前进。计算方法如下:
左轮 vl = V2 + V1 * wheel_track / 2.0
右轮 vr = V2 - V1 * wheel_track / 2.0
然后,按公式 int(V * ticks_per_meter / PID_RATE)
分别计算左轮和右轮的速度参数。
若以1弧度/秒的速度转动,指令输入为
z 40 3;
注意:当需要 D1 持续运动是,需要不断地下发指令,如果下位机2秒内没收到指令,D1 将停止运行。