3 使用与开发 Getting Started
本部分主要介绍BUNKER平台的基本操作与使用,介绍如何通过外部CAN口,通过CAN总线协议来对车体进行二次开发。
3.1 使用与操作
检查
检查车体状态。检查车体是否有明显异常;如有,请联 系售后支持;
检查急停开关状态。确认尾部Q6急停按钮处于释放 状态;
初次使用时确认尾部电气面板中Q2(电源开关)是否 被按下,如按下,请按下后释放,则处于释放状态;
启动
按下电源开关(电气面板中Q2),正常情况下,电源开 关的灯会亮起,电压表正常显示电池电压;
检查电池电压,如电压大于48V,表示电池电压正常, 若电量低,请充电;
关闭操作
按下电源开关,即可切断电源;
急停
按下BUNKER车体尾部的急停开关即可;
遥控控制基本操作流程
正常启动BUNKER机器人底盘后,启动遥控器,将控制模式选择为遥控控制模式,即可通过遥控器控制BUNKER 平台运动。
3.2 充电
BUNKER产品默认随车配备一个标准充电器,可满足客户的充电需求。
充电具体操作流程如下:
确保BUNKER底盘处于停机断电状态。充电前请确认尾部电气控制台中Q2(电源开关)处于关闭状态;
将充电器的插头插入车尾电气控制面板中Q3充电接口;
将充电器连接电源,将充电器开关打开,即可进入充电状态。
默认充电时,底盘没有指示灯,具体是否正在充电需要看充电器的状态指示。
3.3 开发
BUNKER产品针对用户的开发提供了CAN接口,用户可通过该接口对车体进行指令控制。
BUNKER产品中CAN通信标准采用的是CAN2.0B标准,通讯波特率为500K,报文格式采用MOTOROLA格式。通过 外部CAN总线接口可以控制底盘的移动的线速度以及旋转的角速度;BUNKER会实时反馈当前的运动状态信息以 及BUNKER底盘的状态信息等。
协议包含系统状态回馈帧、运动控制回馈帧、控制帧,协议内容具体如下:
系统状态回馈指令包含了当前车体状态回馈、控制模式状态回馈、电池电压回馈以及故障回馈,协议内容如表3.1 所示。
表格 3.1 BUNKER底盘系统状态回馈帧
指令名称
系统状态回馈指令
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
线控底盘
决策控制单元
0x211
200ms 无
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
当前车体状态
unsigned int8
0x00 系统正常
0x01 紧急停车模式
0x02 系统异常
byte [1]
模式控制
unsigned int8
0x00 待机模式
0x01 CAN指令控制模式
0x03遥控控制模模式
byte [2]
byte [3]
电池电压高八位
电池电压低八位
unsigned int16
实际电压X 10 (精确到0.1V)
byte [4]
保留
-
0x00
byte [5]
故障信息
unsigned int8
详见[故障信息说明]
byte [6]
保留
-
0x00
byte [7]
计数校验 (count)
unsigned int8
0~255循环计数,每发送一条指令计数加一次
表格 3.2 故障信息说明表
故障信息说明
字节
位
含义
bit [0]
电池欠压故障
bit [1]
电池欠压警告
bit [2]
遥控器失联保护(0:正常,1:遥控器失联)
byte [5]
bit [3]
驱动1通讯故障(0:无故障,1:故障)
bit [4]
驱动2通讯故障(0:无故障,1:故障)
bit [5]
预留,默认0
bit [6]
预留,默认0
bit [7]
预留,默认0
运动控制回馈帧指令包含了当前车体的运动线速度、运动角速度回馈,协议具体内容如表3.3所示。
表格 3.3 运动控制回馈帧
指令名称
运动控制回馈指令
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
线控底盘
决策控制单元
0x221
20ms 无
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
byte [1]
移动速度高八位
移动速度低八位
signed int16
实际速度X 1000 (精确到0.001m/s)
byte [2]
byte [3]
旋转速度高八位
旋转速度低八位
signed int16
实际速度X 1000 (精确到0.001rad/s)
byte [4]
保留
--
0x00
byte [5]
保留
--
0x00
byte [6]
保留
--
0x00
byte [7]
保留
--
0x00
控制帧包含了线速度控制开度、角速度控制开度以及检验和,其具体协议内容如表3.4所示。
表格 3.4 运动控制指令控制帧
指令名称
控制指令
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
决策控制单元
底盘节点
0x111
20ms 无
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
byte [1]
线速度高八位
线速度低八位
signed int16
车体行进速度,单位mm/s,值域[-1500,1500]
byte [2]
byte [3]
角速度高八位
角速度低八位
signed int16
车体旋转角速度,单位0.001rad/s, 值域[-1000,1000]
byte [4]
保留
--
0x00
byte [5]
保留
--
0x00
byte [6]
保留
--
0x00
byte [7]
保留
--
0x00
模式设定帧用于设定终端的控制接口,其具体协议内容如表3.5所示
表格 3.5 控制模式设定帧
指令名称
控制模式设定指令
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
决策控制单元
底盘节点
0x421
20ms 500ms
数据长度
0x01
位置
功能
数据类型
说明
byte [0]
CAN控制使能
unsigned int8
0x00 待机模式
0x01 CAN指令模式使能
注[1]控制模式说明
BUNKER在遥控器不上电的情况下,控制模式默认是待机模式,需要切换到指令模式才能发送运动控制指令。若打 开遥控器,遥控器拥有最高权限,可以屏蔽指令的控制。当遥控器切换到指令模式时,还是需要先发送控制模式设 定指令才能响应速度指令。
状态置位帧用于清除系统错误,其具体协议内容如表3.6所示。
表格 3.6状态置位帧
指令名称
状态设定指令
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
决策控制单元
底盘节点
0x441
无 无
数据长度
0x01
位置
功能
数据类型
说明
byte [0]
错误清除指令
unsigned int8
0x00 清除所有错误
0x01 清除电机1错误
0x02 清除电机2错误
注3:示例数据,以下数据仅供测试使用
1.小车以0.15/S的速度前进
byte [0]
byte [1]
byte [2]
byte [3]
byte [4]
byte [5]
byte [6]
byte [7]
0x00
0x96
0x00
0x00
0x00
0x00
0x00
0x00
2.小车以0.2RAD/S旋转
byte [0]
byte [1]
byte [2]
byte [3]
byte [4]
byte [5]
byte [6]
byte [7]
0x00
0x00
0x00
0xc8
0x00
0x00
0x00
0x00
除了底盘的状态信息会进行反馈以外,底盘反馈的信息还包括电机数据和传感器数据
表格 3.7 电机转速电流位置信息反馈
指令名称
电机驱动器高速信息反馈帧
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
线控底盘
决策控制单元
0x251~0x254
20ms 无
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
byte [1]
电机转速高八位
电机转速低八位
signed int16
电机当前转速
单位RPM
byte [2]
保留
0x00
byte [3]
驱动器温度低八位
单位1℃
byte [4]
保留
0x00
byte [5]
驱动器状态
详见表3-9
byte [6]
保留
0x00
byte [7]
保留
0x00
表格 3.8 电机温度电压及状态信息反馈
指令名称
电机驱动器低速信息反馈帧
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
线控底盘
决策控制单元
0x261~0x264
无 无
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
byte [1]
保留
保留
--
0x00
0x00
byte [2]
byte [3]
驱动器温度高八位
驱动器温度低八位
signed int16
单位1℃
byte [4]
保留
--
0x00
byte [5]
驱动器状态
unsigned int8
详见表3-9
byte [6]
保留
--
0x00
byte [7]
保留
--
0x00
表格 3.9驱动器状态
字节
位
含义
bit [0]
电源电压是否过低(0:正常 1:过低)
bit [1]
电机是否过温(0:正常 1:过温)
bit [2]
保留
byte [5]
bit [3]
保留
bit [4]
保留
bit [5]
保留
bit [6]
保留
bit [7]
保留
表格 3.10里程计反馈帧
指令名称
里程计信息反馈帧
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
线控底盘
决策控制单元
0x311
20ms 无
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
byte [1]
byte [2]
byte [3]
左轮里程计最高位
左轮里程计低高位
左轮里程计次低位
左轮里程计最低位
signed int32
底盘左轮里程计反馈
单位:mm
byte [4]
byte [5]
byte [6]
byte [7]
右轮里程计最高位
右轮里程计次高位
右轮里程计次低位
右轮里程计最低位
signed int32
底盘右轮里程计反馈
单位:mm
表格 3.11 遥控器信息反馈
指令名称
遥控器信息反馈帧
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
线控底盘
决策控制单元
0x241
20ms 无
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
遥控SW反馈
unsigned int8
bit[0-1]: SWA :2-上档 3-下档
bit[2-3]: SWB:2-上档 1-中档 3-下档
bit[4-5]: SWC:2-上档 1-中档 3-下档
bit[6-7]: SWD:2-上档 3-下档
byte [1]
右边拨杆左右
signed int8
值域:[-100,100]
byte [2]
右边拨杆上下
signed int8
值域:[-100,100]
byte [3]
左边拨杆上下
signed int8
值域:[-100,100]
byte [4]
左边拨杆左右
signed int8
值域:[-100,100]
byte [5]
左边旋钮VRA
signed int8
值域:[-100,100]
byte [6]
保留
--
0x00
byte [7]
计数校验
unsigned int8
0-255循环计数
3.3.2 CAN线的连接
BUNKER随车发货提供了一个航空插头公头如图3.2,线的定义 黄色为CANH、蓝色为CANL、红色为电源正、黑色为电源负。

注:当前BUNKER版本对外扩展接口仅顶部接口开放。此版本 中电源最大可提供10A的电流。
3.3.3 CAN指令控制的实现
正常启动BUNKER移动机器人底盘,打开FS遥控器,然后将控 制模式切换至指令控制,即将FS遥控器SWB模式选择拨至最上 方,此时BUNKER底盘会接受来自CAN接口的指令,同时主机 也可以通过CAN总线回馈的实时数据解析当前底盘的状态,具 体协议内容参考CAN通讯协议。
3.4固件升级
为了方便用户对BUNKER所使用的固件版本进行升级,给客户带 来更加完善的体验,BUNKER提供了固件升级的硬件接口以及与 之对应的客户端软件。其客户端界面如图3.3所示。

升级准备
串口线 X 1
USB转串口 X 1
BUNKER 底盘 X 1
电脑(WINDOWS 操作系统) X 1
固件升级软件
升级准备
连接前保证机器人底盘电源处于断开状态;
使用串口线连接至BUNKER底盘升级串口(需拆卸后电气板);
串口线连接至电脑;
打开客户端软件;
选择端口号;
BUNKER底盘上电,立即点击开始连接(BUNKER底盘会在上电 前6S等待,如果时间超过6S则会进行进入应用程序);若连接成 功,会在文本框提示“连接成功”;
加载BIN文件;
点击升级,等待升级完成的提示即可;
断开串口线,底盘断电,再次通电即可。
3.5 BUNKER ROS Package 使用示例
ROS提供一些标准操作系统服务,例如硬件抽象,底层设备控制,常用功能实现,进程间消息以及数据包管理。ROS是基于一 种图状架构,从而不同节点的进程能接受,发布,聚合各种信息(例如传感,控制,状态,规划等等)。目前ROS主要支持 UBUNTU。
开发准备
硬件准备
CANlight can通讯模块 X1
Thinkpad E470 笔记本电脑 X1
AGILEX BUNKER 移动机器人底盘 X1
AGILEX BUNKER配套遥控器FS-i6s X1
AGILEX BUNKER顶部航空插座 X1
使用示例环境说明
Ubuntu 16.04 LTS(此为测试版本,在Ubuntu 18.04 LTS测试过)
ROS Kinetic( 后续版本亦测试过)
Git
硬件连接与准备
将BUNKER顶部航空插头或者尾部插头CAN线引出,将CAN线中的CAN_H和CAN_L分别与CAN_TO_USB适配器相连;
打开BUNKER移动机器人底盘旋钮开关,检查来两侧的急停开关是否释放;
将CAN_TO_USB连接至笔记本的usb口。连接示意如图3.4所示。

ROS 安装和环境设置
安装具体可以参考HTTP://WIKI.ROS.ORG/KINETIC/INSTALLATION/UBUNTU
测试CANable硬件与CAN 通讯
设置CAN-TO-USB适配器
使能 gs_usb 内核模块
$ sudo modprobe gs_usb
设置500k波特率和使能can-to-usb适配器
$ sudo ip link set can0 up type can bitrate 500000
如果在前面的步骤中没有发生错误,您应该可以使用 命令立即查看can设备
$ ifconfig -a
安装并使用can-utils来测试硬件
$ sudo apt install can-utils
若此次can-to-usb已经和BUNKER机器人相连,且小 车已经开启的情况下,使用下列指令可以监听来自 BUNKER底盘的数据了
$ candump can0
参考来源:
[1] https://github.com/agilexrobotics/agx_sdk [2]https://wiki.rdu.im/_pages/Notes/Embedded-System/Linux/can-bus-in-linux.html
AGILEX BUNKER ROS PACKAGE 下载与编译
下载ros 依赖包
$ sudo apt install ros-$ROS_DISTRO-teleop-twist-keyboard
$ sudo apt install libasio-dev
克隆编译bunker_ros源码
$ cd ~/catkin_ws/src
$ git clone --recursive https://github.com/agilexrobotics/ugv_sdk.git
$ git clone https://github.com/agilexrobotics/bunker_ros.git
$ cd ..
$ catkin_make
参考来源:https://github.com/agilexrobotics/bunker_ros
启动ROS 节点
启动基础节点
$ roslaunch bunker_bringup bunker_minimal.launch
启动键盘远程操作节点
$ roslaunch bunker_bringup bunker_teleop_keyboard.launch
Last updated
Was this helpful?