我是靠谱客的博主 仁爱酸奶,最近开发中收集的这篇文章主要介绍基于MATLAB的智能车仿真程序——程序篇智能车仿真程序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

智能车仿真程序

昨天,大概试了下程序,可以运行,仿真效果还是可以的。下面是几个记录的仿真数据的图像。
在这里插入图片描述
这个是车辆行驶过程中摄像头拍摄到的图像,生成的gif。因为只是测试仿真效果,没有写出完整的pid的控制,上面这个图像是在电机恒定功率输出,舵机只用p调控的效果,图像是动的很快,但实际速度只有0.16m/s。最后还冲出了赛道。下面是赛车行驶曲线与实际赛道中心线的对比图。
在这里插入图片描述
蓝色是是实际赛道中心线,橙色是智能车的行驶轨迹。跑的效果不怎样,不过我们看的是仿真效果,路线连续,没有折点,仿真的原理上应该是没有大问题了,至于真实还原度,因为困在家里,没有实际数据给我做对比,不好判断,但看图,应该是不错的。
下面是程序的截图
在这里插入图片描述
程序的设计思想大概如下吧,手残,字不好,画工也不好,见谅哈。
在这里插入图片描述
可以看出最后是仿真程序和控制程序之间的一个闭环控制。
以下是程序中的main.m的内容,整个程序我都上传到了资源文件,大家可以先下载下来用

clc;clear;
%%仿真步长参数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dt=0.001;% 仿真时间间隔 单位米
ds=0.001;% 地图采样点间距 单位米
%%车身及电机参数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
m=1;%车重 单位 千克
p0=2;%车辆启动所需功率 单位 瓦
power=2.5;%启动时刻电机总功率,后续变化由控制程序决定。
kf=0.5;%摩擦系数
g=9.8; %重力系数
u=0.8;%电机效率
L=0.3;%车长 单位米
W=0.12;%车宽 单位米
v_c=0;%车速 单位 米/秒
x0=0;y0=0;%车辆起始点
a0=0;%当前轮转角 初始为0 后续由程序和舵机机械性能共同决定。
a=0; %下一刻前轮转角 初始为0 后续由程序和舵机机械性能共同决定。
wheel_angle=0;%初始时刻程序输出目标转角。
turn_force=pi;%转向能力设置 单位 角度/秒
full_angle=pi/4;%前轮最大转向角,相对车身中轴线。
CA0=0;%起始车身角度,相对于x轴正方向
%%摄像头参数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
hc=0.2;%摄像头放置高度 单位米
near_point=0.2;%摄像头图像近点距离 单位米
far_point=1.2;%摄像头图像远点距离 单位米
camera_angle=pi/2;%摄像头的角度
pixel_w=60;%摄像头像素 宽
pixel_h=80;%摄像头像素 高
%%摄像头参数计算%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[dh,dw]=cal_camera(hc,far_point,near_point,camera_angle,pixel_w,pixel_h);
%%程序性能(仿真图像帧数)设置%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FPS=60;%帧率
fps_time=floor((1/FPS)*1000)/1000;%每帧图像之间的时间间隔
%%初始化赛道程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load('map.mat');%下载地图
[track_x,track_y]=creat_track(ds);%%赛道中心线轨迹
image=get_image(x0,y0,CA0,dw,dh,IMAGE,pixel_h,pixel_w);%初始化摄像头图像
figure(1);
imh=imshow(image);
set(imh, 'erasemode', 'none');
gif_num=1;%图像序列号(及第几帧)
i=1;
for time=0:dt:300
[x(i),y(i)]=run(CA0,v_c,x0,y0,dt);
x0=x(i);
y0=y(i);
if(mod(time*1000,fps_time*1000)==0)%%%由设置的程序性能(图像帧数)判断是否进入控制程序
[image,black_pixel_num]=get_image(x0,y0,CA0,dw,dh,IMAGE,pixel_h,pixel_w);
[power,wheel_angle]=control(v_c,image);
set(imh, 'cdata', image);
%%%%%%%%%%不需要生成GIF,将以下代码屏蔽。此代码很影响程序执行速度%%%%%%%%%%%%%%%%%%%%%%%
%
if(mod(time*1000,100)==0)
%
picname=['./picture/',num2str(gif_num),'.fig'];
%
saveas(gcf,picname);
%
gif_num=gif_num+1;
%
end
%%%%%%%%%%不需要生成GIF,将以上代码屏蔽。此代码很影响程序执行速度%%%%%%%%%%%%%%%%%%%%%%%
end
if(black_pixel_num>4500) %%%判断赛车是否冲出赛道
break;
end
a=frontwheel_angle(wheel_angle,full_angle,turn_force,a0,dt);
v(i)=speed_model(v_c,power,dt,m,p0,kf,g,u);% current speed; power ; dt.
CA(i)=turn_model(CA0,v_c,a,dt,L,W);% current body angle;current speed;wheel angle;dt
v_c=v(i);
CA0=CA(i);
a0=a;
i=i+1;
pause(0.001)
end
figure(2);
time=0:dt:100;
axis([-3 3 -1 4]);
hold on;
grid on;
plot(track_x,track_y);
hold on;
plot(x,y);

前面就是一些参数的设置,因为后面编写代码的时候没有太注意我的参数是不是已经设置了,或者使用参数,所以有些参数是不能改的,参数的含义我也都有注明,我试过了大多数参数都是可以改的,大家也可以自己试试。

关于程序的使用

程序中共有main.m;creat_gif.m,creat_map.m三个可执行程序(test.m大家不用管,那是我写程序时打的草稿)。下面一一介绍。

main.m

就是仿真的程序的主函数,但是它的使用的前提必须由地图信息,也是我之前截图中的map.mat文件。整个程序的中的大多数子函数都是为它服务的,子函数的作用我在子函数的注释行也有说明,点进去看就行了,完全开源的。大家也可以随意修改。

creat_map.m

这个就是前面所说的map.mat的生成程序,它至于create_track.m的子函数关联,是用来生成地图文件的,修改create_track.m里面的数据就可以修改地图,但是这个文件就是我之前所说的我忘记我已经设置参数了,所以地图的大小必须是5m*6m(坐标轴中一个单位长度1m)。然后运行creat_map.m就可以生成地图信息。

creat_gif.m

用来记录智能车的行驶情况的,这个文件可以运行的前提是将mian.m中关于生成gif的代码解除屏蔽,之后运行一次,生成的每帧图片会保存在picture文件夹,最中需要的gif,会命名为run.gif保存在当前文件夹。也就是我开头放的那个gif图像。这几行代码因为需要写入操作,很影响程序的执行,大家看需要决定是否使用。

程序还有很多不完善的地方,大家多多见谅,也欢迎大家一起讨论,共同进步。谢谢大家。

最后

以上就是仁爱酸奶为你收集整理的基于MATLAB的智能车仿真程序——程序篇智能车仿真程序的全部内容,希望文章能够帮你解决基于MATLAB的智能车仿真程序——程序篇智能车仿真程序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部