基础代码框架构建
本篇博客拟在构建一个 无人机 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
终端出现
测试通过