Difference between revisions of "User Kinematics/zh-hans"
(Created page with "{{Languages}} =Introduction= This document describes implementation of user-defined robot kinematics in the SoftMC system. The supported robot models are limited to 6 axis r...") |
|||
Line 1: | Line 1: | ||
− | {{Languages}} | + | {{Languages|User_Kinematics}} |
− | = | + | =简介= |
+ | 本文档描述了SoftMC系统中用户定义的机器人运动学的实现。 支持的机器人模型限于具有唯一正运动学解的6轴机器人。 | ||
+ | 为了处理基本的运动学映射,定义了以下术语: | ||
− | |||
− | + | * World-Space世界空间:以机器人底座为基准的固定坐标系。通常以位置(X,Y,Z)的笛卡尔坐标表示,另一组表示方位坐标,方位坐标组可以用许多可用的表示方式(欧拉角,四元数,旋转矩阵等),但可能会有所差异。 | |
+ | * Joint-Space关节空间:用于根据其关节状态来描述机器人的状态的坐标系。通常一组关节角度(机器人连杆之间的角度)是旋转关节或线性关节的位移。在许多情况下,它们直接表示电机位置,但是在某些情况下,非对角耦合矩阵可用于将电机角度转换为关节角度/位移。通常它包含每个给定的世界空间点的机器人的配置描述。 | ||
− | |||
− | |||
+ | 用户运动学是一组用户定义的算法,代表机器人的核心运动学功能。基本上它包括两个主要功能:逆运动学(IK)和正运动学(DK)。反义运动学将笛卡儿或世界点转换成关节坐标。正运动学的功能是将给定的关节点(或关节坐标)转换为任意选定坐标系中的世界点。对于任意机器人,两个辅助功能定义其运动学,首先是检查可用的世界空间工作包络(AF-辅助功能),第二个是定义任何给定关节点的配置标志的辅助功能(CF-配置功能)。 | ||
+ | 在简单的机器人运动学或彻底分析模型的情况下,可以定义逆运动学速度映射(IJ-逆雅可比函数)。它基本上机器人在给定关节坐标上实际世界速度矢量与雅可比矩阵逆的乘积。由于此功能可能非常复杂,并不总是分析可用,因此不是强制性的。可以省略,然后SoftMC系统取代数字导数(根据这些选择的采样时间和机器人速度,这稍微不准确)。 | ||
− | |||
+ | 总结: | ||
− | + | * 正运动学:: DK: JS → WS | |
− | + | * 逆运动学:: IK: WS x CS → JS | |
− | + | * 配置功能:: CF: JS → CS | |
− | + | * 辅助功能:: AF:WS → {true, false} | |
− | + | * 逆雅可比函数 ::: IJ: WS x JS→ JS | |
− | * | ||
− | * | ||
− | * | ||
− | * | ||
− | * | ||
− | = | + | =创建模板= |
− | + | 首先,必须创建一个模板元素,这是使用用户运动组的特殊“model”值(5)标识符完成的: | |
<pre> | <pre> | ||
Common Shared <robot name> as group {axnm = <axis name>,} model = 5 of <pointtype> | Common Shared <robot name> as group {axnm = <axis name>,} model = 5 of <pointtype> | ||
</pre> | </pre> | ||
− | + | 该行定义了一个具有未定义的运动学模型(直到它被链接到用户函数)的机器人组,在给定的轴上生成并使用给定的点类型进行命令/查询。<pointtype>是点描述符,以下当前支持的点类型之一: | |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 71: | Line 68: | ||
− | = | + | =用户点设置 = |
− | + | 另外可以选择用户定义的点类型,有5种预定义的用户点类型:USER1,USER2,USER3,...,USER5。 | |
− | + | 如果选择其中之一,用户需要在用户给定的笛卡尔点坐标和内部笛卡尔点表示之间提供转换功能(参见:笛卡尔点的内部显示)这将使用以下功能完成: | |
<pre> | <pre> | ||
Line 80: | Line 77: | ||
</pre> | </pre> | ||
− | + | 其中: | |
− | * | + | * usr是表示用户定义的点类型中的哪一个(USER1,... USER5)的点索引(1,2,3,4,5)。 |
− | * | + | * size是用于此点类型的坐标数(1 .. 7)。 |
− | * | + | * set是用户提供的功能,用于将用户给定的坐标(#{...})转换为内部笛卡尔点。 |
− | * | + | * get是用户提供的功能,将内部笛卡尔点呈现转换为用户给定的坐标(#{...}) |
− | * | + | * utype被定义为: |
<pre> | <pre> | ||
Line 92: | Line 89: | ||
</pre> | </pre> | ||
− | + | 其中vector是用户提供(获得)坐标的双浮点数组(“#{”和“}”之间的列表的精确副本,而car是内部笛卡尔点表示的双浮点数组。 | |
− | |||
− | |||
− | + | =添加用户代码= | |
− | + | 笛卡尔点的内部表示 | |
+ | 在softMC系统中,所有笛卡尔点(独立于所选模型或点类型)由以下结构表示: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 138: | Line 134: | ||
− | + | 注意,所有内部softMC取向由以下形式的四元数表示:[Cos(phi / 2),n * Sin(phi / 2)]其中b =(Nx,Ny,Nz)和||n||= 1。 因此,对于所有类型的机器人,所有笛卡尔点将被处理为7个元素的双浮点数组。 | |
− | [ | ||
− | = | + | =关节点的内部介绍= |
− | + | 关节点在内部表示为双浮点数组。 单位是弧度或毫米,取决于轴类型(旋转,线性)。 | |
− | + | 机器人配置标志 | |
− | + | 机器人配置标志将被表示为具有以下顺序的位字段: | |
Flag Name Bits | Flag Name Bits | ||
Line 153: | Line 148: | ||
Wrist NoFlip(1), Flip(2) B4-B5 | Wrist NoFlip(1), Flip(2) B4-B5 | ||
− | + | 这些标志将作为长整数(32位)值传送。请注意,配置标志的字段名称适用于一般的开链运动学结构。但是,系统不支持这三个配置标志(语言约束)。 此外,提交的名称可能不适用于不同的运动学类型。 如果实现的运动学需要三个以上的配置标志,则必须通过用户功能实现。 | |
− | = | + | =运动学功能= |
− | + | 一旦写入了运动学方程式,就必须编写以下用户功能。 | |
− | == | + | ==配置函数== |
'''int Config(double *jnt)''' | '''int Config(double *jnt)''' | ||
− | + | 其中jnt是关节坐标数组,返回值是表示给定关节坐标的机器人配置标志的长整数。 | |
− | == | + | ==逆运动学函数== |
int InverseKinematics(int cfg, double *cpnt, double *jnt) | int InverseKinematics(int cfg, double *cpnt, double *jnt) | ||
− | + | 其中: | |
− | cfg – | + | cfg – 所需机器人配置 |
− | cpnt – | + | cpnt – 笛卡尔点 |
− | jnt – | + | jnt – 关节点 |
− | + | 如果一切正常,并且检测到问题的轴的非零数(1,2,3,...),函数返回0。 | |
− | == | + | ==正运动学函数== |
'''int DirectKinematics(double *cpnt, double *jnt)''' | '''int DirectKinematics(double *cpnt, double *jnt)''' | ||
Where: | Where: | ||
− | cpnt – | + | cpnt – 笛卡尔点 |
− | jnt – | + | jnt – 关节点 |
− | + | 如果一切正常,并且检测到问题的轴的非零数(1,2,3,...),函数返回0。 | |
− | == | + | ==工作空间边界测试函数== |
'''int Accessible(double *cpnt)''' | '''int Accessible(double *cpnt)''' | ||
− | + | 检查给定点是否在机器人的工作范围内。 如果是返回0.如果点位于工作空间边界的外侧,则返回1。 如果它太接近零原点,则返回-1。 | |
− | == | + | ==离线计算函数== |
'''int Setup()''' | '''int Setup()''' | ||
− | + | 如果一切正常,则返回0。 这个功能可能不需要,这取决于用户的实现方式。 | |
+ | |||
− | == | + | ==雅可比矩阵的逆函数== |
− | + | 如果可以分析计算逆雅可比矩阵,则可以与所有用户运动学函数一起提供,但如果不能,则可以省略该功能。 | |
<pre> | <pre> | ||
int InvJacobian (double *JointPoint,double *JointVel,double *CartesianPoint,double *CartesianVel) | int InvJacobian (double *JointPoint,double *JointVel,double *CartesianPoint,double *CartesianVel) | ||
</pre> | </pre> | ||
− | = | + | =将运动学功能链接到用户模板= |
− | + | 一旦用户运动学功能可用,它们可以使用以下功能链接到模板组(model=5): | |
<pre> | <pre> | ||
int rbt_SetUserKin(int rbt_id, RBT_UFUN &user); | int rbt_SetUserKin(int rbt_id, RBT_UFUN &user); | ||
</pre> | </pre> | ||
− | + | 其中rbt_id是模板组ID,可以查询组的ElementId。 和“user”一个在rbtUkin.typ头文件中定义的结构(类),其中包含指向所有用户功能的指针。 界面用户结构(类): | |
− | |||
<pre> | <pre> | ||
Line 238: | Line 233: | ||
</pre> | </pre> | ||
− | + | 该类应首先填写适当的函数,然后转移到rbt_SetUserKin函数。 一旦函数被调用,这个结构就没有进一步的相关性,它可以被删除。 |
Latest revision as of 07:58, 17 July 2017
语言: | English • 中文(简体) |
---|
Contents
简介
本文档描述了SoftMC系统中用户定义的机器人运动学的实现。 支持的机器人模型限于具有唯一正运动学解的6轴机器人。
为了处理基本的运动学映射,定义了以下术语:
- World-Space世界空间:以机器人底座为基准的固定坐标系。通常以位置(X,Y,Z)的笛卡尔坐标表示,另一组表示方位坐标,方位坐标组可以用许多可用的表示方式(欧拉角,四元数,旋转矩阵等),但可能会有所差异。
- Joint-Space关节空间:用于根据其关节状态来描述机器人的状态的坐标系。通常一组关节角度(机器人连杆之间的角度)是旋转关节或线性关节的位移。在许多情况下,它们直接表示电机位置,但是在某些情况下,非对角耦合矩阵可用于将电机角度转换为关节角度/位移。通常它包含每个给定的世界空间点的机器人的配置描述。
用户运动学是一组用户定义的算法,代表机器人的核心运动学功能。基本上它包括两个主要功能:逆运动学(IK)和正运动学(DK)。反义运动学将笛卡儿或世界点转换成关节坐标。正运动学的功能是将给定的关节点(或关节坐标)转换为任意选定坐标系中的世界点。对于任意机器人,两个辅助功能定义其运动学,首先是检查可用的世界空间工作包络(AF-辅助功能),第二个是定义任何给定关节点的配置标志的辅助功能(CF-配置功能)。
在简单的机器人运动学或彻底分析模型的情况下,可以定义逆运动学速度映射(IJ-逆雅可比函数)。它基本上机器人在给定关节坐标上实际世界速度矢量与雅可比矩阵逆的乘积。由于此功能可能非常复杂,并不总是分析可用,因此不是强制性的。可以省略,然后SoftMC系统取代数字导数(根据这些选择的采样时间和机器人速度,这稍微不准确)。
总结:
- 正运动学:: DK: JS → WS
- 逆运动学:: IK: WS x CS → JS
- 配置功能:: CF: JS → CS
- 辅助功能:: AF:WS → {true, false}
- 逆雅可比函数 ::: IJ: WS x JS→ JS
创建模板
首先,必须创建一个模板元素,这是使用用户运动组的特殊“model”值(5)标识符完成的:
Common Shared <robot name> as group {axnm = <axis name>,} model = 5 of <pointtype>
该行定义了一个具有未定义的运动学模型(直到它被链接到用户函数)的机器人组,在给定的轴上生成并使用给定的点类型进行命令/查询。<pointtype>是点描述符,以下当前支持的点类型之一:
Point Type | Description | # coo |
---|---|---|
XY | XY table | 2 |
XYZ | XYZ system | 3 |
XYZR | XYZ +roll system | 4 |
XYZRP | XYZ + Roll+Pitch system | 5 |
XYZPR | XYZ + Pitch + Roll system | 5 |
XYZYPR | XYZ + Yaw + Pitch + Roll system | 6 |
用户点设置
另外可以选择用户定义的点类型,有5种预定义的用户点类型:USER1,USER2,USER3,...,USER5。
如果选择其中之一,用户需要在用户给定的笛卡尔点坐标和内部笛卡尔点表示之间提供转换功能(参见:笛卡尔点的内部显示)这将使用以下功能完成:
int rbt_SetUsrPnt(int usr, int size, utype set, utype get)
其中:
- usr是表示用户定义的点类型中的哪一个(USER1,... USER5)的点索引(1,2,3,4,5)。
- size是用于此点类型的坐标数(1 .. 7)。
- set是用户提供的功能,用于将用户给定的坐标(#{...})转换为内部笛卡尔点。
- get是用户提供的功能,将内部笛卡尔点呈现转换为用户给定的坐标(#{...})
- utype被定义为:
typedef int (*utype)(double *vector,double *car);
其中vector是用户提供(获得)坐标的双浮点数组(“#{”和“}”之间的列表的精确副本,而car是内部笛卡尔点表示的双浮点数组。
添加用户代码
笛卡尔点的内部表示
在softMC系统中,所有笛卡尔点(独立于所选模型或点类型)由以下结构表示:
Component | coordinates | description |
---|---|---|
Position | X | X in mm |
Y | Y in mm | |
Z | Z in mm |
Orientation Quaternion |
---|
Cos (Phi/2) denoted as "Ro" also |
Nx*Sin (Phi/2) |
Ny*Sin(Phi/2) |
Nz*Sin(Phi/2) |
注意,所有内部softMC取向由以下形式的四元数表示:[Cos(phi / 2),n * Sin(phi / 2)]其中b =(Nx,Ny,Nz)和||n||= 1。 因此,对于所有类型的机器人,所有笛卡尔点将被处理为7个元素的双浮点数组。
关节点的内部介绍
关节点在内部表示为双浮点数组。 单位是弧度或毫米,取决于轴类型(旋转,线性)。 机器人配置标志
机器人配置标志将被表示为具有以下顺序的位字段:
Flag Name Bits Arm Lefty(1), Righty(2) B0-B1 Elbow Below(1), Above(2) B2-B3 Wrist NoFlip(1), Flip(2) B4-B5
这些标志将作为长整数(32位)值传送。请注意,配置标志的字段名称适用于一般的开链运动学结构。但是,系统不支持这三个配置标志(语言约束)。 此外,提交的名称可能不适用于不同的运动学类型。 如果实现的运动学需要三个以上的配置标志,则必须通过用户功能实现。
运动学功能
一旦写入了运动学方程式,就必须编写以下用户功能。
配置函数
int Config(double *jnt)
其中jnt是关节坐标数组,返回值是表示给定关节坐标的机器人配置标志的长整数。
逆运动学函数
int InverseKinematics(int cfg, double *cpnt, double *jnt)
其中: cfg – 所需机器人配置 cpnt – 笛卡尔点 jnt – 关节点
如果一切正常,并且检测到问题的轴的非零数(1,2,3,...),函数返回0。
正运动学函数
int DirectKinematics(double *cpnt, double *jnt)
Where: cpnt – 笛卡尔点 jnt – 关节点
如果一切正常,并且检测到问题的轴的非零数(1,2,3,...),函数返回0。
工作空间边界测试函数
int Accessible(double *cpnt)
检查给定点是否在机器人的工作范围内。 如果是返回0.如果点位于工作空间边界的外侧,则返回1。 如果它太接近零原点,则返回-1。
离线计算函数
int Setup()
如果一切正常,则返回0。 这个功能可能不需要,这取决于用户的实现方式。
雅可比矩阵的逆函数
如果可以分析计算逆雅可比矩阵,则可以与所有用户运动学函数一起提供,但如果不能,则可以省略该功能。
int InvJacobian (double *JointPoint,double *JointVel,double *CartesianPoint,double *CartesianVel)
将运动学功能链接到用户模板
一旦用户运动学功能可用,它们可以使用以下功能链接到模板组(model=5):
int rbt_SetUserKin(int rbt_id, RBT_UFUN &user);
其中rbt_id是模板组ID,可以查询组的ElementId。 和“user”一个在rbtUkin.typ头文件中定义的结构(类),其中包含指向所有用户功能的指针。 界面用户结构(类):
class RBT_UFUN { public: int (*setup)(); int (*ikin)(int, double *, double *); int (*ijac)(double *, double *,double *, double *); int (*dkin)(double *, double *); int (*acces)(double *); int (*cfg)(double *); RBT_UFUN() { ikin = 0; ijac = 0; dkin = 0; acces = 0; cfg = 0; setup = 0; } };
该类应首先填写适当的函数,然后转移到rbt_SetUserKin函数。 一旦函数被调用,这个结构就没有进一步的相关性,它可以被删除。