This example demonstrates streaming control using SERVO_JOINT_POS mode at 250 Hz.
This example demonstrates streaming control using SERVO_JOINT_POS mode at 250 Hz.
#include <array>
#include <cmath>
#include <thread>
#include <chrono>
int main() {
auto sdk = std::make_shared<AirbotSdk>("192.168.0.xxx", 50051);
std::array<double, 6> initial_pos = {0.0, -M_PI_4, M_PI_4, 0.0, 0.0, 0.0};
sdk->SwitchMode({"arm"}, {RobotMode::PLANNING_POS});
sdk->MoveToJointPos(initial_pos);
sdk->SwitchMode({"arm"}, {RobotMode::SERVO_JOINT_POS});
constexpr double total_duration_sec = 30.0;
constexpr double one_cycle_duration_sec = 10.0;
auto start_time = std::chrono::steady_clock::now();
while (true) {
auto now = std::chrono::steady_clock::now();
std::chrono::duration<double> elapsed = now - start_time;
if (elapsed.count() >= total_duration_sec)
break;
double phase_shifted_time = elapsed.count() - 0.5;
double timed_coef = std::sin(phase_shifted_time * 2 * M_PI / one_cycle_duration_sec);
std::array<double, 6> joint_pos = {
M_PI / 2 * timed_coef,
-M_PI / 4 - M_PI / 4 * timed_coef,
M_PI / 4 + M_PI / 4 * timed_coef,
0.0, 0.0, 0.0
};
std::vector<double> eef_pos = {(1 - timed_coef) * 0.07 / 2};
sdk->ServoJointPos(joint_pos);
sdk->ServoEefPos(eef_pos);
std::this_thread::sleep_for(std::chrono::milliseconds(3));
}
std::this_thread::sleep_for(std::chrono::seconds(static_cast<int>(total_duration_sec * 0.8)));
return 0;
}
Main SDK interface for controlling Airbot robotic arm.
Namespace containing all Airbot SDK related definitions.