前提条件:物理机上安装好ROS和Docker,参考
http://wiki.ros.org/ROS/Installation
Ubuntu Docker 安装 | 菜鸟教程
Docker 换源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["镜像源网址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
完成后创建工作目录
mkdir -p ~/catkin_ws/src
cd ~/catkin/src
从 Github 上 git vins-mono 的源码
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
下载完成后进入的 docker 文件夹
cd ~/catkin_ws/src/VINS-Mono/docker/
打开 Dockerfile 文件
sudo gedit Dockerfile
将 ceres-solver 的版本
ENV CERES_VERSION="1.12.0"
改为
ENV CERES_VERSION="1.14.0"
将 ceres-solver 的下载地址
git clone https://ceres-solver.googlesource.com/ceres-solver
改为
https://github.com/ceres-solver/ceres-solver.git
将编译线程
make -j$(USE_PROC) install
改为
make -j8 install
简单期间可以直接复制下面内容替代文本
FROM ros:kinetic-perception
ENV CERES_VERSION="1.14.0"
ENV CATKIN_WS=/root/catkin_ws
# set up thread number for building
RUN if [ "x$(nproc)" = "x1" ] ; then export USE_PROC=1 ; \
else export USE_PROC=$(($(nproc)/2)) ; fi && \
apt-get update && apt-get install -y \
cmake \
libatlas-base-dev \
libeigen3-dev \
libgoogle-glog-dev \
libsuitesparse-dev \
python-catkin-tools \
ros-${ROS_DISTRO}-cv-bridge \
ros-${ROS_DISTRO}-image-transport \
ros-${ROS_DISTRO}-message-filters \
ros-${ROS_DISTRO}-tf && \
rm -rf /var/lib/apt/lists/* && \
# Build and install Ceres
git clone https://github.com/ceres-solver/ceres-solver.git && \
cd ceres-solver && \
git checkout tags/${CERES_VERSION} && \
mkdir build && cd build && \
cmake .. && \
make -j8 install && \
rm -rf ../../ceres-solver && \
mkdir -p $CATKIN_WS/src/VINS-Mono/
# Copy VINS-Mono
COPY ./ $CATKIN_WS/src/VINS-Mono/
# use the following line if you only have this dockerfile
# RUN git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
# Build VINS-Mono
WORKDIR $CATKIN_WS
ENV TERM xterm
ENV PYTHONIOENCODING UTF-8
RUN catkin config \
--extend /opt/ros/$ROS_DISTRO \
--cmake-args \
-DCMAKE_BUILD_TYPE=Release && \
catkin build && \
sed -i '/exec "$@"/i \
source "/root/catkin_ws/devel/setup.bash"' /ros_entrypoint.sh
保存并退出。终端输入
lilabws01@lilabws01:~/catkin_ws/src/VINS-Mono/docker$ make build
生成 vins-mono 的 docker 镜像。