ROS问题记录

问题一、无法找到‘catkin_cmake’指令

ROS相关命令时,解释器都在运行,我们可以在.bashrc文件里边”寄生“这个运行解释器的命令

解决方案:

source /opt/ros/indigo/setup.bash

问题:没有没当前bash窗口添加环境变量

问题二、Creating the toplevel cmake file failed: Could neither symlink nor copy file "/opt/ros/melodic/share/catkin/cmake/toplevel.cmake" to "/home/sry/catkin_ws/src/CMakeLists.txt":

- [Errno 13] Permission denied
- [Errno 13] Permission denied: '/home/sry/catkin_ws/src/CMakeLists.txt'

解决方案:

1 # 需要解锁的文件都在src文件夹下
2 sudo chown -R sry:sry src/

 问题:这个文件自带权限,需要解锁

参考:https://blog.csdn.net/qq_44166163/article/details/105747758

问题三、ROS环境下编译报错,error: ‘shared_ptr’ in namespace ‘pcl’ does not name a template type typedef pcl::shared_ptr< pcl::VoxelGrid<PointT> > Ptr;

执行一下命令报错。

1 cd ~/catkin_ws
2 catkin_make -DCMAKE_BUILD_TYPE=Release

问题四:PCL还是一如既往的垃圾,百度不出解决方案,充钱+VPN+google解决,具体问题:error: ‘shared_ptr’ in namespace ‘pcl’ does not name a template type  typedef pcl::shared_ptr< pcl::VoxelGrid<PointT> > Ptr;

解决方案:将.h .hpp .cpp等代码中所有pcl::shared_ptr 替换为 boost::shared_ptr

参考:https://githubmemory.com/repo/koide3/ndt_omp/issues

问题五:Error: package 'interactive_slam' not found

这种问题,例如:什么包没找到,都是需要source,我是执行以下指令才报上述错误的。

1 source /opt/ros/indigo/setup.bash
2 rosrun interactive_slam interactive_slam

解决方案:将第一行改为:

1 source devel/setup.bash

devel目录下的bash文件是针对当前项目的,而上述的红色source指令是针对全局的。

问题5.1:The specified base path "/home/ros_proj/demo1" contains a CMakeLists.txt but "catkin_make" must be invoked in the root of workspace
解决:在catkin_init_workspace的时候,应该是在demo5/src目录下,创建的CMakeList.txt也应该在src目录下,而不是在demo5目录下。

问题5.3:   The specified source space "/home/ros_proj/temp/src/src" does not exist

解决:到项目根目录(demo5/)下去catkin_make

问题六:(在任意目录(eg:/home/ros_proj/demo1)创建ros工程)标准步骤:

开个终端

# <一、> 激活环境
1
sudo su 2 source /opt/ros/melodic/setup.bash # 不source,后面catkin_init_workspace就无法使用TAB键打出来 # <二、> 创建目录
3
# 创建工程目录demo1/src 4 cd /home/ros_proj 5 cd demo1 6 mkdir -p src 7 cd src # 一定要进src目录
# <三、> 初始化、生成文件、编译
8 root@sry:/home/ros_proj/demo1/src# catkin_init_workspace 9 #src目录下生成CMakeLists.txt 10 # 一定要在src上一级目录make 11 cd .. 12 root@sry:/home/ros_proj/demo1# catkin_make

 问题7:ROS创建功能包

在我的博客:https://www.cnblogs.com/winslam/p/10118472.html

已经说明了如何创建功能包,我这里仅表述其中一些坑。

1 <一、>创建名为:fuck 的功能包
2 root@sry:/home/ros_proj/demo1/src# catkin_create_pkg fuck std_msgs rospy roscpp
3 
# 将源码拷贝到src目录下
# 在src目录下生成了fuck功能包文件夹,下面我们src目录下加入源码、修改CMakeLists.txt 4 # 参考上述博客链接!【注:我这里功能包放在src下,貌似原来的博客不是放到这里,所以功能包中的CMakeLists.txt要作修改,详情见下】 5 6 # 必须知道,fuck功能包属于工程demo1 7 root@sry:/home/ros_proj/demo1# catkin_make

最后,在执行功能包之前,要在工程目录demo1目录下执行source:

source devel/setup.bash

fuck/CMakeLists.txt,注意这里CMakeLists.txt文件的上一目录是源码,文件结构如下图:

1 add_executable(talker ../talker.cpp)
2 target_link_libraries(talker ${catkin_LIBRARIES})
3 
4 add_executable(listener ../listener.cpp)
5 target_link_libraries(listener ${catkin_LIBRARIES})

 问题6、7的总结:

1、只要在终端中使用ros官方指令,你就要执行下面第一条指令;如果使用自己开发的功能包,就要执行第二条指令

source /opt/ros/melodic/setup.bash
source devel/setup.bash     # 在项目目录下,eg:demo1

2、 catkin_init_workspace实在src源码目录下执行,catkin_make是在demo1工程目录下执行

3、在demo1工程目录下添加源码,对应在fuck功能包目录下的CMakeLists.txt作对应修改

4、文件夹内容:

src – 包含已经创建的功能包、功能包的源码

build – cmake 针对 src文件夹中功能包生成的中间文件

devel– 功能包的可执行文件在这里

install – 如果你执行指令catkin_make install,就会额外生成这个文件夹 

 问题8:ros工程中build devel src等文件夹作用是什么,怎么组织的,怎么相互作用的。

见上。

问题9:如何使用clion编辑、调试ROS C++工程。

##############################################################
在用clion打开工程之前,最好是在用命令行建立好一个空的工程+功能包

如果咱们之前已经解锁了文件夹,之后启动clion就不需要sudo su了,相反,如果你sudo

su,新生城的工程文件夹会带锁!!!
##############################################################

# <一>、在bash窗口,先source一下ROS工程,再用命令行启动clion(和anaconda环境下启动pycharm一样的)

sry@sry:/home/ros_proj/demo5$ source devel/setup.bash

# 启动clion

sry@sry:/home/ros_proj/demo5$ sh /opt/clion-2021.1.1/bin/clion.sh

# <二>、在clion中打开一个已经创建好的功能包
文件 -> 打开 -> 选择功能目录下的src/CMakeLists.txt -> IDE自动cmake build工程

# <三>、 clion中设置catkin_make(貌似这一步骤不设置也能运行,需要外部先运行roscore)
因为在命令行中catkin_make 和在 clion中camke,工程构建不是同一个目录,前者:demo4/build,
后者:demo4/src/cmake-build-debug,

综上所述,我们仅需要一个build文件夹,需要在clion中设置catkin_make,作出如下修改:
打开File | Settings Ctrl+Alt+S | Build, Execution, Deployment | CMake


a(cmake输出目录)--将构建目录设置为:由demo4/src/cmake-build-debug改为:/home/ros_proj/demo4/build

b(make输出目录)--cmake选项新增参数:add -DCATKIN_DEVEL_PREFIX:PATH=/home/ros_proj/demo4/devel

提示:如果clion已经自己设置了其他输出目录,咱们再按照上述a、b进行设置、编译,会报错,这时候只需要点击:工具 -> CMake -> 重置缓存并重新加载项目。

# <四> 、在clion使用launch
暂时忽略

# <五> 、重复上述所有步骤:创建ros工程、在clion中编写代码、cmakelists、并调试、执行
简单复述:
a、新开一个终端创建ROS工程+功能包

b、在终端启动clion,修改cmake、make输出路径

c、修改src目录下CMakeLists.txt、新增源码

d、外部启动roscore,编译、调试

note:
启动终端之前一定记得:sudo su
启动clion之前一定记得:source devel/setup.bash(不然cmake报错)
另外:源码用clion创建到了demo4/src/功能包路径下

reference:【clion官方教程】https://www.jetbrains.com/help/clion/ros-setup-tutorial.html?keymap=primary_visual_studio#example

问题10、find_package(catkin) failed. catkin was neither found in the workspace nor in the CMAKE_PREFIX_PATH. One reason may be that no ROS setup.sh was sourced before.

解决:参考问题9,a(cmake输出目录)--将构建目录设置为:由demo4/src/cmake-build-debug改为:/home/ros_proj/demo4/build
参考:https://www.cnblogs.com/fuhang/p/9764719.html

问题11:当我source我的工作空间的时候,Failed to run '"/home/ros_proj/demo3/devel/_setup_util.py" ': return code 126

解决:文件权限问题(一些文件的所有权问题,sudo su都不好使),解锁了也没用,直接重新catkin_make就行了

问题12:话题消息节点文件结构关系(现在没有时间整理)

参考:https://www.jianshu.com/p/3b913ecbe030

CV&DL
原文地址:https://www.cnblogs.com/winslam/p/14845290.html