catkin_make 遇到的问题

编译之后,运行时出现这样的结果

重新编译后依然如此,只好删掉build文件夹里对应的文件,再编译后就没问题了

内存不足

catkin_make之所以有时报错内存不足,有时正常,是因为编译是按拓扑顺序,可能同时编译了move_base和teb_local_planner这两个耗内存大的包,导致报错

.so file truncated

  1. catkin_make中途 ctrl+C 造成
  2. 运行程序时,直接从VMWare关闭虚拟机

新package放入工作空间无法识别

一个新的package放入工作空间后,是不能直接识别的,无论source setup.bash还是catkin_make --pkg都不行,必须先对整个工作空间catkin_make,此时才会识别它

不同工作空间的同名package

要尽量避免这种情况,否则会混乱。此时如果有问题,用echo $ROS_PACKAGE_PATH查看环境变量包含的ROS工作空间

Could not find GTest

执行catkin_make时,有时会报错Could not find GTest,这是由于缺少测试模块,加-DBUILD_TESTING=OFF可以避免测试。

不要移植工作空间,只移植src

把ROS的工作空间转移到另一台电脑上会编译失败,build和devel里有很多文件会构成影响,即使二者的用户名一样也不行。所以每次只能复制src文件夹,放到另一台电脑的工作空间里。

我的一个自定义msg,将整个工作空间移植到另一台电脑,编译没出错,但是echo出错,好像rostopic不被识别一样:
rostopic echo 出错.png

find_package(catkin) 无法识别catkin

使用qt-ros-plugin,不知怎么操作,导致find_package(catkin)无法识别catkin,不能在任何工作空间编译,其他命令都正常。利用whereis catkin找到路径,删除相应文件,然后重装ROS

命令catkin_init_workspace:Initializes a catkin workspace by creating a top-level CMakeLists.txt.
这个命令最好不要用,创建工作空间还是新建文件夹,然后进入执行catkin_make

程序 catkin_make 尚未安装

执行catkin_make时,报错:,执行roscd等命令也提示没有安装,感觉就像是没有装ros一样。解决方法: source /opt/ros/kinetic/setup.bash

编译某个包时缺少头文件

编译禾赛雷达的驱动HesaiLidar_General_ROS,结果报错PandarScan.h: No such file or directory. 然后又catkin_make一次,竟然成功了。这时去devel/include里可以看到缺少的头文件了。 应当是第一次编译时确实缺少,然后接着编译剩下部分,此时就生成头文件了。 再编译第二次,原来需要头文件的地方就编译成功了。
参考: HesaiLidar_General_ROS/issues/24

clock skew detected

clock skew detected.png

出现这个警告是由于时钟不同步导致的,即系统时间比文件修改时间早,换到另一个Linux系统切换可能会出现这个问题。

如果在不同计算机之间传输文件,可能出现这种报警,是由于二者的UTC对时不同。现象是文件的修改时间比当前的系统时间还要晚。可能会导致某些不该编译的文件编译,或者该编译的没有编译。

在受影响的文件夹内执行一次 touch *即可永久修正这一问题。

依次执行下列指令即可

1
2
3
find . -type f | xargs -n 5 touch
catkin_make clean
catkin_make

将所有文件都重新touch一遍,更新到本地系统的时间,再make就没问题了。

The dependency target “nav_msgs_gencpp” of target does not exist

1
2
3
4
5
6
7
8
CMake Warning (dev) at planners/pure_pursuit_local_planner/CMakeLists.txt:57 (add_dependencies):
Policy CMP0046 is not set: Error on non-existent dependency in
add_dependencies. Run "cmake --help-policy CMP0046" for policy details.
Use the cmake_policy command to set the policy and suppress this warning.

The dependency target "nav_msgs_gencpp" of target
"pure_pursuit_local_planner" does not exist.
This warning is for project developers. Use -Wno-dev to suppress it.

可能加一句

1
2
3
add_dependencies(${PROJECT_NAME}
${PROJECT_NAME}_gencfg
${PROJECT_NAME}_generate_messages_cpp)