Moveit学习笔记 (一) ——如何使用urdf建立一个简单的机器人模型

工作环境:ubuntu+ros
需要用到的package:
rviz,urdf,joint_state_publisher
运行dpkg -l 看看是否装齐了

学习之前需要掌握的技能:

  • 新建工作空间
  • 新建package
  • 安装package

本文我们教大家学习怎么用urdf建如下的两自由度机器人模型
在这里插入图片描述
1.什么是urdf以及xacro?
urdf(unified robot discription format)统一机器人描述格式,顾名思义是用来描述定义机器人的,告诉电脑哪个是link哪个是joint以及模型的几何信息,xacro你则可以把它当作简化的urdf。
2.准备工作
2.1新建工作空间
我们新建一个simulation_ws工作空间专门用来存放学习仿真时相关的package(也就是我所理解的项目)

mkdir -p ~/simulation_ws/src   //把基本文件夹新建好
cd ~/simulation_ws/
catkin_make                    //编译
source devel/setup.bash    //添加到ros环境

2.2新建package(也就是所谓的project)
下面的语句逐条执行

cd ~/simulation_ws/src
catkin_create_pkg RRrobot_description urdf

3.新建并编辑我们的模型代码
3.1新建xacro模型文件

mkdir RRrobot_description/urdf
cd RRrobot_description/urdf/
touch RRrobot.xacro

去到目录打开RRrobot.xacro文件并添加模型代码,urdf语法看这里

<?xml version="1.0"?>

<robot name="moonknight" xmlns:xaro="http://www.ros.org/wiki/xacro">

	<!--Base part-->
	<link name="baselink">
		<visual>
			<origin rpy="0 0 0" xyz="0 0 0"/>
			<geometry>
				<cylinder radius="0.1" length="0.08"/>
			</geometry>
		</visual>
	</link>
	<joint name="baselink_link1" type="revolute">
		<axis xyz="0 0 1"/>
		<limit effort="1000.0" lower="-1.57" upper="1.57" velocity="0.3"/>
		<origin rpy = "0 0 0" xyz="0 0 0"/>
		<parent link="baselink"/>
		<child link="link1"/>
	</joint>

	<!--Arm part-->
	<link name="link1">
		<visual>
			<origin rpy="0 0 0" xyz="0 0.4 0.08"/>
			<geometry>
				<box size="0.06 0.8 0.06"/>
			</geometry>
		</visual>
	</link>

	<joint name="link1_link2" type="revolute">
		<axis xyz="0 0 1"/>
		<limit effort="1000.0" lower="-3.14" upper="3.14" velocity="0.5"/>
		<origin rpy = "0 0 1.57" xyz="0 0.8 0"/>
		<parent link="link1"/>
		<child link="link2"/>
	</joint>

	<link name="link2">
		<visual>
			<origin rpy="0 0 0" xyz="0 0.4 0.08"/>
			<geometry>
				<box size="0.06 0.8 0.06"/>
			</geometry>
		</visual>
	</link> 

        <!--End effector part-->
        <joint name="link2_link3" type="prismatic">
		<axis xyz="0 0 1"/>
		<limit effort="1000.0" lower="-0.1" upper="0.1" velocity="0.3"/>
		<origin rpy = "0 0 0" xyz="0 0.8 0"/>
		<parent link="link2"/>
		<child link="link3"/>
	</joint>

	<link name="link3">
		<visual>
			<origin rpy="0 0 0" xyz="0 0 0.08"/>
			<geometry>
				<box size="0.06 0.06 0.2"/>
			</geometry>
		</visual>
	</link>

</robot>

注意:urdf文件里千万不要有中文注释,不然rviz会报错,类似这种

UnicodeEncodeError: 'ascii' codec can't encode character u'\u884c' in position 530: ordinal not in range(128)

至此建模的工作其实算是完成了,但是在正式使用这个模型之前我们需要切切实实的看一下我们第一次建出来的模型长什么样子以及对应的关节能不能动。接下来我们来看一下我们的模型。
4.新建并编辑launch文件

要看urdf模型需要用到rviz,要动关节需要用到joint_state_publisher,因此我们通过launch来一次性管理这两个节点。launch wiki

4.1 首先新建launch文件夹和launch文件

mkdir ~/simulation_ws/src/moonknight_description/launch
cd src/RRrobot_description/launch/
touch rviz.launch

4.2 去到目录打开launch文件并添加如下代码

 <launch>

  <!-- 定义了一个叫"robot_description"的parameter存放在param server 
       且这个parameter是后面commond的执行结果形成的string
       这个commond的意思是找到xacro包并执行xacro程序把如下地址的xacro转成urdf文件-->
  <param name="robot_description" command="$(find xacro)/xacro --inorder $(find RRrobot_description)/urdf/RRrobot.xacro"/>

  <!-- 定义了一个节点叫"robot_state_publisher",这个节点执行"robot_state_publisher"包里的
       "state_publisher"程序,作用是发布robot状态信息-->
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/>

  <!-- 定义了一个节点叫"rviz",这个节点执行"riz"包里的"rviz"程序,作用是显示机器人模型-->
  <node name="rviz" pkg="rviz" type="rviz"/>

  <!-- 定义了一个节点叫"joint_state_publisher",这个节点执行"joint_state_publisher"包里的"joint_state_publisher"程序,作用是发布关节信息。并且定义了值为True的局部变量use_gui-->
  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
    <param name="use_gui" value="True"/>
  </node>

</launch>

5.编译运行来查看我们建好的模型

cd ~/simulation_ws/
catkin_make
source devel/setup.bash 
roslaunch RRrobot_description rviz.launch

第一次运行时rviz并不会正常显示模型,需要设置一些配置

  1. 首先去到Display——Fixed Frame选则baselink
  2. 然后点击Add添加rviz——RobotModel
  3. 再根据自己的喜好设置要显示什么信息

如果不保存config,以后重新打开rviz都要重新设置一遍,因此可以点击file——save config as保存到launch文件夹里命名为config.rviz。再打开之前的launch file ,把第9行改成

<node name="rviz" pkg="rviz" type="rviz" args="-d $(find RRrobot_description)/launch/config.rviz"/>

这样以后都不用重新配置了。
以下是rviz结果(urdf文件有所更新但是图没有更新,加了末端执行器,后面的图片跟真实结果会有点不一样,不过大致上差不多)
在这里插入图片描述
可以调整一下joint大小验证模型是否正确
在这里插入图片描述
结果长这样
在这里插入图片描述
大功告成。

你可以使用ROS MoveIt提供的功能将机械臂的URDF模型转换为机器人的DH参数接口。MoveIt一个用于机器人运动规划和控制的ROS软件包,它提供了各种工具和接口来处理机器人URDF模型。 首先,确保你已经安装了ROSMoveIt软件包。然后,按照以下步骤进行操作: 1. 创建一个新的ROS软件包用于存储你的机器人配置文件。可以使用以下命令创建软件包: ```bash $ catkin_create_pkg my_robot_description moveit_core moveit_ros_planning_interface ``` 2. 将你的URDF模型文件放置在软件包的`urdf`目录下。如果你没有URDF模型文件,可以使用SolidWorks等CAD工具来创建一个,并将其导出为URDF格式。 3. 在软件包的`config`目录下创建一个新的MoveIt配置文件,例如`my_robot.srdf`。在这个文件中,你可以定义机器人的关节限制、碰撞对象等信息。你可以参考MoveIt官方文档来了解如何编写这个文件。 4. 在软件包的`launch`目录下创建一个新的Launch文件,例如`demo.launch`。在这个文件中,你需要加载MoveIt的规划接口和机器人模型。以下是一个示例Launch文件的内容: ```xml <launch> <!-- Load the URDF model --> <param name="robot_description" command="$(find xacro)/xacro.py '$(find my_robot_description)/urdf/my_robot.urdf'" /> <!-- Load the SRDF model --> <param name="robot_description_semantic" textfile="$(find my_robot_description)/config/my_robot.srdf" /> <!-- Load the MoveIt configuration --> <include file="$(find moveit_config)/launch/move_group.launch" /> </launch> ``` 5. 运行Launch文件,启动MoveIt规划接口和机器人模型: ```bash $ roslaunch my_robot_description demo.launch ``` 6. 在ROS命令行中,使用MoveIt提供的API来访问机器人的DH参数接口。你可以使用Python或C++编写脚本来实现这点。以下是一个使用Python的示例代码: ```python import rospy import moveit_commander rospy.init_node('my_robot_dh_interface', anonymous=True) robot = moveit_commander.RobotCommander() # 获取机器人的DH参数 dh_params = robot.get_current_state().get_joint_state().dh # 打印DH参数 for param in dh_params: print(param) ``` 这样,你就可以将机器人URDF模型转换为DH参数接口,并使用MoveIt进行机器人的运动规划和控制了。请注意,DH参数是种描述机器人关节和链接之间几何关系的方法,可以用于运动学计算和路径规划等任务。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值