无人机仿真—PX4编译,gazebo仿真及简单off board控制模式下无人机起飞

这篇具有很好参考价值的文章主要介绍了无人机仿真—PX4编译,gazebo仿真及简单off board控制模式下无人机起飞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

无人机仿真—PX4编译,gazebo仿真及简单off board控制模式下无人机起飞

前言

  • 在上篇记录中,已经对整体的PX4仿真环境有了一定的了解,现如今就要开始对无人机进行起飞等仿真环境工作,在整体虚拟环境中如果程序能够安稳起飞降落,即可对无人机进行实飞操作。
  • 需要做的是,通过PX4官网提供的基本程序包,在ROS工作空间下新建程序包对其进行运行,再打开仿真环境即可

PX4编译

  • cd /Firmware  #进入PX4文件夹内
    make px4_sitl_default gazebo  # 编译固件并加载仿真环境
    
  • 如果想进行自动起飞,可运行以下命令

    • commander takeoff
      

利用ROS启动仿真环境(正式)

  • 老规矩先加载ROS,运行命令

    • roscore
      
      
  • px4 仿真 高,无人机

    • 出现红色警告,说明ROS本地缓存大于1GB,可以忽视,如果需要清理可以使用

      • rosclean purge
        
  • 在PX4文件夹内用mavros连接到本地ros,运行以下命令打开gazebo仿真环境

    • roslaunch px4 mavros_posix_sitl.launch
      

    编写外部程序包

    首先需要在ROS工作空间下,在src目录下新建功能包

    cd ~/catkin_ws/src
    catkin_create_pkg offboard roscpp mavros geometry_msgs
    //catkin_create_pkg 是ROS命令,新建一个功能包
    //offboard 功能包名字
    //roscpp mavros geometry_msgs功能包依赖
    //命令格式catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
    

    在offboard功能包src目录下新建cpp文件,将外部程序控制文件写入保存

    • 新建cpp文件

    • touch offboard_node.cpp 
      

      px4 仿真 高,无人机

    • 将以下程序写入到cpp文件,此程序参考的是PX4官网给出的例程。

    • /**
       * @file offb_node.cpp
       * @brief Offboard control example node, written with MAVROS version 0.19.x, PX4 Pro Flight
       * Stack and tested in Gazebo SITL
       */
      
      #include <ros/ros.h>
      #include <geometry_msgs/PoseStamped.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;
      
          //订阅mavros状态
          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");
          //定义设置模式服务客户端(设置offboard模式)
          ros::ServiceClient set_mode_client = nh.serviceClient<mavros_msgs::SetMode>
                  ("mavros/set_mode");
      
          //the setpoint publishing rate MUST be faster than 2Hz
          ros::Rate rate(20.0);
      
          // wait for FCU connection
          while(ros::ok() && !current_state.connected){
              ros::spinOnce();
              rate.sleep();
          }
      
          geometry_msgs::PoseStamped pose;
          pose.pose.position.x = 0;
          pose.pose.position.y = 0;
          pose.pose.position.z = 10;
      
          //send a few setpoints before starting
          for(int i = 100; ros::ok() && i > 0; --i){
              local_pos_pub.publish(pose);
              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.mode_sent){
                      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目录下找到Cmakelists.txt文件,并设置程序运行节点,不然rosrun命令无法找到该节点,从而报错

    • px4 仿真 高,无人机

    • 输入以下除蓝色字体的命令px4 仿真 高,无人机 - 编辑好后即可进行编译

编译

  • 进入到catkin_ws目录下,运行终端

  • cd /catkin_ws
    catkin_make
    
    

px4 仿真 高,无人机

  • 如上图显示编译成功

  • 运行程序包

  • rosrun offboard offboard_node
    
    

    px4 仿真 高,无人机

  • 无人机实现自动起飞10米高,程序运行成功。文章来源地址https://www.toymoban.com/news/detail-770229.html

小结

  • 之所以要记录本次的过程,是因为自己对ROS工作模式的进一步了解,当然,实验这篇前需要去了解一下ROS语法,这里推荐古月居博主,可以在B站和csdn上都可以搜到。
  • 踩坑总结:
    • 在已经 建立工作空间的情况下,如果需要新建程序包,不要在工作空间目录(catkin_ws)下新建,而是要了解ros环境后在src目录下使用命令新建程序包,不然编译就会出错
    • 运行程序包的命令,不需要添加文件后缀名
    • 之所以会产生各种错误,是基于自己并不了解ros的工作模式和原理,实际上,只要自己有了经验,有了教训,下一次的建立会相比较第一次都会顺手很多。
    • 错误的不断产生让我一度以为自己的ros环境产生了怀疑,认为自己的环境搭建出错,但一切的根源就是自己的工作路径添加错误,对系统产生的错误需要自己一点点去啃。
    • 因为ROS系统产生错误显示的是英文,对于一些不常见的错误,可以利用有道词典的划词功能,对错误进行翻译,只有自己真正了解到这个错误,最终才能够有根据的去寻求答案。
  • 最后送句话给自己吧。“海压竹枝低复举,风吹山角晦还明”

到了这里,关于无人机仿真—PX4编译,gazebo仿真及简单off board控制模式下无人机起飞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【PX4&Simulink&Gazebo联合仿真】在Simulink中使用ROS2控制无人机进入Offboard模式起飞悬停并在Gazebo中可视化

    本篇文章介绍如何使用ROS2控制无人机进入Offboard模式起飞悬停并在Gazebo中可视化,提供了Matlab/Simulink源代码,以及演示效果图。 环境: MATLAB : R2022b Ubuntu :20.04 LTS Windows :Windows 10 ROS :ROS2 Foxy Python: 3.8.2 Visual Studio :Visual Studio 2019 PX4 :1.13.0 ROS2的应用程序管道非常简单,这要

    2024年02月22日
    浏览(58)
  • 【PX4&Simulink&Gazebo联合仿真】在Simulink中使用ROS2控制无人机沿自定义圆形轨迹飞行并在Gazebo中可视化

    本篇文章介绍如何使用ROS2控制无人机沿自定义圆形轨迹飞行并在Gazebo中可视化,提供了Matlab/Simulink源代码,以及演示效果图。 环境: MATLAB : R2022b Ubuntu :20.04 LTS Windows :Windows 10 ROS :ROS2 Foxy Python: 3.8.2 Visual Studio :Visual Studio 2019 PX4 :1.13.0 ROS2的应用程序管道非常简单,这要

    2024年02月22日
    浏览(69)
  • 【PX4-AutoPilot教程-TIPS】PX4控制无人机在Gazebo中飞行时由于视角跟随无人机在画面中心导致视角乱晃的解决方法

    无人机在Gazebo中飞行时,无人机始终处于画面中央,会带着视角乱晃,在Gazebo中进行任何操作视角都无法固定。 观察Gazebo左侧World栏GUI选项,发现有一个track_visual项,这个是Gazebo中的跟随视角,跟踪目标是无人机iris,但是手动点击无法取消,设置Gazebo使用FOLLOW选项跟随其他目

    2024年02月22日
    浏览(84)
  • Ubuntu PX4无人机仿真环境配置

     目录 一、VM虚拟机安装ubuntu18.04   1、VMware安装   2、新建虚拟机 二、Ubuntu系统配置   1、更改软件安装源   2、安装中文输入法 三、PX4环境搭建   1、安装git   2、下载px4源码   3、安装ROS   4、安装MAVROS   5、安装QGC   6、仿真测试 四、其他工具安装   1、VScode安装      

    2024年02月02日
    浏览(188)
  • ubuntu搭建PX4无人机仿真环境(4) —— 仿真环境搭建

    前言 在搭建之前,需要把 ROS、MAVROS、QGC 等基础环境安装配置完成。大家可以参考我之前的教程 本次安装是以 px4 v1.13.2 为例。 我的配置如下: 虚拟机 Ubuntu 18.04 (运行内存 4G、硬盘内存 80G) 、ROS melodic 、最新版 QGC 建议安装之前可以先看看这个 👉 ubuntu搭建PX4无人机仿真环境

    2024年02月15日
    浏览(76)
  • (最新)ubuntu搭建PX4无人机仿真环境(4) —— 仿真环境搭建

    前言 在搭建之前,需要把 ROS、MAVROS、QGC 等基础环境安装配置完成。大家可以参考我之前的教程 本次安装是以 px4 v1.13.2 为例。 我的配置如下: 虚拟机 Ubuntu 18.04 (运行内存 4G、硬盘内存 80G) 、ROS melodic 、最新版 QGC 建议安装之前可以先看看这个 👉 ubuntu搭建PX4无人机仿真环境

    2024年02月09日
    浏览(59)
  • ROS-基于PX4的无人机SLAM建图(Cartographer)仿真

    首先在电脑上安装好Ubuntu系统和ROS系统,我安装的是Ubuntu18.04和ROS Melodic,不同的Ubuntu版本对应不同的ROS版本 ROS发布日期 ROS版本 停止支持日期 对应Ubuntu版本 2018年5月23日 ROS Melodic Morenia 2023年5月 Ubuntu 18.04 2016年5月23日 ROS Kinetic Kame 2021年4月 Ubuntu 16.04 (Xenial) Ubuntu 15.10 (Wily) 201

    2024年02月15日
    浏览(56)
  • (最新)ubuntu搭建PX4无人机仿真环境(2) —— MAVROS安装

    MAVROS是一个ROS(Robot Operating System)软件包 , 有了它就可以让ROS与飞控通信。这次安装是以ubuntu 18.04 (ROS Melodic)为例,也适用于其他版本 。安装之前确保 ROS 安装成功,没安装的可以看我仿真系列教程。 (注:安装方式有二进制安装和源码安装两种方式,源码安装需要从Git

    2024年02月09日
    浏览(61)
  • 带你玩转PX4无人机仿真(3) —— 运行官方案例(RC版)

    前言: 本次教程是官方提供的 MAVROS Offboard (板外) 控制示例,但加上了 外部遥控器(RC)控制 (如果想要在真机上实现,还要修改代码) 注:搭建仿真环境可以看下面教程 👇 (最新)ubuntu搭建PX4无人机仿真环境(1) —— 概念介绍及环境建议 (最新)ubuntu搭建PX4无人机仿真环境(2) —

    2024年02月19日
    浏览(49)
  • (最新)ubuntu搭建PX4无人机仿真环境(1) —— 概念介绍及环境建议

    搭建PX4仿真环境一个有挑战性的过程,如果没有一个有经验的人来带的话会走很多弯路。我在搭建PX4仿真环境的时候,不知道Linux、ROS、git,语言也只会一个C语言,没有任何无人机基础,纯小白一个,靠着自学与网上的各种教程,花了一两个月才搭好基本的仿真环境框架。我

    2024年02月08日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包