所使用的为:ubuntu20.04、ros noetic、gazebo11。
(以下教程默认已经安装 ros noetic)
在安装之前,请先更新软件库:
sudo apt-get update
sudo apt-get upgrade
如果更新过程报校验数字签名出错,如下图所示:
则有可能是ros的密钥问题,我们更新ROS apt 仓库使用的公共密钥:
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
然后安装mavros:
sudo apt install ros-noetic-mavros ros-noetic-mavros-extras
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
sudo chmod a+x ./install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh #这步需要装一段时间,请耐心等待PX4配置
最后一步请耐心等待,我大概等待了20分钟左右。
对于PX4的配置,直接用git clone
的方法即可。
git clone https://github.com/PX4/Firmware.git --recursive
然后执行Firmware文件夹里的这个.sh文件:
bash ./Tools/setup/ubuntu.sh
执行完成后,cd到Firmware文件夹:
cd Firemare
make px4_sitl_default gazebo
编译完成后,会弹出Gazebo界面,将其关闭即可。
随后,打开bashrc文件:
gedit ~/.bashrc
将以下路径添加到文件中:
source ~/catkin_ws/devel/setup.bash
source ~/Firmware/Tools/setup_gazebo.bash ~/Firmware/ ~/Firmware/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/Firmware/Tools/sitl_gazebo
注意与自己路径的匹配,适当修改上述命令。前两个source顺序不能颠倒。
添加完成后,记得source:
source ~/.bashrc
然后运行如下命令,此时会启动Gazebo,界面与上图一样。
cd ~/Firmware
roslaunch px4 mavros_posix_sitl.launch
再打开一个终端,运行:
rostopic echo /mavros/state
若connected: True,则说明MAVROS与SITL通信成功。如果是false,一般是因为.bashrc里的路径写的不对,请仔细检查。如果一直false,则重新在配置PX4一遍试试。
这个参考官网资料连接。其实非常简单:
首先在终端:
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
然后下载QGroundControl.AppImage.
下载完成后,进入到QGroundControl.AppImage相应的目录,修改QGroundControl.AppImage权限:
chmod +x ./QGroundControl.AppImage
然后双击QGroundControl.AppImage或者在终端切换到QGroundControl.AppImage目录后,输入以下命令即可打开地面站:
./QGroundControl.AppImage
git clone https://gitee.com/robin_shaun/XTDrone.git
cd XTDrone
git submodule update --init --recursive
cp sitl_config/worlds/* ~/PX4_Firmware/Tools/sitl_gazebo/worlds/
cp sitl_config/launch/* ~/PX4_Firmware/launch/
#如果之前没有catkin_ws,需要建立一下,之后的教程会用到
mkdir -p ~/catkin_ws/src
mkdir -p ~/catkin_ws/scripts
由于修改了PX4 sitl_gazebo中的gazebo_gimbal_controller_plugin.cpp(源代码不能控制多无人机的云台),要再编译一次。
cd ~/Firmware
make px4_sitl_default gazebo
在一个终端运行:
cd ~/Firmware
roslaunch px4 indoor1.launch
正常的话gazebo会出现如下界面:
在另一个终端运行:
cd ~/XTDrone/communication/
python multirotor_communication.py iris 0
如果运行后报错:
import rospy
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/__init__.py", line 49, in <module>
from .client import spin, myargv, init_node, \
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/client.py", line 60, in <module>
import rospy.impl.init
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/init.py", line 54, in <module>
from .tcpros import init_tcpros
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/tcpros.py", line 45, in <module>
import rospy.impl.tcpros_service
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/tcpros_service.py", line 54, in <module>
from rospy.impl.tcpros_base import TCPROSTransport, TCPROSTransportProtocol, \
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/tcpros_base.py", line 160
(e_errno, msg, *_) = e.args
^
SyntaxError: invalid syntax
则将**/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/tcpros_base.py
** 的(e_errno, msg, *_) = e.args
改为(e_errno, msg) = e.args
如果还报:
No module named pyquaternion
使用apt安装即可:
sudo pip2 install pyquaternion
与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
解锁。
至此,仿真平台基础配置完成。
=====================================================
=分割线===
使用XTDrone后,发现MAVROS与SITL通信一直为false,无法控制无人机飞行,一方面猜测原因是安装的px4是最新版本的,而XTDrone要求的px4是1.11版本的。考虑到暂时可能用不到XTDrone,因此仿真测试可以使用下面这种方法:
px4 运行mavros仿真
另一方面,可能是launch文件中的fcu_url
路径有问题,可参考我另一篇关于XTDrone配置的博客,最后一部分提到了这个问题的解决方法。