Difference between revisions of "User Kinematics/zh-hans"

From SoftMC-Wiki
Jump to: navigation, search
(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}}
=Introduction=
+
=简介=
 +
本文档描述了SoftMC系统中用户定义的机器人运动学的实现。 支持的机器人模型限于具有唯一正运动学解的6轴机器人。
  
 +
为了处理基本的运动学映射,定义了以下术语:
  
This document describes implementation of user-defined robot kinematics in the SoftMC system. The supported robot models are limited to 6 axis robots having unique solution of direct kinematics problem.
 
  
In order to handle basic kinematics mappings the following terms are defined:
+
* World-Space世界空间:以机器人底座为基准的固定坐标系。通常以位置(X,Y,Z)的笛卡尔坐标表示,另一组表示方位坐标,方位坐标组可以用许多可用的表示方式(欧拉角,四元数,旋转矩阵等),但可能会有所差异。
  
 +
* Joint-Space关节空间:用于根据其关节状态来描述机器人的状态的坐标系。通常一组关节角度(机器人连杆之间的角度)是旋转关节或线性关节的位移。在许多情况下,它们直接表示电机位置,但是在某些情况下,非对角耦合矩阵可用于将电机角度转换为关节角度/位移。通常它包含每个给定的世界空间点的机器人的配置描述。
  
* World-Space: A fixed coordinate system referenced to the base of the robot. usually expressed in Cartesian coordinates for position (X, Y, Z) and another set of coordinates representing orientation, the set of orientation coordinates can differ between many available presentations (Euler angles, quaternion, rotation matrices, ...). Elements of this space we usually call Cartesian points.
 
  
* Joint-Space.  A coordinate system used to describe the state of the robot in terms of its joint states. Usually a set of joint angles (angles between robot segments) for rotary joints or displacement for linear joints. In many cases they directly represent the motor positions, but in some cases a non-diagonal coupling matrix can be used for translating motor angles into joint angles/displacements. Elements of this space we usually call Joint points.
 
  
 +
用户运动学是一组用户定义的算法,代表机器人的核心运动学功能。基本上它包括两个主要功能:逆运动学(IK)和正运动学(DK)。反义运动学将笛卡儿或世界点转换成关节坐标。正运动学的功能是将给定的关节点(或关节坐标)转换为任意选定坐标系中的世界点。对于任意机器人,两个辅助功能定义其运动学,首先是检查可用的世界空间工作包络(AF-辅助功能),第二个是定义任何给定关节点的配置标志的辅助功能(CF-配置功能)。
  
 +
在简单的机器人运动学或彻底分析模型的情况下,可以定义逆运动学速度映射(IJ-逆雅可比函数)。它基本上机器人在给定关节坐标上实际世界速度矢量与雅可比矩阵逆的乘积。由于此功能可能非常复杂,并不总是分析可用,因此不是强制性的。可以省略,然后SoftMC系统取代数字导数(根据这些选择的采样时间和机器人速度,这稍微不准确)。
  
User Kinematics is a set of user-defined algorithms representing the core kinematics functionality of a robot. Basically it consist of two main functions: Inverse Kinematics (IK) and Direct Kinematics (DK). Inverse Kinematics translate Cartesian or world points into joint coordinates. Usually it contains configuration description of the robot for each given world-space point. Direct Kinematics function translate the given joint point (or joint coordinates) into world point of any chosen coordinate system. For an arbitrary robot two auxiliary functions define its kinematics, first is checking the available world-space working envelope (AF – accessibility function), and the second is the auxiliary function (CF- configuration function) defining the configuration flags of any given joint point.
 
  
 +
总结:
  
In cases of simple robot kinematics or extensive analytical models inverse velocity mapping can be defined (IJ - inverse Jacobian function). It is basically the matrix product of robot inverse Jacobian matrix at the given joint coordinates with the actual world velocity vector. As this function can be very complex and not always analytically available, having it is not mandatory. It can be omitted and then the SoftMC system takes the numeric derivative instead (which is slightly less accurate, depending on these elected sample time and robots velocity).
+
* 正运动学:: DK: JS → WS
 
+
* 逆运动学:: IK: WS x CS → JS
 
+
* 配置功能:: CF: JS → CS
To summarize:
+
* 辅助功能:: AF:WS →  {true, false}
 
+
* 逆雅可比函数 ::: IJ: WS x JS→ JS
* Direct Kinematics:: DK: JS → WS
 
* Inverse Kinematics:: IK: WS x CS → JS
 
* Configuration Function:: CF: JS → CS
 
* Accessibility Function:: AF:WS →  {true, false}
 
* Inverse Jacobian Function ::: IJ: WS x JS→ JS
 
 
   
 
   
  
  
=Creating a template=
+
=创建模板=
  
First of all a template element has to be created this is done using the special “model” value (5) identifier for user kinematics groups:
+
首先,必须创建一个模板元素,这是使用用户运动组的特殊“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>
This line defines a robotic group having undefined kinematic model (until it is linked to user functions) spawn on given axes and using the given point type for commands/queries. The <pointtype> is point descriptor and one of the following currently supported point types:
+
该行定义了一个具有未定义的运动学模型(直到它被链接到用户函数)的机器人组,在给定的轴上生成并使用给定的点类型进行命令/查询。<pointtype>是点描述符,以下当前支持的点类型之一:
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 71: Line 68:
  
  
=User point setting =
+
=用户点设置 =
Additionally user-defined point types can be selected, there are 5 predefined user point types: USER1, USER2, USER3, ..., USER5.
+
另外可以选择用户定义的点类型,有5种预定义的用户点类型:USER1,USER2,USER3,...,USER5。
  
If one of these is selected user need to provide conversion functions between user given Cartesian point coordinates and internal Cartesian point representation (See: Internal presentation of Cartesian points ) This will be done using the function:
+
如果选择其中之一,用户需要在用户给定的笛卡尔点坐标和内部笛卡尔点表示之间提供转换功能(参见:笛卡尔点的内部显示)这将使用以下功能完成:
  
 
<pre>
 
<pre>
Line 80: Line 77:
 
</pre>
 
</pre>
  
where:
+
其中:
  
* usr is the point index (1,2,3,4,5) denoting which one of the user-defined point types is taken (USER1, ... USER5).
+
* usr是表示用户定义的点类型中的哪一个(USER1,... USER5)的点索引(1,2,3,4,5)。
* size is the number of coordinates used for this point type (1 .. 7).
+
* size是用于此点类型的坐标数(1 .. 7)。
* set is a user-provided function for converting user-given coordinates (#{...}) into internal Cartesian point.
+
* set是用户提供的功能,用于将用户给定的坐标(#{...})转换为内部笛卡尔点。
* get is the user provided function converting internal Cartesian point presentation into user-given coordinates (#{...})
+
* get是用户提供的功能,将内部笛卡尔点呈现转换为用户给定的坐标(#{...}
* utype is defined as:
+
* utype被定义为:
  
 
<pre>
 
<pre>
Line 92: Line 89:
 
</pre>
 
</pre>
  
Where vector is a double floating point array of the user-provided (obtained) coordinates (exact copy of the list between "#{" and "}" and car is the double floating point array of internal Cartesian point representation.
+
其中vector是用户提供(获得)坐标的双浮点数组(“#{”和“}”之间的列表的精确副本,而car是内部笛卡尔点表示的双浮点数组。
 
 
  
=Adding user code=
 
  
Internal presentation of Cartesian points
+
=添加用户代码=
  
In the softMC system all Cartesian points (independently of the selected model or point type) are represented by the following structure:
+
笛卡尔点的内部表示
  
 +
在softMC系统中,所有笛卡尔点(独立于所选模型或点类型)由以下结构表示:
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 138: Line 134:
  
  
Note that all internal softMC orientations are represented by quaternions of the form:
+
注意,所有内部softMC取向由以下形式的四元数表示:[Cos(phi / 2),n * Sin(phi / 2)]其中b =(Nx,Ny,Nz)和||n||= 1。 因此,对于所有类型的机器人,所有笛卡尔点将被处理为7个元素的双浮点数组。
[Cos(phi/2), n*Sin(phi/2)] where b = (Nx,Ny,Nz) and ||n|| =1. Therefore all Cartesian points will be handled as double floating point arrays of 7 elements, for all types of robots
 
  
=Internal presentation of Joint points=
+
=关节点的内部介绍=
  
Joint points are internally represented as double floating point arrays. The units are radians or millimeters depending on axis type (rotary, linear).
+
关节点在内部表示为双浮点数组。 单位是弧度或毫米,取决于轴类型(旋转,线性)。
Robot Configuration Flags
+
机器人配置标志
  
Robot configuration flags will be represented as a bit filed with following order:
+
机器人配置标志将被表示为具有以下顺序的位字段:
  
 
Flag Name Bits
 
Flag Name Bits
Line 153: Line 148:
 
Wrist NoFlip(1), Flip(2) B4-B5
 
Wrist NoFlip(1), Flip(2) B4-B5
  
The flags will be transferred as a long integer (32 bit) value. Note that the filed names of the configuration flags are appropriate for general open-kinematics structures. However more than these three configuration flags are not supported in the system (language constrain). Also the filed names could be inappropriate for different kinematics types. If a kinematics that is implemented demands more than three configuration flags they must be implemented via user functions.
+
这些标志将作为长整数(32位)值传送。请注意,配置标志的字段名称适用于一般的开链运动学结构。但是,系统不支持这三个配置标志(语言约束)。 此外,提交的名称可能不适用于不同的运动学类型。 如果实现的运动学需要三个以上的配置标志,则必须通过用户功能实现。
  
=Kinematics functions=
+
=运动学功能=
  
Once the kinematics equations have been written the following user functions have to be codded.
+
一旦写入了运动学方程式,就必须编写以下用户功能。
  
==Configuration Function==
+
==配置函数==
  
 
'''int Config(double *jnt)'''
 
'''int Config(double *jnt)'''
  
Where jnt is the joint coordinates array and the returned value is long integer representing the robot configuration flags for the given joint coordinates.
+
其中jnt是关节坐标数组,返回值是表示给定关节坐标的机器人配置标志的长整数。
  
==Inverse Kinematics Function==
+
==逆运动学函数==
  
 
int InverseKinematics(int cfg, double *cpnt, double *jnt)
 
int InverseKinematics(int cfg, double *cpnt, double *jnt)
  
Where:
+
其中:
cfg – desired robot configuration
+
cfg – 所需机器人配置
cpnt – artesian point
+
cpnt – 笛卡尔点
jnt – joint point
+
jnt – 关节点
  
Function returns 0 if everything is OK and nonzero number (1,2,3, ...) of axis where a problem is detected.
+
如果一切正常,并且检测到问题的轴的非零数(1,2,3,...),函数返回0。
  
==Direct Kinematics Function==
+
==正运动学函数==
  
 
'''int DirectKinematics(double *cpnt, double *jnt)'''
 
'''int DirectKinematics(double *cpnt, double *jnt)'''
  
 
Where:
 
Where:
cpnt – Cartesian point
+
cpnt – 笛卡尔点
jnt – joint point
+
jnt – 关节点
  
Function returns 0 if everything is OK and nonzero number (1,2,3, ...) of axis where a problem is detected.
+
如果一切正常,并且检测到问题的轴的非零数(1,2,3,...),函数返回0。
  
==Working Envelope Test Function==
+
==工作空间边界测试函数==
  
 
'''int Accessible(double *cpnt)'''
 
'''int Accessible(double *cpnt)'''
  
Check if the given point is in the working envelope of the robot. If yes returned 0. If the point is on the outer side of the working envelope 1 is returned. If it is too close to the zero origin point -1 is returned.
+
检查给定点是否在机器人的工作范围内。 如果是返回0.如果点位于工作空间边界的外侧,则返回1。 如果它太接近零原点,则返回-1。
  
==Off-Line Computation Function==
+
==离线计算函数==
  
 
'''int Setup()'''
 
'''int Setup()'''
  
returns 0 if all is OK. This function may be not needed, it depends on user implementation.
+
如果一切正常,则返回0。 这个功能可能不需要,这取决于用户的实现方式。
 +
 
  
==Inverse Jacobian Function==
+
==雅可比矩阵的逆函数==
  
If Inverse Jacobian Matrix can be analytically computed it can be provided together with all user kinematics functions, but if not this function can be omitted.
+
如果可以分析计算逆雅可比矩阵,则可以与所有用户运动学函数一起提供,但如果不能,则可以省略该功能。
 
<pre>
 
<pre>
 
int InvJacobian (double *JointPoint,double *JointVel,double *CartesianPoint,double *CartesianVel)
 
int InvJacobian (double *JointPoint,double *JointVel,double *CartesianPoint,double *CartesianVel)
 
</pre>
 
</pre>
  
=Linking the Kinematics Functions to the User template=
+
=将运动学功能链接到用户模板=
  
Once the user kinematics functions are available they can be linked to template group (model=5) using the following function:
+
一旦用户运动学功能可用,它们可以使用以下功能链接到模板组(model=5):
 
<pre>
 
<pre>
 
int rbt_SetUserKin(int rbt_id, RBT_UFUN &user);
 
int rbt_SetUserKin(int rbt_id, RBT_UFUN &user);
 
</pre>
 
</pre>
  
Where rbt_id is the template group id, obtainable querying ElementId of a group. And “user” a structure (class) defined in rbtUkin.typ header file containing pointers to all user functions.
+
其中rbt_id是模板组ID,可以查询组的ElementId。 和“user”一个在rbtUkin.typ头文件中定义的结构(类),其中包含指向所有用户功能的指针。 界面用户结构(类):
Interface user structure (class):
 
  
 
<pre>
 
<pre>
Line 238: Line 233:
 
</pre>
 
</pre>
  
The class should be first filled with appropriate functions and then transferred to rbt_SetUserKin function. Once the function is called there is no further relevance of this structure and it can be deleted.
+
该类应首先填写适当的函数,然后转移到rbt_SetUserKin函数。 一旦函数被调用,这个结构就没有进一步的相关性,它可以被删除。

Latest revision as of 07:58, 17 July 2017

语言: English  • 中文(简体)‎

简介

本文档描述了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函数。 一旦函数被调用,这个结构就没有进一步的相关性,它可以被删除。