无人机 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

终端出现

测试通过

相关推荐
沈阳昊天环宇无人机小编辑19 小时前
无人机测绘点云实操体验与丹东作业筹备展望,沈阳无人机外出测绘作业
无人机
workflower20 小时前
智能无人机成低空经济核心赛道
运维·人工智能·机器学习·机器人·云计算·无人机
火车站卖橘子1 天前
Mac搭建ROS初始环境
ros
M-Robots echo1 天前
轻量化裁剪方案解析:M-Robots 模块化构建,适配高低端各类机器人硬件平台
java·机器人·ros·开源社区·atomgit·m-robots
tianxuanjg1 天前
0.005mm 高精度 CNC 加工:机器人薄壁复杂零件变形控制与全维度品控方案
经验分享·机器人·无人机·制造·材质
沈阳昊天环宇无人机小编辑1 天前
无人机执照对直招军士招录与发展的赋能作用,文案由沈阳昊天环宇编辑整理 | 聚焦新质战斗力,助力青年直招军士梦
无人机
airobotcn2 天前
空地一体化巡检机器人系统落地实战指南
安全·机器人·无人机·智慧园区·巡逻
tianxuanjg2 天前
机器人精密零件:为何样品合格,批量却频频超差?
人工智能·经验分享·机器人·无人机·制造·材质
airobotcn2 天前
AI Agent下工厂:大模型如何驱动巡检机器人自主决策
人工智能·机器人·自动化·无人机
LONGZETECH2 天前
无人机组装调试实训高损耗痛点分析与虚拟仿真教学落地方案
c语言·开发语言·架构·无人机