MATLAB에 기반 지능형 자동차 시뮬레이션 프로그램 - 프로그램

지능형 자동차 시뮬레이션 프로그램

어제, 아마 다음 테스트 프로그램, 당신은 시뮬레이션 효과가 여전히 가능 실행할 수 있습니다. 다음은 몇 가지 레코드의 이미지 데이터의 시뮬레이션입니다.
그림 삽입 설명 여기
이것은 카메라를 생성 GIF 차량의 촬영 화상의 이동이다. 단지 시뮬레이션 테스트의 결과이기 때문에, PID의 전체 제어를 작성하지 않은 이미지가 모터 일정한 전력 출력, 화상 빠르게 움직이는 쪽의 서보 제어 효과 이상이지만, 실제 속도은 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

이는 하위 기능에 관해서는 create_track.m을 관련되어 이전 map.mat 생성 프로그램, 그것은지도를 수정할 수 있습니다 create_track.m 내부의 데이터를 수정, 맵 파일을 생성하는 데 사용되는 것을 특징으로한다, 그러나 이것은 내가 이전 파일입니다 나는지도의 크기는 5m해야합니다, 그래서 내가 매개 변수를 설정 한 말을 잊었 * 6m (단위 길이 1m의 축). 그런 다음 실행 creat_map.m지도 정보를 생성 할 수 있습니다.

creat_gif.m

구동 상황을 기록하는 데 사용 스마트 자동차는이 문서의 전제는, mian.m는, 실행 한 후, 그 결과 그림은 각 프레임에 사진 폴더에 저장됩니다 마스크가있는 GIF에 생성 된 코드를 실행할 수 있습니다에있다 필요로하는 대부분의 현재 폴더에 저장 run.gif GIF가 지정됩니다. 의 I는 GIF 이미지를 넣어 시작하고있다. 쓰기에 코드 필요 몇 줄, 그것은 프로그램의 구현에 영향을 미치고 있기 때문입니다, 우리는 사용 여부를 결정해야 할 필요성을 참조하십시오.

프로그램은 우리가 용서, 많은 결함이 있고, 우리는 토론과 공통의 진행을 환영합니다. 감사합니다.

출시 두 원저 · 원 찬양 5 · 조회수 797

추천

출처blog.csdn.net/weixin_42208428/article/details/104342473