使用 xacro 为 Gazebo 创建世界文件

Creating world file for Gazebo with xacro

我正在尝试在 Gazebo 模拟器的世界文件中生成随机框。 我知道如何创建模型 sdf,以及如何从世界文件中包含它。

现在我想使用 xacro 和 width/height 参数在世界文件中创建不同大小的框。

我无法让它工作。 请帮助:)

好吧,我要描述的是一种替代设计,它可以作为您问题的解决方法,它的步骤如下:

第 1 步将对象创建为参数化良好的 xacro 文件 (所有参数都包含在同一个文件中)。可以在 Xacro URDF page 中找到有关 HowTO 的一个很好的教程(太长而无法包含在此处)。

第 2 步将您的 xacro 包含在 gazebo-robot 启动文件中并测试它到现在为止工作正常。 可以找到这样的示例 in PR2 description here:

<!-- Convert an xacro and put on parameter server -->
<param name="robot_description" command="$(find xacro)/xacro.py $(find pr2_description)/robots/pr2.urdf.xacro" />

<!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model pr2" />

第 3 步如果您将对象视为要在凉亭世界中发射的机器人,则为其创建传递参数的解决方案(在 xacro 文件中) 可以通过使用 prefix:=$(arg value) 传递所需的参数,如下所示 (explained in here):

<param name="robot_description" command="$(find xacro)/xacro.py '$(find my_robot_description)/urdf/my_robot.urdf.xacro' prefix:=$(arg ns)" />    
in the xacro file you can simply get the passed argument using $(arg prefix)

这样,您可以在 xacro 文件中创建对象,使用 ROS 启动文件在 Gazebo 中启动它,并根据您需要的值对其进行调整。

此外,ROS 启动文件还可以将参数传递给它的内容,因此,您的值也可以直接通过命令行更新:

roslaunch your_package launch_file.launch a:=1 b:=5

或存储在 parameter server 中以便在启动时检索。

希望对您有所帮助,干杯!

您还可以在 .launchfile 中添加这个 ROS 小节点,以将 .xacro 转换为 .whatever:

  <node name="xacro" pkg="xacro" type="xacro" args="--inorder -o $(find YOURPKG)/PATH_TO_FILE/NAME.sdf_OR_WHATEVER_EXTENSION_YOU_WANT_FOR_FINAL_FILE $(find pkg)/PATH_TO_FILE/NAME.sdf.xacro" />

基本上你 运行 具有 4 个参数的 xacro 节点。最后两个是文件的路径。首先是您要创建的文件的名称(和位置),其次是 .xacro 原始文件。在我的例子中,我添加了 find pkg 选项,但这显然是可选的。