Airsim中运行OpenVINS和VINS_Fusion

2023-05-16

Airsim中运行OpenVINS和VINS_Fusion

  • 1. 简介
  • 2. 参考
  • 3. 步骤
    • 3.1 编译
    • 3.2 运行
    • 3.3 运行结果
    • 3.4 相机和IMU参数配置

1. 简介

本文简介在Airsim中运行OpenVINS和VINS_Fusion.

2. 参考

  1. 无人飞行器智能感知技术竞赛 赛事公告
  2. 在AirSim中控制无人机平台并采集数据
  3. OpenVINS 官网
  4. AirSim中运行VIO算法(VINS-Mono)

3. 步骤

3.1 编译

  1. 模拟器和Airsim_ros_wrapper下载安装
    参考该工程的README.md文件,本文按照“LINUX 单机开发模式”进行配置。
    (1)模拟器下载(simulator_LINUX.zip)
    在浏览器中输入此网址即可开始下载:
    https://stg-robomasters-hz-q0o2.oss-cn-hangzhou.aliyuncs.com/simulator/simulator_LINUX.zip
    (2)airsim_ros_wrapper下载
git clone https://github.com/RoboMaster/IntelligentUAVChampionshipSimulator.git
  1. OpenVINS 下载安装
    参照 OpenVINS的说明文档,安装OpenVINS.

  2. VINS_Fusion下载安装
    参照VINS-Fusion的README.md, 安装VINS-Fusion.

  3. 键盘控制脚本
    这个博客中提供了一个“无人机控制“的python脚本。复制该脚本的内容,保存为本地文件"airsim_keyboard.py"。

3.2 运行

  1. 启动Airsim仿真器 ( simulator_LINUX.zip )
python launcher.py

输入本机IP地址, 127.0.0.1; 启动成功之后,按键“3”, 切到 3.自主飞行-双目 模式。
2. 启动Airsim_ros_wrapper

cd  ${YourPath}/IntelligentUAVChampionshipSimulator/roswrapper
source ros/devel/setup.bash
./simulator.sh  127.0.0.1

用于将收到的Airsim中的数据通过ROS发布出来。
3. 启动OpenVINS

cd ${YourPath}/openvins_ws
source devel/setup.bash
roslaunch ov_msckf  airsim.launch

打开另一个终端,rviz显示openvins运行情况:

rviz  -d  '${YourPath}/openvins_ws/src/open_vins/ov_msckf/launch/display.rviz'
  1. 启动VINS-Fusion
roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
(optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/airsim/airsim_stereo_imu_config.yaml 
  1. 启动键盘控制脚本
python airsim_keyboard.py
  1. 同时录制bag数据
    录制的rosbag中,包含双目图像和IMU数据,以及无人机的轨迹真值数据。
rosbag  record   /airsim_node/drone_1/front_left/Scene  /airsim_node/drone_1/front_right/Scene   /airsim_node/drone_1/imu/imu    /airsim_node/drone_1/odom_local_ned
  1. 录制完rosbag之后,可以参考 “https://github.com/ethz-asl/kalibr/blob/master/aslam_offline_calibration/kalibr/python/kalibr_bagextractor” , 对bag中的数据进行提取。

3.3 运行结果

  • 仿真器: 在 simulator_LINUX/Settings/Stereo.json 中,设置 “ViewMode”: “NoDisplay”, 可以提高图像输出帧率。
    在这里插入图片描述
  • OpenVINS
    在这里插入图片描述
  • VINS-Fusion
    在这里插入图片描述
  • 轨迹对齐
    • vio估计的轨迹
      OpenVINS 的 airsim.launch 文件中,配置“ dosave ”为“true”, 可以保存下运行轨迹 “traj_estimate.txt”, 并处理为euroc格式 (t, x, y, z, qw, qx, qy, qz )。
    • airsim的仿真真值
      读取rosbag中的“/airsim_node/drone_1/odom_local_ned” 数据,并保存为euroc格式的轨迹文件,命名为 truth.csv
    • evo轨迹对齐
evo_traj  euroc  traj_estimate.csv   --ref   truth.csv   -a  -p

在这里插入图片描述

3.4 相机和IMU参数配置

参考博客, 可以得到工程“simulator_LINUX/Settings/Stereo.json”中对应的相机参数(kalibr_imucam_chain.yaml)为:

%YAML:1.0

cam0:
  T_imu_cam: #rotation from camera to IMU R_CtoI, position of camera in IMU p_CinI
    - [0.0, 0.0, 1.0, 0.26]
    - [1.0, 0.0, 0.0, -0.0475]
    - [0.0, 1.0, 0.0, 0.0]
    - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [1]
  camera_model: pinhole
  distortion_coeffs: [0.0,0.0,0.0,0.0]
  distortion_model: radtan
  intrinsics: [268.511881977, 268.511881977, 320, 240] #fu, fv, cu, cv # horz fov is 100 degree
  resolution: [640, 480]
  rostopic: /cam0/image_raw
cam1:
  T_imu_cam: #rotation from camera to IMU R_CtoI, position of camera in IMU p_CinI
    - [0.0, 0.0, 1.0, 0.26]
    - [1.0, 0.0, 0.0, 0.0475]
    - [0.0, 1.0, 0.0, 0.0]
    - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [0]
  camera_model: pinhole
  distortion_coeffs: [0.0,0.0,0.0,0.0]
  distortion_model: radtan
  intrinsics: [268.511881977, 268.511881977, 320, 240] #fu, fv, cu, cv # horz fov is 100 degree
  resolution: [640, 480]
  rostopic: /cam1/image_raw

IMU的噪声参数(kalibr_imu_chain.yaml)这里大致设为:

%YAML:1.0

imu0:
  T_i_b:
    - [1.0, 0.0, 0.0, 0.0]
    - [0.0, 1.0, 0.0, 0.0]
    - [0.0, 0.0, 1.0, 0.0]
    - [0.0, 0.0, 0.0, 1.0]
  accelerometer_noise_density: 2.0000e-3  # [ m / s^2 / sqrt(Hz) ]   ( accel "white noise" )
  accelerometer_random_walk: 3.0000e-3    # [ m / s^3 / sqrt(Hz) ].  ( accel bias diffusion )
  gyroscope_noise_density: 1.6968e-04     # [ rad / s / sqrt(Hz) ]   ( gyro "white noise" )
  gyroscope_random_walk: 1.9393e-05       # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
  model: calibrated
  rostopic: /imu0
  time_offset: 0.0
  update_rate: 100.0

airsim.launch 如下:

<launch>

    <!-- what config we are going to run (should match folder name) -->
    <arg name="verbosity"   default="ALL" /> <!-- ALL, DEBUG, INFO, WARNING, ERROR, SILENT -->
    <arg name="config"      default="airsim" /> <!-- euroc_mav, tum_vi, rpng_aruco -->
    <arg name="config_path" default="$(find ov_msckf)/../config/$(arg config)/estimator_config.yaml" />

    <!-- mono or stereo and what ros bag to play -->
    <arg name="max_cameras" default="2" />
    <arg name="use_stereo"  default="true" />
    <arg name="bag_start"   default="0" /> <!-- v1-2: 0, mh1: 40, mh2: 35, mh3: 17.5, mh4-5: 15 -->
    <arg name="bag_rate"    default="1" />
    <arg name="dataset"     default="2022-08-24-10-59-44" /> <!-- V1_01_easy, V1_02_medium, V2_02_medium -->
    <arg name="dobag"       default="false" /> <!-- if we should play back the bag -->
    <arg name="bag"         default="/media/patrick/RPNG\ FLASH\ 3/$(arg config)/$(arg dataset).bag" />

    <!-- saving trajectory path and timing information -->
    <arg name="dosave"      default="true" />
    <arg name="dotime"      default="false" />
    <arg name="path_est"    default="/tmp/traj_estimate.txt" />
    <arg name="path_time"   default="/tmp/traj_timing.txt" />

    <!-- if we should viz the groundtruth -->
    <arg name="dolivetraj"  default="false" />
    <arg name="path_gt"     default="$(find ov_data)/$(arg config)/$(arg dataset).csv" />


    <!-- MASTER NODE! -->
    <node name="ov_msckf" pkg="ov_msckf" type="run_subscribe_msckf" output="screen" clear_params="true" required="true">
        <remap from="/cam0/image_raw" to="/airsim_node/drone_1/front_left/Scene" />
        <remap from="/cam1/image_raw" to="/airsim_node/drone_1/front_right/Scene" />
        <remap from="/imu0" to="/airsim_node/drone_1/imu/imu" />

        <!-- master configuration object -->
        <param name="verbosity"              type="string" value="$(arg verbosity)" />
        <param name="config_path"            type="string" value="$(arg config_path)" />

        <!-- world/filter parameters -->
        <param name="use_stereo"             type="bool"   value="$(arg use_stereo)" />
        <param name="max_cameras"            type="int"    value="$(arg max_cameras)" />

        <!-- timing statistics recording -->
        <param name="record_timing_information"   type="bool"   value="$(arg dotime)" />
        <param name="record_timing_filepath"      type="string" value="$(arg path_time)" />

    </node>

    <!-- play the dataset -->
    <group if="$(arg dobag)">
        <node pkg="rosbag" type="play" name="rosbag" args="-d 1 -r $(arg bag_rate) -s $(arg bag_start) $(arg bag)" required="true"/>
    </group>

    <!-- record the trajectory if enabled -->
    <group if="$(arg dosave)">
        <node name="recorder_estimate" pkg="ov_eval" type="pose_to_file" output="screen" required="true">
            <param name="topic"      type="str" value="/ov_msckf/poseimu" />
            <param name="topic_type" type="str" value="PoseWithCovarianceStamped" />
            <param name="output"     type="str" value="$(arg path_est)" />
        </node>
    </group>

    <!-- path viz of aligned gt -->
    <group if="$(arg dolivetraj)">
        <node name="live_align_trajectory" pkg="ov_eval" type="live_align_trajectory" output="log" clear_params="true">
            <param name="alignment_type" type="str" value="posyaw" />
            <param name="path_gt"        type="str" value="$(arg path_gt)" />
        </node>
    </group>


</launch>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Airsim中运行OpenVINS和VINS_Fusion 的相关文章

  • vins-fusion代码解读[一] vio主体

    SLAM新手 xff0c 欢迎讨论 港科大vins fusion代码解读 一 vins fusion与vins mono代码结构有很大相似性 这次先看看vins estimator节点内的内容 1 程序入口 xff1a 1 vins est
  • 工程(十一)——NUC11+D435i+VINS-FUSION+ESDF建图(github代码)

    博主的合并代码 git 64 github com huashu996 VINS FUSION ESDFmap git 一 D435i深度相机配置 1 1 SDK 43 ROS 参考我之前的博客 xff0c 步骤和所遇见的问题已经写的很详细
  • 【SLAM】VINS-MONO解析——综述

    目前网上有很多分析文章 xff0c 但是都只是一些比较基础的原理分析 xff0c 而且很多量 xff0c 虽然有推倒 xff0c 但是往往没有讲清楚这些量是什么 xff0c 为什么要有这些量 xff0c 这些量是从哪来的 xff0c 也没有
  • 2 用D435i运行VINS-fusion

    文章目录 1 VINS fusion的安装1 1 环境和依赖的安装1 2 编译VINS Fusion1 3 编译错误解决方法 2 VINS Fusion跑数据集3 用相机运行VINS Fusion 环境 xff1a Ubuntu20 04
  • 【学习SLAM】vins笔记

    VINS ROS source catkin ws devel setup bash 3 1 1 Open three terminals launch the vins estimator rviz and play the bag fi
  • realsense435i运行vins-mono,标定部分

    相机标定 1 安装kalibr xff1b 参考 xff1a https blog csdn net wangbaodong070411209 article details 112248834 https blog csdn net we
  • VINS-Mono

    非极大值抑制 NMS算法 xff0c 思想是搜索局部最大值 xff0c 抑制非极大值 输入 xff1a 目标边界框及其对应的置信度的分列表 xff0c 设定阈值 xff0c 阈值用来删除重叠较大的边界框 IoU xff1a 两个边界框的交集
  • 记录编译Vins-mono中遇到的问题

    ceres版本导致的问题 xff1a 开始用的ceres 2 0的版本 xff0c 在catkin make的时候会报关于ceres interger 的错误 xff0c 见下图 然后换成ceres 1 4的版本 xff0c 顺利解决这个问
  • VINS-Mono跑Kitti数据集

    参考文章 xff1a VINS Mono KITT00 测试 知乎 如何在kitti raw data上跑起vins mono 知乎 实际上我参考的是LIO SAM里将KITTI转化为bag的方法 Debug https blog csdn
  • VINS-Mono代码阅读笔记:feature_tracker代码阅读(转载)

    转载 xff1a https blog csdn net moyu123456789 article details 100988989 1 入口main函数 feature tracker结点的入口函数为feature tracker n
  • ubuntu20.04跑PL-VINS

    PL VINS源码 xff1a https github com cnqiangfu PL VINS 编译时报错 catkin make Ceres报错 报错信息 CMake Error at usr local lib cmake Cer
  • 关于VINS-MONO与VIO轨迹漂移问题定位的一些方向

    整个VINS MONO系统 xff0c 较容易在系统静止或外力给予较大冲击时产生轨迹漂移 xff0c 原因是imu的bias在预积分中持续发散 xff0c 视觉重投影误差产生的约束失效 如静止 xff0c 先验约束可能会在LM的线性求解器中
  • NVIDIA Jetson Xavier NX部署VINS-fusion-GPU

    组内大佬师兄今天抽出时间总结了一篇博客 xff0c 主要内容是 xff1a 把在阿木P450无人机上 xff0c 对自带的NVIDIA Jetson Xavier NX边缘计算机部署VINS fusion GPU教程 xff0c 并进行实验
  • VINS-MONO实践

    1 配置ros xff08 运行VINS需要 xff0c 记得换源 xff0c 会快一些 xff09 sudo apt get install ros melodic cv bridge ros melodic tf ros melodic
  • VINS-mono 解析 新特征

    在17 12 29 xff0c VINS更新了代码加入了新的特征 xff0c 包括map merge 地图合并 pose graph reuse 位姿图重利用 online temporal calibration function 在线时
  • VINS-mono 位姿图 重利用测试

    在前一篇博文里介绍了VINS mono pose graph reuse功能的使用 xff0c 这里接着贴出一些延伸的测试 xff0c 并进行一些探讨 延伸测试 一般来说 xff0c 加载地图是进行非GPS定位必要的一步 这里根据新的VIN
  • vins中的坐标系变换及g2r函数

    slam中经常会需要表示一个刚体的位姿 例如imu的位姿 xff0c 相机的位姿 首先我们需要在一个刚体上架上一个坐标系 这个坐标系为本体坐标系 怎么架一个坐标系 xff1f imu本身就有规定其本身的x y z轴的方向 相机一般认为 xf
  • D435i运行VINS-mono以及Kalib标定

    D435i运行VINS mono以及Kalib标定 系统说明 xff1a Ubuntu 18 04 内核版本 xff1a 5 4 0 1 运行VINS mono 参考博客VINS xff08 D435i xff09 测试 问题 xff1a
  • VINS问题整理

    VINS的初始化过程 xff1f 首先进行纯视觉SfM xff1a 把滑窗填满 xff0c 然后选择枢纽帧 xff08 和最后一帧有足够的视野重叠保证计算的位姿精度 xff0c 并且和最后一帧有足够的视差保证三角化地图点的精度 xff09
  • 如何解决:自定义 MSBuild 任务需要在 AppBase 外部进行组装

    我有一个自定义任务 想要在构建 C 项目时执行 此任务位于 MyTask dll 中 它引用另一个程序集 MyCommon DLL 问题是 MyCommon dll 相对于 MyTask dll 位于 Common MyCommon dll

随机推荐

  • make px4_sitl_default gazebo出现错误解决办法

    Ubuntu20 04按上图操作进行PX4配置的时候出现如下错误 xff08 确保你已经完整git Firmware或者已经翻墙 xff09 xff1a Configuring incomplete errors occurred See
  • ubuntu 常用命令汇总

    安装 sudo apt get install vim sudo apt get install nano 卸载 sudo apt get remove nano 给root用户设置密码 sudo passwd root 切换到root用户
  • 多任务学习-An Overview of Multi-Task Learning in Deep Neural Networks论文笔记

    An Overview of Multi Task Learning in Deep Neural Networks论文笔记 概述 xff1a 多任务学习有很多形式 xff0c 如联合学习 xff08 Joint Learning xff0
  • 结构体

    结构体 xff1a 结构是一些值的集合 xff0c 这些值称为成员变量 xff0c 每个成员可以是不同的类型变量 结构体成员的类型 xff1a 可以是 xff1a 标量 xff0c 数组 xff0c 指针 xff0c 结构体 struct
  • 【ROS-3】ROS实现图像目标检测

    1 darknet ros下载及编译 GitHub leggedrobotics darknet ros YOLO ROS Real Time Object Detection for ROS 直接下载zip就行 xff0c 解压到ros环
  • MapReduce实现基本SQL操作的原理

    Join的实现原理 select u name o orderid from order o join user u on o uid 61 u uid 在map阶段的输出中给每个value一个tag xff0c 用于区分数据来源 xff0
  • raw、qcow2、vmdk等虚拟机的镜像格式

    云计算用一个朋友的话来说 做云计算最苦逼的就是得时时刻刻为一些可能一辈子都碰不到的事做好准备 更苦逼的就是刚以为一个问题不会遇到 xff0c 立刻就发生了 这个还真的没有办法 xff0c 谁让哥我是搞云计算的呢 xff0c 简单一个虚拟化就
  • 树莓派3b安装win10的桌面版操作系统

    https www vediotalk com p 61 1999 目录 显示 国内播放节点 视频介绍 树莓派3b可以安装win10的桌面版操作系统 xff0c 大家也想体验的下 xff0c 不妨可以安装试试 xff0c 当然这并不能代替我
  • 无人机学习笔记之遥控篇

    遥控器 以LiteRadio 2c SE为例 1 遥控器按键 2 相关参数 3 遥控器工作原理 遥控器想要达到与无人机通信的功能需要有两部分配合完成 即 xff1a 发射器与接收机 遥控器上的控制杆转为无线电波发送给接收机 xff0c 而接
  • 二分类算法

    数据来源 xff1a 选自UCI机器学习库中的 银行营销数据集 Bank Marketing Data Set 算法完成目标 xff1a 这些数据与葡萄牙银行机构的营销活动相关 这些营销活动以电话为基础 xff0c 一般 xff0c 银行的
  • 防抖,节流 js

    概念 xff1a 函数防抖 debounce xff1a 触发高频事件后n秒内函数只会执行一次 xff0c 如果n秒内高频事件再次被触发 xff0c 则重新计算时间 函数节流 throttle xff1a 高频事件触发 xff0c 但在n秒
  • 如何远程访问Docker容器中的图形界面,如:kettle

    kettle是一个免费开源的 可视化的 功能强大的ETL工具 一般为了部署方便 xff0c 通常都部署在docker容器中 xff0c 那么如何远程访问kettle的图形界面呢 xff1f 我们通常有两种方式 xff1a 1 xff09 客
  • 电子罗盘的工作原理及校准

    ST集成传感器方案实现电子罗盘功能 电子 罗盘是一种重要的导航工具 xff0c 能实时提供移动物体的航向和姿态 随着半导体工艺的进步和手机 操作系统的发展 xff0c 集成了越来越多传感器 的智能手机 变得功能强大 xff0c 很多手机上都
  • OV2SLAM vs ORBSLAM2

    框图 各个模块算法 OV2SLAMORBSLAM2对比特征点提取与匹配Fast 43 LK光流Fast 43 ORB 描述子LK光流速度快输出的实时posePnPMotion only BAMotion only BA精度高一点初始化 单目
  • 论文学习--Learning High-Speed Flight in the Wild

    文章目录 Git子文链接代码运行编译环境编译步骤 可选 1 下载源码 2 先安装Open3D 3 修改Open3D的相关路径 4 开始编译 5 报错2 6 报错3 7 运行中报错 8 配置学习环境 9 下载flighemare渲染环境 运行
  • 仿真环境中生成专家轨迹

    仿真环境中生成专家轨迹 文章目录 仿真环境中生成专家轨迹简介代码运行步骤获取输入数据Reference TrajectoryEnvironment PointcloudFull Quadrotor State 方法描述输出规划轨迹 简介 本
  • 机器学习方法简介(1)--线性回归、逻辑回归、神经网络、支持向量机

    机器学习方法就是计算机根据已有的数据 xff0c 得出某个模型 xff0c 然后利用此模型预测未来的一种方法 机器学习的一个主要目的就是把人类思考归纳经验的过程转化为计算机通过对数据的处理计算得出模型的过程 1 回归算法 回归算法包括线性回
  • 仿真数据生成工具以及现有的仿真数据集

    现有仿真数据集 TartanAir TartanAir 是一个用AirSim生成的仿真SLAM数据集 xff0c 可以用于视觉SLAM 数据集提供 xff1a 双目 RGB 图像 xff0c 深度图像 xff0c 分割 xff0c 光流 x
  • 基于深度学习的SLAM概述

    目的 本博客总结最近看的几篇关于深度学习的SLAM以及基于深度学习的稠密重建 xff0c 简要对比记录特点 对比 年份名称类型框图前端输出地图方法特点回环2022DPVOmono VOVO每一帧的pose和paches转到3D坐标系下的3D
  • Airsim中运行OpenVINS和VINS_Fusion

    Airsim中运行OpenVINS和VINS Fusion 1 简介2 参考3 步骤3 1 编译3 2 运行3 3 运行结果3 4 相机和IMU参数配置 1 简介 本文简介在Airsim中运行OpenVINS和VINS Fusion 2 参