# 识别位姿自主降落(四旋翼无人机)
该算法包基于Ubuntu20.04 ROS Noetic下运行,输出相机位姿数据,寻找降落目标,实现无人机的自主降落,[演示视频](https://www.bilibili.com/video/BV1hB4y1A75t)。
该包分为三部分:
1. 普通电脑Ubuntu运行相机识别算法
2. 电脑Ubuntu运行Gazebo仿真,实现无人机识别降落目标并自主降落。
3. 真实实验实现无人机自主降落
## 硬件参数
1. 相机:[锐尔威视](http://www.rervision.cn/featured_products.html),帧率:260FPS,像素:640*360
2. 标记点图片:
<img src="./imgs/mark.png" alt="Mark Points" style="zoom:40%;" />
3. 四旋翼无人机(真实飞行实验):[DJI F450](https://www.dji.com/cn/flame-wheel-arf/feature)机架、[Pixhawk2 Hex Cube](https://docs.px4.io/v1.9.0/en/flight_controller/pixhawk-2.html)飞控
4. 板载计算机(真实飞行实验):[Nanopi M4](http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M4/zh)(FridenlyDesktop LUbuntu18.04)
5. 无人机定位设备(真实飞行实验):[OpTitrack](http://optitrack.com.cn/)
---
## 安装过程
安装过程分为3个部分,每个部分有,其中无人机部分仿真可以不用任何硬件设备。
---
### 1.普通电脑运行相机识别算法
1. 安装[Ros](http://wiki.ros.org/noetic/Installation/Ubuntu)
2. 安装g2o库依赖(优化PnP估计位姿数据)
~~~sh
sudo apt-get install libsuitesparse-dev qtdeclarative5-dev qt5-qmake libqglviewer-headers
git clone https://github.com/koide3/g2o.git
cd g2o
git checkout hdl_graph_slam
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=RELEASE
make -j8
sudo make install
~~~
3. 安装Sophus库(李群与李代数,描述位姿SO3空间)
~~~shell
git clone https://github.com/strasdat/Sophus.git
cd Sophus/
mkdir build
cd build
cmake ..
make
sudo make install
~~~
4. 安装uvc camera驱动
~~~shell
sudo apt install libuvc-dev
~~~
5. 创建工作空间,下载源码
~~~sh
cd ~/
mkdir -p ~/quadrotor_ws/src
cd ~/quadrotor_ws/src
git clone
~~~
6. 编译libuvc_ros,并修改相机串口号
- 编译:
~~~sh
# Noetic安装python3的catkin编译工具
sudo apt install python3-catkin-tools python3-osrf-pycommon
catkin build libuvc_ros
~~~
- 设置相机串口:
~~~shell
lsusb
# Bus 004 Device 050: ID 32e4:4689
~~~
其中Vendor号为0x32e4,Product号为4689,如果要运行自己的相机需要修改成自己相机的ID号
编辑/etc/udev/rules.d/99-uvc.rules文件
~~~shell
sudo gedit /etc/udev/rules.d/99-uvc.rules
~~~
~~~txt
# UVC cameras
SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="32e4", ATTRS{idProduct}=="4689", MODE="0666"
Change the vendor and product IDs to match your camera.
~~~
修改libuvc_ros/libuvc_camera/launch/libuvc_camera.launch
~~~
<param name="vendor" value="0x32e4"/>
<param name="product" value="0x4689"/>
~~~
保存后,重新加载udev规则
~~~sh
sudo udevadm control --reload-rules
sudo udevadm trigger
~~~
7. 标定自己的相机参数:详见http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration。并在~/quadrotor_ws/src/detect_points/src/detect_points.cpp替换成自己的相机参数。
8. 编译其余包
~~~shell
catkin build detect_points rviz_simulation
~~~
9. 运行
~~~shell
# 开启相机
roslaunch libuvc_camera libuvc_camera.launch
# 开启检测位姿节点
rosrun detect_points detect_points
# 仿真
rosrun rviz_simulation rviz_simulation
rviz
~~~
10. 效果
<img src="./imgs/位姿识别运行.png" style="zoom:60%;" />
---
### 2.运行Gazebo仿真,实现无人机识别降落目标并自主降落
1. 安装PX4固件
- 安装依赖
安装mavros以及相关的 geographiclib dataset
~~~sh
sudo apt install ros-noetic-mavros ros-noetic-mavros-extras
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
chmod +x install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh
~~~
- 下载PX4/Autopilot(已经使用了国内源,下载速度会快许多),这里把Firmware克隆至~/
~~~sh
git clone https://github.com.cnpmjs.org/PX4/Firmware.git --recursive
~~~
- 在下载子模块的时候速度很慢,停止。同样使用国内源,打开~/Firmware/.git/config,找到子模块下载网址,将github.com全部改为github.com.cnpmjs.org,然后继续下载。
~~~shell
git submodule update --init --recursive
~~~
- 下载完成后切换版本并编译px4_sitl_default
~~~sh
git checkout v1.11.0-beta1
# 完成环境配置
source ~/Firmware/Tools/setup/ubuntu.sh
sudo apt install libgstreamer-plugins-base1.0-dev
make distclean
make px4_sitl_default
~~~
- 编译Gazebo
在`~/Firmware/Tools/sitl_gazebo`路径下执行:
~~~sh
mkdir Build
### 将以下所有的[]都替换成Firmware所在的路径
### 设置插件的路径以便 Gazebo 能找到模型文件
export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:~/Firmware/Tools/sitl_gazebo/Build
### 设置模型路径以便 Gazebo 能找到机型
export GAZEBO_MODEL_PATH=${GAZEBO_MODEL_PATH}:~/Firmware/Tools/sitl_gazebo/models
### 禁用在线模型查找
export GAZEBO_MODEL_DATABASE_URI=""
### 设置 sitl_gazebo 文件夹的路径
export SITL_GAZEBO_PATH=~/Firmware/Tools/sitl_gazebo
### 编译gazebo仿真
cd Build
cmake ..
make
~~~
- 启动仿真
~~~sh
cd ~/Firmware
make px4_sitl_default
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
roslaunch px4 mavros_posix_sitl.launch
~~~
为了方便在~/.bashrc中添加环境变量
~~~sh
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
~~~
2. 将地标图片和环境导入至Gazebo中
- 将models文件夹下的全部文件全部复制到`~/.gazebo/medels/`中
- 将world/land文件复制至`/home/jh/Firmware/Tools/sitl_gazebo/worlds`
- 修改`~/Firmware/launch/mavros_posix_sitl.launch`文件
~~~txt
# 在14行下面增加一句:
<arg name="cam" default="iris_fpv_cam"/>
# 注释原文件该行
# <arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/empty.world"/>
# 替换成该行
<arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/land"/>
# 注释原文件该行
# <arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg vehicle)/$(arg vehicle).sdf"/>
# 替换成该行
<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg cam)/$(arg cam).sdf"/>
~~~
- 修改fpv camera摄像头朝向
默认情况下摄像头朝向正前方,修改为正视向下。
打开`~/Firmware/Tools/sitl_gazebo/models/iris_fpv_cam/iris_fpv_cam.sdf`修改pose
~~~
<pose>0 0 0 0 1.57 0</pose>
~~~
3. 标定仿真相机
- 由于iris_fpv_cam相机的内参矩阵没有,需要自行标定。model文件夹下的pattern为标定棋盘的sdf模型,将文件world/calibration复制到~/Firmware/Tools/sitl_gazebo/worlds下。修改~/Firmware/launch/mavros_posix_sitl.launch的第14行,将world改为calibration(即刚复制的文件名)。
- 编译运行节点offboard:
~~~sh
没有合适的资源?快使用搜索试试~ 我知道了~
PX4+Gazebo仿真降落.zip
共87个文件
cpp:14个
xml:12个
png:10个
需积分: 5 1 下载量 121 浏览量
2024-06-23
09:56:15
上传
评论 1
收藏 4.96MB ZIP 举报
温馨提示
仿真是一种利用计算机模型复现实际系统并对其进行实验研究的技术手段。通过建立数学或物理模型来模拟真实世界的系统,并通过实验对它们进行分析和优化。仿真技术在多个领域发挥着重要作用,包括航空航天、军事、工业、经济等。 仿真技术的发展始于20世纪初,最初应用于水利模型研究和实验室工作。随着计算机技术的进步,仿真技术得到了快速发展。尤其是在50年代至60年代,仿真技术广泛应用于航空、航天和原子能等领域,大大推动了其技术进步。 仿真技术主要依赖于计算机硬件和软件。用于仿真的计算机类型包括模拟计算机、数字计算机和混合计算机。仿真软件则涵盖了仿真程序、程序包、语言以及数据库管理系统,如SimuWorks平台,它提供了从建模、实时运行到结果分析的全过程支持。 仿真方法可以分为两大类:连续系统的仿真方法和离散事件系统的仿真方法。连续系统仿真通常涉及常微分方程或偏微分方程,而离散事件系统仿真则关注随机时间点的状态变化,主要用于统计特性分析。 总的来说,仿真技术通过模拟现实世界的各种系统,帮助人们更好地理解、预测和优化这些系统的性能。未来,随着技术的不断进步,仿真将在更多领域发挥更大的作用,为科学研究和技术发展提供强有力的支持。
资源推荐
资源详情
资源评论
收起资源包目录
PX4+Gazebo仿真降落.zip (87个子文件)
simulation
catkin_simple
CMakeLists.txt 175B
cmake
catkin_simple-extras.cmake.em 9KB
package.xml 536B
test
scenarios
hello_world
foo
src
main.cpp 106B
package.xml 542B
catkin_simple
bar
include
bar
hello.h 14B
src
hello.cpp 228B
package.xml 579B
msg
HeaderString.msg 26B
.gitignore 15B
baz
include
baz
world.h 179B
package.xml 357B
README.md 5KB
offboard
CMakeLists.txt 399B
src
offboard_node.cpp 3KB
package.xml 574B
auto_land
CMakeLists.txt 388B
src
auto_land.cpp 7KB
package.xml 576B
vrpn_client_ros
include
vrpn_client_ros
vrpn_client_ros.h 5KB
CMakeLists.txt 2KB
CHANGELOG.rst 1KB
src
vrpn_client_ros.cpp 14KB
vrpn_tracker_node.cpp 2KB
vrpn_client_node.cpp 2KB
LICENSE 1KB
package.xml 771B
launch
sample.launch 620B
models
pattern
model.sdf 1KB
materials
textures
pattern.PNG 17KB
scripts
pattern.material 258B
model.config 210B
land_mark
model.sdf 1KB
materials
textures
mark.png 9KB
scripts
land_mark.material 252B
model.config 201B
lawn_plane
model.sdf 737B
materials
textures
grass.png 2.42MB
scripts
lawn.material 255B
model.config 320B
model-1_4.sdf 740B
libuvc_ros
libuvc_camera
include
libuvc_camera
camera_driver.h 3KB
CMakeLists.txt 2KB
CHANGELOG.rst 4KB
Makefile 41B
src
nodelet.cpp 3KB
main.cpp 2KB
camera_driver.cpp 15KB
package.xml 3KB
launch
libuvc_camera.launch 1019B
cfg
UVCCamera.cfg 7KB
mainpage.dox 601B
libuvc_camera_nodelet.xml 266B
rosdep.yaml 105B
libuvc-ubuntu.rdmanifest 549B
.travis.yml 2KB
Makefile 47B
libuvc_ros_dev.rosinstall 98B
libuvc_ros.rosinstall 100B
libuvc-arch.rdmanifest 271B
libuvc_ros
CMakeLists.txt 220B
CHANGELOG.rst 643B
package.xml 2KB
libuvc-arch.tar.gz 554B
README.md 359B
imgs
mark.png 9KB
Gazebo+rviz+rqt.png 798KB
vrpn.png 238KB
pattern.png 17KB
motive.png 95KB
Gazebo仿真标定.png 842KB
位姿识别运行.png 590KB
README.md 14KB
rviz_simulation
include
rviz_simulation
rviz_simulation.h 711B
CMakeLists.txt 667B
src
rviz_simulation.cpp 2KB
rviz_simulation_node.cpp 297B
package.xml 1KB
detect_points
include
detect_points
detect_points.h 4KB
CMakeLists.txt 1KB
cmake_modules
FindG2O.cmake 3KB
FindCSparse.cmake 576B
src
detect_points.cpp 33KB
detect_points_node.cpp 439B
package.xml 893B
world
land 10KB
calibration 10KB
共 87 条
- 1
资源评论
热爱嵌入式的小佳同学
- 粉丝: 1w+
- 资源: 2136
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 象形文字 3 渲染引擎.zip
- 该项目的主要目标是生成和可视化使用体素构建的地形 为了进行性能和实施比较,我们使用了不同的方法和计算技术来实现 .zip
- 大三年级2021年秋《计算机体系结构》课程实验部分.zip
- 该项目是 Bruneton 和 Neyret 撰写的预计算大气散射论文的新实现的 DirectX 11 端口 .zip
- 计算机三级网络.zip学习资料程序资源参考
- 该项目旨在复兴和现代化 Blitz3D .zip
- 大三年级2020年秋《计算机网络》课程实验部分.zip
- Oracle之提高PLSQL的执行性能
- 计算机学院2017级第三次实训项目-基于OPEN-AI的游戏人工智能.zip
- 该项目捕获使用 DirectX,OpenGL 来呈现其屏幕的 NoxPlayer 的屏幕 .zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功