【RotorS仿真】四旋翼无人机MPC控制器ROS实现与Gazebo仿真

1 前言

模型预测控制(MPC, Model Predictive Control)不是一个新的话题,但是将其与视觉(感知约束)和规划等结合,能达到意想不到的效果。
近几年比较简单的论文有:

因为笔者近期在学习MPC的设计及工程实现,因此做了一个项目,旨在以练促学。
参考的开源项目有:
uzh-rpg/rpg_mpc
ethz-asl/mav_control_rw

本文将使用基于Gazebo的四旋翼无人机仿真器RotorS,剔除上述项目中次要以及冗余的部分,实现最基本的模型预测控制器,代码使用C++编写。

代码仓库:nmpc_controller

2 理论

2.1 MPC原理简介

2.2 Problem formulation

设无人机机体状态为 x b x_b xb
x b = [ p T   v T   η T   ω T ] ∈ R 12 , \mathbf{x_b}=[\mathbf{p}^{\mathsf{T}}\ \mathbf{v}^{\mathsf{T}}\ \eta^{\mathsf{T}}\ \omega^{\mathsf{T}}]\in\mathbb{R}^{12}, xb=[pT vT ηT ωT]R12,
p p p 是机体位置在世界坐标系的值, v v v 是机体速度在世界坐标系的值, η = [ ϕ   θ   ψ ] T \mathbf{\eta}=[\phi\ \theta\ \psi]^{\mathsf{T}} η=[ϕ θ ψ]T Z − Y − X Z-Y-X ZYX 欧拉角用于表示机体姿态, ω \omega ω 是机体相对世界的角速度在机体坐标系下的表达。

系统输入 u = [ T   τ x   τ y   τ z ] T \mathbf{u}=[T\ \tau_x\ \tau_y\ \tau_z]^\mathsf{T} u=[T τx τy τz]T, 机体状态 x = x b \mathbf{x}=\mathbf{x_b} x=xb。那么这个MPC问题可以写为:
min ⁡ u 0 … x N ∑ k = 0 N ∥ x k − x r , k ∥ Q 2 + ∑ k = 0 N − 1 ∥ u k − u r , k ∥ R 2 s.t. x 0 = x ( t ) x k + 1 = f ( x k , u k ) , k = 0 , 1 , … , N − 1 u ‾ ≤ u k ≤ u ‾ , k = 0 , 1 , … , N − 1 \begin{equation*} \begin{aligned} \min_{\mathbf{u}_0\ldots\mathbf{x}_N}& \sum_{k=0}^{N}\|\mathbf{x}_k-\mathbf{x}_{r,k}\|_{\mathbf{Q}}^2+\sum_{k=0}^{N-1}\|\mathbf{u}_k-\mathbf{u}_{r,k}\|_{\mathbf{R}}^2 \\ \text{s.t.}& \mathbf{x}_0=\mathbf{x}(t) \\ &\mathbf{x}_{k+1}=\mathbf{f}(\mathbf{x}_k,\mathbf{u}_k),\quad k=0,1,\ldots,N-1 \\ &\underline{\boldsymbol{u}}\leq\mathbf{u}_k\leq\overline{{\boldsymbol{u}}},\quad k=0,1,\ldots,N-1 \\ \end{aligned} \end{equation*} u0xNmins.t.k=0Nxkxr,kQ2+k=0N1ukur,kR2x0=x(t)xk+1=f(xk,uk),k=0,1,,N1uuku,k=0,1,,N1
上面的约束条件中,第一个约束条件为初值约束,第二个约束条件为无人机动力学约束,第三个约束为系统输入约束(拉力和力矩有最大值和最小值)。

3 实现

3.1 仿真环境介绍

笔记本硬件配置为Intel Core i9-12900H 2.50 GHz处理器,16GB 4800 MHz DDR5内存。软件环境为Ubuntu 20.04 及 Robot Operation System(ROS)。所设计的控制器会在Gazebo中测试与验证,同时使用RotorS提供的工具。MPC求解器为ACADO,这是由ETHz针对最优化问题开发的开源的软件框架。代码将以ROS packages的形式给出,用C++编写。

3.2 代码结构

代码功能可以分为以下模块:
在这里插入图片描述
First, in the model folder, define the MPC model in a C++ source file, e.g., quadrotor_nmpc.cpp, and then follow the instructions in README.m file to generate the C++ code for the computation of the MPC problem. The external solver qpOASES should also be included as in the externals folder. Then, the mpc_wrapper.cpp is used to encapsulate the interface code generated by ACADO. In nmpc_controller.cpp, the current state and the reference state is set for the controller to run, and results of each control loop is updated and stored here. The nmpc_controller_node is mainly responsible for communication purpose, it will interact with the trajectory generation module and the Gazebo simulator. It will set the controller parameters like the weights and the boundaries from ROS parameter server. It subscribes to odometry for estimated value and trajectory command. It publishes the controller output as the motor speeds to Gazebo simulator. It runs the controller at a given rate using a timer.

控制器相关参数如下:

# weights for states
q_position: {x: 20, y: 20, z: 50} 
q_velocity: {x: 10, y: 10, z: 10}
q_attitude: {x: 50, y: 50, z: 50}
q_angular_rate: {x: 10, y: 10, z: 10}

# weights for inputs
r_thrust: 0.1
r_tau: {x: 1, y: 1, z: 1}

# limits
max_thrust: 18 # [N]
min_thrust: 0.1 # [N]
max_tau: {x: 0.05, y: 0.05, z: 0.05} # [Nm]

# time
controller_frequency: 100 # [Hz]
queue_dt: 0.01 # [s]
prediction_sampling_time: 1 # [s] 
number_of_samples: 10 # N in the equation

3.3 Usage

3.3.1 Acado安装

请参考笔者往期的博客:
Configure Acado on Linux
Generate MPC C++ code using Acado 这个非常重要,看明白了可以举一反三!

3.3.2 终端命令

创建工作空间

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

下载 rotors_simulator packages

cd ~/catkin_ws/src
git clone git@github.com:ethz-asl/rotors_simulator.git
git clone git@github.com:ethz-asl/mav_comm.git

下载 nmpc_controller

cd ~/catkin_ws/src

编译

cd ~/catkin_ws
catkin build

开启一个终端,运行如下launch命令以启动Gazebo和控制器

source ./devel/setup.bash
roslaunch nmpc_controller nonlinear_mpc_sim.launch

再开启一个终端,运行如下命令以发布轨迹点,执行悬停动作,悬停在 1m 处。

source ./devel/setup.bash
rosrun nmpc_controller waypoint_publisher_5rd_polynomial \
__ns:=/ardrone 0 0 0 0 1 0.08 0 0 10 # to hover

Note:

  1. arguments: <x_d> <x_sen> <y_d> <y_sen> <z_d> <z_sen> <yaw_d> <yaw_sen> (d表示desire,期望值;sen表示sense,实际值)
  2. __ns:=/ardrone 是为了设置节点的命名空间,不要忽略该参数

另外开启一个终端,以观察轨迹随时间的变化,这里笔者使用了一个可视化面板工具,foxglove,详情可见其官网 website

source ./devel/setup.bash
rosrun foxglove_bridge foxglove_bridge

3.4 效果

这里的轨迹是通过给定初始位置和期望位置,在其间生成五阶多项式曲线。
效果见视频:

NMPC Controller Gazebo Demo

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MPC(模型预测控制器)是一种常用的控制算法,它能够在系统状态不确定或环境扰动存在的情况下,根据系统模型进行预测并生成优化的控制曲线。MPC算法在很多领域有着广泛的应用,包括无人机控制。 CSDN(程序员技术社区)作为一个知名的技术社区,提供了大量有关无人机控制的资源和知识。在CSDN上,我们可以找到很多关于MPC算法在无人机控制的应用案例和技术讨论,这对于学习和研究无人机控制以及MPC算法非常有帮助。 无人机作为一种重要的无人系统,其控制算法对飞行性能和安全性至关重要。MPC算法能够根据无人机模型进行预测和优化控制,可以使无人机具备更好的飞行稳定性和控制精度。MPC算法在无人机控制的应用可以使得无人机能够在复杂的飞行环境实现自主控制、路径跟踪和避障等功能。 除了MPC算法,CSDN上还有其他无人机控制算法的介绍和讨论,如PID控制、神经网络控制等。学习和掌握这些算法,可以帮助开发者更好地设计和实现无人机控制系统。 总之,MPC算法在无人机控制有着广泛的应用前景,而CSDN作为一个技术社区,为我们提供了学习和交流无人机控制算法的平台。通过学习相关的知识和案例,我们可以深入了解无人机控制以及MPC算法在其的应用,从而提升我们的技术水平和能力。 ### 回答2: MPC CSDN无人机是一种由MPC(模型预测控制)算法控制,并在CSDN平台上开发的无人机。MPC是一种优化控制算法,通过对系统动态模型的预测来进行控制决策,以达到最优控制效果。这种算法具有良好的鲁棒性和适应性,适用于复杂环境下的控制问题。 MPC CSDN无人机在CSDN平台上的开发意味着它可以与其他开发者共享自己的代码和经验,并从平台上获取更多的开发资源和技术支持。这使得开发人员能够更快速地开发出功能更强大的无人机应用,并在开发过程得到其他人的帮助和指导。 MPC CSDN无人机的应用领域非常广泛。它可以应用于航空、灾害监测、农业、卫星通信等各个领域。在航空领域,它可以用于无人机飞行控制系统的设计与开发。在灾害监测领域,它可以搭载各种传感器,用于对灾区进行实时监测和数据收集。在农业领域,它可以进行作物生长监测、农药喷洒等工作,提高农业生产效率。在卫星通信领域,它可以搭载通信设备,用于提供更广泛的通信服务。 MPC CSDN无人机的研发与应用对于推动无人机技术的发展具有重要意义。它不仅可以帮助开发人员更好地理解和应用MPC算法,还可以促进开发者之间的合作与交流,推动无人机领域的创新与进步。相信随着技术的不断发展,MPC CSDN无人机将在各个领域发挥更大的作用,为人们的生活和工作带来更多便利和效益。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值