3.2.2 stage_ros2仿真框架搭建

本节开始,我们将介绍如何通过stage_ros2自定义仿真环境。

1.准备工作

首先请创建一个功能包,指令如下:

ros2 pkg create demo_stage_sim --dependencies stage_ros2

然后在功能包下新建launch、world、config目录,并修改功能包下的CMakeLists.txt文件,添加如下代码:

install(DIRECTORY launch world config DESTINATION share/${PROJECT_NAME})

其中,launch目录用于存储launch文件,config用于存储rviz2的配置文件,world用于存储仿真相关文件。world目录中请新建maps目录,并将课程配套资料中的图片素材复制进去。

2.搭建代码框架

在功能包的launch目录下,新建stage_sim.launch.py文件,并输入如下内容:

import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch_ros.actions import Node


def generate_launch_description():

    this_directory = get_package_share_directory('demo_stage_sim')

    return LaunchDescription([
        Node(
            package='stage_ros2',
            executable='stage_ros2',
            name='stage',
            parameters=[{
                "world_file": os.path.join(this_directory,'world','sim.world')}],
        )
    ])

该launch文件将运行stage_ros2节点,并加载world目录下的sim.world文件。

在world目录下,新建sim.world文件,并输入如下内容:

# -----------------------------------------------------------------------------
# 设置窗体
# 设置模拟器地图分辨率(以 米/像素 为单位)
resolution 0.02
# 设置模拟器的时间步长(以 毫秒 为单位)
interval_sim 100

sim.world文件当前只是声明了仿真环境的一些通用参数。

3.编译

终端中进入当前工作空间,编译功能包:

colcon build --packages-select demo_stage_sim

4.执行

当前工作空间下,启动终端,并输入如下指令:

. install/setup.bash
ros2 launch demo_stage_sim stage_sim.launch.py

执行该launch文件后,将生成一个窗口,该窗口中并无任何内容,下一步我们就可以着手创建具体的仿真内容了。

5.world文件参数

摘要和默认值

name                      <worldfile name>
interval_sim              100
quit_time                 0
resolution                0.02
show_clock                0
show_clock_interval       100
threads                   0

详解

  • name <string>

    用于世界的识别名称,例如在图形用户界面的标题栏中使用。

  • interval_sim <float>

    每次调用 World::Update() 时运行的模拟时间量。每个模型都有其自己可配置的更新间隔,可以大于或小于此值,但比此值更短的间隔在图形用户界面或 World 更新回调中是不可见的。您可能不需要改变默认值100毫秒:此值在客户端内部使用,如Player和WebSim。

  • quit_time <float>
    在模拟时间达到指定的秒数后停止模拟。在 libstage 中,World::Update() 返回 true。在带有图形用户界面的 Stage 中,模拟被暂停。在没有图形用户界面的 Stage 中,Stage 会退出。

  • resolution <float>
    底层位图模型的分辨率(以米为单位)。较大的值可以加快射线追踪速度,但会以碰撞检测和感知精度为代价。通常情况下,默认值是一个合理的选择。

  • show_clock <int>

    如果非零,每经过 $show_clock_interval 次更新就在标准输出上打印模拟时间。这对于观察非 GUI 模拟的进展非常有用。

  • show_clock_interval <int>

    设置在启用 $show_clock 的情况下,在标准输出上打印时间之间的更新次数。默认值是每经过 10 秒模拟时间打印一次。较小的值会稍微降低模拟速度。

  • threads <int>

    要生成的工作线程数。一些模型可以并行更新(例如激光器、测距仪),在这里运行 2 个或更多线程可能会使模拟运行更快,取决于可用的 CPU 内核数量和世界文件的情况。如果您有启用并行的高分辨率模型(例如带有数百或数千个样本的激光器或大量模型),则每个内核使用一个线程。

results matching ""

    No results matching ""