无人机 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="[email protected]">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

终端出现

测试通过

相关推荐
电鱼智能的电小鱼5 小时前
基于 EFISH-SBC-RK3588 的无人机通信云端数据处理模块方案‌
linux·网络·人工智能·嵌入式硬件·无人机·边缘计算
月阳羊5 小时前
【无人机】无人机遥控器设置与校准,飞行模式的选择,无线电控制 (RC) 设置
无人机
珈和info16 小时前
珈和科技助力“农险提效200%”!“遥感+”技术创新融合省级示范项目荣登《湖北卫视》!
大数据·科技·无人机·智慧农业
电鱼智能的电小鱼1 天前
SAIL-RK3588协作机器人运动控制器技术方案
linux·嵌入式硬件·数码相机·机器人·无人机·边缘计算
月阳羊1 天前
【无人机】无人机光流模块Optical Flow设置(三),光流测距一体传感器的配置。凌启科技的光流测距一体模块的测试。
无人机
新一线电子测试测量技术说1 天前
国产仪器进化论:“鲁般号”基于无人机的天线测试系统
无人机
moonsims2 天前
基于大疆行业无人机的特色解决方案-无线通信篇:基于蜂窝以及自组网MESH的无线通信C2链路
无人机
Stuomasi_xiaoxin2 天前
如何Ubuntu 22.04.5 LTS 64 位 操作系统部署运行SLAM3! 详细流程
linux·运维·ubuntu·ros·slam3
月阳羊2 天前
【无人机】无人机位置估计出现偏差的原因分析
无人机
月阳羊2 天前
【无人机】问题分析。查看电机转速时,四个电机转速不一致,QGC中检测到电机转速不均衡
无人机