Linux系統ubuntu20.04 無人機PX4 開發環境搭建
安裝Ubuntu對應版本的Ros
此處省略
PX4固件下載
PX4的源碼處于GitHub,因為眾所周知的原因git clone經常失敗,此處從Gitee獲取PX4源碼和依賴模塊。
git clone https://gitee.com/voima/PX4-Autopilot.git
使用cd命令切換到 px4項目文件目錄:
cd ~/PX4-Autopilot
#切換到1.14.0分支,當然也可以嘗試其他版本
# 使用以下命令切換版本,以V1.14.0為例:
git checkout v1.14.0
因為PX4的完整項目是嵌套子模塊存儲的,以上命令只下載了px4的基本代碼,所以我們要進行子模塊的下載,運行下列命令:
# 此部分不執行,解釋作用:
#在~/PX4-Autopilot目錄下執行
#git submodule update --init --recursive
#以上命令中,submodule是子模塊的意思, —init 選項會初始化,并注冊子模塊的地址,—recursive選項會遞歸克隆子模塊。
#此更新的鏈接來源于:~/PX4-Autopilot/.gitmodules(注意是隱藏文件)
# 執行此部分:
#需要先進入~/PX4-Autopilot/.gitmodules文件
vi ~/PX4-Autopilot/.gitmodules
#將文件打開,可以看到里面都github的地址,直接用上面的命令,會很難成功
#所以:將其更新為 gitee 的地址,已經整理測試好了,直接替換掉文件的內容即可
[submodule "src/modules/mavlink/mavlink"]
path = src/modules/mavlink/mavlink
url = https://gitee.com/wtp95/mavlink.git
branch = master
[submodule "Tools/flightgear_bridge"]
path = Tools/simulation/flightgear/flightgear_bridge
url = https://gitee.com/seokhb/PX4-FlightGear-Bridge.git
[submodule "Tools/simulation/gazebo-classic/sitl_gazebo-classic"]
path = Tools/simulation/gazebo-classic/sitl_gazebo-classic
url = https://gitee.com/seokhb/PX4-SITL_gazebo-classic.git
branch = main
[submodule "Tools/simulation/jmavsim/jMAVSim"]
path = Tools/simulation/jmavsim/jMAVSim
url = https://gitee.com/seokhb/jMAVSim.git
branch = main
[submodule "Tools/simulation/jsbsim/jsbsim_bridge"]
path = Tools/simulation/jsbsim/jsbsim_bridge
url = https://gitee.com/seokhb/px4-jsbsim-bridge.git
[submodule "platforms/nuttx/NuttX/apps"]
path = platforms/nuttx/NuttX/apps
url = https://gitee.com/seokhb/NuttX-apps.git
branch = px4_firmware_nuttx-10.3.0+
[submodule "platforms/nuttx/NuttX/nuttx"]
path = platforms/nuttx/NuttX/nuttx
url = https://gitee.com/seokhb/NuttX.git
branch = px4_firmware_nuttx-10.3.0+-v1.14
[submodule "src/drivers/cyphal/public_regulated_data_types"]
path = src/drivers/cyphal/public_regulated_data_types
url = https://gitee.com/seokhb/public_regulated_data_types.git
[submodule "src/drivers/cyphal/legacy_data_types"]
path = src/drivers/cyphal/legacy_data_types
url = https://gitee.com/jiyuanwangxs/legacy_data_types.git
branch = legacy
[submodule "src/drivers/cyphal/libcanard"]
path = src/drivers/cyphal/libcanard
url = https://gitee.com/seokhb/libcanard.git
[submodule "src/drivers/gps/devices"]
path = src/drivers/gps/devices
url = https://gitee.com/seokhb/PX4-GPSDrivers.git
branch = main
[submodule "src/drivers/uavcan/libuavcan"]
path = src/drivers/uavcan/libuavcan
url = https://gitee.com/seokhb/libuavcan.git
[submodule "src/lib/crypto/libtomcrypt"]
path = src/lib/crypto/libtomcrypt
url = https://gitee.com/seokhb/libtomcrypt.git
branch = px4
[submodule "src/lib/crypto/libtommath"]
path = src/lib/crypto/libtommath
url = https://gitee.com/seokhb/libtommath.git
branch = px4
[submodule "src/lib/crypto/monocypher"]
path = src/lib/crypto/monocypher
url = https://gitee.com/seokhb/Monocypher.git
branch = px4
[submodule "src/lib/events/libevents"]
path = src/lib/events/libevents
url = https://gitee.com/seokhb/libevents.git
branch = main
[submodule "src/modules/uxrce_dds_client/Micro-XRCE-DDS-Client"]
path = src/modules/uxrce_dds_client/Micro-XRCE-DDS-Client
url = https://gitee.com/seokhb/Micro-XRCE-DDS-Client.git
branch = px4
# 然后執行下面的命令,就可以了
git submodule update --init --recursive
有的子模塊還是走的github,失敗了就多執行幾次,直到用上面命令不再下載東西了就可以了

開發環境搭建
PX4的完整代碼已經下載完了,接下來就是配置開發環境。PX4源碼中已經提供了開發環境配置的腳本,在/PX4-Autopilot/Tools/setup目錄中,該目錄下的文件如下:
# 在執行腳本之前,需要手動安裝一些模塊,配置環境變量
sudo apt install python3-pip
pip3 install kconfiglib
pip3 install --user jinja2
pip3 install --user jsonschema
sudo apt-get update
sudo apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
# 然后需配置~/.bashrc文件,打開該文件,在底部添加如下內容,保存:
vi ~/.bashrc
寫入:
# >>> PX4 initialize >>>
source ~/PX4-Autopilot/Tools/simulation/gazebo-classic/setup_gazebo.bash ~/PX4-Autopilot ~/PX4-Autopilot/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic
# <<< PX4 initialize <<<
然后執行腳本:
cd /PX4-Autopilot/Tools/setup
# 可以看到里面有Arch/Macos和ubuntu系統的配置腳本。
# 因為是ubuntu系統,所以運行ubuntu.sh文件
# 這是一個腳本文件,里面是一些bash命令,可以理解為一系列下載px4開發環境的代碼。在上圖界面右鍵選擇在終端打開,使用下列命令運行:
bash ubuntu.sh
# 然后進行編譯:
cd ~/PX4-Autopilot # 也可以 roscd px4
make px4_sitl_default gazebo
** 如果出現下面的錯誤,一直在等待master **
> [Msg] Waiting for master.
[Err] [ConnectionManager.cc:121] Failed to connect to master in 30 seconds.
[Err] [gazebo_shared.cc:78] Unable to initialize transport.
[Err] [gazebo_client.cc:56] Unable to setup Gazebo
則需要在.bashrc文件的最后一行加入
source /opt/ros/noetic/setup.bash
** 如果執行make px4_sitl_default gazebo顯示: **
ninja: error: unknown target 'gazebo'
make: *** [Makefile:227:px4_sitl] 錯誤 1
# 則需要先安裝gazebo:
sudo apt install gazebo libgazebo-dev
# 然后手動檢查仿真目標配置文件:
打開 PX4-Autopilot/boards/px4/sitl 目錄。
檢查是否存在 default.cmake 或 gazebo.cmake 文件。
# 如果文件缺失或配置錯誤,可以從官方倉庫重新下載:
git checkout origin/main -- boards/px4/sitl
然后再啟動
終端出現如下,gazebo啟動,中間有個小飛機,則代表開發環境搭建成功


MAVROS安裝
安裝geographiclib數據庫(GeographicLib是一個用于解決地理坐標轉換、大地測量(geodesy)和地圖投影等問題的庫,廣泛用于航空航天和GIS(地理信息系統)領域)
安裝MAVROS
sudo apt install ros-noetic-mavros ros-noetic-mavros-extras
wget https://gitee.com/robin_shaun/XTDrone/raw/master/sitl_config/mavros/install_geographiclib_datasets.sh
sudo chmod a+x ./install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh
# 檢查MAVROS是否安裝成功可輸入如下命令:
roslaunch px4 mavros_posix_sitl.launch
# 新打開一個終端,輸入:
rostopic echo mavros/state
看到connected為True 則 MAVROS安裝成功

安裝地面站QGC
首先執行下面指令
sudo usermod -a -G dialout $USER
sudo apt-get remove modemmanager -y
# 安裝一些依賴庫
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
sudo apt install libfuse2 -y
sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor0 -y
然后系統登出再登入,確定改變了用戶權限
下面開始安裝QGC:
下載QGroundControl.AppImage
下載鏈接(https://d176tv9ibo4jno.cloudfront.net/latest/QGroundControl.AppImage)
將該文件移動到主目錄下面
通過指令更改權限,和運行
chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage
然后會運行QGC的軟件

之后雙擊 QGroundControl.AppImage 圖標也可以運行該軟件

浙公網安備 33010602011771號