【问题标题】:Adding relative file paths in yaml (ROS)在 yaml (ROS) 中添加相对文件路径
【发布时间】:2017-05-17 03:48:54
【问题描述】:

这可能是非常基本的问题,但到目前为止我无法在其他任何地方得到答案。我想使用 roslaunch 连续运行 map_server 和 rviz 以可视化地图。这是我的启动文件的样子 -

<launch>
<node name="mapServer" pkg="map_server" type="map_server" 
    args="/home/<user_name>/catkin_ws/src/mapwork/img/map.yaml"/>
<node name="visualizer" pkg="rviz" type="rviz"/>
</launch>

它可以工作,但我不想硬编码 .yaml 文件位置,我更喜欢一种可以在启动文件中使用 yaml 相对位置的方法。关于我如何做到这一点的任何想法?

(启动文件的位置是-/home//catkin_ws/src/mapwork/launch/map.launch)

【问题讨论】:

  • 就像评论一样,cassinjas 的回答很好:roslaunch 运行目录~/.ros 中的所有内容,与启动文件的位置无关。这意味着您不能使用相对路径(或者如果您这样做,它们都必须与 ~/.ros 相关,这有点毫无意义)。
  • 好的,我会记住这一点。谢谢!

标签: ros


【解决方案1】:

从您的启动文件中,我假设mapwork 是一个包。如果是这种情况,您可以使用find package 命令如下:

<launch>
  <node name="mapServer" pkg="map_server" type="map_server" 
    args="$(find mapwork)/img/map.yaml"/>
  <node name="visualizer" pkg="rviz" type="rviz"/>
</launch>

$(find mapwork) 部分将在/home/&lt;user_name&gt;/catkin_ws 中运行source setup.bash 后返回包的路径。 这个 find 命令类似于 ros python 调用rospack find mapwork

【讨论】:

  • 嘿,谢谢你的提示。当我尝试时,“find mapwork”在终端中不起作用,但它似乎在启动文件中起作用。
  • 在 shell 中,您必须使用 rospack find mapwork,正如我之前描述的那样。
  • 是的,我也在 shell 中使用了 rospack find mapwork,它可以工作,但在 yaml 文件中却没有,你能解释一下为什么会这样吗?此外,您的答案中有一个不相关的小修正,通常 setup.bash 位于 /home//catkin_ws 的“devel”文件夹中。
  • 如果您尝试在 YAML 文件中执行这些命令,这将不起作用。 YAML 解释器是独立于 ROS 的库,并且 YAML 不指定任何脚本实用程序。另一方面,启动文件旨在执行$() 中的一组命令。不过,您可以在 C++ 中使用 ros::package::getPath(package_name),其中 package_name 是从 yaml 文件中读取的 mapwork。这将为您提供包路径。
  • 感谢您的帮助。咻!
猜你喜欢
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
相关资源
最近更新 更多