周一至周三
由于交付时间有点紧,生产的同事主要在做交付到西藏的大型无人机,然后我就去帮忙装配小无人机
周三到周五
继续我的算法部分,这两天先跑通了orb-slam3,ORB-SLAM是西班牙 Zaragoza 大学的 Raúl Mur-Arta 编写的视觉 SLAM 系统。 它是一个完整的 SLAM 系统,包括视觉里程计、跟踪、回环检测,是一种完全基于稀疏特征点的单目 SLAM 系统,同时还有单目、双目、RGBD 相机的接口。核心是使用 ORB (Orinted FAST and BRIEF) 作为整个视觉 SLAM 中的核心特征。
这周首先在我的电脑上跑通了20年发布的orb-slam3。
效果如下:
图中左侧窗口为构建的稀疏地图,蓝色表示相机位姿,散点为提取的orb特征点,右侧窗口为双目红外相机实时拍摄到的图像,绿色点为图像中的检测到的特征点
运行步骤
主要运行环境为ubuntu20.04系统,ROS版本为noetic,OpenCV版本4.5.5,eigen版本3.4.0
在运行过程中主要官方文档,其中主要遇到了两个bug,如下
opencv版本问题
在运行ROS的实例中,由于安装时ROS noetic自带的有4.2.0的OpenCV,cv_bridge也是4.2的,导致会出现如下错误
'cv::Exception' what(): OpenCV(4.5.5) /home/ubuntu/Downloads/opencv-4.5.5/opencv/modules/core/src/matrix.cpp:250: error: (-215:Assertion failed) s >= 0 in function 'setSize'`
'cv::Exception' what(): OpenCV(4.5.5) /home/ubuntu/Downloads/opencv-4.5.5/opencv/modules/core/src/alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 87219830269440 bytes in function 'OutOfMemoryError
需要自己再下载一个cv_bridge的源码,然后编译出本机4.5.5版本的cv_bridge,随后在orbslam3的CMakeLists.txt中修改如下
set(cv_bridge_DIR "/home/username/path_to_cvbridge_build_ws/devel/share/cv_bridge/cmake")
set(OpenCV_DIR /usr/local/share/opencv4)
LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
find_package(OpenCV 4.5.5 REQUIRED)
if(NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV > 4.4 not found.")
endif()
MESSAGE("OPENCV VERSION:")
MESSAGE(${OpenCV_VERSION})
c++版本问题
原版默认的c++为c++11版本,但实操发现编译无法通过,需要修改为c++14,修改如下
# Check C++11 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX11)
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++11 support. Please use a different C++ compiler.")
endif()
#添加c++14标准
eigen3
CMake Error at CMakeLists.txt:44 (find_package):
Found package configuration file:
/usr/local/lib/cmake/Pangolin/PangolinConfig.cmake
but it set Pangolin_FOUND to FALSE so package "Pangolin" is considered to
be NOT FOUND. Reason given by package:
Pangolin could not be found because dependency Eigen3 could not be found.
cmakelists.txt中eigen部分换为
FIND_PACKAGE(Eigen3 REQUIRED NO_MODULE)
intel realsense d455相关设置
需要将红外相机的红外发射器关掉,否则会极大影响特征的提取
stereo_module emitter_enabled
需要将lanuch文件中这两项设为false
下一周计划
目前的算法中只能建立起稀疏地图用于自身的定位,下一步需要借助pcl库和深度相机建立起稠密点云地图来实现避障和导航功能
Comments