“在代码的海洋里,有无尽的知识等待你去发现。我就是那艘领航的船,带你乘风破浪,驶向代码的彼岸。
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
本项目聚焦于移动机器人的关键技术,包括定位、路径规划和控制。 在定位方面,致力于通过多种传感器(如激光雷达、摄像头、惯性测量单元等)获取环境信息,并结合相应算法(如卡尔曼滤波、粒子滤波等)来精确确定机器人在空间中的位置。 路径规划环节,需考虑环境中的障碍物、目标位置以及机器人的运动约束,运用算法(如 A*算法、人工势场法等)生成最优或近似最优的路径。 控制方面,根据规划好的路径和实时的定位信息,设计控制器(如 PID 控制器、模糊控制器等)来控制机器人的速度、转向等运动参数,以确保机器人能够稳定、准确地沿着预定路径行驶,同时能够应对环境中的不确定性和干扰。 通过对这三个关键环节的精心设计和实现,使移动机器人能够在复杂的环境中高效、自主地完成各种任务。
📚2 运行结果
主函数部分代码:
clear;
close all;
clc;
%% Reference trajectory
Path_planning;
load Path_planning_variables.mat X dX nsteps O T;
parameters;
X = X';
dX = dX';
X0 = [X(1,1),X(2,1),X(3,1)];
x_star = X(1,1);
y_star = X(2,1);
theta_star = X(3,1);
xd_star = dX(1,1);
yd_star = dX(2,1);
k1 = 5;
k2 = 5;
b = 0.2;
X0_column_size = size(X0,2);
step_size = nsteps-1;
XReal = zeros(step_size,X0_column_size); % state
X_Kestimated = zeros(X0_column_size,step_size); % Kalman estimator
X_Kpredredicted = zeros(X0_column_size,step_size);% Kalman predictor
X_measured = zeros(size(X,1)-1,step_size); % Coordenates obtained with trilateration
v = zeros(step_size,1); % translational speed input
w = zeros(step_size,1); % rotational speed input
yk = zeros(size(S,1),step_size);
v_noise = zeros(nsteps,size(V,1));
w_noise = zeros(nsteps,size(W,1));
for k = 1:nsteps
w_noise(k,:) = (sqrt(W) * randn(size(W,1),1))'; % proccess noise
v_noise(k,:) = (sqrt(V) * randn(size(V,1),1))'; % measurement noise
end
%% Robot evolution
h = figure(6);
Xhat0 = X0';
ekf = EKF(@phi,@h_fun,@Ak_LZ,@Ck_LZ,Xhat0,P0,V,W); % object
f_robot = @(t,X)(robot_control_FL(X,x_star,y_star,xd_star,yd_star,k1,k2,b));
[t,evolution] = ode45(f_robot,[0,Ts],X0);
for i = 1:length(X)-1
evolution_last_row = evolution(length(evolution),:);
XReal(i,:) = evolution_last_row + w_noise(i,:);
%XReal(i,:) = evolution(length(evolution),:);
thetareal = enrollTheta(XReal(i,3)); % to keep theta between 0 and 2pi
state_real = [XReal(i,1:2) thetareal];
Xdot = robot_control_FL(state_real,x_star,y_star,xd_star,yd_star,k1,k2,b);
v(i,1) = norm(Xdot(1,1) + Xdot(2,1)); %translational speed input
w(i,1) = Xdot(3,1); %rotational speed input
distance = h_fun([XReal(i,1);XReal(i,2)],0);
uk = [v(i,1) w(i,1)]; %controller output
yk(:,i) = distance + v_noise(i,:)'; %measurement
%yk(:,i) = distance;
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]杜雯雯,徐伟,朱向珺.药品临床综合评价管理工作的核心环节及实现路径设计[J].中国药房,2024,35(12):1413-1418.
[2]兰翠芹,贺爽,宋佳珈.向自然学习的设计创新方法研究——数字生物设计路径探索[J].艺术设计研究,2024(03):5-12.