【MPC】无人机模型预测控制复现Data-Driven MPC for Quadrotors项目(Part 1)

无人机模型预测控制复现Data-Driven MPC for Quadrotors项目

    • 参考链接
    • 背景和问题
    • 方法与贡献
    • 实验结果
    • 安装ROS
    • 创建工作空间
    • 下载RotorS仿真器源码和依赖
    • 创建Python虚拟环境
    • 下载data_driven_mpc仓库代码
    • 下载并配置ACADO求解器
    • 下载并配置ACADO求解器的Python接口
    • 下载并配置rpg_quadrotor_control源码
    • 测试rpg_quadrotor_control源码
    • 测试data_driven_mpc仓库代码
      • 在Simplified Simulation中测试
        • 测试飞行

环境:

Ubuntu :20.04 LTS

Python: 3.8

在这里插入图片描述

参考链接

Github仓库地址

论文Data-Driven MPC for Quadrotors

Youtube视频

背景和问题

高速度和高加速度下的精确轨迹跟踪对于四旋翼飞行器仍然是一个挑战。由于空气动力学效应的复杂性,这些效应在高速度时会对飞行器的轨迹跟踪产生显著干扰,并引入较大的位置误差。这些效应难以建模,而现有的方法通常忽略了这些空气动力学效应,导致在执行快速和灵活的飞行任务时精度不足。

方法与贡献

本文提出了一种利用**高斯过程(Gaussian Processes, GP)**对四旋翼飞行器的动力学模型进行数据驱动增强的方法。具体而言,GP用于学习残差动力学,即在简化的四旋翼模型基础上,预测并修正空气动力学引起的误差,然后将这一增强的动力学模型集成到模型预测控制(Model Predictive Control, MPC)中,来实现高效且精确的实时反馈控制。

  • 结合了学习到的GP修正项与四旋翼飞行器的标称动力学,形成了一种高效的MPC控制管线。

  • 通过仿真和现实世界的实验,验证了这种方法在高速度和高加速度下的轨迹跟踪精度,能够显著优于传统的线性空气动力学模型。

实验结果

通过仿真和实际飞行实验,本文方法在多种轨迹(如随机、圈、双纽线轨迹等)中展示了其优越性。与未增强的MPC相比,本文提出的方法在速度达到14 m/s、加速度超过4g的条件下,能够将轨迹跟踪误差减少高达70 %。实验还表明,该方法在不同的轨迹之间具有良好的泛化能力,并在实验中持续表现优于基于线性阻力模型的MPC。

安装ROS

安装 ROS ,推荐用鱼香 ROS 的一键安装。

鱼香ROS网站上线|一行代码安装ROS/ROS2/解决rosdep问题|小鱼脚本

wget http://fishros.com/install -O fishros && bash fishros

创建工作空间

创建工作空间。

mkdir -p ~/mpc_ws/src
cd ~/mpc_ws/src
catkin_init_workspace  # initialize your catkin workspace
wstool init

下载RotorS仿真器源码和依赖

下载 RotorS 仿真器源码和依赖。

cd ~/mpc_ws/src
git clone https://github.com/catkin/catkin_simple.git
git clone https://github.com/ethz-asl/rotors_simulator.git
git clone https://github.com/ethz-asl/mav_comm.git
git clone https://github.com/ethz-asl/eigen_catkin.git
sudo apt-get install libgoogle-glog-dev
sudo apt-get install liblapacke-dev

编译工作空间。

cd ~/mpc_ws
catkin build

创建Python虚拟环境

Python virtualenv 是一个用于创建和管理虚拟环境的工具。它可以帮助开发者在不同的项目中使用不同的 Python 版本和包,而不会相互干扰。使用 virtualenv,可以轻松地创建一个独立的 Python 环境,在其中安装所需的包和版本,而不会影响系统中已经安装的其他 Python 环境和包。

我这里使用的是 Ubuntu 20.04 、 Python 3.8 的环境配置。

sudo pip3 install virtualenv
cd ~
virtualenv mpc_venv --python=/usr/bin/python3.8
source ~/mpc_venv/bin/activate

下载data_driven_mpc仓库代码

下载 data_driven_mpc 仓库代码。

cd ~/mpc_ws/src
git clone https://github.com/uzh-rpg/data_driven_mpc.git

该代码已在 Ubuntu 18.04 、 Python 3.6 和 ROS Melodic 上进行了测试运行。

切换到分支python3.8_support,可以在 Ubuntu 20.04 、 Python 3.8 和 ROS Noetic 上运行。

切换分支,激活 Python 环境并安装其余必需的 Python 库。

cd data_driven_mpc
git checkout python3.8_support
source ~/mpc_venv/bin/activate
python3 setup.py install

需要安装以下库。

install_requires=['numpy==1.19.0','scipy==1.5.0','tqdm==4.46.1','matplotlib==3.2.2','scikit-learn==0.23.2','casadi==3.5.1','pyquaternion==0.9.5','joblib==0.15.1','pandas==1.0.5','PyYAML==5.3.1','pycryptodomex==3.9.8','gnupg==2.3.1','rospkg==1.2.8','tikzplotlib==0.9.4'],

可以使用以下命令查看 Python 下所有包和包的版本。

pip list -o

多尝试几次,这个可能受网络环境影响,直到显示Finished processing dependencies ...为止。

再次编译工作空间。

cd ~/mpc_ws
catkin build

下载并配置ACADO求解器

参考链接

首先,安装必要的软件包。

sudo apt-get install gcc g++ cmake git gnuplot doxygen graphviz

下载 ACADO 求解器源码。

git clone https://github.com/acado/acado.git
cd acados
git submodule update --recursive --init

在 acados 目录下建立 build 文件夹,用于存放编译文件。

cd ~/acados
mkdir -p build
cd build
cmake -DACADOS_WITH_QPOASES=ON ..

进行编译。

make install -j4

执行一个例程以检查配置是否成功。

cd ..
cd examples/getting_started
./simple_ocp

运行结果如下。

在这里插入图片描述

如果运行结果如下图所示,出现显示异常。

在这里插入图片描述

打开 Ubuntu 系统配置,将缩放这一栏调回100%即可。

在这里插入图片描述

如果你想在debug模式下编译 acado ,可以运行如下命令:

cmake -DCMAKE_BUILD_TYPE=Debug ..

下载并配置ACADO求解器的Python接口

参考链接

在 acados 目录下下载接口文件。

cd ~/acados
pip install -e ~/acados/interfaces/acados_template

在 ~/.bashrc 文件中添加路径,这里需要写绝对路径, hccwb 是我的计算机名。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"/home/hccwb/acados/lib"
export ACADOS_SOURCE_DIR="/home/hccwb/acados"

在激活的虚拟环境中,测试 Python 案例。

source ~/mpc_venv/bin/activate
cd ~/acados/examples/acados_python/getting_started/
python minimal_example_ocp.py

如果运行成功,结果如下。

在这里插入图片描述

如果提示安装 Tera 模板渲染器,这里需要手动下载一下。

t_renderer-v0.0.34-linux下载地址

将下载的文件移动到 acados 的 bin 目录,重命名为 t_renderer,并赋予可执行权限。

mv ~/Downloads/t_renderer-v0.0.34-linux ~/acados/bin/t_renderer
chmod +x ~/acados/bin/t_renderer

下载并配置rpg_quadrotor_control源码

安装 ROS 依赖。

sudo apt-get install libgoogle-glog-dev protobuf-compiler ros-$ROS_DISTRO-octomap-msgs ros-$ROS_DISTRO-octomap-ros ros-$ROS_DISTRO-joy ros-$ROS_DISTRO-rqt*

安装 vcstool 包。

sudo apt-get install python3-vcstool 

如果提示找不到包,可以使用以下方法。

方法一:已经安装了 ROS 。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt install curl # if you haven't already installed curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install python3-vcstool

方法二:没有安装 ROS 。

curl -s https://packagecloud.io/install/repositories/dirk-thomas/vcstool/script.deb.sh | sudo bash
sudo apt-get update
sudo apt-get install python3-vcstool

下载 rpg_quadrotor_control 源码

cd ~/mpc_ws/src
git clone https://github.com/uzh-rpg/rpg_quadrotor_control.git

下载相关依赖。

vcs-import < rpg_quadrotor_control/dependencies.yaml

如果下载失败,可以使用 HTTP 来克隆 GitHub 上的仓库。修改rpg_quadrotor_control/dependencies.yaml文件,将其中的所有 SSH 链接替换为 HTTP 链接。

repositories:catkin_simple:type: giturl: https://github.com/catkin/catkin_simple.gitversion: mastereigen_catkin:type: giturl: https://github.com/ethz-asl/eigen_catkin.gitversion: mastermav_comm:type: giturl: https://github.com/ethz-asl/mav_comm.gitversion: masterrotors_simulator:type: giturl: https://github.com/ethz-asl/rotors_simulator.gitversion: masterrpg_quadrotor_common:type: giturl: https://github.com/uzh-rpg/rpg_quadrotor_common.gitversion: masterrpg_single_board_io:type: giturl: https://github.com/uzh-rpg/rpg_single_board_io.gitversion: master

确保 rqt 缓存中的 GUI 已更新,如果报错找不到文件,忽略这个错误。

rm ~/.config/ros.org/rqt_gui.ini

编译工作空间。

cd ~/mpc_ws
catkin build

将工作空间地址添加到~/.bashrc文件。

echo "source ~/mpc_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

测试rpg_quadrotor_control源码

参考链接

测试运行集成开发环境。

cd ~/mpc_ws
catkin run_tests --no-deps rpg_quadrotor_integration_test

如果集成测试开发环境运行正常,应该看到这样的 Gazebo 模拟环境。

在这里插入图片描述

启动基础仿真环境使用以下命令。

source ~/mpc_ws/devel/setup.bash
roslaunch rpg_rotors_interface quadrotor_empty_world.launch

如果运行正常会看到如下的界面。

在这里插入图片描述

要使四旋翼飞行器飞行,首先点击Connect按钮,然后按下Arm Bridge按钮向无人机发送命令,然后按下Start按钮启动。

测试data_driven_mpc仓库代码

官方提供了如何在两个不同的模拟器中使用此软件包的说明。Simplified Simulation 和 Gazebo Simulation 。Simplified Simulation 是一个轻量级的 Python 模拟器,Gazebo Simulation 是建立在 RotorS 上的。

首先,确保将 data_driven_mpc 包的主目录添加到 Python 路径中。

export PYTHONPATH=$PYTHONPATH:~/mpc_ws/src/data_driven_mpc/ros_gp_mpc

在Simplified Simulation中测试

测试飞行

要验证软件包的正确安装,请首先在简化模拟上执行试飞。

source ~/mpc_ws/devel/setup.bash
source ~/mpc_venv/bin/activate
roscd ros_gp_mpc
python src/experiments/trajectory_test.py

模拟完成后,正确的安装应产生与以下结果非常相似的结果(平均优化时间可能会有所不同)。

:::::::::::::: SIMULATION SETUP ::::::::::::::Simulation: Applied disturbances: 
{"noisy": true, "drag": true, "payload": false, "motor_noise": true}Model: No regression model loadedReference: Executed trajectory `loop` with a peak axial velocity of 8 m/s, and a maximum speed of 8.273 m/s::::::::::::: SIMULATION RESULTS :::::::::::::Mean optimization time: 1.488 ms
Tracking RMSE: 0.2410 m

您可以在config/configuration_parameters.py文件中编辑 Simplified Simulation 的配置变量以获得更好的可视化效果。在SimpleSimConfig类中:

# Set to True to show a real-time Matplotlib animation of the experiments for the Simplified Simulator. Execution 
# will be slower if the GUI is turned on. Note: setting to True may require some further library installation work.
custom_sim_gui = True# Set to True to display a plot describing the trajectory tracking results after the execution.
result_plots = True# Set to True to show the trajectory that will be executed before the execution timepre_run_debug_plots = True# Choice of disturbances modeled in our Simplified Simulator. For more details about the parameters used refer to# the script: src/quad_mpc/quad_3d.py.simulation_disturbances = {"noisy": True,                       # Thrust and torque gaussian noises"drag": True,                        # 2nd order polynomial aerodynamic drag effect"payload": False,                    # Payload force in the Z axis"motor_noise": True                  # Asymmetric voltage noise in the motors}

下面是运行结果。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

您还可以改变参考轨迹的峰值速度和加速度,或者使用双纽线轨迹而不是圆轨迹。所有这些选项都可以在脚本参数中指定。键入以下内容可以显示更多信息:

python src/experiments/trajectory_test.py --help

参考资料:

Github仓库地址

论文Data-Driven MPC for Quadrotors

安装 python3-vcstool

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/426326.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于密码的大模型安全治理的思考

文章目录 前言一、大模型发展现状1.1 大模型技术的发展历程1.2 大模型技术的产业发展二、大模型安全政策与标准现状2.1 国外大模型安全政策与标准2.2 我国大模型安全政策与标准前言 随着大模型技术的迅速发展和广泛应用,其安全性问题日益凸显。密码学作为网络空间安全的核心技…

如何简化机器人模型,加速仿真计算与可视化

通常,我们希望将自己设计的机器人模型导入仿真环境。由于是通过 CAD 软件设计的,导出的 urdf 使用 STL 或 DAE 文件来表示 3D 几何。但原始的 STL 或 DAE 文件通常过于复杂(由数十万个三角面片组成),这会减慢仿真速度,有时也会导致仿真软件报错(如Webots)。为了在正确描述…

【Linux】调试和Git及进度条实现

这里是阿川的博客&#xff0c;祝您变得更强 ✨ 个人主页&#xff1a;在线OJ的阿川 &#x1f496;文章专栏&#xff1a;Linux入门到进阶 &#x1f30f;代码仓库&#xff1a; 写在开头 现在您看到的是我的结论或想法&#xff0c;但在这背后凝结了大量的思考、经验和讨论 目录 1.…

KVM创建的虚拟机无法访问外网

基础环境如下&#xff1a; [rootlocalhost ~]# virsh domifaddr CentOS7_YFName MAC address Protocol Address -------------------------------------------------------------------------------vnet0 52:54:00:cb:a6:0d ipv4 192.168.…

Java中的事务管理

1.1 事务管理 1.1 事务回顾 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功&#xff0c;要么同时失败。 怎么样来控制这组操作&#xff0c;让这组操…

OpenCV高阶操作

在图像处理与计算机视觉领域&#xff0c;OpenCV&#xff08;Open Source Computer Vision Library&#xff09;无疑是最为强大且广泛使用的工具之一。从基础的图像读取、 1.图片的上下&#xff0c;采样 下采样&#xff08;Downsampling&#xff09; 下采样通常用于减小图像的…

RabbitMQ(高阶使用)延时任务

文章内容是学习过程中的知识总结&#xff0c;如有纰漏&#xff0c;欢迎指正 文章目录 1. 什么是延时任务&#xff1f; 1.1 和定时任务区别 2. 延时队列使用场景 3. 常见方案 3.1 数据库轮询 优点 缺点 3.2 JDK的延迟队列 优点 缺点 3.3 netty时间轮算法 优点 缺点 3.4 使用消息…

安卓BLE蓝牙通讯

蓝牙测试demo 简介   Android手机间通过蓝牙方式进行通信&#xff0c;有两种常见的方式&#xff0c;一种是socket方式&#xff08;传统蓝牙&#xff09;&#xff0c;另一种是通过GATT&#xff08;BLE蓝牙&#xff09;。与传统蓝牙相比&#xff0c;BLE 旨在大幅降低功耗。这样…

【Obsidian】当笔记接入AI,Copilot插件推荐

当笔记接入AI&#xff0c;Copilot插件推荐 自己的知识库笔记如果增加AI功能会怎样&#xff1f;AI的回答完全基于你自己的知识库余料&#xff0c;是不是很有趣。在插件库中有Copilot插件这款插件&#xff0c;可以实现这个梦想。 一、什么是Copilot&#xff1f; 我们知道githu…

香橙派zero2w上手——环境配置添加OLED小屏幕

0 硬件参数 origin pi zero2W 硬件参数 CPU全志 H618 四核 64 位 1.5GHz Cortex-A53 处理器GPUMali G31 MP2&#xff0c;支持OpenGL ES 1.0/2.0/3.2&#xff0c;OpenCL 2.0&#xff0c;Vulkan 1.1内存LPDDR4:1GB/1.5GB/2GB/4GB (可选)存储SPI Flash: 16MBWiFi蓝牙WiFi蓝牙二合…

将硬盘的GPT 转化为MBR格式

遇到的问题 在重新安装系统时&#xff0c;磁盘遇到无法空间分配给系统。 解决方式 使用Windows10镜像 U盘安装&#xff0c;选择磁盘时&#xff0c;转换磁盘格式为MBR。然后退出安装程序。 Shift F10# 输入 diskpart# 查看磁盘信息 list disk# 选择需要转换的磁盘&#xff0…

【网络安全的神秘世界】攻防环境搭建及漏洞原理学习

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 Kali安装docker 安装教程 PHP攻防环境搭建 中间件 介于应用系统和系统软件之间的软件。 能为多种应用程序合作互通、资源…

一、机器学习算法与实践_02KNN算法笔记

1、KNN基本介绍 1.1 定义 KNN&#xff08;K-NearestNeighbor&#xff0c;即&#xff1a;K最邻近算法&#xff09;是一种基于实例的学习方法&#xff0c;用于分类和回归任务&#xff0c;它通过查找一个数据点的最近邻居来预测该数据点的标签或数值。 所谓K最近邻&#xff0c;…

Golang | Leetcode Golang题解之第402题移掉K位数字

题目&#xff1a; 题解&#xff1a; func removeKdigits(num string, k int) string {stack : []byte{}for i : range num {digit : num[i]for k > 0 && len(stack) > 0 && digit < stack[len(stack)-1] {stack stack[:len(stack)-1]k--}stack app…

python-简单的数据结构

题目描述 小理有一天在网上冲浪的时候发现了一道很有意思的数据结构题。 该数据结构形如长条形。 一开始该容器为空&#xff0c;有以下七种操作。 1 a从前面插入元素 a ; 2 从前面删除一个元素; 3 a从后面插入一个元素; 4 从后面删除一个元素; 5 将整个容器头尾翻转; 6 输出个…

Mysql调优之性能监控(一)

前言&#xff1a; 官网就是最好的老师&#xff1a;MySQL&#xff0c;里面各种语法跟参数跟性能调试工具 一、使用show profile查询剖析工具 -- 开启 SET profiling 1; -- 关闭 SET profiling 0; -- 显示查询的性能分析信息 show profiles; -- 显示具体查询id的执行步骤耗时 S…

【视频教程】基于python深度学习遥感影像地物分类与目标识别、分割实践技术应用

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

直流无刷电机霍尔线序自学习解释

直流无刷电机霍尔线序自学习 步骤详解 1. 初始连接 连接电机的三相线&#xff1a;A、B、C。连接霍尔传感器线&#xff1a;HA、HB、HC。 2. 输入电压组合与霍尔信号记录 电机的电压输入组合和霍尔信号记录是电机控制系统中至关重要的一部分&#xff0c;它们决定了电机的运转…

codeup:将已有文件夹推送到已有仓库

codeup&#xff1a;将已有文件夹推送到已有仓库 总流程git initgit remote add origin https://codeup.aliyun.com/xxx/xxx.gitgit pull 远程库别名 mastergit add .git commit &#xff08;会遇到很多问题&#xff09;git push -u origin master &#xff08;会遇到很多问题&a…

【OpenAPI】Spring3 集成 OpenAPI 生成接口文档

Spring3 集成 OpenAPI 生成接口文档 1. 依赖 Spring 版本&#xff1a;3.0.5 Java 版本&#xff1a;jdk21 OpenAPI 依赖&#xff1a; <!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui --> <dependency><groupI…