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

server/2024/10/9 15:16:19/

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

  • 基础代码框架构建
    • 文件建立
    • 代码基本构建
    • 测试

基础代码框架构建

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

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

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

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

文件建立

在一个ROS的工作空间的src中,新建如下的文件结构。文件是空的没关系,后再写入内容。
也可以同ROS的指令,新建一个功能包
在这里插入图片描述
一个功能包的文件夹名称为ROS.html" title=mavros>mavros_function_test

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

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

include文件夹中包含ROS.html" title=mavros>mavros_function_test文件夹,里面包含文件class.hpp文件用来定义类

代码基本构建

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

#include <ros/ros.h>
#include "ROS.html" title=mavros>mavros_function_test/class.hpp"
#include <stdio.h>#define LOOP_RATE 100int main(int argc, char **argv)
{//Initiate ROSros::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 ROS.html" title=mavros>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 文件中加入如下代码 主要就是构造函数的实现,里面加入打印内容,来进行测试

#include "ROS.html" title=mavros>mavros_function_test/class.hpp"MavrosFuctionTest::MavrosFuctionTest() //构造函数
{std::cout<<"MavrosFuctionTest Init Done "<<std::endl;}

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

#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文件加入下面代码,主要是文件的编译

cmake_minimum_required(VERSION 3.0.2)
project(Mavros_Fuction_Test)
# add_compile_options(-std=c++11)
find_package(catkin REQUIRED COMPONENTSgeometry_msgsROS.html" title=mavros>mavros_msgsroscppstd_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 加入下面代码

<?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>ROS.html" title=mavros>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>ROS.html" title=mavros>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>ROS.html" title=mavros>mavros_msgs</exec_depend><exec_depend>roscpp</exec_depend><exec_depend>std_msgs</exec_depend><export></export>
</package>

测试

在工作空间中进行编译

catkin_make

在这里插入图片描述
通过后,在一个终端启动ros

roscore

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

source devel/setup.bash

启动节点

rosrun Mavros_Fuction_Test Mavros_Fuction_Test_Node

终端出现
在这里插入图片描述
测试通过


http://www.ppmy.cn/server/107290.html

相关文章

深入理解Spring Boot中的@ConditionalOnProperty注解及其应用

在Spring Boot的世界里&#xff0c;条件注解扮演着重要的角色&#xff0c;它们允许开发者根据配置、类的存在或资源的可用性来有条件地加载特定的配置。在这篇文章中&#xff0c;我们将重点探讨ConditionalOnProperty注解&#xff0c;这是Spring Boot中用于基于环境属性条件加载…

如何评判一个公司好坏

1.公司名字里面的信息 好的公司一般叫有限公司和有限责任公司。一般建立子公司而不是分公司。 2.企业信息查询软件信息 是否有法人和注册资本&#xff08;区别于负责人和投资资本&#xff09;是否有很多诉讼&#xff0c;尤其是作为被告是否有高管离职信息

SSRF漏洞(二)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言&#xff1a; 本文主要讲解依靠phpstudy搭建pikachu靶场。 phpstudy下载使用以及搭建本地SQL labs靶场 SSRF漏洞&#xff08;一&#xff09; 靶场搭建。 靶场链接&#xff1…

多人协作开发git merge合并功能出现冲突时解决思路

目录 问题背景描述 解决思路 解决详细步骤 经验适用场景 问题背景描述 现在有一个本地分支A&#xff0c;远端其中两个分支B、C&#xff0c;其中C为主分支&#xff0c;A和B目前版本是一致的&#xff0c;且都比较新&#xff0c;C的版本比较落后&#xff0c;现在需要从分支B合…

加密算法的种类和区别

加密算法是信息安全领域中的重要组成部分&#xff0c;用于保护数据的机密性、完整性和真实性。加密算法大致可以分为两大类&#xff1a;对称加密算法和非对称加密算法&#xff08;也称为公钥加密&#xff09;。每种类型都有其特定的应用场景和特点。下面是这些加密算法类型的概…

如何使用Gogs搭建自己的git服务器

最近偶然发现一款轻量级的git服务器&#xff0c;以前一直用的svn server&#xff0c;最近想搞个git服务器&#xff0c; 用gitlab资源占用太多了&#xff0c;gogs是一款轻量级git服务器&#xff0c;非常适合个人使用。 项目地址&#xff1a;GitHub - gogs/gogs: Gogs is a painl…

概率论知识:贝叶斯公式理解

似然函数 似然函数&#xff08;Likelihood Function&#xff09;用于衡量一组观察数据在假设的不同参数值下发生的可能性。其定义如下&#xff1a; 假设一个统计模型由一组未知的参数 θ θ θ 和观测数据 X X X{ x 1 x_1 x1​, x 2 x_2 x2​,……, x n x_n xn​}组成&#x…

JVM的五个 invoke 指令详解

文章目录 概述invoke 指令概览1. invokespecial2. invokevirtual3. invokestatic4. invokeinterface5. invokedynamic 总结 概述 Java 虚拟机 (JVM) 是 Java 语言的核心组件之一&#xff0c;负责执行 Java 字节码。在 JVM 中&#xff0c;invoke 指令用于执行方法调用。本文将详…