Ubuntu20.04仿真 |iris四旋翼添加云臺相機詳述

申明:

1、本人使用的是Ubuntu20.04+ros1+gazebo+xtdrone+px4的仿真組合

2、為了使傳感器模型和飛機模型解耦合,實現不同平臺對傳感器可直接調用,本系列博文涉及的所有傳感器均不直接添加在相應平臺的sdf當中,而是通過編寫xxx_joint.sdf的形式,將平臺和傳感器統一,可由launch文件直接拉起。

本博客會先給出創建步驟和注意事項,若希望能夠直接獲取文件并運行,可跳轉至該博客(上述仿真組合的基礎配置需已完成):Ubuntu20.04仿真 | 云臺相機可直接使用文件-CSDN博客文件都寫好了,這兩天會整理完,hhhh,稍等已更新!需要自取)

一、建立云臺模型文件

自帶的模型庫中是沒有單獨的云臺模型文件的,但是typhoon_h480中掛載了云臺,所以可以從其中把單獨的模型文件抽象出來。

https://blog.csdn.net/weixin_42037083/article/details/138291543

先按照上述鏈接改sdf,完成其中的“一、單獨建立云臺模型文件”,復制過程中檢查link中的url,不要指向typhoon了,而是改為指向iris。

在此基礎上

1、添加云臺控制插件<plugin name='gimbal_controller' filename='libgazebo_gimbal_controller_plugin.so'>對應段落,使得cgo3在yaw、roll、pitch上添加的控制joint可以生效。

2、libgazebo_gimbal_controller_plugin.so插件中的這三個joint修改,把typhoon刪掉

? ? ? <joint_yaw>typhoon_h480::cgo3_vertical_arm_joint</joint_yaw><joint_roll>typhoon_h480::cgo3_horizontal_arm_joint</joint_roll><joint_pitch>typhoon_h480::cgo3_camera_joint</joint_pitch>

? ? ? 改為:

? ? ??<joint_yaw>cgo3_vertical_arm_joint</joint_yaw><joint_roll>cgo3_horizontal_arm_joint</joint_roll><joint_pitch>cgo3_camera_joint</joint_pitch>

原本的typhoon_h480::是cgo3掛載在其下的聲明。
?

3、<joint name='cgo3_mount_joint' type='revolute'>這個joint刪掉,因為這個對應的link是新創建的cgo3.sdf文件的最高級link,所以在cgo3的sdf中不需要對他做joint,而是在掛載cgo3的飛機/平臺的頂層sdf中對cgo3.sdf做引入并添加本joint。其余cgo3.sdf中的link應和joint成對出現

在原h480文件中這個joint是寫向base_link也就是掛載到typhoon飛機上的。

二、修改iris.sdf

為了正常使用cgo3云臺相機,還需實現其各自由度旋轉對應插件的添加。以下plugin是直接添加在typhoon_h480.sdf中的,作者也嘗試將其直接添加在cgo3.sdf當中與iris.sdf共同使用,這樣避免修改原有飛機配置文件,但是發現在launch拉起后會出現報錯(我認為是拉起的sdf不能在兩個地方都出現下述插件)。

因此,我嘗試將其添加到iris.sdf中,經過測試拉起仿真環境不會報錯。因此復制iris模型文件夾,并將其命名為iris_cgo3以做區分,文件夾結構如下:

圖片是在windows下的截圖,Ubuntu中結構相同。

1、將原iris.sdf命名為iris_cgo3.sdf以作區分,并將typhoon_h480.sdf中插件mavlink_interface_gimbal_only中的以下部分復制到iris.sdf原有的同名插件

    <channel name="gimbal_roll"><input_index>8</input_index><input_offset>0</input_offset><input_scaling>-3.1415</input_scaling><zero_position_disarmed>0</zero_position_disarmed><zero_position_armed>0</zero_position_armed><joint_control_type>position_gztopic</joint_control_type><gztopic>/cgo3/gimbal_roll_cmd</gztopic><joint_name>cgo3_horizontal_arm_joint</joint_name></channel><channel name="gimbal_pitch"><input_index>9</input_index><input_offset>0</input_offset><input_scaling>-3.1415</input_scaling><zero_position_disarmed>0</zero_position_disarmed><zero_position_armed>0</zero_position_armed><joint_control_type>position_gztopic</joint_control_type><gztopic>/cgo3/gimbal_pitch_cmd</gztopic><joint_name>cgo3_camera_joint</joint_name></channel><channel name="gimbal_yaw"><input_index>10</input_index><input_offset>0</input_offset><input_scaling>-3.1415</input_scaling><zero_position_disarmed>0</zero_position_disarmed><zero_position_armed>0</zero_position_armed><joint_control_type>position_gztopic</joint_control_type><gztopic>/cgo3/gimbal_yaw_cmd</gztopic><joint_name>cgo3_vertical_arm_joint</joint_name></channel>

注意,直接復制博客中提供的部分,或者在typhoon_h480.sdf中復制時每個channel的<input_index>要改。因為iris.sdf中原本就有旋翼舵機的通信通道,且和typhoon_h480數量不同,所以直接復制過來使用會造成沖突。

2、修改model.config

  <sdf version='1.6'>iris_cgo3.sdf</sdf>

一定要把這邊的文件名改成iris_cgo3.sdf,否則launch拉起時無法正確讀取。

三、聯合傳感器與飛機

1、創建iris_cgo3_joint文件夾,在其中創建iris_cgo3_joint.sdf和model.config

2、在iris_cgo3_joint.sdf中復制以下內容,路徑和文件名根據實際文件名修改。

<?xml version="1.0" ?>
<sdf version="1.5"><model name='iris_cgo3_model'><include><uri>model://iris_cgo3</uri></include><include><uri>model://cgo3</uri><pose>0.12 0 0 1.57 0 1.57</pose></include><joint name="cgo3_mount_joint" type="fixed"><!--對應上述cgo3的最高級link
在joint.sdf中引入--><child>cgo3::cgo3_mount_link</child><parent>iris_cgo3::base_link</parent><!--此處parent,child的寫法要和模型文件中的model名、link名對應好--><axis><xyz>0 0 1</xyz><limit><upper>0</upper><lower>0</lower></limit></axis></joint></model>
</sdf>

model.config則同理注意sdf文件名修改正確即可

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/98208.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/98208.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/98208.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《人工智能AI之機器學習基石》系列 第 16 篇:關聯規則與數據挖掘——“啤酒與尿布”傳奇背后的增長秘密

《人工智能AI之機器學習基石》? 專欄核心理念: 用通俗語言講清楚機器學習的核心原理,強調“洞察+ 技術理解 + 應用連接”,構建一個完整的、富有啟發性的知識體系。 引言:藏在購物車里的“讀心術” 朋友們,歡迎回到我們的AI基石之旅。 在過去的兩次探索中,我們深入…

Spring Boot 的自動配置原理

Spring Boot 的自動配置是其 "約定大于配置" 理念的核心實現&#xff0c;它能自動配置 Spring 應用所需的各種組件&#xff0c;大幅減少手動配置。下面從核心注解、加載流程、條件過濾等方面詳細講解其原理&#xff0c;并結合關鍵源碼說明。一、自動配置的入口&#…

谷歌云平臺(Google Cloud Platform, GCP)介紹(全球領先的云計算服務平臺,為企業和開發者提供包括計算、存儲、數據分析、人工智能、機器學習、網絡和安全等在內的全面云服務)

文章目錄**1. GCP的核心優勢****1.1 全球領先的基礎設施****1.2 強大的數據分析和人工智能能力****1.3 卓越的安全性和合規性****1.4 靈活的定價模式****2. GCP的主要服務****2.1 計算服務****2.2 存儲和數據庫****2.3 網絡服務****2.4 人工智能與大數據****2.5 安全與管理工具…

RISC-V異常機制和異常定位

不少人在調試RISC-V core時&#xff0c;面對異常的出現不知所措&#xff0c;不知道如何定位代碼問題。這里將從RISC-V異常機制以及幾個異常實例學習下。 1 異常機制 1.1 什么是異常 異常是軟件程序員不得不要深入了解的&#xff0c;首先在學習異常機制前&#xff0c;對異常要…

c++中導出函數調用約定為__stdcall類型函數并指定導出函數名稱

開發環境在Visual studio 2022版本下&#xff0c;為防止編譯器重命名函數名稱&#xff08;會加上8等等亂七八糟的東西&#xff09;&#xff0c;我們對函數名稱進行指定&#xff1a;一、新建.def文件&#xff0c;名稱須與dll名稱相同&#xff0c;并放在與cpp文件相同文件夾下&am…

Vision Transformer (ViT) :Transformer在computer vision領域的應用(二)

METHOD,論文主要部分 In model design we follow the original Transformer (Vaswani et al., 2017) as closely as possible. An advantage of this intentionally simple setup is that scalable NLP Transformer architectures – and their efficient implementations –…

AI 論文周報丨紅隊測試語言模型/多視角 3D 點追蹤方法/蛋白質表示學習框架/密碼學漏洞檢測新框架……

近年來&#xff0c;已有若干方法嘗試從單目視頻實現 3D 點跟蹤&#xff0c;然而由于在遮擋和復雜運動等挑戰性場景中難以準確估計 3D 信息&#xff0c;這些方法的性能仍難以滿足實際應用對高精度與魯棒性的要求。 基于此&#xff0c;蘇黎世聯邦理工學院、卡內基梅隆大學聯合提出…

STM32 通過USB的Mass Storage Class讀寫掛載的SD卡出現卡死問題

問題描述&#xff1a;使用stm32cubemx生成的sdio和usb Mass Storage Class的代碼后&#xff0c;在USB_DEVICE\App\usbd_storage_if.c文件里面的接口調用以下函數出現卡死問題&#xff1a; SD_Driver.disk_initialize(0); SD_Driver.disk_read(lun, buf, blk_addr, blk_len) SD_…

Go語言中 error 接口與自定義錯誤類型的深入解析

在 Go 語言開發中&#xff0c;我們經常需要處理各種錯誤情況。Go 語言通過 error 接口提供了一套簡潔而強大的錯誤處理機制。然而&#xff0c;當涉及到自定義錯誤類型時&#xff0c;許多開發者會遇到一些令人困惑的問題。本文將通過一個實際案例來深入探討這個問題。 問題背景 …

字幕編輯工具推薦,Subtitle Edit v4.0.13發布:增強語音識別+優化翻譯功能

大家好呀&#xff0c;不知道大家有沒有做自媒體相關工作的呢&#xff0c;你們是不是也覺得剪輯視頻時最頭疼的往往不是畫面而是字幕&#xff0c;時間軸對不上、格式不兼容、需要手動翻譯&#xff0c;這些瑣碎工作消耗的精力甚至超過剪輯本身。 當你試遍各種在線工具卻發現要么…

【Java后端】Spring Boot 集成雪花算法唯一 ID

Spring Boot 實現基于雪花算法的分布式唯一 ID 生成器在分布式系統中&#xff0c;我們經常需要生成 全局唯一 ID&#xff0c;比如用戶 ID、訂單號、消息 ID 等。常見的方式有&#xff1a;數據庫自增主鍵、UUID、Redis/Zookeeper 分布式 ID 服務、百度 UidGenerator、美團 Leaf …

C語言初嘗試——洛谷

一、C數組&#xff1a;C 語言支持數組數據結構&#xff0c;它可以存儲一個固定大小的相同類型元素的順序集合。數組是用來存儲一系列數據&#xff0c;但它往往被認為是一系列相同類型的變量。聲明數組在 C 中要聲明一個數組&#xff0c;需要指定元素的類型和元素的數量&#xf…

C++八大排序

C排序算法一、概覽二、代碼實現1.冒泡排序2.插入排序3.希爾排序4.堆排序5.選擇排序6.快速排序7.歸并排序三、排序時間、空間復雜度總結排序&#xff0c;是C各大算法當中非常常見的一個步驟&#xff08;過程&#xff09;&#xff0c;通常我們使用便捷的algorithmalgorithmalgori…

每天五分鐘深度學習:深層神經網絡的優勢

本文重點 在人工智能領域,深層神經網絡(DNN)的崛起標志著技術范式的根本性轉變。相較于傳統淺層神經網絡(如單層感知機、線性回歸模型),深層網絡通過引入多層隱藏層,實現了對復雜數據模式的深度解析與高效建模。 深層神經網絡 神經網絡中輸入層表示神經網絡的第0層,…

相機幾何 空間點到像素平面轉換

一個空間中點到像素平面轉換&#xff0c;需要經過1. 空間坐標系轉換到相機坐標系2. 相機坐標系下3D點到相機平面轉換3. 相機平面到像素平面轉換相機三維空間到像素平面轉換1. 3D點到相機平面轉換2. 相機平面到像素平面轉換涉及到單位的轉換&#xff0c;和像素原點到相機平面原點…

webpack5 vue3同一倉庫,不同命令切換項目

技術方案&#xff1a;手動輸入不同的命令&#xff0c;啟動不同項目。實現這種能力本篇文章是通過不同路由劃分&#xff0c;進而實現不同項目的劃分。所以簡單來說就是通過輸入不同命令行在webpack中找到不同項目的路由&#xff0c;進而打不同項目的包&#xff0c;實現項目隔離。…

PowerBI實戰-制作帶有同比及趨勢線的雙柱狀圖

一、引言 今天的PowerBI報表的制作相對有一點復雜&#xff0c;我們直接根據最終展示圖來講解&#xff1a; 可以看到&#xff0c;我們今天要制作的圖像需要包括以下幾點&#xff1a;時間維度的趨勢、兩種不同維度的數據對比、不同數據標簽的展示、不同年份間環比的標簽展示以及…

物聯網智能網關配置教程:實現注塑機數據經基恩士PLC上傳至云平臺

一、項目背景隨著制造業向智能化、信息化方向快速發展&#xff0c;注塑車間作為塑料制品制造的核心環節&#xff0c;面臨著設備協議多樣、數據孤島嚴重、系統集成困難等問題。某大型注塑企業計劃對其老舊車間進行數字化改造&#xff0c;實現設備數據采集、遠程監控與MES系統對接…

【實戰】預警算法--噪聲添加機制

1. 背景 在多變量自聯想預測或異常檢測場景中&#xff0c;我們常使用帶噪自編碼器&#xff08;Denoising AutoEncoder&#xff0c;DAE&#xff09;來訓練模型&#xff0c;使模型能夠從帶噪輸入中重構原始數據。噪聲的添加方式對訓練效果、穩定性以及模型用途有顯著影響。 2. 兩…

ChromaDB探索

關于 ChromaDB、向量與 RAG 系統的核心知識問答總結 ??Q1: ChromaDB 是什么&#xff1f;它在數據庫領域中扮演什么角色&#xff1f;????A:?? ChromaDB 是一款開源的??向量數據庫??。它的核心角色是專門為 AI 應用&#xff08;如語義搜索、推薦系統、RAG&#xff09…