DJI ONBOARD SDK—— 基礎控制功能 Joystick的講解,使用和擴展

DJI ONBOARD SDK/DJI OSDK ROS—— 基礎控制功能 Joystick的使用

概述

使用OSDK/OSDK_ROS 的無人機飛行控制功能,能夠設置并獲取無人機各項基礎參數,控制無人機執行基礎飛行動作,通過Joystick 功能控制無人機執行復雜的飛行動作。

Joystick 功能

Joystick 是一個無人機綜合控制功能,使用Joystick 功能時,開發者根據實際的應用需要,通過調用Joystick 中的接口,同時設置無人機使用的坐標系、水平控制的模式、垂直控制的模式、yaw角度控制的模式和懸停模式,才能設計出滿足使用需求的無人機飛行控制邏輯。

1. 設置坐標系

機體坐標系
機體坐標系以無人機的重心為原點,無人機機頭前進的方向為X軸,機頭前進方向的右側為Y軸,Z軸與X軸、Y軸相互垂直交于重心且指向無人機下方(遵循“右手法則”)。在機體坐標下,無人機圍繞X軸、Y軸和Z軸旋轉時的飛行動作,可稱為橫滾(無人機僅繞X軸旋轉)、俯仰(無人機僅繞Y軸旋轉)和偏航(無人機僅繞Z軸旋轉)。

大地坐標系
大地坐標系也稱世界坐標系或當地水平坐標系,在該坐標系中,無人機指向地球正北的方向為X軸,正東的方向為Y軸,X軸與Y軸相互垂直,Z軸豎直指向無人機下方,在滿足“右手法則”的前提下,Z軸將根據無人機飛行的實際情況調節角度,因此該坐標系也稱為“北-東-地(N-E-D)坐標系”。

2. 設置水平控制模式

姿態角控制模式:在該模式下,水平方向的指令為無人機的姿態角。(在機體坐標系下,該角度為roll 和pitch)
速度控制模式:在該模式下,水平方向的指令為無人機的速度
位置控制模式:在該模式下,水平方向的指令為無人機的位置
角速度控制:在該模式下,水平方向的指令為無人機的旋轉角速度

說明: 當位置指令的模不為0時,無人機會以指定的速度向前飛行,否則,無人機將懸停在指定的位置。

3.設置垂直控制模式

速度控制模式:控制無人機垂直方向的速度
位置控制模式:控制無人機垂直方向的位置,該位置為相對于起飛點的絕對位置
油門控制模式:控制無人機的油門

4. 設置yaw角度控制模式

角度控制模式:在該模式下,yaw方向旋轉的指令為yaw 的角度
角速率控制模式:在該模式下,yaw方向旋轉的指令為yaw 的角速率

5. 設置無人機懸停模式

僅在水平控制模式中的速度控制模式下,開發者可以設置無人機的懸停模式:

開啟穩定模式:開啟穩定模式后,無人機將在指定的位置上懸停
關閉穩定模式:關閉穩定模式后,無人機將按照速度命令飛行,當無人機的前進速度為0時候,無人機可能會隨風飄動

使用Joystick飛行控制功能

使用Joystick 功能需要先設置Joystick 的模式和對應的控制指令,再執行Joystick 指令,實現對無人機的控制。 如下代碼以在dji_osdk_ros例子中,使用Joystick 功能控制無人機。

設置joystick的模式 1:

void velocityAndYawRateCtrl(const JoystickCommand &offsetDesired, uint32_t timeMs)
{double originTime  = 0;double currentTime = 0;uint64_t elapsedTimeInMs = 0;SetJoystickMode joystickMode;JoystickAction joystickAction;joystickMode.request.horizontal_mode = joystickMode.request.HORIZONTAL_VELOCITY;joystickMode.request.vertical_mode = joystickMode.request.VERTICAL_VELOCITY;joystickMode.request.yaw_mode = joystickMode.request.YAW_RATE;joystickMode.request.horizontal_coordinate = joystickMode.request.HORIZONTAL_GROUND;joystickMode.request.stable_mode = joystickMode.request.STABLE_ENABLE;set_joystick_mode_client.call(joystickMode);joystickAction.request.joystickCommand.x = offsetDesired.x;joystickAction.request.joystickCommand.y = offsetDesired.y;joystickAction.request.joystickCommand.z = offsetDesired.z;joystickAction.request.joystickCommand.yaw = offsetDesired.yaw;originTime  = ros::Time::now().toSec();currentTime = originTime;elapsedTimeInMs = (currentTime - originTime)*1000;while(elapsedTimeInMs <= timeMs){currentTime = ros::Time::now().toSec();elapsedTimeInMs = (currentTime - originTime) * 1000;joystick_action_client.call(joystickAction);}
}
設置水平控制模式:
joystickMode.request.horizontal_mode = joystickMode.request.HORIZONTAL_VELOCITY;
設置水平控制模式:
 joystickMode.request.vertical_mode = joystickMode.request.VERTICAL_VELOCITY;
設置yaw角度控制模式:
joystickMode.request.yaw_mode = joystickMode.request.YAW_RATE;
設置yaw角度控制模式:
joystickMode.request.horizontal_coordinate = joystickMode.request.HORIZONTAL_GROUND;
設置坐標系:
  joystickMode.request.horizontal_coordinate = joystickMode.request.HORIZONTAL_GROUND;
設置無人機懸停模式:
joystickMode.request.stable_mode = joystickMode.request.STABLE_ENABLE;

通過參考JoystickMode所有參數可以獲得所有備選參數。

設置joystick的模式2 :

bool moveByPosOffset(FlightTaskControl& task,const JoystickCommand &offsetDesired,float posThresholdInM,float yawThresholdInDeg)
{task.request.task = FlightTaskControl::Request::TASK_POSITION_AND_YAW_CONTROL;task.request.joystickCommand.x = offsetDesired.x;task.request.joystickCommand.y = offsetDesired.y;task.request.joystickCommand.z = offsetDesired.z;task.request.joystickCommand.yaw = offsetDesired.yaw;task.request.posThresholdInM   = posThresholdInM;task.request.yawThresholdInDeg = yawThresholdInDeg;task_control_client.call(task);return task.response.result;
}
使用常用的設置模式:
task.request.task = FlightTaskControl::Request::TASK_POSITION_AND_YAW_CONTROL;

這是一種快捷的設置方式,具體請參考JoystickMode相關

問題:

如何利用joystickMode功能,擴展出更強大和靈活的無人機飛行控制功能 ? 例如:如何實現控制無人機運動速度(包括運動方向)的同時也能控制其運動位移和方位角 ?
期待你的見解…

dji_osdk_ros例子
JoystickMode所有參數
JoystickMode常用模式

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

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

相關文章

【精彩回顧】恒拓高科亮相第十一屆深圳軍博會

2023年12月6日-8日&#xff0c;由中國和平利用軍工技術協會、全國工商聯科技裝備業商會、深圳市國防科技工業協會等單位主辦以及政府相關部門支持&#xff0c;深圳企發展覽有限公司承的“2023第11屆中國&#xff08;深圳&#xff09;軍民兩用科技裝備博覽會&#xff08;深圳軍博…

02 CSS基礎入門

文章目錄 一、CSS介紹1. 簡介2. 相關網站3. HTML引入方式 二、選擇器1. 標簽選擇器2. 類選擇器3. ID選擇器4. 群組選擇器 四、樣式1. 字體樣式2. 文本樣式3. 邊框樣式4. 表格樣式 五、模型和布局1. 盒子模型2. 網頁布局 一、CSS介紹 1. 簡介 CSS主要用于控制網頁的外觀&#…

C#如何使用SqlSugar操作MySQL/SQL Server數據庫

一. SqlSugar 連接MySQL數據庫 public class MySqlCNHelper : Singleton<MySqlCNHelper>{public static SqlSugarClient CnDB;public void InitDB() {//--------------------MySQL--------------------CnDB new SqlSugarClient(new ConnectionConfig(){ConnectionString…

窮舉問題-搬磚(for循環)

某工地需要搬運磚塊&#xff0c;已知男人一人搬3塊&#xff0c;女人一人搬2塊&#xff0c;小孩兩人搬1塊。如果想用n人正好搬n塊磚&#xff0c;問有多少種搬法&#xff1f; 輸入格式: 輸入在一行中給出一個正整數n。 輸出格式: 輸出在每一行顯示一種方案&#xff0c;按照&q…

玩轉大數據12:大數據安全與隱私保護策略

1. 引言 大數據的快速發展&#xff0c;為各行各業帶來了巨大的變革&#xff0c;也帶來了新的安全和隱私挑戰。大數據系統通常處理大量敏感數據&#xff0c;包括個人身份信息、財務信息、健康信息等。如果這些數據被泄露或濫用&#xff0c;可能會對個人、企業和社會造成嚴重的損…

Unity 資源管理之Resources

Resources是一個特殊的文件夾&#xff0c;用于存放運行時加載的資源。 Resources文件夾中可以放置各種類型的資源文件&#xff0c;如紋理、模型、音頻、預制體等&#xff0c;一般用來存儲預制體和紋理信息。 通過API可以加載和訪問該文件夾及其子文件夾中的資源。 當我們打包…

大數據Doris(三十五):Unique模型(唯一主鍵)介紹

文章目錄 Unique模型(唯一主鍵)介紹 一、創建doris表 二、插入數據

【華為OD題庫-076】執行時長/GPU算力-Java

題目 為了充分發揮GPU算力&#xff0c;需要盡可能多的將任務交給GPU執行&#xff0c;現在有一個任務數組&#xff0c;數組元素表示在這1秒內新增的任務個數且每秒都有新增任務。 假設GPU最多一次執行n個任務&#xff0c;一次執行耗時1秒&#xff0c;在保證GPU不空閑情況下&…

海外獨立站站長常用的ChatGPT通用提示詞模板

目標市場&#xff1a;如何確定目標市場&#xff1f; 用戶需求&#xff1a;如何了解用戶需求&#xff1f; 網站設計&#xff1a;如何設計一個優秀的網站&#xff1f; 用戶體驗&#xff1a;如何提升用戶體驗&#xff1f; 功能規劃&#xff1a;請幫助我規劃網站的功能。 內容…

linux 應用開發筆記---【標準I/O庫/文件屬性及目錄】

一&#xff0c;什么是標準I/O庫 標準c庫當中用于文件I/O操作相關的一套庫函數&#xff0c;實用標準I/O需要包含頭文件 二&#xff0c;文件I/O和標準I/O之間的區別 1.標準I/O是庫函數&#xff0c;而文件I/O是系統調用 2.標準I/O是對文件I/O的封裝 3.標準I/O相對于文件I/O具有更…

SpringBoot 項目 Jar 包加密,防止反編譯

1場景 最近項目要求部署到其他公司的服務器上&#xff0c;但是又不想將源碼泄露出去。要求對正式環境的啟動包進行安全性處理&#xff0c;防止客戶直接通過反編譯工具將代碼反編譯出來。 2方案 第一種方案使用代碼混淆 采用proguard-maven-plugin插件 在單模塊中此方案還算簡…

調用別人提供的接口無法通過try catch捕獲異常(C#),見鬼了

前幾天做CA簽名這個需求時發現一個很詭異的事情&#xff0c;CA簽名調用的接口是由另外一個開發部門的同事(比較難溝通的那種人)封裝并提供到我們這邊的。我們這邊只需要把數據準備好&#xff0c;然后調他封裝的接口即可完成簽名操作。但在測試過程中&#xff0c;發現他提供的接…

[后端卷前端2]

綁定class 為什么需要樣式綁定呢? 因為有些樣式我們希望能夠動態展示 看下面的例子: <template><div><p :class"{active:modifyFlag}">class樣式綁定</p></div> </template><script>export default {name: "goo…

人力資源服務展示網站作用有哪些

就業勞務問題往往是不少人群關注的問題&#xff0c;每個城市都聚集著大量求業者&#xff0c;而人力資源管理公司每年也會新增不少&#xff0c;對求業者來說&#xff0c;通過人力資源公司可以快速便捷的找到所需工作&#xff0c;而對公司來說&#xff0c;市場大量用戶可以帶來收…

C語言第十八集(動態內存管理)

1.malloc函數可以開辟一塊空間,具體搜: 2.malloc函數申請的空間在內存的堆區 而且它只負責幫你申請空間,不負責幫你清理空間 3.free函數可以釋放內存 4.free函數釋放的是內存中的堆區,具體搜: 5.在free函數調用完后記得把對應的指針設為空指針 6.calloc函數跟malloc函數差…

揭秘字符串的奧秘:探索String類的深層含義與源碼解讀

文章目錄 一、導論1.1 引言&#xff1a;字符串在編程中的重要性1.2 目的&#xff1a;深入了解String類的內部機制 二、String類的設計哲學2.1 設計原則&#xff1a;為什么String類如此重要&#xff1f;2.2 字符串池的概念與作用 三、String類源碼解析3.1 成員變量3.2 構造函數3…

[今來] 神話故事:金馬和碧雞

文章目錄 金馬山和碧雞山神話傳說金馬坊和碧雞坊金馬碧雞 金馬山和碧雞山 昆明山明水秀&#xff0c;北枕蛇山&#xff0c;南臨滇池&#xff0c;金馬山和碧雞山則東西夾峙&#xff0c;隔水相對&#xff0c;極盡湖光山色之美。金馬山逶迤而玲瓏&#xff0c;碧雞山峭拔而陡峻&…

[Java][Map]linkedhashmap的引入

我們可以看到&#xff1a; linkedhashmap中元素的讀取是有順序的&#xff0c;基于這種雙向鏈表 我們可以優先讀取8索引bucket上的元素 然后讀取3索引bucket上的元素&#xff0c;以及其掛載的元素 最后讀取0索引bucket上的元素 bucket是hashbucket! 這種寫法是很有序的 也是…

Pytorch初步使用

文章目錄 創建張量指定設備沿軸計算 創建張量 如果說數組是numpy的操作對象&#xff0c;那么張量Tensor就是pytorch的操作單元&#xff0c;從數據內容來說&#xff0c;與高維數組是如出一轍的&#xff0c;但作為一個類&#xff0c;其構造函數支持通過聲明張量的維度來進行初始…

clickhouse數據庫磁盤空間使用率過高問題排查

一、前言 clickhouse天天觸發磁盤使用率過高告警&#xff0c;所以需要進行排查&#xff0c;故將排查記錄一下。 二、排查過程 1、連接上進入clickhouse 2、執行語句查看各庫表使用磁盤情況 SELECT database, table, formatReadableSize(sum(bytes_on_disk)) as disk_space F…