#ifndef ARCS_RESEARCH_INTERFACE_ROBOT_H #define ARCS_RESEARCH_INTERFACE_ROBOT_H #include #include #include #include #include #include "aubo_sdk/rpc.h" namespace arcs { namespace research_interface { struct JointPositions { JointPositions() {} JointPositions(const std::array &joint_positions) : q(joint_positions) { } JointPositions(std::initializer_list joint_positions) { if (joint_positions.size() != q.size()) { throw std::invalid_argument( "Invalid number of elements in joint_positions."); } std::copy(joint_positions.begin(), joint_positions.end(), q.begin()); } std::array q{}; bool finished{ false }; }; class ARCS_ABI Robot { public: Robot(const std::string &ip, int port = 30030); ~Robot(); // 启动机器人 int startup(); int setControlPeriod(int period = 5000); int movej(const JointPositions &jnt_pos); // 位置控制 void control( std::function control_callback, bool limit_rate = false, double cutoff_frequency = 100, bool loop = false); // 实时读取机器人的状态 void read(std::function read_callback); protected: void *d_{ nullptr }; bool init_{ false }; }; } // namespace research_interface } // namespace arcs #endif