本文档介绍了用rayland-dual主板控制小车的控制协议。协议共分两种,1,用内置的安卓系统。2,用外置的串口系统。
AGV小车接线方法
上图所示AGV小车的外设默认配置
设备 | 个数 |
---|---|
7寸高清触摸屏 | 1 |
超声测距 | 8 |
RFID | 1 |
16通道寻磁 | 1 |
麦克风 | 1(可选4通道) |
2w扬声器 | 1 |
UVC摄像头 | 1(可选扫码摄像头) |
总体接线图
板上电机端口 | AGV功能链接 | 备注 |
---|---|---|
X电机端口 | 左轮驱动 | 1EN(EN),2FR(MS1),3PG(MS2),4BK(ST) |
Y电机端口 | 右轮驱动 | 1EN(EN),2FR(MS1),3PG(MS2),4BK(ST) |
Z电机端口 | 无 | |
E0电机端口 | 左右轮SV | 1GND,2 SV_左,3 SV_右,4GND 直连板接E0DIR和E0EN |
E1电机端口 | 寻磁 | 1GND,2TX,3RX,4GND。(E1DIR和usart3_RX复用,E1STEP和usart3_tx复用) |
usart1 | rfid | 1GND,2TX,3RX,4GND |
usart2 | 超声 | 1GND,2TX,3RX,4GND |
usart3 | 寻磁 | 1GND,2TX,3RX,4GND |
usb口 | 摄像头 | VLC免驱摄像头 |
音频输入 | 单mic | |
音频输出 | 运放模块 |
安卓系统下的AGV 小车控制协议
安卓运行界面
状态显示界面
控制界面
看听说界面
AGV
Android -> Stm32
1.1 控制指令 cmd_type,pkg_length,seq,v_x,v_y,s_x,s_y
Param | Describe | Type | Range | Unit |
---|---|---|---|---|
cmd_type | 指令类型 | uint8 | 0 | |
pkg_length | 包长度 | uint8 | 12bytes |
|
seq | 指令序号 | uint8 | ||
is_reset | 是否抢占 | uint8 | 0:false 1:true |
|
v_x | x轮速度 | int16 | -500 ~ 500 | (1/10)r/min |
v_y | y轮速度 | int16 | -500 ~ 500 | (1/10)r/min |
s_x | x轮里程 | uint16 | 1 = (1/10)r |
|
s_y | y轮里程 | uint16 | 1 = (1/10)r |
2.2 定义当前坐标 cmd_type,pkg_length,seq,axis_x,axis_y,ori
Param | Describe | Type | Range | Unit |
---|---|---|---|---|
cmd_type | 指令类型 | uint8 | 1 | |
pkg_length | 包长度 | uint8 | 9bytes |
|
seq | 指令序号 | uint8 | ||
axis_x | x轴坐标 | int16 | 1 = (1/10)r |
|
axis_y | y轴坐标 | int16 | 1 = (1/10)r |
|
ori | 朝向 | int16 | 1 = 1/10° -1 = -1/10° (逆时针为正) |
3.3 切换控制模式 cmd_type,pkg_length,seq,controll_type
Param | Describe | Type | Range | Unit |
---|---|---|---|---|
cmd_type | 指令类型 | uint8 | 2 | |
pkg_length | 包长度 | uint8 | 4bytes |
|
seq | 指令序号 | uint8 | ||
controll_type | 控制模式 | uint8 | 0:板控 1:遥控 2:ROS控制 |
Stm32 -> Android
1.1 状态采集
cmd_type,pkg_length,seq,v_x,v_y,axis_x,axis_y,ori,rfid,magn,infra,ut_f,ut_b,moto_state,mile
Param | Describe | Type | Range | Unit |
---|---|---|---|---|
cmd_type | 指令类型 | uint8 | 0 | |
pkg_length | 包长度 | uint8 | 39bytes |
|
seq | 指令序号 | uint8 | ||
controlType | 控制类型 | uint8 | 0:板控 1:遥控 2:ROS控制 |
|
v_x | x轴速度 | int16 | -500 ~ 500 | (1/10)r/min |
v_y | y轴速度 | int16 | -500 ~ 500 | (1/10)r/min |
axis_x | x轴坐标 | int16 | 1 = (1/10)r |
|
axis_y | y轴坐标 | int16 | 1 = (1/10)r |
|
ori | 朝向 | int16 | 1 = 1/10° -1 = -1/10° (逆时针为正) |
|
rfid | rfid序列号 | uint32 | ||
magn | 磁条序列号 | uint16 | 0:missing 1:hit |
|
infra | 红外 | uint8 | 0:false 1:true |
|
ut_f | 前侧超声 | uint16 * 4 |
mm |
|
ut_b | 后侧超声 | uint16 * 4 |
mm |
|
moto_state | 电机状态 | uint8 | 0:stop 1:running 左侧第0位 右侧第一位 |
|
mile | 总里程 | uint16 | mm |
串口的AGV 小车控制协议
板载的A33处理器并不能运行ROS操作系统,需要通过外接mini PC来完成。MiniPC直接和板子上的STM32进行通讯,在ros模式下,我们需要禁用板载的寻磁传感器功能,将这个口用来做miniPC和STM32的通讯。
MiniPC -> Stm32
1.1 控制指令 cmd_type,pkg_length,seq,v_x,v_y,s_x,s_y
Param | Describe | Type | Range | Unit |
---|---|---|---|---|
prefix | 包头 | uint8 | 0x68 | |
cmd_type | 指令类型 | uint8 | 0 | |
pkg_length | 包长度 | uint8 | 12bytes |
|
seq | 指令序号 | uint8 | ||
is_reset | 是否抢占 | uint8 | 0:false 1:true |
|
v_x | x轮速度 | int16 | -500 ~ 500 | (1/10)r/min |
v_y | y轮速度 | int16 | -500 ~ 500 | (1/10)r/min |
s_x | x轮里程 | uint16 | 1 = (1/10)r |
|
s_y | y轮里程 | uint16 | 1 = (1/10)r |
|
checksum | 校验和(不含包头包尾) | uint8_t | 0~255 | |
subfix | 包尾巴 | uint8_t | 0xff |
Stm32-> MiniPC
Param | Describe | Type | Range | Unit |
---|---|---|---|---|
prefix | 包头 | uint8 | 0x68 | |
cmd_type | 指令类型 | uint8 | 0 | |
pkg_length | 包长度 | uint8 | 39bytes |
|
seq | 指令序号 | uint8 | ||
v_x | x轴速度 | int16 | -500 ~ 500 | (1/10)r/min |
v_y | y轴速度 | int16 | -500 ~ 500 | (1/10)r/min |
axis_x | x轴坐标 | int16 | 1 = (1/10)r |
|
axis_y | y轴坐标 | int16 | 1 = (1/10)r |
|
checksum | ||||
subfix | 0xff | |||
ori | 朝向 | int16 | 1 = 1/10° -1 = -1/10° (逆时针为正) |
|
rfid | rfid序列号 | uint32 | ||
magn | 磁条序列号 | uint16 | 0:missing 1:hit |
|
infra | 红外 | uint8 | 0:false 1:true |
|
ut_f | 前侧超声 | uint16 * 4 |
mm |
|
ut_b | 后侧超声 | uint16 * 4 |
mm |
|
moto_state | 电机状态 | uint8 | 0:stop 1:running 左侧第0位 右侧第一位 |
|
mile | 总里程 | uint16 | mm |
|
checksum | 校验和(不含包头包尾) | uint8_t | 0~255 | |
subfix | 包尾巴 | uint8_t | 0xff |