当前位置: 首页 > news >正文

无人机避障——感知篇(Orin nx采用zed2双目相机进行Vins-Fusion定位,再通过位姿和深度图建图完成实时感知)

通过ZED2双目视觉相机进行Vins FusionSLAM定位之后,需要获取其中的信息完成无人机的实时感知部分,感知需要的是栅格地图话题,因为EGO-planner高飞老师就是通过Vins Fusion做感知的部分,所以其中可以借鉴一下建图方法。

通过ZED2双目视觉相机进行Vins FusionSLAM定位看我的前一篇涉及到双目视觉标定、IMU标定以及感知定位实际测试的文章:

无人机避障——感知篇(在Ubuntu20.04的Orin nx上基于ZED2实现Vins Fusion)-CSDN博客

结果展示:

借鉴Ego-Planner中的plan_env代码:

发现别人已经改好了EGO中相关建图环境部分的代码:

https://github.com/maxibooksiyi/ego_grid_map.git

 下载以后进行编译安装:

这部分基本操作不赘述。

然后修改话题:

这是我已经修改好的,就两个话题进行修改就可以。

原来的代码:

 //depth_sub_.reset(new message_filters::Subscriber<sensor_msgs::Image>(node_, "/grid_map/depth", 50));depth_sub_.reset(new message_filters::Subscriber<sensor_msgs::Image>(node_, "/camera/aligned_depth_to_color/image_raw", 50));if (mp_.pose_type_ == POSE_STAMPED){pose_sub_.reset(new message_filters::Subscriber<geometry_msgs::PoseStamped>(node_, "/grid_map/pose", 25));sync_image_pose_.reset(new message_filters::Synchronizer<SyncPolicyImagePose>(SyncPolicyImagePose(100), *depth_sub_, *pose_sub_));sync_image_pose_->registerCallback(boost::bind(&GridMap::depthPoseCallback, this, _1, _2));}else if (mp_.pose_type_ == ODOMETRY){//odom_sub_.reset(new message_filters::Subscriber<nav_msgs::Odometry>(node_, "/grid_map/odom", 100));odom_sub_.reset(new message_filters::Subscriber<nav_msgs::Odometry>(node_, "/vins_estimator/imu_propagate", 100));sync_image_odom_.reset(new message_filters::Synchronizer<SyncPolicyImageOdom>(SyncPolicyImageOdom(100), *depth_sub_, *odom_sub_));sync_image_odom_->registerCallback(boost::bind(&GridMap::depthOdomCallback, this, _1, _2));}

修改之后的代码:

//depth_sub_.reset(new message_filters::Subscriber<sensor_msgs::Image>(node_, "/grid_map/depth", 50));depth_sub_.reset(new message_filters::Subscriber<sensor_msgs::Image>(node_, "/zed2/zed_node/depth/depth_registered", 50));if (mp_.pose_type_ == POSE_STAMPED){pose_sub_.reset(new message_filters::Subscriber<geometry_msgs::PoseStamped>(node_, "/grid_map/pose", 25));sync_image_pose_.reset(new message_filters::Synchronizer<SyncPolicyImagePose>(SyncPolicyImagePose(100), *depth_sub_, *pose_sub_));sync_image_pose_->registerCallback(boost::bind(&GridMap::depthPoseCallback, this, _1, _2));}else if (mp_.pose_type_ == ODOMETRY){//odom_sub_.reset(new message_filters::Subscriber<nav_msgs::Odometry>(node_, "/grid_map/odom", 100));odom_sub_.reset(new message_filters::Subscriber<nav_msgs::Odometry>(node_, "/vins_estimator/imu_propagate", 100));sync_image_odom_.reset(new message_filters::Synchronizer<SyncPolicyImageOdom>(SyncPolicyImageOdom(100), *depth_sub_, *odom_sub_));sync_image_odom_->registerCallback(boost::bind(&GridMap::depthOdomCallback, this, _1, _2));}

需要修改话题:

双目相机的深度图话题:

<sensor_msgs::Image>(node_, "/camera/aligned_depth_to_color/image_raw", 50) 

 替换成ZED2双目相机的深度图话题:

<sensor_msgs::Image>(node_, "/zed2/zed_node/depth/depth_registered", 50)

Vins Fusion的位姿话题:

<nav_msgs::Odometry>(node_, "/vins_estimator/imu_propagate", 100)

无需修改,都是用Vins Fusion进行获取。

然后在我的前一个博客的bash文件的基础上,加上此处建图的一键启动命令:

# run.sh文件#!/bin/bash# Start roscore
gnome-terminal -- bash -c "roscore"
# Start RViz
# gnome-terminal -- bash -c "cd vins_ws && source devel/setup.bash && roslaunch vins vins_rviz.launch"# Start VINS-Fusion node
sleep 5
gnome-terminal -- bash -c "cd vins_ws && source devel/setup.bash && rosrun vins vins_node src/VINS-Fusion/config/zed/zed2_stereo_config.yaml"#回环检测
sleep 5
gnome-terminal -- bash -c "cd vins_ws && source devel/setup.bash && rosrun loop_fusion loop_fusion_node src/config/zed/zed2_stereo_config.yaml"## 实时相机
sleep 5
gnome-terminal -- bash -c "cd vins_ws && source devel/setup.bash && source /home/nvidia/zed_ws/devel/setup.bash && roslaunch zed_wrapper zed2.launch"## 实时建栅格地图
sleep 5
gnome-terminal -- bash -c "cd vins_ws && source devel/setup.bash && source /home/nvidia/ego_planner_grid/devel/setup.bash && roslaunch plan_env grid_map.launch"
# Play rosbag
# sleep 5
# gnome-terminal -- bash -c "source devel/setup.bash && rosbag play /home/nvidia/data_set/MH_01_easy.bag"# Keep the terminal open until you manually close it
echo "Press Enter to close the terminals"
read

最后就实现了建图效果!!!

这里发现好像用的一直都是Orin nx的igpu集成显卡进行计算的,之后将进行Vins Fusion GPU的实时建图感知。

以下是查找相关资料的参考内容(非常不错的参考!!!):

把ego的plan_env模块单独取出订阅位姿和深度图构建自己可用的导航地图 20240315_091408 截取视频 截取合并_哔哩哔哩_bilibili

把ego-planner的plan_env单独取出订阅位姿和深度图构建自己可用的导航地图_ego planner换地图-CSDN博客

http://www.xdnf.cn/news/1007389.html

相关文章:

  • MyBatisPlus框架
  • 偏移二进制码
  • CANopen转EtherCAT网关,从CANopen伺服到EtherCAT主站的通信
  • 如何选择适合的微机消谐器?
  • python35个保留字定义与用法(AI生成,待学完后勘误)
  • 美团NoCode的Database 使用指南
  • 金蝶K3 ERP 跨网段访问服务器卡顿问题排查和解决方法
  • 什么是渗透测试,对网站安全有哪些帮助?
  • 无感无刷电机的过零点检测电路多图对比
  • 【精华】双向心跳交互革命:AG-UI协议重塑AI Agent前端开发范式
  • HAL库硬件IIC死锁
  • 【sqlite开发】遇到的问题及解决方法收录
  • flowable 数据库表结构分析(超全版)
  • 泛型的PECS原则
  • 多版本IDA分别使用不同的python版本
  • 新能源知识库(45)光储一体机介绍
  • 力扣:基本计算器
  • 【最短循环节问题——hash】
  • 什么是RADIUS?一文速通!
  • 算法训练第十六天
  • 蓝桥杯国赛训练 day4
  • 主流邻近标记技术解析与应用
  • 构建安全可靠的电子商务平台的综合策略
  • 基础专题(遗漏):代码颜色
  • 学习日记-day28-6.12
  • OpenCV 随机数和随机颜色
  • 单片机中面向对象的思维
  • 如何处理HTML5兼容性的问题
  • glibc
  • 数据信号处理方法三板斧