机械臂urdf_单臂机械手编程教程自学

(57) 2024-05-29 09:01:01

我是厂妹 扩充一下上一篇内容。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

工具标定包含两个部分:工具运动学标定和工具动力学标定。一个工具由运动学属
性(约束工具末端轨迹运动)和动力学属性(约束机械臂有负载时的速度加速度等
动力学参数)组成
。工具标定分为了三个标定界面,分别为工具标定、工具运动学
标定、工具动力学标定。应先标定工具的运动学参数和动力学参数,再进入工具标
定界面,为工具选择一个运动学和动力学属性,输入工具名称,之后添加工具。

机械臂urdf_单臂机械手编程教程自学 (https://mushiming.com/)  第1张

 

根据基础坐标系运动操作

机械臂urdf_单臂机械手编程教程自学 (https://mushiming.com/)  第2张

 按照视频,坐标系中,单位是米和度数

机械臂轴动(运动函数)***

//机械臂轴动

public static extern int rs_move_joint (UInt16 rshd, double[] joint_radia, bool isblock);

机械臂urdf_单臂机械手编程教程自学 (https://mushiming.com/)  第3张

这是运动中最重要的函数,运动操作就看这个函数了。因为我们已知的是坐标系xyz,需要逆解化为六关节角度。

设置基于基座系运动偏移量

//设置基于基座标系运动偏移量
public static extern int rs_set_relative_offset_on_base (UInt16 rshd, ref MoveRelative relative);

机械臂urdf_单臂机械手编程教程自学 (https://mushiming.com/)  第4张

获取机械臂当前位置信息

 //获取机械臂当前位置信息
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);

机械臂urdf_单臂机械手编程教程自学 (https://mushiming.com/)  第5张

 逆解姿态***

 //逆解
 public static extern int rs_inverse_kin (UInt16 rshd, double[] joint_radia, ref Pos pos, ref Ori ori, ref wayPoint_S waypoint);

机械臂urdf_单臂机械手编程教程自学 (https://mushiming.com/)  第6张

 基坐标系转基坐标得到末端位置和姿态

//基坐标系转基座标得到工具末端点的位置和姿态
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);

根据用户坐标系运动操作

机械臂urdf_单臂机械手编程教程自学 (https://mushiming.com/)  第7张

进阶版操作

THE END

发表回复