lebai sdk 1.4.3
lebai c++ sdk with swig to support sereval languages.
Loading...
Searching...
No Matches
robot.hh
1
17#pragma once
18
19#include <memory>
20#include <string>
21#include <vector>
22#include <array>
23#include <map>
24
25namespace lebai {
26namespace l_master {
32std::string version();
38using CartesianPose = std::map<std::string, double>;
39using DoubleVector = std::vector<double>;
45 CartesianPose
49 bool ok = false;
50};
56 DoubleVector
60 bool ok = false;
61};
62
67struct ClawData {
68 double force;
69 double amplitude;
70 bool hold_on;
71};
72
78 std::string key;
79 std::string value;
80};
81
87 DoubleVector joint_temperature;
88 DoubleVector joint_voltage;
90};
91
97 DoubleVector actual_joint_pose;
98 DoubleVector actual_joint_speed;
99 DoubleVector actual_joint_acc;
100 DoubleVector actual_joint_torque;
101 DoubleVector target_joint_pose;
102 DoubleVector target_joint_speed;
103 DoubleVector target_joint_acc;
104 DoubleVector target_joint_torque;
105 CartesianPose actual_tcp_pose;
106 CartesianPose target_tcp_pose;
107 CartesianPose actual_flange_pose;
108};
109
115 unsigned int action = 99;
116 unsigned int pause_time = 0;
117 unsigned int sensitivity = 0;
118};
119
125 double min_position = 0.0;
126 double max_position = 0.0;
127 double max_a = 0.0;
128 double max_v = 0.0;
129};
130
136 double max_a = 0.0;
137 double max_v = 0.0;
138 double eq_radius = 0.0;
139};
140
149class Robot {
150 public:
156 class RobotImpl;
157
168 explicit Robot(std::string ip, bool simulator = false);
173 virtual ~Robot();
174
175 // clang-format off
193 // clang-format on
194 std::tuple<int, std::string> call(const std::string &method,
195 const std::string &params);
196
204
269 void start_sys();
275 void stop_sys();
280 void powerdown();
285 void stop();
290 void estop();
305 void pause();
310 void resume();
314 void reboot();
342 int movej(const std::vector<double> &joint_positions, double a, double v,
343 double t, double r);
366 int movej(const CartesianPose &cart_pose, double a, double v, double t,
367 double r);
388 int movel(const std::vector<double> &joint_positions, double a, double v,
389 double t, double r);
412 int movel(const CartesianPose &cart_pose, double a, double v, double t,
413 double r);
438 int movec(const std::vector<double> &joint_via,
439 const std::vector<double> &joint, double rad, double a, double v,
440 double t, double r);
458 int movec(const CartesianPose &cart_via, const CartesianPose &cart,
459 double rad, double a, double v, double t, double r);
472 int speedj(double a, const std::vector<double> &v, double t = 0.0);
488 int speedl(double a, const CartesianPose &v, double t = 0.0,
489 const CartesianPose &reference = {{"x", 0.0},
490 {"y", 0.0},
491 {"z", 0.0},
492 {"rx", 0.0},
493 {"ry", 0.0},
494 {"rz", 0.0}});
516 int towardj(const std::vector<double> &joint_positions, double a, double v,
517 double t, double r);
526 void move_pvat(std::vector<double> p, std::vector<double> v,
527 std::vector<double> a, double t);
533 void wait_move(unsigned int id);
538 void wait_move();
542 unsigned int get_running_motion();
548 std::string get_motion_state(unsigned int id);
552 void stop_move();
602
614 bool is_down();
620 std::vector<double> get_actual_joint_positions();
626 std::vector<double> get_target_joint_positions();
632 std::vector<double> get_actual_joint_speed();
633 // get_target_joint_speed
639 std::vector<double> get_target_joint_speed();
646 CartesianPose get_actual_tcp_pose();
653 CartesianPose get_target_tcp_pose();
654
661 double get_joint_temp(unsigned int joint_index);
662
668 std::vector<double> get_actual_joint_torques();
674 std::vector<double> get_target_joint_torques();
675
698 void set_do(std::string device, unsigned int pin, unsigned int value);
706 unsigned int get_do(std::string device, unsigned int pin);
715 std::vector<unsigned int> get_dos(std::string device, unsigned int pin,
716 unsigned int num);
724 unsigned int get_di(std::string device, unsigned int pin);
733 std::vector<unsigned int> get_dis(std::string device, unsigned int pin,
734 unsigned int num);
735
743 void set_ao(std::string device, unsigned int pin, double value);
751 double get_ao(std::string device, unsigned int pin);
760 std::vector<double> get_aos(std::string device, unsigned int pin,
761 unsigned int num);
769 double get_ai(std::string device, unsigned int pin);
778 std::vector<double> get_ais(std::string device, unsigned int pin,
779 unsigned int num);
788 void set_dio_mode(std::string device, unsigned int pin, bool value);
797 std::vector<bool> get_dios_mode(std::string device, unsigned int pin,
798 unsigned int count);
809 void init_claw(bool force_initilization);
817 void set_claw(double force, double amplitude);
818
839 void set_led(unsigned int mode, unsigned int speed,
840 const std::vector<unsigned int> &color);
847 void set_voice(unsigned int voice, unsigned int volume);
853 void set_fan(unsigned int status);
866 void set_signal(unsigned int index, int value);
873 int get_signal(unsigned int index);
880 void add_signal(unsigned int index, int value);
898 unsigned int start_task(const std::string &name,
899 const std::vector<std::string> &params,
900 const std::string &dir, bool is_parallel,
901 unsigned int loop_to);
907 unsigned int start_task(const std::string &name);
911 std::vector<unsigned int> get_task_list();
918 std::string wait_task(unsigned int id);
926 void pause_task(unsigned int id, unsigned long time, bool wait);
931 void pause_task(unsigned int id);
937 void resume_task(unsigned int id);
943 void cancel_task(unsigned int id);
949 unsigned int exec_hook(unsigned int id);
953 std::string get_task_state();
959 std::string get_task_state(unsigned int id);
972 const std::vector<double> &joint_positions);
973
981 const CartesianPose &pose,
982 const std::vector<double> &joint_init_positions = {});
983
991 CartesianPose pose_times(const CartesianPose &a, const CartesianPose &b);
992
999 CartesianPose pose_inverse(const CartesianPose &in);
1013 void save_file(const std::string &dir, const std::string &name, bool is_dir,
1014 const std::string &data);
1023 void rename_file(const std::string &from_dir, const std::string &from_name,
1024 const std::string &to_dir, const std::string &to_name);
1025
1034 std::tuple<bool, std::string> load_file(const std::string &dir,
1035 const std::string &name);
1036
1046 std::vector<std::tuple<bool, std::string>> load_file_list(
1047 const std::string &dir, const std::string &prefix,
1048 const std::string &suffix);
1057 // void zip(const std::string &from_dir, std::vector<std::string> files, const
1058 // std::string &to_dir, const std::string &name);
1059 // /**
1060 // * @brief 将zip文件解压到文件系统.
1061 // *
1062 // * @param from_dir zip文件的路径.
1063 // * @param name zip文件的名称.
1064 // * @param files zip文件内的文件名.
1065 // * @param to_dir 解压到的路径.
1066 // */
1067 // void unzip(const std::string &from_dir, const std::string &name,
1068 // std::vector<std::string> files, const std::string &to_dir);
1069 // /**
1070 // * @brief 查询文件列表.
1071 // *
1072 // * @brief 目标zip文件名.
1073 // * @param dir 文件的目录.
1074 // * @param prefix 前缀.
1075 // * @param suffix 后缀.
1076 // *
1077 // * @return 文件列表.
1078 // */
1079 // //std::vector<std::tuple<bool,string>> load_zip_list(const std::string
1080 // &zip,const std::string &dir,const std::string &prefix,const std::string
1081 // &suffix);
1082
1093 void set_tcp(std::array<double, 6> tcp);
1099 std::array<double, 6> get_tcp();
1105 void set_velocity_factor(int factor);
1118 void set_payload(double mass, std::map<std::string, double> cog);
1124 void set_payload_mass(double mass);
1130 void set_payload_cog(std::map<std::string, double> cog);
1136 std::map<std::string, double> get_payload();
1142 void set_gravity(std::map<std::string, double> gravity);
1148 std::map<std::string, double> get_gravity();
1164 void set_collision_torque_diff(const std::vector<double> &diffs);
1170 std::vector<double> get_collision_torque_diff();
1198 void set_joints_limit(const std::vector<JointLimitConfig> &joints);
1204 std::vector<JointLimitConfig> get_joints_limit();
1223 CartesianPose load_tcp(std::string name, std::string dir = "");
1237 void write_single_coil(std::string device, std::string addr, bool value);
1238
1246 void wirte_multiple_coils(std::string device, std::string addr,
1247 std::vector<bool> values);
1248
1256 std::vector<bool> read_coils(std::string device, std::string addr,
1257 unsigned int num);
1265 std::vector<bool> read_discrete_inputs(std::string device, std::string addr,
1266 unsigned int num);
1267
1275 void write_single_register(std::string device, std::string addr,
1276 unsigned int value);
1284 void write_multiple_registers(std::string device, std::string addr,
1285 std::vector<unsigned int> values);
1286
1294 std::vector<unsigned int> read_holding_registers(std::string device,
1295 std::string addr,
1296 unsigned int num);
1304 std::vector<unsigned int> read_input_registers(std::string device,
1305 std::string addr,
1306 unsigned int num);
1319 void set_serial_baud_rate(std::string device, unsigned int baud_rate);
1327 void set_serial_parity(std::string device, unsigned int parity);
1345 StorageItem get_item(std::string name);
1352 std::vector<StorageItem> get_items(std::string prefix);
1355 protected:
1356 std::unique_ptr<RobotImpl> impl_;
1357};
1358
1359} // namespace l_master
1360
1361} // namespace lebai
机械臂的主要接口对象,通过本对象的方法与机械臂进行数据交互.
Definition robot.hh:149
std::unique_ptr< RobotImpl > impl_
Definition robot.hh:1356
std::tuple< int, std::string > call(const std::string &method, const std::string &params)
用JSON格式字符串调用机械臂的接口.
virtual ~Robot()
析构Robot对象.
Robot(std::string ip, bool simulator=false)
构造Robot对象.
bool is_network_connected()
返回是否和机械臂的网络连接正常,如果网络连接异常,调用和机械臂交互的接口会抛出异常std::runtime_error。
ClawData get_claw_data()
获取夹爪当前数据
void init_claw(bool force_initilization)
初始化夹爪
void set_claw(double force, double amplitude)
设置夹爪力度(力控)和幅度(位控).如果在闭合过程中抓取到物体,则不再继续闭合以避免夹坏物体,判断的准则为这里设置的力的大小.
int get_velocity_factor()
获取当前的速度因子.
void enable_limit()
使能安全限位检测.
std::vector< JointLimitConfig > get_joints_limit()
获取关节限位.
void set_payload_cog(std::map< std::string, double > cog)
设置机器人末端负载重心.
void set_collision_detector(const CollisionDetectorConfig &config)
设置碰撞检测参数.
void set_gravity(std::map< std::string, double > gravity)
设置机器人重力加速度方向.
std::vector< double > get_collision_torque_diff()
获取碰撞监测误差.
CartesianLimitConfig get_cart_limit()
获取笛卡尔空间限位.
std::map< std::string, double > get_gravity()
获取机器人重力加速度的方向.
CartesianPose load_tcp(std::string name, std::string dir="")
从资源库加载tcp.
void disable_limit()
临时禁用安全限位检测.
void set_cart_limit(const CartesianLimitConfig &limit)
设置笛卡尔空间限位.
void set_payload(double mass, std::map< std::string, double > cog)
设置机器人末端负载.
void set_tcp(std::array< double, 6 > tcp)
设置工具中心点(TCP)坐标,坐标值相对于工具坐标系.
std::array< double, 6 > get_tcp()
获取当前机器人工具中心点设置.
void enable_collision_detector()
使能碰撞检测.
CollisionDetectorConfig get_collision_detector()
获取碰撞检测参数.
void set_joints_limit(const std::vector< JointLimitConfig > &joints)
设置关节限位.
void set_velocity_factor(int factor)
设置速度因子.
std::map< std::string, double > get_payload()
获取末端负载设置.
void set_collision_torque_diff(const std::vector< double > &diffs)
设置碰撞监测误差.
void disable_collision_detector()
临时禁用碰撞检测.
void set_payload_mass(double mass)
设置机器人末端负载质量.
void rename_file(const std::string &from_dir, const std::string &from_name, const std::string &to_dir, const std::string &to_name)
重命名文件
std::vector< std::tuple< bool, std::string > > load_file_list(const std::string &dir, const std::string &prefix, const std::string &suffix)
查询文件列表.
void save_file(const std::string &dir, const std::string &name, bool is_dir, const std::string &data)
保存文件(以字节形式).
std::tuple< bool, std::string > load_file(const std::string &dir, const std::string &name)
查询文件
void set_do(std::string device, unsigned int pin, unsigned int value)
设置数字输出
std::vector< double > get_aos(std::string device, unsigned int pin, unsigned int num)
获取多个模拟输出
double get_ai(std::string device, unsigned int pin)
获取模拟输入
unsigned int get_do(std::string device, unsigned int pin)
获取数字输出
std::vector< unsigned int > get_dis(std::string device, unsigned int pin, unsigned int num)
获取多个数字输入
std::vector< double > get_ais(std::string device, unsigned int pin, unsigned int num)
获取多个模拟输入
std::vector< bool > get_dios_mode(std::string device, unsigned int pin, unsigned int count)
获取数字端口模式
unsigned int get_di(std::string device, unsigned int pin)
获取数字输入
void set_ao(std::string device, unsigned int pin, double value)
设置模拟输出
std::vector< unsigned int > get_dos(std::string device, unsigned int pin, unsigned int num)
获取多个数字输出
double get_ao(std::string device, unsigned int pin)
获取模拟输出
void set_dio_mode(std::string device, unsigned int pin, bool value)
设置数字端口模式
void set_fan(unsigned int status)
开关风扇
void set_voice(unsigned int voice, unsigned int volume)
设置声音
void set_led(unsigned int mode, unsigned int speed, const std::vector< unsigned int > &color)
设置LED灯状态.
std::vector< bool > read_discrete_inputs(std::string device, std::string addr, unsigned int num)
读离散输入
void wirte_multiple_coils(std::string device, std::string addr, std::vector< bool > values)
写多个线圈
std::vector< unsigned int > read_holding_registers(std::string device, std::string addr, unsigned int num)
读保持寄存器
std::vector< unsigned int > read_input_registers(std::string device, std::string addr, unsigned int num)
读输入寄存器
std::vector< bool > read_coils(std::string device, std::string addr, unsigned int num)
读线圈
void write_single_coil(std::string device, std::string addr, bool value)
写单个线圈.
void write_multiple_registers(std::string device, std::string addr, std::vector< unsigned int > values)
写多个寄存器
void write_single_register(std::string device, std::string addr, unsigned int value)
写单个寄存器
std::string get_motion_state(unsigned int id)
查询指定MotionId的运动状态.
int speedl(double a, const CartesianPose &v, double t=0.0, const CartesianPose &reference={{"x", 0.0}, {"y", 0.0}, {"z", 0.0}, {"rx", 0.0}, {"ry", 0.0}, {"rz", 0.0}})
通过坐标速度矢量发送机械臂关节匀速运动
int movej(const std::vector< double > &joint_positions, double a, double v, double t, double r)
通过关节位置发送机械臂关节移动
int towardj(const std::vector< double > &joint_positions, double a, double v, double t, double r)
通过关节位置发送机械臂关节自由移动.
int movel(const CartesianPose &cart_pose, double a, double v, double t, double r)
通过坐标位置发送机械臂直线移动
int movec(const std::vector< double > &joint_via, const std::vector< double > &joint, double rad, double a, double v, double t, double r)
通过关节位置发送机械臂圆弧运动.
void move_pvat(std::vector< double > p, std::vector< double > v, std::vector< double > a, double t)
伺服运动PVAT
int movel(const std::vector< double > &joint_positions, double a, double v, double t, double r)
通过关节位置发送机械臂直线移动
void stop_move()
停止所有运动.
int movec(const CartesianPose &cart_via, const CartesianPose &cart, double rad, double a, double v, double t, double r)
通过坐标位置发送机械臂圆弧运动
void wait_move(unsigned int id)
等待运动完成.
void wait_move()
等待所有运动完成.
int speedj(double a, const std::vector< double > &v, double t=0.0)
通过关节速度矢量发送机械臂关节匀速运动
unsigned int get_running_motion()
查询当前正在运动的MotionId(无运动时返回上次MotionId).
int movej(const CartesianPose &cart_pose, double a, double v, double t, double r)
通过坐标位置发送机械臂关节移动
KinematicsInverseResp kinematics_inverse(const CartesianPose &pose, const std::vector< double > &joint_init_positions={})
根据机械臂的末端位姿计算关节位置(位置的运动学逆解).
CartesianPose pose_times(const CartesianPose &a, const CartesianPose &b)
位姿变换乘法(等价于对应的齐次坐标矩阵乘法)
KinematicsForwardResp kinematics_forward(const std::vector< double > &joint_positions)
根据机械臂关节位置计算机器人末端位姿(位置的运动学正解).
CartesianPose pose_inverse(const CartesianPose &in)
位姿变换的逆(等价于对应的齐次坐标矩的逆)
void cancel_task(unsigned int id)
取消任务与运动.
unsigned int start_task(const std::string &name, const std::vector< std::string > &params, const std::string &dir, bool is_parallel, unsigned int loop_to)
调用场景
unsigned int start_task(const std::string &name)
调用场景
unsigned int exec_hook(unsigned int id)
根据已设置的Hook执行对应场景
std::string wait_task(unsigned int id)
等待任务完成
std::string get_task_state(unsigned int id)
获取任务状态.
void pause_task(unsigned int id, unsigned long time, bool wait)
暂停任务与运动
void resume_task(unsigned int id)
恢复任务与运动
std::string get_task_state()
获取任务状态.
void pause_task(unsigned int id)
暂停任务与运动
std::vector< unsigned int > get_task_list()
查询任务列表
void set_serial_parity(std::string device, unsigned int parity)
设置串口校验位.
void set_serial_baud_rate(std::string device, unsigned int baud_rate)
设置串口波特率.
int get_signal(unsigned int index)
获取信号量
void add_signal(unsigned int index, int value)
增加指定下标的信号量值,该操作是原子的.
void set_signal(unsigned int index, int value)
设置信号量
void estop()
紧急停止(急停).
void teach_mode()
进入示教模式.
void start_sys()
启动机械臂(机械臂上使能).
void resume()
恢复运动.
void stop()
停止运动(但不下电).
void end_teach_mode()
退出示教模式.
void powerdown()
关闭机器人电源(关机).
void stop_sys()
停止机械臂(机械臂下使能).
void pause()
暂停运动.
void reboot()
重新启动机箱
std::vector< double > get_target_joint_speed()
获取机械臂关节当前控制力矩
PhysicalData get_phy_data()
获取机械臂物理数据
std::vector< double > get_target_joint_positions()
获取机械臂关节当前控制位置
int get_robot_state()
获取机器人状态码
int get_estop_reason()
查看急停原因
bool is_disconnected()
是否已与手臂断开连接
CartesianPose get_target_tcp_pose()
获取机械臂末端在机械臂基坐标系下的控制位姿,CartesianPose = std::map<std::string,double>,应当包括键为x,y,z,rz,...
JointMotionData get_kin_data()
获取机械臂关节运动数据
bool is_down()
手臂是否已下电
std::vector< double > get_actual_joint_speed()
获取机械臂关节当前反馈速度
std::vector< double > get_actual_joint_torques()
获取机械臂关节当前反馈力矩
std::vector< double > get_actual_joint_positions()
获取机械臂关节当前反馈位置
double get_joint_temp(unsigned int joint_index)
获取单个关节温度
std::vector< double > get_target_joint_torques()
获取机械臂关节当前控制力矩
CartesianPose get_actual_tcp_pose()
获取机械臂末端在机械臂基坐标系下的实际位姿,CartesianPose = std::map<std::string,double>,应当包括键为x,y,z,rz,...
std::vector< StorageItem > get_items(std::string prefix)
获取存储项列表.
void set_item(StorageItem item)
设置存储项.
StorageItem get_item(std::string name)
获取存储项.
Definition discovery.hh:23
笛卡尔空间限位配置.
Definition robot.hh:135
double max_v
Definition robot.hh:137
double eq_radius
Definition robot.hh:138
double max_a
Definition robot.hh:136
夹爪数据结构.
Definition robot.hh:67
double amplitude
Definition robot.hh:69
bool hold_on
Definition robot.hh:70
double force
Definition robot.hh:68
碰撞检测配置.
Definition robot.hh:114
unsigned int pause_time
Definition robot.hh:116
unsigned int action
Definition robot.hh:115
unsigned int sensitivity
Definition robot.hh:117
关节限位配置.
Definition robot.hh:124
double min_position
Definition robot.hh:125
double max_position
Definition robot.hh:126
double max_v
Definition robot.hh:128
double max_a
Definition robot.hh:127
机械臂关节运动数据结构.
Definition robot.hh:96
CartesianPose actual_tcp_pose
Definition robot.hh:105
DoubleVector target_joint_speed
Definition robot.hh:102
DoubleVector target_joint_pose
Definition robot.hh:101
DoubleVector actual_joint_speed
Definition robot.hh:98
DoubleVector actual_joint_acc
Definition robot.hh:99
CartesianPose target_tcp_pose
Definition robot.hh:106
DoubleVector actual_joint_torque
Definition robot.hh:100
DoubleVector target_joint_acc
Definition robot.hh:103
DoubleVector target_joint_torque
Definition robot.hh:104
DoubleVector actual_joint_pose
Definition robot.hh:97
CartesianPose actual_flange_pose
Definition robot.hh:107
运动学正解的返回值数据结构.
Definition robot.hh:44
bool ok
Definition robot.hh:49
CartesianPose pose
Definition robot.hh:46
运动学逆解的返回值数据结构
Definition robot.hh:55
bool ok
Definition robot.hh:60
DoubleVector joint_positions
Definition robot.hh:57
机械臂物理数据结构.
Definition robot.hh:86
DoubleVector joint_temperature
Definition robot.hh:87
DoubleVector joint_voltage
Definition robot.hh:88
double flange_voltage
Definition robot.hh:89
存储项数据结构.
Definition robot.hh:77
std::string key
Definition robot.hh:78
std::string value
Definition robot.hh:79