【ROS】机器人系统仿真-URDF集成Rviz基本流程

机器人系统仿真**:**是通过计算机对实体机器人系统进行模拟的技术,在 ROS 中,仿真实现涉及的内容主要有三:对机器人建模(URDF)、创建仿真环境(Gazebo)以及感知环境(Rviz)等系统性实现。

1.URDF

URDF可以以一种 XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度.....,该文件可以被 C++ 内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件。

2.Gazebo

Gazebo是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。

运行命令 $gazebo

问题1:[Err] [REST.cc:205] Error in REST request

解决:$sudo gedit ~/.ignition/fuel/config.yaml

然后将url : https://api.ignitionfuel.org注释,添加url: https://api.ignitionrobotics.org

3.rviz

rviz以三维方式显示ROS消息,可以将 数据进行可视化表达。例如:可以显示机器人模型,可以无需编程就能表达激光测距仪(LRF)传感器中的传感 器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD, Point Cloud Data),从相机获取的图像值等。

运行命令 $rviz


下载素材

cpp 复制代码
$ git clone https://github.com/zx595306686/sim_demo.git

URDF集成Rviz基本流程

URDF 不能单独使用,需要结合 Rviz 或 Gazebo,URDF 只是一个文件,需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型。

需求描述:在Rviz中显示一个盒装机器人

实现流程:

1.准备:新建功能包,导入依赖

2.核心:编写 urdf 文件

3.核心:在 launch 文件集成 URDF 与 Rviz

4.在 Rviz 中显示机器人模型

1.创建功能包,导入依赖

创建一个新的功能包,名称自定义,导入依赖包:urdf、xacro

在当前功能包下,新建几个目录:

urdf:存储 urdf 文件的目录

meshes:机器人模型渲染文件(暂不使用)

config:配置文件

launch:存储 launch 启动文件

2.编写URDF文件

在urdf目录中新建一个urdf文件夹,文件夹中添加一个.urdf文件

cpp 复制代码
<robot name="mycar">
    <link name="base_link">
        <visual>
            <geometry>
                <box size="0.5 0.2 0.1" />
            </geometry>
        </visual>
    </link>
</robot>

3.在launch文件中集成URDF与Rviz

在launch目录下,新建一个 launch 文件,该 launch 文件需要启动 Rviz,并导入 urdf 文件,Rviz 启动后可以自动载入解析urdf文件,并显示机器人模型,核心问题:如何导入 urdf 文件? 在 ROS 中,可以将 urdf 文件的路径设置到参数服务器,使用的参数名是robot_description,示例代码如下

cpp 复制代码
<launch>
    <!--1.在参数服务器载入urdf文件-->
    <param name="robot_description" textfile="$(find 功能包名)/urdf/urdf/demo01_helloworld.urdf" />
    <!--2.启动rviz-->
    <node pkg="rviz" type="rviz" name="rviz" />
</launch>

运行launch文件 $roslaunch 功能包名 launch文件名

4.在Rviz中显示机器人模型

rviz 启动后,会发现并没有盒装的机器人模型,这是因为默认情况下没有添加机器人显示组件,需要手动添加,添加方式如下:

方框4:默认是map,将此处修改为urdf文件中机器人地盘名称即可正常显示。

5.优化rviz启动

重复启动launch文件时,Rviz 之前的组件配置信息不会自动保存,需要重复执行步骤4的操作,为了方便使用,可以使用如下方式优化:

将当前配置保存进config目录

方框3:保存在当前工作空间下的(步骤1新建的config文件夹)。

修改launch文件中rviz的配置

cpp 复制代码
<launch>
    <!--1.在参数服务器载入urdf文件-->
    <param name="robot_description" textfile="$(find urdf01_rviz)/urdf/urdf/demo01_helloworld.urdf" />
    <!--2.启动rviz-->
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf01_rviz)/config/show_mycar.rviz" />
</launch>
相关推荐
*TQK*18 分钟前
ZZNUOJ(C/C++)基础练习1031——1040(详解版)
c语言·c++·编程知识点
云空1 小时前
《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》
运维·人工智能·web安全·网络安全·开源·网络攻击模型·安全威胁分析
AIGC大时代1 小时前
对比DeepSeek、ChatGPT和Kimi的学术写作关键词提取能力
论文阅读·人工智能·chatgpt·数据分析·prompt
※DX3906※1 小时前
cpp实战项目—string类的模拟实现
开发语言·c++
深度Linux1 小时前
Linux网络编程中的零拷贝:提升性能的秘密武器
linux·linux内核·零拷贝技术
萌の鱼1 小时前
leetcode 2080. 区间内查询数字的频率
数据结构·c++·算法·leetcode
山晨啊82 小时前
2025年美赛B题-结合Logistic阻滞增长模型和SIR传染病模型研究旅游可持续性-成品论文
人工智能·机器学习
一水鉴天2 小时前
为AI聊天工具添加一个知识系统 之77 详细设计之18 正则表达式 之5
人工智能·正则表达式
davenian3 小时前
DeepSeek-R1 论文. Reinforcement Learning 通过强化学习激励大型语言模型的推理能力
人工智能·深度学习·语言模型·deepseek
X.AI6663 小时前
【大模型LLM面试合集】大语言模型架构_llama系列模型
人工智能·语言模型·llama