### 注意: * 在使用串口发送指令时,底层超过 **1s** 没有接收到上位机的指令,会向上位机返回错误状态码FF (error状态:连接超时),此时用户如果想要重新控制车辆,需要发送Reset命令 * 在调试发送指令时,先发一条Reset命令,然后接着发指令,如: 0x 55 AA 02 02 05 00 FA 0x 55 AA 09 00 01 00 04 00 00 00 00 00 00 F3 0x 55 AA 02 02 05 00 FA 0x 55 AA 09 00 01 00 04 00 00 00 00 00 00 F3 ... #### 串口测试速度指令样例 ##### 左转 55 AA 02 02 05 00 FA 55 AA 09 00 01 00 00 00 04 00 00 00 00 F3 ##### 右转 55 AA 02 02 05 00 FA 55 AA 09 00 01 00 04 00 00 00 00 00 00 F3 ##### 前进 55 AA 02 02 05 00 FA 55 AA 09 00 01 00 04 00 04 00 00 00 00 F7 ##### 后退 55 AA 02 02 05 00 FA 55 AA 09 00 01 FF FA FF FA 00 00 00 00 F7 下面列出几个常用的控制指令示例: # 控制车轮速度指令 假设请求左车轮速度为0.1m/s,传输数据帧内容为: 0x 55 AA 09 00 01 00 04 00 00 00 00 00 00 F3
Header Length Sequence Payload Checksum
MsgID PARAM
55 AA 09 00 01 00 04 00 00 00 00 00 00 F3
起始标志位 有效数据的长度为9个字节 第一个指令 控制车轮速度指令 左车轮 右车轮 固定不变为0 异或校验码
如上文所说,通常我们所说的速度是以m/s为单位的速度,而指令中车轮速度的参数实际上是单位时间内期望编码器的计数,在此需要将指令的速度V(m/s)结合AP1下位机的物理参数进行计算,下面是车轮速度换算方法。 M1下位机物理参数如下表: 名称 | 参数 | 说明 :-------------: | :-------------: | :------------- wheel_diameter | 0.25 | 车轮直径,单位:米 encoder_resolution | 1600 | 编码器转一圈产生的脉冲数 PID_RATE | 50 | PID调节PWM值的频率 假设我们给M1左轮V=0.1m/s的速度(右轮速度的计算指令与此相同),计算方法如下: 车轮转动一圈,移动的距离为轮子的周长: distance_one_round =wheel_diameter*π =wheel_diameter*3.1415926 =0.25*3.1415926 车轮转动一圈,编码器产生的脉冲数为: wheel_encoder_resolution =1*encoder_resolution =1*1600 =1600 注:编码器与车轮连接在一起,车轮转1圈,编码器转1圈;编码器的脉冲数可以理解为编码器计数,编码器自转一圈计数1600,则车轮转一圈编码器计数为1600。 所以AP1每移动1米产生脉冲数(编码器的计数)为: ticks_per_meter =(1/distance_one_round)*wheel_encoder_resolution =1/(0.25*3.1415926)*1600 =2037.18 又因为PID的频率是1秒钟50次,所以指令的参数计算方法为: int(V*ticks_per_meter/PID_RATE) =int(0.1*2037.18/50) =4 用户可直接使用0.1m/s速度的计算结果来对应自己期望的速度换算成相应的数值,如0.2m/s为8,1m/s为40等。 接着将计算出来的4换算为16进制为: 00 04 则速度指令的PARAM为 00 04 00 00 00 00 00 00 注:如果用户发送的速度超过了最大速度,则会按最大速度行进。 # 获取电池电量指令 0x 55 AA 02 01 02 00 FE
Header Length Sequence Payload Checksum
MsgID PARAM
55 AA 02 01 02 00 FE
起始标志位 有效数据的长度为2个字节 第二个指令 小车的电量请求 参数为00 异或校验码
# 重置状态指令 当接收到下位机发送的错误状态码FF时,需要将AP1状态重置(Reset),才能重新恢复控制,指令如下: 0x 55 AA 02 02 05 00 FA
Header Length Sequence Payload Checksum
MsgID PARAM
55 AA 02 02 05 00 FA
起始标志位 有效数据的长度为2个字节 第三个指令 重置状态指令 参数为00 异或校验码
# 清除编码器计数指令 0x 55 AA 02 03 06 00 F8
Header Length Sequence Payload Checksum
MsgID PARAM
55 AA 02 03 06 00 F8
起始标志位 有效数据的长度为2个字节 第四个指令 请求清除编码器计数 参数为00 异或校验码