0


ROS学习之error解决记录

    整理一下平时遇到的问题,都是有效的解决方法奥。使用时注意自己的版本!!!

虚拟机系统版本:Ubuntu 20.04

ROS版本:Noetic 1.15.14

1、问题描述:CMake Error at /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package): Could not find a package configuration file provided by "catkin_virtualenv" with any of the following names:

catkin_virtualenvConfig.cmake
 catkin_virtualenv-config.cmake

Invoking "make cmake_check_build_system" failed

解决方法:

sudo apt-get install ros-noetic-catkin-virtualenv

通用套路:少什么包就下载什么包

sudo apt-get install ros-noetic-catkin_virtualenv

//紫色是缺少的包名,参考问题中的红色色标注

//橘色是ROS的版本,例如Ubuntu20.04是noetic ubuntu18.04是 melodic


2、问题描述:CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):Could not find a package configuration file provided by "geographic_msgs" with any of the following names:
geographic_msgsConfig.cmake
geographic_msgs-config.cmake

解决方法:同上套路

sudo apt-get install ros-noetic-geographic-msgs

3、问题描述:

/home/nb/catkin_ws_IMU_GPS/src/imu_gps_localization/imu_gps_localizer/src/imu_gps_localizer.cpp:3:10: fatal error: glog/logging.h: 没有那个文件或目录
3 | #include <glog/logging.h>
| ^~~~~~~~~~~~~~~~
compilation terminated.
make[2]: ***[imu_gps_localization/imu_gps_localizer/CMakeFiles/imu_gps_localizer_lib.dir/build.make:63:imu_gps_localization/imu_gps_localizer/CMakeFiles/imu_gps_localizer_lib.dir/src/imu_gps_localizer.cpp.o] 错误 1
make[2]: *** 正在等待未完成的任务....

解决方法:

sudo apt-get install libgoogle-glog-dev

4、问题描述:

/home/nb/catkin_ws_IMU_GPS/src/imu_gps_localization/imu_gps_localizer/include/imu_gps_localizer/imu_gps_localizer.h:3:10: fatal error: Eigen/Core: 没有那个文件或目录
3 | #include <Eigen/Core>
| ^~~~~~~~~~~~
compilation terminated.
解决方法:在相关工作空间的CMakeLists.txt下加入一行

include_directories("/usr/include/eigen3")        //加在CMakeLists.txt第一行更方便。

5、ERROR: launchpadlib 1.10.13 requires testresources, which is not installed.

解决方法:

sudo pip install launchpadlib   //通过pip方式安装launchpadlib

6、ERROR: rosdepc 0.21.3 has requirement rospkg>=1.3.0, but you'll have rospkg 1.2.6 which is incompatible.或者ERROR: rosdep 0.21.0 has requirement rospkg>=1.3.0, but you'll have rospkg 1.2.6 which is incompatible.

解决方法:

sudo pip install rosdep

或者

pip install rospkg==1.4.0

还有点小问题:目前rospkg已经大于1.3.0了,但是编译后报错说我的rospkg是1.2.6版本的。

搜到了这个回答:

“The error is what it says;

tensorboard

requires version 41.0.0 of

setuptools

or greater, and the version you have is only 40.6.2. This is a general class of problem (updating

setuptools

in your python package environment) that isn't really specific to TensorBoard so there's a limit to which we can help. You might try different ways to update your

setuptools

depending on where it's currently installed, e.g. python 2.7 - sudo pip install setuptools --upgrade error - Stack Overflow

All this said, the red message doesn't actually prevent you from using TensorBoard, so if that's the only thing that happened and it otherwise works, you can just continue to use it.”--->>>译文:“尽管如此,红色信息实际上并不会阻止你使用TensorBoard,所以如果这是唯一发生的事情,否则它是有效的,你可以继续使用它。”

所以我们可以忽略这个警告。


7、问题描述:RLException: [imu_gps_localization.launch] is not a launch file name
The traceback for the exception was written to the log file.

解决方法:

步骤1:回工作空间编译

catkin_make

步骤2:添加环境变量

source ./devel/setup.bash

第2个方案是在脚本里添加,好处是这个工作空间的环境变量以后都不用手动去添加了。详见:

【解决问题】RLException: [xx.launch] is neither a launch file in package [x] nor is [x] a launch file name_君琴的博客-CSDN博客


8、虚拟机检测不到USB? 或 ls: 无法访问 '/dev/ttyUSB*': 没有那个文件或目录

解决方法1:虚拟机->设置->USB控制器->USB兼容性->设置为USB3.1

解决方法2:把VMware USB Arbitration Service改为自动,建议把这四个都改为自动。

解决方法3:进入虚拟机->编辑->USB->连接->选择“询问要执行的操作”

解决方法4:巧合的是以上三个办法对我都没用,重新下载VMware就解决了。


9、error: could not open port /dev/ttyUSB0: [Errno 13] Permission denied: ‘/dev/ttyUSB0‘

    在IMU测试时,执行python文件时遇到了上述错误,原因:只有root用户和属于dialout组的用户才有读写的权限。

解决方法:

sudo usermod -aG dialout user    //user替换为自己的用户名
reboot 或 shutdown -r now        //重启一下生效

用户名查找方法: 打开终端,@前面就是自己的用户名,比如我的用户名就是nb


10、[imu-2] process has died [pid 5432, exit code 127] cmd/home/nb/handsfree/ handsfree_ros_ws /src/hands

IMU型号:A9 (如果是B6或B9就换一下文件)

解决方法:把红框中三个文件第一行的python改成python3,这样就可以兼容Ubuntu20.04版本。


11、u-center_v8.10 官方安全下载网址

http://zhaogis.com/Doc/ghydo/u-centersetup_v8.10.zip

千万别去这种网站下载,全是小广告,之前下了一次,垃圾软件删不掉只能重装系统。


12、夸克quark linux mini主机屏幕小,看不全终端信息。

解决方法1:使用键盘控制终端滚动条向上/下翻页

shift+pageup 或 shift+pagedown

解决方法2:把终端执行某一命令后的输出内容写到文本文件中

例如,查询ip地址:

ifconfig>ifconfig.txt

执行命令后,终端不会输出任何信息,要去当前目录下的ifconfig.txt文件查看。


13、GPS包编译报错如下:

/usr/bin/ld: CMakeFiles/ublox_gps_node.dir/src/node.cpp.o: in function ublox_node::UbloxNode::configureUblox()': node.cpp:(.text+0x84b5): undefined reference to ublox_node::UbloxNode::kResetWait'
/usr/bin/ld: /home/nb/catkin_ws_ublox_GPS/devel/lib/libublox_gps.so: undefined reference to `ublox_gps::Gps::kSetBaudrateSleepMs'
collect2: error: ld returned 1 exit status
make[2]: *** [ublox/ublox_gps/CMakeFiles/ublox_gps_node.dir/build.make:137:/home/nb/catkin_ws_ublox_GPS/devel/lib/ublox_gps/ublox_gps] 错误 1
make[1]: *** [CMakeFiles/Makefile2:4280:ublox/ublox_gps/CMakeFiles/ublox_gps_node.dir/all] 错误 2
make: *** [Makefile:141:all] 错误 2
Invoking "make -j4 -l4" failed

问题原因:这个包是为Ubuntu18.04的Melodic制作的,而我用的是Ubuntu20.04的Noetic。两者编译所需的C++标准不一样。目前遇到不止一次因为版本导致的错误,因此我打算换Ubuntu18.04,防止以后又出现奇怪的错误。

解决方法:

打开工作空间下的CMakeLists文件

$ sudo gedit ~/catkin_ws_ublox_GPS/src/ublox/ublox_gps/CMakeLists.txt

把c++11改为c++17(26行左右)


下面换为Ubuntu 18的版本了,大家注意奥!

虚拟机系统版本:Ubuntu 18.04

ROS版本:Melodic 1.14.13

14、Ubuntu和主机互相不能复制粘贴解决方法

    Ubuntu装完VMware Tools,仍然不能互相复制粘贴。

    原因是Ubuntu14.04开始open-vm-tools代替了官方 VMware Tools,不要安装官方的tools,应该改安装open-vm-tools。但是还是建议先装了VMware Tools,再装open-vm-tools。不要只装open-vm-tools,可能会出现未知错误吧。

    当我们已经成功装完“VMware Tools”后,还需要执行如下命令:

    1、先更新一下软件

sudo apt-get update //更新软件

    2、安装 open-vm-tools

sudo apt-get autoremove open-vm-tools //卸载已有的工具

sudo apt-get install open-vm-tools //安装工具

open-vm-tools sudo apt-get install open-vm-tools-desktop //安装open-vm-tools-desktop

    3、重启虚拟机就可以正常用”复制与粘贴“了。

shutdown -r now //重启


15、安装后,更新设置环境变量source ~/.bashrc时报错如下bash: /opt/ros/noetic/setup.bash: 没有那个文件或目录(ROS版本:melodic)

解决方法:

进入.bashrc

gedit .bashrc

注释 倒数第二行


16、问题:编译.msg或者.srv文件不生成头文件.h

    原因:CMakeLists.txt 和 package.xml文件缺少相关配置代码。

    解决方法:以.msg和.srv为例,可以应对绝大部分工况。

16.1 自定义消息message

    功能包:topic_demo123 ;自定义消息:gps.msg

    package.xml
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>message_generation</build_depend>      <!-- 增加的第1处 -->    
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>rospy</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <exec_depend>message_runtime</exec_depend>        <!-- 增加的第2处 -->
    CMakeLists.txt (照着改就好啦)
cmake_minimum_required(VERSION 3.0.2)
project(topic_demo123)

find_package(catkin REQUIRED COMPONENTS
  message_generation
  roscpp
  rospy
  std_msgs
)

 add_message_files(
    FILES
    gps.msg            ##自定义的msg消息名称
 )

 generate_messages(
   DEPENDENCIES
   std_msgs
 )

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES topic_demo123
  CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
#  DEPENDS system_lib
)

include_directories(include ${catkin_INCLUDE_DIRS})
    16.2 自定义消息service

    功能包:service_demo;自定义消息:Greeting.srv

    package.xml   同上

    CMakeLists.txt (照着改就好啦)
cmake_minimum_required(VERSION 3.0.2)
project(service_demo)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)

 add_service_files(
   FILES                    ##自定义.srv服务名称
  Greeting.srv
 )

 generate_messages(
#   DEPENDENCIES
#   std_msgs
 )

catkin_package(
#  INCLUDE_DIRS include
  LIBRARIES service_demo
  CATKIN_DEPENDS roscpp rospy std_msgs
#  DEPENDS system_lib
)

include_directories( include ${catkin_INCLUDE_DIRS})

再编译可以看到/devel/include 已经生成了.h文件。


17、执行以下python文件rosrun topic_demo123 pytalker.py报错
[rosrun] Couldn't find executable named pytalker.py below /home/nb/catkin_ws_Mooc_demo/src/topic_demo123
[rosrun] Found the following, but they're either not files,
[rosrun] or not executable:
[rosrun] /home/nb/catkin_ws_Mooc_demo/src/topic_demo123/scripts/pytalker.py

原因如下:.py文件没有可执行权限。

解决方法:1、要把.py文件在右键属性-权限-执行-允许作为 程序执行文件

或者 输入命令:

sudo chmod 777 pytalker.py //pytalker替换为自己的文件名


18、错误描述:执行rosrun topic_demo123 pytalker.py时可以正常输出信息,但是一打开pylistener.py就报错,如下:
[INFO] [1653878353.882141]: Talker: GPS: x=1.000000 ,y= 2.000000
Traceback (most recent call last):
File "/home/nb/catkin_ws_Mooc_demo/src/topic_demo123/scripts/pytalker.py", line 28, in <module>talker()
File "/home/nb/catkin_ws_Mooc_demo/src/topic_demo123/scripts/pytalker.py", line 22, in talker
pub.publish(gps(state,x,y))
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/topics.py", line 886, in publish
raise ROSSerializationException(str(e))
rospy.exceptions.ROSSerializationException: field x must be float type

原因:talker在发布信息时数据对应错误。

解决方法:

由于gps.msg消息定义类型如下:

float32 x
float32 y
string state

修改前的talker.py

while not rospy.is_shutdown():
        #计算距离
        rospy.loginfo('Talker: GPS: x=%f ,y= %f',x,y)
        pub.publish(gps(state,x,y))
        x=1.03*x
        y=1.01*y
        rate.sleep()

修改后的talker.py

while not rospy.is_shutdown():
        #计算距离
        rospy.loginfo('Talker: GPS: x=%f ,y= %f',x,y)
        pub.publish(gps(x,y,state))        //区别在x,y,state的顺序,要与自定义的.msg相对应
        x=1.03*x
        y=1.01*y
        rate.sleep()

正常执行截图:


19、运行roscore报错:

RLException: roscore cannot run as another roscore/master is already running.
Please kill other roscore/master processes before relaunching.
The ROS_MASTER_URI is http://nb-vm:11311/
The traceback for the exception was written to the log file

原因:估计之前roscore用完没ctrl+c。

解决方法:

roscore cannot run as another roscore/master is already running_Unite One的博客-CSDN博客

killall -9 roscore //如果提示未找到进程不用管,继续执行下一条
killall -9 rosmaster

执行完再重启一下。

shutdown -r now


20、quark夸克主机扩容---问题记录

参考:夸克开发板SD卡扩展根分区空间 - rivanwang - 博客园

做的时候遇到点问题,记录一下。

1、首先更新一下软件 sudo apt-get update,然后再进行第一步sudo apt-get install cloud-utils

2、到第2步 sudo reboot(目的是重启机器,因此会断开远程连接。执行一次以后就可以跳过此命令向下执行了)

3、报错:Could not get lock /var/lib/dpkg/lock-frontend - open

解决方法:只需要删除锁定文件。

sudo rm /var/lib/dpkg/lock-frontend

sudo rm /var/lib/dpkg/lock

4、挂载分区时报错:mount: mount point /tmp/p3 does not exist

原因:/tmp/p3文件不存在,新建一个就好。

解决方法:

mkdir /tmp/p3

以上是我遇到的错误。


21、CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by "catkin_virtualenv" with any of the following names:

    catkin_virtualenvConfig.cmake
     catkin_virtualenv-config.cmake

Makefile:796: recipe for target 'cmake_check_build_system' failed
make: *** [cmake_check_build_system] Error 1
Invoking "make cmake_check_build_system" failed
错误原因:没有虚拟环境的package

解决方法:安装一个catkin_virtualenv

sudo apt-get install ros-melodic-catkin_virtualenv //melodic替换为自己ros的版本


22、 GPS-IMU融合报错(PyInit__tf2):ImportError: dynamic module does not define module export function (PyInit__tf2)

    原因是:melodic 使用python2.7 而下载的功能包用的pyhton3。

    解决方法:既然知道了原因,那么解决方法无非就2个。要么升级到python3要么下载python2的功能包。

    方法一:(很简单,不容易出错)

在链接前面加上-b indigo-devel,就默认下载的是python2,不加的话就默认是最新的noetic版本里用python3编译的代码。参考链接:ImportError: dynamic module does not define module export function (PyInit__tf2)_00 2的博客-CSDN博客

git clone -b indigo-devel https://github.com/ros-drivers/nmea_navsat_driver.git

     方法二:(操作略困难,我搞到一半就出问题了)

tf使用报错:ImportError: dynamic module does not define module export function (PyInit__tf2)_#君君#的博客-CSDN博客

    修改后:rviz可以正常显示仿真结果啦!,修改之前是rviz打开没有路径信息。


23、下载sudo apt-get ros-melodic-csm 报错E: 无效的操作 ros-melodic-csm

原因:apt-get是老版命令,apt是新版本的命令。它们的使用范围:apt 用于终端,而 apt-get 用于脚本;对于语法而言,apt-get 和 apt 大致一样。

关于 apt 和 apt-get 的区别,Ubuntu 官方文档给出了解答:

While apt is a command-line tool, it is intended to be used interactively, and not to be called from non-interactive scripts. The

apt-get

command should be used in scripts (perhaps with the

--quiet

flag). For basic commands the syntax of the two tools is identical.

** 解决办法:**

sudo apt-get ros-melodic-csm (错误)

sudo apt install ros-melodic-csm (正确)


24、CMake Error at /usr/src/googletest/googletest/cmake/internal_utils.cmake:149 (add_library):
add_library cannot create target "gtest" because another target with the same name already exists. The existing target is a static library created in source directory "/usr/src/googletest/googletest". See documentation for policy CMP0002 for more details.
Call Stack (most recent call first):
/usr/src/googletest/googletest/cmake/internal_utils.cmake:172 (cxx_library_with_type)
/usr/src/googletest/googletest/CMakeLists.txt:90 (cxx_library)

原因:

   google的gmock和gtest 从 1.7.0-4升级到 1.8.0-2后,就开始出现这个问题了:

/usr/src/googletest/googletest/cmake/internal_utils.cmake处的 CMake 错误:149 (add_library):add_library无法创建目标“gmock”,因为已存在另一个同名目标。

    我们按照几年前的博客(关于cartographer安装编译) 操作会报错,原因可能就是这里。

    查了一些关于这个错误的修改方法,发现只有该方法有用,其他操作方法(比如注释某几行代码)不太行。

解决办法:

add_library cannot create target “gmock“ because another target with thesame name already exists_wishchin的博客-CSDN博客

进入到 /工作空间/src/cartographer/CMakeLists.txt,修改第55行。

用 /usr/src/googletest/googlemock 替代 /usr/src/gmock。

修改前:

修改后:

cmake -> 生成makefile文件成功:

make -> 编译成功:


25、编译cartographer_ros中遇到的错误:

node_options.h:33:3: error: ‘string’ does not name a type; did you mean ‘stdin’?

node_options.cc:30:11: error: ‘struct cartographer_ros::NodeOptions’ has no member named ‘map_frame’

解决方法1:

string是标准库中的,使用时需要加上命名空间std。(需要该很多变量,较为麻烦)

string map_frame; 变成 std::string map_frame;

解决方法2:

#include <string> 变成 #include <string.h>)(推荐,只需要改头文件。)

一般.h的头文件是为了兼容C代码,如果使用了标准库一定要加上命名空间。

参考博客:

error: ‘string’ does not name a type; did you mean ‘stdin’_东东旭huster的博客-CSDN博客

26、lego-loam算法跑数据集,启动rviz会自动关闭。单独打开rviz再发布数据集,结果出来一条轨迹,而没有点云图。

解决方法:关闭硬件加速和虚拟机3D图形加速

第1步:关闭硬件加速

echo “export SVGA_VGPU10=0” >> ~/.bashrc

source ~/.bashrc

第2步:关闭虚拟机的3D图形加速

参考文章: 感谢大佬的解决方法!!!使用LeGO-LOAM运行KITTI数据集_Ocean_Controller的博客-CSDN博客_kitti lego loam

问题解决——Gazebo闪退及无法运行_口袋里のInit的博客-CSDN博客_gazebo闪退

27、算法和数据集的topic不一致怎么办?

解决方法:remap重新映射

具体实现:如何更改rosbag的节点话题?

    举例:LeGO-LOAM的节点话题是/kitti/velo/pointcloud,而rosbag的节点话题是velodyne_points,将话题velodyne_points 重映射为 /kitti/velo/pointcloud。
<remap from="velodyne_points" to="/kitti/velo/pointcloud"/>

参考文章:

https://www.guyuehome.com/34830

使用LeGO-LOAM运行KITTI数据集_Ocean_Controller的博客-CSDN博客_kitti lego loam

28、


本文转载自: https://blog.csdn.net/qq_40528849/article/details/124582119
版权归原作者 内有小猪卖 所有, 如有侵权,请联系我们删除。

“ROS学习之error解决记录”的评论:

还没有评论