如何在轨迹规划或轨迹序列中画一个好看的车辆示意图(MATLAB 代码实现)

本文介绍了如何将算法仿真的车辆轨迹序列以美观的方式可视化,关注点包括车辆位置、航向角、控制量、避障算法表示以及代码实现,通过实例展示了如何配置车辆参数并用Matlab函数展示动态视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0. Motivation

       发过论文或者准备发论文的小伙伴或都遇见个这样的问题,如何将算法仿真的车辆轨迹序列可视化得好看,这对于论文是否accepted有一定的影响,常见于轨迹规划,轨迹跟踪控制等算法仿真场景中。 

       在可视化时,抛去车辆的外形,需要将车辆的重要状态信息表示出来: 车辆的位置坐标,航向角,方向盘转角(轨迹跟踪控制中常见的控制量),速度信息。此外,如果车辆采用了避障算法,如三圆检测,轮廓膨胀等,需要实时将车辆的碰撞检测轮廓表示出来,效果会更加的直观。

1. Codes & Visuallization

codes overview

veh paras. setting


function Veh_CofigSetting(obj)
% set the veh_paras
obj.veh_cfg.Veh_L=4;
obj.veh_cfg.Veh_w=2;
obj.veh_cfg.rear_bumper_to_rear_axle = .7;   
obj.veh_cfg.front_bumper_to_front_axle = .7; 
obj.veh_cfg.wheel_base = 2.6;
obj.veh_cfg.half_width = 1;

% 轮胎参数(205/55R 16)
obj.veh_cfg.Tire_L=0.64;   % 轮胎直径(静止)
obj.veh_cfg.Tire_W=0.205;  % 轮胎宽度

% lf and lr are the front and rear
obj.veh_cfg.lf=1.4;
obj.veh_cfg.lr=1.2;
end

 veh vis.


function show_vehicle_rt(obj,todo_veh_sts,Fig_Num)

% Old style case
obj.plot_handle_list=[];

% veh pos shift
obj.vis_vehicle_sts=todo_veh_sts;

% veh_sts need to be row-vector
Veh_CofigSetting(obj);  set_color_matrix(obj)
Veh_Shape_Prototype(obj);
Veh_Shape_Shift(obj);

% preallo.
figure(Fig_Num)
for h=length(obj.shift_polyshape_list):-1:1
    if h==1  
        % plot the vehicle body
        cor_id=obj.veh_face_color_id; face_alpha=.0;    edge_alpha=1.0;   LineW=1.0;
    elseif h==9
        % veh part face
        cor_id=obj.veh_face_color_id; face_alpha=.3;    edge_alpha=0.0;   LineW=1.0;
    elseif h>=2 && h<=5
        cor_id=8; face_alpha=1.0;   edge_alpha=1.0;   LineW=2;
    elseif h>=6 && h<=8
        cor_id=8; face_alpha=0.0;   edge_alpha=1.0;   LineW=.4;
    end
    if obj.Vis_case_switch=="old_style" && h>=2; break; end
    cuur_veh_ele_handle=plot(obj.shift_polyshape_list(h,1), 'FaceColor', obj.color_List(cor_id,:),'FaceAlpha', face_alpha,'EdgeColor',obj.color_List(cor_id,:),'EdgeAlpha',edge_alpha,'LineWidth',LineW);
    % save the poly. handle
    obj.plot_handle_list=[obj.plot_handle_list;cuur_veh_ele_handle];
    hold on;
end 

if obj.Show_Colli_circle=="ON"; circle_handle_list=Plot_circle(obj,Fig_Num); obj.plot_handle_list=[obj.plot_handle_list;circle_handle_list];end

if obj.Basic_fig_infor_switch =="ON"
    axis equal;
    xlabel('Dir-X\it{/m}');ylabel('Dir-Y\it{/m}'); title("Vehicle visuallization demo. \it{\copyrightMMiL STU.}",'FontWeight','bold');set(gca,'FontName','times new roman','FontSize',12);
end

if obj.Veh_CoG_switch=="ON"; scatter_handle=scatter(todo_veh_sts(1,1),todo_veh_sts(1,2),60,'Marker','o','MarkerFaceColor',[1 0 0],'MarkerEdgeColor','none','MarkerFaceAlpha',1.0);hold on;
    obj.plot_handle_list=[obj.plot_handle_list;scatter_handle];
end

end

       这里构建了几个常见的可视化配色,见下:

      欢迎大家分享和讨论,一起进步。

### MATLAB车辆轨迹数据集的处理与分析 对于车辆轨迹数据集的处理和分析,在MATLAB环境中可以利用多种内置函数以及自定义算法实现复杂的数据解析。下面介绍一种典型的方法,该方法涵盖了读取、预处理、特征提取到最终可视化的全过程。 #### 1. 数据导入 假设有一个CSV文件包含了多个车辆随时间变化的位置坐标(X,Y),可以通过`readtable()`命令轻松加载这些数据: ```matlab data = readtable('vehicle_trajectories.csv'); ``` 此操作会创建一个表格对象,其中每一列代表特定属性,比如时间戳、ID号、经度、纬度等[^4]。 #### 2. 预处理 由于实际收集过程中可能存在噪声异常值,因此有必要先清理原始记录。这里推荐使用移动平均滤波器平滑路径,并通过删除超合理范围的速度值去除离群点: ```matlab % 计算速度作为相邻两点间距离除以采样间隔 speeds = sqrt(diff(data.X).^2 + diff(data.Y).^2)./diff(data.Time); % 移动窗口大小设定为5个样本点 windowSize = 5; smoothedSpeeds = movmean(speeds, windowSize); validIndices = smoothedSpeeds < thresholdValue; cleanData = data(validIndices,:); ``` 此处引入了阈值参数`thresholdValue`用于界定正常行驶状态下的最大允许瞬时速率;同时应用了长度为五的时间窗来进行简单的一维卷积运算,从而达到降噪目的[^4]。 #### 3. 特征计算 经过初步净化后的序列能够更准确地反映真实运动模式。接下来可进一步挖掘诸如加速度分布、转弯角度统计量之类的高层次特性指标: ```matlab accelerations = diff(smoothedSpeeds)/diff(cleanData.Time(2:end)); turnAngles = atan2d(diff(cleanData.Y), diff(cleanData.X)); figure; subplot(2,1,1); histogram(accelerations,'Normalization','probability'); title('Acceleration Distribution'); subplot(2,1,2); rose(turnAngles*pi/180); title('Turn Angle Histogram'); ``` 上述代码片段展示了如何绘制直方表示加速情况的概率密度估计,以及玫瑰呈现转向行为的角度频次谱型态[^4]。 #### 4. 可视化展示 最后一步则是将所有成果汇总成直观易懂的形式供后续解读参考。考虑到地理信息系统的特点,建议借助Google Earth API其他第三方插件构建交互式的三维场景漫游效果,不过最基础的方式还是直接调用plot系列指令完成二维平面投影示意: ```matlab uniqueIDs = unique(cleanData.ID); colors = lines(length(uniqueIDs)); for i=1:length(uniqueIDs) idx = cleanData.ID == uniqueIDs(i); plot(cleanData.X(idx), cleanData.Y(idx),'Color', colors(i,:)); hold on; end xlabel('Longitude (\circ)'); ylabel('Latitude (\circ)'); title('Vehicle Trajectory Visualization'); legend(arrayfun(@(x)sprintf('Car #%d', x), uniqueIDs, 'UniformOutput', false)); hold off; ``` 这段脚本实现了根据不同个体分配颜色标记并依次绘其完整的行动路线的功能,使得整体布局清晰有序且便于对比观察各目标间的相对位置关系[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@Liooo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值