The value of knowledge lies not in possession, but in share.

0%

Ubuntu下Pixhawk环境搭建

网上很多博客中介绍的方法大多比较久远的了,自己综合参考了不少博客的过程中,还是踩了很多坑,特总结下来,以便后面重搭环境时之需。

官方的配置教程

前期准备

  1. 设置权限

    1
    sudo usermod -a -G dialout $USER
  2. 安装相关工具

    1
    2
    3
    4
    5
    6
    7
    8
    9
    sudo add-apt-repository ppa:george-edison55/cmake-3.x -y
    sudo apt-get update
    # 必备软件 python git qt
    sudo apt-get install python-argparse git-core wget zip python-empy qtcreator cmake build-essential genromfs -y
    # 仿真工具
    sudo add-apt-repository ppa:openjdk-r/ppa
    sudo apt-get update
    sudo apt-get install openjdk-8-jre
    sudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-8-jdk openjdk-8-jre clang-3.5 lldb-3.5 -y
  3. 卸载模式管理器

    1
    sudo apt-get remove modemmanager
  4. 更新包列表和安装下面的依赖包

    1
    2
    3
    4
    5
    6
    7
    sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded -y
    sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
    sudo apt-get update
    sudo apt-get install python-serial openocd \
    flex bison libncurses5-dev autoconf texinfo build-essential \
    libftdi-dev libtool zlib1g-dev \
    python-empy -y
  5. 工具链安装(若gcc-arm-none-eabi版本不对)(非必须)

    • 如果以前装过工具链,删除残余

      1
      2
      sudo apt-get remove gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-none-eabi gcc-arm-embedded
      sudo add-apt-repository --remove ppa:team-gcc-arm-embedded/ppa
    • 安装工具链

      特殊原因,推荐使用浏览器下载:https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q2-update/+download/gcc-arm-none-eabi-5_4-2016q2-20160622-linux.tar.bz2

      1
      2
      3
      4
      5
      6
      7
      pushd .
      cd ~
      tar -jxf gcc-arm-none-eabi-5_4-2016q2-20160622-linux.tar.bz2
      exportline="export PATH=$HOME/gcc-arm-none-eabi-5_4-2016q2/bin:\$PATH"
      if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi
      . ~/.profile
      popd

      这是安装最新的工具链,版本是5.4。

安装过程

  1. 下载代码

    1
    2
    3
    mkdir -p ~/src
    cd ~/src
    git clone https://github.com/PX4/Firmware.git
  2. 初始化

    1
    2
    3
    cd Firmware
    # 下载相关子模块
    git submodule update --init --recursive
  3. 编译

    1
    make px4fmu-v2_default

成功后显示:

1
2
3
4
5
[100%] Built target nuttx_px4fmu-v2_default.elf
Scanning dependencies of target px4
[100%] Generating px4fmu-v2.bin
[100%] Creating /home/cong/src/Firmware/build/px4fmu-v2_default/px4fmu-v2_default.px4
[100%] Built target px4

若报错:

1
2
3
4
-- Configuring incomplete, errors occurred!
make[1]: *** /root/src/Firmware/build/nuttx_px4fmu-v2_default: No such file or directory. Stop.
Makefile:154: recipe for target 'px4fmu-v2_default' failed
make: *** [px4fmu-v2_default] Error 2

解决办法:安装最新gcc-arm-none-eabi版本

上传Pixhawk

1
sudo make px4fmu-v2_default upload

Debug:

内存溢出:

https://dev.px4.io/en/debug/faq.html

1
2
3
4
5
6
7
8
9
10
region `flash' overflowed by 24405 bytes
collect2: error: ld returned 1 exit status
platforms/nuttx/CMakeFiles/nuttx_px4fmu-v2_default.elf.dir/build.make:187: recipe for target 'nuttx_px4fmu-v2_default.elf' failed
make[3]: *** [nuttx_px4fmu-v2_default.elf] Error 1
CMakeFiles/Makefile2:5057: recipe for target 'platforms/nuttx/CMakeFiles/nuttx_px4fmu-v2_default.elf.dir/all' failed
make[2]: *** [platforms/nuttx/CMakeFiles/nuttx_px4fmu-v2_default.elf.dir/all] Error 2
Makefile:105: recipe for target 'all' failed
make[1]: *** [all] Error 2
Makefile:153: recipe for target 'px4fmu-v2_default' failed
make: *** [px4fmu-v2_default] Error 2

解决方法:

  1. 编译器版本太低。将arm-none-eabi升级到最新版本

    参考本文上面的教程

  2. 减少不必要的模块

    /Firmware/cmake/configs/nuttx_px4fmu-v2_default.cmake

    注释:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #drivers/px4flow
    #drivers/distance_sensor/ll40ls
    #drivers/distance_sensor/mb12xx
    #drivers/distance_sensor/sf0x
    #drivers/distance_sensor/sf1xx
    #drivers/distance_sensor/srf02
    #drivers/distance_sensor/srf02_i2c
    #drivers/distance_sensor/teraranger
    #drivers/distance_sensor/tfmini

🍭支持一根棒棒糖吧!