PilotPi:树莓派运行PX4配置方法

2023-05-16

直接看最后, 即可!!

前言

PX4开源飞控固件支持很多款硬件, 包括pixhawk, cuav, 和 cube等, 在1.12版本中px4官方开始实验性的支持树莓派直接运行. 这样我们就可以在树莓派上直接运行飞控程序, 考虑到树莓派处理器的性能, 那么就算可以实现很多对性能要求较高的算法啦, 比如说MPC.

区别

以往运行复杂算法的方案是将树莓派作为上位机负责顶层规划, 然后向pixhawk硬件发送飞行指令, 对于做顶层规划类的控制自是没问题, 但是如果做底层控制, 那么我们更希望直接由高性能计算平台直接控制电机来控制飞行器, 而之前上位机的方案需要额外将控制指令发送到pixhawk, 这样就多了很多时间上的滞后. 尤其对于高机动的控制, 时间滞后会制约控制器的潜能.

我的平台

2022年上半年开始树莓派就贼拉贵, 我从实验室的箱底翻出了树莓派2B, 发现居然是能用的!
我的PC上的系统是Win10, 运行虚拟机ubuntu 18, 也在ubuntu20上测试过, wsl也测试过, 都能轻松打通编译环节, 问题都出在了上传固件到树莓派这个环节上!!!

正常的配置流程

关于如何配置其实完全可以参照官网

  1. ubuntu下的配置树莓派的编译环境配置
    https://docs.px4.io/master/en/dev_setup/dev_env_linux_ubuntu.html#raspberry-pi
  2. 树莓派固件的编译, 可以使用树莓派的官方系统, 也可以使用ubuntu的树莓派版本
    https://docs.px4.io/master/en/flight_controller/raspberry_pi_pilotpi_rpios.html
    https://docs.px4.io/master/en/flight_controller/raspberry_pi_pilotpi_ubuntu_server.html
  3. 这里以树莓派的官方系统为例子, 建议在ubuntu 18.04上进行编译. 如果是wsl也是可以编译的.
    无非就是, 修改树莓派的启动文件, 空出树莓派的核心2给px4运行, 其他的就是常规的下载源代码, 编译之类的.

遇到的问题(本文重点来啦, 坑!)

下面是遇到的问题和解决方法

  1. 官方建议ubuntu 18.04, 如果是ubuntu那么就是需要用docker编译, 需要先安装好docker, 如果不熟悉docker, 还是用18.04比较好. docker会出现很多问题. 其中一点就是上传固件的时候显示找不到目标树莓派, 参考了https://discuss.px4.io/t/upload-error-raspberry-pi-navio2/11410 表示需要先运行清除指令, 然后再设置好树莓派的IP地址的环境变量, 最后才是运行编译. 也就是需要先设置环境变量, 然后再执行编译, 如果顺序错了, 那么需要清理工程rm -rf build/scumaker_pilotpi_defaultmake distclean. 这样在上传固件的时候就能检测树莓派啦, 但是新的问题是我这里遇到了输入树莓派ssh密码依旧显示密码不正确, 但是直接连接ssh密码就是可以的, 倒腾了很久也没研究清楚, 如果有人知道, 欢迎留言!
  2. 之后我改用ubuntu18.04直接编译树莓派的PX4固件, 依旧遇到了上面1中的问题, 就是在上传固件的时候总是显示找不到树莓派, 即使按照官方的要求export AUTOPILOT_HOST=192.168.X.X也是不行. 最后分析了下报错提示, 以及makefile文件
  3. 无论是上面的情况1还是情况2,以下内容都适用(就是自己把编译好的px4固件放在树莓派上, 就需要研究哪些文件需要放到树莓派上, 以及放过去后的目录结构是什么样的)

分析过程 不想看我唠叨可以直接看最后!

upload的makefile文件如下, 也就是upload上传固件的命令是将一些文件复制到树莓派的/home/pi/px4/路径中, 但是在我实践中, make scumaker_pilotpi_default upload获取环境变量AUTOPILOT_HOST这个环节出了问题.

if(DEFINED ENV{AUTOPILOT_HOST})
	set(AUTOPILOT_HOST $ENV{AUTOPILOT_HOST})
else()
	set(AUTOPILOT_HOST "raspberrypi")
endif()

if(DEFINED ENV{AUTOPILOT_USER})
	set(AUTOPILOT_USER $ENV{AUTOPILOT_USER})
else()
	set(AUTOPILOT_USER "pi")
endif()

add_custom_target(upload
	COMMAND rsync -arh --progress
			${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${PX4_SOURCE_DIR}/posix-configs/rpi/pilotpi*.config ${PX4_BINARY_DIR}/etc # source
			\$\{AUTOPILOT_USER\}@\$\{AUTOPILOT_HOST\}:/home/\$\{AUTOPILOT_USER\}/px4 # destination
	DEPENDS px4
	COMMENT "uploading px4"
	USES_TERMINAL
)

并且在运行make scumaker_pilotpi_default upload后报错, 关键信息(经过整理)展示如下

FAILED: platforms/posix/CMakeFiles/upload 
cd /home/kcx064/Desktop/PX4-Autopilot/build/scumaker_pilotpi_default/platforms/posix && 
rsync -arh --progress 
/home/kcx064/Desktop/PX4-Autopilot/build/scumaker_pilotpi_default/bin 
/home/kcx064/Desktop/PX4-Autopilot/posix-configs/rpi/pilotpi*.config 
/home/kcx064/Desktop/PX4-Autopilot/build/scumaker_pilotpi_default/etc 
@:/home//px4

其中kcx064是我的用户名, 我将px4源码放到了桌面上, 看上面的提示可以知道就是复制三个路径下的文件到树莓派上的/home/pi/px4/中, 并且使用到了命令rsync.

清楚了这些就可以变通下啦

以下是解决问题的具体操作啦
我们手动将需要的文件复制过去即可

rsync -arh --progress  /home/kcx064/Desktop/PX4-Autopilot/build/scumaker_pilotpi_default/bin pi@192.168.199.232:px4/
rsync -arh --progress  /home/kcx064/Desktop/PX4-Autopilot/posix-configs/rpi/pilotpi*.config pi@192.168.199.232:px4/
rsync -arh --progress  /home/kcx064/Desktop/PX4-Autopilot/build/scumaker_pilotpi_default/etc pi@192.168.199.232:px4/

上面的路径记得替换为自己的具体用户名!!!不要直接用我的, 同时注意修改后面的目标树莓派的IP地址
这样手动运行上面三条后

然后ssh连接到树莓派上, 进入/home/pi/px4/目录

cd px4

运行一下命令启动PX4程序

sudo taskset -c 2 ./bin/px4 -s pilotpi_mc.config

这条命令的参数含义就是指定px4程序运行在核心2上, 并指定配置文件pilotpi_mc.config

运行成功后, 在电脑上打开地面站就能自动通过局域网连接了, 同时可以直接在ssh上操作
在这里插入图片描述
由于没有拓展版(上面有IMU和转换PWM的模块), 所以运行后显示没有传感器.
在这里插入图片描述

后续

参看https://github.com/PX4/PX4-Autopilot/pull/18400, 官方已经修复, 但是对于已经发布的1.12这个问题只能自己修复啦, 如下图所示
在这里插入图片描述
也就是前面的问题是upload脚本的问题, 多了很多斜杠[服了], 所以删除即可, 下面放上我修改好的, 然后如果你需要的话, 文件路径位于源码根目录下的boards\scumaker\pilotpi\cmake,可以复制我的即可免去自己修改:

if(DEFINED ENV{AUTOPILOT_HOST})
	set(AUTOPILOT_HOST $ENV{AUTOPILOT_HOST})
else()
	set(AUTOPILOT_HOST "raspberrypi")
endif()

if(DEFINED ENV{AUTOPILOT_USER})
	set(AUTOPILOT_USER $ENV{AUTOPILOT_USER})
else()
	set(AUTOPILOT_USER "pi")
endif()

add_custom_target(upload
	COMMAND rsync -arh --progress
			${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${PX4_SOURCE_DIR}/posix-configs/rpi/pilotpi*.config ${PX4_BINARY_DIR}/etc # source
			${AUTOPILOT_USER}@${AUTOPILOT_HOST}:/home/${AUTOPILOT_USER}/px4 # destination
	DEPENDS px4
	COMMENT "uploading px4"
	USES_TERMINAL
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PilotPi:树莓派运行PX4配置方法 的相关文章

  • HNU软件能力实训2-21. 新型冠状病毒(COVID19)传播

    写在前面 你好 xff01 欢迎来到我的博客 xff0c 希望我的思路能够帮到你 xff01 问题描述 防控新冠病毒 xff0c 必须时刻引起大家的足够重视 xff0c 特别是人员集中活动场所 xff0c 保持好社交距离 然而 xff0c
  • HNU软件能力实训3-8. ab串

    写在前面 你好 xff01 欢迎来到我的博客 xff0c 希望我的思路能够帮到你 xff01 问题描述 给定一个由字符 a 和字符 b 组成的字符串 xff0c 可以删除若干字符 xff0c 使得剩下来的字符串满足前后段为a xff0c 中
  • HNU软件能力实训3-9. 占座位

    写在前面 你好 xff01 欢迎来到我的博客 xff0c 希望我的思路能够帮到你 xff01 问题描述 一个人可以去占多个座位 xff0c 而且一定是要连续的座位 xff0c 如果占不到他所要求的这么多座位 xff0c 那么他就一个座位也不
  • ROS编程入门(C++ 及 思路)

    使用Autolabor官方入门教程 xff0c 笔记内容为注意事项 首页 Autolabor开源ROS机器人底盘 官方网站 一 ROS通信机制的解释 例如在生活中 xff0c 我们在家里有一个放零食的箱子 xff0c 而操作服务器就是这个箱
  • HNU软件能力实训4-5. 小希的数表

    写在前面 你好 xff01 欢迎来到我的博客 xff0c 希望我的思路能够帮到你 xff01 问题描述 Gardon 昨天给小希布置了一道作业 xff0c 即根据一张由不超过 5000 的 N 3 lt 61 N lt 61 100 个正整
  • HNU软件能力实训4-12. 疫情期间

    写在前面 你好 xff01 欢迎来到我的博客 xff0c 希望我的思路能够帮到你 xff01 问题描述 正值新冠疫情期间 xff0c 阿迪没法返回学校学习 xff0c 他希望通过参加一些比赛来提高一下编程技能 xff0c 同时做做运动 他收
  • HNU软件能力实训4-14. 组个最小数

    写在前面 你好 xff01 欢迎来到我的博客 xff0c 希望我的思路能够帮到你 xff01 问题描述 给定数字0 9各若干个 你可以以任意顺序排列这些数字 xff0c 但必须全部使用 目标是使得最后得到的数尽可能小 xff08 注意0不能
  • CMakeLists.txt的编写

    首先是编写好的CMakeLists txt文件 span class token function cmake minimum required span span class token punctuation span VERSION
  • 第一课 神经网络与深度学习 第二周 神经网络基础(已完结(虽然有坑))

    视频地址 二分分类 怎么说 xff0c 第一段话就颠覆了我的想象 xff0c 遍历m个样本不需要用for循环 这里是介绍了图片的预处理 xff0c 将图片切分为rgb三个颜色空间 xff08 这个我熟 xff09 xff0c 然后将所有的分
  • leetcode 1200. 最小绝对差

    1200 最小绝对差 span class token keyword class span span class token class name Solution span span class token punctuation sp
  • 648. 单词替换

    648 单词替换 span class token keyword class span span class token class name Solution span span class token punctuation span
  • 1217. 玩筹码

    1217 玩筹码 span class token comment 由题目描述可知 xff0c 移动1步成本为1 移动2步没有成本 那么我们可以不耗费成本的将不同奇数位置的筹码移动到某一个奇数位置 此时的成本为0 同理 也可以将不同偶数位置
  • dronekit控制实体无人机起飞降落

    摘要 xff1a 本文基于dronekit在实体无人机上实现最基本的起飞和降落 xff0c 测试了这一过程中速度的变化以及起落位置的偏移 实体实验环境 树莓派4BUbuntu mate 20 04飞控Pixhawk 2 4 8飞控固件APM
  • Gazebo中针对Gazebo软件或生成模型出现process has died问题的参考方案

    在基于ROS机器人仿真时 xff0c 打开Gazebo经常出现一些问题 xff0c 比如Gazebo窗口打开了 xff0c 终端却显示gazebo进程已死 本文记录了一次遇到的类似问题 xff0c 并给出了在部分情况下能够适用的参考方案 问
  • ROS 入门 (launch文件)

    本章主要内容介绍在ROS中上述问题的解决策略 见本章目录 xff0c 预期达成学习目标也与上述问题对应 xff1a 掌握元功能包使用语法 xff1b 掌握launch文件的使用语法 xff1b 理解什么是ROS工作空间覆盖 xff0c 以及
  • 报错:Multiple annotations found at this line: - user cannot be resolved

    问题 xff1a Multiple annotations found at this line user cannot be resolved 第一步 xff1a 右键找到Build Path 点击Configure Build Path
  • Nuxt 生命周期

    目录 服务端生命周期1 nuxtServerInit nuxt中第一个运行的生命周期 2 RouteMiddleware 第二个 xff1a 中间键 xff0c 路由导航守卫 4 validate 是用来校验url参数符不符合5 async
  • 使用ESP-idf-4.23一次编译通过ESP32-Drone四旋翼无人机代码

    为了编译ESP32 Drone四旋翼无人机代码 xff0c 试用了几种编译环境 xff0c 折腾一个上午 xff0c 最后使用ESP idf 4 23一次性编译通过 记录一下过程 1 获取ESP32 Drone四旋翼无人机项目源代码 xff
  • 基于ESP32四旋翼无人机如何根据PID算法进行电机的PWM duty补偿

    1 计算模型 电机位置和补偿输出的关系 xff0c 需要求解的是C1 C2 C3 C4的电机输出补偿值 分别对应M1 M2 M3 M4四个电机 2 推导过程 xff08 可以跳过不看 xff0c 直接到第三步 xff09 3 四个电机的PI
  • 基于ESP32四旋翼无人机的MPU6050姿态数据采集和处理方式

    1 MPU6050姿态数据采集和处理 在DMP任务里面采集MPU6050的四元数的姿态数据 xff0c 然后解算出机体坐标系的三个角姿态角 dmp task任务通过消息队列将姿态角发送给姿态控制程序 dmp task gt dandelio

随机推荐

  • 基于ESP32四旋翼无人机同蓝牙遥控器通信处理方式

    1 蓝牙初始化 在app main调用函数初始化蓝牙 inf ble gatt init 2 判断蓝牙是否链接 在dandelion task中调用函数inf ble gatt connected 判断蓝牙是否链接 xff0c 进而调用da
  • 论文Handheld Multi-Frame Super-Resolution的相关学习笔记

    导语 这里汇总了阅读这篇论文可能会参考到的相关知识汇总 xff0c 这篇主要为了让自己查找方便 但是也希望阅读这篇博文的你能够通过我的笔记更快理解 上手这篇论文 文章题目 xff1a Hand held Multi frame super
  • ASP读EXCEL2000的文章!!!

    由于工作需要 要用ASP读取EXCEL的工资单 所以在网上找了些资料 写了以下程序 送给大家 xff1a xff09 lt 39 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 6
  • Linux下软件安装方法

    对于Linux初学者来说 xff0c 安装一个很小的软件恐怕都是一件很让人头疼的事 xff0c 因为在Linux下安装软件不像在 Windows中那样简单 在Linux中大多数软件提供的是源代码 xff0c 而不是现成的可执行文件 xff0
  • linux指令大全(二)

    cat cd chmod chown cp cut 名称 xff1a cat 使用权限 xff1a 所有使用者 使用方式 xff1a cat AbeEnstTuv help version fileName 说明 xff1a 把档案串连接后
  • 详解C++STL容器系列(一)—— vector的详细用法和底层原理

    目录 一 介绍二 vector的创建和方法创建vector方法 三 vector的具体用法3 1 遍历vector3 1 1 迭代器访问3 1 2 下标访问3 1 3 范围for循环 3 2 vector 容量和大小3 3 vector 常
  • FTP的命令行格式

    From LinuxSir org 非常感谢javalee大哥 FTP的命令行格式为 xff1a ftp v d i n g 主机名 xff0c 其中 v 显示远程服务器的所有响应信息 xff1b n 限制ftp的自动登录 xff0c 即不
  • 一句话问答(网络无关篇+网络相关篇)

    一句话问答 网络无关篇 43 网络相关篇 网络无关篇 0001 修改主机名 vi etc sysconfig network xff0c 修改HOSTNAME一行为HOSTNAME 61 主机名 xff0c 重启后也能生效 0002 Ret
  • linux下各种分区的自动挂载和卸载.

    目前实现分区自动挂载 卸载的方法 我知道的 有两种 一种是supermount 一种是automount supermount要重新编译内核 而且不稳定 这里就不介绍了 我介绍一下automount的使用方法 首先确认你的linux已经安装
  • Linux 挂载文件系统

    1 挂载点必须是一个目录 2 一个分区挂载在一个已存在的目录上 xff0c 这个目录可以不为空 xff0c 但挂载后这个目录下以前的内容将不可用 对于其他操作系统建立的文件系统的挂载也是这样 但是需要理解的是 xff1a 光盘 软盘 其他操
  • 新浪网人力资源总监段冬聊企业对人才的需求

    http edu sina com cn l 2004 12 02 ba93631 shtml 新浪网人力资源总监段冬聊企业对人才的需求 http www sina com cn 2004 12 02 21 03 新浪教育 图为新浪网人力资
  • RESIN FAQ

    RESIN FAQ 环境变量设置 CLASSPATH C j2sdk lib dt jar C j2sdk lib tools jar JAVA HOME C j2sdk PATH C j2sdk bin 61 61 61 61 61 61
  • 研究基于PX4平台的Ardupilot代码工程的makefile结构

    最近有空 xff0c 于是想花时间好好研究下ardupilot的软件架构 xff0c 经过对ardupilot一段时间的熟悉和使用后 xff0c 对其软件架构已经有了一定的理解 xff0c 但还称不上特别完备 xff0c 所以想把每一部分的
  • Px4固件升级流程。

    PX4飞控的固件升级可以简单的分为6步 xff0c 具体如下 xff1a 1 重启飞控 重启飞控 xff0c APP发送指令mavlink飞控重启指令 等待0 5s后进入下一步 xff1b 2 识别bootloader APP发送 0x21
  • pixhawk入门知识

    Pixhawk是一种先进的自动驾驶仪 xff0c 由PX4开放硬件项目设计和3D机器人制造 它具有来自ST公司先进的处理器和传感器技术 xff0c 以及NuttX实时操作系统 xff0c 能够实现惊人的性能 xff0c 灵活性和可靠性控制任
  • MDK 注册机下载路径

    MDK下载路径 https editor csdn net md articleId 61 115338061
  • MathJax 3.0 配置方法,上手配置

    说明 网上很多MathJax 的配置方法适用于旧版本 新版的MathJax做了一些改进 配置方式也做了调整 最简单的方案 方便起见 最简单的方案如下 span class token tag span class token tag spa
  • VsCode+LaTexWorkshop外置PDF预览配置(2021.3.3)

    随着插件版本的升级有些配置命令发生了改变 xff0c 这里只是做个简单记录 xff0c 写的比较粗糙 后面有闲工夫再来做做美工 VsCode一侧配置 34 latex workshop view pdf viewer 34 34 exter
  • MATLAB批量为png透明(抠图)图片替换添加背景

    MATLAB批量为png透明 抠图 图片替换添加背景 说明 最近有个小需求 需要抠图后将抠图的背景替换为指定图片 如果一张一张做 图片多了实在是不好用 前提 准备好背景图片 一张准备好目标图片 很多张可以利用powertoys将目标图片统一
  • PilotPi:树莓派运行PX4配置方法

    直接看最后 即可 前言 PX4开源飞控固件支持很多款硬件 包括pixhawk cuav 和 cube等 在1 12版本中px4官方开始实验性的支持树莓派直接运行 这样我们就可以在树莓派上直接运行飞控程序 考虑到树莓派处理器的性能 那么就算可