ubuntu20.04 中安装 XTdrone

1.依赖的安装

首先按照语雀文档的步骤进行安装,文档地址:语雀,

1.1 从此步开始进行,安装

bash 复制代码
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

注:此步可能会遇到失败现象,如:换源问题!!!可在图中位置进行换源操作!!!

1.2

bash 复制代码
pip3 install pandas jinja2 pyserial cerberus pyulog==0.7.0 numpy toml pyquaternion empy pyyaml

1.3

bash 复制代码
pip3 install packaging numpy empy toml pyyaml jinja2 pyargparse kconfiglib jsonschema future

到此依赖安装完毕!

注:出现下述错误

bash 复制代码
Collecting pandas
  Using cached https://files.pythonhosted.org/packages/64/f1/8fdbd74edfc31625d597717be8c155c6226fc72a7c954c52583ab81a8614/pandas-1.1.2.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-qtvsjq8t/pandas/setup.py", line 349
        f"{extension}-source file '{sourcefile}' not found.\n"
                                                             ^
    SyntaxError: invalid syntax
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-qtvsjq8t/pandas/

运行下述代码:

bash 复制代码
pip install --upgrade setuptools
#若未报错不需要输入这两行命令
python -m pip install --upgrade pip

2. ROS安装

2.1 鱼香ROS一键安装

bash 复制代码
wget http://fishros.com/install -O fishros && . fishros

根据需求选择所需对应数字编号安装即可安装(很丝滑!!!)如下述代码所示:

bash 复制代码
cq@ubuntu:~$ wget http://fishros.com/install -O fishros && . fishros
--2024-01-07 22:56:49--  http://fishros.com/install
正在解析主机 fishros.com (fishros.com)... 139.9.131.171
正在连接 fishros.com (fishros.com)|139.9.131.171|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:http://fishros.com/install/ [跟随至新的 URL]
--2024-01-07 22:56:50--  http://fishros.com/install/
再次使用存在的到 fishros.com:80 的连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 582 [application/octet-stream]
正在保存至: "fishros"
 
fishros             100%[================>]     582  --.-KB/s    用时 0s    
 
2024-01-07 22:56:50 (83.4 MB/s) - 已保存 "fishros" [582/582])
 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
python3-distro 已经是最新版 (1.4.0-1)。
python3-yaml 已经是最新版 (5.3.1-1ubuntu0.1)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 56 个软件包未被升级。
--2024-01-07 22:56:50--  http://fishros.com/install/install1s/tools/base.py
正在解析主机 fishros.com (fishros.com)... 139.9.131.171
正在连接 fishros.com (fishros.com)|139.9.131.171|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 44694 (44K) [application/octet-stream]
正在保存至: "/tmp/fishinstall/tools/base.py"
 
/tmp/fishinstall/to 100%[================>]  43.65K  --.-KB/s    用时 0.09s 
 
2024-01-07 22:56:51 (497 KB/s) - 已保存 "/tmp/fishinstall/tools/base.py" [44694/44694])
 
Run CMD Task:[dpkg --print-architecture]
[-]Result:success                           
 
Run CMD Task:[wget https://fishros.org.cn/forum/topic/1733 -O /tmp/t1733 -q && rm -rf /tmp/t1733]
[-]Result:success                           
 
基础检查通过...
===============================================================================
======欢迎使用一键安装工具,人生苦短,三省吾身,省时省力省心!=======
======一键安装已开源,请放心使用:https://github.com/fishros/install =======
===============================================================================
    
 
                        .-~~~~~~~~~-._       _.-~~~~~~~~~-.
                    __.'              ~.   .~              `.__
                .'//     开卷有益        \./     书山有路     \ `.
                .'// 可以多看看小鱼的文章   |    关注公众号鱼香ROS

2.2 运行如下代码检查ROS是否安装并正常运行

bash 复制代码
roscore

2.3 新建工作空间

bash 复制代码
sudo apt install python3-catkin-tools
mkdir -p ~/catkin_ws/src
mkdir -p ~/catkin_ws/scripts
cd catkin_ws 
catkin init  
catkin build 

3. Gazebo的安装

3.1 先卸载

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

3.2 gazebo再安装

3.2.1 安装

bash 复制代码
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
cat /etc/apt/sources.list.d/gazebo-stable.list
wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
sudo apt-get update
sudo apt-get install gazebo9
sudo apt-get install libgazebo9-dev

3.2.2 检查是否安装成功,运行以下会跳出gazebo界面

bash 复制代码
gazebo

3.2.3 安装依赖

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

3.2.4 克隆并编译Gazebo的插件gazebo_ros_pkgs,放在 ~/catkin_ws/src下

方法一(直接下载)

bash 复制代码
cd ~/catkin_ws/src
git clone https://github.com/ros-simulation/gazebo_ros_pkgs.git
cd ~/catkin_ws
catkin build

方法二(在XTDrone中复制)

bash 复制代码
git clone https://gitee.com/robin_shaun/XTDrone.git
cd XTDrone
git submodule update --init --recursive
cd ~/catkin_ws
cp -r ~/XTDrone/sitl_config/gazebo_ros_pkgs src/
catkin build

若在编译时出现以下错误:

bash 复制代码
AttributeError: module 'em' has no attribute 'RAW_OPT'

执行下面这段代码即可:

bash 复制代码
pip3 uninstall empy
pip3 install empy==3.3.4

3.3 编译成功后执行如下两条指令,判断gazebo_ros是否安装成功

首先,打开终端一,输入如下命令:

bash 复制代码
roscore 

其次,打开文件.bashrc文件(注:其为隐藏文件可使用ctrl+h命令打开)添加如下代码,添加位置如图:

bash 复制代码
source ~/catkin_ws/devel/setup.bash

最后,打开终端二,输入如下命令:

bash 复制代码
rosrun gazebo_ros gazebo

3.4 添加 models 模型

可在XTDrone进行下载,将该附件解压缩后放在/.gazebo中,此时在/.gazebo/models/如图所示位置

https://www.yuque.com/xtdrone/manual_cn/basic_config#

4. MAVROS安装

bash 复制代码
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 #(注:此步骤等待时间较长,莫慌!!!)

成功安装如下:

5. px4安装与配置

5.1 px4安装

方法一:

bash 复制代码
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

方法二:在官网下载直接编译

bash 复制代码
cd PX4_Firmware
make px4_sitl_default gazebo
#若遇到报错 build.ninja 则删除build文件夹

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

若出现下面代码中的错误:

bash 复制代码
FAILED: external/Stamp/sitl_gazebo/sitl_gazebo-build 
cd /home/syf/PX4_Firmware/build/px4_sitl_default/build_gazebo && /usr/bin/cmake --build .
ninja: build stopped: subcommand failed.
make: *** [Makefile:200:px4_sitl_default] 错误 1

可执行下面这段代码:

bash 复制代码
sudo apt install libgstreamer1.0-dev
sudo apt install gstreamer1.0-plugins-good
sudo apt install gstreamer1.0-plugins-bad
sudo apt install gstreamer1.0-plugins-ugly

在编译完成后,会弹出Gazebo界面(带有无人机的)

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

bash 复制代码
source ~/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
bash 复制代码
source ~/.bashrc

5.3 再运行下述代码

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

出现无人机则编译完成,并检查以下话题输出connected 是否为 True

bash 复制代码
rostopic echo /mavros/state

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

6. 安装地面站QGroundControl

下载链接

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

bash 复制代码
chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage

打开另外一个终端,运行上图中黄色字体

bash 复制代码
sudo usermod -a -G dialout $你的ID$
sudo apt-get remove modemmanager

7. XTDrone源码下载

7.1

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

7.2 删除原编译文件,重新编译PX4固件

bash 复制代码
cd ~/PX4_Firmware
make px4_sitl_default gazebo

可能出现如下错误:

执行下述代码:

bash 复制代码
git submodule update --init --recursive
make clean
make px4_sitl_default gazebo

7.3 用键盘控制无人机飞行

bash 复制代码
cd ~/PX4_Firmware
roslaunch px4 indoor1.launch
bash 复制代码
cd ~/XTDrone/communication/
python3 multirotor_communication.py iris 0
bash 复制代码
cd ~/XTDrone/control/keyboard
python3 multirotor_keyboard_control.py iris 1 vel

可能会报出下图所示的错误:

解决办法:用ctrl+c关闭仿真进程,有可能没有把Gazebo的相关进程关干净,这样再启动仿真时可能会报错。如果出现这种情况,可以用killall -9 gzclient,killall -9 gzserver 这两个命令强行关闭gazebo所有进程。