机器人坐标系
设置零点
调用函数NRC_SetCurrentPosToZeroPos(int axisNum,bool mod)
实现当前位置设置为零点,参数 axisNum 表示 操作的轴的序号,当 axisNum 为 0 时,表示全部轴,参数范围:0 <= axisNum <= 机器人轴总数。mod 为设置零点或清除多圈值,0 为设置零点,1 为清除多圈值。需要在伺服停止或伺服就绪状态下设置该参数,而且执行该函数大约需要两三秒时间。对于大多数类型的伺服,执行该函数时,会使伺服使能上电,请注意安全。
设置零点的 demo 程序
#include <iostream>
#include "nrcAPI.h"
#include<stdio.h>
using namespace std;
int main()
{
SystemStartup();//系统启动,详见3.3节
RobotMsg();//获取机器人配置,详见3.4节
SetServoMap();//设置伺服映射关系,见3.5节
SettingofRobotRelatedParameters();//机器人相关参数设置,详见3.6节
//////以上调用函数可见附录一/////
NRC_SetServoReadyStatus(1);//设置伺服允许,详见3.8节
NRC_SetCurrentPosToZeroPos(0,0) ;//将当前位置设置为零点
NRC_Position inexbot7;//定义机器人位置结构体对象inexbot7
NRC_GetCurrentPos(NRC_MCS, inexbot7);//将机器人的直角坐标系赋值给inexbot7
printf("inexbot7.pos=%f,%f,%f,,%f,%f,%f,%f,\n",inexbot7.pos[0],inexbot7.pos[1],inexbot7.pos[2],inexbot7.pos[3],inexbot7.pos[4],inexbot7.pos[5],inexbot7.pos[6]);//将机器人最开始直角坐标位置输出
NRC_Delayms(1000);//延时100ms
while(1)//保持程序继续运行
{
NRC_Delayms(1000);
}
}
用户坐标系
用户坐标系是指 XYZ 直角坐标在任意位置定义。本体尖端点根据坐标平行运动。
设置用户坐标系参数
设置用户坐标系原点相对机器人直角坐标系原点的偏移量,从而确定该用户坐标系,设置用户坐标参数通过调用函数NRC_SetUserCoordParm(int userNum, NRC_Position& deviation)
来实现的。
- 参数 userNum 是要设置的用户坐标系的编号,参数范围:0 < userNum < 10。
- 参数 deviation 是用户坐标系原点相对机器人直角坐标系原点的偏移量。
- deviation.coord 该参数无用。
- deviation.pos[0]-deviation.pos[2] 分别为 x,y,z 三轴位置的偏移量,单位:毫米。
- deviation.pos[3]-deviation.pos[4] 分别为 x,y,z 三轴方向的偏移量,单位:弧度。
由于实际使用中,因为很难测量方向的偏移量,所有该函数很少使用,一般使用
NRC_CalibrationUserCoord(int userNum, NRC_Position& origin, NRC_Position& X_Axis, NRC_Position& XOY_Plane)
函数对用户坐标进行标定,自动计算出偏移量。
标定用户坐标系
调用函数NRC_CalibrationUserCoord(int userNum, NRC_Position& origin, NRC_Position& X_Axis, NRC_Position& XOY_Plane)
标定用户坐标。标定用户坐标系,自动计算用户坐标系原点相对机器人直角坐标系原点的偏移量,从而确定该用户坐标系。
- 参数 userNum 是要标定的用户坐标系的编号,参数范围:0 < userNum < 10。
- 参数 origin 是用户坐标系原点在机器人直角坐标系中的位置。
- 参数 X_Axis 是用户坐标系 X 轴正方向上任一点在机器人直角坐标系中的位置参数 XOY_Plane 是 用户坐标系 XOY 平面上任一点在机器人直角坐标系中的位置。
切换当前用户坐标系
需要切换当前用户坐标时,调用函数NRC_SwitchUserCoord(int tagetUser)
来实现,参数 tagetUser 是要切换的目标用户坐标系的编号,参数范围:0 < tagetUser < 10。调用函数NRC_GetCurrentUserCoord()
获取当前用户坐标编号,其返回当前用户坐标的编号,用户坐标系初始默认值为 1。
设置工具手
在工具坐标系中,机器人沿定义在工具尖端点的 X、Z、Y 轴平行运动。工具坐标把安装在机器人腕部法兰盘上的工具有效方向作为 Z 轴,把坐标定义在工具尖 端点。 为此,工具坐标轴的方向随腕部的动作而变化。工具坐标的运动不受机器人位置或姿势的变化影响,主要以工具的有效方向为基准进行运动。
设置工具手参数
设置工具手参数是通过NRC_SetToolCoordParm(int toolNum,NRC_Position& deviation)
实现的,是用来设置工具手末端位置相对机器人末端位置的偏移量,从而确定该工具坐标系。
- 参数 toolNum 是要设置的工具手的编号,参数范围:0 < toolNum < 10。
- 参数 deviation 是指工具手末端位置相对机器人末端位置的偏移量
- deviation.coord 该参数无用
- deviation.pos[0]-deviation.pos[2] 分别为 x,y,z 三轴位置的偏移量,单位:毫米。
- deviation.pos[3]-deviation.pos[4] 分别为 x,y,z 三轴方向的偏移量,对于四轴 SCARA 机器人该参数无用,单位:弧度。需要注意的是实际使用中,一般根据工具手的设计尺寸图,直接填入该参数。
标定工具手
自动计算工具手末端位置相对机器人末端位置的偏移量,从而确定该工具坐标系。
标定工具手采用 7 点标定法,此方只对六轴串联机器人有效,此功能是通过调用函数NRC_CalibrationToolCoord_7Pos(int toolNum, NRC_Position& pos1, NRC_Position& pos2, NRC_Position& pos3, NRC_Position& pos4, NRC_Position& pos5, NRC_Position& pos6, NRC_Position& pos7)
实现的。
- 参数 toolNum 是要设置的工具手的编号,参数范围:0 < toolNum < 10。
- 参数 pos1 是将工具手末端对准一个固定尖端,并保持工具手垂直的一个位置。
- 参数 pos2 是将工具手末端对准一个固定尖端,选取一个位置,不能和 pos1,pos3,pos4 是同一位置。
- 参数 pos3 是将工具手末端对准一个固定尖端,选取一个位置,不能和 pos1,pos2,pos4 是同一位置,
- 参数 pos4 是将工具手末端对准一个固定尖端,选取一个位置,不能和 pos1,pos2,pos3 是同一位置,
- 参数 pos5 是保持工具手垂直的一个位置,可以和 pos1 点是同一位置。
- pos6 相对 pos5 的 X 轴正方向上的一个位置,pos7 相对 pos6 的 Y 轴正方向上的一个位置。
切换工具手
有时可以将之前标定的工具手直接切换出来使用,所以可以调用函数NRC_SwitchToolCoord(int tagetTool)
来实现。参数 tagetUser 是要切换的目标工具手的编号,0 表示物工具手,参数范围:0 <= tagetTool < 10。调用函数NRC_GetCurrentToolCoord()
以获取当前工具手编号。当前工具手的编号,工具手初始默认值为 0,即无工具手在。
切换坐标系
机器人使用四种坐标系分别是关节坐标系,直角坐标系,工具坐标系,用户坐标系。关节坐标系是指单独运动机器人的各个关节轴。直角坐标系(在 Inexbot 的 API 库里称为世界坐标系)是机器人前段沿基座的 X 轴,Y 轴,Z 轴平行运动。A,B,C 分别为绕 X,Y,Z 轴绕动。工具坐标系是工具坐标系把机器人腕部工具的有效方向作为 Z 轴,把坐标系原点定义在工具的尖端点,本体尖端点根据坐标平行运动。TA、TB、TC 分别为绕 TX、TY、TZ 轴转动。 用户坐标系:X,Y,Z 直角坐标在任意位置定义。本体尖端点根据坐标平行运动。
使用枚举类型来定义四种坐标系。 :
enum NRC_COORD
{
NRC_ACS = 0, ///< 关节坐标
NRC_MCS = 1, ///< 世界坐标
NRC_PCS = 2, ///< 工具坐标
NRC_UCS = 3 ///< 用户坐标
};
调用函数NRC_SetCurrentCoord(NRC_COORD coord)
切换当前坐标系,其中参数 coord 是讲当前坐标系切换至该坐标系参照上述枚举类型 enum NRC_COORD,当然下面同样需要通过调用函数NRC_COORD NRC_GetCurrentCoord()
来获取当前坐标系。
坐标转换
关节转换成直角
可以使用函数NRC_PositionACStoMCS(NRC_Position& posACS, NRC_Position& posMCS)
可以将机器人关节坐标值转换为直角坐标值,posACS 要进行转换的关节坐标值,posMCS 转换的结果通过其返回。
直角转换成关节
同理可以调用函数NRC_PositionMCStoACS(NRC_Position& posMCS, NRC_Position& posACS)
将机器人直角坐标值转换为关节坐标值,posMCS 要进行转换的直角坐标值,posACS 转换的结果通过其返回,retval =0 转换成功,retval = -1 转换失败。