一、简介
在使用SDK操作机器人的第一步,就是给机器人上电、释放抱闸等基础操作,这些操作都作为接口放在了dashboard类中,具体的接口可以查看 CS机器人 C++ SDK 接口手册 章节,这里提供一个简单的使用案例
二、操作流程
1、跟随快速使用手册安装elite c++ sdk,确保sdk安装正确。
2、整体编译C++ sdk仓。
3、进入build/example文件夹下,执行编译好的可执行文件dashboard_example,传递ip、port等参数,可以观察到机器人会上下电、示教器会出现弹窗等现象。
三、常见问题
1、只能通过控制台执行这个文件吗?能否通过ide直接执行?
A:这里使用了argparse解析参数,所以只需要将这里参数解析部分删除,直接指定ip, port即可
四、代码和附件
这段代码首先会在
connect(robot_ip)连接Dashboard后,调用echo() 测一下通不通,然后调用powerOff() →closeSafetyDialog() → powerOn() → brakeRelease() 进行先关机再开机、释放抱闸的整套上下电流程。接着loadTask("test.task") 加载一个已经存在机器人里的任务,接着playProgram() → 校验 PLAYING → pauseProgram() → 校验 PAUSED → stopProgram() → 校验 STOPPED 。然后调用isTaskSaved() 检查任务保存状态,最后popup("-s", "Hello Robot") 在机器人示教器上弹个消息,disconnect() 断开。// SPDX-License-Identifier: MIT
// Copyright (c) 2025, Elite Robots.
#include <Elite/DashboardClient.hpp>
#include <Elite/DataType.hpp>
#include <Elite/Log.hpp>
#include <boost/program_options.hpp>
#include <iostream>
#include <regex>
#include <thread>
using namespace ELITE;
namespace po = boost::program_options;
int main(int argc, char* argv[]) {
// Parse the ip arguments if given
std::string robot_ip;
// Parser param
po::options_description desc(
"Usage:\n"
"\t./dashboard_example <--robot-ip=ip>\n"
"Note:A task named \"test\" must be saved in the robot before running.\n"
"Parameters:");
desc.add_options()
("help,h", "Print help message")
("robot-ip", po::value<std::string>(&robot_ip)->required(),
"\tRequired. IP address of the robot.");
po::variables_map vm;
try {
po::store(po::parse_command_line(argc, argv, desc), vm);
if (vm.count("help")) {
std::cout << desc << std::endl;
return 0;
}
po::notify(vm);
} catch (const po::error& e) {
std::cerr << "Argument error: " << e.what() << "\n\n";
std::cerr << desc << "\n";
return 1;
}
// Making the robot ready for the program by:
// Connect the the robot Dashboard
std::unique_ptr<DashboardClient> my_dashboard;
my_dashboard.reset(new DashboardClient());
if (!my_dashboard->connect(robot_ip)) {
ELITE_LOG_FATAL("Could not connect to robot");
return 1;
} else {
ELITE_LOG_INFO("Connect to robot");
}
if (!my_dashboard->echo()) {
ELITE_LOG_FATAL("Echo not right response");
return 1;
} else {
ELITE_LOG_INFO("Echo right response");
}
if (!my_dashboard->powerOff()) {
ELITE_LOG_FATAL("Could not send power off");
return 1;
} else {
ELITE_LOG_INFO("Power off");
}
my_dashboard->closeSafetyDialog();
// Power it on
if (!my_dashboard->powerOn()) {
ELITE_LOG_FATAL("Could not send Power on command");
return 1;
} else {
ELITE_LOG_INFO("Power on");
}
// Release the brakes
if (!my_dashboard->brakeRelease()) {
ELITE_LOG_FATAL("Could not send BrakeRelease command");
return 1;
} else {
ELITE_LOG_INFO("Brake release");
}
// Load existing task
const std::string task_file_name_to_be_loaded("test.task");
if (!my_dashboard->loadTask(task_file_name_to_be_loaded)) {
ELITE_LOG_FATAL("Could not load %s", task_file_name_to_be_loaded.c_str());
return 1;
}
std::string task = my_dashboard->getTaskPath();
if (task != task_file_name_to_be_loaded) {
ELITE_LOG_FATAL("Not load right task");
return 1;
} else {
ELITE_LOG_INFO("Load task");
}
if (my_dashboard->getTaskStatus() != TaskStatus::STOPPED) {
ELITE_LOG_FATAL("Task not stopped");
return 1;
} else {
ELITE_LOG_INFO("Task stopped");
}
if (!my_dashboard->playProgram()) {
ELITE_LOG_FATAL("Could not play task");
return 1;
} else {
ELITE_LOG_INFO("Play task");
}
if (my_dashboard->getTaskStatus() != TaskStatus::PLAYING) {
ELITE_LOG_FATAL("Task not running");
return 1;
} else {
ELITE_LOG_INFO("Task running");
}
if (!my_dashboard->pauseProgram()) {
ELITE_LOG_FATAL("Could not pause task");
return 1;
} else {
ELITE_LOG_INFO("Pause task");
}
if (my_dashboard->getTaskStatus() != TaskStatus::PAUSED) {
ELITE_LOG_FATAL("Task not pause");
return 1;
} else {
ELITE_LOG_INFO("Task pause");
}
if (!my_dashboard->stopProgram()) {
ELITE_LOG_FATAL("Could not stop task");
return 1;
} else {
ELITE_LOG_INFO("Stop task");
}
if (my_dashboard->getTaskStatus() != TaskStatus::STOPPED) {
ELITE_LOG_FATAL("Task not stop");
return 1;
} else {
ELITE_LOG_INFO("Task stopped");
}
if (!my_dashboard->isTaskSaved()) {
ELITE_LOG_FATAL("Task save status not right");
return 1;
} else {
ELITE_LOG_INFO("Task saved");
}
if (!my_dashboard->popup("-s", "Hello Robot")) {
ELITE_LOG_FATAL("Could not popup message box");
return 1;
} else {
ELITE_LOG_INFO("Popup message box");
}
my_dashboard->disconnect();
return 0;
}