状态监控示例
约 274 字小于 1 分钟
2025-05-29
该示例展示了如何使用 Magicbot-Gen1 SDK 进行初始化、连接机器人、机器人状态监控(故障、BMS)等基本操作。
示例文件:monitor_example.cpp
参考文档:monitor_reference.md
#include "magic_robot.h"
#include <unistd.h>
#include <csignal>
#include <iostream>
using namespace magic::gen1;
magic::gen1::MagicRobot robot;
void signalHandler(int signum) {
std::cout << "Interrupt signal (" << signum << ") received.\n";
robot.Shutdown();
// 退出进程
exit(signum);
}
int main() {
// 绑定 SIGINT(Ctrl+C)
signal(SIGINT, signalHandler);
std::string local_ip = "192.168.54.111";
// 配置本机网线直连机器的IP地址,并进行SDK初始化
if (!robot.Initialize(local_ip)) {
std::cerr << "robot sdk initialize failed." << std::endl;
robot.Shutdown();
return -1;
}
// 设置rpc超时时间为5s
robot.SetTimeout(5000);
// 连接机器人
auto status = robot.Connect();
if (status.code != ErrorCode::OK) {
std::cerr << "connect robot failed"
<< ", code: " << status.code
<< ", message: " << status.message << std::endl;
robot.Shutdown();
return -1;
}
// 等待5s
usleep(5000000);
auto& monitor = robot.GetStateMonitor();
auto state = monitor.GetCurrentState();
std::cout << "health: " << state.bms_data.battery_health
<< ", percentage: " << state.bms_data.battery_percentage
<< ", state: " << std::to_string((int8_t)state.bms_data.battery_state)
<< ", power_supply_status: " << std::to_string((int8_t)state.bms_data.power_supply_status)
<< std::endl;
auto& faults = state.faults;
for (auto& [code, msg] : faults) {
std::cout << "code: " << std::to_string(code)
<< ", message: " << msg;
}
// 断开与机器人的链接
status = robot.Disconnect();
if (status.code != ErrorCode::OK) {
std::cerr << "disconnect robot failed"
<< ", code: " << status.code
<< ", message: " << status.message << std::endl;
robot.Shutdown();
return -1;
}
robot.Shutdown();
return 0;
}