7. 机器人状态查询
7.1. 获取机器人安装角度
1/**
2* @brief 获取机器人安装角度
3* @param [out] yangle 倾斜角
4* @param [out] zangle 旋转角
5* @return 错误码
6*/
7int GetRobotInstallAngle(ref double yangle, ref double zangle);
7.2. 获取系统变量值
1/**
2* @brief 获取系统变量值
3* @param [in] id 系统变量编号,范围[1~20]
4* @param [out] value 系统变量值
5* @return 错误码
6*/
7int GetSysVarValue(int id, ref double value);
7.3. 获取当前关节位置(角度)
1/**
2* @brief 获取当前关节位置(角度)
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] jPos 六个关节位置,单位deg
5* @return 错误码
6*/
7int GetActualJointPosDegree(byte flag, ref JointPos jPos);
7.4. 获取当前关节位置(弧度)
1/**
2* @brief 获取当前关节位置(弧度)
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] jPos 六个关节位置,单位rad
5* @return 错误码
6*/
7int GetActualJointPosRadian(byte flag, ref JointPos jPos);
7.5. 获取关节反馈速度
1/**
2* @brief 获取关节反馈速度-deg/s
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] speed 六个关节速度
5* @return 错误码
6*/
7int GetActualJointSpeedsDegree(byte flag, ref double[] speed);
7.6. 获取关节反馈加速度
1/**
2* @brief 获取关节反馈加速度-deg/s^2
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] acc 六个关节加速度
5* @return 错误码
6*/
7int GetActualJointAccDegree(byte flag, ref double[] acc);
7.7. 获取TCP指令速度-合速度
1/**
2* @brief 获取TCP指令速度-合速度
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] tcp_speed 线性速度
5* @param [out] ori_speed 姿态速度
6* @return 错误码
7*/
8int GetTargetTCPCompositeSpeed(byte flag, ref double tcp_speed, ref double ori_speed);
7.8. 获取TCP反馈速度-合速度
1/**
2* @brief 获取TCP反馈速度-合速度
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] tcp_speed 线性速度
5* @param [out] ori_speed 姿态速度
6* @return 错误码
7*/
8int GetActualTCPCompositeSpeed(byte flag, ref double tcp_speed, ref double ori_speed);
7.9. 获取TCP指令速度-分速度
1/**
2* @brief 获取TCP指令速度-分速度
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] speed [x,y,z,rx,ry,rz]速度
5* @return 错误码
6*/
7int GetTargetTCPSpeed(byte flag, ref double[] speed);
7.10. 获取TCP反馈速度-分速度
1/**
2* @brief 获取TCP反馈速度-分速度
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] speed [x,y,z,rx,ry,rz]速度
5* @return 错误码
6*/
7int GetActualTCPSpeed(byte flag, ref double[] speed);
7.11. 获取当前工具位姿
1/**
2* @brief 获取当前工具位姿
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] desc_pos 工具位姿
5* @return 错误码
6*/
7int GetActualTCPPose(byte flag, ref DescPose desc_pos);
7.12. 获取当前工具坐标系编号
1/**
2* @brief 获取当前工具坐标系编号
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] id 工具坐标系编号
5* @return 错误码
6*/
7int GetActualTCPNum(byte flag, ref int id);
7.13. 获取当前工件坐标系编号
1/**
2* @brief 获取当前工件坐标系编号
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] id 工件坐标系编号
5* @return 错误码
6*/
7int GetActualWObjNum(byte flag, ref int id);
7.14. 获取当前末端法兰位姿
1/**
2* @brief 获取当前末端法兰位姿
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] desc_pos 法兰位姿
5* @return 错误码
6*/
7int GetActualToolFlangePose(byte flag, ref DescPose desc_pos);
7.15. 逆运动学求解
1/**
2* @brief 逆运动学求解
3* @param [in] type 0-绝对位姿(基坐标系),1-增量位姿(基坐标系),2-增量位姿(工具坐标系)
4* @param [in] desc_pos 笛卡尔位姿
5* @param [in] config 关节空间配置,[-1]-参考当前关节位置解算,[0~7]-依据特定关节空间配置求解
6* @param [out] joint_pos 关节位置
7* @return 错误码
8*/
9int GetInverseKin(int type, DescPose desc_pos, int config, ref JointPos joint_pos);
7.16. 逆运动学求解
1/**
2* @brief 逆运动学求解,参考指定关节位置求解
3* @param [in] type 0-绝对位姿(基坐标系),1-增量位姿(基坐标系),2-增量位姿(工具坐标系)
4* @param [in] desc_pos 笛卡尔位姿
5* @param [in] joint_pos_ref 参考关节位置
6* @param [out] joint_pos 关节位置
7* @return 错误码
8*/
9int GetInverseKin(int type, DescPose desc_pos, int config, ref JointPos joint_pos);
7.17. 逆运动学求解(参考指定关节位置)
1/**
2* @brief 逆运动学求解,参考指定关节位置判断是否有解
3* @param [in] type 0-绝对位姿(基坐标系),1-增量位姿(基坐标系),2-增量位姿(工具坐标系)
4* @param [in] desc_pos 笛卡尔位姿
5* @param [in] joint_pos_ref 参考关节位置
6* @param [out] result 0-无解,1-有解
7* @return 错误码
8*/
9int GetInverseKinRef(int posMode, DescPose desc_pos, JointPos joint_pos_ref, ref JointPos joint_pos);
7.18. 判断逆运动学是否有解
1/**
2* @brief 逆运动学求解,判断指定参考关节位置是否有解
3* @param [in] posMode 0绝对位姿,1相对位姿-基坐标系,2相对位姿-工具坐标系
4* @param [in] desc_pos 笛卡尔位姿
5* @param [in] joint_pos_ref 参考关节位置
6* @param [out] hasResult 0-无解,1-有解
7* @return 错误码
8*/
9int GetInverseKinHasSolution(int posMode, DescPose desc_pos, JointPos joint_pos_ref, ref bool hasResult);
7.19. 正运动学求解
1/**
2* @brief 正运动学求解
3* @param [in] joint_pos 关节位置
4* @param [out] desc_pos 笛卡尔位姿
5* @return 错误码
6*/
7int GetForwardKin(JointPos joint_pos, ref DescPose desc_pos);
7.20. 获取当前关节转矩
1/**
2* @brief 获取当前关节转矩
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] torques 关节转矩
5* @return 错误码
6*/
7int GetJointTorques(byte flag, float[] torques);
7.21. 获取当前负载的重量
1/**
2* @brief 获取当前负载的重量
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] weight 负载重量,单位kg
5* @return 错误码
6*/
7int GetTargetPayload(byte flag, ref double weight);
7.22. 获取当前负载的质心
1/**
2* @brief 获取当前负载的质心
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] cog 负载质心,单位mm
5* @return 错误码
6*/
7int GetTargetPayloadCog(byte flag, ref DescTran cog);
7.23. 获取当前工具坐标系
1/**
2* @brief 获取当前工具坐标系
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] desc_pos 工具坐标系位姿
5* @return 错误码
6*/
7int GetTCPOffset(byte flag, ref DescPose desc_pos);
7.24. 获取当前工件坐标系
1/**
2* @brief 获取当前工件坐标系
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] desc_pos 工件坐标系位姿
5* @return 错误码
6*/
7int GetWObjOffset(byte flag, ref DescPose desc_pos);
7.25. 获取关节软限位角度
1/**
2* @brief 获取关节软限位角度
3* @param [in] flag 0-阻塞,1-非阻塞
4* @param [out] negative 负限位角度,单位deg
5* @param [out] positive 正限位角度,单位deg
6* @return 错误码
7*/
8int GetJointSoftLimitDeg(byte flag, ref double[] negative, ref double[] positive);
7.26. 获取系统时间
1/**
2* @brief 获取系统时间
3* @param [out] t_ms 单位ms
4* @return 错误码
5*/
6int GetSystemClock(ref double t_ms);
7.27. 获取机器人当前关节配置
1/**
2* @brief 获取机器人当前关节位置
3* @param [out] config 关节空间配置,范围[0~7]
4* @return 错误码
5*/
6int GetRobotCurJointsConfig(ref int config);
7.28. 获取当前速度
1/**
2* @brief 获取机器人当前速度
3* @param [out] vel 速度,单位mm/s
4* @return 错误码
5*/
6int GetDefaultTransVel(ref double vel);
7.29. 查询机器人运动是否完成
1/**
2* @brief 查询机器人运动是否完成
3* @param [out] state 0-未完成,1-完成
4* @return 错误码
5*/
6int GetRobotMotionDone(ref byte state);
7.30. 代码示例
1private void btnRobotState_Click(object sender, EventArgs e)
2{
3 Robot robot = new Robot();
4 robot.RPC("192.168.58.2");
5
6 double yangle = 0, zangle = 0;
7 byte flag = 0;
8 JointPos j_deg = new JointPos(0, 0, 0, 0, 0, 0);
9 JointPos j_rad = new JointPos(0, 0, 0, 0, 0, 0);
10 DescPose tcp, flange, tcp_offset, wobj_offset;
11 DescTran cog;
12 tcp = new DescPose();
13 flange = new DescPose();
14 tcp_offset = new DescPose();
15 wobj_offset = new DescPose();
16 cog = new DescTran();
17
18 int id = 0;
19 float[] torques = new float[6] { 0, 0, 0, 0, 0, 0};
20 double weight = 0.0;
21 double[] neg_deg = new double[6] { 0, 0, 0, 0, 0, 0 };
22 double[] pos_deg = new double[6] { 0, 0, 0, 0, 0, 0 };
23 double t_ms = 0;
24 int config = 0;
25 double vel = 0;
26
27 robot.GetRobotInstallAngle(ref yangle, ref zangle);
28 Console.WriteLine($"yangle:{yangle},zangle:{zangle}");
29
30 robot.GetActualJointPosDegree(flag, ref j_deg);
31 Console.WriteLine($"joint pos deg:{j_deg.jPos[0]}, {j_deg.jPos[1]}, {j_deg.jPos[2]}, {j_deg.jPos[3]},{j_deg.jPos[4]},{j_deg.jPos[5]}");
32 robot.GetActualJointPosRadian(flag, ref j_rad);
33 Console.WriteLine($"joint pos rad:{j_rad.jPos[0]}, {j_rad.jPos[1]}, {j_rad.jPos[2]},{j_rad.jPos[3]},{j_rad.jPos[4]},{j_rad.jPos[5]}");
34
35 robot.GetActualTCPPose(flag, ref tcp);
36 Console.WriteLine($"tcp pose:{tcp.tran.x}, {tcp.tran.y}, {tcp.tran.z}, {tcp.rpy.rx}, {tcp.rpy.ry},{tcp.rpy.rz}");
37
38 robot.GetActualToolFlangePose(flag, ref flange);
39 Console.WriteLine($"flange pose:{flange.tran.x}, {flange.tran.y}, {flange.tran.z}, {flange.rpy.rx},{flange.rpy.ry},{flange.rpy.rz}");
40
41 robot.GetActualTCPNum(flag, ref id);
42 Console.WriteLine($"tcp num : {id}");
43
44 robot.GetActualWObjNum(flag, ref id);
45 Console.WriteLine($"wobj num : {id}");
46
47 robot.GetJointTorques(flag, torques);
48 Console.WriteLine($"torques:{torques[0]},{torques[1]},{torques[2]},{torques[3]},{torques[4]},{torques[5]}");
49
50 robot.GetTargetPayload(flag, ref weight);
51 Console.WriteLine($"payload weight : {weight}");
52
53 robot.GetTargetPayloadCog(flag, ref cog);
54 Console.WriteLine($"payload cog:{cog.x},{cog.y},{cog.z}");
55
56 robot.GetTCPOffset(flag, ref tcp_offset);
57 Console.WriteLine($"tcp offset:{tcp_offset.tran.x}, {tcp_offset.tran.y}, {tcp_offset.tran.z},{tcp_offset.rpy.rx},{tcp_offset.rpy.ry},{tcp_offset.rpy.rz}");
58
59 robot.GetWObjOffset(flag, ref wobj_offset);
60 Console.WriteLine($"wobj offset:{wobj_offset.tran.x}, {wobj_offset.tran.y},{wobj_offset.tran.z},{wobj_offset.rpy.rx},{wobj_offset.rpy.ry},{wobj_offset.rpy.rz}");
61
62 robot.GetJointSoftLimitDeg(flag, ref neg_deg, ref pos_deg);
63 Console.WriteLine($"neg limit deg:{neg_deg[0]}, {neg_deg[1]}, {neg_deg[2]}, {neg_deg[3]},{neg_deg[4]},{neg_deg[5]}");
64 Console.WriteLine($"pos limit deg:{pos_deg[0]}, {pos_deg[1]}, {pos_deg[2]}, {pos_deg[3]},{pos_deg[4]},{pos_deg[5]}");
65
66 robot.GetSystemClock(ref t_ms);
67 Console.WriteLine($"system clock : {t_ms}");
68
69 robot.GetRobotCurJointsConfig(ref config);
70 Console.WriteLine($"joint config : {config}");
71
72 robot.GetDefaultTransVel(ref vel);
73 Console.WriteLine($"trans vel : {vel}");
74}
7.31. 查询机器人错误码
1/**
2* @brief 查询机器人错误码
3* @param [out] maincode 主错误码
4* @param [out] subcode 子错误码
5* @return 错误码
6*/
7int GetRobotErrorCode(ref int maincode, ref int subcode);
7.32. 查询机器人示教管理点数据
1/**
2* @brief 查询机器人示教管理点位数据
3* @param [in] name 点位名
4* @param [out] data 点位数据double[20]{x,y,z,rx,ry,rz,j1,j2,j3,j4,j5,j6,tool, wobj,speed,acc,e1,e2,e3,e4}
5* @return 错误码
6*/
7int GetRobotTeachingPoint(string name, ref double[] data);
7.33. 查询机器人运动队列缓存长度
1/**
2* @brief 查询机器人运动队列缓存长度
3* @param [out] len 缓存长度
4* @return 错误码
5*/
6int GetMotionQueueLength(ref int len);
7.34. 代码示例
1private void btnRobotState2_Click(object sender, EventArgs e)
2{
3 Robot robot = new Robot();
4 robot.RPC("192.168.58.2");
5
6 byte robotMotionState = 255;
7 robot.GetRobotMotionDone(ref robotMotionState);
8 Console.WriteLine($"robotMotionState {robotMotionState}");
9
10 int mainErrCode = -1;
11 int subErrCode = -1;
12 robot.GetRobotErrorCode(ref mainErrCode, ref subErrCode);
13 Console.WriteLine($"mainErrCode {mainErrCode} subErrCode {subErrCode} ");
14
15 string name = "a1";
16 double[] point = new double[6] {0, 0, 0, 0, 0, 0};
17 robot.GetRobotTeachingPoint(name, ref point);
18 Console.WriteLine($"GetRobotTeachingPoint:{point[0]},{point[1]},{point[2]},{point[3]},{point[4]},{point[5]}");
19
20 int length = -1;
21 robot.GetMotionQueueLength(ref length);
22 Console.WriteLine($"GetMotionQueueLength {length}");
23}
7.35. 获取机器人实时状态结构体
在 C#SDK-v1.0.6 版本加入.
1/**
2* @brief 获取机器人实时状态结构体
3* @param [out] pkg 机器人实时状态结构体
4* @return 错误码
5*/
6int GetRobotRealTimeState(ref ROBOT_STATE_PKG pkg);
7.36. 代码示例
在 C#SDK-v1.0.6 版本加入.
1private void btnGetState_Click(object sender, EventArgs e)
2{
3 Robot robot = new Robot();
4 robot.RPC("192.168.58.2");
5
6 ROBOT_STATE_PKG pKG = new ROBOT_STATE_PKG();
7 robot.GetRobotRealTimeState(ref pKG);
8 Console.WriteLine($"the state is {pKG.main_code}");
9}