我正在尝试在Gazebo模拟器的世界文件中生成随机框。 我知道如何创建模型sdf,以及如何从world文件中包含它。
现在我想使用xacro和width / height参数在world文件中创建不同大小的框。
我无法让它发挥作用。 请帮助:)
答案 0 :(得分:3)
嗯,我将要描述的是另一种设计,它可以作为您问题的解决方法,它类似于以下步骤:
第1步:将对象创建为参数化良好的xacro文件 (所有参数都包含在同一个文件中)。在Xacro URDF page中可以找到关于HowTO的好教程(在此处包含的时间太长)。
第2步:将您的xacro包含在凉亭机器人启动文件中并测试它到目前为止工作。 可以找到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中以便在发布时进行检索。
希望能帮助,干杯!
答案 1 :(得分:0)
您还可以在.launch文件中添加这个小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选项,但这显然是可选的。