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