底层服务接口
功能 | C++ | ROS |
---|---|---|
获取电量信息 | ✔ | ✔ |
获取充电信息 | ✔ | ✔ |
进入/退出充电模式 | ✔ | |
获取IMU数据 | ✔ | ✔ |
充电相关接口
获取电量信息
获取机器人的电量信息
C++ 接口
rcClientInterfaceGetCommonStatus
简介
cpp
/**
* @brief 获取被控机器人常规状态信息(机器人状态反馈的主要接口)。
*
* 该函数用于获取机器人的常规状态信息。
*
* @param com_state 指向保存机器人状态信息的结构体指针。
* @return bool 返回 `true` 表示获取成功,返回 `false` 表示获取失败。
*/
bool rcClientInterfaceGetCommonStatus(common::ROBOT_COMMON_STATUS *com_state);
使用案例
cpp
common::ROBOT_COMMON_STATUS com_state;
bool success = rcClientInterfaceGetCommonStatus(&com_state);
if (success) {
float charge_level= com_state.charge_status.battery_info.level;
auto charge_state = com_state.charge_status.battery_info.state;
std::cout << "Common Status Retrieved Successfully." << std::endl;
// 输出或处理 com_state 数据
} else {
std::cout << "Failed to Retrieve Common Status." << std::endl;
}
注意事项
com_state
必须指向有效的common::ROBOT_COMMON_STATUS
结构体。
ROS2 接口
该接口用于发布机器人的电池电量信息。
Topic 名称 | Topic类型 | 角色 |
---|---|---|
/battery_state | sensor_msgs::msg::BatteryState | 发布方 |
消息结构
sensor_msgs::msg::BatteryState
消息类型包含以下字段:
header
:标准消息头percentage
:表示电池的当前电量百分比
示例消息
cpp
sensor_msgs::msg::BatteryState battery_state_msg;
battery_state_msg.header.stamp = rclcpp::Time();
battery_state_msg.percentage = 75.0; // 75% 电量
测试方法
使用以下命令查看/battery_state
topic的消息:
bash
ros2 topic echo /battery_state
获取充电信息
C++ 接口
rcClientInterfaceGetChargeStat
简介
cpp
/**
* @brief 读取Jetson充电状态。
*
* 该函数用于读取Jetson的当前充电状态。
*
* @param charge_state 指针,用于存储读取到的充电状态。
* @return bool 返回 `true` 表示读取成功,返回 `false` 表示读取失败。
*/
bool rcClientInterfaceGetChargeState(common::JETSON_CHARGE_STATE *charge_state);
使用案例
cpp
common::JETSON_CHARGE_STATE charge_state;
bool success = rcClientInterfaceGetChargeState(&charge_state);
if (success) {
std::cout << "Jetson Charge State Read Successfully." << std::endl;
// 处理读取到的charge_state
} else {
std::cout << "Failed to Read Jetson Charge State." << std::endl;
}
注意事项
- 确保传入的指针有效,并且指向的内存区域可以存储充电状态。
ROS2 接口
该接口用于发布机器人的是否正在充电,用于向巡检平台上报。
Topic 名称 | Topic 类型 | 角色 |
---|---|---|
/charge_state | std_msgs::msg::Bool | 发布方 |
消息结构
std_msgs::msg::Bool
消息类型包含以下字段:
data
:表示机器人的当前模式。模式码如下:true
:正在充电false
:不在充电
示例消息
cpp
std_msgs::msg::Int32 msg;
msg.data = true;
测试方法
bash
ros2 topic echo /dock_mode
进入或退出充电模式
C++ 接口
rcClientInterfaceEnterOrExitCharge
简介
cpp
/**
* @brief 进入或退出充电模式接口。
*
* 该函数用于控制机器人进入或退出充电模式。
*
* @param from 指定操作模式(导航或操纵杆)。
* @param driver_enable 指定是否使能充电模式(true表示进入,false表示退出)。
* @return bool 返回 `true` 表示设置成功,返回 `false` 表示设置失败。
*/
bool rcClientInterfaceEnterOrExitCharge(
robot_control::common::NAV_OR_JOY_MODE from,
bool driver_enable);
使用案例
cpp
robot_control::common::NAV_OR_JOY_MODE mode = robot_control::common::NAV_OR_JOY_MODE::joy_control;
bool enable_charge = true; // 示例值,表示进入充电模式
bool success = rcClientInterfaceEnterOrExitCharge(mode, enable_charge);
if (success) {
std::cout << "Charge Mode Set Successfully." << std::endl;
} else {
std::cout << "Failed to Set Charge Mode." << std::endl;
}
注意事项
- 确保传入的操作模式和充电模式使能状态是有效的。
机器人传感器数据
获取IMU数据
C++ 接口(一次一条数据)
rcClientInterfaceGetImuData
简介
cpp
/**
* @brief 获取当前被控制机器人的IMU数据(一次读一条数据)。
*
* 该函数用于获取当前被控制机器人的IMU(惯性测量单元)数据。
*
* @param imu_data 指向保存IMU数据的结构体指针。
* @return bool 返回 `true` 表示获取成功,返回 `false` 表示获取失败。
*/
bool rcClientInterfaceGetImuData(common::MC_MOTION_IMU_DATA *imu_data);
使用案例
cpp
common::MC_MOTION_IMU_DATA imu_data;
bool success = rcClientInterfaceGetImuData(&imu_data);
if (success) {
std::cout << "IMU Data Retrieved Successfully." << std::endl;
// 输出或处理 imu_data 数据
} else {
std::cout << "Failed to Retrieve IMU Data." << std::endl;
}
C++ 接口(一次多条数据)
rcClientInterfaceGetImuStreamData
简介
cpp
/**
* @brief 获取当前被控制机器人的IMU数据(一次能读多条数据)。
*
* 该函数用于获取当前被控制机器人的IMU(惯性测量单元)数据流。
*
* @param imu_data_list 指向保存IMU数据的向量指针。
* @return bool 返回 `true` 表示获取成功,返回 `false` 表示获取失败。
*/
bool rcClientInterfaceGetImuStreamData(std::vector<common::MC_MOTION_IMU_DATA> *imu_data_list);
使用案例
cpp
std::vector<common::MC_MOTION_IMU_DATA> imu_data_list;
bool success = rcClientInterfaceGetImuStreamData(&imu_data_list);
if (success) {
std::cout << "IMU Stream Data Retrieved Successfully." << std::endl;
// 输出或处理 imu_data_list 数据
} else {
std::cout << "Failed to Retrieve IMU Stream Data." << std::endl;
}
注意事项
- imu_data_list 必须指向有效的
std::vector<common::MC_MOTION_IMU_DATA>
。 - 确保调用该函数前已经成功初始化客户端与服务器的连接。
ROS2 接口
该接口用于发布IMU传感器数据,IMU 通常包含加速度计、陀螺仪和磁力计测量数据,接口通过imu
topic订阅机器人的姿态、角速度和线加速度。
Topic 名称 | Topic 类型 | 角色 |
---|---|---|
/imu | /sensor_msgs::msg::Imu | 发布方 |
消息结构
/sensor_msgs::msg::Imu
消息类型包含以下字段:
header
:标准消息头orientation
:包含姿态信息angular_velocity
:包含角速度信息linear_acceleration
:包含线加速度信息
示例消息
cpp
sensor_msgs::msg::Imu imu_msg;
imu_msg.header.stamp = rclcpp::Time();
imu_msg.header.frame_id = "imu";
imu_msg.orientation.x = 0.0;
imu_msg.orientation.y = 0.0;
imu_msg.orientation.z = 0.0;
imu_msg.orientation.w = 1.0;
imu_msg.angular_velocity.x = 0.0;
imu_msg.angular_velocity.y = 0.0;
imu_msg.angular_velocity.z = 0.0;
imu_msg.linear_acceleration.x = 0.0;
imu_msg.linear_acceleration.y = 0.0;
imu_msg.linear_acceleration.z = 0.0;
测试方法
bash
ros2 topic echo /rc_imu