安装环境 ubuntu20.04
ros NODES
项目链接:
https://github.com/MRwangmaomao/semantic_slam_nav_ros
安装腾讯ncnn库
其他库
opencv 3.4.9
eigen 3.4.0
pangolin 已安装
vtk5
自带的是 vtk-7.1 建议自己源码安装
下载链接:https://vtk.org/download/
下载了vtk 7.1
mkdir build
cd build
cmake …
make -j8
sudo make install
方法二需要
配置环境变量
打开~/.bashrc 文件并添加以下行
export VTK_DIR=/usr/local/lib/cmake/vtk-7.1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
参考了:https://blog.csdn.net/qq_54199287/article/details/134136943
pcl 1.7
推荐:
-> pcl-1.7.2 vtk-5.10.1 / vtk-6.2.0
-> pcl-1.8.1 vtk-7.1.1
-> pcl-1.9.1 vtk-8.2.0(建议8.1)
pcl 1.12 vt7.1也有人这样安装编译 但是对于我们的呢
1.7.2版本与当前的eigen版本产生冲突 尝试一下新的 尝试pcl-1.10.1
mkdir build
cd build
cmake ..
make -j8
sudo make install
下载链接:https://github.com/PointCloudLibrary/pcl/tree/pcl-1.10.1
卸载pcl需要修改里面的内容
sudo make uninstall
sudo rm -r build
sudo rm -r /usr/include/pcl-1.10 /usr/share/pcl /usr/bin/pcl* /usr/lib/libpcl*
sudo rm -r /usr/libx86_64-linux-gnu/libpcl*
sudo rm -r /usr/lib/x86_64-linux-gnu/cmake/pcl
可能出现的错误!:
CMake Error at /opt/ros/noetic/share/pcl_ros/cmake/pcl_rosConfig.cmake:117 (message):Project 'pcl_ros' specifies '/usr/include/pcl-1.10' as an include dir,which is not found. It does neither exist as an absolute directory nor in'${{prefix}}//usr/include/pcl-1.10'. Check the issue tracker'https://github.com/ros-perception/perception_pcl/issues' and considercreating a ticket if the problem has not been reported yet.
Call Stack (most recent call first):/opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:76 (find_package)semantic_slam_nav_ros/CMakeLists.txt:56 (find_package)
解决:
sudo cp -r '/opt/ros/noetic/include/pcl_ros' '/usr/include/pcl-1.10'
解决办法 但是这个方法可以解决该问题,但是对于之前的报错依旧不管用!!!
https://blog.csdn.net/weixin_43971588/article/details/133157581
不知道是什么原因,第一次安装的时候并没有这个错误!!!
安装了PCL1.10 还是会出现相关保存问题 在编译过程中
因此尝试新版本的pcl1.12
https://blog.csdn.net/weixin_40653140/article/details/126282010
同样安装了pcl1.12后还是报错:
CMake Error at /opt/ros/noetic/share/pcl_ros/cmake/pcl_rosConfig.cmake:117 (message):
Project ‘pcl_ros’ specifies ‘/usr/include/pcl-1.10’ as an include dir,
which is not found. It does neither exist as an absolute directory nor in
‘${{prefix}}//usr/include/pcl-1.10’. Check the issue tracker
‘https://github.com/ros-perception/perception_pcl/issues’ and consider
creating a ticket if the problem has not been reported yet.
Call Stack (most recent call first):
/opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:76 (find_package)
semantic_slam_nav_ros/CMakeLists.txt:56 (find_package)
这是安装了多版本的pcl ,ros自带的pcl以及自己的pcl版本
https://blog.csdn.net/qq_42731705/article/details/129380907
pcl指定自己的版本
这样就把这个问题解决 但是这种操作是否有问题 不太清楚
https://blog.csdn.net/qq_42731705/article/details/129380907
安装pcl1.8出现的问题参考:
boost版本问题 修改头文件路径即可
1.https://blog.csdn.net/weixin_45534376/article/details/132864676
pcl与eigen版本问题 修改 源代码中的用法即可
2.https://blog.csdn.net/weixin_42621405/article/details/119853242
编译源码出现新问题:
报错1.1:
/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/orbslam/include/MergeSG.h:176:66: error: wrong number of template arguments (3, should be at least 1)
pcl::EuclideanClusterComparator<PointT, pcl::Normal, pcl::Label>::Ptr euclidean_cluster_comparator_;
octomap 安装
下载地址:https://github.com/OctoMap/octomap
mkdir build
cd build
cmake ..
make -j8
sudo make install
进行了安装
直接安装会出现问题,
在make阶段报错内容是:
[100%] Linking CXX executable …/…/bin/octovis
/usr/bin/ld: …/…/octovis/src/extern/QGLViewer/libQGLViewer.so: undefined reference to `__cxa_throw_bad_array_new_length@Qt_5’
collect2: error: ld returned 1 exit status
make[2]: *** [octovis/CMakeFiles/octovis.dir/build.make:360: …/bin/octovis] Error 1
make[1]: *** [CMakeFiles/Makefile2:1884: octovis/CMakeFiles/octovis.dir/all] Error 2
可以参考:
https://blog.csdn.net/liu13364876993/article/details/110188553
就可以解决以上问题
测试八叉树安装成功与否:
https://www.codenong.com/cs105964310/
参考各种库版本对应关系https://blog.csdn.net/qq_41049423/article/details/129391823
ubuntu20.04下安装pcl_ubuntu安装pcl
https://blog.csdn.net/feichangyanse/article/details/135162334
安装pcl之前安装好 vtk
别人安装教程:
ubuntu16.04 配置qt5.9+VTK5.10+pcl1.7 (orbslam_semantic_nav_ros依赖库1)
https://blog.csdn.net/qq_45539458/article/details/106390709
ubuntu16.04 配置opencv3.4+pangolin+octomap (orbslam_semantic_nav_ros依赖库2)
https://blog.csdn.net/qq_45539458/article/details/106411290
安装科大讯飞语音相关库
注册网址链接:
https://www.xfyun.cn/services/voicedictation
暂时先不注册 获取api
参考链接:https://blog.csdn.net/lion_no_back/article/details/129463403
安装依赖:
sudo apt-get install libasound2-dev #asound库
sudo apt-get install mplayer #mplayer工具
安装百度aip相关库
sudo apt-get install ros-noetic-image-view
sudo apt-get install libjsoncpp-dev
sudo apt-get install openssl
sudo apt-get install curl
申请百度api:
https://blog.csdn.net/muaamua/article/details/134368227
https://blog.csdn.net/he99774/article/details/126488907
api网站:
https://cloud.baidu.com/?from=console
cmakelist.txt
修改opencv版本 C++14 以及ros的正确版本
开始下载源码进行编译
mkdir -p catkin_ws/src
git clone git@github.com:MRwangmaomao/semantic_slam_nav_ros.git
cd ..
catkin_make
编译报错
报错1:
/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/aip-cpp/src/gesture_pub_node.cpp:20:10: fatal error: slam_semantic_nav_ros/Gesture.h: No such file or directory
#include “slam_semantic_nav_ros/Gesture.h”
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
”
忘记怎么解决了,总之作者需要的文件 都给他准备好就没有这个问题了
报错2:
/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/aip-cpp/include/base/http.h:23:10: fatal error: json/json.h: No such file or directory
#include <json/json.h>
这个错误消息表明编译过程中找不到名为 “json/json.h” 的头文件,这通常是因为缺少相应的依赖项或包。要解决这个问题,您可以按照以下步骤操作:
- 确认是否安装了 JSON 头文件:首先,确保您的系统上安装了 JSON 头文件。通常,JSON 头文件位于一个名为 “json-c” 的包中。您可以使用以下命令检查是否安装了该包:
dpkg -l | grep libjson-c-dev
如果未安装该包,可以使用以下命令安装它:
sudo apt-get install libjson-c-dev
-
检查编译选项:在您的项目中,确保在 CMakeLists.txt 或编译选项中正确包含 JSON 头文件的路径。通常,您需要在 CMakeLists.txt 文件中设置
include_directories
,以指定包含头文件的目录,例如:include_directories(/usr/include/json-c)
请确保路径与您的系统上安装的 JSON 头文件路径相匹配。
-
重新编译项目:完成上述步骤后,重新运行编译命令以重新编译您的项目。这应该解决找不到 “json/json.h” 头文件的问题。
https://blog.csdn.net/qq_41821678/article/details/120331269
电脑上已经安装了,
执行 以下内容:
sudo ln -s /usr/include/jsoncpp/json/ /usr/include/json
报错3:
/usr/include/pcl-1.10/pcl/pcl_config.h:7:4: error: #error PCL requires C++14 or above
#error PCL requires C++14 or above
代码中的cmakelist.txt文件
#检查c++11或者 c++0x 编译支持 Check C++11 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1")add_definitions(-DCOMPILEDWITHC11)message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")add_definitions(-DCOMPILEDWITHC0X)message(STATUS "Using flag -std=c++0x.")
else()message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
改为
#检查c++11或者 c++0x 编译支持 Check C++ 14 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)if(COMPILER_SUPPORTS_CXX14)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")add_definitions(-DCOMPILEDWITHC11)message(STATUS "Using flag -std=c++14.")
elseif(COMPILER_SUPPORTS_CXX0X)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")add_definitions(-DCOMPILEDWITHC0X)message(STATUS "Using flag -std=c++0x.")
else()message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. Please use a different C++ compiler.")
endif()
报错3:
/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/costmap/src/lrgbd2xz.cpp:89:5: error: ‘cvWaitKey’ was not declared in this scopecvWaitKey(1);^~~~~~~~~
/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/costmap/src/lrgbd2xz.cpp: In member function ‘void LRGBDCostMap::drawCross()’:
/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/costmap/src/lrgbd2xz.cpp:172:26: error: ‘cvPoint’ was not declared in this scopecv::line(costmap2d_, cvPoint(map_image_w_/2-cross_line_size/2,map_image_h_/2), cvPoint(map_image_w_/2+cross_line_size/2, map_image_h_/2), cv::Scalar(255,255,0), 1, 8, 0);
这是opencv没找到
把
#opencv 模块 版本大于 2.4.3
#set(OpenCV_DIR "~/code/catkin_ws/other/opencv-3.4.3/build")
find_package(OpenCV QUIET)
#message(FATAL_ERROR ${OpenCV_LIBS})
if(NOT OpenCV_FOUND)find_package(OpenCV 2.4.3 QUIET)if(NOT OpenCV_FOUND)message(FATAL_ERROR "OpenCV > 2.4.3 not found.")endif()
endif()
改为
set(OpenCV_DIR /home/ckq/Software/opencv-3.4.9/build)
find_package(OpenCV QUIET)
此外还需要修改 代码的写法
cvWaitKey 改为 cv::waitKey
cvPoint 改为: cv::Point
原因是之前的写法是在旧版本opencv 现在新版本的opencv都是这种写法
报错4:
/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/orbslam/src/Detector.cc:127:50: error: ‘CV_FILLED’ was not declared in this scopecv::Scalar(255, 255, 255), CV_FILLED);
修改
CV_FILLED为 cv::FILLED
报错5:
/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/orbslam/src/RunDetect.cc:73:21: error: ‘cvWaitKey’ was not declared in this scopecvWaitKey(30);cvWaitKey(30)改为 cv::waitKey(30);
报错5:
/usr/include/pcl-1.10/pcl/segmentation/euclidean_cluster_comparator.h:256:13: error: no matching function for call to ‘std::set<unsigned int>::insert(std::size_t&) const’exclude_labels_->insert (i);std::set<unsigned int>::insert(std::size_t&) const’exclude_labels_->insert (i);问题所在:pcl1.10自身的问题
https://github.com/PointCloudLibrary/pcl/issues/5031
报错1:
/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/orbslam/include/MergeSG.h:176:66: error: wrong number of template arguments (3, should be at least 1)pcl::EuclideanClusterComparator<PointT, pcl::Normal, pcl::Label>::Ptr euclidean_cluster_comparator_;
修改为:
pcl::EuclideanClusterComparator<PointT>::Ptr euclidean_cluster_comparator_;
报错2:
error: no match for ‘operator=’ (operand types are ‘pcl::PointCloud<pcl::PointXYZRGBA>::Ptr {aka std::shared_ptr<pcl::PointCloud<pcl::PointXYZRGBA> >}’ and ‘boost::detail::sp_if_not_array<pcl::PointCloud<pcl::PointXYZRGBA> >::type {aka boost::shared_ptr<pcl::PointCloud<pcl::PointXYZRGBA> >}’)globalMap = boost::make_shared< PointCloud >(); // 全局点云地图 共享指针
修改为:
```cpp
globalMap = std::make_shared<pcl::PointCloud<pcl::PointXYZRGBA>>();
同样的报错```cpp
error: no matching function for call to ‘pcl::ExtractIndices<pcl::PointXYZRGB>::setIndices(boost::detail::sp_if_not_array<const pcl::PointIndices>::type)’mExtractInd.setIndices (boost::make_shared<const pcl::PointIndices> (indices));
报错3:
/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/orbslam/src/MergeSG.cc:22:98: error: wrong number of template arguments (3, should be at least 1)euclidean_cluster_comparator_(new pcl::EuclideanClusterComparator<PointT, pcl::Normal, pcl::Label>)/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/orbslam/src/MergeSG.cc:398:69: error: no matching function for call to ‘pcl::EuclideanClusterComparator<pcl::PointXYZRGB>::setExcludeLabels(std::shared_ptr<const std::vector<bool> >&)’euclidean_cluster_comparator_->setExcludeLabels(plane_labels_ptr);
报错4:
/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/dense_surfel_mapping/src/surfel_map.cpp:767:46: required from here
/opt/ros/noetic/include/ros/message_traits.h:125:14: error: ‘const class std::shared_ptr<pcl::PointCloud<pcl::PointXYZI> >’ has no member named ‘__getMD5Sum’return m.__getMD5Sum().c_str();/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/dense_surfel_mapping/src/surfel_map.cpp:767:46: required from here
/opt/ros/noetic/include/ros/message_traits.h:142:14: error: ‘const class std::shared_ptr<pcl::PointCloud<pcl::PointXYZI> >’ has no member named ‘__getDataType’return m.__getDataType().c_str();/home/ckq/catkin_ws_iit/src/semantic_slam_nav_ros/dense_surfel_mapping/src/surfel_map.cpp:767:46: required from here
/opt/ros/noetic/include/ros/message_traits.h:125:14: error: ‘const class std::shared_ptr<pcl::PointCloud<pcl::PointXYZI> >’ has no member named ‘__getMD5Sum’return m.__getMD5Sum().c_str();已经解决!!! 详情看csdn的相关博客内容!!!
orbslam_semantic_nav_ros 编译出现的问题2
数据集下载
https://lifelong-robotic-vision.github.io/dataset/scene