PX4学习笔记(3)

2023-05-16

1 编译PX4

1.1 编译对应的代码

教程链接:https://docs.px4.io/main/zh/dev_setup/building_px4.html
由于我使用的是pixhawk 2.4.8,应该使用以下命令:

cd /home/…/PX4-AutoPilot
make px4_fmu-v2_default

编译结束后,可以看到build文件夹内的生成的代码。
在这里插入图片描述
在这里插入图片描述

1.2 将代码烧录到飞控板上

飞控板使用USB连接电脑,在make命令后附加upload命令,通过USB将编译好的二进制文件上传到自动驾驶仪硬件。

make px4_fmu-v2_default upload
在这里插入图片描述

1.3 VSCode

VSCode是官方支持(并推荐)的用于PX4开发的IDE。它易于设置,可用于模拟和硬件环境编译PX4。

1.4 QT creator

2 编写第一个入门程序(PX4-v1.13.*,失败)

找到源码: PX4-Autopilot/src/examples/px4_simple_app,可以查看PX4的基本结构。

2.1 编写px4_hello_sky.c代码

  1. 新建文件夹:

mkdir /home/…/PX4-AutoPilot/src/examples/px4_hello_sky
cd /home/…/PX4-AutoPilot/src/examples/px4_hello_sky
gedit px4_hello_sky.c

由于我们使用的是PX4开源代码,因此需要按照规则,添加注释以表示PX4的贡献。

/****************************************************************************
 *
 *   Copyright (c) 2012-2022 PX4 Development Team. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 3. Neither the name PX4 nor the names of its contributors may be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 ****************************************************************************/

再添加头部注释:

/**
 * @file px4_simple_app.c
 * Minimal application example for PX4 autopilot
 *
 * @author Example User <mail@example.com>
 */

代码:

#include <px4_platform_common/log.h>

__EXPORT int px4_hello_sky_main(int argc, char *argv[]);

int px4_hello_sky_main(int argc, char *argv[])
{
   PX4_INFO("Hello Sky!");
   return OK;
}

函数必须以<module_name>_main格式命名并从模块中导出__EXPORT

提示:PX4_INFO相当于输出到PX4 shell的printf(包含在px4_platform_common/log.h中)。 这里有不同的日志级别:PX4_INFOPX4_WARNPX4_ERRPX4_DEBUG。 警告和错误会额外添加到ULog并显示在Flight Review 中。

2.2 编写名为CMakeLists.txt的CMake定义文件

在px4_hello_sky这个文件夹下:

gedit CMakeLists.txt

复制以下文本到.txt内:

############################################################################
#
#   Copyright (c) 2015 PX4 Development Team. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in
#    the documentation and/or other materials provided with the
#    distribution.
# 3. Neither the name PX4 nor the names of its contributors may be
#    used to endorse or promote products derived from this software
#    without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
px4_add_module(
 MODULE examples__px4_hello_sky
 MAIN px4_hello_sky
 STACK_MAIN 2000
 SRCS
     px4_hello_sky.c
 DEPENDS
 )

注意:

  1. px4_add_module() 方法根据模块描述生成静态库。
  2. MODULE块是模块的唯一固件名称(按照惯例,模块名称的前缀是src之后的父路径)
  3. MAIN块列出了模块的入口点,它将命令注册到 NuttX,以便可以从 PX4 shell 或 SITL 控制台调用它。
  4. px4_add_module() 文件格式在 PX4-Autopilot/cmake/px4_add_module.cmake 里有明确说明。 为了实现这一功能,我们使用了 POSIX 系统调用函数 poll()
  5. 如果您对px4_add_module指定DYNAMIC选项,则会在 POSIX 平台上创建一个动态库而不是静态库(这些可以在无需重新编译 PX4 的情况下加载,并作为二进制文件而不是源代码共享给其他人)。 您的应用程序不会成为内置命令,而是生成一个名为examples__px4_simple_app.px4mod的文件。 您可以通过在运行时使用以下dyn命令加载文件来运行您的命令:dyn ./examples__px4_simple_app.px4mod

2.3 建立Kconfig文件

在相同文件夹内,创建一个名为Kconfig的Kconfig定义文件:

gedit Kconfig

复制以下内容到文件内:

bool "PX4 Hello sky"
 default n
 ---help---
     Enable PX4 hello sky

2.4 编译文件

2.4.1 添加到编译

编写文件到此为止,以下需要编译应用程序/固件。为了运行它,您首先需要确保它是作为 PX4 的一部分构建的。 应用程序被将依据目标的适当板级cmake文件添加到编译/固件中:

  • PX4 SITL (仿真器): PX4-Autopilot/boards/px4/sitl/default.px4board
  • Pixhawk v1/2: PX4-Autopilot/boards/px4/fmu-v2/default.px4board
  • Pixracer (px4/fmu-v4): PX4-Autopilot/boards/px4/fmu-v4/default.px4board
  • px4board files for other boards can be found in PX4-Autopilot/boards/

在相应的.px4board文件中添加相应的Kconfig密钥CONFIG_EXAMPLES_PX4_HELLO_SKY=y(推荐)
或执行boardconfig make px4_fmu-v2_default boardconfig:

examples  --->
    [x] PX4 Hello sky  ----
  1. 编译Pixhawk v2: 在.../PX4-AutoPilot/boards/px4/fmu-v2/default.px4board文件最后一行添加了CONFIG_EXAMPLES_PX4_HELLO_SKY=y,如下图所示。
    在这里插入图片描述
  2. 编译PX4 SITL (仿真器):在.../PX4-AutoPilot/boards/px4/sitl/default.px4board文件最后一行添加了CONFIG_EXAMPLES_PX4_HELLO_SKY=y

2.4.2 编译

使用特定板的命令构建示例:
jMAVSim 模拟器: make px4_sitl_default jmavsim
Gazebo模拟器:make px4_sitl_default gazebo
Pixhawk v1/2:make px4_fmu-v2_default(或者仅使用make px4_fmu-v2
Pixhawk v3: make px4_fmu-v4_default
其它板: 构建代码

2.5 SITL测试

编译完px4_sitl_default后,可以看到下图:
在这里插入图片描述
pxh>后输入:help

2.6 测试应用(硬件)

2.6.1 将固件上传至飞控板

启用上传器,然后重启飞控板:

Pixhawk v1/2: make px4_fmu-v2_default upload
Pixhawk v3: make px4_fmu-v4_default upload
重启飞控板之前,它应该打印一些编译消息,并在最后打印:

Loaded firmware for X,X, waiting for the bootloader…

一旦飞控板被重启并完成了固件的上传,命令行界面将输出:

Erase : [] 100.0%
Program: [
] 100.0%
Verify : [====================] 100.0%
Rebooting.
[100%] Built target upload

2.5.2 连接至控制台

现在通过串口或USB连接到系统控制台。 按ENTER将调出 shell 提示:

nsh>

输入“help”并按回车键,查看命令:

nsh> help
  help usage:  help [-v] [<cmd>]

  [           df          kill        mkfifo      ps          sleep       
  ?           echo        losetup     mkrd        pwd         test        
  cat         exec        ls          mh          rm          umount      
  cd          exit        mb          mount       rmdir       unset       
  cp          free        mkdir       mv          set         usleep      
  dd          help        mkfatfs     mw          sh          xd          

Builtin Apps:
  reboot
  perf
  top
  ..
  px4_hello_sky
  ..
  sercon
  serdis

请注意,px4_hello_sky现在是可用命令的一部分。 通过键入px4_hello_sky并输入回车启动它:

3 编写第一个入门程序(PX4-v1.12.3,成功)

3.1 编写px4_hello_sky.c代码

  1. 新建文件夹和.c文件
    文件夹名为:px4_hellosky,.c文件名为:px4_hellosky.c

mkdir /home/…/PX4-AutoPilot/src/examples/px4_hellosky
cd /home/…/PX4-AutoPilot/src/examples/px4_hellosky
gedit px4_hellosky.c

  1. 输入代码:
/**
 * @file px4_hellosky.c
 * Minimal application example for PX4 autopilot
 *
 * @author Example User <mail@example.com>
 */

#include <px4_platform_common/log.h>

__EXPORT int px4_hellosky_main(int argc, char *argv[]);

int px4_hellosky_main(int argc, char *argv[])
{
   PX4_INFO("Hello Sky!");
   return 0;
}
  1. 创建Cmake文件,名称为:CmakeLists.txt
    终端输入:

gedit CmakeLists.txt

  1. CmakeLists.txt输入代码:
px4_add_module(
	MODULE examples__px4_hellosky
	MAIN px4_hellosky
	SRCS
		px4_hellosky.c
	DEPENDS
	)

注意:

  • MODULE后面为上一级文件夹名称和这一级文件夹名称,中间用两个“_”隔开。
  • MAIN后面为这一级文件夹名称
  • SRCS后面为.c文件名称。

5.进入…/PX4-Autopilot/boards/px4/sitl/文件夹
打开default.cmake文件:
在EXAMPLES下添加:px4_hellosky这个文件夹名称
在这里插入图片描述

3.2 编译仿真

  1. 在…/PX4-Autopilot/目录下,打开终端:

make px4_sitl_default jmavsim

  1. 打开QGC

  2. 等到初始化完成后,在终端输入:

help
就可以看到自己刚刚编写的第一个程序px4_hellosky
在这里插入图片描述

  1. 输入px4_hellosky就可以看到INFO输出信息:Hello Sky!
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PX4学习笔记(3) 的相关文章

  • kubeadm部署k8s,coredns一直处于containercreating状态failed to find plugin “flannel“ in path [/opt/cni/bin]]

    问题 xff1a coredns始终处于containercreating状态 coredns镜像拉取不下来 xff0c 只能手动拉去之后修改tag进行解决这个问题 xff0c 具体步骤如下 xff1a span class token n
  • Docker Compose部署Springboot+Mysql项目

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 在上一篇文章Spring Boot Maven 43 Docker打包中 xff0c 我们实现了将Springboot项目源代码一
  • 华为交换机配置LACP模式链路聚合

    文章目录 1 拓扑图2 任务描述3 SwA配置4 SwB配置5 查看配置6 普通模式链路聚合演示 https blog csdn net qq 45042462 article details 120972306 1 拓扑图 2 任务描述
  • Linux 或 树莓派 4B 使用 apt 或 pip 安装 scipy

    下面的安装过程都是在树莓派4B上安装成功的 xff0c 记录一下 xff0c 仅供参考 python 3 7 使用 apt 安装 注 xff1a 这种好像python版本只能在3 8以下 xff0c 其他版本也可尝试 sudo apt ge
  • 树莓派4B 安装 sklearn

    本文记录在树莓派4B中安装sklearn库的步骤以及安装时遇到的问题 安装步骤 sudo pip3 install numpy 61 61 1 23 5 sudo apt get install python3 numpy python3
  • navicat连接mysql报错1251的解决方法

    navicat连接mysql报错1251的解决方法 1 新安装的mysql8 xff0c 使用破解版的navicat连接的时候一直报错 xff0c 如图所示 xff1a 2 网上查找原因发现是mysql8 之前的版本中加密规则是mysql
  • 一个简单的flask实例

    Flask是python编写的轻量级的web框架 span class token comment 导入Flask类 span span class token keyword from span flask span class toke
  • 基础命令(四)

    LINUX基础命令 xff08 四 xff09 一 Tail命令 1 tail使用方法 tail命令用途是依照要求将指定的文件的最后部分输出到标准设备 xff0c 通常是终端 xff0c 通俗讲来 xff0c 就是把某个档案文件的最后几行显
  • Snipaste常用快捷键(详细总结)

    Snipaste快捷键 xff08 详细总结 xff09 全局快捷键 全局操作截屏F1贴图F3退出当前截图Esc截屏并自动复制Ctrl 43 F1隐藏 显示所有贴图Shift 43 F3切换到另一组贴图Ctrl 43 F3 鼠标贴图相关操作
  • 4位数值比较器电路

    4位数值比较器电路 题目描述 xff1a 使用门级描述方式 xff0c 实现4位数值比较器 某4位数值比较器的功能如下表 96 timescale 1ns 1ns module comparator 4 input 3 0 A input
  • Maven项目pom.xml project标签爆红解决方法

    今天在打开项目的时候 xff0c 发现了一个Maven项目的问题 xff0c 在Maven项目的pom xml文件中 xff0c project标签爆出了一个错误 parent relativePath of POM com hrp spr
  • 人工智能学习笔记五——孪生神经网络

    本文将用孪生神经网络模型 xff0c 对手写数字集minist进行相似度比较 xff0c 用的框架是keras 如果还不清楚神经网络 xff0c 可以看一下这篇文章 神经网络 caodong0225 github io MNIST 是一个手
  • Docker Swarm实战初探

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 环境 宿主机 xff1a macOS 10 15 7虚拟机平台 xff1a Parallels Desktop 15 1 2虚拟机
  • 零基础DIY四轴飞行器超级详细保姆级教程(STM32F407ZGT6主控、WIFI图传、陀螺仪平衡、气压计/超声波定高、手机蓝牙控制等功能)

    前言 大四毕业后暑假没事做就花了一点DIY了一个四轴飞行器 xff0c 是比较大的那种F450机架 xff0c 不是那种PCB板做机架的小四轴 xff0c 因为我也是从零基础开始做的四轴 xff0c 现在就想把自己的过程写成博客分享在网上
  • shell教程

    shell 简介 Shell是一种脚本语言 xff0c 通常用于在Unix和类Unix操作系统上进行命令行交互 它是用户与操作系统内核之间的接口 xff0c 允许用户通过命令行或脚本文件来控制计算机上的操作 Shell程序通常用于执行复杂的
  • matlab画图常用函数image、imagesc、imshow区别

    1 image函数 从数组显示图像 xff0c 直接把矩阵中的值当作索引值 xff08 称为直接映射 xff09 xff0c 即数值1对应RGB1 xff0c 数值2对应于RGB2 xff0c 当小于1或大于64时表现为两端的颜色 语法1
  • 树莓派WiFi连接问题及网页打开问题的解决

    树莓派WiFi连接问题及网页打开问题的解决 一 问题描述 前一段时间在网上买了一个树莓派 4b计划做一个人脸识别的智能锁 xff0c 前一段时间整赶上期末考试 xff0c 挤时间做了做人脸识别以及人体红外感知模块 xff0c 大致能简单实现
  • C++11之正则表达式(regex_match、regex_search、regex_replace)

    在C 43 43 11中引入了正则表达式 字符规则 先来了解一下这个字符的含义吧 字符描述 转义字符 匹配字符行尾 匹配前面的子表达式任意多次 43 匹配前面的子表达式一次或多次 xff1f 匹配前面的子表达式零次或一次 m 匹配确定的m次
  • Java中Lambda表达式使用及详解

    Java中Lambda表达式使用及详解 前言 一 Lambda表达式的简介 Lambda表达式 xff08 闭包 xff09 xff1a java8的新特性 xff0c lambda运行将函数作为一个方法的参数 xff0c 也就是函数作为参
  • 栈的出栈次序及次序种类

    学过数据结构的程序猿应该都清楚 xff0c 栈是一种先入后出 xff0c 后入先出 xff08 LIFO xff09 的表 即插入和删除都只能在一个位置上进行 xff0c 即栈顶位置 对栈的基本操作有Push xff08 入栈 xff09

随机推荐