ego-planner__rviz创建新地图_操作
2025-08-26
控制算法
00
请注意,本文编写于 101 天前,最后修改于 73 天前,其中某些信息可能已经过时。

目录

1.安装绘图工具:
2.启动绘图环境:
3.在 RViz 中绘制地图:
4.保存绘制的地图:
5.在仿真中使用自定义地图(悬而未决)

在 RViz 中手动绘制一个自定义的三维点云地图(.pcd 文件),用于为 ego-planner的仿真提供环境模型。

具体步骤及其作用如下:

1.安装绘图工具:

  • 从 HKUST-Aerial-Robotics/FUEL的 GitHub 仓库中获取 map_generator功能包。

  • 将该功能包放入你的 ROS 工作空间。

  • 使用 catkin_make编译整个工作空间。这会将 map_generator包中的节点(可执行程序)编译出来,使你能够使用其中的地图生成和记录工具

bash
展开代码
docker run \ -e QT_X11_NO_MITSHM=1 \ -e DISPLAY \ --net=host \ --gpus all \ -v ~/.Xauthority:/root/.Xauthority:rw \ -v ~/tmp/.X11-unix:/tmp/.X11-unix:ro \ -v ~/out_home:/out_home \ -v /data/xiedong/cc_ws:/cc_ws \ -it kevinchina/deeplearning:ros-noetic-cuda11.4.2-v5 bash
bash
展开代码
# 创建ROS工作空间 终端1 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src # 从GitHub克隆FUEL仓库(如果尚未安装git:sudo apt-get install git) git clone https://github.com/HKUST-Aerial-Robotics/FUEL.git # 或者如果只需要map_generator,可以只克隆该包 # git clone https://github.com/HKUST-Aerial-Robotics/FUEL/tree/master/fuel_planner/map_generator # 返回工作空间根目录 cd ~/catkin_ws # 编译工作空间 catkin_make

完成了:

  1. 将 map_generator文件夹放在 ROS 工作空间的 src目录下 (e.g., ~/catkin_ws/src/)
  2. catkin_make根据 CMakeLists.txt文件中的指令,编译 map_generator包中的 C++ 源代码:

将 click_map_node.cpp(假设名) 编译成名为 click_map的可执行文件。

编译生成的可执行文件 (click_map, map_recorder, map_pub) 最终会出现在工作空间的 devel/lib/map_generator/目录下。catkin_make还会生成环境设置脚本 (devel/setup.bash)。

2.启动绘图环境:

  • 激活工作空间环境:
bash
展开代码
source devel/setup.bash

实现: 该脚本设置当前终端会话的环境变量。最关键的是修改 ROS_PACKAGE_PATH,将当前工作空间的路径(包含 map_generator)添加进去。这样,当运行 roslaunch、rosrun或 rviz时,ROS 就能找到工作空间内的功能包(如 map_generator, exploration_manager)和可执行文件(如 click_map)。

  • 启动一个预设好的 RViz 配置:
bash
展开代码
roslaunch exploration_manager rviz.launch

作用: 启动一个或多个 ROS 节点,并加载预设的 RViz 配置

这个终端窗口会被 roslaunch进程占用,显示 RViz 的启动日志和可能的运行时信息。无法在这个终端里再输入其他命令,因为它在等待 roslaunch进程结束

新开终端:

  • 同样导航到您的工作空间:
bash
展开代码
cd ~/catkin_ws #终端2

(如果您的工作空间路径不同,请修改)。

  • 同样激活工作空间环境:
bash
展开代码
source devel/setup.bash

(这必须在每个新终端里运行一次,以设置环境)。

  • 启动地图点击生成节点:
bash
展开代码
rosrun map_generator click_map

map_generator功能包中click_map节点的实现。这个节点负责监听RViz中的点击事件,并根据两个点击点生成一堵三维的墙

关键点:执行此命令后,终端看起来会卡住(“不会返回任何指令”),但这是正常现象,意味着节点已启动并等待接收 RViz 中的点击指令。

3.在 RViz 中绘制地图:

  • 在 RViz 的工具栏中,找到并选择 2D Nav Goal工具。

  • 在 RViz 的 3D 视图(通常是 TopDownOrtho或其他平面视图)中点击一次,设置一个起始点。

  • 再次在视图中的另一个位置点击一次,设置一个终止点。

  • 效果:点击完成后,程序会自动在起始点和终止点之间生成一个竖直的、长方体的“墙壁”障碍物。这条“墙”就是构成你自定义仿真环境的一个基本元素。

  • 重复: 你可以重复上述点击操作(选点 -> 选点),在场景的不同位置添加多条这样的墙壁,逐步构建出你想要的迷宫、房间或其他包含障碍物的三维环境结构。

4.保存绘制的地图:

  • 当你完成所有墙壁的绘制后,新开终端:
bash
展开代码
cd ~/catkin_ws # 终端3——进入您的工作空间目录 source devel/setup.bash # 激活ROS环境
  • 执行保存命令(运行地图保存命令,将地图保存到指定路径。注意,为了避免覆盖,建议指定一个完整的文件名(而不仅仅是目录)。例如,保存到主目录下并命名为mymap.pcd:)
bash
展开代码
rosrun map_generator map_recorder ~/mymap.pcd #或者,如果你想保存在当前目录(比如工作空间的某个文件夹中),可以这样: rosrun map_generator map_recorder $(pwd)/src/map_generator/resource/mymap.pcd

map_recorder节点会订阅当前已经发布在ROS系统中的点云地图(由click_map节点发布),并将该点云保存为PCD文件。因此,在运行这个命令时,确保click_map节点仍在运行(即终端2还在运行),并且你绘制的墙壁点云已经发布。

保存完成后,你可以在指定的路径(如主目录)找到这个.pcd文件。

  • 路径: ~/表示文件保存在当前用户的主目录 (/home/your_username/)下。

  • 文件名: 默认生成的文件名是 tmp.pcd。

  • 重要提示: 如果你要绘制多个不同的地图,必须在 ~/后面添加不同的文件名或子目录。例如:

bash
展开代码
rosrun map_generator map_recorder ~/map1.pcd

(保存为 map1.pcd)

bash
展开代码
rosrun map_generator map_recorder ~/mymaps/scenarioA.pcd

(保存到 mymaps子目录下)

如果每次都只用 ~/,新的 tmp.pcd文件会覆盖之前保存的同名文件。

  • 确认保存结果
bash
展开代码
ls -lh ~/your_map_name.pcd

命令执行后会显示保存信息(如点数、文件大小)

5.在仿真中使用自定义地图(悬而未决)

  • 将保存好的 .pcd文件(如 2tmp.pcd)复制或移动到你的仿真项目目录中(例如 map_generator功能包的 resource文件夹下,如示例所示)。

  • 修改启动仿真环境的 .launch文件。

  • 在 launch 文件中,添加一个 node声明来启动 map_generator包中的 map_pub节点:

<node pkg="map_generator" name="map_pub" type="map_pub" output="screen" args="$(find map_generator)/resource/2tmp.pcd"/>

  • pkg="map_generator": 指定功能包名。
  • name="map_pub": 给这个节点实例起个名字。
  • type="map_pub": 指定要运行的节点类型(对应编译出的可执行文件)。
  • output="screen": 将节点输出打印到终端屏幕(方便调试)。
  • args="(findmapgenerator)/resource/2tmp.pcd":最关键参数!它告诉mappub节点去加载哪个.pcd文件作为地图。(find map_generator)/resource/2tmp.pcd": 最关键参数! 它告诉 map_pub节点去加载哪个 .pcd文件作为地图。(find map_generator)会自动找到 map_generator包的安装路径,然后拼接上 /resource/2tmp.pcd得到地图文件的完整路径。你需要将 2tmp.pcd替换成你实际保存的地图文件名和相对路径。

当运行这个 .launch文件启动仿真时,map_pub节点就会读取指定的 .pcd文件,并将里面保存的三维墙壁信息发布为点云话题。路径规划算法(如 ego-planner)订阅这个话题,就能感知到这个自定义的环境地图,并在这个环境中进行路径规划和避障仿真。

本文作者:cc

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!