开始学ROS,刚刚编译一个功能包就不通过,各种报错。
这里给出我遇到的错误。
文章目录
Could NOT find std_msg (missing: std_msg_DIR)
一开始的时候输入catkin_create_pkg test_pkg std_msg roscpp rospy
注意我这里std_msgs写成了std_msg所以有以下报错
-- +++ processing catkin package: 'test_pkg' ------>代表准备编译test_pkg功能包
-- ==> add_subdirectory(test_pkg)
-- Could NOT find std_msg (missing: std_msg_DIR) ------>CMakeList.txt中find_package找库 但是找不到(这里是因为名字错了)
-- Could not find the required component 'std_msg'. The following CMake error indicates that you either need to install the package with the same name or change your environment so that it can be found.
CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by "std_msg" with any
of the following names:
std_msgConfig.cmake
std_msg-config.cmake
Add the installation prefix of "std_msg" to CMAKE_PREFIX_PATH or set
"std_msg_DIR" to a directory containing one of the above files. If
"std_msg" provides a separate development package or SDK, be sure it has
been installed.
Call Stack (most recent call first):
test_pkg/CMakeLists.txt:10 (find_package)
-- Configuring incomplete, errors occurred!
See also "/home/asber/projects/ros/build/CMakeFiles/CMakeOutput.log".
See also "/home/asber/projects/ros/build/CMakeFiles/CMakeError.log".
Invoking "cmake" failed
解决方案:在package.xml以及CMakeList.txt中所有写错库的地方都修改正确即可。
Anaconda 和 ROS python 路径问题
Traceback (most recent call last):
File "/opt/ros/melodic/lib/turtle_tf/turtle_tf_broadcaster.py", line 35, in <module>
File "/opt/ros/melodic/lib/turtle_tf/turtle_tf_listener.py", line 34, in <module>
import rospy
import rospy
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 49, in <module>
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 49, in <module>
Traceback (most recent call last):
File "/opt/ros/melodic/lib/turtle_tf/turtle_tf_broadcaster.py", line 35, in <module>
from .client import spin, myargv, init_node, \
from .client import spin, myargv, init_node, \
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/client.py", line 52, in <module>
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/client.py", line 52, in <module>
import roslib
import roslib
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/__init__.py", line 50, in <module>
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/__init__.py", line 50, in <module>
import rospy
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 49, in <module>
from roslib.launcher import load_manifest
from roslib.launcher import load_manifest
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/launcher.py", line 42, in <module>
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/launcher.py", line 42, in <module>
from .client import spin, myargv, init_node, \
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/client.py", line 52, in <module>
import rospkg
import rospkg
ModuleNotFoundError: No module named 'rospkg'
ModuleNotFoundError: No module named 'rospkg'
import roslib
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/__init__.py", line 50, in <module>
from roslib.launcher import load_manifest
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/launcher.py", line 42, in <module>
import rospkg
ModuleNotFoundError: No module named 'rospkg'
[turtle1_tf_broadcaster-4] process has died [pid 2961, exit code 1, cmd /opt/ros/melodic/lib/turtle_tf/turtle_tf_broadcaster.py __name:=turtle1_tf_broadcaster __log:=/home/asber/.ros/log/5336cff8-1412-11ea-b9e6-74dfbfcbcc4c/turtle1_tf_broadcaster-4.log].
log file: /home/asber/.ros/log/5336cff8-1412-11ea-b9e6-74dfbfcbcc4c/turtle1_tf_broadcaster-4*.log
[turtle2_tf_broadcaster-5] process has died [pid 2970, exit code 1, cmd /opt/ros/melodic/lib/turtle_tf/turtle_tf_broadcaster.py __name:=turtle2_tf_broadcaster __log:=/home/asber/.ros/log/5336cff8-1412-11ea-b9e6-74dfbfcbcc4c/turtle2_tf_broadcaster-5.log].
log file: /home/asber/.ros/log/5336cff8-1412-11ea-b9e6-74dfbfcbcc4c/turtle2_tf_broadcaster-5*.log
[turtle_pointer-6] process has died [pid 2973, exit code 1, cmd /opt/ros/melodic/lib/turtle_tf/turtle_tf_listener.py __name:=turtle_pointer __log:=/home/asber/.ros/log/5336cff8-1412-11ea-b9e6-74dfbfcbcc4c/turtle_pointer-6.log].
log file: /home/asber/.ros/log/5336cff8-1412-11ea-b9e6-74dfbfcbcc4c/turtle_pointer-6*.log
Traceback (most recent call last):
File "/opt/ros/melodic/lib/tf/view_frames", line 47, in <module>
import rospy
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 49, in <module>
from .client import spin, myargv, init_node, \
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/client.py", line 52, in <module>
import roslib
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/__init__.py", line 50, in <module>
from roslib.launcher import load_manifest
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/launcher.py", line 42, in <module>
import rospkg
ModuleNotFoundError: No module named 'rospkg'
如果你还没有装anaconda或者ROS:
ROS的Python版本为2.7
ros 和Anaconda 一起使用的时候,如果先安装了Anaconda,再安装ros,会报错,因此正确的联合使用方式为:先安装ros相关,后安装anaconda即可。
如果你安装了ANACONDA然后装的ROS,会出现找不到ros_pkg的问题
按照以下两处可以得到
- https://blog.csdn.net/qq_33521754/article/details/78829212
- https://www.cnblogs.com/hgl0417/p/11562580.html
结论:
网上有一种方案,如果你先装ANACONDA会将系统的python改为anaconda的python,所以将anconda卸载(也相当于从环境变量中删除PATH),虽然将rospkg的问题解决了,但是仍然报错
---------------------------
Use arrow keys to move the turtle.
Traceback (most recent call last):
File "/opt/ros/melodic/lib/turtle_tf/turtle_tf_broadcaster.py", line 37, in <module>
Traceback (most recent call last):
Traceback (most recent call last):
File "/opt/ros/melodic/lib/turtle_tf/turtle_tf_broadcaster.py", line 37, in <module>
File "/opt/ros/melodic/lib/turtle_tf/turtle_tf_listener.py", line 37, in <module>
import tf
File "/opt/ros/melodic/lib/python2.7/dist-packages/tf/__init__.py", line 30, in <module>
import tf
import tf
File "/opt/ros/melodic/lib/python2.7/dist-packages/tf/__init__.py", line 30, in <module>
File "/opt/ros/melodic/lib/python2.7/dist-packages/tf/__init__.py", line 30, in <module>
from tf2_ros import TransformException as Exception, ConnectivityException, LookupException, ExtrapolationException
from tf2_ros import TransformException as Exception, ConnectivityException, LookupException, ExtrapolationException
from tf2_ros import TransformException as Exception, ConnectivityException, LookupException, ExtrapolationException
File "/home/asber/catkin_ws/devel/lib/python2.7/dist-packages/tf2_ros/__init__.py", line 35, in <module>
File "/home/asber/catkin_ws/devel/lib/python2.7/dist-packages/tf2_ros/__init__.py", line 35, in <module>
File "/home/asber/catkin_ws/devel/lib/python2.7/dist-packages/tf2_ros/__init__.py", line 35, in <module>
exec(__fh.read())
exec(__fh.read())
exec(__fh.read())
File "<string>", line 40, in <module>
File "<string>", line 40, in <module>
File "<string>", line 40, in <module>
File "/home/asber/catkin_ws/src/geometry2/tf2_ros/src/tf2_ros/buffer.py", line 33, in <module>
File "/home/asber/catkin_ws/src/geometry2/tf2_ros/src/tf2_ros/buffer.py", line 33, in <module>
File "/home/asber/catkin_ws/src/geometry2/tf2_ros/src/tf2_ros/buffer.py", line 33, in <module>
from tf2_msgs.srv import FrameGraph, FrameGraphResponse
from tf2_msgs.srv import FrameGraph, FrameGraphResponse
from tf2_msgs.srv import FrameGraph, FrameGraphResponse
ImportError: ImportErrorImportErrorNo module named srv
: : No module named srvNo module named srv
[turtle1_tf_broadcaster-4] process has died [pid 3184, exit code 1, cmd /opt/ros/melodic/lib/turtle_tf/turtle_tf_broadcaster.py __name:=turtle1_tf_broadcaster __log:=/home/asber/.ros/log/8d9db9c6-1427-11ea-a1c9-74dfbfcbcc4c/turtle1_tf_broadcaster-4.log].
log file: /home/asber/.ros/log/8d9db9c6-1427-11ea-a1c9-74dfbfcbcc4c/turtle1_tf_broadcaster-4*.log
[turtle2_tf_broadcaster-5] process has died [pid 3185, exit code 1, cmd /opt/ros/melodic/lib/turtle_tf/turtle_tf_broadcaster.py __name:=turtle2_tf_broadcaster __log:=/home/asber/.ros/log/8d9db9c6-1427-11ea-a1c9-74dfbfcbcc4c/turtle2_tf_broadcaster-5.log].
log file: /home/asber/.ros/log/8d9db9c6-1427-11ea-a1c9-74dfbfcbcc4c/turtle2_tf_broadcaster-5*.log
[turtle_pointer-6] process has died [pid 3186, exit code 1, cmd /opt/ros/melodic/lib/turtle_tf/turtle_tf_listener.py __name:=turtle_pointer __log:=/home/asber/.ros/log/8d9db9c6-1427-11ea-a1c9-74dfbfcbcc4c/turtle_pointer-6.log].
log file: /home/asber/.ros/log/8d9db9c6-1427-11ea-a1c9-74dfbfcbcc4c/turtle_pointer-6*.log
可以从代码看出 貌似系统自带的python的ROS相关包版本不对。
文章说,不管使用谁的python,只要安装好特定的包就可以,所以我使用如下指令
$ pip install setuptools
$ pip install -U rosdep rosinstall_generator wstool rosinstall six vcstools
都更新到最新但是还是不行。
那么我怀疑可能melodic安装的时候对python的操作是当时版本的python,所以导致这个版本我自己install 的包和melodic aptget得到的不同。
我现在的方案有两个:
下载anaconda新建2.7的包,然后看看可不可以,如果不可以,那么卸载anaconda以及ROS,然后按照顺序先安装ROS,再安装anaconda
经过实验发现新装anaconda然后新弄一个2.7的py环境并且运行上面两行指令还是不行,所以现在决定卸载ANACONDA和ROS,全部重新安装
然后我惊喜的发现,重新安装弄新环境是一样的,全部卸载只装ROS也是报错相同,那么我可以确定,这个错误,不是anconda 或者 安装ROS顺序的错误。
最后找了半天,https://blog.csdn.net/bluewhalerobot/article/details/73770680这里给出了答案,我们的opt的ros文件夹下可以通过/opt/ros/jade/lib/python2.7/dist-packages/找到ros带的python包,而一般程序找python包的时候都是先去用户工作目录devel/lib/python2.7/dist-packages目录下查找,我注释掉第三行之后source ~/.bashrc发现就没有报错了
,结果我到注释掉的工作空间看,竟然有srv = = 不管了,以后还是只要有一个用户工作空间好了,不然找包都不知道去哪里。
include dir ‘VAL/include’ does not exist relative to
-- +++ processing catkin package: 'rosplan_dependencies'
-- ==> add_subdirectory(rosplan/rosplan_dependencies)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- [rosplan_dependencies] Checking out the submodules...
CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkin_package.cmake:304 (message):
catkin_package() include dir 'VAL/include' does not exist relative to
'/home/asber/catkin_ws/src/rosplan/rosplan_dependencies'
Call Stack (most recent call first):
/opt/ros/kinetic/share/catkin/cmake/catkin_package.cmake:102 (_catkin_package)
rosplan/rosplan_dependencies/CMakeLists.txt:26 (catkin_package)
-- Configuring incomplete, errors occurred!
See also "/home/asber/catkin_ws/build/CMakeFiles/CMakeOutput.log".
See also "/home/asber/catkin_ws/build/CMakeFiles/CMakeError.log".
Invoking "cmake" failed
catkin_package() include dir ‘VAL/include’ does not exist relative to
‘/home/asber/catkin_ws/src/rosplan/rosplan_dependencies’
代表CMakeList.txt在处理catkin_package的包含的include文件夹rosplan_dependencies的时候,找不到
我打开一看
###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
INCLUDE_DIRS ${catkin_INCLUDE_DIRS} VAL/include rddl_parser ippc_server/include ippc_server/cpp-base64 ppddl_parser/include ppddl_parser/src
LIBRARIES val_kcl rddl_parser ippc_server ppddl_parser
CATKIN_DEPENDS roscpp rosplan_knowledge_msgs
DEPENDS
)
因为这些rddl_parser ippc_server/include ippc_server/cpp-base64 ppddl_parser/include ppddl_parser/src什么的在我rosplan_dependencies的文件夹下都有 惟独VAL没有
所以我去github上看
果然是缺少这个VAL文件夹,加上去后报错没了
有一个问题,为什么没有下下来呢?
https://www.zhihu.com/question/359398013
使用catkin_make_isolated --install --use-ninja之后cm不能用
根据turtlebot入门教程-cartographer在Turltlebot的应用使用cmisolated之后cw中多出build_isolated devel_isolated install_isolated
如果再次尝试cm
看来是有不规范的包存在
此时如果src里面有wstool下载的cartographer相关的pkg,比如cere,那么cm就会报错
我删掉了与和 以及那些有cw里面有isolated的文件夹 ,然后可以了