碰到的bug,解决方法

问题解决


1.[build] Error: Unable to find source space /home/xxx/src

在新建的工作空间下进行 catkin build 编译工作空间,工作空间下没有产生 devel, logs, build 文件,但是用catkin_make编译,就没有问题。

在这里插入图片描述
看一下编译过程,发现编译的 workspace 是在主目录下,并没有在新建的工作空间 Planner 下编译,而是在它的根目录下编译。由于我的主目录下有一个 src 文件,所以编译没有报错,在主目录下产生了 devel, logs, build 文件。

如果主目录没有 src 文件,就会报错 :Error: Unable to find source space /home/yue/src ,没有找到源文件。
始终不能在目标工作空间下编译。

➡ 新建的工作空间被锁定,无法进行catkin build 编译
解决

  1. 在主目录下 ctrl + h 显示隐藏文件;
  2. 删除文件夹 .catkin_tools

再重新新建工作空间,在工作空间根目录进行 catkin build 编译。
编译成功!


2.planner.cpp:(.text+0x6d6):对‘TrajectoryGeneratorTool::SolveQPClosedForm(int, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, -1, 1, 0, -1, 1> const&)’未定义的引用

实现在一个cpp文件中调用另一个cpp文件class定义的成员函数,出现报错未定义引用。

在这里插入图片描述
一直以为是没有调用成功,修改了好几种调用方式;
实际上是Cmake文件在添加cpp文件的时候没有添加add_executable,所以在编译的时候没有编译到新加的cpp文件,但是在初始化class后,如果没有调用成员函数并不会报错,所以会认为是调用的方式问题。

解决:

  1. 在CMakeLists.txt 中add_executable后添加cpp文件
  2. 重新编译

在这里插入图片描述
在这里插入图片描述

编译成功!

添加cpp文件要记得在CMakeLists.txt 中生成可执行文件目标指令add_executable 后添加源文件。

3.ROS订阅话题的 subscribe 重载问题

在这里插入图片描述在订阅消息的时候,subscribe 缺少一个参数,后面加上一个参数指针this。


4.rviz 插件无法加载问题

在这里插入图片描述
根据教程出现了如上错误。这是没有加载rviz_plugins。

sudo apt-get install ros-melodic-rviz-rviz-plugins

安装完成后如果还是报错,检查工作空间中是否有rviz_pulgin 功能包,没有的话需要添加。下载文件夹:rviz_pulgins
将文件夹解压后作为一个功能包;
放在工作空间src目录下,重新编译;
source 一下
重新roslaunch即可
成功载入插件


5.gazebo仿真插件iris_downward_depth_camera.sdf 报错

[vehicle_spawn_yue_HP_288_Pro_G6_Microtower_PC_24187_3369715323510675347-5] process has died [pid 24244, exit code 1, cmd /opt/ros/melodic/lib/gazebo_ros/spawn_model -sdf -file /home/yue/PX4_Firmware/Tools/sitl_gazebo/models/iris_downward_depth_camera/iris_downward_depth_camera.sdf -model iris -x 0 -y 0 -z 0 -R 0 -P 0 -Y 0 __name:=vehicle_spawn_yue_HP_288_Pro_G6_Microtower_PC_24187_3369715323510675347 __log:=/home/yue/.ros/log/394ec706-6c95-11ed-b588-bce92fa545dc/vehicle_spawn_yue_HP_288_Pro_G6_Microtower_PC_24187_3369715323510675347-5.log].
log file: /home/yue/.ros/log/394ec706-6c95-11ed-b588-bce92fa545dc/vehicle_spawn_yue_HP_288_Pro_G6_Microtower_PC_24187_3369715323510675347-5*.log

在这里插入图片描述
gazebo成功运行,但是iris无人机上没有摄像头,只有一个小盒子,也没有图像话题。

在这里插入图片描述因为Gazebo寻找模型的顺序,是先在~/.gazebo/models/下寻找,然后在其他路径寻找,所以在往PX4 SITL复制models时,要注意~/.gazebo/models/下有没有同名文件(比如 ~ /.gazebo/models/下默认有stereo_camera),有的话要么将该同名文件删去,要么替换该同名文件。如果在仿真过程中出现了某个部件为白色方块的情况,大概率是因为~/.gazebo/models/下有和PX4_Firmware/Tools/sitl_gazebo/models重复的模型,此时删掉 ~ /.gazebo/models/下的模型文件即可

6.关于 catkin_simple 报错

在这里插入图片描述

Could not find a package configuration file provided by “catkin_simple”
with any of the following names:

catkin_simpleConfig.cmake
catkin_simple-config.cmake

Add the installation prefix of “catkin_simple” to CMAKE_PREFIX_PATH or set
“catkin_simple_DIR” to a directory containing one of the above files. If
“catkin_simple” provides a separate development package or SDK, be sure it
has been installed.

找不到catkin_simple工能包,解决办法:

cd $(write down your workspace)/src
git clone git@github.com:catkin/catkin_simple.git
cd $CATKIN_WS
catkin_make

7.找不到 -lpose_utils

在这里插入图片描述
Errors << odom_visualization:make /home/yue/catkin_ws/logs/odom_visualization/build.make.000.log
/usr/bin/ld: 找不到 -lpose_utils
collect2: error: ld returned 1 exit status
make[2]: *** [/home/yue/catkin_ws/devel/.private/odom_visualization/lib/odom_visualization/odom_visualization] Error 1
make[1]: *** [CMakeFiles/odom_visualization.dir/all] Error 2
make: *** [all] Error 2

解决方法:
用locate命令定位XXX库文件

locate libXXX.so

在这里插入图片描述

定位结果:

/home/yue/.local/share/Trash/files/Utils/pose_utils/lib/libpose_utils.so

再用软链接将两者链接起来

sudo ln -s /home/yue/.local/share/Trash/files/Utils/pose_utils/lib/libpose_utils.so /usr/lib/libpose_utils.so

再编译就没问题了。


8.没有那个文件或目录 #include <multi_map_server/MultiOccupancyGrid.h>

fatal error: multi_map_server/MultiOccupancyGrid.h: 没有那个文件或目录
#include <multi_map_server/MultiOccupancyGrid.h>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
在这里插入图片描述
在使用无人机路径规划,fast planner 算法github开源代码时,产生的错multi_map_server/MultiOccupancyGrid.h: 没有那个文件或目录

解决方法:
工程文件可能包含很多个 include 文件夹,编译检索的不是我们目标的文件夹
把报错缺失的头文件复制到其他的 include 路径文件下
将之前编译产生的build devel logs 文件夹删除后,重新编译。


9.没有那个文件或目录 #include <nlopt.hpp>

系统提示无法找到nlopt.hpp文件

#获取libnlopt
sudo apt-get install libnlopt-dev

安装完成后重新编译。


10.没有规则可制作目标

make[2]: *** 没有规则可制作目标“/usr/local/lib/libnlopt.so”,由“/home/yue/ws/
devel/.private/bspline_opt/lib/libbspline_opt.so” 需求。 停止。

在这里插入图片描述
将cmake中的link连接注释掉:
在这里插入图片描述


11.对‘tf2_ros::TransformBroadcaster::TransformBroadcaster()’未定义的引用

在这里插入图片描述
首先使用 rospack find tf2_tools 查看是否安装了 tf2_tools,如果没有则安装
但直接采用 sudo apt install tf2_tools 是无法安装成功的,会显示 E: 无法定位软件包 tf2_tools
应采用:

sudo apt install ros-melodic-tf2-tools

再次查看就可以看到已经安装成功了,并且显示了安装路径。

如果已经安装好了功能包,检查cmakelists文件中是否添加 tf2 功能包。


12.找不到功能包

在这里插入图片描述
如果找不到其他ROS的SDK包,可以直接使用命令下载即可,不属于本问题所述情况。

在当前报错中, caric_mission 包属于自建包,在其他功能包中调用了该功能包,其他执行文件需要访问该包,并运行包内的头文件,报错内容为找不到这个包。

解决方法:由于ros运行各个程序包是无序的,因此在在功能包中调用该包时,当前的功能包还没有运行,所以报错。解决报错按顺序执行,先运行caric_mission功能包,再运行其他包。

在调用功能包的cmake文件中添加被调用包的depend依赖:
<depend>caric_mission</depend>

添加后重新编译。

  • 确保被调用的功能包中 CmakeLists.txt 和 package.xml 文件都存在。
  • 如果error还是没有消除,重新装catkin tools 工具包,删除build devel文件重新编译,尝试使用catkin_make.

13.找不到 xxx 库

错误提示:
CMake Error at /home/yue/ws_caric/devel/share/caric_mission/cmake/caric_missionConfig.cmake:173 (message):
Project ‘caric_baseline’ tried to find library ‘caric_mission’. The
library is neither a target nor built/installed properly. Did you compile
project ‘caric_mission’? Did you find_package() it before the subdirectory
containing its code is included?
Call Stack (most recent call first):
/opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:76 (find_package)
CMakeLists.txt:12 (find_package)

在这里插入图片描述
Project ‘xxx’ tried to find library ‘A_package’. The library is neither a target nor built/installed properly. Did you compile project ‘A_package’? Did you find_package() it before the subdirectory containing its code is included?
报错提示中
修改:A_package的CMakeList.txt文件:
 catkin_package(
  INCLUDE_DIRS include
  #LIBRARIES A_package (这里要注释掉)
  CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
  DEPENDS system_lib )
在这里插入图片描述
重新编译,通过。

14. iris.sdf 文件不存在

[FATAL] [1700466756.344465, 0.000000]: Error: specified file /home/yue/PX4_Firmware/Tools/sitl_gazebo/models/iris/iris.sdf does not exist

在这里插入图片描述
安装px4,运行时出现文件路径下iris模型文件不存在的报错。模型路径下也没有iris.sdf文件。

在固件文件夹/PX4_Firmware/Tools/sitl_gazebo/models/iris 下先更新,

make clean
sudo apt-get update
sudo apt-get upgrade

完成后PX4_Firmware根目录重新编译

make px4_sitl_default gazebo

再打开固件文件夹/PX4_Firmware/Tools/sitl_gazebo/models/iris ,会产生一个iris.sdf文件。
iris模型可用。

15. PX4 仿真中进行预飞检查时出现了一些问题

WARN  [PreFlightCheck] Preflight Fail: Compass 1 uncalibrated
WARN  [PreFlightCheck] Preflight Fail: Accel 0 uncalibrated
WARN  [PreFlightCheck] Preflight Fail: Accel 1 uncalibrated
WARN  [PreFlightCheck] Preflight Fail: Accel 2 uncalibrated
WARN  [PreFlightCheck] Preflight Fail: Gyro 0 uncalibrated
WARN  [PreFlightCheck] Preflight Fail: Gyro 1 uncalibrated
WARN  [PreFlightCheck] Preflight Fail: Gyro 2 uncalibrated
INFO  [tone_alarm] notify negative

主要是与传感器(磁力计和加速度计、陀螺仪)的未校准有关。导致无人机无法解锁 armed值一直为false。
输入下列命令,清空电脑存储的仿真参数,再重新启动仿真,大概率问题就解决了。

rm ~/.ros/eeprom/parameters*
rm -rf ~/.ros/sitl*

如果问题仍然存在,尝试重新安装PX4,降低版本。

16. ubuntu wsl 操作见面可视化的时候xeyes有显示,gnome-session的时候黑屏

在这里插入图片描述

17. ImportError: libGL.so.1: cannot open shared object file: No such file or directory

不能打开共享对象文件:没有这样的文件或目录
在这里插入图片描述
对于ubuntu系统,安装opencv-python-headless:

pip install opencv-python-headless

问题解决。

18. px4无人机仿真 解锁失败 poll timeout 0,22

无人机软件控制 解锁超时问题
在这里插入图片描述
运行官网启动代码解锁无误 排除仿真环境问题
检查自己的软件解锁代码,需要给无人机发送合法的启动命令,(位置控制命令)才能进入offbord模式并且解锁。

19. OSError: [Errno 28] No space left on device

OSError: [Errno 28] No space left on device
Error in sys.excepthook:
Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/apport_python_hook.py”, line 155, in apport_excepthook
pr.write(f)
File “/usr/lib/python3/dist-packages/problem_report.py”, line 401, in write
file.write(v.replace(b’\n’, b’\n '))
OSError: [Errno 28] No space left on device

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/apport_python_hook.py”, line 155, in apport_excepthook
pr.write(f)
OSError: [Errno 28] No space left on device

系统或应用程序尝试写入数据的磁盘或分区已满。这会导致系统进程、应用程序或脚本无法正常运行。
可以检查 /var/log/ 目录,删除不需要的大日志文件

cd /var/log
sudo rm -r *

检查空间剩余。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聪明小張

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值