为Gazebo中的iris无人机添加realsense D435i相机

news/2025/3/19 14:41:09/文章来源:https://www.cnblogs.com/rui27/p/18780658

本机环境和实现目标

本机的系统位ubuntu20.04,已安装有ros noetic和PX4_Firmware,能够在Gazebo的环境中进行无人机的仿真。因为后续需要用实验室搭载有realsense D435i相机的无人机进行集群跟踪与避障的实验,准备为Gazebo中的iris无人机搭载上D435i相机先进行仿真验证。
注意:D435i相机是一款深度相机,由左右两个红外摄像头和一个RGB相机组成,能够给用户返回深度图像、左右眼图像和RGB图像。PX4_Firmware的gazebo模型中已有配备realsense相机和搭载有realsense相机的无人机,如下图所示。但为了在心理上觉得仿真更加可靠以及我严重的强迫症,我还是希望自己将realsense开源的D435i相机模型安装到iris无人机上,嫌麻烦的可以直接使用中的iris_realsense_camera模型,该模型同样能返回深度图像、左右眼图像和RGB图像等信息。写文档的时候对比了其中的.sdf文件,两者确实是一样的,区别只在于发布图像话题的名字不同,以及相机外观可能不同。

下载realsense_gazebo_ros功能包并进行编译

新建工作空间,在工作空间中克隆realsense_gazebo_ros功能包并进行编译,过程如下:

mkdir -p realsense_ws/src
cd realsense_ws/src
git clone https://gitee.com/nie_xun/realsense_ros_gazebo.git
cd realsense_ws
catkin_make
source devel/setup.sh

编译过后我们在该工作空间的/devel/lib目录下得到了librealsense_gazebo_plugin.so共享库,在加载D435i相机模型时会调用到该共享库。
接下来查询Gazebo插件的位置,打开终端输入:

echo $GAZEBO_PLUGIN_PATH

终端返回Gazebo插件的路径,运行Gazebo时系统会到下面的路径中寻找需要用到的.so共享库,如下图所示,我Gazebo插件的路径是/home/rui27/PX4_Firmware/build/px4_sitl_default/build_gazebo。

为了确保加载相机模型时能找到刚刚编辑的librealsense_gazebo_plugin.so共享库,我们可以把刚编译得到的librealsense_gazebo_plugin.so存放到上面的路径中,也可以将目前librealsense_gazebo_plugin.so所在的目录添加进Gazebo插件的路径中。

1、将librealsense_gazebo_plugin.so存放到GAZEBO_PLUGIN_PATH中

直接复制过去即可,若权限不够,则可以用sudo nautilus命令打开文件夹再进行复制。

2、将librealsense_gazebo_plugin.so所在的添加为GAZEBO_PLUGIN_PATH

在文件夹右上角勾选”显示隐藏文件“,在主目录找到并打开.bashrc文件,在底部添加librealsense_gazebo_plugin.so所在的路径:

export GAZEBO_PLUGIN_PATH=$GAZEBO_PLUGIN_PATH:/home/rui27/realsense_ws/devel/lib

保存.bashrc文件后打开终端,输入以下指令刷新环境变量,并再次查询GAZEBO_PLUGIN_PATH,能发现新添加的路径:

source ~/.bashrc
echo $GAZEBO_PLUGIN_PATH

将D435i模型安装在iris无人机上

首先将D435i的模型放入Gazebo的模型库中。
官方给出的添加相机的方式是基于.xacro格式的,但iris无人机是基于.sdf格式的,两者并不兼容,所以我们要将.sdf格式的D435i相机放入Gazebo的模型库中,再进行相机的安装。
打开终端输入以下指令:

echo $GAZEBO_MODEL_PATH

终端会显示Gazebo中模型的路径,如下图所示:

接下来将下图中的D435i文件夹复制到中

随后在该路径下创建iris_fusion文件夹,在文件夹中添加iris_fusion.sdf文件和model.config文件,文件内容如下:

<?xml version='1.0'?>
<sdf version='1.5'><model name='iris_D435i'><include><uri>model://iris</uri>  //引入model中的模型iris</include><include><uri>model://D435i</uri>  //引入model中的模型D435i<pose>0.12 0 0.02 1.5708 0 1.5708</pose>  //设置D435i模型的位置,分别是x y z yaw pitch roll</include><joint name="D435i_joint" type="fixed">  //创建相机关节,类型为固定关节<child>D435i::camera_link</child>  //关节的子关节为D435i的camera_link关节(camera_link关节在D435i文件夹的.sdf文件中定义)<parent>iris::base_link</parent>  //关节的父关节为iris的base_link关节<axis><xyz>0 0 0</xyz><limit><upper>0</upper><lower>0</lower></limit></axis></joint></model>
</sdf>
<?xml version="1.0"?>
<model><name>3DR Iris with D435i camera</name><version>1.0</version><sdf version='1.4'>iris_fusion.sdf</sdf><author><name>Amy Wagoner</name><email>arwagoner@gmail.com</email></author><description>This is a model of the 3DR Iris Quadrotor with an D435i camera. The original model has been created byThomas Gubler and is maintained by Lorenz Meier.</description>
</model>

随后修改PX4_Firmware中的launch文件,打开mavros_posix_sitl.launch,添加或修改如下内容:

此时若直接修改并运行launch会报错找不到.config文件,这是因为还有必要的config文件不在D435i文件夹中,我们还需要将前面克隆的realsense_ros_gazebo文件夹整个丢进GAZEBO_MODEL_PATH中
最后运行该launch文件,Gazebo启动并出现带有D435i的iris无人机,此时可以看到相机发布的图像话题,并能用rqt显示图像

roslaunch px4 mavros_posix_sitl.launch
rostopic list
rqt_image_view

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/901525.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信创产业2025白皮书:国产替代率突破40%的7大征兆

开篇:一场静默的产业革命正在发生 2025年的春天,当全球科技巨头还在为量子计算和元宇宙布局时,中国信创产业已悄然完成蜕变。工信部最新数据显示,国产基础软硬件在重点行业渗透率突破40%大关,这场以"自主可控"为底色的技术革命,正通过七大显著征兆宣告着中国IT…

aaa1

Uniapp、uniappx笔记 App平台 云端打包 Uniappx原生SDK android studio原生工程配置https://doc.dcloud.net.cn/uni-app-x/native/use/android.html 配置uts插件 教程 https://doc.dcloud.net.cn/uni-app-x/native/use/androiduts.html uts插件资源位于unpackage/resource/app-…

wpa_supplicant/hostapd --- 控制接口库

官网: https://w1.fi/wpa_supplicant/只需要源码的这两个文件:

go-gRPC微服务调用

协议介绍 RPC协议RPC(远程过程调用协议),通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC假定某些协议的存在,例如TCP/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发包括网络分布式多程序在内的应用…

突破性技术:制药冻干机实现EtherCAT与Profinet网关模块无缝监控集成

案例分享:冻干机 EtherCAT 转 Profinet 实现温湿度监控 在现代医药生产过程中,冻干机作为关键设备,对温湿度的控制与监测尤为重要。某医药企业在其冻干机系统升级中,面临一个典型的通讯挑战:主控制系统采用 EtherCAT 协议,而现场的温湿度监控系统及其他过程控制设备则基于…

java-JNDI(二)-高版本绕过

JNDI 高版本的绕过 为了防止 JNDI 攻击,Oracle 对 JNDI 的远程类加载漏洞(如 LDAP 或 RMI 协议的远程代码执行(RCE))进行了限制 com.sun.jndi.rmi.object.trustURLCodebase=false com.sun.jndi.cosnaming.object.trustURLCodebase=false com.sun.jndi.ldap.object.trustUR…

tile

dsfTechnorati Tags: gjhgsdhttp://dfdfdfddfdfdfdsfdfdf

电视机顶盒刷机,更改固件包教程

这几天捣鼓了很久的刷机包,终于学会了怎么把已经弄好的刷机包,更改成自己想要的桌面。下面是我整理好的详细教程,本教程所需工具:刷机包大全、MLK软件、mumu模拟器 刷机包大全: 链接: https://pan.baidu.com/s/1G0on4sV9QmpxPXLUSN5ttQ?pwd=5279 提取码: 5279 一.确定机顶…

Java技术栈面试八股文:掌握这九大关键领域

Java基础:这是Java开发的基石,包括Java语言的基本语法、数据类型、控制结构、面向对象编程(OOP)概念(如类、对象、继承、封装、多态)、异常处理、集合框架等。掌握这些基础知识对于理解更高级的Java特性至关重要。Java Web基础:涉及Java在Web开发中的应用,包括Servlet、…

Unity —— SpriteAtlas + Include in Build

前言在使用atlas Sprite的过程中,会忍不住产生一个疑问,atlas是做什么用的,这个include in Build的含义是什么呢,以及它是否应该被勾选。网上查阅到了很多资源,有的说这个选项大胆勾选,有的说这个选项勾选完后图集打包后的纹理在游戏启动后,会一直常驻内存,需要自己做好…