移动机器人路径跟踪的设计和仿真模型预测控制(Matlab代码实现)

 👨‍🎓个人主页:研学社的博客  

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

在轨迹跟踪应用领域,通常 MPC 建模可根据机器人的控制方式选择基于运动学运动状态方程建模或者基于动力学运动状态方程建模。前者是根据车辆转向的几何学角度关系和速度位置关系来建立描述车辆的运动的预测模型,一般只适用于低速运动场景;后者是对被控对象进行综合受力分析,从受力平衡的角度建模,一般应用在高速运动场景,如汽车无人驾驶。本文基于双轮差速运动学模型,推导实现差速运动的MPC轨迹跟踪控制。 双轮差速运动学线性 MPC 轨迹跟踪实现的基本思路是状态方程–线性化–离散化–预测方程–约束线性化–非线性目标函数转为二次规划–求解最优问题。其中线性化可采用泰勒级数展开忽略高次项的方式,离散化可采用后向差分法,这两个部分都有一定的模型精度丢失。

📚2 运行结果

主函数部分代码:

clc;clear all;close all;% Initial state x(0)X0=[0;0;(0*pi)/180];%X0 =[2.3917 ;-1.3973;-1.2586];vk=0;Ts=0.005;%thetak=(120*pi)/180;thetak=-1.2586;wk=0;D=zeros(3,1);N=50;Xr=[-2 10 atan(1)]';% Xr(3)=(atan((-50-X0(2))/(50-X0(1))));% Xr(3)=(atan((Xr(2)-X0(2))/(Xr(1)-X0(1))));s=3;Simlength=(s/Ts);       % Define cost functionx| and expected disturbancesQ=[0.00001 0 0;0 1 0;0 0 100000000];R=[0.01 0;0 100];W=ones(1,N)';  % expected demand (this is just an example)[A B C]=model_system(vk,thetak,Ts);[Gx,Gu,Gw]=constants_mpc(A,B,D,N);% Build R_hatR_hat = kron(eye(N),R);% Build Q_hatQ_hat=kron(eye(N),Q);% ConstraintsAx=[1 0 0;0 1 0;-1 0 0 ;0 -1 0];bx=100*[150; 150;150; 150];Au=[1 0;0 1 ;-1 0;0 -1];bu=[2; 0.01; 0; 0.01];% Transform into U constraintsAu_hat=kron(eye(N),Au);bu_hat=kron(ones(N,1),bu);Ax_hat=kron(eye(N),Ax);bx_hat=kron(ones(N,1),bx);% Aggregated U constraintsAU=[Ax_hat*Gu; Au_hat];bU=[bx_hat-Ax_hat*Gx*X0-Ax_hat*Gw*W;bu_hat];% MPC into actionXhist=X0;Uhist=[];VK=vk;THK=thetak;Disturb= normrnd(0.5,1,Simlength+N,1); %Longer than simulation for prediction horizon% Simulation loopXR=[];% figure();% plot(Xhist(1,:),Xhist(2,:),'b')% ylabel('y');% xlabel('X');% title('Trayectory');% grid on;% hold on;for k=1:Simlength    % expected disturbances (force that they are different)    W=0*Disturb(k:k+N-1)+0*normrnd(0,0.2,N,1);     % Update controller matrices for current state and disturbances (H and Au are constant)    [A B C]=model_system(vk,thetak,Ts);    Xr(3)=(atan((Xr(2)-X0(2))/(Xr(1)-X0(1))));    %Xr(3)=(atan((-50-X0(2))/(50-X0(1))));    [H,F,AU,bU]=MPC_U(A,B,D,N,W,X0,Xr,Q_hat,R_hat,Au_hat,bu_hat,Ax_hat,bx_hat);    UMPC=quadprog(2*H,2*F,AU,bU);    XR=[XR Xr];    % Apply only first component    u=UMPC(1:size(B,2));%     X1=linearModel(A,B,D,u,Disturb(k),X0);    X1=nonlinearModel(D,u,Disturb(k),X0,thetak,wk,vk,Ts);    vk=saturated(0,20,vk+u(1));    wk=saturated(-1,1,wk+u(2));    thetak=X1(3);    X0=X1;    VK=[VK vk];    THK=[THK thetak];    Xhist=[Xhist X0];    Uhist=[Uhist u];%     plot(Xhist(1,:),Xhist(2,:),'b')%     ylabel('y');%     xlabel('X');%     title('Trayectory');%     grid on;%     hold on;%     pause(0.1);%     Xpredict=Gx*X0+Gu*UMPC+Gw*W;%     Xp=Xpredict(1:3:end);%     Yp=Xpredict(2:3:end);%     THp=Xpredict(3:3:end);%     plot(Xp,Yp,'R')end

🎉3 参考文献

​[1]张明路,丁承君,段萍.移动机器人的研究现状与趋势[J].河北工业大学学报,2004(02):110-115.

部分理论引用网络文献,若有侵权联系博主删除。

🌈4 Matlab代码实现

### 如何在 Vite React TypeScript 项目中配置 `eslint.config.js` #### 安装必要的依赖 为了使 ESLint 能够正确解析处理 React TypeScript 文件,在 Vite 项目中需安装如下开发依赖: ```bash npm install -D eslint @babel/eslint-parser eslint-plugin-react eslint-plugin-react-hooks typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin prettier eslint-config-prettier eslint-plugin-prettier ``` 此命令会安装 ESLint 及其 Babel 解析器,React 插件以及针对 TypeScript 的支持工具[^2]。 #### 初始化 ESLint 配置文件 通过运行初始化向导来创建基本的 `.eslintrc.json` 或者其他格式的基础配置文件: ```bash npx eslint --init ``` 这一步骤将引导完成一些选项的选择,以便自动生成适合项目的初始设置[^1]。 #### 创建或修改 `eslint.config.js` 对于希望集中管理配置的应用程序来说,可以直接编辑根目录下的 `eslint.config.js` 文件。下面是一个适用于 Vite + React + TypeScript 组合的例子: ```javascript // eslint.config.js module.exports = { root: true, parser: '@typescript-eslint/parser', plugins: ['@typescript-eslint', 'react'], extends: [ 'plugin:@typescript-eslint/recommended', 'airbnb', 'airbnb/hooks', 'plugin:react/recommended', 'plugin:prettier/recommended' ], settings: { react: { version: 'detect' // 自动检测使用的 React 版本 } }, env: { browser: true, es6: true, node: true }, rules: { // 添加特定规则覆盖默认行为 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', 'max-len': ['warn', { code: 100 }], ...require('@typescript-eslint/eslint-plugin').configs.recommended.rules, // 导入推荐的 TS 规则集 'import/extensions': [ 'error', 'ignorePackages', { js: 'never', jsx: 'never', ts: 'never', tsx: 'never' } ] }, overrides: [ { files: ['*.ts', '*.tsx'], // 对 .ts/.tsx 文件应用额外规则 rules: { '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/no-explicit-any': 'off' } } ] }; ``` 上述配置引入了多个插件并扩展了一些流行的风格指南,同时也调整了几项常见规则以适应现代 JavaScript/TypeScript 开发实践的需求。 #### 整合 Prettier 为了让代码格式化更加统一美观,可以在同一个配置文件里集成 Prettier 来负责最终的代码样式修正工作。确保已经按照前述步骤安装好了 `eslint-config-prettier` `eslint-plugin-prettier` 后,只需简单地将其加入到 `extends` 数组即可启用它们的功能。 #### 测试配置有效性 最后不要忘记测试新建立起来的 Linter 设置是否正常运作。可以通过执行以下命令来进行快速验证: ```bash npx eslint . ``` 这条指令会对当前目录及其子目录中的所有源码进行静态分析,并报告任何违反既定编码标准的地方[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值