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}