运行系统: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("~")也没问题,反过来就不行??