[公开] HEXMOVE 文档


HEXMOVE 文档索引



快速使用指南

第一次使用请先阅读快速使用指南来了解大概的使用步骤


FAQ

如遇到问题请先查阅FAQ,常见问题基本都可以解决


产品资料

产品资料包含对应的用户手册与简化模型,URDF模型请查阅ROS使用指南


ROS使用指南


XSTD 标准化通讯接口


应用软件


快速使用指南

第一次使用设备请按以下步骤执行:

  1. 下载并查阅 产品用户手册和简化模型,特别是遥控器控制部分
  2. 将底盘架起,确保轮子都离开地面
  3. 打开底盘电源,听到蜂鸣声4声升调代表开机正常,观察电量显示是否正常
  4. 如果有遥控器请拨到CAN模式,切换遥控控制模式请查阅产品用户手册
  5. 缓慢推动遥控器摇杆,观察运动是否正常
  6. 关闭电源,连接好CAN和电源线,请查阅 CAN硬件连接标准CAN总线配置
  7. 使用ROS的用户请安装ROS包,请查阅 ROS-SDK
  8. 使用ROS的demo,请查阅 ROS-demo
  9. 如有测试需求,可以下载 测试系统XVIEW
  10. 如果直接使用CAN指令控制,请先阅读CAN协议框架说明,然后阅读具体设备类的CAN协议标准,并配合XVIEW或者CAN分析仪使用,操作流程如下:
    1. 将产品用户手册中的型号和编号(默认为1)替换标准CAN协议中的对应部分,例如NEOS底盘ID如下图

      neos_id.png

      替换 底盘类CAN协议标准中下面对应的型号和编号

       

      1721866681958.png

    2. 使用xview调试请先阅读连接设备的方法

    3. 通讯设备中CAN-COM HUB是支持串口和CAN调试的,WIFI HUB只支持串口调试:

    4. 如果使用串口来调试,进入XVIEW->工具->COM助手,如下图:

      z4W7G41TiO4lb25P-1721866918827.png

    5. 请先点击XSTD标准设置再打开串口,然后直接填入数据发送标准消息即可,如下图:

      1721867048893.png

    6. 计算校验和,参考串口通讯协议部分。使用xview计算校验和,会自动算出SUM值,如下图,其他串口功能请在XVIEW内置的说明中查看:

      xview-com.png

    7. 如果使用CAN调试则进入XVIEW->工具->CAN分析仪
    8. 如果设备没有反应,可能是指令输入有误或错误更改了编号等参数,可通过xview直接示教:

      • 请先确保遥控器关闭或切换至CAN模式,具体可在底盘手册里查看
      • 连接好HUB到电脑,并重启设备
      • 点击 xview->底盘->通讯消息
      • 点击 连接->使能设备->CAN模式
      • 拖动虚拟摇杆

      xview-vehicle.png

      以上步骤可以参考前面的xview使用内容,确定底盘能运动后,观察SEND MESSAGE框内内容,每次点击按钮发出的指令都会在该处显示,可更具需要复制对应的到串口发送,如下图:

      xview-msg.png

FAQ

提示 可通过右上角search快速寻找关键词

如何使用 SDK / 如何控制机器人移动

查阅使用ROS的demo


SDK 刚安装时可以通过编译, 过一阵后无法通过编译

SDK 的 ROS 版本不能混用. 在 ROS1 下载的 SDK 无法在 ROS2 环境下通过编译。

  1. 外置 CAN HUB 用户, 请检查 CAN HUB 是否已经插入, USB线/CAN线 是否松动。 可以通过在终端使用 ip a 命令检查是否有获取到相应的IP地址

  2. 如果是刚刚完成 SDK 的安装, 可能需要先重启电脑.


使用 ROS TOPIC 查看时,看到一些如 gps/arm 等并未购买的配件的 topic

发布 topic 的包为通用包,这些其他 topic 是给其他设备使用的。如果没有选配则没有任何影响,可以放心忽略。


多模电源如何能上电自动输出

多模电源有AUTO和MANU两种启动模式,在侧面有切换开关,请查阅多模电源用户手册


底盘移动过程中偶尔停顿或者失联

可能是CAN总线接头处没处理好出现偶发短路,请检查接线

产品资料

产品资料

产品选型指南


产品选型手册下载

产品资料

底盘类设备

提示

产品资料链接中包含用户手册和 STEP 简化模型。

可使用XVIEW测试系统来测试底盘通讯和运动:XVIEW测试系统


HAMMER-80

HAMMER-80.png


TRIGGER-A

TRIGGER-A.png


ARK

ARK.png


ARK-MINI

ARK-MINI.png


RAY

ray.png


ORCS-DIFF

ORCS-DIFF.png


ORCS-MCNM

ORCS-MCNM.png


ORCS-MCNM-PRO

ORCS-MCNM-PRO.png


ORCS-MINI

ORCS-MINI.png


NEOS

neos.png

产品资料

轮系类设备

轮系类设备


模组化麦克纳姆轮

xroll-m.png

产品资料

通讯类设备

通讯类设备

提示

可使用XVIEW测试系统来测试设备通讯和工作

XVIEW测试系统


WiFi HUB

WIFI HUB.png

产品资料

电源类设备

电源类设备

提示

可使用XVIEW测试系统来测试设备通讯和工作

XVIEW测试系统


多模电源

multpower.png


AUTO CHARGER-E

auto_charge-e.png


AUTO CHARGER-G

auto_charge-g.png

ROS 使用指南

ROS 使用指南

ROS-SDK

安装 ROS 软件包

提示

支持的架构:

注意, 不支持 RISCV

支持的ROS版本范围:

Ubuntu 20.04

Ubuntu 22.04

注意, 不支持 Ubuntu18.04 版本。

如果一定要使用 Ubuntu 18.04,请在 18.04 中利用 Docker 安装其他 Ubuntu 版本。即使这样,以 Ubuntu 1804 做主机也无法支持USB格式的CAN转换器,需要购入以太网版本的 CAN 转换器。

警告 注意, 下载软件包之前, 需要先安装好 ROS. 并 source 你所需要使用的版本. 否则下载的软件包将 无法使用

SDK zip 不能单独使用。原先由 apt.hexfellow.com 安装的 ros-$ROS_DISTRO-xpkg-msgsros-$ROS_DISTRO-xpkg-comm 必须先用本页提供的 deb dpkg -i 安装(apt 站即将关闭,不要再配 hexfellow apt 源)。请按自己的 ROS 发行版和 CPU 架构下载对应两个包:

以 Humble / x86_64 为例:

# 先安装官方 ROS(仍用 Ubuntu/ROS 上游源,不是 hexfellow apt)
source /opt/ros/humble/setup.bash
sudo dpkg -i ros-humble-xpkg-msgs_*.deb ros-humble-xpkg-comm_*.deb
sudo apt-get -f install -y   # 若缺 ROS 依赖

同目录还有可选包(imu / vehicle / arm / bridge 等):/files/ros-sdk/debs/。底盘 SDK 最少只需 msgs + comm。静态 deb 覆盖 Noetic(20.04)、Humble/Iron(22.04);页面里提到的 Foxy/Galactic 没有对应 xpkg deb,请改用 Noetic 或 Humble。

请根据实际购买的产品,直接下载对应 SDK 压缩包(不再使用 hextool.bash / rosdl)。

依赖 deb 装好后,解压 SDK 并编译。以 ORCS-DIFF / ROS2 Humble 为例:

unzip sdk_orcs_diff_ws.zip
cd sdk_orcs_diff_ws
source /opt/ros/humble/setup.bash   # ROS1 则 source /opt/ros/noetic/setup.bash
colcon build --symlink-install      # ROS1 用 catkin_make
source install/setup.bash           # ROS1 用 source devel/setup.bash

提示 为防止手敲命令敲错字符, 建议使用 Ubuntu 所带的浏览器直接打开本网址, 并将命令从浏览器中复制到终端.


SDK软件包结构说明

各个软件包大同小异, 这里以 ORCS-DIFF 为例.

root@1c2edac84f0b:~# tree -d -L 5
.
└── sdk_orcs_diff_ws
    └── src
        ├── demo
        │   └── demo_general_chassis
        │       ├── demo_vehicle
        │       └── tools
        └── drivers
            └── xpkg_vehicle
                ├── include
                ├── ini
                ├── launch
                ├── scripts
                ├── src
                └── tools

14 directories

警告 注意, demo 文件夹中的 launch 文件均设计成为只能同时启动一个. 请不要同时 launch 多个 launch 文件

如果没有专业指导, 请勿改动除了 demo 文件夹之外的任何软件包.


使用SDK软件包

软件包提供了测试demo,请查阅使用ROS的demo

ROS 使用指南

使用ROS的demo

启动前检查

请查阅 CAN硬件连接标准CAN总线配置,确保硬件已经正确连接

提示 请先掌握 ROS 的基本知识。可以参考 ROS1教程 以及 ROS2教程,了解对 ROS 系统的常见约定。

请检查确保完成以下事项:

  1. 已经安装完成ROS-SDK,如果是第一次安装SDK,建议在 首次安装后重启 一次

  2. 已经通过了编译并没有报错

  3. 已经完成工作空间的source

  4. 如果使用CAN-COM HUB,请确定正确连接CAN总线,确定已经能够搜索到设备

    • 在终端使用lsusb查询可看到以下设备
  5. 确保遥控器已经关闭;或者打开时,拨到的是 CAN 模式

    关于遥控器与模式,请参阅产品用户手册中关于遥控器的部。


底盘类设备

警告 注意, 首次尝试使用软件控制机器人时,请确保机器人活动范围内没有其他障碍,或将机器人架起。

底盘的测试demo有以下两个:

* demo_basic_ctrl.launch
* demo_key_ctrl.launch

demo_basic_ctrl.launch是标准的启动文件,可以配套自动驾驶直接使用,通过使用 /cmd_vel 话题来控制机器人的移动。

demo_key_ctrl.launch是支持键盘控制的启动文件,使用 turtle_teleop_key 来利用键盘控制机器人。如果你还没有看过 ROS 的 turtlesim 教程,请先查看 turtlesim 教程。

提示 注意并不是使用方向键控制移动,请查看终端打印的使用方式提示,按下提示中的前进按钮。

成功启动launch后会得到以下终端消息

startup.png

launch文件中参数设置和通讯msg请查阅src/drivers/xpkg_vehicle/README.md文件,以下解释几个关键参数:

!!!note 如果出现底盘无法控制,可能是mode_can_lock设置false,并且切换到了其他模式

成功启动launch包后可以通过rostopic list查看ROS话题,以下为几个关键话题:

ROS 使用指南

Rviz导航插件

该插件仅试用于ROS1版本


 图标设置

marker setting.png

用于设置目标点的图标大小,1.0是默认值,其他数值代表尺寸比例倍数,需要点击set刷星所有图标

mark.png

marker图标由两部分组成,数字部分为该目标点的序列号,箭头部分为该目标点的停止朝向


添加目标点

add goal.png

  1. 请先使用Rviz自带功能2dnave.png 在地图上选取目标点
  2. 可通过输入X、Y、R值来微调坐标位置
  3. 如果需要直接前往目标点可点击 GOTO 按键
  4. 如果需要将目标加入到目标列表请点击 ADD GOAL TO LSIT 按键
  5. 如果目标与目标列表上一个目标距离过远,会在列表中自动插入中间目标值,容忍的最大距离差可在上图中修改,默认是10m

目标列表管理

goal list.png


模式选择

mode.png

模式选择用于不同的列表目标点执行方式

cycle mode 循环模式,执行完最后一个目标点会继续执行第一个目标点
sequence mode 序列模式,执行完列表所有目标点会停止
step mode 单步模式,按列表顺序一次执行一个目标点

为了平滑路径可以调整Goal tolerance,进入目标点的该距离半径后会自动跳转到下一目标点,场景越小该值需要越小。该设置不影响最后的目标点到达


启动控制

control.png

XSTD 标准化通讯接口


XSTD 标准化通讯接口

硬件连接标准

XSTD的标准规定了CAN接口的规范,目前所有具有CAN功能的设备皆采用此连接方式。该接口采用 EDGK3.5 4P 端子,一般为橘黄色,接线方式如下:


端口定义如下图:

edgk3.5.png


CAN通讯连接拓展案例如下图所示:

如果扩展网络中有电源转换器存在,请将底盘与电源先相连,防止大电流通过HUB等其他设备造成过流烧毁

CAN connect.png.png

端子使用时请注意正确拧开螺钉如下图,安装完成后请检查CAN是否有短路

3.5open.png

连接底盘时请先断电,如果底盘使用航空接口一般会有方向性,请对准后插入,不要强行硬插

XSTD 标准化通讯接口

CAN总线配置

CAN总线原理

如果您没有购买IMU,距离传感器等独立于 底盘/机器人 设备的产品,您无需阅读本节。

读前知识点

CAN总线的物理限制要求,CAN总线的末端必须配备两个120欧姆的终端电阻。

HEXMOVE CAN 配置

HexMove的CAN设备均为CAN2.0B,500K。一般的使用场景如下图所示:

CAN.png

上图中的 End Device 一般是 工控机/工控机的USB转CAN 设备。结合以上使用场景,HEXMove只有两类设备默认接入了120欧姆:

  1. 底盘/导航塔(如上图左边的产品所示)
  2. CAN-HUB

HEXMove 提供的所有 CAN 转接器都默认开启 120 欧,这意味着您使用时,只需要保证最后一个插着的设备是CAN-HUB即可。如果您使用自己的CAN转接设备,需要保证转接设备上的120欧正确接入。

但如果您没有结合我们的底盘/导航塔 使用,这意味着上图左边的CAN终端电阻缺失。您需要通过焊线或其他方式(如在接一个CAN-HUB挂在那里纯充当120用)确保另一头也具有120欧姆的终端电阻。

XSTD 标准化通讯接口

CAN协议构架说明

XSTD是一套基于CAN网络,可扩展到ROS使用的通讯协议规范。该规范为支持多设备和模组设计,在保持简洁易懂的同时提供给各模组充分的拓展空间,并支持多个同种设备同时在线工作。协议对同类型设备采用统一规范,牺牲少量效率换来极大的便捷性,非常便于早期功能开发与学习。 


1.设备状态定义

使能(通讯设备默认状态)

▪设备所有功能正常运行。
▪对CAN和COM指令做出反馈。
▪默认关闭次要反馈,可通过指令开启。

失能(普通设备默认状态)

▪设备进入通讯静默状态,内部任然运行。
▪只接受通用指令,不接受专用指令。
▪只发送心跳反馈和通用指令的反馈,不发送专用指令反馈。
▪射频遥控器等设备自身安装的控制设备任然有效,并拥有更高优先级。
 


2.设备的分类与识别 

每个设备有三个主要识别属性:大类、型号、编号

▪大类是按设备类型共分为30类,编码从0x01~0x1E,0x1F作为广播编码 。
▪型号是从0x01~0xFE的序号,在同一大类中,型号是确定且唯一的,与设备名称绑定的,0xFF
作为广播编码。
▪编号是从0x01~0xFE的序号,可以在XVIEW上设置,用于区分同大类且同型号的设备,0xFF作
为广播编码。

在使用指令时,需要对应的大类、型号、编号,对应的大类与型号代码请在对应设备的用户手册中查询。 


3.指令类型 

指令分为通用指令和专用指令 

通用指令只通过CAN ID区分接受设备,数据内容对所有大类都是相同的,主要用于基础功能下设置和反馈
▪专用指令是按大类区分,每个大类的功能是不同的,同个大类中功能按需取用
▪通用指令的功能编码从0x 01开始,对应反馈从 0x A1开始(心跳包反馈为0x B0)
▪专用指令的功能编码从0x 11开始,对应反馈从 0x B1开始 

微信截图_20240722174441.png


4.CAN数据结构 

产品中CAN通讯采用CAN2.0B(扩展帧),通讯波特率为500K。

CAN ID 编码规范: 

image.png

CAN 数据位:Byte[0]~Byte[7]:

image.png

CAN使用的CAN信息为上述提到的CANID与CAN_DATA,总计12个字节数据。使用时,针对不同CANID进行相应的CAN_DATA数据传输。 

CANID中大类与型号是设备的固定参数,数值不会改变,编号默认为1,当有多个同类设备同时使用时,可以通过通用指令修改。 

 CAN数据帧

数据定义

ID[0]

ID[1]

ID[2]

ID[3]

DATA [4~11]

数据类型

unsigned int8

unsigned int8

unsigned int8

unsigned int8

0~8 x unsigned int8

说明

设备大类

设备型号

设备编号

设备功能

0~8字节数据


5.指令集查询说明 

CAN协议分为设备通用指令与设备专用指令。通用指令操作对系统所有模块配件均适用,常见用于设备启动,系统升级,版本查询,系统复位等;设备专用指令专属于不同设备模块,不同模块根据需要选择使用部分专用指令,对特殊设备可定制专用指令。 

image.png

CAN闭环控制系统,对绝大数指令均有应答机制。即命令帧,反馈帧一一对应。根据反馈帧实时监控数据流准确性。对部分功能可能需要先使能反馈或设置反馈周期。

image.png



6.CAN分析仪

如果有使用CAN-COM HUB或WiFi HUB,可以使用XVIEW的CAN分析仪功能来测试

微信截图_20240723010211.png

XSTD 标准化通讯接口

COM协议构架说明

为了简化协议和方便解析,COM协议本质上就是对CAN指令的封装,其中包含的4~12位数据为4位CAN ID和8位CAN数据。由于COM报文长度是8~16位,使用固定表头0x55,请先阅读标准CAN协议再阅读以下内容。

COM 报文设置

通信波特率:460800

标准:自定义协议串口

COM 报文结构

数据定义

HEAD

LEN

DATA [0~11]

Frame ID

Checksum

数据类型

unsigned int8

unsigned int8

4~12 x unsigned int8

unsigned int8

unsigned int8

说明

表头固定0x55

COM报文长度0x08~0x10

4位CAN ID

0~8位CAN报文数据

帧ID

可固定也可累加

连贯数据的序列戳

前7~15位内容的累加和

再取最低位的int8反馈

DATA [0~11]

数据定义

ID[0]

ID[1]

ID[2]

ID[3]

DATA [0~7]

数据类型

unsigned int8

unsigned int8

unsigned int8

unsigned int8

0~8 x unsigned int8

说明

设备大类

设备型号

设备编号

设备功能

0~8字节数据

报文内容解释

Frame ID

Checksum

unsigned char checksum(unsigned char* data) {
    unsigned char sum = 0x00;
    for (int i = 0; i < data[1] - 1; i++) {
        sum += data[i];
    }
    return sum;
}

XSTD 标准化通讯接口

通用CAN协议标准

通用指令是所有设备都会用到的指令,包含了各项设备基础功能。

请注意使用设备CANID替换表中XX部分

请先确保阅读了CAN协议构架说明再开始以下内容

通用指令在设备失能情况下也是可以使用的,其中心跳包是任何情况下都会反馈的,是设备是否在线的标识


通用指令总表

此表展示了通用指令的所有指令内容,方便快速查询和定位

指令集

 

反馈集

重要性

说明

命令内容

大类

(00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

 

大类

(00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

反馈内容

周期性

设备重启

xx

xx

xx

01

 

xx

xx

xx

A1

准备重启

对命令反馈

必备

设备完全重置,相当于上电操作

软体版本查询

xx

xx

xx

02

 

xx

xx

xx

A2

软体版本反馈

对命令反馈

必备

大版本查询,不同于bin文件固件号

通用设置

xx

xx

xx

03

 

xx

xx

xx

A3

通用设置成功

对命令反馈

必备

使能和编号设置

特殊状态复位

xx

xx

xx

04

 

xx

xx

xx

A4

特殊复位成功

对命令反馈

必备

清除错误等特殊状态

运动状态复位

xx

xx

xx

05

 

xx

xx

xx

A5

运动复位成功

对命令反馈

选备

清除里程计等运动数据,非运动设备可无视指令

编号设置

xx

xx

xx

06

 

xx

xx

xx

A6

编号设置成功

对命令反馈

必备

用于设置设备编号

查找设备

xx

xx

xx

07


/

/

/

/

/

/

选备

收到后设备利用可用的方式

(包括不限于蜂鸣器,LED,灯光等)

将自身与其他同类设备区分出来

便于人类寻找到特定设备

/

/

/

/

/

 

xx

xx

xx

B0

设备心跳包

周期反馈

必备

 

进入升级模式

xx

xx

xx

F1

 

/

/

/

/

/

/

选备

如果没有boot loader则无视指令

级模式专用

xx

xx

xx

F2~FF

 

xx

xx

xx

F2~FF

升级模式专用

对命令反馈 

不需要

主程序直接忽略,bootloader使用


1. 设备重启/准备重启 

设备重启会导致设备对外输出关闭,有其他用电设备例如工控机时,请谨慎使用

设备重启

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x XX XX XX 01

3

/

数据位

功能

数据类型

说明

byte[0]

大类

unsigned int8

按设备型号分配表中大类(与ID中相同 )

byte[1]

型号

unsigned int8

按设备型号分配表中型号(与ID中相同 )

byte[2]

编号

unsigned int8

初始为1(与ID中相同 )

byte[3~7]

/

/

/

准备重启反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x XX XX XX A1

0

/

数据位

功能

数据类型

说明

byte[0~7]

/

/

/

注:当系统中有多台机器同时使用时,可更改设置设备编号,设备编号默认为0x01。发送指令数据长度为8,无效位补0(后文同)。  

举例:向型号0x02 编号0x03的底盘发送CANID:0x01 02 03 01 数据:01 02 03,系统重启。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 01

数据帧

扩展帧

3

01 02 03

上位机

0x01 02 03 A1

数据帧

扩展帧

0

/


2. 固件版本查询

设备重启

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x XX XX XX 02

0

/

数据位

功能

数据类型

说明

byte[0]

/

/

/

准备重启反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x XX XX XX A2

8

/

数据位

功能

数据类型

说明

byte[0]

硬件版本字符[0]

unsigned int8ASCII

用于电控的版本号,PCB修改时更新

byte[1]

硬件版本字符[1]

unsigned int8ASCII

byte[2]

硬件版本字符[2]

unsigned int8ASCII

byte[3]

硬件版本字符[3]

unsigned int8ASCII

byte[4]

软件版本字符[0]

unsigned int8ASCII

用于大更新的版本号,不同于bin文件的固件号

byte[5]

软件版本字符[1]

unsigned int8ASCII

byte[6]

软件版本字符[2]

unsigned int8ASCII

byte[7]

软件版本字符[3]

unsigned int8ASCII

举例:向型号0x02 编号0x03 的底盘发送CANID:0x01 02 03 02 数据:NULL。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 02

数据帧

扩展帧

0

/

上位机

0x01 02 03 A2

数据帧

扩展帧

8

XX XX XX XX XX XX XX XX


3. 通用设置/通用设置成功 

通用设置指令用于对设备进行设备使能操作,一般是上电后第一要使用的指令

通用设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x XX XX XX 03

4

/

数据位

功能

数据类型

说明

byte[0]

大类

unsigned int8

按设备型号分配表中大类(与ID中相同)

byte[1]

型号

unsigned int8

按设备型号分配表中型号 (与ID中相同 )

byte[2]

编号

unsigned int8

初始为1(与ID中相同 )

byte[3]

使能

unsigned int8

0x00: 关闭设备 / 0x01: 使能设备

byte[4~7]

/

/

/

设置成功反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x XX XX XX A3

0

/

数据位

功能

数据类型

说明

byte[0~7]

/

/

/

注:底盘默认上电是失能状态。 

举例:使能设备型号0x02 编号0x03 的底盘,向系统ID:0x01 02 03 03发送指令01 02 03 01,设备使能。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 03

数据帧

扩展帧

4

01 02 03 01

上位机

0x01 02 03 A3

数据帧

扩展帧

0

/


4. 特殊状态复位 / 特殊复位成功

特殊状态复位用于系统异常(发生错误)时清错重置

特殊状态复位 

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x XX XX XX 04

1

/

数据位

功能

数据类型

说明

byte[0]

状态复位

unsigned int8

0xCC:复位 / 其他值无操作

byte[1~7]

/

/

/

复位成功反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x XX XX XX A4

0

/

数据位

功能

数据类型

说明

byte[0~7]

/

/

/

举例:向型号0x02 编号0x03 的底盘发送CANID:0x01 02 03 04 数据:CC 。 
 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 04

数据帧

扩展帧

1

CC

上位机

0x01 02 03 A4

数据帧

扩展帧

0

/



5. 运动状态复位 / 运动复位成功 

运动状态复位用于系统重置运动数据,例如里程计数据,该指令只对有运动能力的设备有效 

运动状态复位 

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x XX XX XX 05

1

/

数据位

功能

数据类型

说明

byte[0]

状态复位

unsigned int8

0xCC:复位 / 其他值无操作

byte[1~7]

/

/

/

复位成功反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x XX XX XX A5

0

/

数据位

功能

数据类型

说明

byte[0~7]

/

/

/

举例:向型号0x02 编号0x03 的底盘发送CANID:0x01 02 03 05 数据:CC 。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 05

数据帧

扩展帧

1

CC

上位机

0x01 02 03 A5

数据帧

扩展帧

0

/


6. 编号设置 

编号设置指令用于对设备设置新编号。当系统只有单一设备时,编号始终默认为0x01,当系统中有多台设备时可自定义设置设备编号

编号设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x XX XX XX 06

4

/

数据位

功能

数据类型

说明

byte[0]

大类

unsigned int8

按设备型号分配表中大类(与ID中相同)

byte[1]

型号

unsigned int8

按设备型号分配表中型号 (与ID中相同 )

byte[2]

编号

unsigned int8

初始为1(与ID中相同 )

byte[3]

新编号

unsigned int8

如果不改变编号则与原编号相同

byte[4~7]

/

/

/

设置成功反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x XX XX XX A6

(此处反馈为原编号)

0

/

数据位

功能

数据类型

说明

byte[0~7]

/

/

/

举例:设备型号0x02 编号0x03 的底盘更改设备编号为0x02,向系统ID:0x01 02 03 06发送指令01 02 03 02 ;设备编号由0x03切换为0x02。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 06

数据帧

扩展帧

4

01 02 03 02

上位机

0x01 02 03 A6

数据帧

扩展帧

0

/



7. 查找设备

当有多个设备存在无法分辨需要寻找的设备时,可以使用该功能是设备LED或蜂鸣器做出响应,方便寻找 

查找设备

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x XX XX XX 07

0

/

数据位

功能

数据类型

说明

byte[0~7]

/

/

/

该条指令无反馈消息

举例:查找设备大类0x02 型号0x02 编号0x03 的设备。

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x02 02 03 07

数据帧

扩展帧

0

/

上位机

/

/

/

/

/


8. 设备心跳包

心跳包在设备失能和使能时都能持续发出,不需要任何指令控制,是设备是否在线的标识

设备心跳

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x XX XX XX B0

1

500

数据位

功能

数据类型

说明

byte[0]

使能状态

unsigned int8

0x00: 已关闭 / 0x01: 已使能

byte[1~7]

/

/

/

该条反馈持续每500ms发出,不接受任何指令控制

举例: 型号0x02 编号0x03 使能的底盘反馈心跳包。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

/

/

/

/

/

上位机

0x01 02 03 B0

数据帧

扩展帧

1

01

XSTD 标准化通讯接口

底盘类CAN协议标准

为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为底盘使用的专用CAN协议。

请先确保阅读了CAN协议构架说明再开始以下内容

请注意使用设备CANID替换表中XX部分

底盘类设备的大类ID为 01


底盘指令总表

此表展示了专用指令的所有指令内容,方便快速查询和定位

指令集

 

反馈集

重要性

说明

设备对象

命令内容

大类

(00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

 

大类

(00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

反馈内容

周期性

移动底盘



底盘状态设置

01

xx

xx

11

 

01

xx

xx

B1

底盘状态信息

周期反馈

必备

 

底盘运动控制

01

xx

xx

12

 

01

xx

xx

B2

底盘运动信息

周期反馈

必备

 

/

/

/

/

/

 

01

xx

xx

B3

主轮里程计

周期反馈

必备

 

/

/

/

/

/

 

01

xx

xx

B4

次轮里程计

周期反馈

选备

主要用于正交轮和麦克纳姆轮体系

遥控器信息发送使能

01

xx

xx

15

 

01

xx

xx

B5

车载遥控器信息

使能后周期反馈

必备

 

安全传感器发送使能

01

xx

xx

16

 

01

xx

xx

B6

车载安全传感器信息

使能后周期反馈

选备

 

驱动器运动信息发送使能

01

xx

xx

17

 

01

xx

xx

B7

驱动器运动信息

使能后周期反馈

选备

 

驱动器状态信息发送使能

01

xx

xx

18

 

01

xx

xx

B8

驱动器状态信息

使能后周期反馈

选备

 

底盘零点较准

01

xx

xx

19

 

01

xx

xx

B9

零点较准信息

对命令反馈

选备

主要用于阿克曼底盘的方向舵较准

/

/

/

/

/

 

01

xx

xx

BA

错误状态信息

周期反馈

必备

 

获取RTC时间

01

xx

xx

1B

 

01

xx

xx

BB

RTC时间信息

对命令反馈

选备

需要具有板载时钟芯片

设置RTC时间

01

xx

xx

1C

 

01

xx

xx

BC

设置RTC时间反馈

对命令反馈

选备

 

设置唤醒时间

01

xx

xx

1D

 

01

xx

xx

BD

设置唤醒时间反馈

对命令反馈

选备

用于需要睡眠模式的设备

电源输出控制

01

xx

xx

1E

 

01

xx

xx

BE

电源输出反馈

对命令反馈

选备

配合睡眠模式使用

机械参数设置

01

xx

xx

1F

 

01

xx

xx

BF

机械参数反馈

对命令反馈

必备


odom设置

01

xx

xx

20


01

xx

xx

C0

odom-位移反馈

周期反馈

选备


/

/

/

/

/


01

xx

xx

C1

odom-旋转反馈

周期反馈

选备

 


1. 底盘状态设置 / 底盘状态信息 

底盘的基础设置,某些功能如刹车、特殊功能等只对部分车型有效,请查阅对应车型的用户手册

底盘状态设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 11

4

/

数据位

功能

数据类型

说明

byte[0]

设置控制模式

unsigned int8

0x00: 待机 / 0x01: 遥控 / 0x02: CAN控制 / 0x03: 随动

byte[1]

使能蜂鸣器

unsigned int8

0x00: 关闭 / 0x01: 开启(默认)

手动控制蜂鸣器,不影响报警的蜂鸣器

byte[2]

使能刹车

unsigned int8

0x00: 松开 / 0x01: 锁止(如有刹车则默认)

byte[3]

使能特殊功能

unsigned int8

0x00: 关闭(默认) / 0x01: 开启

byte[4~7]

/

/

/

底盘状态信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX B1

8

100

数据位

功能

数据类型

说明

byte[0]

设备状态

unsigned int8

0x00: 正常 / 0x01: 异常(出现错误报警)

byte[1]

控制模式

unsigned int8

0x00: 待机 / 0x01: 遥控 / 0x02: CAN控制 / 0x03: 随动

byte[2]

电池电压低8位

unsigned int16

单位:0.1V

byte[3]

电池电压高8位

byte[4]

蜂鸣器状态

unsigned int8

0x00: 关闭 / 0x01: 开启(默认)

手动控制蜂鸣器,不影响报警的蜂鸣器

byte[5]

遥控器状态

unsigned int8

0: 在线 / 1: 离线

byte[6]

刹车状态

unsigned int8

0x00: 松开 / 0x01: 锁止(如有刹车则默认)

byte[7]

特殊功能状态

unsigned int8

0x00: 关闭(默认) / 0x01: 开启

当使用有线方式控制底盘时,需先切换控制模式至CAN模式。如果使用了遥控器,请将遥控器SWA拨到最下面的CAN模式,遥控器说明请看设备的用户手册。

刹车使能只适用于有刹车功能的底盘,无刹车功能的默认该位保持0x00,有刹车功能的默认开启刹车。 

特殊功能根据底盘而不同,例如阿克曼底盘为差速锁功能,不是所有底盘都有特殊功能。特殊功能也可由遥控器开启,参见对应设备的用户手册。 

举例: 型号0x02 编号0x03 的底盘更改为CAN模式控制并使能蜂鸣器, 发送CANID:0x 01 02 03 11 数据:02 01 00 00。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 11

数据帧

扩展帧

4

02 01 00 00

上位机

0x01 02 03 B1

数据帧

扩展帧

7

00 02 XX XX 01 00 00


2. 底盘运动控制 / 底盘运动信息 

底盘的基础控制指令,对不同车型有所不同,注意区分

底盘运动控制

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 12

8

/

数据位

功能

数据类型

说明

byte[0]

x方向速度低8位

signed int16

单位:mm/s

byte[1]

x方向速度高8位

byte[2]

y方向速度低8位

signed int16

单位:mm/s

byte[3]

y方向速度高8位

byte[4]

角速度低8位

signed int16

阿克曼模式不可作为输入控制,但可以反馈

单位:mrad/s

byte[5]

角速度高8位

byte[6]

角度低8位

signed int16

阿克曼模式专用

单位:mrad

byte[7]

角度高8位

底盘运动信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX B2

8

20

数据位

功能

数据类型

说明

byte[0]

x方向速度低8位

signed int16

单位:mm/s

byte[1]

x方向速度高8位

byte[2]

y方向速度低8位

signed int16

单位:mm/s

byte[3]

y方向速度高8位

byte[4]

角速度低8位

signed int16

单位:mrad/s

byte[5]

角速度高8位

byte[6]

角度低8位

signed int16

阿克曼模式专用

单位:mrad

byte[7]

角度高8位

Y方向速度只对麦克纳姆轮系等具有平移功能的车型才有效,其他车型默认为0

由于电机执行有精度问题,系统反馈值会与设定值有细微偏差 

阿克曼车型只使用角度控制,但同时提供角度和角速度反馈。该处角度指前轮转向角

举例: 型号0x02 编号0x03 的底盘以0.5m/s的速度前进,同时以-0.1rad/s的角度转动,发送CANID:0x01 02 03 12 数据:F4 01 00 00 9C FF 00 00。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 12

数据帧

扩展帧

8

F4 01 00 00 9C FF 00 00

上位机

0x01 02 03 B2

数据帧

扩展帧

8

F4 01 00 00 9C FF 00 00


3. 里程计反馈  


主里程计 

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX B3

8

20

数据位

功能

数据类型

说明

byte[0]

左轮里程计 [7:0]

signed int32

单位:mm

byte[1]

左轮里程计 [15:8]

byte[2]

左轮里程计[23:16]

byte[3]

左轮里程计[31:24]

byte[4]

右轮里程计 [7:0]

signed int32

单位:mm

byte[5]

右轮里程计[15:8]

byte[6]

右轮里程计[23:16]

byte[7]

右轮里程计[31:24]

次里程计 

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX B4

8

20

数据位

功能

数据类型

说明

byte[0]

左后轮里程计[7:0]

signedint32

适用全向轮和麦轮系统

单位:mm

byte[1]

左后轮里程计[15:8]

byte[2]

左后轮里程计[23:16]

byte[3]

左后轮里程计[31:24]

byte[4]

右后轮里程计[7:0]

signedint32

适用全向轮和麦轮系统

单位:mm

byte[5]

右后轮里程计[15:8]

byte[6]

右后轮里程计[23:16]

byte[7]

右后轮里程计[31:24]

两轮差速和四轮差速只使用主里程计,全向轮和麦克纳姆轮系统同时使用两组里程计 

举例: 型号0x02 编号0x03 的底盘反馈里程计数据 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

/

/

/

/

/

上位机

0x01 02 03 B3

数据帧

扩展帧

8

XX XX XX XX XX XX XX XX


4. 遥控器信息发送使能 /遥控器信息

该指令用于配套的手持射频遥控器数据的设置,可以读取遥控器所有按键数据

遥控器信息发送使能 

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 15

1

/

数据位

功能

数据类型

说明

byte[0]

发送周期设置

unsigned int8

0: 关闭(默认) / 1~20:20ms / 20~255:设定值

byte[1~7]

/

/

/

车载遥控器信息 

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX B5

7

20~255(默认关闭)

数据位

功能

数据类型

说明

byte[0]

拨动开关

unsigned int8

按照拨动开关档位表

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]

右旋钮VRA

signed int8

范围:-100~100

byte[7]

/

/

/

拨动开关档位表 

说明

bit[0]

0: 失效

1: 上档

2: 中档

3: 下档

SWA

bit[1]

bit[2]

0: 失效

1: 上档

2: 中档

3: 下档

SWB

bit[3]

bit[4]

0: 失效

1: 上档

2: 中档

3: 下档

SWC

bit[5]

bit[6]

0: 失效

1: 上档

2: 中档

3: 下档

SWD

bit[7]

举例: 型号0x02 编号0x03 的底盘设置100ms遥控反馈,发送CANID:0x01 02 03 15 数据:64。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 15

数据帧

扩展帧

1

64

上位机

0x01 02 03 B5

数据帧

扩展帧

7

XX XX XX XX XX XX XX 


5. 安全传感器信息发送使能 /安全传感器信息  

该指令用提供碰撞传感器和超声波等安全传感器信息

安全传感器信息发送使能 

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 16

1

/

数据位

功能

数据类型

说明

byte[0]

发送周期设置

unsigned int8

0: 关闭(默认) / 1~20:20ms / 20~255:设定值

byte[1~7]

/

/

/

车载安全传感器信息 

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX B6

7

20~255(默认关闭)

数据位

功能

数据类型

说明

byte[0]

触碰开关

unsigned int8

参考触碰开关表

byte[1]

超声波0

unsigned int8

0:失效/1~255:距离单位cm

byte[2]

超声波1

unsigned int8

0:失效/1~255:距离单位cm

byte[3]

超声波2

unsigned int8

0:失效/1~255:距离单位cm

byte[4]

超声波3

unsigned int8

0:失效/1~255:距离单位cm

byte[5]

超声波4

unsigned int8

0:失效/1~255:距离单位cm

byte[6]

超声波5

unsigned int8

0:失效/1~255:距离单位cm

byte[7]

/

/

/

触碰开关表

说明

bit[0]

0:未触发 / 1:触发  

触碰开关0

bit[1]

0:未触发 / 1:触发  

触碰开关1

bit[2]

0:未触发 / 1:触发  

触碰开关2

bit[3]

0:未触发 / 1:触发  

触碰开关3

bit[4]

0:未触发 / 1:触发  

触碰开关4

bit[5]

0:未触发 / 1:触发  

触碰开关5

bit[6]

0:未触发 / 1:触发  

触碰开关6

bit[7]

0:未触发 / 1:触发  

触碰开关7

仅限安装了防撞边条或触碰传感器的设备才反馈该数据 

举例: 型号0x02 编号0x03 的底盘设置100ms安全反馈,发送CANID:0x01 02 03 16 数据:64 。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 16

数据帧

扩展帧

1

64

上位机

0x01 02 03 B6

数据帧

扩展帧

7

XX XX XX XX XX XX XX


6. 驱动器运动信息使能 / 驱动器运动信息   

此数据为系统最底层来自驱动器的直接记数,用户可根据原始数据自行求解里程计和速度 

驱动器运动信息发送使能 

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 17

1

/

数据位

功能

数据类型

说明

byte[0]

发送周期设置

unsigned int8

0: 关闭(默认) / 1~20:20ms / 20~255:设定值

byte[1~7]

/

/

/

驱动器运动信息 

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX B7

7

20~255(默认关闭)

数据位

功能

数据类型

说明

byte[0]

驱动编号

unsigned int8

可选0,1,2,3,4,5,6,7(轮流发送)

byte[1]

转速低8位

signed int16

单位:Rpm

byte[2]

转速高8位

byte[3]

位置值 [7:0]

signed int32

单位:脉冲数

byte[4]

位置值 [15:8]

byte[5]

位置值 [23:16]

byte[6]

位置值 [31:24]

byte[7]

/

/

/

举例: 型号0x02 编号0x03 的底盘设置100ms驱动器运动反馈,发送CANID:0x01 02 03 17 数据:64 。

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 17

数据帧

扩展帧

1

64

上位机

0x01 02 03 B7

数据帧

扩展帧

7

XX XX XX XX XX XX XX


7. 驱动器状态信息使能 / 驱动器状态信息    

此数据为驱动器和电机的工作数据,可用于驱动的安全监控

驱动器状态信息发送使能

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 18

1

/

数据位

功能

数据类型

说明

byte[0]

发送周期设置

unsigned int8

0: 关闭(默认) / 1~100: 100ms / 100~255:设定值

byte[1~7]

/

/

/

驱动器状态信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX B8

8

100~255(默认关闭)

数据位

功能

数据类型

说明

byte[0]

驱动编号

unsigned int8

可选0,1,2,3,4,5,6,7(轮流发送)

byte[1]

电压低8位

unsigned int16

单位:0.1V

byte[2]

电压高8位

byte[3]

电流低8位

unsigned int16

单位:0.1A

byte[4]

电流高8位

byte[5]

驱动器温度

signed int8

单位:1°C

byte[6]

电机温度

signed int8

单位:1°C

byte[7]

特殊状态

unsignedint8

按照驱动器特殊状态表

触碰开关表

说明

bit[0]

0: 正常 / 1: 过低

驱动低压报警

bit[1]

0: 正常 / 1: 过温

驱动过温报警

bit[2]

0: 正常 / 1: 过流

电机过流报警

bit[3]

0: 正常 / 1: 过温

电机过温报警

bit[4]

0: 正常 / 1: 卡死

电机卡死报警

bit[5~7]

/

/

举例: 型号0x02 编号0x03 的底盘设置100ms驱动器状态反馈,发送CANID:0x01 02 03 18 数据:64 。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 18

数据帧

扩展帧

1

64

上位机

0x01 02 03 B8

数据帧

扩展帧

8

XX XX XX XX XX XX XX XX


8. 底盘零点较准 / 底盘零点较准信息    

此数据为驱动器和

底盘零点较准

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 19

8

/

数据位

功能

数据类型

说明

byte[0]

零点偏移量1

int32

单位:mrad

byte[1]

byte[2]

byte[3]

byte[4]

零点偏移量2

int32

单位:mrad

byte[5]

byte[6]

byte[7]

零点较准信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX B9

8

/

数据位

功能

数据类型

说明

byte[0]

零点偏移量1

int32

单位:mrad

byte[1]

byte[2]

byte[3]

byte[4]

零点偏移量2

int32

单位:mrad

byte[5]

byte[6]

byte[7]

单阿克曼使用偏移量1;前后阿克曼前转向用1,后转向用2;双舵轮左边用1,右边用2

举例: 型号0x02 编号0x03 的单阿克曼底盘设置1000mrad偏移,发送CANID:0x01 02 03 19 数据:E8 03 00 00 00 00 00 00 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 19

数据帧

扩展帧

8

E8 03 00 00 00 00 00 00

上位机

0x01 02 03 B9

数据帧

扩展帧

8

E8 03 00 00 00 00 00 00


9. 底盘错误状态

反馈底盘的报错信息

错误状态反馈 

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX BA

5

500

数据位

功能

数据类型

说明

byte[0]

电机故障

unsigned int8

查看电机故障表

byte[1]

驱动故障

unsigned int8

查看驱动故障表

byte[2]

通讯故障

unsigned int8

查看通讯故障表

byte[3]

其他故障

unsigned int8

查看其他故障表

byte[4]

电源故障

unsigned int8

查看其电源障表

byte[5]

/

/

/

电机故障表

说明

bit[0]

0: 正常 / 1:故障

电机过流报警

bit[1]

0: 正常 / 1:故障

电机过温报警

bit[2]

0: 正常 / 1:故障

编码器故障

bit[3]

0: 正常 / 1:故障

霍尔传感器故障

bit[4~7]

/

/

驱动故障表

说明

bit[0]

0: 正常 / 1:故障

驱动低压报警

bit[1]

0: 正常 / 1:故障

驱动过温报警

bit[2~7]

/

/

通讯故障表

说明

bit[0]

0: 在线 / 1:离线

1号驱动通讯故障

bit[1]

0: 在线 / 1:离线

2号驱动通讯故障

bit[2]

0: 在线 / 1:离线

3号驱动通讯故障

bit[3]

0: 在线 / 1:离线

4号驱动通讯故障

bit[4~7]

/

/

其他故障表

说明

bit[0]

0: 正常 / 1:警告

电池低电压提醒 (<15%) ( 蜂鸣器提醒,设备正常工作)>

bit[1]

0: 正常 / 1:故障>

电池低电压报警 (<5%)( 设备输出异常状态,驱动停止输出)>

bit[2]

0: 未触发 / 1:触发

触碰传感器触发

bit[3]

0: 未触发 / 1:触发

急停开关

bit[4~7]

/

/

电源故障表

说明

bit[0]

0: 正常 / 1:故障>

主继电器故障

bit[1]

0: 正常 / 1:故障>

缓启动故障

bit[2]

0: 正常 / 1:故障>

缓启动升压故障

bit[3]

0: 正常 / 1:故障>

输出过流故障

bit[4]

0: 正常 / 1:故障>

纽扣电池故障

bit[5~7]

 / /

举例: 型号0x02 编号0x03 的底盘反馈触碰传感器触发。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

/

/

/

/

/

上位机

0x01 02 03 BA

数据帧

扩展帧

5

00 00 00 04 00


10. 获取RTC时间

对安装有RTC计数模块的底盘可以获取芯片时间

获取RTC时间

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 1B

0

/

数据位

功能

数据类型

说明

byte[0~7]

/

/

/

RTC时间信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX BB

4

/

数据位

功能

数据类型

说明

byte[0]

当前unix 时间[0:7]

unsigned int32

unix时间,从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数

byte[1]

当前unix 时间[8:15]

byte[2]

当前unix时间[16:23]

byte[3]

当前unix时间[24:31]

byte[4~7]

/

/

/

底盘必须具有RTC时间功能,该功能为特别订制

举例: 型号0x02 编号0x03 的底盘获取时间为2024-01-01 00:00:30。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 1B

数据帧

扩展帧

0

/

上位机

0x01 02 03 BB

数据帧

扩展帧

4

1E 90 91 65


11. 设置RTC时间

设置RTC时间

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 1C

4

/

数据位

功能

数据类型

说明

byte[0]

unix时间 [0:7]

unsigned int32

unix时间,从格林威治时间 1970年01月01日00时00分 00 秒起至现在的总秒数

byte[1]

unix时间[8:15]

byte[2]

unix时间[16:23]

byte[3]

unix时间[24:31]

byte[4~7]

/

/

/

设置RTC时间反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX BC

1

/

数据位

功能

数据类型

说明

byte[0]

设置RTC反馈

unsigned int8

0:设置成功

1:数据错误,设置失败

byte[1~7]

/

/

/

举例: 型号0x02 编号0x03 的底盘设置RTC时间为2024-01-01 00:00:30。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 1C

数据帧

扩展帧

4

1E 90 91 65

上位机

0x01 02 03 BC

数据帧

扩展帧

1

00


12. 设置唤醒时间

设置RTC时钟的自动唤醒功能,在使用休眠等节能需求时候使用

设置唤醒时间

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 1D

4

/

数据位

功能

数据类型

说明

byte[0]

unix时间 [0:7]

unsigned int32

unix时间,从格林威治时间 1970年01月01日00时00分 00 秒起至现在的总秒数

byte[1]

unix时间[8:15]

byte[2]

unix时间[16:23]

byte[3]

unix时间[24:31]

byte[4~7]

/

/

/

设置唤醒时间反馈 

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX BD

5

/

数据位

功能

数据类型

说明

byte[0]

设置唤醒时间反馈

unsigned int8

0:设置成功

1-闹钟时间小于当前时间,设置失败

byte[1]

唤醒时间 [0:7]

unsigned int32

unix时间,从格林威治时间 1970年01月01日00时00分 00 秒起至现在的总秒数

byte[2]

唤醒时间[8:15]

byte[3]

唤醒时间[16:23]

byte[4]

唤醒时间[24:31]

byte[5]

/

/

/

举例: 型号0x02 编号0x03 的底盘设置唤醒时间为2024-01-01 00:00:30。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 1D

数据帧

扩展帧

4

1E 90 91 65

上位机

0x01 02 03 BD

数据帧

扩展帧

5

00 1E 90 91 65


13. 电源输出控制

控制底盘对外部的电源输出,如果是电池直出则不受影响

电源输出控制

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 1E

1

/

数据位

功能

数据类型

说明

byte[0] 

电源输出控制

unsigned int8

0:关闭电源

1:启动电源

2:查询当前电源状态

byte[1~7]

/

/

/

电源输出反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX BE

2

/

数据位

功能

数据类型

说明

byte[0] 

电源输出控制反馈

unsigned int8

0:操作成功

1:唤醒时间未设置,关闭失败

2:开启失败,电源未关闭

byte[1]

电源输出状态反馈

unsigned int8

0:电源已关闭

1:电源已开启

byte[2~7]

/

/

/

如果有工控机等外部设备请谨慎使用该功能,该功能需要具备RTC时间功能的底盘,并需要先设置唤醒时间才能关闭电源

举例: 型号0x02 编号0x03 的底盘关闭输出电源。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 1E

数据帧

扩展帧

1

00

上位机

0x01 02 03 BE

数据帧

扩展帧

2

00 01


14. 机械参数设置

底盘的结构参数,用于补偿里程计和速度差异

机械参数设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 1F

2

/

数据位

功能

数据类型

说明

byte[0] 

设置轮径

uint16

0: 不设置 单位:mm

byte[1]

byte[2~7]

/

/

/

机械参数反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX BF

7

/

数据位

功能

数据类型

说明

byte[0]

运动模型 uint8 参考运动模型ID表

byte[1]

轴距
uint16
单位:mm

byte[2]

byte[3]

轮距
uint16
单位:mm

byte[4]

byte[5]

轮径
uint16
单位:mm

byte[6]

byte[7]

/

/

/

运动模型ID表

字节

状态码的取值

状态说明

byte[0]

0x00

未知模型

0x01

两轮差速

0x02

四轮差速

0x03

阿克曼

0x04

麦轮

0x05

三正交轮

0x06

四正交轮

机械参数设置会严重影响里程计与速度数据输出,请谨慎使用

举例: 型号0x02 编号0x03 轴距500mm 轮距300mm 的底盘设置轮径为200mm。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 1F

数据帧

扩展帧

1

C8 00

上位机

0x01 02 03 BF

数据帧

扩展帧

7

01 F4 01 2C 01 C8 00


15. odom设置

用于开启底盘计算odom模式,会比上位机计算精确,并可开启IMU较准

odom设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 01 XX XX 20

2

/

数据位

功能

数据类型

说明

byte[0]

使能odom反馈

uint8

0: 失能(默认) / 1:使能

byte[1]

IMU较准

uint8

0: 不使用 / 1:使用(默认)

如果底盘没有IMU则不可使用

byte[2~7]

/

/

/

odom-位移反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX C0

8

20

数据位

功能

数据类型

说明

byte[0]

odom_x [7:0]

signed int32

单位:mm

byte[1]

odom_x[15:8]

byte[2]

odom_x[23:16]

byte[3]

odom_x[31:24]

byte[4]

odom_y[7:0]

signed int32

单位:mm

byte[5]

odom_y[15:8]

byte[6]

odom_y[23:16]

byte[7]

odom_y[31:24]

odom-旋转反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX C1

4

20

数据位

功能

数据类型

说明

byte[0]

odom_th [7:0]

signed int32

单位:mrad

byte[1]

odom_th [15:8]

byte[2]

odom_th [23:16]

byte[3]

odom_th [31:24]

byte[4~7]

/

/

/

只有具备车载IMU功能的底盘才能开启IMU较准

举例: 型号0x02 编号0x03 底盘开启IMU较准 odom,odom位置为x=1m y= 1m。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x01 02 03 20

数据帧

扩展帧

2

01 01

上位机

0x01 02 03 C0

数据帧

扩展帧

8

 E8 03 00 00 E8 03 00 00

上位机

0x01 02 03 C1

数据帧

扩展帧

4

00 00 00 00

XSTD 标准化通讯接口

运载平台类CAN协议标准

为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为运载平台用的专用CAN协议。

请先确保阅读了CAN协议构架说明再开始以下内容

请注意使用设备CANID替换表中XX部分

运载平台类设备的大类ID为 03

运载平台指令总表

此表展示了专用指令的所有指令内容,方便快速查询和定位

指令集

 

反馈集

重要性

说明

设备对象

命令内容

大类

(00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

 

大类

(00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

反馈内容

周期性

运载平台

平台状态设置

03

xx

xx

11

 

03

xx

xx

B1

平台状态信息

周期反馈

必备

 

平台工作范围查询

03

xx

xx

12


03

xx

xx

B2

工作范围信息

对命令反馈

必备


平台移动速度控制

03

xx

xx

13

 

03

xx

xx

B3

平台移动信息

周期反馈

选备

适用于有移动轴的平台

平台移动位置控制

03

xx

xx

14

 

03

xx

xx

B4

平台位置信息

周期反馈

选备

适用于有移动轴的平台


1. 平台状态设置/ 平台状态信息 


平台状态设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 03 XX XX 11

3

/

数据位

功能

数据类型

说明

byte[0]

启动零点较准

 uint8

0x00: 不启动 / 0x01:启动

byte[1]

移动速度上限低8位

unsigned int16

位置控制模式专用

单位:mm/s

byte[2]

移动速度上限高8位

byte[3~7]

/

/

/

平台状态信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 03 XX XX B1

6

100

数据位

功能

数据类型

说明

byte[0]

设备状态

uint8

0x00: 正常 / 0x01:异常

byte[1]

零点较准状态 uint8 0x00: 较准完成 / 0x01:校准中

byte[2]

 特殊状态 uint16   查看特殊状态表

byte[3]

byte[4]

移动速度上限低8位

unsigned int16

位置控制模式专用

单位:mm/s

byte[5]

移动速度上限高8位

byte[6~7]

/

/

/

特殊状态表

说明

bit[0]

0: 正常 / 1:触发

x平移限位触发

bit[1]

0: 正常 / 1:触发

y平移限位触发

bit[2]

0: 正常 / 1:触发

z平移限位触发

bit[3]

0: 正常 / 1:堵转

x电机堵转

bit[4]

0: 在线 / 1:堵转

y电机堵转

bit[5]

0: 正常 / 1:堵转

z电机堵转

bit[6]

0: 正常 / 1:过温

x电机过温

bit[7]

0: 在线 / 1:过温

y电机过温

bit[8]

0: 正常 / 1:过温

z电机过温

bit[9~15]

/

/

启动校准后平台会缓慢寻找零点并停在零点处

移动速度上限是指位置控制模式下,移动的最大可达速度

举例: 型号0x02 编号0x03 的平台启动校准,上限速度0.5m/s,发送CANID:0x03 02 03 11 数据:01 F4 01 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x03 02 03 11

数据帧

扩展帧

3

01 F4 01

上位机

0x03 02 03 B1

数据帧

扩展帧

4

00 01 00 00


2. 平台工作范围查询 /  平台工作范围信息

用于获得平台移动轴的运动范围,是设备的固定参数

平台移动范围查询

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 03 XX XX 12

0

/

数据位

功能

数据类型

说明

byte[0~7]

/

/

/

平台移动范围信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 03 XX XX B2

8

/

数据位

功能

数据类型

说明

byte[0]

x移动范围低8位

signed int16

单位:mm

byte[1]

x移动范围高8位

byte[2]

y移动范围低8位

signed int16

单位:mm

byte[3]

y移动范围高8位

byte[4]

z移动范围低8位

signed int16

单位:mm

byte[5]

z移动范围高8位

byte[6]

移动速度范围低8位

unsigned int16

单位: mm/s

byte[7]

移动速度范围高8位

速度范围是指设备允许的最大速度,是由设备机械结构决定的,是一个确定值

举例: 型号0x02 编号0x03 的平台获取移动范围x=1000mm,发送CANID:0x03 02 03 12。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x03 02 03 12

数据帧

扩展帧

0

/

上位机

0x03 02 03 B2

数据帧

扩展帧

8

E8 03 00 00 00 00 E8 03


3. 平台速度控制 /  平台速度信息

通过控制速度来移动平台

平台速度控制

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 03 XX XX 13

6

/

数据位

功能

数据类型

说明

byte[0]

x方向速度低8位

signed int16

单位:mm/s

byte[1]

x方向速度高8位

byte[2]

y方向速度低8位

signed int16

单位:mm/s

byte[3]

y方向速度高8位

byte[4]

z方向速度低8位

signed int16

单位:mm/s

byte[5]

z方向速度高8位

byte[6~7]

/

/

/

平台速度信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 03 XX XX B3

6

50

数据位

功能

数据类型

说明

byte[0]

x方向速度低8位

signed int16

单位:mm/s

byte[1]

x方向速度高8位

byte[2]

y方向速度低8位

signed int16

单位:mm/s

byte[3]

y方向速度高8位

byte[4]

z方向速度低8位

signed int16

单位:mm/s

byte[5]

z方向速度高8位

byte[6~7]

/

/

/

需要实时读取位置信息,可能会出现超限

举例: 型号0x02 编号0x03 的平台设置移动x=1m/s,发送CANID:0x03 02 03 13,数据:E8 03 00 00 00 00 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x03 02 03 13

数据帧

扩展帧

6

E8 03 00 00 00 00

上位机

0x03 02 03 B3

数据帧

扩展帧

6

E8 03 00 00 00 00


4. 平台位置控制 /  平台位置信息

通过控制位置来移动平台

平台位置控制

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 03 XX XX 14

6

/

数据位

功能

数据类型

说明

byte[0]

x方向位置低8位

signed int16

单位:mm

byte[1]

x方向位置高8位

byte[2]

y方向位置低8位

signed int16

单位:mm

byte[3]

y方向位置高8位

byte[4]

z方向位置低8位

signed int16

单位:mm

byte[5]

z方向位置高8位

byte[6~7]

/

/

/

平台位置信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 03 XX XX B4

6

50

数据位

功能

数据类型

说明

byte[0]

x方向位置低8位

signed int16

单位:mm

byte[1]

x方向位置高8位

byte[2]

y方向位置低8位

signed int16

单位:mm

byte[3]

y方向位置高8位

byte[4]

z方向位置低8位

signed int16

单位:mm

byte[5]

z方向位置高8位

byte[6~7]

/

/

/

举例: 型号0x02 编号0x03 的平台设置移动到位置 x=1m ,发送CANID:0x03 02 03 14。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x03 02 03 14

数据帧

扩展帧

6

E8 03 00 00 00 00

上位机

0x03 02 03 B4

数据帧

扩展帧

6

E8 03 00 00 00 00

XSTD 标准化通讯接口

灯光类CAN协议标准

为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为灯光使用的专用CAN协议。

请先确保阅读了CAN协议构架说明再开始以下内容

请注意使用设备CANID替换表中XX部分

灯光类设备的大类ID为 04

灯光控制器指令总表

指令集

 

反馈集

重要性

说明

设备对象

命令内容

大类

( 00~1F)

型号

(00~FF)

编号

( 00~FF)

功能

( 00~FF)

 

大类

(00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

反馈内容

周期性

灯光控制器

控制器状态设置

04

xx

xx

11

 

04

xx

xx

B1

控制器状态信息

周期反馈

必备

 

单点灯光状态设置

04

xx

xx

12

 

/

/

/

/

/

/

必备

 

呼吸模式设置

04

xx

xx

13

 

04

xx

xx

B3

设置成功

单次反馈

必备



1. 控制器状态设置 / 控制器状态信息

控制器状态设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 04 XX XX 11

3

/

数据位

功能

数据类型

说明

byte[0]

工作模式

unsigned int8

查看工作模式表

byte[1]

亮度倍率

unsigned int8

1~100(最大亮度百分比,用于总控)

byte[2]

灯光数量

unsigned int8

控制的灯光LED数量

byte[3~7]

/

/

/

控制器状态信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 04 XX XX B1

8

500

数据位

功能

数据类型

说明

byte[0]

工作模式

unsigned int8

查看工作模式表

byte[1]

亮度倍率

unsigned int8

1~100

byte[2]

灯光数量

unsigned int8

控制的灯光LED数量

byte[3~7]

/

/

/

触碰开关表

说明

byte[0]

0x00

待机模式(蓝色呼吸灯)

0x01

警报模式(红色快闪)

0x02

单点控制

0x03

呼吸模式

举例: 型号0x02 编号0x03 的灯光使用警报模式 100亮度 50个led,发送CANID:0x04 02 03 11 数据:01 64 32 。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x04 02 03 11

数据帧

扩展帧

3

01 64 32

上位机

0x04 02 03 B1

数据帧

扩展帧

3

01 64 32


2. 单点灯光状态设置

用于单一LED的控制,可以每个LED都有不同颜色

控制器状态设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 04 XX XX 12

8

/

数据位

功能

数据类型

说明

byte[0]

灯光ID

unsigned int8

ID从1开始,0为空

byte[1]

R值

unsigned int8

RGB的R值

byte[2]

G值

unsignedint8

RGB的G值

byte[3]

B值

unsigned int8

RGB的B值

byte[4]

灯光ID

unsigned int8

ID从1开始,0为空

byte[5]

R值

unsigned int8

RGB的R值

byte[6]

G值

unsignedint8

RGB的G值

byte[7]

B值

unsigned int8

RGB的B值

每次至多设置两个LED,可以连续发送,单个LED可以设置另一个ID为0

需要工作模式为单点控制才有效

举例: 型号0x02 编号0x03 的灯光设置第一个LED 白色,发送CANID:0x04 02 03 12 数据:01 FF FF FF 00 00 00 00 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x04 02 03 12

数据帧

扩展帧

8

01 FF FF FF 00 00 00 00

上位机

/

/

/

/

/


3. 呼吸模式设置 / 设置成功

呼吸模式是所有灯以一种颜色渐变

呼吸模式设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 04 XX XX 13

4

/

数据位

功能

数据类型

说明

byte[0]

呼吸周期

unsigned int8

单位:S

byte[1]

R值

unsigned int8

RGB的R值

byte[2]

G值

unsigned int8

RGB的G值

byte[3]

B值

unsigned int8

RGB的B值

byte[4~7]

/

/

/

设置成功

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 04 XX XX B3

0

/

数据位

功能

数据类型

说明

byte[0~7]

/

/

/

需要工作模式为呼吸模式才有效

举例: 型号0x02 编号0x03 的灯光设置LED 白色1s呼吸,发送CANID:0x04 02 03 13 数据:01 64 32 。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x04 02 03 13

数据帧

扩展帧

4

01 FF FF FF 

上位机

0x04 02 03 B3

数据帧

扩展帧

0

/

XSTD 标准化通讯接口

电源类CAN协议标准

为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为电源使用的专用CAN协议。

请先确保阅读了CAN协议构架说明再开始以下内容

请注意使用设备CANID替换表中XX部分

电源类设备的大类ID为 06


电源指令总表

此表展示了专用指令的所有指令内容,方便快速查询和定位

指令集

 

反馈集

重要性

说明

设备对象

命令内容

大类

(00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

 

大类

(00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

反馈内容

周期性

电池

/

/

/

/

/

 

06

xx

xx

B1

BMS状态信息

周期反馈

必备

 

/

/

/

/

/

 

06

xx

xx

B2

BMS数据反馈

周期反馈

必备

 

充电站

充电站设置

06

xx

xx

13

 

06

xx

xx

B3

充电站状态信息

周期反馈

必备

 

/

/

/

/

/

 

06

xx

xx

B4

充电站数据反馈

周期反馈

必备

 

数字电源

数字电源设置

06

xx

xx

15

 

06

xx

xx

B5

电源数据反馈

周期反馈

必备

 


1. BMS状态信息 

用于带有BMS功能的电池包的数据采集

BMS状态信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 06 XX XX B1

4

1000

数据位

功能

数据类型

说明

byte[0]

工作状态

unsigned int8

0x00: 正常 / 0x01: 警告 /0x02: 保护

byte[1]

警告状态

unsigned int8

警告状态表

byte[2]

保护状态

unsigned int8

保护状态表

byte[3]

充电标识

unsigned int8

0x00: 未充电 / 0x01: 充电中

byte[4~7]

/

/

/

警告状态表

说明

bit[0]

0: 正常 / 1: 警告

电池过压警告

bit[1]

0: 正常 / 1: 警告

电池欠压警告

bit[2]

0: 正常 / 1: 警告

电池高温警告

bit[3]

0: 正常 / 1: 警告

电池低温警告

bit[4]

0: 正常 / 1: 警告

放电过流警告

bit[5]

0: 正常/ 1: 警告

充电过流警告

bit[6]

0: 正常 / 1: 警告

低电量警告(SOC<20%)

bit[7]

/

/

保护状态表

说明

bit[0]

0: 正常 / 1: 触发

电池过压保护

bit[1]

0: 正常 / 1: 触发

电池欠压保护

bit[2]

0: 正常 / 1: 触发

电池高温保护

bit[3]

0: 正常 / 1: 触发

电池低温保护

bit[4]

0: 正常 / 1: 触发

放电过流保护

bit[5]

0: 正常 / 1: 触发

充电过流保护

bit[6]

0: 正常 / 1: 触发

低电量保护(SOC<10%)

bit[7]

0: 正常 / 1: 触发

短路保护

电池包必须带有BMS才能使用该功能

举例: 型号0x01 编号0x02 的BMS 充电中。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

/

/

/

/

/

上位机

0x06 01 02 B1

数据帧

扩展帧

4

00 00 00 01


2. BMS数据反馈 

用于带有BMS功能的电池包的数据采集

BMS数据反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 06 XX XX B2

8

500

数据位

功能

数据类型

说明

byte[0]

SOC

unsigned int8

范围 0~100

byte[1]

SOH

unsigned int8

范围 0~100

byte[2]

电池电压低8位

unsigned int16

单位:0.01V

byte[3]

电池电压高8位

byte[4]

电池电流低8位

signed int16

单位:0.1A

byte[5]

电池电流高8位

byte[6]

电池温度低8位

signed int16

单位:0.1℃

byte[7]

电池温度高8位

电池包必须带有BMS才能使用该功能

举例: 型号0x01 编号0x02 的BMS 满电48V反馈。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

/

/

/

/

/

上位机

0x06 01 02 B2

数据帧

扩展帧

8

64 64 C0 12 00 00 68 01


3. 充电站设置 

用于配套的自动充电站的设置

充电站设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 06 XX XX 13

5

/

数据位

功能

数据类型

说明

byte[0]

工作模式

unsigned int8

0:自动(默认) /1:手动

查看工作模式功能表

byte[1]

手动开关设置(仅手动模式有效)

unsigned int8

0:断开(默认) /1:连接

查看工作模式功能表

byte[2]

蜂鸣器使能(报警无法关闭)

unsigned int8

0:关闭 /1:开启(默认)

byte[3]

再充电压差值(与满电电压的压差)

unsigned int8

单位:0.1V(默认1.0V)

byte[4]

充电截至电流

unsigned int8

单位:0.1A(默认0.2A)

byte[5~7]

/

/

/

充电站状态信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 06 XX XX B3

7

500/接触触发(看备注)

数据位

功能

数据类型

说明

byte[0]

工作模式

unsigned int8

0:自动 /1:手动

byte[1]

充电站探测状态

unsigned int8

0:未接触 /1:已接触

byte[2]

工作状态

unsigned int8

0: 断开/ 1:连接 / 2:已充满(低电流) / 3:错误

byte[3]

错误状态

unsigned int8

查看错误状态表

byte[4]

蜂鸣器使能状态

unsigned int8

0:关闭 /1:开启(默认)

byte[5]

再充电压差值

unsigned int8

单位:0.1V(默认1.0V)

byte[6]

充电截至电流

unsigned int8

单位:0.1A(默认0.2A)

byte[7]

/

/

/

错误状态表

字节

状态值

说明

byte[3]

0x00

无错误

0x01

电源过压

0x02

充电过流

0x03

短路保护

工作状态指示表

工作状态

LED状态

蜂鸣器状态

断开(未接触)

无灯

断开(已接触)

绿灯闪烁

连接

红绿交替

已充满

绿灯常亮

错误

红灯常亮

按规定的错误发声模式

工作模式功能表

工作模式

探测状态

手动开关

工作状态

自动

未接触

无效

断开

接触

无效

连接

手动

未接触

无效

断开

接触

连接

连接

断开(默认)

断开

一般反馈周期为500ms,如果出现充电站探测变化则立即发送充电站状态信息帧

再冲电电压差指完成第一次充电后,如果电池电压下降超过设置的压差值,会再次启动充电

举例: 型号0x02 编号0x03 的充电站 手动控制连接。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x06 02 03 13

数据帧

扩展帧

5

01 01 00 0A 02

上位机

0x06 02 03 B3

数据帧

扩展帧

7

01 01 01 00 00 0A 02


4. 充电站数据反馈

用于配套的自动充电站的充电数据反馈

充电站数据反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 06 XX XX B4

4

500

数据位

功能

数据类型

说明

byte[0]

充电电压低8位

unsigned int16

单位:0.01V

byte[1]

充电电压高8位

byte[2]

充电电流低8位

signed int16

单位:0.1A

byte[3]

充电电流高8位

byte[4~7]

/

/

/

举例: 型号0x02 编号0x03 的充电站48V 1A充电。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

/

/

/

/

/

上位机

0x06 02 03 B4

数据帧

扩展帧

4

C0 12 0A 00


5. 数字电源设置

用于专用的数字电源

数字电源设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 06 XX XX 15

8

/

数据位

功能

数据类型

说明

byte[0]

电源通道ID

unsigned int8

1~255

byte[1]

模式

unsigned int8

1:恒压模式 / 2:恒流模式

byte[2]

反馈周期

unsigned int8

单位ms

byte[3]

/

/

/

byte[4]

输出电流或最大电流

unsigned int16

单位 mA
恒压模式为最大电流

byte[5]

byte[6]

输出电压或最大电压

unsigned int16

单位 mV
恒流模式为最大电压

byte[7]

数字电源数据反馈

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 06 XX XX B5

8

按设置周期

数据位

功能

数据类型

说明

byte[0]

电源通道ID

unsigned int8

1~255

byte[1]

模式

unsigned int8

1:恒压模式 / 2:恒流模式

byte[2]

错误码

unsigned int8

查看错误状态码

byte[3]

/

/

/

byte[4]

输出电流或最大电流

unsigned int16

单位 mA
恒压模式为最大电流

byte[5]

byte[6]

输出电压或最大电压

unsigned int16

单位 mV
恒流模式为最大电压

byte[7]

错误状态表

字节

状态值

说明

byte[2]

0x00

无错误

0x01

电源过压

0x02

电源过流

0x03

电源过温

XSTD 标准化通讯接口

电子开关类CAN协议标准

为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为电子开关使用的专用CAN协议。

请先确保阅读了CAN协议构架说明再开始以下内容

请注意使用设备CANID替换表中XX部分

电子开关类设备的大类ID为 0A


电子开关指令总表

此表展示了专用指令的所有指令内容,方便快速查询和定位

指令集

 

反馈集

重要性

说明

设备对象

命令内容

大类

( 00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

 

大类

(00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

反馈内容

周期性

电子开关

可控开关状态设置

0A

xx

xx

11

 

0A

xx

xx

B1

可控开关状态信息

周期反馈

选备

开关性质只能是其中一种

/

/

/

/

/


0A

xx

xx

B2

按键状态信息

周期反馈

选备

/

/

/

/

/


0A

xx

xx

B3

AD状态信息

周期反馈

选备

反馈周期设置

0A

xx

xx

14

 

0A

xx

xx

B4

反馈周期信息

即时反馈

选备



1. 可控开关状态设置 / 可控开关状态信息 

用于可控的IO设备

可控开关状态设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 0A XX XX 11

1

/

数据位

功能

数据类型

说明

byte[0]

设置开关

unsigned int8

0x00: 关闭 / 0x01: 开启

byte[1~7]

/

/

/

可控开关状态信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 0A XX XX B1

7

默认1000/触发模式

数据位

功能

数据类型

说明

byte[0]

开关状态

unsigned int8

0x00: 关闭 / 0x01: 开启

byte[1~7]

/

/

/

可控开关指通过单一变量控制启停的设备,包括灯光、门锁、气泵、电磁阀等

保持每次操作间隔超过 500ms,先读取状态再操作,防止过频繁烧毁部件

举例: 型号0x02 编号0x03 的开关开启, 发送CANID:0x 0A 02 03 11 数据:01。 

发送实例

传输目标

 

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x0A 02 03 11

数据帧

扩展帧

1

01

上位机

0x0A 02 03 B1

数据帧

扩展帧

1

01


2. 按键状态信息

用于按键单输入设备的控制

按键状态信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX B2

8

默认100/触发模式

数据位

功能

数据类型

说明

byte[0]

按键1

unsigned int8

0x00: 未触发 / 0x01: 触发

byte[1]

按键2

unsigned int8

0x00: 未触发 / 0x01: 触发

byte[2]

按键3

unsigned int8

0x00: 未触发 / 0x01: 触发

byte[3]

按键4

unsigned int8

0x00: 未触发 / 0x01: 触发

byte[4]

按键5

unsigned int8

0x00: 未触发 / 0x01: 触发

byte[5]

按键6

unsigned int8

0x00: 未触发 / 0x01: 触发

byte[6]

按键7

unsigned int8

0x00: 未触发 / 0x01: 触发

byte[7]

按键8

unsigned int8

0x00: 未触发 / 0x01: 触发

使用触发模式要注意按键抖动问题

举例: 型号0x02 编号0x03 的按键1按下。 

发送实例

传输目标

 

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

/

/

/

/

/

上位机

0x0A 02 03 B2

数据帧

扩展帧

8

01 00 00 00 00 00 00 00


3. AD状态信息

用于AD输入设备的控制

AD状态信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 01 XX XX B3

8

默认100

数据位

功能

数据类型

说明

byte[0]

AD1低8位

signed int16


byte[1]

AD1高8位

byte[2]

AD2低8位

signed int16


byte[3]

AD2高8位

byte[4]

AD3低8位

signed int16


byte[5]

AD3高8位

byte[6]

AD4低8位

signed int16


byte[7]

AD4高8位

举例: 型号0x02 编号0x03 的AD1 =  80%。 

发送实例

传输目标

 

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

/

/

/

/

/

上位机

0x0A 02 03 B3

数据帧

扩展帧

8

50 00 00 00 00 00 00 00


4. 反馈周期设置 / 反馈周期信息 


反馈周期设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 0A XX XX 14

4

/

数据位

功能

数据类型

说明

byte[0]

设置周期

unsigned int32

0: 触发模式 / 其他数值单位ms

byte[1]

byte[2]

byte[3]

byte[4~7]

/

/

/

反馈周期信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 0A XX XX B4

0

/

数据位

功能

数据类型

说明

byte[0~7]

/

/

/

当反馈周期设置为0时进入触发模式,该模式下只有开关状态变化才会反馈

举例: 型号0x02 编号0x03 的设置反馈周期100ms, 发送CANID:0x 0A 02 03 14 数据:64 00 00 00 

发送实例

传输目标

 

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x0A 02 03 14

数据帧

扩展帧

4

64 00 00 00

上位机

0x0A 02 03 B4

数据帧

扩展帧

0

/

XSTD 标准化通讯接口

惯导类CAN协议标准

为了更好的兼容不同设备,我们规范了CAN协议的标准,使得同类型不同型号设备能无缝切换,自动被ROS识别并直接使用,方便更换硬件时候的软件移植工作。以下为惯导设备使用的专用CAN协议。

请先确保阅读了CAN协议构架说明再开始以下内容

请注意使用设备CANID替换表中XX部分

惯导类设备的大类ID为 0B


惯导传感器指令总表

此表展示了专用指令的所有指令内容,方便快速查询和定位

指令集

 

反馈集

重要性

说明

设备对象

命令内容

大类

( 00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

 

大类

(00~1F)

型号

(00~FF)

编号

(00~FF)

功能

(00~FF)

反馈内容

周期性

惯导传感器

角度信息设置

0B

xx

xx

11

 

0B

xx

xx

B1

传感器角度信息

周期反馈

必备

 

角速度信息设置

0B

xx

xx

12

 

0B

xx

xx

B2

传感器角速度信息

周期反馈

必备

 

加速度信息设置

0B

xx

xx

13

 

0B

xx

xx

B3

传感器加速度信息

周期反馈

必备

 

四元数信息设置

0B

xx

xx

14

 

0B

xx

xx

B4

传感器四元数信息1

使能后周期反馈

选备

 

/

/

/

/

/

 

0B

xx

xx

B5

传感器四元数信息2

使能后周期反馈

选备



1. 角度信息设置 / 传感器角度信息

角度信息设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 0B XX XX 11

1

/

数据位

功能

数据类型

说明

byte[0]

发送周期设置

unsigned int8

0: 关闭/ 1~10: 10ms / 10~255:设定值(默认10ms)

byte[1~7]

/

/

/

传感器角度信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 0B XX XX B1

8

默认10

数据位

功能

数据类型

说明

byte[0]

x轴旋转角[7:0]

signed int16

单位:0.01deg(°)

byte[1]

x轴旋转角[8:15]

byte[2]

y轴旋转角 [7:0]

signed int16

单位:0.01deg(°)

byte[3]

y轴旋转角 [8:15]

byte[4]

z轴旋转角[7:0]

signed int16

单位:0.01deg(°)

byte[5]

z轴旋转角[8:15]

byte[6]

发布时间戳[7:0]

unsigned int16

单位:ms

byte[7]

发布时间戳[8:15]

举例: 型号0x01 编号0x02 的IMU 设置10ms,反馈x=0.5° y=1.0° z=1.5°。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x0B 01 02 11

数据帧

扩展帧

1

14

上位机

0x0B 01 02 B1

数据帧

扩展帧

8

32 00 64 00 96 00 01 00


2. 角速度设置 / 角速度信息

角速度信息设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 0B XX XX 12

1

/

数据位

功能

数据类型

说明

byte[0]

发送周期设置

unsigned int8

0: 关闭/ 1~10: 10ms / 10~255:设定值(默认10ms)

byte[1~7]

/

/

/

角速度信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 0B XX XX B2

8

默认10

数据位

功能

数据类型

说明

byte[0]

x方向角速度[7:0]

signed int16

单位:0.01 deg/s

byte[1]

x方向角速度 [8:15]

byte[2]

y方向角速度 [7:0]

signed int16

单位:0.01 deg/s

byte[3]

y方向角速度 [8:15]

byte[4]

z方向角速度 [7:0]

signed int16

单位:0.01 deg/s

byte[5]

z方向角速度 [8:15]

byte[6]

发布时间戳[7:0]

unsigned int16

单位:ms

byte[7]

发布时间戳[8:15]

举例: 型号0x01 编号0x02 的IMU 设置10ms,反馈x=0.5°/s y=1.0°/s z=1.5°/s。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x0B 01 02 12

数据帧

扩展帧

1

14

上位机

0x0B 01 02 B2

数据帧

扩展帧

8

32 00 64 00 96 00 01 00


3. 加速度设置 / 加速度信息

加速度信息设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 0B XX XX 13

1

/

数据位

功能

数据类型

说明

byte[0]

发送周期设置

unsigned int8

0: 关闭/ 1~10: 10ms / 10~255:设定值(默认10ms)

byte[1~7]

/

/

/

加速度信息

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 0B XX XX B3

8

默认10

数据位

功能

数据类型

说明

byte[0]

x方向加速度[7:0]

signed int16

单位:0.01m/s²

byte[1]

x方向加速度 [8:15]

byte[2]

y方向加速度 [7:0]

signed int16

单位:0.01m/s²

byte[3]

y方向加速度 [8:15]

byte[4]

z方向加速度 [7:0]

signed int16

单位:0.01m/s²

byte[5]

z方向加速度 [8:15]

byte[6]

发布时间戳[7:0]

unsigned int16

单位:ms

byte[7]

发布时间戳[8:15]

举例: 型号0x01 编号0x02 的IMU 设置10ms,反馈x=0.5m/s y=1.0m/s z=1.5m/s。 

发送实例

传输目标

CAN ID

帧格式

帧类型

数据长度

数据位(L->H)

设备

0x0B 01 02 13

数据帧

扩展帧

1

14

上位机

0x0B 01 02 B3

数据帧

扩展帧

8

32 00 64 00 96 00 01 00


4. 四元数信息设置

四元数信息设置

发送方

接收方

CAN ID

数据长度

周期(ms

外部

本设备

0x 0B XX XX 14

1

/

数据位

功能

数据类型

说明

byte[0]

发送周期设置

unsigned int8

0: 关闭(默认)/ 1~10: 10ms / 10~255:设定值

byte[1~7]

/

/

/

四元数信息1

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 0B XX XX B4

8

默认关闭

数据位

功能

数据类型

说明

byte[0]

四元数qw[0:7]

float

 

byte[1]

四元数qw[8:15]

byte[2]

四元数qw[16:23]

byte[3]

四元数qw[24:31]

byte[4]

四元数qx[0:7]

float

 

byte[5]

四元数qx[8:15]

byte[6]

四元数qx[16:23]

byte[7]

四元数qx[24:31]

四元数信息2

发送方

接收方

CAN ID

数据长度

周期(ms)

本设备

外部

0x 0B XX XX B5

8

默认关闭

数据位

功能

数据类型

说明

byte[0]

四元数qy[0:7]

float

 

byte[1]

四元数qy[8:15]

byte[2]

四元数qy[16:23]

byte[3]

四元数qy[24:31]

byte[4]

四元数qz[0:7]

float

 

byte[5]

四元数qz[8:15]

byte[6]

四元数qz[16:23]

byte[7]

四元数qz[24:31]

应用软件

应用软件

XVIEW 测试系统

XVIEW 是一款为测试标准化设备而设计的软件平台,能在线获取设备数据,操控设备运作,监控CAN总线和串口的数据传输,在设备出现使用问题时可以作为一个稳定的测试方式,可快速定位问题点。、

该软件支持win10系统及ubuntu20及以上版本使用,并需要搭配 WIFI HUB使用

XVIEW 软件下载

使用步骤:
第一次打开软件时会弹窗选择语言,目前支持简体中文及英文,选择需要的语言即可,后面也可在界面设置。

微信图片_20240722170557.png
1) CAN-COM HUB

  1. 下载并安装CAN-COM HUB windows驱动(链接下载),ubuntu不需要驱动,但需要先添加可执行权限,然后将当前用户添加至dialout分组。
  2. 通过HUB模块进行设备接线(方法参考CAN-COM HUB用户手册),HUB模块蜂鸣器响三声,HUB模块启动
  3. 设备上电开机,打开XVIEW软件,进入引导界面
  4. 添加设备,点击引导界面的设备管理按键进入设备管理,选择COM端口,输入需要设置的名称,点击添加即可,该操作只需要进行一次微信图片_20240722170841.png
  5. 返回引导界面,选择刚才添加的设备,点击连接设备,连接成功后进入主界面
  6. 进入主界面后,界面切换至对应窗口,比如底盘,此时使能设备按钮高亮,点击使能设备,与底盘进行通信

2) WIFI HUB

  1. 通过HUB模块进行设备接线(方法参考WiFi HUB用户手册),HUB模块蜂鸣器响三声,HUB模块启动,HUB支持有线和无线连接两种方式,按住HUB左上的模式按键可进行切换,按键下的LED闪绿灯时对应有线连接模式,闪黄灯时对应无线AP连接模式,无线模式需要连接到对应的WIFI。
  2. 设备上电开机,打开XVIEW软件,进入引导界面
  3. 添加设备,点击引导界面的设备管理按键进入设备管理,输入设备名,输入IP地址和端口号,默认的IP是10.233.233.1:80,点击添加即可,该操作只需要进行一次
  4. 返回引导界面,选择刚才添加的设备,点击连接设备,连接成功后进入主界面
  5. 进入主界面后,界面切换至对应窗口,比如底盘,此时使能设备按钮高亮,点击使能设备,与底盘进行通信

进入主界面后可以在说明窗口下查阅具体功能微信图片_20240722171139.png

xpkg_carrier Interface Description

Payload Carrier Interface

Public APIs

Publish

Topic Msg Type Description
/carrier_state nav_msgs/Odometry Publish current carrier state

Subscribe

Topic Msg Type Description
/carrier_cmd_vel geometry_msgs/TwistStamped Subscribe to target carrier velocity
/carrier_cmd_pos geometry_msgs/PoseStamped Subscribe to target carrier pose

Parameter

Name Data Type Description
carrier_limit_vel_z double The limitation of the speed, for both rising and falling. The unit is meters per second ($m/s$)

Detailed Description

/carrier_state

This topic publishes the current state of the payload carrier.

/carrier_cmd_vel

This topic receives the target velocity of the payload carrier.

/carrier_cmd_pos

This topic receives the target pose of the payload carrier.