c++ 为什么我不能从ROS的启动文件中获取参数?

ca1c2owp  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(130)

我正在尝试制作一个带有两个节点的ros包,一个在python上开发,另一个在c++中开发,我想用launchfile读取一些参数。
当我尝试在launchfile中定义一个类似于下面的参数时,问题就出现了:

<?xml version="1.0" encoding="UTF-8"?>
<launch>

<!--#### MODIFY THESE VALUES ####-->

  <arg name="print_detect" default="true"/>

<!--#############################-->

  <!-- Nodos Python -->

  <!-- Nodos C++ -->
  <node name="yolo_result_processor" pkg="yolov8_inference" type="yolo_result_processor"  output="screen">
    <param name="print_detect" value="$(arg print_detect)"/>
    <!-- Configurar aquí los parámetros específicos para el nodo C++ -->
  </node>

</launch>

字符串
我尝试按如下方式阅读参数:

#INCLUDES#
#include <ros/ros.h>
bool printDetect = false;
int main(int argc, char** argv)
{
    ros::init(argc, argv, "yolo_result_processor");
    ros::NodeHandle nh;

    // Obtener el valor del parámetro "print_detect"
    if (nh.getParam("print_detect", printDetect)){
         std::cout << "printDetect = " << printDetect << std::endl;
    }else{
         ROS_ERROR("No se pudo obtener el valor del parametro 'print_detect'. Usando valor predeterminado.");
    }

    std::cout << "Running" << std::endl;

    // Suscribirse al mensaje YoloResult
    ros::Subscriber sub = nh.subscribe("yolo_result", 1, yoloResultCallback);

    ros::spin();

    return 0;
}


一切都正确编译,但当我使用以下命令启动节点时:

roslaunch <pkg_name> <launch_file>


它进入else语句并打印错误消息,就好像它无法获取参数一样。

oug3syen

oug3syen1#

通过删除与我试图在launchfile中读取的参数对应的所有行,并在初始化节点之前添加这一行来修复它:

<param name="print_detect" type="bool" value="true"/>

字符串
所以文件看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<launch>

<!--#### MODIFY THESE VALUES ####-->

  <param name="print_detect" type="bool" value="true"/>

<!--#############################-->

  <!-- Nodos Python -->

  <!-- Nodos C++ -->
  <node name="yolo_result_processor" pkg="yolov8_inference" type="yolo_result_processor"  output="screen">
  </node>

相关问题