1.1更新:
sudo apt update
sudo apt upgrade
1.2设置软件源(清华):
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
1.3设置最新的密钥:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
1.4更新:
sudo apt-get update
1.5安装:
sudo apt-get install ros-melodic-desktop-full
sudo apt-get install ros-melodic-rqt*
1.6初始化rosdep:
sudo apt install python-rosdep
sudo rosdep init
rosdep update
坑1:rosdep init
出现问题,原因是被墙了,前几年的解决方法均不管用。
唯一解决方法是:必须用tizi
。
Ubuntu配置tizi
的方法比较复杂,这里分享一个手机热点开tizi
的方法:
苹果手机不知道,按原理搜一下类似软件试一下。
打开手机热点以及tizi
,然后打开Every Proxy
,
Ubuntu系统连接手机热点,打开System Setting -> Network -> Network proxy
改为手动(manual)
测试Google.com。成功后继续:
sudo rosdep init
rosdep update
1.7安装rosinstall:
sudo apt-get install python-rosinstall
1.8设置环境变量:
sudo apt-get install net-tools
gedit ~/.bashrc
尾端添加:
# Set ROS melodic
source /opt/ros/melodic/setup.bash
# Set ROS Network
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://${ROS_HOSTNAME}:11311
更新:
source ~/.bashrc
1.9测试ROS:
roscore
官网下载:https://opencv.org/releases/
Nano和TX2默认配置了OpenCV4,但是CCM-SLAM用的是OpenCV3的函数。
现在安装OpenCV3,后面配置CMakeLists.txt使工程指向OpenCV3。
下面的安装步骤适用于系统中已存在OpenCV4版本的情况。
2.1解压并进入文件夹,在文件夹下打开终端,安装依赖:
sudo apt install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
可能会出现 无法定位软件包libjasper-dev 的错误提示
查阅资料后找到解决方法如下:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt upgrade
sudo apt install libjasper1 libjasper-dev
2.2创建编译目录(build)并进入:
mkdir build && cd build
2.3cmake配置编译:
cmake -DCMAKE_INSTALL_PREFIX=/home/nano/opencv-3.4.14 -DCMAKE_BUILD_TYPE="Rlease" -DOPENCV_GENERATE_PKGCONFIG=ON ..
2.4make编译:
make -j8
2.5安装:
make install
2.6环境配置添加库路径(方式一):
sudo /bin/bash -c 'echo "/home/nano/opencv-3.4.14/lib" > /etc/ld.so.conf.d/opencv.conf'
2.6环境配置添加库路径(方式二):
sudo gedit /etc/ld.so.conf.d/opencv.conf
打开后可能是空文件,在文件内容最后添加
/home/nano/opencv-3.4.14/lib
2.7更新系统库:
sudo ldconfig
2.8配置bash,执行如下命令
gedit ~/.bashrc
在末尾添加
#opencv-3.4.14
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/home/nano/opencv-3.4.14/lib/pkgconfig
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:./home/nano/opencv-3.4.14/lib
2.9保存退出,然后执行如下命令使得配置生效
source ~/.bashrc
2.10查看OpenCV版本
pkg-config --modversion opencv
坑2:由于Jetson Nano只有4G内存,编译CCM-SLAM时内存会不够用而卡死。
参考:http://www.xiaoheidiannao.com/220015.html
3.1查看内存:
free -m
3.2新建内存:
sudo fallocate -l 16G /icedustpan
3.3查看虚拟内存:
ls -lh /icedustpan
3.4设置虚拟内存权限:
sudo chmod 600 /icedustpan
3.5挂载虚拟内存:
sudo mkswap /icedustpan
3.6启用虚拟内存:
sudo swapon /icedustpan
查看虚拟内存:
free -m
3.7设置自动挂载虚拟内存:
sudo gedit /etc/fstab
在最后面加入下列的信息:
/icedustpan none swap sw 0 0
源码地址:https://github.com/VIS4ROB-lab/ccm_slam
4.1依赖项:
sudo apt-get install python-catkin-tools
4.2创建工作空间:
mkdir -p ~/ccmslam_ws/src
cd ~/ccmslam_ws
source /opt/ros/melodic/setup.bash
catkin init
catkin config --extend /opt/ros/melodic
4.3克隆CCM-SLAM:
cd ~/ccmslam_ws/src
git clone https://github.com/VIS4ROB-lab/ccm_slam.git
4.4编译DBoW2:
cd ~/ccmslam_ws/src/ccm_slam/cslam/thirdparty/DBoW2/
mkdir build
cd build
cmake ..
make -j8
4.5编译g2o:
cd ~/ccmslam_ws/src/ccm_slam/cslam/thirdparty/g2o
mkdir build
cd build
cmake --cmake-args -DG2O_U14=0 ..
make -j8
4.6解压Vocabulary:
cd ~/ccmslam_ws/src/ccm_slam/cslam/conf
unzip ORBvoc.txt.zip
坑3:
CCM-SLAM只在ROS Kinetic with OpenCV 3和ROS Indigo with OpenCV 2测试过,CMakeLists.txt文件也是只有这两个分支。先链接ROS Melodic:
参考:https://github.com/VIS4ROB-lab/ccm_slam/issues/19
4.7 Ubuntu 18.04下编译之前需要修改文件:~/ccmslam_ws/src/ccm_slam/cslam/CMakeLists.txt
gedit ~/ccmslam_ws/src/ccm_slam/cslam/CMakeLists.txt
将16行的
else()
改为:
elseif($ENV{ROS_DISTRO} MATCHES "melodic")
保存退出。
坑4:Jetson Nano/TX2(因为已存在OpenCV4,但工程需要3版本,所以需要链接到OpenCV3)下编译前需要修改文件:~/ccmslam_ws/src/ccm_slam/cslam/CMakeLists.txt
参考:https://blog.csdn.net/chengde6896383/article/details/90702160/
4.8 修改文件:
gedit ~/ccmslam_ws/src/ccm_slam/cslam/CMakeLists.txt
首先,在原62行之前加入:
# 输入安装路径
set(CMAKE_PREFIX_PATH "/home/nano/opencv-3.4.14/")
# 指明搜索文件
set(OpenCV_DIR "/home/nano/opencv-3.4.14/build/OpenCVConfig.cmake")
然后,把紧跟着的find_package
修改为:
if(NOT ${ROS_VERSION_INDIGO})
find_package(OpenCV 3.4.14 EXACT)
endif()
最后,ROS搜索的cv_bridge
是默认路径下的,修改到我们后来安装的3.4.14:
sudo gedit /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake
将第96行的默认搜索地址修改为自己的安装目录和include目录:
set(_include_dirs "include;/home/nano/opencv-3.4.14;/home/nano/opencv-3.4.14/include")
如果出现错误:
Could not find a package configuration file provided by “roscpp” with any of the following names:
roscppConfig.cmake
roscpp-config.cmake
解决方案:在CMakeLists.txt中加入:
find_package(roscpp REQUIRED)
include_directories(${roscpp_INCLUDE_DIRS})
以此类推,缺啥补啥。
4.9 编译CCM-SLAM
cd ~/ccmslam_ws/
catkin build ccmslam --cmake-args -DG2O_U14=0 -DCMAKE_BUILD_TYPE=Release
配置环境:
gedit ~/.bashrc
在最后一行写入:
source ~/ccmslam_ws/devel/setup.bash
至此,CCM-SLAM配置完成。
4.10 测试CCM-SLAM
4.10.1 使用数据集测试:
到https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets下载EuRoC machine hall rosbag 数据。
然后参考:https://www.cnblogs.com/polipolu/p/13679414.html
编写一个.sh文件ccm-EuRoC.sh,内容为
gnome-terminal -t "server" -x bash -c "roslaunch ccmslam Server.launch;exec bash;"
sleep 3
gnome-terminal -t "agent1" -x bash -c "roslaunch ccmslam Client0_euroc.launch;exec bash;"
gnome-terminal -t "agent2" -x bash -c "roslaunch ccmslam Client1_euroc.launch;exec bash;"
sleep 3
gnome-terminal -t "agentbag1" -x bash -c "cd 你的数据集地址;rosbag play MH_01_easy.bag --start 45;exec bash;"
gnome-terminal -t "agentbag2" -x bash -c "cd 你的数据集地址;rosbag play MH_02_easy.bag --start 35 /cam0/image_raw:=/cam0/image_raw1;exec bash;" sleep 2 gnome-terminal -t "rviz" -x bash -c "roscd ccmslam ;rviz -d conf/rviz/ccmslam.rviz;exec bash;"
#如果roscd报错的话就直接用cd
然后
chmod +x ccm-EuRoC.sh
sh ccm-EuRoC.sh
4.10.2使用摄像头测试
请参考我之前的文章:https://blog.csdn.net/klsjadkls/article/details/115856515
转载请备注https://blog.csdn.net/klsjadkls/article/details/116116050。