本末推荐使用ROS2 foxy (humble 兼容),以下这些就是安装过程:
sudo apt install python3-colcon-common-extensions
mkdir -p ~/diablo_ws/src
cd ~/diablo_ws/src
#用在板子上,拉取basic分支的代码
git clone -b basic https://github.com/DDTRobot/diablo_ros2.git
cd ~/diablo_ws
colcon build
source install/setup.bash
#before starting the node , please check of serial port in diablo_ctrl.cpp is correct.
ros2 run diablo_ctrl diablo_ctrl_node
#run controller python script
ros2 run diablo_teleop teleop_node
注:刑天ros系统出厂前基本配置完成,用户不需要安装ros系统。
第一次连接进入系统参考地瓜机器人X3pi 使用方法
-
1、应用板开发者官方论坛 https://developer.horizon.ai/forum
-
2、应用板开发用户手册 https://developer.horizon.ai/api/v1/fileData/documents_pi/index.html
以下所有节点,函数之间调用关系:
Diablo_node 控制节点发布电机和姿态消息,订阅/diablo/MotionCmd话题
这个MotionCmd是控制的协议,CTRL是映射的遥控器的消息
在此功能包中,定义了四种传感器数据的发布方式。由于机载传感器的数据是通过串口的形式发送到 Pi 中的,所以在此处定义的发布方法都是将 diablo_ctrl_node 的指针作为参数,进行数据的发布,并没有创建新的 node 。因此,文件中的构建的方法都需要在 diablo_ctrl.cpp 中进行调用才会工作。
机器人电池信息 : 1Hz
机器人状态信息 : 10Hz
机器人陀螺仪信息 : 50Hz
机器人关节电机信息 : 10Hz
传感器的消息函数
通讯协议,数据打包
头文件存放的位置
串口协议打包
四元数
加速度
电池信息
电机数据
机器人的状态
硬件接口说明
主控板提供两个用于串口通讯,二选一(UART3/UART4)
1.4.2 提供一路 2pin 12v DC ,对外设备供电接口。
1.4.3提供一路USB Type C 接口,作为X3pi供电接口,将电源接入开发板后,开发板红色电源指示灯亮起,说明开发板供电正常
刑天机器人电气拓扑图
基于串口通信的 DIABLO
机器人二次开发控制接口。diablo_ros2 sdk 开发包适用绝大数的linux 设备。如用X86作为主机跟刑天通讯,可以选择通过USB TO ttl 的方式接入 motion control Board ,串口3接口,运控板硬件接口上图所示。
1.6 diablo ROS API说明
1.diablo_ctrl_node
diablo_ctrl_node节点包括它发布的Topic、订阅的Topic以便其他节点能够正确地与其交互。
2.可订阅的Topic接口
Topic 名称:
/diablo/MotionCmd
/diablo/sensor/Battery
/diablo/sensor/Body_state
/diablo/sensor/Imu
/diablo/sensor/ImuEuler
/diablo/sensor/Motors
3.控制API
diablo控制封装成ros2 topic 形式让客户端能控制机器人运行服务
明细
功能概述:进入站立模式、控制站立姿态、控制高度、前进左右、pitch、roll .
Topic :/diablo/MotionCmd
Msg Type s-e:motion_msgs/msg/MotionCtrl
命令示例:
ros2 topic pub /diablo/MotionCmd motion_msgs/msg/MotionCtrl "{mode_mark: false, value: {forward: 0.0, left: 0.0, up: 0.0, roll: 0.0, pitch: 0.0, leg_split: 0.0}, mode: {pitch_ctrl_mode: false, roll_ctrl_mode: false, height_ctrl_mode: false, stand_mode: false, jump_mode: false, split_mode: false}}"
字段描述:
对于MotionCtrl消息中的mode_mark,将其设置为true意味着你正在发送模式设定命令,而不是直接的移动控制命令。在模式设定命令中,你可以设置机器人进入某个特定的操作模式,比如站立模式、跳跃模式等。例如:需要设定机器人进入站立模式并改变高度控制。可以发送以下命令:
msg->mode_mark = true;
msg->mode.stand_mode = true;
msg->value.up = 1.0; //改变up 值从而改变高度
motion_publisher->publish(msg);
假设不进行模式设定,意味着mode_mark设置false 。 更多控制示例参考:teleop.py
4.IMU传感器信息
传感器信息包括IMU、电源系统、6个电机数据等数据的获取和调用
明细
IMU 数据
功能概述:获取快速的50hz imu 四元数、角速度、加速度等数据
Topic:/diablo/sensor/Imu
Msg Type s-e:sensor_msgs/msg/Imu
命令示例:ros2 topic echo /diablo/sensor/Imu
IMU Euler 数据
功能概述:获取快速的50hz imuEuler pitch、roll、yaw 等数据
Topic:/diablo/sensor/ImuEuler
Msg Type s-e:ception_msgs/msg/IMUEuler
命令示例:ros2 topic echo /diablo/sensor/ImuEuler
5.电机API
电机API用于获取六个电机的状态及腿长
明细
功能概况:读取六个电机状态信息及左右腿长
Topic :/diablo/sensor/Motors
Msg Type s-e:motion_msgs/msg/LegMotors
命令示例:ros2 topic echo /diablo/sensor/Motors
字段描述:
-
header:用于更高级别的带时间戳的数据类型的标准元数据。此字段用于传递时间戳和坐标帧信息;
-
enc_rev: 圈数;
-
pos: 位置 ,单位rad;
-
vel: 角速度,单位rad/s;
-
iq: 电流,单位A;
-
leg_length: 腿长,单位m;
6.电源系统API
电源系统的API只能对电池信息等信息数据查看
明细
功能概况:订阅Topic反馈电源信息
Topic: /diablo/sensor/Body_state
Msg Type s-e: sensor_msgs/msg/Battery
命令示例:ros2 topic echo /diablo/sensor/Battery
字段描述:
-
header:用于更高级别的带时间戳的数据类型的标准元数据。此字段用于传递时间戳和坐标帧信息;
-
voltage: 电压,单位V;
-
current: 母线电流 ,单位A;
-
percentage: 剩余电量
7.机器人状态信息
机器人状态信息反馈如异常、未初始化等等,可用于自查故障、警告等问题
明细
功能概况:订阅Topic反馈电源信息
Topic: /diablo/sensor/Body_state
Msg Type s-e: motion_msgs/msg/RobotStatus
命令示例:ros2 topic echo /diablo/sensor/Body_state
字段描述:
-
header:用于更高级别的带时间戳的数据类型的标准元数据。此字段用于传递时间戳和坐标帧信息;
-
ctrl_mode_msg: 机器人控制状态
-
robot_mode_msg: 机器人模式状态
-
error_msg: 机器人错误状态码
-
warning_msg:机器人警告状态码
状态代码
-
ctrl_mode_msg = 1 ; sdk 控制控制权限模式
-
robot_mode_msg = 2; 匍匐状态
-
robot_mode_msg = 3 ; 站立状态
-
robot_mode_msg = 4 ; 站立状态过渡到匍匐状态
-
robot_mode_msg = 5 ; 匍匐状态过渡到站立状态
-
error_msg = 2064384 ; 6个电机断连,如有其他状态码反馈DDT FAE 协助诊断解决,warning_msg 状态码 亦如此。