【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.xdnf.cn/news/1534940.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

智能智造和工业软件研发平台SCSAI功能介绍

用爱编程30年&#xff0c;倾心打造工业和智能智造软件研发平台SCIOT,用创新的方案、大幅的让利和极致的营销&#xff0c;致力于为10000家的中小企业实现数字化转型&#xff0c;打造数字化企业和智能工厂&#xff0c;点击上边蓝色字体&#xff0c;关注“AI智造AI编程”或文末扫码…

union和union all的区别,别再傻傻分不清楚了!

union和union all的区别 一、 显示结果不同二、对重复结果的处理不同三、对排序的处理不同四、测试验证1.创建user表并插入测试数据2.通过union关联查询&#xff0c;发现结果自动去重3.通过union all关联查询&#xff0c;发现结果查询所有&#xff0c;并未去重 一、 显示结果不…

记录开发一个英语听力训练网站

背景 在当前全球经济衰退的背景下&#xff0c;IT相关的工作在国内的竞争也是越来越激烈&#xff0c;为了能够获得更多的可能性&#xff0c;英语的学习也许能为程序员打开一扇新的窗户&#xff0c;比如很多远程的工作尤其是国际化背景的工作团队&#xff0c;英语的协作沟通是必…

pdf怎么加页码?5种pdf添加页码指南分享,快来领取!

如何在一个包含大量页面的大型pdf文件中快速找到特定的页面或信息呢&#xff1f;最简便的方法就是为pdf添加页码。pdf添加页码能够清晰显示页面顺序&#xff0c;帮助读者轻松浏览大型pdf文档&#xff0c;同时也便于寻找特定章节和确定整体长度。然而&#xff0c;并非所有pdf文件…

【LeetCode】每日一题 2024_9_14 从字符串中移除星号(模拟)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 今天的题目曾经的我做过了 . . . 又是复习的一天 题目&#xff1a;从字符串中移除星号 代码与解题思路 func removeStars(s string) string {// 本题的核心&#xff1a;生成的输入保证总是可以执行题面中…

【大数据】MapReduce的“内存增强版”——Spark

【大数据】MapReduce的“内存增强版”——Spark 文章脉络 Spark架构 Spark-core SparkConf 和 SparkContext RDD Spark集群 Spark-sql 在大数据时代&#xff0c;数据处理和分析成为企业竞争的重要手段。Hadoop作为大数据处理的基石&#xff0c;其核心组件MapReduce在众多…

完结马哥教育SRE课程--就业篇

文章目录 一、Linux基础入门1.Linux基本架构2.什么是shell3.执行命令4.Shell中的两类命令5.常见命令6.输出信息echo7.tab键补全8.获取帮助 二、文件管理和IO重定向1.文件系统目录结构2.文件系统目录功能3.linux下的文件类型4.文件操作命令5.文件状态stat6.确定文件内容7.文件通…

如何搭建一个自己的外卖会员卡系统?

大家好&#xff0c;我是鲸天科技千千&#xff0c;大家都知道我是做小程序开发的&#xff0c;平时会给大家分享一些互联网相关的创业项目&#xff0c;感兴趣的可以跟我关注一下。 搭建一个首先就是要搭建一个自己的返利小程序也就是外卖会员卡小程序&#xff0c;然后客户在我们…

锁表导致系统挂了,谨慎DDL操作

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、 高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

【Ubuntu】Ubuntu双网卡配置 实现内外网互不影响同时可用

【Ubuntu】Ubuntu双网卡配置 实现内外网互不影响同时可用 建议前提配置用到的命令参考文献&#xff1a; 建议 本文仅作个人记录&#xff0c;请勿完全照搬&#xff0c;建议直接看此视频&#xff0c;按作者的步骤进行配置 linux配置内外网&#xff08;ubuntu举例&#xff09;&am…

看Threejs好玩示例,学习创新与技术(二)

本文接上篇内容&#xff0c;继续挖掘应用ThreeJS的一些创新算法。 本文理解难度比较大&#xff0c;可以先看一些概念&#xff0c;在难的地方培养一些意识即可。 1、扭曲的自然 下面图本身是矩形的&#xff0c;为何它可以这么扭曲呢&#xff1f;它在随机处带有一定的规律&…

跨平台开发新视角:利用Android WebView实现Web内容的原生体验

在移动应用开发领域&#xff0c;跨平台解决方案一直是一个热门话题。开发者们不断寻求能够同时在iOS和Android平台上提供一致用户体验的方法。而Android的WebView组件&#xff0c;作为一个强大的工具&#xff0c;允许开发者在Android应用中嵌入Web内容&#xff0c;为用户提供接…

jmeter吞吐量控制器

一、吞吐量控制器作用&#xff1a;旨在混合场景中&#xff0c;控制样本数&#xff0c;通常在比例场景中使用 吞吐量控制器提供了两种控制模式&#xff1a; 百分比执行&#xff08;Percent Executions&#xff09;&#xff1a; 吞吐量控制器会根据配置的百分比来决定其下的作用…

模拟实现vector:vector构造、析构函数、size、capacity、push_back函数、迭代器、[]运算符重载等的介绍

文章目录 前言一、vecotr构造、析构函数、size、capacity、push_back函数、迭代器、[]运算符重载二、insert函数三、const修饰的迭代器总结 前言 模拟实现vector:vector构造、析构函数、size、capacity、push_back函数、迭代器、[]运算符重载等的介绍 一、vecotr构造、析构函数…

拥塞控制算法为何失效,网络为何难以测量?

紧接着上文 如何测量一个(传输网络)系统的容量 给出的方法&#xff0c;看一下如何测量网络容量&#xff0c;如果真的能测量网络容量&#xff0c;传输算法就好设计了。 先给出答案&#xff0c;很遗憾&#xff0c;根本无法测量&#xff0c;请阅读 why we don’t know how to sim…

react-intl——react国际化使用方案

国际化介绍 i18n&#xff1a;internationalization 国家化简称&#xff0c;首字母首尾字母间隔的字母个数尾字母&#xff0c;类似的还有 k8s(Kubernetes) <br /> React-intl是 React 中最受欢迎的库。 使用步骤 安装 # use npm npm install react-intl -D # use yarn项目…

MySOL数据库进阶篇——存储引擎

一.MySQL体系结构图&#xff1a; MySQL的结构体系主要包含以下几个方面的内容&#xff1a; 1. 服务器层&#xff08;Server Layer&#xff09;&#xff1a;提供了MySQL的核心服务&#xff0c;包括连接管理、查询解析、优化等功能。 2. 存储引擎&#xff08;Storage Engine&am…

每日OJ_牛客_点击消除(栈)

目录 牛客_点击消除&#xff08;栈&#xff09; 解析代码 牛客_点击消除&#xff08;栈&#xff09; 点击消除_牛客题霸_牛客网 描述&#xff1a; 牛牛拿到了一个字符串。 他每次“点击”&#xff0c;可以把字符串中相邻两个相同字母消除&#xff0c;例如&#xff0c;字符…

图表类型识别系统源码分享

图表类型识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Mysql的高级查询:SQL关联查询(内连接/外连接/自连接)/子查询

一.关联查询&#xff1a; 定义&#xff1a;关联查询又叫连接查询 常见&#xff1a;内连接/外连接/自连接 1.内连接(无存在主从表&#xff09; 语法&#xff1a;inner join ...on 定义&#xff1a;组合两个表的记录&#xff0c;返回关联字段相符的记录&#xff0c;也就是返…