对接受的全局路径插值,导致move_base退出
abstract Welcome to my blog, enter password to read.
Read more
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)


避障后未能继续原路径
abstract Welcome to my blog, enter password to read.
Read more
使用GDB解决算法切换导致的多线程问题 (二)
abstract Welcome to my blog, enter password to read.
Read more
gprof在ROS中的配置

CMakeLists.txt中的catkin_package()之后,添加

1
2
add_compile_options(-pg)
set(catkin_LIBRARIES ${catkin_LIBRARIES} -pg)

默认情况,一个launch的所有节点都会把gprof输出到同一个文件。在<node>之前添加<env>部分,GMON_OUT_PREFIX环境变量表示了gprof的前缀

1
2
3
4
5
<env name="GMON_OUT_PREFIX" value="listener" />
<node name="listener" pkg="examples" type="listener" output="screen" />

<env name="GMON_OUT_PREFIX" value="talker" />
<node name="talker" pkg="examples" type="talker" output="screen" />

gprof文件会在~/.ros生成。

参考: gprof


tmux的使用

第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。

使用编号区分会话,不太直观,更好的方法是为会话起名 tmux new -s <session-name>

tmux ls命令可以查看当前所有的 Tmux 会话。

tmux attach命令用于重新接入某个已存在的会话。

1
2
3
4
5
# 使用会话编号
tmux attach -t 0

# 使用会话名称
tmux attach -t <session-name>

杀死某个会话

1
2
3
4
5
# 使用会话编号
tmux kill-session -t 0

# 使用会话名称
tmux kill-session -t <session-name>

tmux switch命令用于切换会话

1
2
3
4
5
# 使用会话编号
tmux switch -t 0

# 使用会话名称
tmux switch -t <session-name>


lsof命令解析进程
1
2
3
4
5
6
7
8
9
10
11
12
13
lsof abc.txt             //显示开启文件abc.txt的进程

lsof -c abc //显示abc进程现在打开的文件

lsof -c -p 1234 //列出进程号为1234的进程所打开的文件

lsof +d /usr/local/ //显示目录下被进程开启的文件

lsof +D /usr/local/ //同上,但是会搜索目录下的目录,时间较长

lsof -i //用以显示符合条件的进程情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]

使用后发现对文本文件、图片这样的文件不适用,对可执行文件适用。


Quaternion has length close to zero... discarding as navigation goal
abstract Welcome to my blog, enter password to read.
Read more
move_base received signal SIGABRT
abstract Welcome to my blog, enter password to read.
Read more
抛出错误 std__bad_alloc
abstract Welcome to my blog, enter password to read.
Read more