ubuntu16.04下ROS初学出现的报错(不定期更新)

ubuntu16.04下ROS初学出现的报错(不定期更新)

一、写在开头

最近在学习ROS,看的视频,本以为是保姆式教学,不会再出现错误了。可我按照视频上所说,在catkin_ws文件夹下catkin_make,静待编译成功的消息时,它还是出错了,我两眼放空,不会吧 不会吧 不会吧,一定是它还不太熟悉,抱着侥幸心理,在命令行里按下了“上箭头”,再回车!它还是出错了,还是出错了!呜呜呜,这我该怎么改啊!

二、出现的报错(不定期更新)

  • -------------------------------------------------------------------- 2020-8-19——2020-8-20 -----------------------------------------------------------------

    1. 报错1

-- Configuring incomplete, errors occurred!  
See also "/home/cpz/catkin_ws/build/CMakeFiles/CMakeOutput.log".  
See also "/home/cpz/catkin_ws/build/CMakeFiles/CMakeError.log".  
Makefile:766: recipe for target 'cmake_check_build_system' failed  
make: *** [cmake_check_build_system] Error 1  
Invoking "make cmake_check_build_system" failed 

    2. 报错2

Base path: /home/cpz/catkin_ws
Source space: /home/cpz/catkin_ws/src
Build space: /home/cpz/catkin_ws/build
Devel space: /home/cpz/catkin_ws/devel
Install space: /home/cpz/catkin_ws/install
####
#### Running command: "make cmake_check_build_system" in "/home/cpz/catkin_ws/build"
####
####
#### Running command: "make -j4 -l4" in "/home/cpz/catkin_ws/build"
####
[  0%] Built target std_msgs_generate_messages_cpp
[  0%] Built target std_msgs_generate_messages_eus
[  0%] Built target std_msgs_generate_messages_py
[  0%] Built target std_msgs_generate_messages_lisp
[  0%] Built target std_msgs_generate_messages_nodejs
Traceback (most recent call last):
  File "/opt/ros/kinetic/share/genmsg/cmake/../../../lib/genmsg/genmsg_check_deps.py", line 54, in 
    spec = load_msg_from_file(msg_context, msg_file, full_type_name)
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/genmsg/msg_loader.py", line 289, in load_msg_from_file
    raise InvalidMsgSpec('%s: %s'%(file_path, e))
genmsg.base.InvalidMsgSpec: /home/cpz/catkin_ws/src/learning_topic/msg/Person.msg: Invalid constant value: invalid literal for int() with base 10: ''
learning_topic/CMakeFiles/_learning_topic_generate_messages_check_deps_Person.dir/build.make:57: recipe for target 'learning_topic/CMakeFiles/_learning_topic_generate_messages_check_deps_Person' failed
make[2]: *** [learning_topic/CMakeFiles/_learning_topic_generate_messages_check_deps_Person] Error 1
CMakeFiles/Makefile2:1427: recipe for target 'learning_topic/CMakeFiles/_learning_topic_generate_messages_check_deps_Person.dir/all' failed
make[1]: *** [learning_topic/CMakeFiles/_learning_topic_generate_messages_check_deps_Person.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 18%] Built target velocity_publisher
[ 36%] Built target pose_subscriber
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

我最初的报错是报错1,后来把错误改好之后,再故意改回来发现错误变成了报错2,咱也不知道为啥(哭唧唧ing)。

经过一天的无用功,今天上午终于把错误找到了,报错1经过老鸟提示,报错1一般来源于代码的错误,包括msg文件、cMakeLists.txt文件等。我的错误来源于msg文件中的格式写错了,可能保存的时候碰到了回车键导致出错,如下所示是正确的:

string name
uint8 sex
uint8 age

uint8 unknown = 0
uint8 male = 1
uint8 female = 2

而在我昨天白忙活一天之后,我才想起来检查下代码,结果看到mssg文件是下面的样子(我真是哭笑不得啊):

string name
uint8 sex
uint8 age

uint8 unknown = 0
uint8 male 
= 1
uint8 female = 2

-------------------------------------------------------------------- 2020-10-18 -------------------------------------------------------------------

     3. 报错3

line 1: syntax error near unexpected token `newline' 
/home/cpz/ros_ws/src/exmpl_models/launch/add_rect_prism.launch: line 1: `'

这个错误是在运行一个roslaunch命令来加载一个sdf文件的模型到gazebo中时发生的,找了近半个小时,气死我自己啦,roslaunch命令想这样(加载一个包名字为exmpl_models,launch文件名为add_rect_prism.launch):

roslaunch exmpl_models add_rect_prism.launch
  •  尝试一:遇到错误怎么办?一般我是先根据错误信息看是什么错误,如果这个错误信息很熟悉(但很熟悉的错误信息一般都很有限,比如XXX no such file,XXX command not found,或者没有权限等等),一般情况下可以自己解决。但多数情况下都是copy错误信息到浏览器,看有没有人和我遇到一样的问题,so 我复制了报错3的错误信息,去搜索了一下,结果找到了该错误,点这里,报错信息和我这个错误信息是几乎一模一样的,但链接里的报错是在运行bash脚本文件时遇到的,是由于在linux环境和windows环境下的换行符号表示不一致导致的运行错误。我搜到这个结果,心里十分满意,因为这个我知道啊,在鸟哥的linux私房菜那本书里就提到过这个问题并给出了解决方法,在《鸟哥的linux私房菜基础篇-4th》电子版的P498给出了一个例子,如果读者真是该错误的话可以再去翻一下书。不想翻书的,我就再多说一句,怎么来判断到底是不是这个错误呢?输入以下指令,查看该文件内容的所有字符信息:
    cat -An 文件名字

    比如,在我的这个launch文件中可以看到以下结果:

         1	$
         2	$
         3	$
         4	$
    

    那其实就不是因为换行符号在windows和linux系统下表示方法的不同所导致的错误。因为在上述的输出中,文件每一行的结尾都是$,这是在linux系统下换行符的正确表示。如果是在windows系统中编辑的文件的话,在linux下使用上述方法查看该文件,那可能每一行的结尾都是^M$,相比会多出来^M。     写到这里,想自我感慨一下,真就读过的书都不白读,在以后的某一天里,如果会想到以前好像见过这个东西,有点印象,那花费的时间都是值得的,有点欣慰。

  • 尝试二:尝试一算是失败告终。又想到了一个问题,因为我的这个launch文件是直接从github上下载的文件夹里面copy过来的,所以权限可能不对——其实报错信息是这么来的,我是先将该文件从下载的文件夹里copy过来,然后直接catkin_make,成功了之后,然后运行了
    roslaunch exmpl_models add_rect_prism.launch

 结果出现了错误,错误信息找不到了,那个Terminal被我关掉了,大概是:/home/cpz/ros_ws/src/exmpl_models/launch/add_rect_prism.launch: not executable,是说这个文件不能被执行,然后我就想到了文件权限的问题,先是ll了一下查看该文件的权限,应该是使用者用户不具有写和执行的权限,然后我就sudo chmod 777 add_rect_prism.launch,加上了所有权限,and then,我修改了包里的一个文件,本应该 本应该 本应该是再去catkin_make编译一下再重新roslaunch的,结果我是没有重新编译而是直接roslaunch了,所以出现了报错3的错误信息,所以错误源头就是在这里了,重新编译了之后执行roalaunch没有报错。

三、最后

嗐,这篇博客希望可以一直留着,用于留念自己犯过的蠢,算是自嘲吧。

总结,有错以后不能全靠csdn活着了,自己多去找自己的操作和问题。加油!

你可能感兴趣的:(Ubuntu,ubuntu,cmake,bug,ROS,kinetic)