使用设备:暗影精灵6
- 显卡:NVIDIA GEFORCE RTX 1650Ti
- CPU:12th Gen Intel® Core™ i7-10750H
- 网卡:Intel® WiFi 6 AX201 160MHz
- 系统:ubuntu20.04
- ros版本:noetic
主要参考资料
1. 依赖安装
创建工作空间目录firstzhihang_ws/src
,在工作空间目录打开终端输入
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
再输入
pip3 install pandas jinja2 pyserial cerberus pyulog==0.7.0 numpy toml pyquaternion empy pyyaml
pip3 install packaging numpy empy toml pyyaml jinja2 pyargparse
2. ROS安装(GAZEBO要单独安装)
直接鱼香ROS一键安装,在工作空间目录下输入
wget http://fishros.com/install -O fishros && . fishros
安装对应版本ROS即可
3. GAZEBO安装
Gazebo包括Gazebo本身和ROS的插件,需要分别安装。首先卸载之前的Gazebo
sudo apt-get remove gazebo*
sudo apt-get remove libgazebo*
sudo apt-get remove ros-noetic-gazebo* #kinetic melodic对应修改
依次输入
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /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 gazebo11
sudo apt-get install libgazebo11-dev
我们对Gazebo的ROS插件做了修改,因此需要源码编译。
先安装依赖
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
然后克隆并编译Gazebo的插件gazebo_ros_pkgs,放在~/catkin_ws/src下(如果编译时还缺其他的依赖,同上方法安装)
cd ~/catkin_ws/src
git clone https://github.com/ros-simulation/gazebo_ros_pkgs.git
cd ~/catkin_ws
catkin build
编译成功后打开两个终端分别执行如下两条指令,判断gazebo_ros是否安装成功
roscore
source ~/firstzhihang_ws/devel/setup.bash
rosrun gazebo_ros gazebo
4. MAVROS安装
sudo apt install ros-noetic-mavros ros-noetic-mavros-extras #for ros-noetic
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 1.13版本安装
在工作空间目录下打开终端输入
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
再输入
cd PX4_Firmware
make px4_sitl_default gazebo
修改 ~/.bashrc,加入以下代码,注意路径匹配,前两个source顺序不能颠倒,在工作空间目录下打开终端输入
gedit ~/.bashrc
打开之后将下面的复制进去
source ~/firstzhihang_ws/devel/setup.bash
source ~/firstzhihang_ws/src/PX4_Firmware/Tools/setup_gazebo.bash ~/firstzhihang_ws/src/PX4_Firmware/ ~/firstzhihang_ws/src/PX4_Firmware/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/firstzhihang_ws/src/PX4_Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/firstzhihang_ws/src/PX4_Firmware/Tools/sitl_gazebo
再运行
source ~/.bashrc
然后运行如下命令,此时会启动Gazebo
cd ~/PX4_Firmware
roslaunch px4 mavros_posix_sitl.launch
重新打开一个终端,运行
rostopic echo /mavros/state
若connected: True,则说明MAVROS与SITL通信成功。如果是false,一般是因为.bashrc里的路径写的不对,请仔细检查。
6. 安装地面站QGroundControl
下载QGroundControl.AppImage到工作空间
在工作空间目录下打开终端输入
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 libqt5gui5 -y
sudo apt install libfuse2 -y
关闭终端,重新在工作空间目录下打开一个终端,输入
chmod +x ./QGroundControl.AppImage
双击打开这个文件即可
也可以参考官方文档QGroundControl
7. XTDrone源码下载
git clone https://gitee.com/robin_shaun/XTDrone.git
cd XTDrone
git checkout 1_13_2
git submodule update --init --recursive
# 修改启动脚本文件
cp sitl_config/init.d-posix/* ~/firstzhihang_ws/src/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/
# 添加launch文件
cp -r sitl_config/launch/* ~/firstzhihang_ws/src/PX4_Firmware/launch/
# 添加世界文件
cp sitl_config/worlds/* ~/firstzhihang_ws/src/PX4_Firmware/Tools/sitl_gazebo/worlds/
# 修改部分插件
cp sitl_config/gazebo_plugin/gimbal_controller/gazebo_gimbal_controller_plugin.cpp ~/firstzhihang_ws/src/PX4_Firmware/Tools/sitl_gazebo/src
cp sitl_config/gazebo_plugin/gimbal_controller/gazebo_gimbal_controller_plugin.hh ~/firstzhihang_ws/src/PX4_Firmware/Tools/sitl_gazebo/include
cp sitl_config/gazebo_plugin/wind_plugin/gazebo_ros_wind_plugin_xtdrone.cpp ~/firstzhihang_ws/src/PX4_Firmware/Tools/sitl_gazebo/src
cp sitl_config/gazebo_plugin/wind_plugin/gazebo_ros_wind_plugin_xtdrone.h ~/firstzhihang_ws/src/PX4_Firmware/Tools/sitl_gazebo/include
# 修改CMakeLists.txt
cp sitl_config/CMakeLists.txt ~/firstzhihang_ws/src/PX4_Firmware/Tools/sitl_gazebo
# 修改部分模型文件
cp -r sitl_config/models/* ~/firstzhihang_ws/src/PX4_Firmware/Tools/sitl_gazebo/models/
# 替换同名文件
cd ~/.gazebo/models/
rm -r stereo_camera/ 3d_lidar/ 3d_gpu_lidar/ hokuyo_lidar/
但是在最后一步
# 替换同名文件
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),有的话要么将该同名文件删去,要么替换该同名文件。如果在仿真过程中出现了某个部件为白色方块的情况,大概率是因为~/.gazebo/models/
下有和PX4_Firmware/Tools/sitl_gazebo/models
重复的模型,此时删掉~/.gazebo/models/
下的模型文件即可
删除原编译文件,重新编译PX4固件
cd ~/firstzhihang_ws/src/PX4_Firmware
rm -r build/
make px4_sitl_default gazebo
编译出现错误,报错提示要
Remove `typhoon_h480.sdf
解决办法,那我就移除这个文件咯,输入
rm ~/firstzhihang_ws/src/PX4_Firmware/Tools/sitl_gazebo/models/typhoon_h480/typhoon_h480.sdf
再次编译成功
cd ~/firstzhihang_ws/src/PX4_Firmware
make px4_sitl_default gazebo
8. 用键盘控制无人机飞行
在PX4_Firmware
目录下打开终端,输入
roslaunch px4 indoor1.launch # 可以替换成 roslaunch px4 zhihang1.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解锁。
注意,现在mavros话题与服务前带有了无人机名字,如:/iris_0/mavros/state
键盘操作指南
启动程序后,先在启动python multirotor_keyboard_control.py iris 1 vel
的终端页面
连续按i
增加起飞速度,增加到0.35(大于0.3),
然后按b
进入offboard
模式,再按t
解锁进入arming
模式,飞机就起飞了,
等起飞到差不多的高度就按s
悬停,然后就可以按照你的想法来飞了,
比如你想往右飞,就先按d
增加右飞的速度到合适的速度,然后无人机就会往右飞,飞到你想要到的地方,按s
让无人机悬停,
然后想往前飞,就在按w
增加向前飞的速度到合适的速度,无人机就会朝前飞,到合适的位置再按s
悬停住无人机,
以此类推。。。