本文档介绍了用rayland-dual主板控制小车的控制协议。协议共分两种,1,用内置的安卓系统。2,用外置的ROS系统。3,用外置的CAN总线接口
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电机端口 | 接CAN总线 | 直接插入CAN板 |
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 | |
音频输出 | 运放模块 | |
TEMP0 | 电量检测 | 需要对板上接口进行如下改装,拆除R418电阻并按照下图制作连接线 |
遥控接线图
遥控使用了lura 433Mhz的
需要做如下的短接板,插在E1口上
安卓系统下的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 |
ros系统下的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 |
|
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 |
Can总线下的通讯协议
在不使用板载的A33板卡时,可以使用外置的CAN总线来对小车进行控制,因为CAN默认总线长度为8Byte,收发协议如下
###can板接口
stm32下一共有三组Can板接口,分别是
编号 | 位置 | 是否接出来 |
---|---|---|
1 | PA11和PA12 | 否 |
2 | PB8和PB9 | E0_dir和E1_EN |
3 | PD0和PD1 | 否 |
CAN口的定义如下
管脚 | Pin | 备注 |
---|---|---|
1 | GND | |
2 | CAN_H | |
3 | CAN_L | |
4 | VCC | 5V输出 |
CAN和遥控需要一个外接小板子,用STM32F091RC来做
can接在下面这个接口
’
can协议如下:
上位机->CAN->STM32
Param | Describe | Type | Range | Unit |
---|---|---|---|---|
v_x | x轮速度 | int8 | -127 ~ 127 | r/min |
v_y | y轮速度 | int8 | -127 ~ 127 | r/min |
s_x | x轮里程 | uint16 | 1 = (1/10)r |
|
s_y | y轮里程 | uint16 | 1 = (1/10)r |
|
is_brake | 是否刹车 | uint8 | 0/1 | 代表是否刹车 |
preserved | 保留 | uint8 | 暂无用途 |
STM32->CAN->上位机,最近100ms的里程数
| Param | Describe | Type | Range | Unit |
| —– | :——-: | :—-: | :—-: | ———–: |
| v_x | preserved | uint16 | - | - |
| v_y | 电压 | uint16 | 0~4095 | 代表从0~24V |
| s_x | x轮里程 | uint16 | | 1 = 1pulse
|
| s_y | y轮里程 | uint16 | | 1 = pulse
|
遥控模式
下面这个板子同时用来做Can转接板和遥控板,我们同时用了Can口输出和串口输出,同时接了4个开关。
遥控模式接法
遥控模式需要接三种接口,电位接口,遥控器接口和按键接口。
按键接法
以按键1为例子,按键短接中间两个PIN就可以
遥控器接口
电位接口
参照AD口的位置
注意这里电位器需要接在VCC3.3上面,而不能直接接在VCC上面,否则会烧板子。
开发记录
2018年09月15日调试如下:
- AD采集
- AD初始化
- 无线口发射
- 按键口采集