本文记录开源项目Bruce-SLAM的复现过程
项目github:https://github.com/jake3991/sonar-SLAM
项目论文:Virtual Maps for Autonomous Exploration of Cluttered Underwater Environments,https://ieeexplore.ieee.org/document/9806387
参考博客:https://blog.csdn.net/a_student_2020/article/details/146397029
目录
一、依赖环境搭建
1. 安装 ROS-noetic
使用Ubuntu20系统,安装ros可以通过ROS官方教程https://wiki.ros.org/noetic/Installation/Ubuntu,也可以通过小鱼一键安装https://github.com/fishros/install,一键安装指令如下,根据它的问题一路选下去就行。
wget http://fishros.com/install -O fishros && . fishros
2. 安装依赖
安装catkin-tools
sudo apt update
sudo apt install python3-catkin-tools
安装catkin-pybind11
sudo apt-get install ros-noetic-pybind11-catkin
安装cv_bridge
sudo apt install ros-noetic-cv-bridge
安装ros_numpy
sudo apt install -y ros-noetic-ros-numpy
3. 安装python依赖
python3 -m pip install --upgrade pip # 更新 pip
python3 -m pip install gtsam matplotlib message_filters numpy opencv-python rosbag rospkg scikit-learn scipy shapely tf tqdm pyyaml
sudo apt install python3-rospy python3-catkin-pkg python3-rospkg
sudo apt install ros-noetic-tf ros-noetic-tf-conversions ros-noetic-sensor-msgs
4. 创建工作空间
再Home目录下创建工作空间
mkdir -p ~/catkin_ws_sonar/src
cd ~/catkin_ws_sonar/src
# 这里放/clone bruce-slam 仓库
# git clone ...
catkin build
catkin init

5. 克隆编译项目指定库
cd ~/catkin_ws_sonar/src
git clone https://github.com/ethz-asl/libnabo.git
git clone https://github.com/ethz-asl/libpointmatcher.git
git clone https://github.com/jake3991/Argonaut.git
其中libpointmatcher限定了版本,需要checkout
cd libpointmatcher
git checkout d478ef2eb33894d5f1fe84d8c62cec2fc6da818f
然后进行编译,检查是否有报错
cd ~/catkin_ws_sonar
catkin build
我这边报了一个error

缺了一个包,再安装一下
sudo apt update
sudo apt install -y ros-noetic-nav-core
再编译就成功了

二、编译项目(推荐先确定环境没问题再clone项目)
clone项目到src目录,然后进行编译,看有没有报错
cd ~/catkin_ws_sonar/src
git clone https://github.com/jake3991/sonar-SLAM.git
cd ~/catkin_ws_sonar
catkin build
如果有报错就和上面一样根据实际报错提示安装缺少的库
我这边报错如下

检查发现需要把工程编译标准切到c++14,修改cmakelists,添加一句
set(CMAKE_CXX_STANDARD 14)

再运行catkin_build,编译通过

三、离线运行slam
官方sample data:https://drive.google.com/file/d/1nmiFfyk8mVssLqgac7BOe4_RPBP6Wnc9/view?usp=sharing
下载后记录放置地址
1. 启动roscore
roscore
2. 启动slam
再开一个窗口
cd ~/catkin_ws_sonar
source devel/setup.bash
roslaunch bruce_slam slam.launch
运行后报错

发现是几个 Python 节点脚本的 shebang 是 #!/usr/bin/env python,但 Ubuntu20 默认没有 python 这个命令(只有 python3),所以 roslaunch 启动脚本直接 exit code 127。
安装python命令映射到python3
sudo apt update
sudo apt install -y python-is-python3
再运行又报错

发现是现在在用的 NumPy 版本太新(~/.local/lib/python3.8/site-packages/numpy),而 ROS Noetic 自带的 ros_numpy 代码还在用 np.float。np.float 在 NumPy 1.24+ 被彻底移除了,降级安装ros_numpy
python3 -m pip install --user --force-reinstall "numpy==1.23.5"
运行成功

3. 播放rosbag
另外开一个窗口,先进到bag地址,播放rosbag
rosbag play sample_data.bag #播放制定rosbag
发现报错

检查确认是gtsam版本差异,导致quaternion()写法不一致,修改指定代码~/catkin_ws_sonar/src/sonar-SLAM/bruce_slam/src/bruce_slam/utils/conversions.py
把原本的qw, qx, qy, qz = pose.rotation().quaternion()g改为
q = pose.rotation().toQuaternion()
qw, qx, qy, qz = q.w(), q.x(), q.y(), q.z()

重新编译后再运行,终于跑通

2645

被折叠的 条评论
为什么被折叠?



