(一)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​

相关推荐
欧云服务器5 天前
怎么让脚本命令可以同时在centos、debian、ubuntu执行?
ubuntu·centos·debian
智渊AI5 天前
Ubuntu 20.04/22.04 下通过 NVM 安装 Node.js 22(LTS 稳定版)
ubuntu·node.js·vim
The️5 天前
Linux驱动开发之Read_Write函数
linux·运维·服务器·驱动开发·ubuntu·交互
云卓SKYDROID5 天前
无人机实时信号传输技术要点解析!
科技·无人机·高科技·云卓科技
再战300年5 天前
Samba在ubuntu上安装部署
linux·运维·ubuntu
qwfys2005 天前
How to install golang 1.26.0 to Ubuntu 24.04
ubuntu·golang·install
木尧大兄弟5 天前
Ubuntu 系统安装 OpenClaw 并接入飞书记录
linux·ubuntu·飞书·openclaw
AI能见度5 天前
硬核:如何用大疆 SRT 数据实现高精度 AR 视频投射?
ar·无人机·webgl
云卓SKYDROID5 天前
无人机精准降落技术要点难点
无人机·高科技·云卓科技·物流无人机
小虾爬滑丫爬5 天前
ubuntu上设置Tomcat 开机启动
ubuntu·tomcat·开机启动