【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>
相关推荐
内核程序员kevin43 分钟前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
小陈phd2 小时前
OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算
人工智能·opencv·计算机视觉
‘’林花谢了春红‘’3 小时前
C++ list (链表)容器
c++·链表·list
Guofu_Liao3 小时前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
机器视觉知识推荐、就业指导5 小时前
C++设计模式:建造者模式(Builder) 房屋建造案例
c++
朝九晚五ฺ5 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
自由的dream5 小时前
Linux的桌面
linux
xiaozhiwise6 小时前
Makefile 之 自动化变量
linux
Yang.997 小时前
基于Windows系统用C++做一个点名工具
c++·windows·sql·visual studio code·sqlite3