3 使用与开发 Getting Started
本部分主要介绍HUNTER 2.0平台的基本操作与使用,介绍如何通过外部CAN口,通过CAN总线协议来对HUNTER 2.0进行二次开发。
3.1 使用与操作
启动操作基本操作流程如下:
检查
检查HUNTER 2.0状态。检查HUNTER 2.0是否有明显异常; 如有,请联系 售后支持;
检查急停开关状态。确认急停按钮处于释放状态;
初次使用时确保尾部电气面板中Q3(旋钮开关)竖直状态, 此时HUNTER2.0处于断电状态,
启动
把旋钮开关旋到水平状态(Q3),正常情况下,电压表正常 显示电池电压;
检查电池电压,正常电压范围为24~26.8V,如有“滴-滴- 滴...”连续蜂鸣器声音,表示电池电压过低,请及时充电。
关闭操作
把旋钮开关旋到竖直即可切断电源。
急停
按下HUNTER 2.0车体顶部的急停开关即可。
遥控控制基本操作流程
正常启动HUNTER 2.0移动机器人底盘后,启动遥控器,将SWB为遥控控制模式,即可通过遥控器控制HUNTER 2.0平台运动。
驻车
驻车采用失电式抱闸以实现驻车功能,因此在车辆行驶时必须关闭驻车功能后才能开始运动;
遥控模式下,SWA为驻车功能开关,将拨杆拨至上方关闭驻车功能后方可控制运动,拨杆拨至下方开启驻车模式,若此时车速不为零, 则会自动减速至零再开启驻车功能;
指令模式下,上电时默认是驻车模式,此时发送速度指令无响应,需要发送驻车解除指令后才能够发送速度指令进行控制。运动控制完 成后如需驻车,发送驻车指令即可。
当触发急停后,驻车会自动开启,此时释放急停,无论遥控器SWA处于何处,都需要再解锁一次,才能正常运动。若断电后,因故障(如电 池电压过低)无法重新上电,可使用Q2旋钮开关手动解锁驻车,以方便移动车辆或者拖车。要注意的是手动(尾部旋钮开关Q2)解锁驻 车优先级最高,会使程序上的驻车失效,因此仅限于特殊情况使用,使用完请及时关闭。
坡道驻车,当HUNTER 2.0处于斜坡上时,如果速度为零,HUNTER 2.0会自动检测电流,当达到一定值并持续一段时间时,HUNTER 2.0 会自动开启坡道驻车功能,再次接收到运动指令后,坡道驻车会自动解除并开始运动。
3.2 充电和电池更换
HUNTER 2.0产品默认随车配备一个10A的充电器,可满足客户的充电需求。正常充电时,底盘没有指示灯说明。具体说明请看充电 器指示灯说明。
充电具体操作流程如下:
确保HUNTER 2.0底盘处于停机断电状态。充电前请确认尾部电 气 控制台中电源开关处于关闭状态;
将充电器的插头插入车尾电气控制面板Q6充电界面中;
将充电器连接电源,将充电器上开关打开,即可进入充电状态。
注意:当前电池从21V充满电状态大约需要4小时,电 池充满电电压约为26.8v;
电池更换
关闭HUNTER2.0底盘的电源开关
按下电池更换面板上的按钮锁,打开电池面板
将当前连接的电池接口拔开,分别为(XT60电源接头)( BMS接头)锁扣
取出电池,注意此过程电池禁止撞击和碰撞
把将要使用的电池装上,然后把接口插回
关闭电源更换面板,按下锁扣
3.3 开发
HUNTER 2.0产品针对用户的开发提供了CAN和RS232(当前版本未开放)的接口,用户可选择其中一种接口对车体进行指令控制。
3.3.1 CAN接口协议
HUNTER 2.0 产品中CAN通信标准采用的是CAN2.0B标准,通讯波特率为500K,报文格式采用MOTOROLA格式。通过外部CAN总线 接口可以控制底盘的移动的线速度以及转向角度;HUNTER 2.0会实时反馈当前的运动状态信息以及HUNTER底盘的状态信息等。 系统状态回馈指令包含了当前车体状态回馈、控制模式状态回馈、电池电压回馈以及故障回馈,协议内容如表3.1所示。
表格 3.1 HUNTER2.0底盘系统状态回馈帧
指令名称
系统状态回馈帧
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
线控底盘
决策控制单元
0x211
100ms 无
数据长度
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]
byte [5]
故障信息高八位
故障信息低八位
unsigned int16
详见备注[故障信息说明]
byte [6]
驻车(抱闸)状态
unsigned int8
0x00 抱闸解开状态 0x01 抱闸锁上状态
byte [7]
计数校验 (count)
unsigned int8
0~255循环计数,每发送一条指令计数加一次
故障信息说明
字节
位
含义
bit [0]
驱动器状态错误(0:无故障1:故障)
bit [1]
上层通讯连接状态(0: 无故障 1: 故障)
bit [2]
预留,默认0
bit [3]
预留,默认0
byte [4]
bit [4]
预留,默认0
bit [5]
预留,默认0
bit [6]
预留,默认0
bit [7]
预留,默认0
bit [0]
电池欠压故障(0:无故障 1:故障)
bit [1]
预留,默认0
bit [2]
遥控器失联保护(0: 无故障 1: 故障)
bit [3]
转向电机驱动器通讯故障(0:无故障 1:故障)
byte [5]
bit [4]
后右电机驱动器通讯故障(0:无故障 1:故障)
bit [5]
后左电机驱动器通讯故障(0:无故障 1:故障)
bit [6]
预留,默认0
bit [7]
前轮转向编码器掉线故障(0:无故障 1:故障)
运动控制回馈帧指令包含了当前车体的运动线速度、转向角度回馈,协议具体内容如表3.2所示。
表格 3.2 运动控制回馈帧
指令名称
运动控制回馈指令
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
线控底盘
决策控制单元
0x221
20ms 无
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
byte [1]
移动速度高八位
移动速度低八位
signed int16
实际速度X 1000 (精确到0.001m/s)
byte [2]
保留
-
0x00
byte [3]
保留
-
0x00
byte [4]
保留
-
0x00
byte [5]
保留
-
0x00
byte [6]
byte [7]
转角高八位
转角低八位
signed int16
实际内转角X 1000 (单位0.001rad)
运动控制帧包含了线速度控制指令、前轮内转角控制指令,其具体协议内容如表3.3所示
表格 3.3 运动控制指令控制帧
指令名称
控制指令
指令名称
接收节点
ID
周期(ms) 接收超时(ms)
决策控制单元
底盘节点
0x111
20ms 500ms
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
byte [1]
线速度高八位
线速度低八位
signed int16
车体行进速度,单位mm/s(有效值+ -1500)
byte [2]
保留
-
0x00
byte [3]
保留
-
0x00
byte [4]
保留
-
0x00
byte [5]
保留
-
0x00
byte [6]
byte [7]
转角高八位
转角低八位
signed int16
转向内转角角度 单位:0.001rad (有效值+ -576)
PS:在CAN指令模式下,需要保证0X111指令帧以小于500MS的周期(建议周期20MS)发送,否则HUNTER2.0会 判定为控制信号心跳丢失而进入报错(0X211反馈上层通讯失联),系统报错后会进入待机模式,若此时0X111 控制帧恢复正常发送周期,上层通讯失联错误可自动清除,同时控制模式恢复为CAN控制模式。
模式设定帧用于设定HUNTER 2.0的控制接口,协议具体内容如表3.4所示 表格3.4控制模式设定指令 。
指令名称
控制模式设定指令
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
决策控制单元
底盘节点
0x421
无 无
数据长度
0x01
位置
功能
数据类型
说明
byte [0]
控制模式
unsigned int8
0x00 待机模式
0x01 CAN指令模式
上电默认进入待机模式
控制模式说明:HUNTER 2.0 在开机上电,遥控器未连接的情况下,控制模式默认是待机模式,此时底盘只接收控制模式指 令,其他指令不做响应,要使用CAN进行控制需要先切换到CAN指令模式。若打开遥控器,遥控器具有最高权限,可以屏蔽 指令的控制,切换控制模式。
状态置位帧用于清除系统错误,协议内容如表3.5所示,
表格3.5状态置位帧
指令名称
控制模式设定指令
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
决策控制单元
底盘节点
0x441
无 无
数据长度
0x01
位置
功能
数据类型
说明
byte [0]
错误清除指令
unsigned int8
0x00清除全部非严重故障
0x01清除转向电机驱动器通讯故障
0x02清除后右电机驱动器通讯故障
0x03 清除后左电机驱动器通讯故障
0x05 清除电池欠压故障
0x06 清除转向编码器通讯故障
0x07 清除遥控信号丢失故障
[注]示例数据,以下数据仅供测试使用
1.车以0.15m/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
byte [0]
byte [1]
byte [2]
byte [3]
byte [4]
byte [5]
byte [6]
byte [7]
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0xC8
除了底盘的状态信息会进行反馈以外,底盘反馈的信息还包括电机的电流信息、编码器以及温度信息。下面的帧反馈是电机 的电流信息、编码器信息以及电机温度信息:
在底盘中四个电机电机编号对应为:转向1号,右后轮2号,左后轮3号
电机转速电流位置信息反馈如表3.6、3.7所示。
表格3.6电机驱动器高速信息反馈帧
指令名称
电机驱动器高速信息反馈帧
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
线控底盘
决策控制单元
0x251~0x253
20ms 无
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
byte [1]
电机转速高八位
电机转速低八位
signed int16
电机当前转速 单位RPM
byte [2]
byte [3]
电机电流高八位
电机电流低八位
signed int16
电机当前电流 单位0.1A
byte [4]
byte [5]
byte [6]
byte [7]
位置最高位
位置次高位
位置次低位
位置最低位
signed int32
电机当前位置 单位:脉冲数
表格3.7电机驱动器低速信息反馈帧
指令名称
电机驱动器低速信息反馈帧
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
线控底盘
决策控制单元
0x261~0x263
100ms 无
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
byte [1]
驱动器电压高八位
驱动器电压低八位
unsigned int16
当前驱动器电压 单位0.1V
byte [2]
byte [3]
驱动器温度高八位
驱动器温度低八位
signed int16
单位1℃
byte [4]
电机温度
signed int8
单位1℃
byte [5]
驱动器状态
unsigned int8
详见[驱动器控制状态]
byte [6]
保留
-
0x00
byte [7]
保留
-
0x00
驱动器状态信息具体内容如表3.8所示。
表格3.8驱动器状态说明
驱动器状态
字节
位
说明
bit [0]
电源电压是否过低(0:正常 1:过低)
bit [1]
电机是否过温(0:正常 1:过温)
bit [2]
驱动器是否过流(0:正常 1:过流)
byte [5]
bit [3]
驱动器是否过温(0:正常 1:过温)
bit [4]
传感器状态(0:正常 1:异常)
bit [5]
驱动器错误状态(0:正常 1:错误)
bit [6]
驱动器使能状态(0:失能 1:使能)
bit [7]
保留
驻车控制指令用于控制驱动轮的电机抱闸,协议具体内容如表3.9所示。
表格3.9驻车控制指令
指令名称
驻车控制指令
发送节点
接收节点
ID
周期(ms) 接收超时(ms)
决策控制单元
底盘节点
0x131
无 无
数据长度
0x01
位置
功能
数据类型
说明
byte [0]
设定当前位置为零点
unsigned int8
0x00关闭驻车(解锁抱闸)
0x01打开驻车(锁抱闸)
抱闸需要解锁才能进行底盘的速度控制
转向零点设定和反馈指令用于校准零位,协议具体内容如表3.10、3.11所示。
表格3.10转向零点设定指令
指令名称
转向零点设定指令
发送节点
接收节点
ID
周期(ms)接收超时(ms)
决策控制单元
底盘节点
0x431
无 无
数据长度
0x01
位置
功能
数据类型
说明
byte [0]
设定当前位置
为零点
unsigned int8
设置当前位置为零点
固定值:0xAA
表格3.11转向零点设定反馈指令
指令名称
转向零点设定反馈指令
发送节点
接收节点
ID
周期(ms)接收超时(ms)
决策控制单元
底盘节点
0x43A
无 无
数据长度
0x01
位置
功能
数据类型
说明
byte [0]
应答转向
零点设置
unsigned int8
0xEE 设置当前位置为零点成功
BMS数据反馈帧如表3.12、3.13所示。
表格3.12BMS数据反馈
指令名称
BMS数据反馈
发送节点
接收节点
ID
周期(ms)接收超时(ms)
线控底盘
决策控制单元
0x361
500ms 无
数据长度
0x08
位置
功能
数据类型
说明
byte [0]
电池SOC
unsigned int8
范围 0~100
byte [1]
电池SOH
unsigned int8
范围 0~100
byte [2]
byte [3]
电池电压值高八位
电池电压值低八位
unsigned int16
单位:0.01V
byte [4]
byte [5]
电池电流值高八位
电池电流值低八位
signed int16
单位:0.1A
byte [6]
byte [7]
电池温度高八位
电池温度低八位
signed int16
单位:0.1℃
表格3.13BMS状态反馈
指令名称
BMS状态反馈
发送节点
接收节点
ID
周期(ms)接收超时(ms)
线控底盘
决策控制单元
0x362
500ms 无
数据长度
0x04
位置
功能
数据类型
说明
byte [0]
Alarm Status 1
unsigned int8
BIT1:过压 BIT2:欠压 BIT3:高温 BIT4:低温 BIT7:放电过流
byte [1]
Alarm Status 2
unsigned int8
BIT0:充电过流
byte [2]
Warning Status 1
unsigned int8
BIT1:过压 BIT2:欠压 BIT3:高温 BIT4:低温 BIT7:放电过流
byte [3]
Warning Status 2
unsigned int8
BIT0:充电过流
里程计信息反馈帧如表3.14所示。
表格3.14里程反馈
指令名称
里程反馈
发送节点
接收节点
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.15所示。
表格3.15遥控器信息反馈帧
指令名称
遥控器信息反馈帧
发送节点
接收节点
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]
Alarm Status 2
signed int8
值域:[-100,100]
byte [2]
Alarm Status 2
signed int8
值域:[-100,100]
byte [3]
Warning Status 1
signed int8
值域:[-100,100]
byte [4]
Warning Status 2
signed int8
值域:[-100,100]
3.3.2 CAN线的连接
HUNTER 2.0随车发货提供了一个航空插头公头如图3.2,线的定义可参考表3.2。
3.4 固件升级
为了方便用户对HUNTER 2.0所使用的固件版本进行升级,给客户带来更加完善的体验,HUNTER 2.0提供了固件升级的硬件接口 以及与之对应的客户端软件。其客户端界面如图3.3所示。
升级准备
串口线 X 1
USB转串口 X 1
HUNTER 2.0底盘 X 1
电脑(WINDOWS 操作系统) X 1
升级过程
连接前保证机器人底盘电源处于断开状态;
使用串口线连接至HUNTER 2.0底盘顶部串口;
串口线连接至电脑;
打开客户端软件;
选择端口号;
HUNTER 2.0底盘上电,立即点击开始连接(HUNTER 2.0 底盘会在上电前3S等待,如果时间超过3S则会断开进入 应用程序);
若连接成功,会在文本框提示“连接成功”;
加载BIN文件;
点击升级,等待升级完成的提示即可;
断开串口线,底盘断电,再次通电即可。
3.5 HUNTER2.0 ROS Package 使用示例
ROS提供一些标准操作系统服务,例如硬件抽象,底层设备控制,常用功能实现,进程间消息以及数据包管理。ROS是基于一 种图状架构,从而不同节点的进程能接受,发布,聚合各种信息(例如传感,控制,状态,规划等等)。目前ROS主要支持 UBUNTU。
开发准备
硬件准备
CANlight can通讯模块 X1
Thinkpad E470 笔记本电脑 X1
AGILEX HUNTER 2.0 移动机器人底盘 X1
AGILEX HUNTER 2.0 配套遥控器FS-i6s X1
AGILEX HUNTER 2.0 顶部航空插座 X1
使用示例环境说明
Ubuntu 16.04 LTS(此为测试版本,在Ubuntu 18.04 LTS测试过)
ROS Kinetic (后续版本亦测试过)
Git
硬件连接与准备
将HUNTER 2.0顶部航空插头或者尾部插头CAN线引出,将CAN线中的CAN_H和CAN_L分别与CAN_TO_USB适配器相连;
打开HUNTER 2.0移动机器人底盘旋钮开关,检查来两侧的急停开关是否释放;
将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已经和HUNTER 2.0机器人相连,且 小车已经开启的情况下,使用下列指令可以监听来自 HUNTER 2.0底盘的数据了
$ 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 HUNTER 2.0 ROS PACKAGE 下载与编译
下载ros 依赖包
$ sudo apt install libasio-dev
$ sudo apt install ros-$ROS_DISTRO-teleop-twistkeyboard
克隆编译hunter_2_ros源码
$ cd ~/catkin_ws/src
$ git clone --recursive https://github.com/agilexrobotics/ugv_sdk.git
$ git clone https://github.com/agilexrobotics/ hunter_ros.git
$ cd ..
$ catkin_make
参考来源:https://github.com/agilexrobotics/hunter_ros
启动ROS 节点
启动基础节点
$ roslaunch hunter_bringup hunter_robot_base.launch
启动键盘远程操作节点
$ roslaunch hunter_bringup hunter_teleop_keyboard.launch
Last updated