直接看最后, 即可!!

前言

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(uploadCOMMAND 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 # destinationDEPENDS px4COMMENT "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(uploadCOMMAND 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 # destinationDEPENDS px4COMMENT "uploading px4"USES_TERMINAL
)

PilotPi:树莓派运行PX4配置方法相关推荐

  1. 树莓派静态IP配置方法

    一.网络接口文件 配置静态IP有个好处在于每次的访问IP是固定的,比如用到的samba服务器共享文件时可以不改动网络地址.树莓派网络接口在/etc/network/interfaces 文件中进行配置 ...

  2. Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法

    Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法 最近由于老师要求要在Ubuntu下QT上进程多线程服务器的开发,虽然只是单纯的调用qt的network模块,但是为了避免麻烦,我 ...

  3. Win7/Win8/Win8.1下配置apache+php运行缓慢问题解决方法

    Win7/Win8/Win8.1下配置apache+php运行缓慢问题解决方法 参考文章: (1)Win7/Win8/Win8.1下配置apache+php运行缓慢问题解决方法 (2)https:// ...

  4. win7无法安装到此计算机,win7系统安装出现“windows安装程序无法将windows配置为在此计算机的硬件上运行”的解决方法...

    很多小伙伴都遇到过win7系统安装出现"windows安装程序无法将windows配置为在此计算机的硬件上运行"的困惑吧,一些朋友看过网上零散的win7系统安装出现"wi ...

  5. 无法在此配置的计算机上运行,win7系统出现“无法将windows配置为在此计算机的硬件上运行”的解决方法...

    很多小伙伴都遇到过win7系统出现"无法将windows配置为在此计算机的硬件上运行"的困惑吧,一些朋友看过网上零散的win7系统出现"无法将windows配置为在此计算 ...

  6. vscode怎么配置python运行环境f5_VSCode下配置python调试运行环境的方法_python

    这篇文章主要介绍了VSCode下配置python调试运行环境的方法,需要的朋友可以参考下 VSCode配置python调试环境 很久之前的一个东东,翻出来看看VSCode配置python调试环境 * ...

  7. w怎么接显示 树莓派zero_别出心裁——无显示器初次配置ssh连接树莓派zeroW的另类方法...

    前言 raspberrypi出过一款很小巧的板子,就是树莓派zero,后来在其中有添加了WiFi和Bluetooth,是为raspberrypi zero w,即树莓派zero w,这个板子做的非常紧 ...

  8. 树莓派体验13 - 树莓派3B板载wifi配置方法

    树莓派3代B版自带板载wifi和蓝牙,因此想让树莓派通过wifi上网不再需要单独购买wifi模块,通过简单配置板载wifi即可快速实现. 配置方法在命令行操作,前提是你需要进入命令行终端,进入命令行终 ...

  9. 在香蕉派的树莓派系统上配置 Syncthing 自启动(暨 Linux 软件自启服务配置)

    在香蕉派的树莓派系统上配置 Syncthing 自启动 独立观察员 2020 年 1 月 19 日(2020年8月30日 更新) 首先做个名词解释," 香蕉派" 是国内一款山寨树莓 ...

最新文章

  1. 官宣!这些北京高校,正式进军雄安!
  2. 第十六届全国大学生智能车竞赛线上赛点赛道审核 - 山东赛区
  3. [HNOI2018]游戏[拓扑排序]
  4. 傲笑九天志在必得,卧薪尝胆勇者无畏.
  5. 使用 Circular Reveal 动画让页面跳转更炫酷
  6. 加速业务交付,从 GKE 上使用 Kubernetes 和 Istio 开始
  7. 程序员九重镜界,很老的今天刚刚翻出来
  8. 【Python基础入门系列】第06天:Python 模块和包
  9. 【LeetCode笔记】416. 分割等和子集(Java、动态规划、背包问题、滚动数组)
  10. Qt工作笔记-以配置文件的方式动态获取Mysql数据库中的数据
  11. ftp 服务器的目录文件,ftp服务器中文件目录下
  12. Android中Scrollview、ViewPager冲突问题汇总(已解决)
  13. java 获取端口号错误_尝试访问SPYDER中的pyspark时,获取错误“异常:Java网关进程在向驱动程序发送其端口号之前已退出”...
  14. 第14章 火柴人的无尽冒险(《C和C++游戏趣味编程》配套教学视频)
  15. 程序员分析一线城市 1000 +岗位招聘需求,告诉你如何科学找工作
  16. 处理百万级以上的数据处理
  17. Collectors.mapping()
  18. 用关键字搜索c语言,c语言-以关键字搜索程序
  19. 操作系统课设 Nachos 实验一:Nachos 系统的安装与调试
  20. C++ 基本学习 C99基本语法(1)

热门文章

  1. Android 控制屏幕唤醒常亮或熄灭
  2. javaweb_会话管理(sessionCookie)
  3. aso优化_您的关键字策略在App Store优化(ASO)中不起作用的5个原因
  4. 至简设计系列_电子密码锁
  5. onlyoffice文档服务器安装,CentOS7部署OnlyOffice在线办公服务器
  6. 日本综合交通枢纽集约式发展经验
  7. An attempt was made to call a method that does not existThe attempt was made from following location
  8. vivox9android版本升级,vivo X9s是什么系统
  9. DTMF信号系统的Matlab仿真
  10. 电子产品PCB电路板散热的方法