Skip to content

底层服务接口

功能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_statesensor_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_statestd_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