(一)ubuntu18+ros melodic配置无人机仿真平台XT-Drone、gazebo、PX4等的过程

我得环境装的东西比较多,经常发生冲突的有一个anaconda基础环境,还是ubuntu18的,正常这套系统在20下比较适配,所以装起来麻烦,特此记录供参考

关于mid360的仿真配置和实际运行放在(二)

依赖安装

复制代码
打开 .bashrc 文件
gedit ~/.bashrc    
注释掉下面这行代码(需要用到 anaconda 时再取消注释)
 
# export PATH="/home/用户名/anaconda3/bin:$PATH"    刷新 bash 文件

source ~/.bashrc
  • 在使用apt安装的过程中(包括之后ROS的安装),如果出现难以解决的依赖问题,可以使用aptitude install(没有aptitude的话,使用sudo apt install aptitude 安装),如sudo aptitude install ros-kinetic-desktop,它会依次推荐依赖解决方案,觉得可行就按y,不可行就按n。当然这个工具也不是万能的,如果它也解决不了依赖问题,还是需要靠自己分析解决。

  • 有时候apt报错,提示"有几个软件包无法下载,要不运行 apt-get update 或者加上 --fix-missing 的选项再试试?",这时按照提示进行操作即可。

  • 注意仔细检查依赖都装成功没有,之前有些开发者遇到的编译过程中出现'pthread_create'未定义的引用,就是因为少装了依赖。

    sudo apt install ninja-build exiftool ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python3-pip gawk

    pip2 install pandas jinja2 pyserial cerberus pyulog==0.7.0 numpy toml pyquaternion empy pyyaml
    pip3 install packaging numpy empy toml pyyaml jinja2 pyargparse kconfiglib jsonschema future

报错cerberus

Collecting pandas
Using cached https://pypi.tuna.tsinghua.edu.cn/packages/db/83/7d4008ffc2988066ff37f6a0bb6d7b60822367dcb36ba5e39aa7801fda54/pandas-0.24.2-cp27-cp27mu-manylinux1_x86_64.whl
Collecting jinja2
Using cached https://pypi.tuna.tsinghua.edu.cn/packages/7e/c2/1eece8c95ddbc9b1aeb64f5783a9e07a286de42191b7204d67b7496ddf35/Jinja2-2.11.3-py2.py3-none-any.whl
Collecting pyserial
Using cached https://pypi.tuna.tsinghua.edu.cn/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl
Collecting cerberus
Using cached https://pypi.tuna.tsinghua.edu.cn/packages/07/20/3ec65289ab0ccf5f41d38d103343f5b609263944238e299598aeba684a82/Cerberus-1.3.5.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
IOError: [Errno 2] No such file or directory: '/tmp/pip-build-Df_0GE/cerberus/setup.py'


Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-Df_0GE/cerberus/

复制代码
方案1:单独安装 Cerberus
bash

pip2 install cerberus==1.2 --no-cache-dir

如果上述命令不行,尝试:
bash

pip2 install cerberus==1.3.2 --no-cache-dir

pip2 uninstall cerberus

用了一个较为旧的版本1.3.2 要不然应该是1.3.5

复制代码
# 先安装其他包(跳过 cerberus)
pip2 install pandas jinja2 pyserial pyulog==0.7.0 numpy toml pyquaternion empy pyyaml

# 然后单独安装 cerberus
pip2 install cerberus==1.3.2 --no-cache-dir
复制代码
pip install --upgrade setuptools
#若未报错不需要输入这两行命令
python -m pip install --upgrade pip

安装gazebo

Gazebo包括Gazebo本身和ROS的插件,需要分别安装。首先卸载之前的Gazebo123

复制代码
sudo apt-get remove gazebo* 
sudo apt-get remove libgazebo*
sudo apt-get remove ros-melodic-gazebo*

鱼香ros里面,压根没有装

所以安装gazebo9

step-by-step安装方式,以下逐步进行

复制代码
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'

You can check to see if the file was written correctly.

复制代码
cat /etc/apt/sources.list.d/gazebo-stable.list

setup keys

复制代码
wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -

update the debian database

复制代码
sudo apt-get update

Next install gazebo-9 by:

复制代码
sudo apt-get install gazebo9
# For developers that work on top of Gazebo, one extra package
sudo apt-get install libgazebo9-dev

gazebo

原文链接:https://blog.csdn.net/weixin_43571647/article/details/134439630

安装xd源代码

复制代码
mkdir -p ./xtdrone_ws/src
mkdir -p ./xtdrone_ws/scripts
cd xtdrone_ws && catkin init
 # 使用catkin_make话,则为cd catkin_ws/src && catkin_init_workspace
catkin build # 使用catkin_make话,则为 cd .. && catkin_make 

git clone https://gitee.com/robin_shaun/XTDrone.git
cd XTDrone
git submodule update --init --recursive

我们对Gazebo的ROS插件做了修改,因此需要源码编译。

首先装依赖

复制代码
sudo apt-get install ros-melodic-moveit-msgs ros-melodic-object-recognition-msgs ros-melodic-octomap-msgs ros-melodic-camera-info-manager  ros-melodic-control-toolbox ros-melodic-polled-camera ros-melodic-controller-manager ros-melodic-transmission-interface ros-melodic-joint-limits-interface

然后克隆并编译Gazebo的插件gazebo_ros_pkgs,放在~/catkin_ws/src下(如果编译时还缺其他的依赖,同上方法安装)。这里注意提前把XTDrone的源码下载下来(见后续的XTDrone源码下载)。

复制代码
cd ~/catkin_ws
cp -r ~/XTDrone/sitl_config/gazebo_ros_pkgs src/
catkin build #开发者测试使用catkin_make会出问题,因此建议使用catkin build
报错AttributeError: 'module' object has no attribute 'RAW_OPT'
复制代码
AttributeError: 'module' object has no attribute 'RAW_OPT'
make[2]: *** [/home/zeratul/proj/xtdrone_ws/devel/.private/gazebo_msgs/include/gazebo_msgs/ApplyBodyWrench.h] Error 1
make[2]: *** 正在删除文件"/home/zeratul/proj/xtdrone_ws/devel/.private/gazebo_msgs/include/gazebo_msgs/ApplyBodyWrench.h"
make[2]: *** [/home/zeratul/proj/xtdrone_ws/devel/.private/gazebo_msgs/include/gazebo_msgs/GetJointProperties.h] Error 1
make[2]: *** 正在删除文件"/home/zeratul/proj/xtdrone_ws/devel/.private/gazebo_msgs/include/gazebo_msgs/GetJointProperties.h"
make[2]: *** [/home/zeratul/proj/xtdrone_ws/devel/.private/gazebo_msgs/include/gazebo_msgs/DeleteModel.h] Error 1
make[2]: *** 正在删除文件"/home/zeratul/proj/xtdrone_ws/devel/.private/gazebo_msgs/include/gazebo_msgs/DeleteModel.h"
make[2]: *** [/home/zeratul/proj/xtdrone_ws/devel/.private/gazebo_msgs/include/gazebo_msgs/SpawnModel.h] Error 1
make[2]: *** 正在删除文件"/home/zeratul/proj/xtdrone_ws/devel/.private/gazebo_msgs/include/gazebo_msgs/SpawnModel.h"
Traceback (most recent call last):
  File "/opt/ros/melodic/share/gencpp/cmake/../../../lib/gencpp/gen_cpp.py", line 50, in <module>
    sys.argv, msg_template_map, srv_template_map)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/genmsg/template_tools.py", line 213, in generate_from_command_line_options
    generate_from_file(argv[1], options.package, options.outdir, options.emdir, options.includepath, msg_template_dict, srv_template_dict)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/genmsg/template_tools.py", line 156, in generate_from_file
    _generate_srv_from_file(input_file, output_dir, template_dir, search_path, package_name, srv_template_dict, msg_template_dict)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/genmsg/template_tools.py", line 115, in _generate_srv_from_file
    search_path)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/genmsg/template_tools.py", line 77, in _generate_from_spec
    interpreter = em.Interpreter(output=ofile, globals=g, options={em.RAW_OPT:True,em.BUFFERED_OPT:True})
AttributeError: 'module' object has no attribute 'RAW_OPT'
make[2]: *** [/home/zeratul/proj/xtdrone_ws/devel/.private/gazebo_msgs/include/gazebo_msgs/GetModelProperties.h] Error 1
make[2]: *** 正在删除文件"/home/zeratul/proj/xtdrone_ws/devel/.private/gazebo_msgs/include/gazebo_msgs/GetModelProperties.h"
make[1]: *** [CMakeFiles/gazebo_msgs_generate_messages_cpp.dir/all] Error 2
make: *** [all] Error 2
cd /home/zeratul/proj/xtdrone_ws/build/gazebo_msgs; catkin build --get-env gazebo_msgs | catkin env -si  /usr/bin/make --jobserver-fds=6,7 -j; cd -
...........................................................................................................................................................................................................
Failed     << gazebo_msgs:make                  [ Exited with code 2 ]
Failed    <<< gazebo_msgs                       [ 0.2 seconds ]                
Abandoned <<< gazebo_ros                        [ Unrelated job failed ]       
Abandoned <<< gazebo_plugins                    [ Unrelated job failed ]        
Abandoned <<< gazebo_ros_control                [ Unrelated job failed ]  
[build] Summary: 1 of 5 packages succeeded. 
[build]   Ignored:   1 packages were skipped or are blacklisted.               
[build]   Warnings:  None.  
[build]   Abandoned: 3 packages were abandoned.   
[build]   Failed:    1 packages failed.  
[build] Runtime: 0.2 seconds total.    
复制代码
# 卸载当前版本
pip uninstall empy

# 安装兼容版本
pip install empy==3.3.2

# 或者
pip install "empy<4.0"
测试编译
复制代码
source ./devel/setup.bash
rosrun gazebo_ros gazebo

Gazebo有很多开源的模型文件,我们将一些需要的模型文件上传到附件中,供大家下载:

--> 请点击📎models.zip

将该附件解压缩后放在/.gazebo中,此时在/.gazebo/models/路径下可以看到很多模型。如果不做这一步,之后运行Gazebo仿真,可能会缺模型,这时会自动下载,Gazebo模型服务器在国外,自动下载会比较久。

MAVROS安装

注意,mavros-extras一定别忘记装,否则视觉定位将无法完成

复制代码
sudo apt install ros-melodic-mavros ros-melodic-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 #这步需要装一段时间

PX4配置

以下给出推荐配置,更多PX4仿真配置,见PX4仿真文档

由于国内的github下载速度较慢,我们把固件和submodule打包上传到了语雀上,直接编译即可。

注意,对于ubuntu18这下面的px4版本有错误,这段是重现踩坑流程

复制代码
git clone https://github.com/PX4/PX4-Autopilot.git
mv PX4-Autopilot PX4_Firmware
cd PX4_Firmware
git checkout -b xtdrone/dev v1.13.2
git submodule update --init --recursive
bash ./Tools/setup/ubuntu.sh


make px4_sitl_default gazebo

在make编译px4的过程中,可能会出现编译失败的情况,大概率是因为缺少某些依赖。此时查询报错信息,使用sudo apt install命令安装相应的库(后面报错说明,某些情况不应该这么装,见后)。

复制代码
zeratul@zeratul-Dell-G15-5530:~/proj/PX4_Firmware$ bash ./Tools/setup/ubuntu.sh
Ubuntu 18.04

Installing PX4 general dependencies
[sudo] zeratul 的密码: 
获取:1 file:/var/cudnn-local-repo-ubuntu1804-8.6.0.163  InRelease

pip3 install kconfiglib
pip3 install --user toml
pip3 install --user jinja2
pip3 install --user empy
pip3 install --user jsonschema
pip3 install --user packaging
pip3 install --user numpy
报错ModuleNotFoundError: No module named 'menuconfig'
复制代码
git clone https://github.com/PX4/PX4-Autopilot.git
mv PX4-Autopilot PX4_Firmware
cd PX4_Firmware
git checkout -b xtdrone/dev v1.13.2
git submodule update --init --recursive
make px4_sitl_default gazebo

zeratul@zeratul-Dell-G15-5530:~/proj/PX4_Firmware$ make px4_sitl_default gazebo
[0/852] Generating Mavlink development: src/modules/mavlink/mavlink/message_definitions/v1.0/development.xml
Traceback (most recent call last):
  File "/home/zeratul/proj/PX4_Firmware/src/modules/mavlink/mavlink/pymavlink/tools/mavgen.py", line 16, in <module>
    from pymavlink.generator import mavgen
  File "/home/zeratul/proj/PX4_Firmware/src/modules/mavlink/mavlink/pymavlink/generator/mavgen.py", line 26, in <module>
    from future import standard_library
ModuleNotFoundError: No module named 'future'
[6/852] Generating mixer_multirotor_normalized.generated.h
FAILED: src/lib/mixer/MultirotorMixer/mixer_multirotor_normalized.generated.h /home/zeratul/proj/PX4_Firmware/build/px4_sitl_default/src/lib/mixer/MultirotorMixer/mixer_multirotor_normalized.generated.h 
cd /home/zeratul/proj/PX4_Firmware/build/px4_sitl_default/src/lib/mixer/Multiroto。。。orMixer/geometries/tri_y.toml /home/zeratul/proj/PX4_Firmware/src/lib/mixer/MultirotorMixer/geometries/twin_engine.toml -o mixer_multirotor_normalized.generated.h
Failed to import numpy: No module named 'numpy'

You may need to install it using:
    pip3 install --user numpy

这里的核心问题,在于ubuntu18不支持px4的1.13用python混合编译

所以换一个px4版本编译

重新安装对应的老版本1.11
复制代码
git clone https://github.com/PX4/PX4-Autopilot.git
mv PX4-Autopilot PX4_Firmware
cd PX4_Firmware
git checkout -b xtdrone/dev v1.11.0-beta1
git submodule update --init --recursive
make px4_sitl_default gazebo

上面网速慢,直接编译 PX4_Firmware.zip(875.6 MB)

https://lark-assets-prod-aliyun.oss-cn-hangzhou.aliyuncs.com/yuque/0/2022/zip/985678/1656257762541-218a9c8a-0339-4069-9057-77b6dd861679.zip?OSSAccessKeyId=LTAI4GKnqTWmz2X8mzA1Sjbv&Expires=1763428390&Signature=CRHQFDAbOER7gnQzK%2FP4hiRYDyY%3D&response-content-disposition=attachment%3Bfilename*%3DUTF-8%27%27PX4_Firmware.zip

复制代码
cd PX4_Firmware
make px4_sitl_default gazebo
产生报错recipe for target 'px4_sitl_default' failed
复制代码
zeratul@zeratul-Dell-G15-5530:~/proj/PX4_Firmware$ make px4_sitl_default gazebo
-- PX4 version: v1.11.0-beta1
-- PX4 config file: /home/zeratul/proj/PX4_Firmware/boards/px4/sitl/default.cmake
-- PX4 config: px4_sitl_default
-- PX4 platform: posix
-- PX4 lockstep: enabled
。。。


-- Configuring incomplete, errors occurred!
See also "/home/zeratul/proj/PX4_Firmware/build/px4_sitl_default/build_gazebo/CMakeFiles/CMakeOutput.log".
See also "/home/zeratul/proj/PX4_Firmware/build/px4_sitl_default/build_gazebo/CMakeFiles/CMakeError.log".
[302/740] Building CXX object platforms/posix/src/px4/common/px4_daemon/CMakeFiles/px4_daemon.dir/server_io.cpp.o
FAILED: external/Stamp/sitl_gazebo/sitl_gazebo-configure /home/zeratul/proj/PX4_Firmware/build/px4_sitl_default/external/Stamp/sitl_gazebo/sitl_gazebo-configure 
cd /home/zeratul/proj/PX4_Firmware/build/px4_sitl_default/build_gazebo && /opt/cmake-3.21.4/bin/cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DSEND_VISION_ESTIMATION_DATA=ON -GNinja /home/zeratul/proj/PX4_Firmware/Tools/sitl_gazebo && /opt/cmake-3.21.4/bin/cmake -E touch /home/zeratul/proj/PX4_Firmware/build/px4_sitl_default/external/Stamp/sitl_gazebo/sitl_gazebo-configure
[324/740] Building CXX object src/lib/ecl/EKF/CMakeFiles/ecl_EKF.dir/covariance.cpp.o
ninja: build stopped: subcommand failed.
Makefile:198: recipe for target 'px4_sitl_default' failed
make: *** [px4_sitl_default] Error 1
复制代码
make clean
rm -rf build/px4_sitl_default
make px4_sitl_default

根本原因在于我系统有两个版本cmake,应该用3.10而我是用的3.21

cmake版本的指定

不删除,临时切换 CMake(推荐)

在当前终端执行:

复制代码
export PATH=/usr/bin:$PATH

确认:

复制代码
which cmake
cmake --version

如果显示 3.10,则重新编译:

复制代码
make clean
rm -rf build/px4_sitl_default
make px4_sitl_default gazebo

echo $PATH
which cmake
cmake --version

zeratul@zeratul-Dell-G15-5530:~$ echo $PATH
/usr/local/cuda-11.6/bin:/opt/ros/melodic/bin:/home/zeratul/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/cmake-3.21.4/bin0:/home/zeratul/TensorRT-8.5.3.1/bin
zeratul@zeratul-Dell-G15-5530:~$ which cmake
/usr/bin/cmake
zeratul@zeratul-Dell-G15-5530:~$ cmake --version
cmake version 3.21.4

CMake suite maintained and supported by Kitware (kitware.com/cmake).

① 检查 alias
alias cmake

② 检查函数覆盖
type cmake

③ 查找系统中是否有多个 cmake
which -a cmake

④ 全局搜索 cmake 可执行文件
sudo updatedb
locate bin/cmake

alias cmake
type cmake
which -a cmake
sudo updatedb
locate bin/cmake

zeratul@zeratul-Dell-G15-5530:~$ alias cmake
bash: alias: cmake: 未找到
zeratul@zeratul-Dell-G15-5530:~$ type cmake
cmake 已被录入哈希表 (/usr/bin/cmake)
zeratul@zeratul-Dell-G15-5530:~$ which -a cmake
/usr/bin/cmake

你只需要强制使用 3.10 的 cmake(系统自带):
/usr/bin/cmake --version
如果输出仍然是 3.21,那么说明 /usr/bin/cmake 本身已被替换。
🤯 很可能你把系统的 cmake 覆盖成 3.21 了!
让我们验证:

验证 /usr/bin/cmake 真实文件:
ls -l /usr/bin/cmake
file /usr/bin/cmake


如果它不是 3.10,则说明被覆盖了。
/usr/bin/cmake --version
ls -l /usr/bin/cmake
file /usr/bin/cmake

方法 A:重新安装系统 cmake(推荐)

sudo apt install --reinstall cmake

完成后验证:

cmake --version

应该变成:

cmake version 3.10.2

复制代码
尝试干净编译一次:

make clean
rm -rf build/px4_sitl_default
make px4_sitl_default


再执行:

make px4_sitl_default gazebo
其他可行(没使用)临时切换cmake版本
复制代码
方法二:手动创建符号链接(快速但不够灵活)

这个方法会直接覆盖 /usr/bin/cmake,使其指向新版本。

    备份原来的cmake(可选但建议):
    bash

sudo mv /usr/bin/cmake /usr/bin/cmake.old

创建新的符号链接:
bash

sudo ln -sf /opt/cmake-3.21.4/bin/cmake /usr/bin/cmake

    -sf 参数表示强制创建符号链接,如果已有同名链接则覆盖。

验证切换结果:
bash

cmake --version

    确认输出为 3.21.4。

这个方法虽然简单,但如果你想换回原来的版本,需要手动处理。
方法三:设置环境变量(临时或用户级切换)

如果只是希望在当前终端或当前用户下使用新版本,可以修改 PATH 环境变量。

    临时修改(仅当前终端有效):
    在当前终端中执行:
    bash

export PATH=/opt/cmake-3.21.4/bin:$PATH

然后验证:
bash

cmake --version

    永久修改(针对当前用户):
    将上面的 export 命令添加到你的 shell 配置文件中(例如 ~/.bashrc 或 ~/.zshrc),然后执行 source ~/.bashrc(或对应的配置文件)使其生效。

这种方法最安全,因为它只影响你当前的环境
。

编译完成,效果

设置环境变量

修改 ~/.bashrc,加入以下代码,注意路径匹配,前两个source顺序不能颠倒。

复制代码
sudo gedit ~/.bashrc


source /home/zeratul/proj/xtdrone_ws/devel/setup.bash
source /home/zeratul/proj/PX4_Firmware/Tools/setup_gazebo.bash ~/PX4_Firmware/ ~/PX4_Firmware/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware/Tools/sitl_gazebo

再运行:

复制代码
source ~/.bashrc

zeratul@zeratul-Dell-G15-5530:~$ source ~/.bashrc
GAZEBO_PLUGIN_PATH :/home/zeratul/proj/PX4_Firmware/build/px4_sitl_default/build_gazebo
GAZEBO_MODEL_PATH :/home/zeratul/proj/PX4_Firmware//Tools/sitl_gazebo/models
LD_LIBRARY_PATH /home/zeratul/proj/xtdrone_ws/devel/lib:/opt/ros/melodic/lib:/usr/local/cuda-11.6/lib64:/usr/local/cuda-11.6/lib64:/usr/local/cuda-11.6/lib64:/home/zeratul/TensorRT-8.5.3.1/lib:/home/zeratul/TensorRT-8.5.3.1/lib:/home/zeratul/TensorRT-8.5.3.1/lib:/home/zeratul/proj/PX4_Firmware/build/px4_sitl_default/build_gazebo

然后运行如下命令,此时会启动Gazebo,如下图所示。

复制代码
cd ~/PX4_Firmware
roslaunch px4 mavros_posix_sitl.launch

并运行

复制代码
rostopic echo /mavros/state

若connected: True,则说明MAVROS与SITL通信成功。如果是false,一般是因为.bashrc里的路径写的不对,请仔细检查。

xd源码处理和px4-gazebo修改编译

在/home/zeratul/proj/XTDrone目录下执行:

复制代码
cp ./sensing/gimbal/gazebo_gimbal_controller_plugin.cpp /home/zeratul/proj/PX4_Firmware/Tools/sitl_gazebo/src/
cp ./sitl_config/init.d-posix/rcS /home/zeratul/proj/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/
cp ./sitl_config/worlds/* /home/zeratul/proj/PX4_Firmware/Tools/sitl_gazebo/worlds/
cp -r ./sitl_config/models/* /home/zeratul/proj/PX4_Firmware/Tools/sitl_gazebo/models/ 
cp -r ./sitl_config/launch/* /home/zeratul/proj/PX4_Firmware/launch/
cd ~/.gazebo/models/
rm -r ./stereo_camera/ ./3d_lidar/ ./3d_gpu_lidar/ ./hokuyo_lidar/

因为Gazebo寻找模型的顺序,是先在.gazebo/models/下寻找,然后在其他路径寻找,所以在往PX4 SITL复制models时,要注意.gazebo/models/下有没有同名文件(比如.gazebo/models/下默认有stereo_camera),有的话要么将该同名文件删去,要么替换该同名文件。

由于修改了PX4 sitl_gazebo中的gazebo_gimbal_controller_plugin.cpp(源代码不能控制多无人机的云台),要再编译一次。

复制代码
cd ~/PX4_Firmware
make px4_sitl_default gazebo
复制代码
px4 starting.

INFO  [px4] Calling startup script: /bin/sh etc/init.d-posix/rcS 0
INFO  [param] selected parameter default file eeprom/parameters_10016
[param] Loaded: eeprom/parameters_10016
ERROR [param] Parameter COM_CPU_MAX not found.
INFO  [dataman] Unknown restart, data manager file './dataman' size is 11798680 bytes
INFO  [simulator] Waiting for simulator to accept connection on TCP port 4560
INFO  [simulator] Simulator connected on TCP port 4560.
INFO  [commander] LED: open /dev/led0 failed (22)
INFO  [init] Mixer: etc/mixers/quad_w.main.mix on /dev/pwm_output0
Gazebo multi-robot simulator, version 9.19.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org

[Msg] Waiting for master.
INFO  [mavlink] mode: Normal, data rate: 4000000 B/s on udp port 18570 remote port 14550
[Msg] Connected to gazebo master @ http://127.0.0.1:11345
[Msg] Publicized address: 10.168.1.109
INFO  [mavlink] mode: Onboard, data rate: 4000000 B/s on udp port 34580 remote port 24540
INFO  [mavlink] mode: Onboard, data rate: 4000 B/s on udp port 14280 remote port 14030
INFO  [logger] logger started (mode=all)
INFO  [logger] Start file log (type: full)
INFO  [logger] Opened full log file: ./log/2025-11-18/02_22_03.ulg
INFO  [mavlink] MAVLink only on localhost (set param MAV_BROADCAST = 1 to enable network)
INFO  [px4] Startup script returned successfully
pxh> [Err] [InsertModelWidget.cc:426] Missing model.config for model "/home/zeratul/proj/PX4_Firmware//Tools/sitl_gazebo/models/livox_mid40"
[Err] [InsertModelWidget.cc:426] Missing model.config for model "/home/zeratul/proj/PX4_Firmware/Tools/sitl_gazebo/models/livox_mid40"
[Wrn] [Event.cc:61] Warning: Deleting a connection right after creation. Make sure to save the ConnectionPtr from a Connect call
INFO  [ecl/EKF] 516000: GPS checks passed (WGS-84 origin set)
INFO  [ecl/EKF] 1768000: EKF aligned, (baro height, IMU buf: 22, OBS buf: 14)
INFO  [ecl/EKF] 1768000: reset position to last known position
INFO  [ecl/EKF] 1768000: reset velocity to zero
INFO  [ecl/EKF] 5064000: reset position to GPS
INFO  [ecl/EKF] 5064000: reset velocity to GPS
INFO  [ecl/EKF] 5064000: commencing GPS fusion

安装地面站QGroundControl

https://docs.qgroundcontrol.com/master/en/qgc-user-guide/getting_started/download_and_install.html

下面这些是安装链接

https://blog.csdn.net/m0_65127978/article/details/144583825

https://github.com/mavlink/qgroundcontrol/tags?after=v4.4.0rc2

https://github.com/mavlink/qgroundcontrol/releases/tag/v4.2.6

复制代码
sudo usermod -aG dialout "$(id -un)"

首次安装 QGroundControl 之前

复制代码
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-cursor-dev -y

随后下载前言中的v4.2.6版本的QGroundControl.AppImage

复制代码
chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage  (or double click)

用键盘控制无人机飞行

在一个终端运行

复制代码
cd ~/PX4_Firmware
roslaunch px4 indoor1.launch
  • 注意,用ctrl+c关闭仿真进程,有可能没有把Gazebo的相关进程关干净,这样再启动仿真时可能会报错。如果出现这种情况,可以用

    killall -9 gzclient
    killall -9 gzserver

  • 这两个命令强行关闭gazebo所有进程。

Gazebo启动后,在另一个终端运行(注意要等Gazebo完全启动完成,或者可能脚本会报错)

复制代码
cd ~/XTDrone/communication/
python multirotor_communication.py iris 0

与0号iris建立通信后,在另一个终端运行

复制代码
cd ~/XTDrone/control/keyboard
python multirotor_keyboard_control.py iris 1 vel

便可以通过键盘控制1架iris的解锁/上锁(arm/disarm),修改飞行模式,飞机速度等。

使用v起飞利用的是takeoff飞行模式,相关参数(起飞速度、高度)要在rcS中设置。

一般可以使用offboard模式起飞,这时起飞速度要大于0.3m/s才能起飞(即:upward velocity 需要大于0.3)。

注意,飞机要先解锁才能起飞!飞到一定高度后可以切换为'hover'模式悬停,再运行自己的飞行脚本,或利用键盘控制飞机。

推荐起飞流程,按i把向上速度加到0.3以上,再按b切offboard模式,最后按t解锁。

参考资料:

https://www.yuque.com/xtdrone/manual_cn/basic_config_13​

相关推荐
大二就转专业3 小时前
Gnome/Ubuntu 桌面 VS Code 向上/下复制不起作用
linux·vscode·ubuntu
从零开始学习人工智能3 小时前
从反复报错到稳定运行:麒麟与Ubuntu时间同步服务部署全解析
服务器·数据库·ubuntu
CheungChunChiu11 小时前
Linux 内核设备模型与驱动框架解析 ——以 rk-pcie 为例
linux·运维·ubuntu
jingshaoqi_ccc17 小时前
ubuntu 24下面安装docker
ubuntu·docker·eureka
TracyCoder12317 小时前
在Ubuntu上搭建大模型最基础的应用环境
linux·运维·ubuntu
还是大剑师兰特18 小时前
cesium处理无人机碰撞检测方案
无人机·大剑师·cesium教程
天途小编18 小时前
无人机专业学什么
无人机
diegoXie20 小时前
WSL2 跨系统文件移动
linux·ubuntu
阿梦Anmory21 小时前
Windows使用wsl教程
ubuntu·wsl