c++ 如何在启动文件中定义参数?

sc4hvdpw  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(123)

我有下面的启动文件,我在其中定义了一个参数:

<launch>
<arg name="coordinates_file" value="$(find pkg_name)/name_of_the_txt_file.txt"/>
  <node pkg="pkg_name" type="ros_node_name" name="launch_file_name">
    <rosparam file="$(arg coordinates_file)"/>
  </node>
</launch>

另外,我在ros_node中阅读如下参数:

ros::NodeHandle nh("~");
  std::string param="waypoints_cordinates.txt";
  std::string wp_file;
  wp_file = nh.getParam("wp_file", param);
  std::cout << "param1" << param  << std::endl;
  std::cout << "param" << wp_file  << std::endl;

在对上述启动文件执行roslaunch时,我遇到了以下错误:

RLException: error loading <rosparam> tag: 
        'param' attribute must be set for non-dictionary values
XML is <rosparam file="$(arg wp_file)"/>
The traceback for the exception was written to the log file

你能帮我解决这个问题吗?我错过了创建和阅读参数的任何部分吗?!

bzzcjhmw

bzzcjhmw1#

Rosparam通常用于一次设置多个ROS参数。出现此问题的原因是没有任何内容作为参数传递给rosparam标记,因此rosparam认为用户试图将单个参数设置为某个值,但没有提供要在参数服务器上设置的参数名称。错误消息与此类用法有关:<rosparam param="a_list">[1, 2, 3, 4]</rosparam>.
要解决您的问题,您需要将有效的文件名传递给启动文件。请参阅此处的文档。在命令行中,它将是roslaunch your_launch_file.launch coordinates_file:=your_file_name。如果您要包括来自另一个启动文件的文件,则该启动文件中需要以下内容:

<include file="$(find your_package)/launch/your_launch_file.launch">
    <arg name="coordinates_file" value="your_file_name"/>
</include>

相关问题