我是厂妹 扩充一下上一篇内容。C#引用的C生成的DLL,所以直接一起介绍,部分不同会写出来
目录
头文件和引用部分
初始化和主要参数
根据基础坐标系运动操作
机械臂轴动(运动函数)***
设置基于基座系运动偏移量
获取机械臂当前位置信息
获取机械臂当前状态
逆解姿态***
基坐标系转基坐标得到末端位置和姿态
根据用户坐标系运动操作
进阶版操作
C使用的是rsdef.h文件
C#使用的libserviceinterface.dll,记得引用和添加在库里
步骤为初始化-》登录-》启动
初始化函数:rs_initialize
登录函数:rs_login
启动函数:rs_robot_startup
具体使用可参考官方给的example文本:
bool example_login(RSHD &rshd, const char * addr, int port)
{
bool result = false;
rshd = RS_FAILED;
//初始化接口库
if (rs_initialize() == RS_SUCC)
{
//创建上下文
if (rs_create_context(&rshd) == RS_SUCC )
{
//登陆机械臂服务器
if (rs_login(rshd, addr, port) == RS_SUCC)
{
result = true;
//登陆成功
std::cout<<"login succ"<<std::endl;
}
else
{
//登陆失败
std::cerr<<"login failed"<<std::endl;
}
}
else
{
//创建上下文失败
std::cerr<<"rs_create_context error"<<std::endl;
}
}
else
{
//初始化接口库失败
std::cerr<<"rs_initialize error"<<std::endl;
}
return result;
}
bool example_robotStartup(RSHD rshd)
{
bool result = false;
//工具的动力学参数和运动学参数
ToolDynamicsParam tool_dynamics = {0};
//机械臂碰撞等级
uint8 colli_class = 6;
//机械臂启动是否读取姿态(默认开启)
bool read_pos = true;
//机械臂静态碰撞检测(默认开启)
bool static_colli_detect = true;
//机械臂最大加速度(系统自动控制,默认为30000)
int board_maxacc = 30000;
//机械臂服务启动状态
ROBOT_SERVICE_STATE state = ROBOT_SERVICE_READY;
if (rs_robot_startup(rshd, &tool_dynamics, colli_class, read_pos, static_colli_detect, board_maxacc, &state)
== RS_SUCC)
{
result = true;
std::cout<<"call robot startup succ, robot state:"<<state<<std::endl;
}
else
{
std::cerr<<"robot startup failed"<<std::endl;
}
return result;
}
我强调一下C#的startup函数
[DllImport ("libserviceinterface.dll", EntryPoint = "rs_robot_startup", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern int rs_robot_startup (UInt16 rshd, ref ToolDynamicsParam tool, byte colli_class, bool read_pos, bool static_colli_detect, int board_maxacc, ref int state);
参数:
rshd 械臂控制上下文句柄
tool dynamics 动力学参数
colli class 碰撞等级
read pos 是否允许读取位置
static colli detect 是否允许侦测静态碰撞
board maxacc 接门板允许的最大加速度state 机械臂启动状态
返回:
RS SUCC 成功 其他失败
动力学参数dynamics_param
工具标定包含两个部分:工具运动学标定和工具动力学标定。一个工具由运动学属
性(约束工具末端轨迹运动)和动力学属性(约束机械臂有负载时的速度加速度等
动力学参数)组成。工具标定分为了三个标定界面,分别为工具标定、工具运动学
标定、工具动力学标定。应先标定工具的运动学参数和动力学参数,再进入工具标
定界面,为工具选择一个运动学和动力学属性,输入工具名称,之后添加工具。
按照视频,坐标系中,单位是米和度数
//机械臂轴动
public static extern int rs_move_joint (UInt16 rshd, double[] joint_radia, bool isblock);
这是运动中最重要的函数,运动操作就看这个函数了。因为我们已知的是坐标系xyz,需要逆解化为六关节角度。
//设置基于基座标系运动偏移量
public static extern int rs_set_relative_offset_on_base (UInt16 rshd, ref MoveRelative relative);
//获取机械臂当前位置信息
public static extern int rs_get_current_waypoint (UInt16 rshd, ref wayPoint_S waypoint);
//获取机械臂当前状态
public static extern int rs_get_robot_state (UInt16 rshd, ref int state);
//逆解
public static extern int rs_inverse_kin (UInt16 rshd, double[] joint_radia, ref Pos pos, ref Ori ori, ref wayPoint_S waypoint);
//基坐标系转基座标得到工具末端点的位置和姿态
public static extern int rs_base_to_base_additional_tool (UInt16 rshd, ref Pos flange_center_pos_onbase, ref Ori flange_center_ori_onbase, ref ToolInEndDesc tool_pos, ref Pos tool_end_pos_onbase, ref Ori tool_end_ori_onbase);
//添加全局路点用于轨迹运动
public static extern int rs_add_waypoint (UInt16 rshd, double[] joint_radia);
//清除所有已经设置的全局路点
public static extern int rs_remove_all_waypoint (UInt16 rshd);
//轨迹运动
public static extern int rs_move_track (UInt16 rshd, int sub_move_mode, bool isblock);