Docker & VINS-Fusion 实时真实环境运行

准备工作,根据 vins-fusion 开源代码提示安装 vins-fusion 镜像

https://github.com/HKUST-Aerial-Robotics/VINS-Fusion

并且需要主机(无人机或其他设备)发布 ros 话题

 设置主机(工作站)和从机(无人机)的ROS_MASTER_URI(用于主机和从机的ROS通信)

(1)设置主机 ROS_MASTER_URI

首先进入~/.bashrc界面

lilabws01@lilabws01:~$ sudo gedit ~/.bashrc

在文本最后加入(如果已有则修改),并保存

export ROS_MASTER_URI=http://192.168.1.201:11311  # 主机IP
export ROS_HOSTNAME=192.168.1.201                 # 本地IP
export ROS_IP=192.168.1.201                       # 本地IP

source 当前该文件

lilabws01@lilabws01:~$ source ~/.bashrc 

设置从机 ROS_MASTER_URI

首先进入~/.bashrc界面

nvidia@NXX-02:~$ sudo gedit ~/.bashrc

在文本最后加入(如果已有则修改),并保存

export ROS_MASTER_URI=http://192.168.1.201:11311  # 主机IP
export ROS_HOSTNAME=192.168.1.211                 # 本地IP
export ROS_IP=192.168.1.211                       # 本地IP

 source 当前该文件

nvidia@NXX-02:~$ source ~/.bashrc 

方法一(最稳妥)

(1)运行 roscore

(2)创建 docker 容器,终端输入

docker run \
-it \
--rm \
--net=host \
-v ~/catkin_ws/src/VINS-Fusion:/root/catkin_ws/src/VINS-Fusion/ \
-v ~/.bashrc:/root/.bashrc \
ros:vins-fusion \
/bin/bash

(3)进入容器之后,cmake编译,设置主从机ROS_MASTER_URI,并测试是否能受到话题,终端输入

cd /root/catkin_ws/;
catkin config \
        --env-cache \
        --extend /opt/ros/noetic \
    --cmake-args \
        -DCMAKE_BUILD_TYPE=Release; \
    catkin build; \
    source ~/.bashrc; \
    rostopic list;

(4)在容器内,启动 vins 节点

rosrun vins vins_node /root/catkin_ws/src/VINS-Fusion/config/realsense_d435i/realsense_stereo_imu_config.yaml

如果需要调用回环,需要另起一个终端,

查看前面运行的 docker 容器 ID,终端输入

docker ps

输出如下结果

CONTAINER ID   IMAGE             COMMAND                   CREATED         STATUS         PORTS     NAMES
fc1060e028a7   ros:vins-fusion   "/ros_entrypoint.sh …"   2 minutes ago   Up 2 minutes             quizzical_clarke

注意的容器 ID 为 fc1060e028a7

然后进入容器

docker exec -it fc1060e028a7 /bin/bash

运行回环节点

rosrun loop_fusion loop_fusion_node /root/catkin_ws/src/VINS-Fusion/config/realsense_d435i/realsense_stereo_imu_config.yaml

(5)在物理机终端打开 rviz 即可看见 vins 效果

rviz -d ~/catkin_ws/src/VINS-Fusion/config/vins_rviz_config.rviz

 方法二

(利用shell脚本之间生成容器并运行vins-fusion)

进入 vins-fusion 的 Docker 文件夹

cd ~/catkin_ws/src/VINS-Fusion/docker

编辑 run.sh 文件

新增挂载 ~/.bashrc 文件,替换 source 的文件 devel/setup.bash 为 ~/.bashrc;

-v ~/.bashrc:/root/.bashrc
source ~/.bashrc;

运行

./run.sh ~/catkin_ws/src/VINS-Fusion/config/realsense_d435i/realsense_stereo_imu_config.yaml 

方法三

创建一个新的shell脚本

touch run_vins.sh

粘贴如下代码

#!/bin/bash
trap : SIGTERM SIGINT

CONFIG_IN_DOCKER="/root/catkin_ws/src/VINS-Fusion/config/realsense_d435i/realsense_stereo_imu_config.yaml"

roscore &
ROSCORE_PID=$!
sleep 1

rviz -d ~/catkin_ws/src/VINS-Fusion/config/vins_rviz_config.rviz &
RVIZ_PID=$!

docker run \
-it \
--rm \
--net=host \
-v ~/catkin_ws/src/VINS-Fusion/:/root/catkin_ws/src/VINS-Fusion/ \
-v ~/.bashrc:/root/.bashrc \
ros:vins-fusion \
/bin/bash -c \
"cd /root/catkin_ws/; \
catkin config \
        --env-cache \
        --extend /opt/ros/$ROS_DISTRO \
    --cmake-args \
        -DCMAKE_BUILD_TYPE=Release; \
    catkin build; \
    source ~/.bashrc; \
    rostopic list; \
    rosrun vins vins_node ${CONFIG_IN_DOCKER}"

wait $ROSCORE_PID
wait $RVIZ_PID

if [[ $? -gt 128 ]]
then
    kill $ROSCORE_PID
    kill $RVIZ_PID
fi

然后运行

./run_vins.sh

此时主机开始监听无人机在话题中发布的消息,在从机端发布话题即可在rviz中可视化。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值