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/n/331958.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
WPWKGWPWKG
上一篇 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

发表回复

登录后才能评论