当前位置: 首页 > ds >正文

docker部署XTdrone

目录

一、前置准备

二、依赖安装

三、ros安装

四、gazebo安装

五、mavros安装

六、PX4的配置

七、Xtdrone源码下载

八、xtdrone与gazebo(实际上应该是第四步之后做这件事)

九、键盘控制


参考链接:仿真平台基础配置 · 语雀

一、前置准备

1.在docker创建ros-noetic环境,并实现gazebo和rviz可视化

参考:如何使用docker配置ros-noetic环境并使用rviz,gazebo_docker 获取 noetic-desktop-full-CSDN博客

二、依赖安装

sudo apt install ninja-build exiftool ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python-pip python3-pip gawk
pip3 install packaging numpy empy toml pyyaml jinja2 pyargparse

三、ros安装

对于下载的docker,ros都是装好的,所以不用管

四、gazebo安装

Gazebo包括Gazebo本身和ROS的插件,需要分别安装。首先卸载之前的Gazebo

sudo apt-get remove gazebo* 
sudo apt-get remove libgazebo*
sudo apt-get remove ros-noetic-gazebo* #kinetic noetic对应修改

安装gazebo

1. 添加仓库
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
2. 加密钥
wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
3.更新库
sudo apt-get update
4.安装
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/models/路径下可以看到很多模型。

五、mavros安装

sudo apt install ros-noetic-mavros ros-noetic-mavros-extras 		# for ros-noetic
sudo apt install ros-melodic-mavros ros-noetic-mavros-extras 		# for ros-noetic
wget https://gitee.com/robin_shaun/XTDrone/raw/master/sitl_config/mavros/install_geographiclib_datasets.shsudo chmod a+x ./install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh #这步需要装一段时间

六、PX4的配置

下载上面参考链接给的PX4的压缩包,注意一定要把这个压缩包转移到docker里面再解压,否则会出奇怪的问题!!!

cd PX4_Firmware
make px4_sitl_default gazebo

编译完成后,会弹出Gazebo界面,将其关闭即可。

修改 ~/.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

然后运行如下命令,此时会启动Gazebo,如下图所示。

cd ~/PX4_Firmware
roslaunch px4 mavros_posix_sitl.launch

七、Xtdrone源码下载

git clone https://gitee.com/robin_shaun/XTDrone.git
cd XTDrone
git submodule update --init --recursive
cp sensing/gimbal/gazebo_gimbal_controller_plugin.cpp ~/PX4_Firmware/Tools/sitl_gazebo/src/
cp sitl_config/init.d-posix/rcS ~/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/
cp sitl_config/worlds/* ~/PX4_Firmware/Tools/sitl_gazebo/worlds/
cp -r sitl_config/models/* ~/PX4_Firmware/Tools/sitl_gazebo/models/ 
cp -r sitl_config/launch/* ~/PX4_Firmware/launch/
cd ~/.gazebo/models/
rm -r stereo_camera/ 3d_lidar/ 3d_gpu_lidar/ hokuyo_lidar/

由于修改了PX4 sitl_gazebo中的gazebo_gimbal_controller_plugin.cpp(源代码不能控制多无人机的云台),要再编译一次。

cd ~/PX4_Firmware
make px4_sitl_default gazebo

八、xtdrone与gazebo(实际上应该是第四步之后做这件事)

在第四部安装gazebo的时候,实际上需要将xtdrone的gazebo_ros_pkgs放到一个工作空间中

创建工作空间

mkdir -p ~/catkin_ws/src
mkdir -p ~/catkin_ws/scriptscatkin build

将功能包放到工作空间后编译

cd ~/catkin_ws
cp -r ~/XTDrone/sitl_config/gazebo_ros_pkgs src/
catkin build #开发者测试使用catkin_make会出问题,因此建议使用catkin build

九、键盘控制

在一个终端运行

cd ~/PX4_Firmware
roslaunch px4 indoor1.launch

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

具体怎么控制飞行的,参考视频,或者自己按着试试

第4讲:键盘控制代码精讲_哔哩哔哩_bilibili

http://www.xdnf.cn/news/8919.html

相关文章:

  • 5月25日day36打卡
  • 动态导入与代码分割实战
  • 二叉树--OJ2
  • Android组件化框架设计与实践
  • 计算机视觉---YOLOv1
  • Java 中的 super 关键字
  • 17. Qt系统相关:文件操作
  • 【Python 集合 Set 】全面学习指南
  • 【linux】mount命令
  • 卷积神经网络(CNN)深度讲解
  • NextJS 项目,编译成功,但是启动失败的解决方案
  • [Java恶补day6] 15. 三数之和
  • Missashe考研日记—Day44-Day50
  • 进程守护服务优点
  • 快速扩容VHD文件的DiskPart命令指南
  • C49-函数指针
  • Lambda 表达式遍历集合的原理
  • 工作流长任务处置方案
  • nginx对webdav支持不好的解决办法
  • 人工智能100问☞第32问:什么是迁移学习?
  • Springboot怎么解决循环依赖
  • 如何使用pyinstaller打包python脚本?
  • Jetpack Compose 中更新应用语言
  • c++树状数组模板Fenwick (Binary Indexed) Trees
  • 基于TypeScript的全栈待办事项应用Demo
  • Day 19
  • 力扣HOT100之回溯:78. 子集
  • 【linux】systemct创建服务
  • 【C++】21. 红黑树的实现
  • 面试专栏04-SpringCloud