XML格式的launch文件启动后ros2 param list读取不到参数
-
我用XML格式写了一个ROS2的launch文件,如下:
<launch> <node pkg="gmc_sensor" exec="gnss_node" name="gnss_node"> <param name="gnss_ip_addr" value="192.168.8.1"/> <param name="gnss_net_port" value="11211"/> </node> </launch>
在c++的节点文件中,读取两个参数值。
this->declare_parameter("gnss_ip_addr"); bool ret = this->get_parameter("gnss_ip_addr", gnssIpAddr_);
节点文件被launch文件启动成功,正常运行。
同时,我在终端输入:ros2 param list
返回: Exception while calling service of node '/gnss_node': None
查了网上很多教程,也没搞清楚我到底哪里出错了。
请教,我的代码哪里有问题?为什么没有参数可查? -
@凌云 试试这个
ROS2的参数其实是用服务实现的,小鱼是怎么知道的呢?
随意运行一个节点,你使用下面的指令,就可以看到多出来很多的参数相关的服务。
ros2 service list
比如启动乌龟模拟器
ros2 run turtlesim turtlesim_node
多出来的这些服务就是用于操作这个节点的参数的/turtlesim/describe_parameters /turtlesim/get_parameter_types /turtlesim/get_parameters /turtlesim/list_parameters /turtlesim/set_parameters /turtlesim/set_parameters_atomically
我们如何使用服务查看参数呢?
手动调一下服务就行了~
ros2 service call /turtlesim/list_parameters rcl_interfaces/srv/ListParameters "{prefixes: [],depth: 0}"
这里可以看到结果里的四个参数
names=['background_b', 'background_g', 'background_r', 'use_sim_time']
采用
ros2 param list
再看看对不对ros2 param list
是不是长的一样总结
通过上面的实验告诉我们ROS2的参数操作其实就是通过服务通信方式实现的,获取参数列表,set和get操作就是操作相应的服务。