PX4二次开发 创建进程

目录

一、创建进程

二、仿真测试


PX4官方手册:Module Template for Full Applications | PX4 User Guide

编写参照PX4源码 src/templates:PX4-Autopilot/src/templates/template_module at main · PX4/PX4-Autopilot · GitHub

一、创建进程

创建自己的进程,仿照PX4源码,在 src/modules/文件夹下,创建一个新的文件夹,名字为进程名。

比如我在这里希望创建一个进程 safe_detector ,用于实时检测无人机上搭载的下激光测距传感器的数值,如果>5m,认为高度过高,向地面站发出警告信息。于是在 src/modules/文件夹下,创建safe_detector文件夹。文件夹里新建4个文件,分别是SafeDetector.cpp SafeDetector.hpp CMakeLists.txt和Kconfig。

代码的编写参照src/modules/templates中的文件,把所有的template_module替换为自己的进程名。

PX4最新的固件(v1.13.0)需要加上Kconfig文件

menuconfig MODULES_SAFE_DETECTOR
	bool "safe_detector"
	default n
	---help---
		Enable support for safe_detector

对应功能的实现只需要修改.cpp文件中的Run()函数即可

void SafeDetector::Run()
{
	if (should_exit()) {
		ScheduleClear();
		exit_and_cleanup();
		return;
	}

	// reschedule backup

	perf_begin(_loop_perf);
	perf_count(_loop_interval_perf);

	// Check if parameters have changed
	if (_parameter_update_sub.updated()) {
		// clear update
		parameter_update_s param_update;
		_parameter_update_sub.copy(&param_update);
		updateParams(); // update module parameters (in DEFINE_PARAMETERS)
	}
	
	//获取无人机状态(是否解锁)
	if (_vehicle_status_sub.updated()) {
		vehicle_status_s vehicle_status;

		if (_vehicle_status_sub.copy(&vehicle_status)) {

			const bool armed = (vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED);

			_armed = armed;
		}
	}

	distance_sensor_s distance_sensor;

	//获取激光传感器数值
	for (unsigned i = 0; i < _distance_sensor_subs.size(); i++) {
		if (_distance_sensor_subs[i].copy(&distance_sensor)) {
			_down = distance_sensor.current_distance;
		}
	}

	//发送警告信息
	if(_armed && (_down > 5.0f)){
		PX4_INFO("高度过高!");
	}

	perf_end(_loop_perf);
}

我们可以借助PX4本身的仿真环境测试编写的代码。为了让进程默认启动,还需要修改两个文件,分别是

1、ROMFS/px4fmu_common/init.d/rc.mc_apps(以多旋翼为对象,mc即multicopter)

2、boards/px4/sitl/default.px4board

 

二、仿真测试

PX4官方仿真模型介绍Gazebo Vehicles | PX4 User Guide

选择带光流与下激光测距的模型 :

make px4_sitl gazebo_iris_opt_flow

在地面站中勾选虚拟遥控,可以手动操控无人机飞行

 拉动油门让无人机升高,可以看到在下激光超过5m后出现警告信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值