8. 机器人轨迹复现
8.1. 设置TPD轨迹记录参数
1/**
2* @brief 设置TPD轨迹记录参数
3* @param [in] type 记录数据类型,1-关节位置
4* @param [in] name 轨迹文件名
5* @param [in] period_ms 数据采样周期,固定值2ms或4ms或8ms
6* @param [in] di_choose DI选择,bit0~bit7对应控制箱DI0~DI7,bit8~bit9对应末端DI0~DI1,0-不选择,1-选择
7* @param [in] do_choose DO选择,bit0~bit7对应控制箱DO0~DO7,bit8~bit9对应末端DO0~DO1,0-不选择,1-选择
8* @return 错误码
9*/
10errno_t SetTPDParam(int type, char name[30], int period_ms, uint16_t di_choose, uint16_t do_choose);
8.2. 开始TPD轨迹记录
1/**
2* @brief 开始TPD轨迹记录
3* @param [in] type 记录数据类型,1-关节位置
4* @param [in] name 轨迹文件名
5* @param [in] period_ms 数据采样周期,固定值2ms或4ms或8ms
6* @param [in] di_choose DI选择,bit0~bit7对应控制箱DI0~DI7,bit8~bit9对应末端DI0~DI1,0-不选择,1-选择
7* @param [in] do_choose DO选择,bit0~bit7对应控制箱DO0~DO7,bit8~bit9对应末端DO0~DO1,0-不选择,1-选择
8* @return 错误码
9*/
10errno_t SetTPDStart(int type, char name[30], int period_ms, uint16_t di_choose, uint16_t do_choose);
8.3. 停止TPD轨迹记录
1/**
2* @brief 停止TPD轨迹记录
3* @return 错误码
4*/
5errno_t SetWebTPDStop();
8.4. 删除TPD轨迹记录
1/**
2* @brief 删除TPD轨迹记录
3* @param [in] name 轨迹文件名
4* @return 错误码
5*/
6errno_t SetTPDDelete(char name[30]);
8.5. 代码示例
1#include <cstdlib>
2#include <iostream>
3#include <stdio.h>
4#include <cstring>
5#include <unistd.h>
6#include "FRRobot.h"
7#include "RobotTypes.h"
8
9using namespace std;
10
11int main(void)
12{
13 FRRobot robot; //实例化机器人对象
14 robot.RPC("192.168.58.2"); //与机器人控制器建立通信连接
15
16 int type = 1;
17 char name[30] = "tpd2023";
18 int period_ms = 4;
19 uint16_t di_choose = 0;
20 uint16_t do_choose = 0;
21
22 robot.SetTPDParam(type, name, period_ms, di_choose, do_choose);
23
24 robot.Mode(1);
25 sleep(1);
26 robot.DragTeachSwitch(1);
27 robot.SetTPDStart(type, name, period_ms, di_choose, do_choose);
28 sleep(30);
29 robot.SetWebTPDStop();
30 robot.DragTeachSwitch(0);
31
32 //robot.SetTPDDelete(name);
33
34 return 0;
35}
8.6. TPD轨迹预加载
1/**
2* @brief TPD轨迹预加载
3* @param [in] name 轨迹文件名
4* @return 错误码
5*/
6errno_t LoadTPD(char name[30]);
8.7. TPD轨迹复现
1/**
2* @brief TPD轨迹复现
3* @param [in] name 轨迹文件名
4* @param [in] blend 0-不平滑,1-平滑
5* @param [in] ovl 速度缩放百分比,范围[0~100]
6* @return 错误码
7*/
8errno_t MoveTPD(char name[30], uint8_t blend, float ovl);
8.8. 获取TPD起始位姿
1/**
2 * @brief 获取TPD起始位姿
3 * @param [in] name TPD文件名,不需要文件后缀
4 * @return 错误码
5 */
6errno_t GetTPDStartPose(char name[30], DescPose *desc_pose);
8.9. 代码示例
在 C++SDK-v2.1.2.0 版本发生变更.
1#include "libfairino/robot.h"
2
3//如果使用Windows,包含下面的头文件
4#include <string.h>
5#include <windows.h>
6//如果使用linux,包含下面的头文件
7/*
8#include <cstdlib>
9#include <iostream>
10#include <stdio.h>
11#include <cstring>
12#include <unistd.h>
13*/
14#include <chrono>
15#include <thread>
16#include <string>
17using namespace std;
18
19int main(void)
20{
21 FRRobot robot;
22 robot.RPC("192.168.58.2");
23
24 char name[30] = "tpd2023";
25 int tool = 0;
26 int user = 0;
27 float vel = 50.0;
28 float acc = 100.0;
29 float ovl = 100.0;
30 float blendT = -1.0;
31 int config = -1;
32 uint8_t blend = 0;
33 int retval = 0;
34
35 DescPose desc_pose;
36 memset(&desc_pose, 0, sizeof(DescPose));
37 DescPose start_pose;
38 memset(&start_pose, 0, sizeof(DescPose));
39
40 desc_pose.tran.x = 358.820099;
41 desc_pose.tran.y = -419.684113;
42 desc_pose.tran.z = 525.055115;
43 desc_pose.rpy.rx = -85.994499;
44 desc_pose.rpy.ry = -28.797600;
45 desc_pose.rpy.rz = -133.960007;
46
47 retval = robot.LoadTPD(name);
48 printf("LoadTPD retval is: %d\n", retval);
49 //robot.MoveCart(&desc_pose, tool, user, vel, acc, ovl, blendT, config);
50
51 robot.GetTPDStartPose(name, &start_pose);
52 printf("start pose, xyz is: %f %f %f. rpy is: %f %f %f \n", start_pose.tran.x, start_pose.tran.y, start_pose.tran.z, start_pose.rpy.rx, start_pose.rpy.ry, start_pose.rpy.rz);
53 std::this_thread::sleep_for(std::chrono::milliseconds(5000));
54
55 retval = robot.MoveTPD(name, blend, ovl);
56 printf("MoveTPD retval is: %d\n", retval);
57 std::this_thread::sleep_for(std::chrono::milliseconds(5000));
58 return 0;
59}
8.10. 轨迹预处理
1/**
2 * @brief 轨迹预处理
3 * @param [in] name 轨迹文件名
4 * @param [in] ovl 速度缩放百分比,范围[0~100]
5 * @param [in] opt 1-控制点,默认为1
6 * @return 错误码
7 */
8errno_t LoadTrajectoryJ(char name[30], float ovl, int opt);
8.11. 轨迹复现
1/**
2 * @brief 轨迹复现
3 * @return 错误码
4 */
5errno_t MoveTrajectoryJ();
8.12. 获取轨迹起始位姿
1/**
2 * @brief 获取轨迹起始位姿
3 * @param [in] name 轨迹文件名
4 * @return 错误码
5 */
6errno_t GetTrajectoryStartPose(char name[30], DescPose *desc_pose);
8.13. 获取轨迹点编号
1/**
2 * @brief 获取轨迹点编号
3 * @return 错误码
4 */
5errno_t GetTrajectoryPointNum(int *pnum);
8.14. 设置轨迹运行中的速度
1/**
2 * @brief 设置轨迹运行中的速度
3 * @param [in] ovl 速度百分比
4 * @return 错误码
5 */
6errno_t SetTrajectoryJSpeed(float ovl);
8.15. 设置轨迹运行中的力和扭矩
1/**
2 * @brief 设置轨迹运行中的力和扭矩
3 * @param [in] ft 三个方向的力和扭矩,单位N和Nm
4 * @return 错误码
5 */
6errno_t SetTrajectoryJForceTorque(ForceTorque *ft);
8.16. 设置轨迹运行中的沿x方向的力
1/**
2 * @brief 设置轨迹运行中的沿x方向的力
3 * @param [in] fx 沿x方向的力,单位N
4 * @return 错误码
5 */
6errno_t SetTrajectoryJForceFx(double fx);
8.17. 设置轨迹运行中的沿y方向的力
1/**
2 * @brief 设置轨迹运行中的沿y方向的力
3 * @param [in] fy 沿y方向的力,单位N
4 * @return 错误码
5 */
6errno_t SetTrajectoryJForceFy(double fy);
8.18. 设置轨迹运行中的沿z方向的力
1/**
2 * @brief 设置轨迹运行中的沿z方向的力
3 * @param [in] fz 沿x方向的力,单位N
4 * @return 错误码
5 */
6errno_t SetTrajectoryJForceFz(double fz);
8.19. 设置轨迹运行中的绕x轴的扭矩
1/**
2 * @brief 设置轨迹运行中的绕x轴的扭矩
3 * @param [in] tx 绕x轴的扭矩,单位Nm
4 * @return 错误码
5 */
6errno_t SetTrajectoryJTorqueTx(double tx);
8.20. 设置轨迹运行中的绕y轴的扭矩
1/**
2 * @brief 设置轨迹运行中的绕y轴的扭矩
3 * @param [in] ty 绕y轴的扭矩,单位Nm
4 * @return 错误码
5 */
6errno_t SetTrajectoryJTorqueTy(double ty);
8.21. 设置轨迹运行中的绕z轴的扭矩
1/**
2 * @brief 设置轨迹运行中的绕z轴的扭矩
3 * @param [in] tz 绕z轴的扭矩,单位Nm
4 * @return 错误码
5 */
6errno_t SetTrajectoryJTorqueTz(double tz);
8.22. 代码示例
在 C++SDK-v2.1.2.0 版本加入.
1#include "libfairino/robot.h"
2
3//如果使用Windows,包含下面的头文件
4#include <string.h>
5#include <windows.h>
6//如果使用linux,包含下面的头文件
7/*
8#include <cstdlib>
9#include <iostream>
10#include <stdio.h>
11#include <cstring>
12#include <unistd.h>
13*/
14#include <chrono>
15#include <thread>
16#include <string>
17using namespace std;
18
19int main(void)
20{
21 FRRobot robot;
22 robot.RPC("192.168.58.2");
23
24 int retval = 0;
25 char traj_file_name[30] = "/fruser/traj/tra我.txt";
26 retval = robot.LoadTrajectoryJ(traj_file_name, 100, 1);
27 printf("LoadTrajectoryJ %s, retval is: %d\n",traj_file_name, retval);
28
29 DescPose traj_start_pose;
30 memset(&traj_start_pose, 0, sizeof(DescPose));
31 retval = robot.GetTrajectoryStartPose(traj_file_name, &traj_start_pose);
32 printf("GetTrajectoryStartPose is: %d\n", retval);
33 printf("desc_pos:%f,%f,%f,%f,%f,%f\n",traj_start_pose.tran.x,traj_start_pose.tran.y,traj_start_pose.tran.z, traj_start_pose.rpy.rx,traj_start_pose.rpy.ry,traj_start_pose.rpy.rz);
34
35 std::this_thread::sleep_for(std::chrono::seconds(5));
36
37 robot.SetSpeed(50);
38 robot.MoveCart(&traj_start_pose, 0, 0, 100, 100, 100, -1, -1);
39
40 int traj_num = 0;
41 retval = robot.GetTrajectoryPointNum(&traj_num);
42 printf("GetTrajectoryStartPose retval is: %d, traj num is: %d\n", retval, traj_num);
43
44 retval = robot.SetTrajectoryJSpeed(50.0);
45 printf("SetTrajectoryJSpeed is: %d\n", retval);
46
47 ForceTorque traj_force;
48 memset(&traj_force, 0, sizeof(ForceTorque));
49 traj_force.fx = 10;
50 retval = robot.SetTrajectoryJForceTorque(&traj_force);
51 printf("SetTrajectoryJForceTorque retval is: %d\n", retval);
52
53 retval = robot.SetTrajectoryJForceFx(10.0);
54 printf("SetTrajectoryJForceFx retval is: %d\n", retval);
55
56 retval = robot.SetTrajectoryJForceFy(0.0);
57 printf("SetTrajectoryJForceFy retval is: %d\n", retval);
58
59 retval = robot.SetTrajectoryJForceFz(0.0);
60 printf("SetTrajectoryJForceFz retval is: %d\n", retval);
61
62 retval = robot.SetTrajectoryJTorqueTx(10.0);
63 printf("SetTrajectoryJTorqueTx retval is: %d\n", retval);
64
65 retval = robot.SetTrajectoryJTorqueTy(10.0);
66 printf("SetTrajectoryJTorqueTy retval is: %d\n", retval);
67
68 retval = robot.SetTrajectoryJTorqueTz(10.0);
69 printf("SetTrajectoryJTorqueTz retval is: %d\n", retval);
70
71 retval = robot.MoveTrajectoryJ();
72 printf("MoveTrajectoryJ retval is: %d\n", retval);
73}