【机器人操作系统(ROS)中的机械臂仿真】

1. 前言

本文介绍如何为简单的 4 自由度机器人手臂创建 ROS 包,并在 Rviz 中模拟预定义的关节路径

在这里插入图片描述

机器人通常很昂贵,并且很容易受到损坏以及与自己或周围环境的不良交互。三维仿真是一种在机器人应用程序开发过程中进行测试和快速迭代的可持续方法。机器人操作系统(ROS)是多种机器人软件工具的中间件,还提供Rviz和Gazebo等模拟平台。

本文介绍如何为简单的 4 自由度机器人手臂创建 ROS 包,并在 Rviz 中模拟预定义的关节路径。代码存储库可以在 GitHub 上找到。

2. 什么是机械臂?

机械臂是上个世纪最常见的机器人。它们由多个致动器和无源链节构成,形成一个致动链,可用于使用不同的末端执行器操纵物体。它们在装配、钻孔、加工、拾取和放置和其他应用的工业和个人设置中非常有用。机器人手臂可以分别具有用于旋转或线性运动的蜗壳或棱柱形关节。
在这里插入图片描述

3. 设计机械臂

在本文中,我们设计了一个简单的机器人手臂,具有四个蜗壳关节和一个棱柱形关节。机器人™与 ROS 的交互需要包含机器人运动学、视觉和碰撞模型表示的通用机器人™描述格式 (URDF) 文件。处理机器人动力学的应用也可能需要惯性模型。

Robotic_Arm_Simulation_AK_MP_image1.png

定义机械臂 URDF 文件的步骤(图像来源 - 原始)

URDF文件是一个XML文件,具有专用的标记,用于物理特征,如链接的材料和颜色。对于机器人链接的 3D 视觉表示,使用<视觉></可视>标签。它们携带有关几何体的信息(在<几何></几何>标签内),这些信息可以是通常以几何中心为中心的原始形状,也可以是具有3D建模软件本身中定义的中心的网格。

URDF 支持使用基元形状或 3D 网格(如 COLLADA 和 STL 文件)进行可视化表示。碰撞模型类似于<碰撞></碰撞>标签中的视觉模型,但理想情况下,3D 模型的表示形式更粗糙。链路的惯性模型在<惯性> </惯性>标签中定义,并包含有关质量和惯性矩阵的信息。

关节在<关节></关节>中定义,其中包含有关原点、旋转轴、父链和子链以及位置、速度、加速度和力的限制的信息。它们通常还具有摩擦和阻尼系数值。

包中提供的 URDF 文件 robot_arm.urdf 由基元框(长方体)和圆柱体组成。它没有连接任何末端执行器。机器人描述准备就绪后,按照步骤创建ROS包以模拟设计。

4. 模型设计

ROS本质上是高度模块化的,允许为机器人的每个方面使用多种工具和服务。对于此模拟任务,请使用 ROS Kinetic 在 Ubuntu 16.04 环境中执行以下步骤。

Robotic_Arm_Simulation_AK_MP_image3.png

模拟任务中涉及的步骤(图像来源 - 原始)

设置ROS:使用官方网站上的以下步骤安装ROS
创建 ROS Catkin 工作区:

akshay@akshay:~$ mkdir -p catkin_ws/src
akshay@akshay:~$ cd catkin_ws
akshay@akshay:catkin_ws$ catkin_make
akshay@akshay:~$ source devel/setup.bash

在 catkin_ws/src 文件夹中下载并解压缩提供的 ROS 仿真包 (robot_arm_simulator):

akshay@akshay:~$ cd catkin_ws/src
// Download and extract the folder or clone the github repository here
akshay@akshay:catkin_ws/src$ cd ../
akshay@akshay:catkin_ws$ catkin_make
akshay@akshay:catkin_ws$ source devel/setup.bash

robot_arm_simulator包具有此文件结构。
Robotic_Arm_Simulation_AK_MP_image5.png

ROS包文件结构(图片来源-原文)

启动 - 包含所有启动文件
src - 包含发布联合指令的节点
urdf - 包含机器人的 URDF 模型
rviz - 包含 Rvix 模拟器的默认配置

5. 了解启动文件

启动文件 simulate.launch 负责启动 roscore 主服务和在 Rviz 中进行可视化的其他必要节点。

<launch>
	<arg name="model" default="$(find robot_arm_simulator)/urdf/robot_arm.urdf"/>

	<arg name="rvizconfig" default="$(find robot_arm_simulator)/rviz/urdf.rviz" />

	<param name="robot_description" command="$(find xacro)/xacro --inorder $(arg model)" />

	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
		<rosparam param="source_list">["joint_states_interpolated"]</rosparam>
	</node>
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />
</launch>

此启动文件将包内的 URDF 模型设置为 Rviz 可视化的robot_description参数。
它将提供的 Rviz 配置文件设置为 rvizconfig 参数。
它启动joint_state_publisher节点,该节点侦听有关joint_states_interpolated主题的sensor_msgs/JointState消息。该节点在joint_states主题上发布机器人收到的关节位置。joint_states_interpolated主题由 src/joint_state_publisher_node.py 中定义的自定义节点填充。
它还启动使用robot_description(上面设置)的robot_state_publisher节点,并侦听机器人的joint_states主题。该节点负责使用关节位置和向前运动学为机器人创建运动链。

6. 了解自定义节点

src/joint_state_publisher_node.py节点有一个 ROS 用户监听机器人™当前的关节位置。它为机器人创建一个随机的关节目标,然后发布ROS执行周期每次迭代的插值关节目标位置。下图说明了已完成的执行。

Robotic_Arm_Simulation_AK_MP_image4.png

节点操作(图片来源 - 原始)

7. 运行机械臂模拟

若要运行模拟,请执行以下步骤:

在终端中,运行 roslaunch robot_arm_simulator simulate.launch 这将打开 Rviz 模拟器,机器人模型可见,但还不能™移动。
在另一个终端中,运行 rosrun robot_arm_simulator joint_state_publisher_node.py。
这将运行上面解释的自定义ROS节点,机器人开始执行命令它的随机目标。

Robotic_Arm_Simulation_AK_MP_image2.png

带有机器人模型、TF 框架和关节的 Rviz (图片来源 - 原始)

8. 结果和结论

ROS是一个相当简单的机器人软件开发入门工具。此处提供的ROS软件包很容易用于虚拟机器人的仿真。该软件包可以尝试使用机器人关节的不同更有意义的目标位置、不同的插补、不同的操作频率和不同的运动学特征。

本系列文章的下一部分将介绍如何扩展包,以将相同的目标命令发布到实际机器人,以进行实时模拟和可视化。

猜你喜欢

转载自blog.csdn.net/vor234/article/details/129643197