ARCS SDK API  0.25.0
载入中...
搜索中...
未找到
math.h
浏览该文件的文档.
1/** @file math.h
2 * @brief 数学方法接口,如欧拉角与四元数转换、位姿的加减运算
3 */
4#ifndef AUBO_SDK_MATH_INTERFACE_H
5#define AUBO_SDK_MATH_INTERFACE_H
6
7#include <vector>
8#include <memory>
9
10#include <aubo/type_def.h>
11#include <aubo/global_config.h>
12
13namespace arcs {
14namespace common_interface {
15
16class ARCS_ABI_EXPORT Math
17{
18public:
20 virtual ~Math();
21
22 /**
23 * Pose addition
24 *
25 * Both arguments contain three position parameters (x, y, z) jointly called
26 * P, and three rotation parameters (R_x, R_y, R_z) jointly called R. This
27 * function calculates the result x_3 as the addition of the given poses as
28 * follows:
29 *
30 * p_3.P = p_1.P + p_2.P
31 * p_3.R = p_1.R * p_2.R
32 *
33 * 位姿相加。
34 * 两个参数都包含三个位置参数(x、y、z),统称为P,
35 * 以及三个旋转参数(R_x、R_y、R_z),统称为R。
36 * 此函数根据以下方式计算结果 p_3,即给定位姿的相加:
37 * p_3.P = p_1.P + p_2.P,
38 * p_3.R = p_1.R * p_2.R
39 *
40 * @param p1 工具位姿1(pose)
41 * @param p2 工具位姿2(pose)
42 * @return Sum of position parts and product of rotation parts (pose)
43 * 位置部分之和和旋转部分之积(pose)
44 *
45 * @par Python函数原型
46 * poseAdd(self: pyaubo_sdk.Math, arg0: List[float], arg1: List[float]) ->
47 * List[float]
48 *
49 * @par Lua函数原型
50 * poseAdd(p1: table, p2: table) -> table
51 *
52 * @par JSON-RPC请求示例
53 * {"jsonrpc":"2.0","method":"Math.poseAdd","params":[[0.2, 0.5, 0.1, 1.57,
54 * 0, 0],[0.2, 0.5, 0.6, 1.57, 0, 0]],"id":1}
55 *
56 * @par JSON-RPC响应示例
57 * {"id":1,"jsonrpc":"2.0","result":[0.4,1.0,0.7,3.14,-0.0,0.0]}
58 *
59 */
60 std::vector<double> poseAdd(const std::vector<double> &p1,
61 const std::vector<double> &p2);
62
63 /**
64 * Pose subtraction
65 * 位姿相减
66 *
67 * 两个参数都包含三个位置参数(x、y、z),统称为P,
68 * 以及三个旋转参数(R_x、R_y、R_z),统称为R。
69 * 此函数根据以下方式计算结果 p_3,即给定位姿的相加:
70 * p_3.P = p_1.P - p_2.P,
71 * p_3.R = p_1.R * p_2.R.inverse
72 *
73 * @param p1 工具位姿1
74 * @param p2 工具位姿2
75 * @return 位姿相减计算结果
76 *
77 * @par Python函数原型
78 * poseSub(self: pyaubo_sdk.Math, arg0: List[float], arg1: List[float]) ->
79 * List[float]
80 *
81 * @par Lua函数原型
82 * poseSub(p1: table, p2: table) -> table
83 *
84 * @par JSON-RPC请求示例
85 * {"jsonrpc":"2.0","method":"Math.poseSub","params":[[0.2, 0.5, 0.1, 1.57,
86 * 0, 0],[0.2, 0.5, 0.6, 1.57, 0, 0]],"id":1}
87 *
88 * @par JSON-RPC响应示例
89 * {"id":1,"jsonrpc":"2.0","result":[0.0,0.0,-0.5,0.0,-0.0,0.0]}
90 *
91 */
92 std::vector<double> poseSub(const std::vector<double> &p1,
93 const std::vector<double> &p2);
94
95 /**
96 * 计算线性插值
97 *
98 * @param p1 起点的TCP位姿
99 * @param p2 终点的TCP位姿
100 * @param alpha 系数,
101 * 当0<alpha<1,返回p1和p2两点直线的之间靠近p1端且占总路径比例为alpha的点;
102 * 例如当alpha=0.3,返回的是靠近p1那端,总路径的百分之30的点;
103 * 当alpha>1,返回p2;
104 * 当alpha<0,返回p1;
105 * @return 插值计算结果
106 *
107 * @par Python函数原型
108 * interpolatePose(self: pyaubo_sdk.Math, arg0: List[float], arg1:
109 * List[float], arg2: float) -> List[float]
110 *
111 * @par Lua函数原型
112 * interpolatePose(p1: table, p2: table, alpha: number) -> table
113 *
114 * @par JSON-RPC请求示例
115 * {"jsonrpc":"2.0","method":"Math.interpolatePose","params":[[0.2, 0.2,
116 * 0.4, 0, 0, 0],[0.2, 0.2, 0.6, 0, 0, 0],0.5],"id":1}
117 *
118 * @par JSON-RPC响应示例
119 * {"id":1,"jsonrpc":"2.0","result":[0.2,0.2,0.5,0.0,-0.0,0.0]}
120 *
121 */
122 std::vector<double> interpolatePose(const std::vector<double> &p1,
123 const std::vector<double> &p2,
124 double alpha);
125 /**
126 * Pose transformation
127 *
128 * The first argument, p_from, is used to transform the second argument,
129 * p_from_to, and the result is then returned. This means that the result is
130 * the resulting pose, when starting at the coordinate system of p_from, and
131 * then in that coordinate system moving p_from_to.
132 *
133 * This function can be seen in two different views. Either the function
134 * transforms, that is translates and rotates, p_from_to by the parameters
135 * of p_from. Or the function is used to get the resulting pose, when first
136 * making a move of p_from and then from there, a move of p_from_to. If the
137 * poses were regarded as transformation matrices, it would look like:
138 *
139 * T_world->to = T_world->from * T_from->to,
140 * T_x->to = T_x->from * T_from->to
141 *
142 * 位姿变换
143 *
144 * 第一个参数 p_from 用于转换第二个参数 p_from_to,并返回结果。
145 * 这意味着结果是从 p_from 的坐标系开始,
146 * 然后在该坐标系中移动 p_from_to后的位姿。
147 *
148 * 这个函数可以从两个不同的角度来看。
149 * 一种是函数将 p_from_to 根据 p_from 的参数进行转换,即平移和旋转。
150 * 另一种是函数被用于获取结果姿态,先对 p_from 进行移动,然后再对 p_from_to
151 * 进行移动。 如果将姿态视为转换矩阵,它看起来像是:
152 *
153 * T_world->to = T_world->from * T_from->to,
154 * T_x->to = T_x->from * T_from->to
155 *
156 * 这两个方程描述了姿态变换的基本原理,根据给定的起始姿态和相对于起始姿态的姿态变化,可以计算出目标姿态。
157 *
158 * 举个例子,已知B相对于A的位姿、C相对于B的位姿,求C相对于A的位姿。
159 * 第一个参数是B相对于A的位姿,第二个参数是C相对于B的位姿,
160 * 返回值是C相对于A的位姿。
161 *
162 * @param pose_from 起始位姿(空间向量)
163 * @param pose_from_to 相对于起始位姿的姿态变化(空间向量)
164 * @return 结果位姿 (空间向量)
165 *
166 * @par Python函数原型
167 * poseTrans(self: pyaubo_sdk.Math, arg0: List[float], arg1: List[float]) ->
168 * List[float]
169 *
170 * @par Lua函数原型
171 * poseTrans(pose_from: table, pose_from_to: table) -> table
172 *
173 * @par JSON-RPC请求示例
174 * {"jsonrpc":"2.0","method":"Math.poseTrans","params":[[0.2, 0.5,
175 * 0.1, 1.57, 0, 0],[0.2, 0.5, 0.6, 1.57, 0, 0]],"id":1}
176 *
177 * @par JSON-RPC响应示例
178 * {"id":1,"jsonrpc":"2.0","result":[0.4,-0.09960164640373415,0.6004776374923573,3.14,-0.0,0.0]}
179 *
180 */
181 std::vector<double> poseTrans(const std::vector<double> &pose_from,
182 const std::vector<double> &pose_from_to);
183
184 /**
185 * 姿态逆变换
186 *
187 * 已知C相对于A的位姿、C相对于B的位姿,求B相对于A的位姿。
188 * 第一个参数是C相对于A的位姿,第二个参数是C相对于B的位姿,
189 * 返回值是B相对于A的位姿。
190 *
191 * @param pose_from 起始位姿
192 * @param pose_to_from 相对于结果位姿的姿态变化
193 * @return 结果位姿
194 *
195 * @par Python函数原型
196 * poseTransInv(self: pyaubo_sdk.Math, arg0: List[float], arg1: List[float])
197 * -> List[float]
198 *
199 * @par Lua函数原型
200 * poseTransInv(pose_from: table, pose_to_from: table) -> table
201 *
202 * @par JSON-RPC请求示例
203 * {"jsonrpc":"2.0","method":"Math.poseTransInv","params":[[0.4, -0.0996016,
204 * 0.600478, 3.14, 0, 0],[0.2, 0.5, 0.6, 1.57, 0, 0]],"id":1}
205 *
206 * @par JSON-RPC响应示例
207 * {"id":1,"jsonrpc":"2.0","result":[0.2,0.5000000464037341,0.10000036250764266,1.57,-0.0,0.0]}
208 *
209 */
210 std::vector<double> poseTransInv(const std::vector<double> &pose_from,
211 const std::vector<double> &pose_to_from);
212
213 /**
214 * Get the inverse of a pose
215 *
216 * 获取位姿的逆
217 *
218 * @param pose tool pose (spatial vector)
219 * 工具位姿(空间向量)
220 * @return inverse tool pose transformation (spatial vector)
221 * 工具位姿的逆转换(空间向量)
222 *
223 * @par Python函数原型
224 * poseInverse(self: pyaubo_sdk.Math, arg0: List[float]) -> List[float]
225 *
226 * @par Lua函数原型
227 * poseInverse(pose: table) -> table
228 *
229 * @par JSON-RPC请求示例
230 * {"jsonrpc":"2.0","method":"Math.poseInverse","params":[[0.2, 0.5,
231 * 0.1, 1.57, 0, 3.14]],"id":1}
232 *
233 * @par JSON-RPC响应示例
234 * {"id":1,"jsonrpc":"2.0","result":[0.19920341988726448,-0.09960155178838484,-0.5003973704832628,
235 * 1.5699999989900404,-0.0015926530848129354,-3.1415913853161266]}
236 *
237 */
238 std::vector<double> poseInverse(const std::vector<double> &pose);
239
240 /**
241 * 计算两个位姿的位置距离
242 *
243 * @param p1 位姿1
244 * @param p2 位姿2
245 * @return 两个位姿的位置距离
246 *
247 * @par JSON-RPC请求示例
248 * {"jsonrpc":"2.0","method":"Math.poseDistance","params":[[0.1, 0.3, 0.1,
249 * 0.3142, 0.0, 1.571],[0.2, 0.5, 0.6, 0, -0.172, 0.0]],"id":1}
250 *
251 * @par JSON-RPC响应示例
252 * {"id":1,"jsonrpc":"2.0","result":0.5477225575051661}
253 *
254 */
255 double poseDistance(const std::vector<double> &p1,
256 const std::vector<double> &p2);
257
258 /**
259 * 计算两个位姿的轴角距离
260 *
261 * @param p1 位姿1
262 * @param p2 位姿2
263 * @return 轴角距离
264 */
265 double poseAngleDistance(const std::vector<double> &p1,
266
267 const std::vector<double> &p2);
268
269 /**
270 * 判断两个位姿是否相等
271 *
272 * @param p1 位姿1
273 * @param p2 位姿2
274 * @param eps 误差
275 * @return 相等返回true,反之返回false
276 *
277 * @par JSON-RPC请求示例
278 * {"jsonrpc":"2.0","method":"Math.poseDistance","params":[[0.1, 0.3, 0.1,
279 * 0.3142, 0.0, 1.571],[0.1, 0.3, 0.1, 0.3142, 0.0, 1.5711]],"id":1}
280 *
281 * @par JSON-RPC响应示例
282 * {"id":1,"jsonrpc":"2.0","result":0.0}
283 *
284 */
285 bool poseEqual(const std::vector<double> &p1, const std::vector<double> &p2,
286 double eps = 5e-5);
287
288 /**
289 *
290 * @param F_b_a_old
291 * @param V_in_a
292 * @param type
293 * @return
294 *
295 * @par Python函数原型
296 * transferRefFrame(self: pyaubo_sdk.Math, arg0: List[float], arg1:
297 * List[float[3]], arg2: int) -> List[float]
298 *
299 * @par Lua函数原型
300 * transferRefFrame(F_b_a_old: table, V_in_a: table, type: number) -> table
301 *
302 */
303 std::vector<double> transferRefFrame(const std::vector<double> &F_b_a_old,
304 const Vector3d &V_in_a, int type);
305
306 /**
307 * 姿态旋转
308 *
309 * @param pose
310 * @param rotv
311 * @return
312 *
313 * @par Python函数原型
314 * poseRotation(self: pyaubo_sdk.Math, arg0: List[float], arg1: List[float])
315 * -> List[float]
316 *
317 * @par Lua函数原型
318 * poseRotation(pose: table, rotv: table) -> table
319 *
320 */
321 std::vector<double> poseRotation(const std::vector<double> &pose,
322 const std::vector<double> &rotv);
323
324 /**
325 * 欧拉角转四元数
326 *
327 * @param rpy 欧拉角
328 * @return 四元数
329 *
330 * @par Python函数原型
331 * rpyToQuaternion(self: pyaubo_sdk.Math, arg0: List[float]) -> List[float]
332 *
333 * @par Lua函数原型
334 * rpyToQuaternion(rpy: table) -> table
335 *
336 * @par JSON-RPC请求示例
337 * {"jsonrpc":"2.0","method":"Math.rpyToQuaternion","params":[[0.611, 0.785,
338 * 0.960]],"id":1}
339 *
340 * @par JSON-RPC响应示例
341 * {"id":1,"jsonrpc":"2.0","result":[0.834721517970497,0.07804256900772265,0.4518931575790371,0.3048637712043723]}
342 *
343 */
344 std::vector<double> rpyToQuaternion(const std::vector<double> &rpy);
345
346 /**
347 * 四元数转欧拉角
348 *
349 * @param quat 四元数
350 * @return 欧拉角
351 *
352 * @par Python函数原型
353 * quaternionToRpy(self: pyaubo_sdk.Math, arg0: List[float]) -> List[float]
354 *
355 * @par Lua函数原型
356 * quaternionToRpy(quat: table) -> table
357 *
358 * @par JSON-RPC请求示例
359 * {"jsonrpc":"2.0","method":"Math.quaternionToRpy","params":[[0.834722,
360 * 0.0780426, 0.451893, 0.304864]],"id":1}
361 *
362 * @par JSON-RPC响应示例
363 * {"id":1,"jsonrpc":"2.0","result":[0.6110000520523781,0.7849996877683915,0.960000543982093]}
364 *
365 */
366 std::vector<double> quaternionToRpy(const std::vector<double> &quat);
367
368 /**
369 * 四点法标定TCP偏移
370 *
371 * 找一个尖点,将机械臂工具末端点绕着尖点示教四个位置,姿态差别要大。
372 * 设置完毕后即可计算出来结果。
373 *
374 * @param poses 四个点的位姿集合
375 * @return TCP标定结果和标定结果是否有效
376 *
377 * @par Python函数原型
378 * tcpOffsetIdentify(self: pyaubo_sdk.Math, arg0: List[List[float]]) ->
379 * Tuple[List[float], int]
380 *
381 * @par Lua函数原型
382 * tcpOffsetIdentify(poses: table) -> table
383 *
384 */
386 const std::vector<std::vector<double>> &poses);
387
388 /**
389 * 三点法标定坐标系
390 *
391 * @param poses 三个点的位姿集合
392 * @param type 类型:\n
393 * 0 - oxy 原点 x轴正方向 xy平面(y轴正方向)\n
394 * 1 - oxz 原点 x轴正方向 xz平面(z轴正方向)\n
395 * 2 - oyz 原点 y轴正方向 yz平面(z轴正方向)\n
396 * 3 - oyx 原点 y轴正方向 yx平面(x轴正方向)\n
397 * 4 - ozx 原点 z轴正方向 zx平面(x轴正方向)\n
398 * 5 - ozy 原点 z轴正方向 zy平面(y轴正方向)\n
399 * @return 坐标系标定结果和标定结果是否有效
400 *
401 * @par JSON-RPC请求示例
402 * {"jsonrpc":"2.0","method":"Math.calibrateCoordinate","params":[[[0.55462,0.06219,0.37175,-3.142,0.0,1.580],
403 * [0.63746,0.11805,0.37175,-3.142,0.0,1.580],[0.40441,0.28489,0.37174,-3.142,0.0,1.580]],0],"id":1}
404 *
405 * @par JSON-RPC响应示例
406 * {"id":1,"jsonrpc":"2.0","result":[[0.55462,0.06219,0.37175,-3.722688983883945e-05,-1.6940658945086007e-21,0.5932768162455785],0]}
407 *
408 */
410 const std::vector<std::vector<double>> &poses, int type);
411
412 /**
413 * 根据圆弧的三个点,计算出拟合成的圆的另一半圆弧的中间点位置
414 *
415 * @param p1 圆弧的起始点
416 * @param p2 圆弧的中间点
417 * @param p3 圆弧的结束点
418 * @param mode 当mode等于1的时候,表示需要对姿态进行圆弧规划;
419 * 当mode等于0的时候,表示不需要对姿态进行圆弧规划
420 * @return 拟合成的圆的另一半圆弧的中间点位置和计算结果是否有效
421 *
422 * @par JSON-RPC请求示例
423 * {"jsonrpc":"2.0","method":"Math.calculateCircleFourthPoint","params":[[0.5488696249770836,-0.1214996547187204,0.2631931199112321,-3.14159198038469,-3.673205103150083e-06,1.570796326792424],
424 * [0.5488696249770835,-0.1214996547187207,0.3599720701808493,-3.14159198038469,-3.6732051029273e-06,1.570796326792423],
425 * [0.5488696249770836,-0.0389996547187214,0.3599720701808496,-3.141591980384691,-3.673205102557476e-06,
426 * 1.570796326792422],1],"id":1}
427 *
428 * @par JSON-RPC响应示例
429 * {"id":1,"jsonrpc":"2.0","result":[[0.5488696249770837,-0.031860179583911546,0.27033259504604207,-3.1415919803846903,-3.67320510285378e-06,1.570796326792423],1]}
430 *
431 */
432 ResultWithErrno calculateCircleFourthPoint(const std::vector<double> &p1,
433 const std::vector<double> &p2,
434 const std::vector<double> &p3,
435 int mode);
436 /**
437 * @brief forceTrans:
438 * 变换力和力矩的参考坐标系 force_in_b = pose_a_in_b * force_in_a
439 * @param pose_a_in_b: a 坐标系在 b 坐标系的位姿
440 * @param force_in_a: 力和力矩在 a 坐标系的描述
441 * @return force_in_b,力和力矩在 b 坐标系的描述
442 */
443 std::vector<double> forceTrans(const std::vector<double> &pose_a_in_b,
444 const std::vector<double> &force_in_a);
445
446 /**
447 * @brief 通过距离计算工具坐标系下的位姿增量
448 * @param distances: N 个距离, N >=3
449 * @param position: 距离参考轨迹的保持高度
450 * @param radius: 传感器中心距离末端tcp的等效半径
451 * @param track_scale: 跟踪比例, 设置范围(0, 1], 1表示跟踪更快
452 * @return 基于工具坐标系的位姿增量
453 */
454 std::vector<double> getDeltaPoseBySensorDistance(
455 const std::vector<double> &distances, double position, double radius,
456 double track_scale);
457
458 /**
459 * @brief changeFTFrame: 变换力和力矩的参考坐标系
460 * @param pose_a_in_b: a 坐标系在 b 坐标系的位姿
461 * @param ft_in_a: 作用在 a 点的力和力矩在 a 坐标系的描述
462 * @return ft_in_b,作用在 b 点的力和力矩在 b 坐标系的描述
463 */
464 std::vector<double> deltaPoseTrans(const std::vector<double> &pose_a_in_b,
465 const std::vector<double> &ft_in_a);
466
467 /**
468 * @brief addDeltaPose: 计算以给定速度变换单位时间后的位姿
469 * @param pose_a_in_b: 当前时刻 a 相对于 b 的位姿
470 * @param v_in_b: 当前时刻 a 坐标系的速度在 b 的描述
471 * @return pose_in_b, 单位时间后的位姿在 b 的描述
472 */
473 std::vector<double> deltaPoseAdd(const std::vector<double> &pose_a_in_b,
474 const std::vector<double> &v_in_b);
475
476 /**
477 * @brief changePoseWithXYRef: 修改 pose_tar
478 * 的xy轴方向,尽量与 pose_ref 一致,
479 * @param pose_tar: 需要修改的目标位姿
480 * @param pose_ref: 参考位姿
481 * @return 修改后的位姿,采用pose_tar的 xyz 坐标和 z 轴方向
482 */
483 std::vector<double> changePoseWithXYRef(
484 const std::vector<double> &pose_tar,
485 const std::vector<double> &pose_ref);
486
487 /**
488 * @brief homMatrixToPose: 由齐次变换矩阵得到位姿
489 * @param homMatrix: 4*4 齐次变换矩阵, 输入元素采用横向排列
490 * @return 对应的位姿
491 */
492 std::vector<double> homMatrixToPose(const std::vector<double> &homMatrix);
493
494 /**
495 * @brief poseToHomMatrix: 位姿变换得到齐次变换矩阵
496 * @param pose: 输入的位姿
497 * @return 输出的齐次变换矩阵,元素横向排列
498 */
499 std::vector<double> poseToHomMatrix(const std::vector<double> &pose);
500
501protected:
502 void *d_;
503};
504using MathPtr = std::shared_ptr<Math>;
505
506// clang-format off
507#define Math_DECLARES \
508 _FUNC(Math, 2, poseAdd, p1, p2) \
509 _FUNC(Math, 2, poseSub, p1, p2) \
510 _FUNC(Math, 3, interpolatePose, p1, p2, alpha) \
511 _FUNC(Math, 2, poseTrans, pose_from, pose_from_to) \
512 _FUNC(Math, 2, poseTransInv, pose_from, pose_to_from) \
513 _FUNC(Math, 1, poseInverse, pose) \
514 _FUNC(Math, 2, poseDistance, p1, p2) \
515 _FUNC(Math, 2, poseAngleDistance, p1, p2) \
516 _FUNC(Math, 3, poseEqual, p1, p2, eps) \
517 _FUNC(Math, 3, transferRefFrame, F_b_a_old, V_in_a, type) \
518 _FUNC(Math, 2, poseRotation, pose, rotv) \
519 _FUNC(Math, 1, rpyToQuaternion, rpy) \
520 _FUNC(Math, 1, quaternionToRpy, quant) \
521 _FUNC(Math, 1, tcpOffsetIdentify, poses) \
522 _FUNC(Math, 2, calibrateCoordinate, poses, type) \
523 _FUNC(Math, 4, calculateCircleFourthPoint, p1, p2, p3, mode) \
524 _FUNC(Math, 2, forceTrans, pose_a_in_b, force_in_a) \
525 _FUNC(Math, 4, getDeltaPoseBySensorDistance, distances, position, radius, track_scale) \
526 _FUNC(Math, 2, deltaPoseTrans, pose_a_in_b, ft_in_a) \
527 _FUNC(Math, 2, deltaPoseAdd, pose_a_in_b, v_in_b)
528// clang-format on
529
530} // namespace common_interface
531} // namespace arcs
532#endif
std::vector< double > transferRefFrame(const std::vector< double > &F_b_a_old, const Vector3d &V_in_a, int type)
double poseDistance(const std::vector< double > &p1, const std::vector< double > &p2)
计算两个位姿的位置距离
std::vector< double > poseTrans(const std::vector< double > &pose_from, const std::vector< double > &pose_from_to)
Pose transformation
std::vector< double > forceTrans(const std::vector< double > &pose_a_in_b, const std::vector< double > &force_in_a)
forceTrans: 变换力和力矩的参考坐标系 force_in_b = pose_a_in_b * force_in_a
std::vector< double > poseToHomMatrix(const std::vector< double > &pose)
poseToHomMatrix: 位姿变换得到齐次变换矩阵
std::vector< double > poseRotation(const std::vector< double > &pose, const std::vector< double > &rotv)
姿态旋转
ResultWithErrno calculateCircleFourthPoint(const std::vector< double > &p1, const std::vector< double > &p2, const std::vector< double > &p3, int mode)
根据圆弧的三个点,计算出拟合成的圆的另一半圆弧的中间点位置
std::vector< double > changePoseWithXYRef(const std::vector< double > &pose_tar, const std::vector< double > &pose_ref)
changePoseWithXYRef: 修改 pose_tar 的xy轴方向,尽量与 pose_ref 一致,
std::vector< double > poseAdd(const std::vector< double > &p1, const std::vector< double > &p2)
Pose addition
double poseAngleDistance(const std::vector< double > &p1, const std::vector< double > &p2)
计算两个位姿的轴角距离
std::vector< double > getDeltaPoseBySensorDistance(const std::vector< double > &distances, double position, double radius, double track_scale)
通过距离计算工具坐标系下的位姿增量
ResultWithErrno calibrateCoordinate(const std::vector< std::vector< double > > &poses, int type)
三点法标定坐标系
std::vector< double > poseSub(const std::vector< double > &p1, const std::vector< double > &p2)
Pose subtraction 位姿相减
bool poseEqual(const std::vector< double > &p1, const std::vector< double > &p2, double eps=5e-5)
判断两个位姿是否相等
ResultWithErrno tcpOffsetIdentify(const std::vector< std::vector< double > > &poses)
四点法标定TCP偏移
std::vector< double > quaternionToRpy(const std::vector< double > &quat)
四元数转欧拉角
std::vector< double > rpyToQuaternion(const std::vector< double > &rpy)
欧拉角转四元数
std::vector< double > homMatrixToPose(const std::vector< double > &homMatrix)
homMatrixToPose: 由齐次变换矩阵得到位姿
std::vector< double > poseTransInv(const std::vector< double > &pose_from, const std::vector< double > &pose_to_from)
姿态逆变换
std::vector< double > poseInverse(const std::vector< double > &pose)
Get the inverse of a pose
std::vector< double > interpolatePose(const std::vector< double > &p1, const std::vector< double > &p2, double alpha)
计算线性插值
std::vector< double > deltaPoseTrans(const std::vector< double > &pose_a_in_b, const std::vector< double > &ft_in_a)
changeFTFrame: 变换力和力矩的参考坐标系
std::vector< double > deltaPoseAdd(const std::vector< double > &pose_a_in_b, const std::vector< double > &v_in_b)
addDeltaPose: 计算以给定速度变换单位时间后的位姿
std::array< double, 3 > Vector3d
Definition type_def.h:29
std::shared_ptr< Math > MathPtr
Definition math.h:504
std::tuple< std::vector< double >, int > ResultWithErrno
Definition type_def.h:661
数据类型的定义