最近一直在搭建无人机仿真的环境,系统都卸载安装了很多次才安装好,所以写下这篇博客来记录一下,万一以后还要再搭也可以有个参考,也可以给大家做个参考。这个是结合我自己系统来安装的,不同人安装可能会有不同的问题,仅供参考。
另外,我本身水平还比较低,里面的内容都是看了很多文章博客才找到的,包括一些问题的解决方法,但是由于太多我也没备注出处,也忘记具体看的哪个。这里面有些解决问题的操作我只知道可以解决我的问题,但是不知道原理是什么,也不知道会对系统造成什么影响,如果用的不是虚拟机,操作需谨慎。如果有问题欢迎指出。侵删。
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命令更新软件列表
在命令行输入
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有缺陷,用到后面有可能出现问题。
sudo rosdep init
如果在这里显示找不到rosdep命令,就先输入
sudo apt install python-rosdep
安装rosdep
打开host文件
sudo gedit /etc/hosts
在文件末尾添加
151.101.84.133 raw.githubusercontent.com
保存后退出再尝试
rosdep update
如果出现这个错误,建议换成手机热点再尝试一下
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
安装完成后可以用运行小海龟例子来检查
安装完ros后我们需要创建一个工作空间,之后除去PX4仿真环境启动外,ROS工程在这个工作空间中进行
mkdir -p ~/catkin_ws/src
catkin_ws就是工作空间的名称,可以取其他名字,但是工作空间中src文件夹不能改名,是用来存储功能包和源码的
cd catkin_ws/src && catkin_init_workspace
初始化工作空间需要在src文件夹中
cd .. && catkin_make
编译需要在工作空间根目录下,这里就是catkin_ws
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
sudo apt-get install gazebo9
安装之后在终端输入gazebo
,如果成功打开Gazebo说明安装成功
如果出现
可以在~/.bashrc文件写入export SVGA_VGPU10=0
,也就是输入echo "export SVGA_VGPU10=0" >> ~/.bashrc
然后关掉所有的终端,重新启动。
Gazebo本身是独立于ROS的,因此还需要安装ROS的Gazebo插件
sudo apt install ros-melodic-gazebo-*
安装完成之后可以用下面两个命令测试,如果打开了Gazebo说明安装成功
roscore
rosrun gazebo_ros gazebo
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
可以看到界面说明成功了
sudo apt install ros-melodic-mavros ros-melodic-mavros-extras
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
在这一步有可能会遇到这个问题:
这个错误网上解决方法有很多
有说在wget命令后加--no-check-certificate
参数的,也有说把https换成http,我试了试对我来说都不行
后来我把wifi换成了手机热点,就没问题了,但是好像影响了第四步,这在下面会提到。
sudo chmod a+x ./install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh
网上都说需要一些时间,但是我很快就好了
不知道是不是在第二步的时候出现了问题少安装了一些。
下载源码有两种方式,一种在github上下载源码,但是速度非常慢,一种在gitee上下载源码
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
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
无论用哪种方式下载完源码,都需要安装依赖才能成功编译,我之前在这卡了很久就是没有安装依赖就编译
cd ~/PX4_Firmware
bash ./Tools/setup/ubuntu.sh --no-nuttx --no-sim-tools
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并且没有报错
修改.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
cd ~/PX4_Firmware
roslaunch px4 mavros_posix_sitl.launch
此时会启动gazebo
打开另外一个终端,输入rostopic echo /mavros/state
connected:True,说明MAVROS与SITL通讯成功