ros系列—解决文件改名导致节点无法启动问题及ros::NodeHandle nh与nh(“~“)的理解

运行系统:Ubuntu18.04

运行环境:python2.7.17

ROS初学者 - 记录

问题描述:无意间改动了功能包名称及launch文件名称,无法启动节点,出现如下错误:

1)catkin_make编译失败

CMake Error at /opt/ros/melodic/share/catkin/cmake/catkin_package_xml.cmake:54 (message):
  catkin_package_xml() package name 'pcl' in
  '/home/ryy/desktop/pc_segmentation/ray_ground_filter/src/ray_filter/package.xml'
  does not match current PROJECT_NAME 'ray_filter'.  You must call project()
  with the same package name before.
Call Stack (most recent call first):
  /opt/ros/melodic/share/catkin/cmake/catkin_package.cmake:99 (catkin_package_xml)
  ray_filter/CMakeLists.txt:9 (catkin_package)

问题分析: 上述错误为package.xml中的功能包名称与当前功能包名称不一致。

问题解决:找到package.xml文件,将其<name>改为当前功能包名称即可,重新编译,问题解决。

 2)启动节点失败

在上述编译成功后,在另一终端启动launch文件出现如下错误:

问题分析:错误为在当前功能包中无法找到相应的可执行文件,可执行文件已在launch文件中写入。

查看launch文件:其中pkg为当前功能包名,type为当前节点的可执行文件名,name定义当前节点运行的名称,覆盖ros::init()中的名称。

<launch>
    <node pkg="ray_filter" type="pcl_test_node" name="pcl_test" output="screen"/>
</launch>

问题解决:在CMakeLists.txt文件的add_executable()行查看当前节点的可执行文件名是否与launch文件中的type相同。若否,将launch文件中的type改为当前节点的可执行文件名,重新启动节点,问题解决。




问题描述:将句柄中的nh("~")改为nh,出现如下错误:

<arg name="ground_point_topic" default="/points_ground"/>

 <node pkg="plane_fitting" type="plane_fitting_node" name="plane_fitting" output="screen">
     <param name="ground_point_topic" value="$(arg ground_point_topic)"/>
 </node>

问题分析:上述问题在于实际发布的话题名为[/],而上图中的parameters中可以看出应发布的话题名为 当前节点名/话题名。

 ros::NodeHandle nh;

 ros::NodeHandle nh(“~”);

两者的区别为:前者实际发布的话题名仅为定义的话题名,后者实际发布的话题名为 节点名/定义的话题名

问题解决:

1)不采用<param>形式定义话题名,在创建publisher时直接赋名。

2)使用ros::NodeHandle nh("~")创建节点句柄。

但好像能用nh时用nh("~")也没问题,反过来就不行??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值