- 本文档对API中的一些主要参数做了说明
- 作用:用于定义笛卡尔坐标系下的运动。
enum Cartesian
{
x, y, z, rot, pitch, yaw, rotx, roty, rotz, Euler, RPY
};- 说明:x,y,z为沿坐标轴运动,rot,pitch,yaw为以基坐标为参考的rpy变换,rotx,roty,rotz为绕x,y,z轴的绕轴旋转变换
- 作用:用于计算逆解时,返回逆解计算的结果。
enum Solution { OK, Singular, OutOfRange, HighSpeed, Unkown,JointLimit };
ok:计算成功,得到一组合适的关节角
OutOfRange:所要求解的位姿超出机器人工作空间
HighSpeed:解出的该组逆解与当前关节角差距较大,会导致机器人高速运动
JointLimit:当前位姿不在机器人的关节角范围内(±360)
变量名解释(具体见下方函数):
- double* p/pose为笛卡尔坐标系下位姿(x,y,z,r,p,y)数组
- double *joint为机器人6个关节角数组
- Cartesian xyz代表在笛卡尔坐标系下运动类型
- double*TransM为自定义世界坐标系相对世界坐标系的偏移(x,y,z,r,p,y) 数组
- double*d为工具坐标系相对于默认工具坐标系偏移(x,y,z,r,p,y)数组
- double Threshold 是自定义量,用来表示关节角间的最大变化量,限制连续运动时关节角发生跳变(一般在奇异点附近)
- double delta是绕某个轴的旋转角
- double*sol用于调试时存储8组逆解
- double*test为调试预留
- bool GetSolution与调试sol配合使用
- 功能:计算当前工具系相对于基坐标系的位姿
void fkine(const double *joint,const double *d, double*pose)- 形参说明
double joint[6]:当前机器人的6个关节角
double d[6]:当前工具坐标系相对于第六个关节坐标系的位姿,d[6]={x,y,z,r,p,y},其中rpy分别为绕关节6坐标系z轴,y轴,x轴旋转的角度
double pose[6]:当前工具坐标系相对于基坐标系的位姿,即正解计算结果会传入该矩阵中。pose[6]={x,y,z,r,p,y},其中rpy分别为绕基坐标系z轴,y轴,x轴旋转的角度
- 功能:计算机器人逆解,以世界坐标系为参照
Solution ikine(const double *p, const double *d, double *joint,const double Threshold,const bool GetSolutions, double *sol, double*test)- 形参说明:
double p[6]:同fkine中的pose[6]
double d[6]:同fkine中d[6]
double joint[6]:同fkine中joint[6]
double Threshold:阈值,用于判定逆解是否有效。以关节1为例,如果当前关节为0度,而求解出的为1度,两者之间之差不超过阈值,则认为是有效解。
bool GetSolutions该参数和下一参数double *sol配合使用,如果为true,则函数会向sol中传入求解出的8组关节角,该功能主要用于调试和查看计算结果
double sol[48]:用于保存求解出的8组关节角,和上一参数bool GetSolutions配合使用,如不需要查看求解结果,令上一参数为false即可
double test[4]:该参数由开发者用于调试,普通使用者随便传入一个double[4]类型数组即可。
- 功能:计算以工具坐标系为参考下的微分运动逆解。其与ikine函数不同之处在于,可以通过给定xyz和delta,能由当前位姿计算出微分运动delta(距离/角度)后的新位姿
Solution ToolIkine( double *p,const double* d, const Cartesian xyz, const double delta, double* joint,const double Threshold, bool GetSolutions, double*sol, double*test)- 形参说明
- delta为微分量,表示直线运动/旋转角的大小,单位为mm/°,具体是哪个由xyz控制
- xyz用于控制运动类型(以工具坐标系为参考),表示微分运动是旋转还是沿直线运动
- 功能:计算当前位姿p0绕轴旋转/直线移动delta量后的新位姿p1
void RotXYZ(const Cartesian xyz, double* TempPose, double delta)- 形参
- TemPose同p
- 功能:计算末端工具坐标系相对于自定义坐标系的正运动学位姿
void SelfDefKine(const double* TransM,const double *joint,const double *d, double*pose)- 形参说明
- TransM 表示自定义坐标系的6元数组
- 功能:基于SelfDefKine计算出的位姿(以自定义坐标系为参照),计算对应的6个关节角。
Solution SelfDefIkine(const double*TransM, double *p, const double* d,const Cartesian xyz,const double delta, double* joint,const double Threshold, bool GetSolutions, double*sol, double*test)- 形参说明:
- TransM同上
- p为以自定义坐标系为参照的,工具坐标系的位姿
Solution SelfDefPose(const double*TransM, double *p,const double* d,const Transfrom Type, double* joint, bool GetSolutions, double*sol, double*test)- 功能:用于PTP的逆解运算,即判断从当前点,运动到下一指定位姿时,计算出目标位姿的8组解中,距离当前关节角最“合理”的那组解(本算法中用的是小关节加权优先法)
本API与之前的Ikine系列函数不同,不用于连续运动的逆解运算,因此不需要传入Threshold。
注:功能、参数均与普通API相同,只是中间的逆解选取替换成了快速算法。