mavros——開源自動駕駛系統

一、簡介

mavros是一個輕量級的ROS節點,基於MAVLink協議,能夠使ROS機械人系統連接、控制和接收來自無人機 (UAVs) 的MAVLink兼容信息。mavros在由UAVs驅動的應用程序和機械人控制應用程序之間建立了橋樑,促進了無人機和機械人技術的集成。mavros遵循BSD許可證,可免費下載使用。

mavros的主要功能有以下幾方面:

  • 支持多種飛行器,如quadcopter、helicopter、plane等;
  • 支持傳感器的讀取和寫入,如IMU、GPS等;
  • 集成了內置的安全控制,確保飛行的安全性;
  • 提供方便的API,方便與外部程序進行交互;
  • 支持ROS的消息類型,方便與ROS軟件進行集成;

二、使用說明

使用mavros,我們需要添加下述依賴關係到我們的ROS package:

  <build_depend>mavros_msgs</build_depend>
  <exec_depend>mavros_msgs</exec_depend>
  <build_depend>mavlink</build_depend>
  <exec_depend>mavlink</exec_depend>

再進一步,可以使用ros_comm庫的工具包實現mavros的安裝,具體可以參考mavros官方文檔進行安裝。

安裝完畢之後,我們只需要使用一個ROS node即可連接到無人機,下面是一個簡單的例子:

    #include <ros/ros.h>
    #include <mavros_msgs/CommandBool.h>
    #include <mavros_msgs/SetMode.h>
    #include <mavros_msgs/State.h>

    mavros_msgs::State current_state;
    void state_cb(const mavros_msgs::State::ConstPtr& msg){
        current_state = *msg;
    }
    int main(int argc, char **argv)
    {
        ros::init(argc, argv, "offb_node");
        ros::NodeHandle nh;

        ros::Subscriber state_sub = nh.subscribe<mavros_msgs::State>("mavros/state", 10, state_cb);
        ros::Publisher local_pos_pub = nh.advertise<geometry_msgs::PoseStamped>("mavros/setpoint_position/local", 10);
        ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool>("mavros/cmd/arming");
        ros::ServiceClient set_mode_client = nh.serviceClient<mavros_msgs::SetMode>("mavros/set_mode");

        // wait for FCU connection
        while(ros::ok() && !current_state.connected){
            ros::spinOnce();
            rate.sleep();
        }

        mavros_msgs::SetMode offb_set_mode;
        offb_set_mode.request.custom_mode = "OFFBOARD";
        mavros_msgs::CommandBool arm_cmd;
        arm_cmd.request.value = true;

        ros::Time last_request = ros::Time::now();

        while(ros::ok()){
            if( current_state.mode != "OFFBOARD" && (ros::Time::now() - last_request > ros::Duration(5.0))){
                if( set_mode_client.call(offb_set_mode) && offb_set_mode.response.success){
                    ROS_INFO("Offboard enabled");
                }
                last_request = ros::Time::now();
            } else {
                if( !current_state.armed && (ros::Time::now() - last_request > ros::Duration(5.0))){
                    if( arming_client.call(arm_cmd) && arm_cmd.response.success){
                        ROS_INFO("Vehicle armed");
                    }
                    last_request = ros::Time::now();
                }
            }

            local_pos_pub.publish(pose);
            ros::spinOnce();
            rate.sleep();
        }

        return 0;
    }

在這個例子中,我們使用的是OFFBOARD模式進行無人機的控制。我們可以使用rosrun命令來啟動這個node:rosrun my_package offb_node。然後就可以看到無人機開始執行我們的控制程序了。

三、通信協議

mavros節點使用的通信協議是MAVLink,MAVLink是一種緊湊的、可擴展的、異步的比特流協議,旨在支持在任意無線電環境中進行高帶寬和低延遲通信。mavros是基於MAVLink v1.0和v2.0草案的實現。

MAVLink協議由頭部、消息ID、payload和校驗和四部分組成。頭部包括了消息類型、消息方向和消息重複等信息,消息ID表示了消息的唯一標識符,payload是包含了消息內容的數據區。校驗和用來校驗消息中的數據是否被篡改。MAVLink還支持心跳包和參數設置等功能。

總的來說,MAVLink協議採用了面向位元組的通信方式,可以很好地支持在高噪聲、低可靠性的環境中進行無人機和多機協同任務。

四、ROS接口

mavros提供了豐富的ROS接口,可以幫助我們方便地進行無人機的控制和狀態監控。下面是mavros常用的ROS消息類型和topic列表:

  • mavros_msgs/State mavros/state FCU的狀態信息
  • sensor_msgs/Imu mavros/imu/data FCU的IMU傳感器數據
  • sensor_msgs/NavSatFix mavros/global_position/global FCU的GPS輸出
  • geometry_msgs/PoseStamped mavros/setpoint_position/local 發送位置控制命令
  • geometry_msgs/TwistStamped mavros/setpoint_velocity/cmd_vel 發送速度控制命令
  • mavros_msgs/CommandBool mavros/cmd/arming 請求無人機解鎖/上鎖
  • mavros_msgs/SetMode mavros/set_mode 設置無人機的模式
  • mavros_msgs/OverrideRCIn mavros/rc/override 發送RC信號到飛控
  • mavros_msgs/PositionTarget mavros/setpoint_raw/local 發送原始控制命令

五、開源貢獻

mavros是一個開源項目,在Github上擁有超過3000個star和1500個forks。社區成員在維護和更新mavros的同時,也為項目的發展做出了各種貢獻。可在Github的貢獻列表中查看誰對該項目進行了哪些貢獻,並觀看一些激動人心的探求索尋的一角。

同時,mavros也是ROS機械人行業中非常受歡迎的無人機控制節點之一。通過使用mavros,我們可以輕鬆地創建自己的無人機領域應用,並與其他ROS軟件進行集成。探索開源世界,貢獻開源社區,是每一位軟件開發者的使命,同時也應該是我們每一個人的追求。

原創文章,作者:WPWKG,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/331958.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
WPWKG的頭像WPWKG
上一篇 2025-01-20 14:11
下一篇 2025-01-20 14:11

相關推薦

  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬盤。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • 如何在樹莓派上安裝Windows 7系統?

    隨着樹莓派的普及,許多用戶想在樹莓派上安裝Windows 7操作系統。 一、準備工作 在開始之前,需要準備以下材料: 1.樹莓派4B一台; 2.一張8GB以上的SD卡; 3.下載並…

    編程 2025-04-29
  • 分銷系統開發搭建

    本文主要介紹如何搭建一套完整的分銷系統,從需求分析、技術選型、開發、部署等方面進行說明。 一、需求分析 在進行分銷系統的開發之前,我們首先需要對系統進行需求分析。一般來說,分銷系統…

    編程 2025-04-29
  • SDN開源組織中ONOS起步最早

    ONOS是一個開源軟件定義網絡(SDN)操作系統,由ON.Lab創建並一直在開發。該平台旨在通過使用網絡虛擬化技術使工程師能夠快速靈活地創建和管理網絡服務。 一、ONOS的優勢 在…

    編程 2025-04-29
  • GitHub好玩的開源項目

    本文旨在介紹GitHub上一些好玩的開源項目,並提供代碼示例供讀者參考和學習。 一、Emoji列表 GitHub上有一份完整的Emoji列表,它支持各種平台和設備,方便用戶在Git…

    編程 2025-04-28
  • EulerOS V2R7:企業級開發首選系統

    本文將從多個方面為您介紹EulerOS V2R7,包括系統簡介、安全性、易用性、靈活性和應用場景等。 一、系統簡介 EulerOS V2R7是一個華為公司開發的企業級操作系統,該系…

    編程 2025-04-28
  • 雲盤開源系統哪個好?

    本文將會介紹幾種目前主流的雲盤開源系統,從不同方面對它們做出分析比較,以此來確定哪個雲盤開源系統是最適合您的。 一、Seafile Seafile是一款非常出色的雲盤開源系統,它的…

    編程 2025-04-28
  • 基於Python點餐系統的實現

    在當前瞬息萬變的社會,餐飲行業也在加速發展,如何更好地為客戶提供更加便捷、高效、個性化的點餐服務,成為每個餐飲企業需要思考的問題。本文以基於Python的點餐系統為例,通過優化用戶…

    編程 2025-04-28
  • Ubuntu系統激活Python環境

    本文將從以下幾個方面詳細介紹在Ubuntu系統中如何激活Python環境: 一、安裝Python 在Ubuntu系統中默認已經預裝了Python解釋器,可以通過以下命令來檢查: $…

    編程 2025-04-28

發表回復

登錄後才能評論