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