无人机 PX4 飞控 | ROS应用层开发:基础代码框架构建

无人机 PX4 飞控 | ROS应用层开发:基础代码框架构建

基础代码框架构建

本篇博客拟在构建一个 无人机 PX4 飞控 ROS应用层开发 的 基础代码框架。

其中包含了基础类文件、类头文件、main主函数文件,及其编译所需的CMakeLists.txt、package.xml

在main文件中完成了时间片处理,并实例化了类,通过终端打印信息完成测试。

这个代码框架不仅限于该软件开发,还可用于其它项目。后期将在这个框架基础上实现各功能测试。

文件建立

在一个ROS的工作空间的src中,新建如下的文件结构。文件是空的没关系,后再写入内容。

也可以同ROS的指令,新建一个功能包

一个功能包的文件夹名称为mavros_function_test

包含src文件夹、include文件夹、CMakeLists.txt文件、package.xml文件

src文件夹中包含main.cpp文件用来生成执行文件;class.cpp文件用来实现类的功能

include文件夹中包含mavros_function_test文件夹,里面包含文件class.hpp文件用来定义类

代码基本构建

main.cpp 中加入下面代码 主要是基本的时间片管理 ,方便后期不同频率执行任务

c 复制代码
#include <ros/ros.h>
#include "mavros_function_test/class.hpp"
#include <stdio.h>

 
#define LOOP_RATE 100

int main(int argc, char **argv)
{
  //Initiate ROS
  ros::init(argc, argv, "Mavros_Fuction_Test_Node");
  ros::NodeHandle nh;

  std::cout<<"Mavros Fuction Test Node Start !!!"<<std::endl;
 
  bool flag_1_Hz,flag_5_Hz,flag_10_Hz,flag_50_Hz;
  uint16_t time_manger = 0;

  MavrosFuctionTest mavros_function_test;

  ros::Rate loop_rate(LOOP_RATE);

  while (ros::ok())
  {
    // 时间片处理
    {
        time_manger++;
        if(time_manger>=LOOP_RATE)
        {
        time_manger = 0;
        flag_1_Hz = true;
        }

        if(time_manger%(LOOP_RATE/5)==0)
        {
        flag_5_Hz = true;
        }
        
        if(time_manger%(LOOP_RATE/10)==0)
        {
        flag_10_Hz = true;
        }
        
        if(time_manger%(LOOP_RATE/50)==0)
        {
        flag_50_Hz = true;
        }
    }


    if(flag_1_Hz)
    {
      flag_1_Hz = false;

    }


    if(flag_5_Hz)
    {
      flag_5_Hz = false;

    }



    if(flag_10_Hz)
    {
      flag_10_Hz = false;


    }



    if(flag_50_Hz)
    {
      flag_50_Hz = false;


    }



    ros::spinOnce();

    loop_rate.sleep();
  }



  return 0;

}

class.cpp 文件中加入如下代码 主要就是构造函数的实现,里面加入打印内容,来进行测试

c 复制代码
#include "mavros_function_test/class.hpp"



MavrosFuctionTest::MavrosFuctionTest() //构造函数
{

    std::cout<<"MavrosFuctionTest Init Done "<<std::endl;

}

class.hpp 加入下面代码,定义了一个最基本的类

c 复制代码
#ifndef CLASS_H
#define CLASS_H


#include <math.h>
#include <stdio.h>

#include <ros/ros.h>


class MavrosFuctionTest //类名  
{
public:
    MavrosFuctionTest(); //构造函数

private:

    ros::NodeHandle nh_;

};//End of class  MavrosFuctionTest

#endif

CMakeLists.txt文件加入下面代码,主要是文件的编译

c 复制代码
cmake_minimum_required(VERSION 3.0.2)
project(Mavros_Fuction_Test)
# add_compile_options(-std=c++11)
find_package(catkin REQUIRED COMPONENTS
  geometry_msgs
  mavros_msgs
  roscpp
  std_msgs
)
catkin_package(
)
include_directories(
 include
  ${catkin_INCLUDE_DIRS}
)
add_library(Mavros_Fuction_Test_Class src/class.cpp )
target_link_libraries(Mavros_Fuction_Test_Class ${catkin_LIBRARIES} )
add_executable(Mavros_Fuction_Test_Node src/main.cpp)
target_link_libraries( Mavros_Fuction_Test_Node Mavros_Fuction_Test_Class ${catkin_LIBRARIES} )

package.xml 加入下面代码

c 复制代码
<?xml version="1.0"?>
<package format="2">
  <name>Mavros_Fuction_Test</name>
  <version>0.0.0</version>
  <description>The Mavros_Fuction_Test package</description>
  <maintainer email="jk-jone@todo.todo">jk-jone</maintainer>
  <license>TODO</license>
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>geometry_msgs</build_depend>
  <build_depend>mavros_msgs</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>geometry_msgs</build_export_depend>
  <build_export_depend>mavros_msgs</build_export_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>geometry_msgs</exec_depend>
  <exec_depend>mavros_msgs</exec_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <export>
  </export>
</package>

测试

在工作空间中进行编译

c 复制代码
catkin_make

通过后,在一个终端启动ros

c 复制代码
roscore

在节点的工作空间下面进行source

c 复制代码
source devel/setup.bash

启动节点

c 复制代码
rosrun Mavros_Fuction_Test Mavros_Fuction_Test_Node

终端出现

测试通过

相关推荐
daad7778 小时前
记录无人机的compass
无人机
CS_Zero2 天前
无人机避障仿真系统:Gazebo+PX4+ROS2+Fast-LIO2+SUPER框架联调
无人机·ros2
灵翼飞航科技有限公司2 天前
2026款WF-EN系列多功能发动机测试台(适用DLE、林巴赫、Rotax等发动机)
功能测试·测试工具·无人机
24年生活经验_小旻18 天前
ROS2+Ardupilot+Gazebo通信仿真基本环境搭建
无人机
嘉子的秃头日记19 天前
TRO 2026|无人机能不能像积木一样,拼出不同形态?
无人机
YOLO数据集集合19 天前
无人机航拍地质灾害智能识别 山体滑坡实例分割数据集落地实战 | 泥石流监测 道路险情封堵 深度学习模型训练方案10296期
人工智能·深度学习·yolo·目标检测·无人机
海砥装备HardAus19 天前
大载重工业无人机高空风扰建模与ADRC自抗扰抗风控制实现
无人机·adrc·工业无人机
海砥装备HardAus19 天前
大载重工业无人机动力容错控制:单电机失效下的应急重构算法设计
算法·重构·嵌入式·无人机
中科固源19 天前
飞控里的“暗战”:无人机软件栈中的控制权风险
网络安全·无人机·低空经济
YOLO数据集集合19 天前
无人机风电设备智能巡检 风机叶片缺陷目标检测数据集实战 | 表面腐蚀漏油识别 工业视觉质检 深度学习模型训练落地10337期
人工智能·深度学习·目标检测·计算机视觉·无人机