无人机仿真搭建:ROS,Gazebo,SITL,MAVROS,PX4

写在前面

最近一直在搭建无人机仿真的环境,系统都卸载安装了很多次才安装好,所以写下这篇博客来记录一下,万一以后还要再搭也可以有个参考,也可以给大家做个参考。这个是结合我自己系统来安装的,不同人安装可能会有不同的问题,仅供参考。
另外,我本身水平还比较低,里面的内容都是看了很多文章博客才找到的,包括一些问题的解决方法,但是由于太多我也没备注出处,也忘记具体看的哪个。这里面有些解决问题的操作我只知道可以解决我的问题,但是不知道原理是什么,也不知道会对系统造成什么影响,如果用的不是虚拟机,操作需谨慎。如果有问题欢迎指出。侵删。

一.安装ROS

1.换源

ubuntu系统默认的源是国外的,下载速度很慢,而如果下载速度一直很慢的话,会显示连接失败导致下载不了。

①首先把原来的系统源备份一下,防止出错

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

②修改源文件

sudo chmod 777 /etc/apt/sources.list 更改文件权限使其可编辑

sudo gedit /etc/apt/sources.list 打开文件进行编辑

将下面的内容复制到source.list中,我这里换的是清华的源,还可以换阿里源,中科大源等等。

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

③更新源

桌面打开终端执行sudo apt update命令更新软件列表

2.安装ros

①设置sources.list

在命令行输入

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

②设置密钥

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

③更新

sudo apt update

④安装

sudo apt install ros-melodic-desktop

这里我没有选择安装桌面完整版,主要是桌面完整版中ROS自带的gazebo有缺陷,用到后面有可能出现问题。

⑤初始化rosdep

sudo rosdep init

如果在这里显示找不到rosdep命令,就先输入

sudo apt install python-rosdep

安装rosdep

在这里插入图片描述
如果出现这个错误

打开host文件

sudo gedit /etc/hosts

在文件末尾添加

151.101.84.133 raw.githubusercontent.com

保存后退出再尝试

⑥更新rosdep

rosdep update

无人机仿真搭建:ROS,Gazebo,SITL,MAVROS,PX4_第1张图片

如果出现这个错误,建议换成手机热点再尝试一下

⑦设置环境变量

echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

⑧安装rosinstall工具

sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

安装完成后可以用运行小海龟例子来检查

3.创建工作空间

安装完ros后我们需要创建一个工作空间,之后除去PX4仿真环境启动外,ROS工程在这个工作空间中进行

①创建工作空间:

mkdir -p ~/catkin_ws/src

catkin_ws就是工作空间的名称,可以取其他名字,但是工作空间中src文件夹不能改名,是用来存储功能包和源码的

②初始化工作空间:

cd catkin_ws/src && catkin_init_workspace

初始化工作空间需要在src文件夹中

③编译:

cd .. && catkin_make

编译需要在工作空间根目录下,这里就是catkin_ws

二.安装Gazebo

①设置sources.list

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
如果出现deb http://packages.osrfoundation.org/gazebo/ubuntu-stable xenial main表示没问题

②设置密钥

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

③更新

sudo apt-get update

④安装Gazebo9

sudo apt-get install gazebo9

安装之后在终端输入gazebo,如果成功打开Gazebo说明安装成功

如果出现在这里插入图片描述

可以在~/.bashrc文件写入export SVGA_VGPU10=0,也就是输入echo "export SVGA_VGPU10=0" >> ~/.bashrc然后关掉所有的终端,重新启动。

⑤安装ros插件

Gazebo本身是独立于ROS的,因此还需要安装ROS的Gazebo插件
sudo apt install ros-melodic-gazebo-*

安装完成之后可以用下面两个命令测试,如果打开了Gazebo说明安装成功

roscore
rosrun gazebo_ros gazebo

三.安装SITL

①下载源码

git clone https://github.com/ArduPilot/ardupilot
cd ardupilot
git submodule update --init --recursive

最后一步需要一些时间,如果出现子模组未对路径注册问题,可以检查.gitmodule文件中的url格式,具体操作:

gedit .gitmodules

将.gitmodules文件中所有github.com替换为github.com.cnpmjs.org,修改完之后

再次执行git submodule sync

②安装依赖

Tools/environment_install/install-prereqs-ubuntu.sh -y
. ~/.profile

③测试

执行一个python脚本

cd ~/ardupilot/ArduCopter
sim_vehicle.py --map --console

可以看到界面说明成功了

四.安装mavors

sudo apt install ros-melodic-mavros ros-melodic-mavros-extras

wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh

在这一步有可能会遇到这个问题:

无人机仿真搭建:ROS,Gazebo,SITL,MAVROS,PX4_第2张图片

这个错误网上解决方法有很多

有说在wget命令后加--no-check-certificate 参数的,也有说把https换成http,我试了试对我来说都不行

后来我把wifi换成了手机热点,就没问题了,但是好像影响了第四步,这在下面会提到。

sudo chmod a+x ./install_geographiclib_datasets.sh

sudo ./install_geographiclib_datasets.sh

网上都说需要一些时间,但是我很快就好了

在这里插入图片描述

不知道是不是在第二步的时候出现了问题少安装了一些。

五.PX4配置

下载源码有两种方式,一种在github上下载源码,但是速度非常慢,一种在gitee上下载源码

1.下载源码

①github

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

②gitee

git clone https://gitee.com/robin_shaun/PX4_Firmware
cd PX4_Firmware
git checkout -b xtdrone/dev v1.11.0-beta1

然后需要修改一下.gitmodules文件

先备份:sudo cp .gitmodules .gitmodules.bak

打开文件替换里面的内容:sudo gedit .gitmodules

替换为:

[submodule "mavlink/include/mavlink/v2.0"]
	path = mavlink/include/mavlink/v2.0
	url = https://gitee.com/robin_shaun/c_library_v2.git
	branch = master
[submodule "src/drivers/uavcan/libuavcan"]
	path = src/drivers/uavcan/libuavcan
	url = https://gitee.com/robin_shaun/uavcan.git
	branch = px4
[submodule "Tools/jMAVSim"]
	path = Tools/jMAVSim
	url = https://gitee.com/robin_shaun/jMAVSim.git
	branch = master
[submodule "Tools/sitl_gazebo"]
	path = Tools/sitl_gazebo
	url = https://gitee.com/robin_shaun/sitl_gazebo.git
	branch = master
[submodule "src/lib/matrix"]
	path = src/lib/matrix
	url = https://gitee.com/robin_shaun/Matrix.git
	branch = master
[submodule "src/lib/ecl"]
	path = src/lib/ecl
	url = https://gitee.com/robin_shaun/ecl.git
	branch = master
[submodule "boards/atlflight/cmake_hexagon"]
	path = boards/atlflight/cmake_hexagon
	url = https://gitee.com/robin_shaun/cmake_hexagon.git
	branch = px4
[submodule "src/drivers/gps/devices"]
	path = src/drivers/gps/devices
	url = https://gitee.com/robin_shaun/GpsDrivers.git
	branch = master
[submodule "src/modules/micrortps_bridge/micro-CDR"]
	path = src/modules/micrortps_bridge/micro-CDR
	url = https://gitee.com/robin_shaun/micro-CDR.git
	branch = px4
[submodule "platforms/nuttx/NuttX/nuttx"]
	path = platforms/nuttx/NuttX/nuttx
	url = https://gitee.com/robin_shaun/NuttX.git
	branch = px4_firmware_nuttx-9.1.0+
[submodule "platforms/nuttx/NuttX/apps"]
	path = platforms/nuttx/NuttX/apps
	url = https://gitee.com/robin_shaun/NuttX-apps.git
	branch = px4_firmware_nuttx-9.1.0+
[submodule "platforms/qurt/dspal"]
	path = platforms/qurt/dspal
	url = https://gitee.com/robin_shaun/dspal.git
[submodule "Tools/flightgear_bridge"]
	path = Tools/flightgear_bridge
	url = https://gitee.com/robin_shaun/PX4-FlightGear-Bridge.git
	branch = master 
[submodule "Tools/jsbsim_bridge"]
	path = Tools/jsbsim_bridge
	url = https://gitee.com/robin_shaun/px4-jsbsim-bridge.git
[submodule "src/examples/gyro_fft/CMSIS_5"]
	path = src/examples/gyro_fft/CMSIS_5
	url = https://gitee.com/mirrors/CMSIS_5

2.安装python依赖

无论用哪种方式下载完源码,都需要安装依赖才能成功编译,我之前在这卡了很久就是没有安装依赖就编译

cd ~/PX4_Firmware
bash ./Tools/setup/ubuntu.sh --no-nuttx --no-sim-tools

3.编译

make px4_sitl_default gazebo

编译很容易遇到问题,我遇到了 c++: internal compiler error: 已杀死 (program cc1plus)错误,以下是我找的解决方案

这是由于内存不足导致的,可以在Ubuntu下增加临时swap空间
sudo dd if=/dev/zero of=/home/swap bs=64M count=16
sudo mkswap /home/swap
sudo swapon /home/swap

再继续执行编译的命令

编译成功之后应该会打开gazebo并且没有报错

4.配置环境

修改.bashrc文件

sudo gedit ~/.bashrc

在最末尾加入下面的代码,注意路径有可能不同,注意检查,前两个source不能颠倒

source ~/catkin_ws/devel/setup.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

再运行source ~/.bashrc

5.检测

cd ~/PX4_Firmware
roslaunch px4 mavros_posix_sitl.launch

此时会启动gazebo

打开另外一个终端,输入rostopic echo /mavros/state
无人机仿真搭建:ROS,Gazebo,SITL,MAVROS,PX4_第3张图片
connected:True,说明MAVROS与SITL通讯成功

你可能感兴趣的:(无人机,经验分享)