智航杯赛事环境搭建(ubuntu20.04,ros-noetic,PX4 1.13版本)

使用设备:暗影精灵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 gzclientkillall -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悬停住无人机,
以此类推。。。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值