pixhawk入门 -- 编译环境问题解决过程

2023-05-16

pixhawk 编译的基本操作步骤:
1)下载固件仓
git clone https://github.com/PX4/Firmware.git
2)更新固件代码
cd Firmware
git submodule update –init –recursive
3)编译V2固件代码
make px4fmu-v2_default
4)烧录固件
make px4fmu-v2_default upload

每个人使用的编译环境不同,踩的坑也不尽相同。我这列举我遇到的坑和解决过程&方法。

编译环境:Fedora 25 (我个人比较喜欢fedora,可能从大学就开始用,习惯了。)

1.出现import serial错误
这里写图片描述
从编译错误信息看,是python脚步无法导入serial这个模块。
所以使用root账号安装对应的python模块:dnf install pyserial

2.提示需要删除ModemManager,避免冲突
这里写图片描述
dnf remove ModemManager删除,完事。

3.make px4fmu-v2_default upload 命令后一直卡在插拔USB的提示页面
这里写图片描述
首先怀疑USB没有上报设备,进入/dev/看,发现有serial设备上报。插拔USB口,serial设备消失并重新挂载。cat /dev/serial/by-id下的设备节点,发现没有权限。所以登陆root账号,再次使用命令 make px4fmu-v2_default upload,结果OK了。
这里写图片描述

事实证明懒,迟早要还的。果不其然,固件烧录后,使用Minicom打开串口,死活没有nsh的提示符出来,串口也没有响应。
先补充一下串口的配置:
1)先安装minicom
2)再使用minicom -s命令配置串口属性为57600 8N1 ,串口为/dev/ttyACM0 (如果不清楚是那个设备,可通过插拔USB 看看是哪个设备)
串口没有反应,第一直觉就是romfs是不是有问题:1.启动失败 2.没有编译进固件
使用make distclean后,再次编译固件,结果一直提示
Firmware/cmake/nuttx/bin_to_obj.py 65行AttributeError错误,NoneType object has no attribute ‘group’

打开 bin_to_obj.py

 # get size of image
 stdout = run_cmd("{nm:s} -p --radix=x {obj:s}.bin.o", locals())
 re_string = r"^([0-9A-Fa-f]+) .*{sym:s}_size".format(**locals())
 re_size = re.compile(re_string, re.MULTILINE)
 size_match = re.search(re_size, stdout.decode())

 try:
     size = size_match.group(1)
 except AttributeError as e:
     raise RuntimeError("{:s}\nre:{:s}\n{:s}".format(                        
         e, re_string, stdout))
 except IndexError as e:
     group0 = size_match.group(0)
     raise RuntimeError("{:s}\ngroup 0:{:s}\n{:s}".format(
         e, group0, stdout)) # get size of image
 stdout = run_cmd("{nm:s} -p --radix=x {obj:s}.bin.o", locals())
 re_string = r"^([0-9A-Fa-f]+) .*{sym:s}_size".format(**locals())
 re_size = re.compile(re_string, re.MULTILINE)
 size_match = re.search(re_size, stdout.decode())

 try:
     size = size_match.group(1)
 except AttributeError as e:
     raise RuntimeError("{:s}\nre:{:s}\n{:s}".format(                        
         e, re_string, stdout))
 except IndexError as e:
     group0 = size_match.group(0)
     raise RuntimeError("{:s}\ngroup 0:{:s}\n{:s}".format(
         e, group0, stdout))

可以看到size = size_match.group(1)抛出异常,提示没有 group属性,但是group是python内置模块,不可能没有。只有一种可能,就是 size_match为空。再看看代码,只能是arm-none-eabi-nm命令结果有问题。

尝试在run_cmd函数中把编译命令打印出来,看看整个流程。
原来第一步就是用arm-none-eabi-gcc arm-none-eabi-ld arm-none-eabi-nm来计算romfs.bin的大小:
1)/usr/bin/arm-none-eabi-gcc -I/home/pixhawk/Firmware/src/include -g -std=gnu99 -fno-common -Wall -Werror -Wextra -Wno-sign-compare -Wshadow -Wfloat-equal -Wpointer-arith -Wmissing-declarations -Wno-unused-parameter -Werror=format-security -Werror=array-bounds -Wfatal-errors -Werror=unused-variable -Werror=reorder -Werror=uninitialized -Werror=init-self -Werror=unused-but-set-variable -Wformat=1 -Wdouble-promotion -Werror=double-promotion -Wbad-function-cast -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -fvisibility=hidden -include visibility.h -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard -nodefaultlibs -nostdlib -Os -fno-strict-aliasing -fomit-frame-pointer -funsafe-math-optimizations -ffunction-sections -fdata-sections -fno-strength-reduce -fno-builtin-printf -c romfs.o.c -o romfs.o.c.o

2)/usr/bin/arm-none-eabi-ld -r -o romfs.o.bin.o romfs.o.c.o -b binary romfs.bin
3)/usr/bin/arm-none-eabi-nm -p –radix=x romfs.o.bin.o
最后一步期望stdout输出romfs.bin的大小。实际却是在这里出错。
尝试手动把脚步的步骤执行一遍:
1)创建一个空的 romfs.o.c文件,对应脚步如下

2)调用以上命令
结果在执行arm-none-eabi-ld命令时出现Segmentation fault (核心已转储)错误!,查了一下 arm-none-eabi-gcc版本是6.2.0,比较新的阿!

接着使用PC的gcc ld nm命令替代 arm-none-eabi的,在PC上对比测试,发现没有问题。NND,不用想了,就是 arm-none-eabi编译器问题。上 arm-none-eabi官网下载最新的编译器(https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads),解压文件放到/usr/bin目录下,并把最新的 arm-none-eabi的命令路径放入PATH变量中(例如:PATH=$PATH:/usr/bin/gcc-arm-none-eabi-6-2017-q1-update/bin )

重新编译,解决OK了!
接着改变当前用户的权限:
sudo usermod -a -G dialout $USER

把固件再烧录一次,这次串口有输出了!但是乱码。。。。

修改rcS启动文件
Firmware/ROMFS/px4fmu_common/init.d/rcS

     else
         # Start MAVLink
         #mavlink start -r 800000 -d /dev/ttyACM0 -m config -x
         # Start USB shell if no microSD present, MAVLink else
         if [ $LOG_FILE == /dev/null ]
         then
             # Try to get an USB console
             nshterm /dev/ttyACM0 &
         else
             mavlink start -r 800000 -d /dev/ttyACM0 -m config -x
         fi
     fi

再编译烧录,这次nsh提示符出现,输入ls命令响应正常。完美!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pixhawk入门 -- 编译环境问题解决过程 的相关文章

  • PX4+Offboard模式+代码控制无人机起飞(Gazebo)

    参考PX4自动驾驶用户指南 https docs px4 io main zh ros mavros offboard cpp html 我的另一篇博客写了 键盘控制PX4无人机飞行 PX4无人机 键盘控制飞行代码 可以先借鉴本篇博客 xf
  • 基于ESP32的小型四轴无人机

    粗糙版试飞成功 xff01 陀螺仪部分直接飞线飞了一个模块 xff0c 懒得焊了 不是很水平 xff0c 稳定性不是很好 因为滤波算法中加入的元素太少了 xff0c 目前也就MPU6050的输出数据加入了计算 xff0c 所以很多自稳定性飞
  • PX4无人机 - 键盘控制飞行代码

    PX4无人机 键盘控制飞行代码 仿真效果 实机效果 由于图片限制5M以内 xff0c 只能上传一小段了 xff0c 整段视频请点击链接 Pixhawk 6c 无人机 键盘控制无人机 Offboard模式 核心 xff1a 发布 mavros
  • 【FreeRTOS学习 - 消息队列学习】

    跟着韦东山老师FreeRTOS教学资料的学习记录 FreeRTOS全部项目代码链接 xff08 更新中 xff09 https gitee com chenshao777 free rtos study 本文章一共分为一下几个部分 1 创建
  • 【Linux多线程编程-自学记录】08.Linux多线程互斥量

    Linux多线程编程学习代码 xff08 代码已上传gitee xff0c 还请各位兄弟点个Star哦 xff01 xff09 https gitee com chenshao777 linux thread git 笔记 xff1a 1
  • 【Linux多线程编程-自学记录】09.Linux多线程之读写锁

    Linux多线程编程学习代码 xff08 代码已上传gitee xff0c 还请各位兄弟点个Star哦 xff01 xff09 https gitee com chenshao777 linux thread git 笔记 xff1a 1
  • 【Linux多线程编程-自学记录】10.条件变量

    Linux多线程编程学习代码 xff08 代码已上传gitee xff0c 还请各位兄弟点个Star哦 xff01 xff09 https gitee com chenshao777 linux thread git 笔记 xff1a 1
  • 树莓派4B安装Ros 2 Foxy踩坑记录

    1 通过树莓派官方提供的写卡工具raspberry pi imager选择Ubuntu 20 04 5 xff08 64 bit xff09 xff0c 因为我打算用一个8G的存储卡安装ros 2 xff0c Ubuntu 22 04的比较
  • 港科大vins-fusion初探

    SLAM新手 xff0c 欢迎讨论 关于vins fusion的博客 xff1a 1 初探 xff1a https blog csdn net huanghaihui 123 article details 86518880 2 vio主体
  • vins-fusion代码解读[一] vio主体

    SLAM新手 xff0c 欢迎讨论 港科大vins fusion代码解读 一 vins fusion与vins mono代码结构有很大相似性 这次先看看vins estimator节点内的内容 1 程序入口 xff1a 1 vins est
  • vins-fusion代码解读[二] 惯性视觉里程结果与GPS松耦合

    感谢 slam萌新 xff0c 本篇博客部分参考 xff1a https blog csdn net weixin 41843971 article details 86748719 欢迎讨论 惯性视觉里程结果与GPS松耦合 xff1a g
  • vins-fusion代码解读[四] 图像回环检测loop_fusion主体

    SLAM新手 xff0c 欢迎讨论 这篇主要讲loop fusion包的程序结构 xff0c loop fusion主要作用 xff1a 利用词袋模型进行图像的回环检测 在vinsmono中 xff0c 该程序包处于pose graph包内
  • 基于乐鑫开源ESP32四轴无人机项目分享

    上次说重新焊接一块的 xff0c 周末搞定了 xff0c 基本组装的也完成了 xff0c 上个图 试飞还是可以的 xff0c 因为没有光流和定高模块 xff0c 所以稳定性不是很好 xff0c 不过乐鑫预留了扩展模块的接口 xff0c 大家
  • vins-回环检测单独剥离运行

    由于前端如果单纯依靠视觉 43 imu作为里程计 效果经常不稳定 因此最近做项目的过程中 xff0c 将前端转化为以里程计 xff08 码盘编码器 xff09 来进行 xff0c 相对比较鲁棒 由于这个局部传感器有累计误差 xff0c 因此
  • apt 的 update 和 upgrade 命令的区别是什么?

    如果想让你的 Ubuntu 或者 Debian 系统保持更新 xff0c 要用 sudo apt update 和 sudo apt upgrade 命令组合 一些以前的教程也会提到 sudo apt get update 和 sudo a
  • Ubuntu 下 ROS 使用 serial 包进行无线串口通信

    1 查看本机当前USB 串口设备 查看当前已连接的 USB 设备 xff1a lsusb 查看电脑连接的USB 转串口的信息 xff1a dmesg grep ttyUSB 查看电脑连接的串口的信息 xff1a dmesg grep tty
  • 画PCB时,一些非常好的布线技巧

    布线是PCB设计过程中技巧最细 限定最高的 xff0c 即使布了十几年布线的工程师也往往觉得自己不会布线 xff0c 因为看到了形形色色的问题 xff0c 知道了这根线布了出去就会导致什么恶果 xff0c 所以 xff0c 就变的不知道怎么
  • 不能错过的4本Linux好书

    2010年大学毕业 xff0c 在Linux下编程已三年有余了 最近看论坛上不少朋友谈论看过的编程 xff08 Linux xff09 书籍 xff0c 我感触良多 回头想想 xff0c 当初那个一无所知 xff0c 而且老是爱问白痴问题的
  • 微策略2017年秋招线下笔试+技术面+在线测评+主管面总结

    1 前言 微策略可能在国内的知名度比较小 xff0c 它是一家总部在美国 xff0c 在杭州设立研发中心 xff0c 主要做智能商用软件的外企 更多的信息 xff0c 请自行搜索 我是17年10月份面试微策略 xff0c 然后拿到的开发 x
  • github,dockerhub下载文件

    1 打开github xff0c dockerhub代理页面 xff0c 见菜单点击可进入dockerhub代理页面 github下载代理 2 把需要下载的文件的url复制到输入框 3 常用的脚本命令 git clone git clone

随机推荐

  • C++ 开源程序库

    1 系统和网络编程库 xff1a ACE 除了ACE之外 xff0c 还有很多系统和网络编程方面的程序库 比如在线程库方面 xff0c 还有ZThread boost thread xff0c 如果放大到C C 43 43 领域 xff0c
  • 360笔试题2013

    编程题 传教士人数M xff0c 野人C xff0c M C xff0c 开始都在岸左边 xff0c 船只能载两人 xff0c 传教士和野人都会划船 xff0c 当然必须有人划船 两岸边保证野人人数不能大于传教士人数 把所有人都送过河 xf
  • 搜狗笔试题

    搜狗 xff1a 1 xff0c 有n n个正方形格子 xff0c 每个格子里有正数或者0 xff0c 从最左上角往最右下角走 xff0c 只能向下和向右走 一共走两次 xff0c 把所有经过的格子的数加起来 xff0c 求最大值 且两次如
  • [INS-20802] Oracle Net Configuration Assistant failed

    INS 20802 Oracle Net Configuration Assistant failed 在安装Oracle 11g R2时出现了该错误提示 以前安装的时候没有碰到过类似 的错误 原来是64bit和32bit系统兼容性的问题
  • 自定义注解,打造自己的框架-下篇

    2019 12 04 22 53 52 文章目录 结构声明注解声明注解处理器处理注解逻辑给使用者提供调用方法使用 该系列介绍自定义注解 xff0c 完成如下功能 64 BindView 代替 findViewById 64 ClickRes
  • 嵌入式STM32深入之RTOS编程

    RTOS编程 一 前言二 RTOS的概念 xff08 一 xff09 用人来类比单片机程序和RTOS1 1 我无法一心多用1 2 我可以一心多用 xff08 二 xff09 架构的概念 xff08 三 xff09 常见的嵌入式操作系统 xf
  • 坐标系变换

    slam 基础之机器人学中的坐标转换学习总结 rot z 90 ppipp1109的博客 CSDN博客 https www youtube com watch v 61 4Y1 y9DI Hw amp t 61 538s 1 平移和旋转 3
  • 如何安装inf文件

    方法1 运行RunDll32 advpack dll LaunchINFSection YOUINF inf DefaultInstall 方法2 修复右键安装 操作步骤如下 xff1a 打开我的电脑 xff0c 工具 菜单中的 文件夹选项
  • 无人机采集图像的相关知识

    1 xff0e 飞行任务规划 一般使用飞行任务规划软件进行飞行任务的设计 xff0c 软件可以自动计算相机覆盖和图像重叠情况 比如ArduPilot http ardupilot com 和UgCS http www ugcs com 是两
  • 无人机编程donekit及通讯(三)——仿真

    1 启动SITL 启动STL cd courseRoot apm ardupilot sim vehicle py v ArduCopter console map 飞机起飞降落 mode GUIDED arm throttle takeo
  • DroneKit(四)——无人机协同

    coding utf8 from dronekit import connect VehicleMode LocationGlobalRelative APIException import time import exceptions i
  • 看这篇就够了——opencv与libopencv与cv_bridge的安装与使用

    一 基本关系 opencv OpenCV的全称是Open Source Computer Vision Library xff0c 是一个跨平台的计算机视觉处理开源软件库 xff0c 是由Intel公司俄罗斯团队发起并参与和维护 xff0c
  • Linux下更改oracle客户端字符集和服务端字符集

    from http blog csdn net chid article details 6166506 Linux 下更改 oracle 客户端字符集和服务端字符集 1 Linux 下更改 oracle 客户端字符集 xff0c 即设置环
  • C语言书籍推荐

    C 语言书籍推荐 宗旨 xff1a 技术的学习是有限的 xff0c 分享的精神是无限的 一 基础 1 C语言入门很简单 零起点学通C语言 xff08 多媒体范例教学 xff09 C语言从入门到精通 2 C程序设计语言 第2版 新版 C程序设
  • Jetson配置realsense D435i SDK以及realsense-ros

    一 命令安装 SDK sudo apt install librealsense2 realsense viewer 测试 realsense ros sudo apt get install ros ROS DISTRO realsens
  • 工程(十一)——NUC11+D435i+VINS-FUSION+ESDF建图(github代码)

    博主的合并代码 git 64 github com huashu996 VINS FUSION ESDFmap git 一 D435i深度相机配置 1 1 SDK 43 ROS 参考我之前的博客 xff0c 步骤和所遇见的问题已经写的很详细
  • 从零入门激光SLAM(八)——ROS常用消息

    大家好呀 xff0c 我是一个SLAM方向的在读博士 xff0c 深知SLAM学习过程一路走来的坎坷 xff0c 也十分感谢各位大佬的优质文章和源码 随着知识的越来越多 xff0c 越来越细 xff0c 我准备整理一个自己的激光SLAM学习
  • 嵌入式软件开发,快五年,没有成就感,快迷失自己了

    嵌入式软件开发 xff0c 快五年 xff0c 没有成就感 xff0c 快迷失自己了 看到了这个的问题 xff0c 其实这个问题何尝不是很多软件开发人员的困惑呢 至少我自己如此 在任何公司 xff0c 个人永远就是一枚螺丝钉的角色 当公司的
  • 从高校中走出的 Apache 顶级项目 —— IoTDB 核心成员黄向东

    本期访谈嘉宾 xff1a 黄向东 Apache 顶级开放源代码项目 IoTDB xff08 物联网数据库 xff09 核心成员 2021 年开源先锋 清华大学软件学院助理研究员 Q xff1a 简单介绍一下 Apache IoTDB IoT
  • pixhawk入门 -- 编译环境问题解决过程

    pixhawk 编译的基本操作步骤 xff1a 1 xff09 下载固件仓 git clone https github com PX4 Firmware git 2 xff09 更新固件代码 cd Firmware git submodu