• 大小: 115KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-18
  • 语言: Matlab
  • 标签: 智能车  仿真  建模  

资源简介

对比原板的将代码规范化了,将各个部件之间进行分类再拼接.使用方法与之前一样creat_map是生成地图文件“map.mat”的,"test.m"是主文件。运行速度比之前慢了但代码可读性更高了。实际上后来想到可以用显卡加速的但是matlab显卡加速在不同的硬件环境中好像兼容性不好就没用了。

资源截图

代码片段和文件信息

classdef Body
    %车身机械结构 
    %车宽,车长,车重,摩擦系数,车身角度,车速,车轮半径,位置x,位置y
    properties
        body_width;
        body_lenth;
        body_weight;
        friction_coefficient;
        body_angle;
        body_speed;
        wheel_radius;
        body_location_x;
        body_location_y;
        friction;
    end
    
    methods
        function obj = Body(body_widthbody_lenthbody_weightfriction_coefficient...
                            body_anglebody_speedwheel_radiusbody_location_xbody_location_y)
        obj.body_width = body_width;
        obj.body_lenth = body_lenth;
        obj.body_weight = body_weight;
        obj.friction_coefficient = friction_coefficient;
        obj.body_angle = body_angle;
        obj.body_speed = body_speed;
        obj.wheel_radius = wheel_radius;
        obj.body_location_x = body_location_x;
        obj.body_location_y = body_location_y;
        obj.friction = body_weight*9.8*friction_coefficient;
        end
        
        function next_speed = cal_speed(objtorque)
            global dt;
            driving_force = torque/obj.wheel_radius;
            if(obj.body_speed == 0)
                if(driving_force < obj.friction)
                    sum_force = 0;
                else
                    sum_force = driving_force - obj.friction*(driving_force/abs(driving_force));
                end
            else
                sum_force = driving_force - obj.friction*(obj.body_speed/abs(obj.body_speed));
            end
            acceleration = sum_force/obj.body_weight;
            next_speed = obj.body_speed+acceleration*dt;
        end
        
        function [next_location_xnext_location_y] = cal_location(obj)
            global dt;
            next_location_x=obj.body_location_x+(obj.body_speed*dt)*cos(obj.body_angle);
            next_location_y=obj.body_location_y+(obj.body_speed*dt)*sin(obj.body_angle);
        end
        
        function next_body_angle = cal_body_angle(objsteering_angle)
            global dt;
            if(steering_angle==0)
                next_body_angle = obj.body_angle;
            else
                RL=abs(obj.body_lenth/sin(steering_angle));
                R=sqrt(RL*RL+(obj.body_width/2)*(obj.body_width/2)-2*RL*obj.body_width/2*cos(abs(steering_angle)));
                next_body_angle=obj.body_angle+(steering_angle/abs(steering_angle))*obj.body_speed*dt/R;
            end
            if(next_body_angle>=2*pi)
                next_body_angle=next_body_angle-2*pi;
            end
            if(next_body_angle<0)
                next_body_angle=2*pi+next_body_angle;
            end
        end
        
    end
    
end


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2765  2020-03-09 00:21  Body.m
     文件        2788  2020-03-23 23:59  Camera.m
     文件         986  2020-03-24 00:15  Chip.m
     文件        1691  2020-03-08 23:50  Motor.m
     文件         980  2020-03-23 23:47  Steer.m
     文件         576  2020-03-24 00:19  control.m
     文件         599  2020-03-15 23:50  creat_map.m
     文件         628  2020-03-15 23:48  creat_track.m
     文件         895  2020-03-24 00:09  main.m
     文件      264372  2020-03-16 00:00  map.mat
     文件        2297  2020-03-24 00:18  test.m

评论

共有 条评论