【ROS2】【2025】Simulate a 6DoF Robotic Arm in Gazebo and ROS2

news/2025/2/9 5:40:37 标签: 机器人, linux, 算法

在本教程中,将学习如何从头开始模拟机械臂。我们将使用 Doosan Robotics 的 6DoF 机械臂。Gazebo 和 ROS2 是执行此模拟的软件。所有代码、URDF 和配置文件都可以在我的 gitee 存储库中找到和下载。

https://gitee.com/kong-yue1/robotic_arm_environment.githttps://gitee.com/kong-yue1/robotic_arm_environment.githttps://gitee.com/kong-yue1/robotic_arm_environment.git

一、Installation Packages and Run the Simulation(安装包并运行仿真)

1.1 create your workspace(创建工作空间)

source /opt/ros/foxy/setup.bash
mkdir -p ros2_ws/src
cd ..
colcon build

1.2 Install some dependencies and necessary packages(安装一些依赖项和必要的软件包)

sudo apt install python3-vcstool
sudo apt install ros-humble-test-msgs
sudo apt install ros-humble-control-toolbox
sudo apt install ros-humble-gazebo-ros-pkgs
sudo apt install ros-humble-xacro
sudo apt install ros-humble-joint-state-publisher-gui

​1.3 download and build  in your workspace the following packages(在工作区中下载并构建以下软件包)

1.3.1 ros2_control 

cd /ros2_ws

通过wget命令从GitHub下载ros2_control的依赖文件ros2_control.repos。

wget https://raw.githubusercontent.com/roscontrols/ros2_control/master/ros2_control/ros2_control.repos

使用vcs工具将ros2_control.repos文件中定义的依赖项导入到src目录中。 

vcs import src < ros2_control.repos
colcon build

1.3.2 gazebo_ros2_control

cd ros2_ws/src
git clone -b humble https://github.com/ros-simulation/gazebo_ros2_control.git
cd ..
colcon build​​

Make sure to install these packages FROM SOURCE, and point to the correct branch (humble) otherwise, some problems could appear.

确保从 SOURCE 安装这些包,并指向正确的分支 (FOXY),否则可能会出现一些问题。

1.4 Now you can clone our repository in your workspace and build the whole workspace.(工作区中克隆我们的存储库并构建整个工作区)

cd ros2_ws/src
git clone https://github.com/dvalenciar/robotic_arm_environment.git
cd ..
colcon build

PS.也可以使用码云克隆。

git clone https://gitee.com/kong-yue1/robotic_arm_environment.git

1.5 Now open a new terminal and write the following lines(打开一个新终端并编写以下行)

cd ros2_ws
. install/setup.bash
ros2 launch my_doosan_pkg my_doosan_gazebo.launch.py

1.6 Open another new terminal and write the following lines(打开另一个新终端并写入以下行)

cd ros2_ws
. install/setup.bash
ros2 launch my_doosan_pkg my_doosan_rviz.launch.py

If the installation was correct and you did not get any error, Gazebo will be open and you should be able to see a beautiful simulation of the robotic arm.  Also, Rviz will be launched, and you can move the robot using the joint state publisher window.

如果安装正确并且您没有收到任何错误,Gazebo 将打开,您应该能够看到机械臂的美丽模拟。此外,还将启动 Rviz,您可以使用联合状态发布者窗口移动机器人

二、Step by Step Configuration(分步配置)

2.1 Create your ROS package(创建您的 ROS 包)

We will start creating the ROS package where you will use for your simulation. This package will contain all the code, configuration files and launchers, but first thing first, let's create a python package.

我们将开始创建您将用于模拟的 ROS 包。此包将包含所有代码、配置文件和启动器,但首先,让我们创建一个 python 包。

cd /ros2_ws/src/
ros2 pkg create --build-type ament_python my_doosan_pkg --dependencies rclpy
cd ..
colcon build --packages-up-to my_doosan_pkg

Now that you have created your packages, we will be creating the necessary folders that will contain the descriptions and config files.

现在您已经创建了包,我们将创建必要的文件夹,其中包含描述和配置文件。

cd my_doosan_pkg
mkdir config description launch rviz worlds

Have a look inside in your my_doosan_pkg folder you should have something like this

看看你的 my_doosan_pkg 文件夹中,你应该有这样的东西

 2.2 Add the meshes files(添加网格文件)

正如我之前提到的,我们将使用 Doosan Robotics 的 6 DoF 机械臂,因此,我们需要构成该机器人的每个部件的 3D 原型(即 CAD 中的 3D 模型)。模拟器需要这些文件来创建可靠而逼真的模拟。本教程将使用 DAE 文件。

我已经为您提供了所有 DAE 文件(我之前已从 Doonsa Robotic Repository 中排序和下载),因此您必须在 /description 文件夹中创建一个名为 /meshes 的新文件夹,并添加包含所有必要网格文件的完整 /a0912_blue 文件夹。您可以从存储库获取这些文件此处 (LINK)。

2.3 Write the XACRO-URDF files(编写 XACRO-URDF 文件)

现在,我们将创建 URDF-Xacro 文件。这些文件非常重要,因为包含一个树结构,说明如何从链接和关节方面保持机器人身体。基本上,这些文件告诉模拟器如何以及在何处找到每个链接和关节。此外,您还可以在此处导入网格(之前保存在 meshes 文件夹中的 DAE 文件)。因此,在 /description 文件夹中,您需要创建一个名为 xacro 的新文件夹。在该 /xacro 文件夹中,您必须创建一个扩展名为 .xacro 的文件(在我们的例子中,您将此文件称为 macro.a0912.blue.xacro)。

让我们从 xacro 文件中的第一个链接 (base) 和第一个关节开始。在 visual 和 collision 标签内有一个名为“mesh”的标签,这是为每个链接添加网格文件的位置。您必须对组成机器人的所有链接和关节执行此作。这可能是一项非常困难和乏味的工作,但是,大多数商用机器人都包含此描述,或者可以使用外部软件自动生成。 

我在这个 xacro 文件中手动包含的是阻尼和摩擦参数(这些参数不包含在原始的 Doosan xacro-urdf 中)。但经过长时间的分析,我发现这些参数有助于机器人在模拟过程中看起来更坚固,还可以防止机器人做出奇怪的动作,尤其是在关节方面。

2.4 Control plugins and configurations(控制插件和配置)

原始 Doosan 存储库不包含的另一个非常重要的事情(至少我找不到它)是在 urdf-xacro 文件中使用了必要的ros2_control和gazebo_ros2_control插件(也许这就是他们提到原始存储库不使用最新版本ros2_control运行的原因)。因此,我创建并添加了此文件,使本教程与最新的 ros2_control 版本完全兼容。

因此,在 /xacro 文件夹中,您创建了一个新文件,并将其命名为 macro.gazebo_config_control.xacro。此文件将包含 ros2_control 标记并定义一个系统。我们将从主 xacro 文件 (macro.a0912.blue.xacro) 调用此文件。因此,让我们为每个关节添加 ros2_control 标签和必要的配置(命令接口和可能的状态接口)。

此外,在此文件中,您必须加载 gazebo 插件和控制器的配置文件。

包含控制器设置的配置文件。因此,在 /config 文件夹中,您将创建一个新的 XML 文件,名为 simple_controller.yaml。

此文件一目了然;它包含控制器的类型以及控制器将应用到的关节。在我们的例子中,我们将使用 Joint Trajectory Controller --> Position Controller。

2.5 Launch files and Setup configuratio (启动文件和设置配置)

我们已经到了开始创建代码来模拟 Gazebo 中的机械臂的地步。因此,我们将创建一个启动文件,这将帮助我们启动所有必要的文件和包。在 /launch 文件夹中,我们必须创建一个新文件;我们已将此文件命名为 my_doosan_gazebo_controller.launch.py

我们开始导入所有必要的库,然后从包的 share 目录中读取 xacro 文件。然后,我们将执行 is robot_state_publisher,它将机器人的所有状态发布到 TF 并将它们放在参数服务器上。下一步将加载 gazebo 世界并生成我们的机器人。最后,我们将加载并启动我们的控制器(之前在 config/*.yaml 文件中定义)。下图是我们启动文件的完整示例:

当您在 ROS2 中使用 python 包时,您需要配置 setup.py 文件,以便 ROS 找到您刚刚创建的文件夹和文件。因此,请打开您的 setup.py 并在 data_files 括号内添加以下行: 

最后,保存所有这些文件,然后构建包并启动它,如下所示:

cd ros2_ws
colcon build --packages-up-to my_doosan_pkg
. install/setup.bash
ros2 launch my_doosan_pkg my_doosan_gazebo_controller.launch.py

 2.6 Node file for Trajectory(轨迹的节点文件)

我们已经到达了本教程的最后一部分,也可能是最有趣的部分,我们将机器人的关节移动到特定点。我们将使用 action-client 编写一个 ROS 节点,以发送移动机械臂关节的请求。因此,在 /my_doosan_pkg 文件夹中,您需要创建一个新的 python 文件。我们称此文件为 joint_points_act_service.py

我们必须定义正确的消息,包括联合轨迹类型、所需的目标、延迟和关节名称,以便控制器执行作

在这里,您也必须将此 python 文件添加到 setup.py 文件中才能执行,并且 ROS 可以运行它 最后,保存所有这些文件,然后重新构建包并在新终端中运行它,如下所示:

. install/setup.bash
ros2 run my_doosan_pkg trajectory_points_act_server

三、Gazebo 和 ROS2 中 6DoF 机械臂的强化学习环境

学习内容: 

  • 自定义 RL 环境

  • 生成移动机械臂的动作

  • 在 Gazebo 中模拟您的机械臂

  • 在 RVIZ 2 中可视化您的机械臂

关于强化学习:
        
强化学习问题正式建模为马尔可夫决策过程 (MDP)。有限 MDP 被描述为一个五元组〈S、A、T、R γ 〉其中 S 是一组有限的状态,A 是一组有限的可能动作,T 是一个转换函数(即处于状态 s ∈ S 中∈ A 将导致状态 s' 的概率),R 是一个奖励函数(即从状态 s 转换到状态 s' 后获得的奖励), 最后γ ∈ [0,1] 表示 discount 参数。MDP 的目标是为每个状态找到最佳行动或决策,以最大化未来的回报。换句话说,目标是找到最佳策略 π*,它详细描述了在哪个状态下必须采取什么行动,以便最大化任何给定状态的奖励。

 3.1 启动仿真

我们在之前的教程并安装了所有必要的包,克隆了我们的存储库并在工作区中成功构建了包,我们将运行我们的自定义 RL 环境,以便您可以了解我们将从此存储库中获得什么。

3.1.1 在构建此存储库后,打开一个新终端并写入:

cd ros2_ws
. install/setup.bash
ros2 launch my_environment_pkg my_environment.launch.py

如果安装正确并且您没有收到任何错误,Gazebo 将打开,您应该能够看到您的机械臂和一个绿色球体(目标点)。启动文件将加载并启动控制器,加载并生成机器人和球体,最后加载所有必要的配置。

3.1.2 是时候激活我们的 RL 环境了,所以打开一个新的终端并运行以下命令:

cd ros2_ws
. install/setup.bash
ros2 run my_environment_pkg run_environment

您将看到机器人将如何开始移动(通过随机动作),直到完成一定数量的步骤。之后,环境将重置;因此,机械臂将返回到其初始位置,并且球体将移动到新位置。这将一直发生,直到剧集数结束。

您可以在 python 文件 run_environment.py 中查看和修改步骤数和集数,并查看奖励值、状态和执行的作。在此文件中,您可以添加 RL 算法并训练机器人根据您的需要执行特定作。

3.2 环境特征

构成此 RL 环境的每个组件都可以根据您的需要进行修改或调整。您可以在 main_environment.py

当前版本由以下机构确认:

  • state-space = [机器人终端效应器位置 (x,y,z), 关节状态 (关节 1,关节 2,关节 3,关节 4,关节 5, 关节 6), 目标位置 (x,y,z)]

  • 作空间 = [位置 Joint1, 位置 Joint2, 位置 Joint3, 位置 Joint4, 位置 Joint5, 位置 Joint6]

  • 奖励 = 代理(机器人)将为每个作步骤获得 -1 的奖励,但如果达到目标(绿色球体),则奖励值为 100


http://www.niftyadmin.cn/n/5845594.html

相关文章

FreeRTOS的事件组

1 创建事件组 xEventGroupCreate EventGroupHandle_t xEventGroupCreate( void ) { EventGroup_t *pxEventBits;/* 分配事件组内存。*/pxEventBits ( EventGroup_t * ) pvPortMalloc( sizeof( EventGroup_t ) );if( pxEventBits ! NULL ){pxEventBits->uxEventBits 0; …

uniapp中使用uCharts折线图X轴数据间隔显示

1、先看官网 https://www.ucharts.cn/ 2、设置代码 "xAxisDemo3":function(val, index, opts){if(index % 2 0){return val}else {return }}, 再在数据中引入设置好样式

Django开发入门 – 1.搭建基于Python Web框架Django的IDE开发环境

Django开发入门 – 1.搭建基于Python Web框架Django的IDE开发环境 Build A Integrated Development Environment(IDE) for Python Web Framework - django By JacksonML 1. 获取及安装最新版Python 打开Chrome浏览器&#xff0c;访问Python官网链接&#xff1a;https://www…

Windows下AMD显卡在本地运行大语言模型(deepseek-r1)

Windows下AMD显卡在本地运行大语言模型 本人电脑配置第一步先在官网确认自己的 AMD 显卡是否支持 ROCm下载Ollama安装程序模型下载位置更改下载 ROCmLibs先确认自己显卡的gfx型号下载解压 替换替换rocblas.dll替换library文件夹下的所有 重启Ollama下载模型运行效果 本人电脑配…

《Java核心技术 卷II》本地化的数字格式

数字格式 数字和货币的格式高度依赖locale。 格式化对象的集合&#xff0c;可以对java.text包中的数字进行格式化和解析。 格式化数字值 对特定locale的数字进行格式化的步骤&#xff1a; 得到Locale对象使用工厂方法得到一个格式器对象。使用这个格式器对象来完成格式化解析工…

AI知识库和全文检索的区别

1、AI知识库的作用 AI知识库是基于人工智能技术构建的智能系统&#xff0c;能够理解、推理和生成信息。它的核心作用包括&#xff1a; 1.1 语义理解 自然语言处理&#xff08;NLP&#xff09;&#xff1a;AI知识库能够理解用户查询的语义&#xff0c;而不仅仅是关键词匹配。 …

kafka服务端之日志磁盘存储

文章目录 页缓存顺序写零拷贝 Kafka依赖于文件系统&#xff08;更底层地来说就是磁盘&#xff09;来存储和缓存消息 。 那么kafka是如何让自身在使用磁盘存储的情况下达到高性能的&#xff1f;接下来主要从3各方面详细解说。 页缓存 页缓存是操作系统实现的一种主要的磁盘缓存…

R包:ggalign调整和组合多个图形的R包

文章目录 介绍案例安装R包教程1教程2参考 介绍 这个包扩展了ggplot2&#xff0c;提供了用于对齐和组织多个图的高级工具&#xff0c;特别是那些自动重新排序观察结果的工具&#xff0c;比如树形图。它提供了对布局调整和情节注释的精细控制&#xff0c;使您能够创建复杂的、出…