Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1027,7 +1027,7 @@ def main():
argparser.add_argument(
'-i', '--intersection',
metavar='INTERSECTION',
default='road_intersection_1', # 默认路口
default='road_intersection_3', # 默认路口
help='Name of the intersection within the town (default: road_intersection_1)'
)
args = argparser.parse_args()
Expand Down
37 changes: 26 additions & 11 deletions waypoint_control/multi_obj_track/demo.m
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,12 @@

% 用户输入地图名和路口编号
townName = 'Town10'; % 例如 Town01 或 Town10)
juncNum = 1; % 请输入路口编号(1 或 2)
juncNum = 4; % 请输入路口编号(1 或 2)

data = load('/mnt/mydrive/traffic_twin/waypoint_control/multi_obj_track/v2x_latency_logs/simulation_total_time.mat');
t_start = data.last_receive_time;
% 获取程序开始时间
sys_time_before = posixtime(datetime('now'));
% 根据输入选择配置
if isfield(dataset, townName)
townConfig = dataset.(townName);
Expand Down Expand Up @@ -33,20 +37,31 @@
convertTrackToCarlaCoordinate(junc, transMatrix);

%% 计算单个路口跟踪指标并保存
%currentPath = fileparts(mfilename('fullpath'));
%folderPath = fullfile(currentPath, 'Evaluation');
% 将文件夹添加到路径
%addpath(folderPath);
%demoSingleJuncEvaluation(junc, juncConfig.juncNum);
%if strcmp(townName, 'Town10')
% currentPath = fileparts(mfilename('fullpath'));
% folderPath = fullfile(currentPath, 'Evaluation');
%% 将文件夹添加到路径
% addpath(folderPath);
% demoSingleJuncEvaluation(junc, juncConfig.juncNum);
% if strcmp(townName, 'Town10')
% townPath = [townName 'HD_Opt_Metric'];
%else
% else
% townPath = [townName '_Metric'];
%end
%MCTPResults = demoMultiSensorEvaluation(townPath);
% end
% MCTPResults = demoMultiSensorEvaluation(townPath);
else
error('路口编号不存在!');
end
else
error('地图名不存在!');
end
end

% 获取程序结束时间
sys_time_after = posixtime(datetime('now'));
% 计算程序耗时
program_run_time = sys_time_after - sys_time_before;
% 得出在线结束时间
t_end = t_start + program_run_time;
% 保存为.mat 文件
save_folder = '/mnt/mydrive/traffic_twin/waypoint_control/multi_obj_track';
mat_save_path = fullfile(save_folder, 'matlab_final_timeline.mat');
save(mat_save_path, 't_start', 't_end', 'program_run_time');
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import os
import random
import time
import re
from fastdtw import fastdtw
from config import IntersectionConfig, town_configurations
from global_route_planner import GlobalRoutePlanner
Expand Down Expand Up @@ -251,6 +252,52 @@ def create_pedestrian_move(start_location, end_location, world, totaltime):
return position_history


def read_matlab_timeline(file_path):
"""
读取 matlab_final.txt 文件,提取起始时间、终止时间和总耗时
"""
# 初始化一个字典来存放提取到的数据
extracted_data = {
"start_time": None,
"end_time": None,
"total_cost": None
}

if not os.path.exists(file_path):
print(f"错误:找不到文件 {file_path}")
return extracted_data

# 定义正则表达式,兼容中文全角冒号 ":" 和英文半角冒号 ":"
# 匹配规则:找到指定文字和冒号,然后提取后面的所有数字和小数点
pattern_start = re.compile(r"起始时间[::]\s*([0-9\.]+)")
pattern_end = re.compile(r"终止时间[::]\s*([0-9\.]+)")
pattern_total = re.compile(r"总耗时[::]\s*([0-9\.]+)")

try:
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()

# 提取起始时间
match_start = pattern_start.search(content)
if match_start:
extracted_data["start_time"] = float(match_start.group(1))

# 提取终止时间
match_end = pattern_end.search(content)
if match_end:
extracted_data["end_time"] = float(match_end.group(1))

# 提取总耗时
match_total = pattern_total.search(content)
if match_total:
extracted_data["total_cost"] = float(match_total.group(1))

return extracted_data

except Exception as e:
print(f"读取文件出错: {e}")
return extracted_data

def main():
argparser = argparse.ArgumentParser(
description=__doc__)
Expand All @@ -275,6 +322,10 @@ def main():
args = argparser.parse_args()
np.random.seed(42)
random.seed(42)
# 读取起始时间
file_path = "../matlab_final.txt"
all_time = read_matlab_timeline(file_path)
str_time = time.time()
# 连接到Carla服务器
client = carla.Client(args.host, args.port)
client.set_timeout(10.0)
Expand Down Expand Up @@ -717,6 +768,13 @@ def main():
for line in sorted_lines:
file.write(line)

# 保存最终时间
end_time = time.time()
duration = end_time - str_time
final_time = all_time['end_time'] + duration
with open("final.txt", "w") as f:
f.write(f"{final_time:.2f}")


if __name__ == '__main__':
main()
60 changes: 23 additions & 37 deletions waypoint_control/multi_obj_track/reID/Utils/DEMO.m
Original file line number Diff line number Diff line change
@@ -1,49 +1,26 @@
%% 将生成的轨迹与外观特征绑定
%% 匹配轨迹之前,处理单个路口的轨迹id变化的情况
config;
townNameFull = 'Town10HD_Opt'; % 可以修改城镇和路口

if strcmp(townName, 'Town10HD_Opt')
townName = erase(townName, "HD_Opt");
end
%% 获取跟踪轨迹路径
currentPath = fileparts(mfilename('fullpath'));
% 获取当前路径的上级目录
parentPath = fileparts(currentPath);
% 再次获取上级目录,即上上级目录
grandparentPath = fileparts(parentPath);
addpath(grandparentPath)
dataPath = fullfile(grandparentPath, townNameFull);

%% 获取路口数量
d = dir(dataPath);
% 筛选出文件夹(排除 . 和 ..)
isDir = [d.isdir] & ~ismember({d.name}, {'.','..'});
% 文件夹数量
numFolders = sum(isDir);
data = load('/mnt/mydrive/traffic_twin/waypoint_control/multi_obj_track/matlab_final_timeline.mat');
t_start = data.t_end;
% 获取程序开始时间
sys_time_before = posixtime(datetime('now'));

townName = 'Town10'; % 可以修改城镇和;路口
dataSets = {'Town10HD_Opt/test_data_junc1', 'Town10HD_Opt/test_data_junc2', 'Town10HD_Opt/test_data_junc3', 'Town10HD_Opt/test_data_junc4', 'Town10HD_Opt/test_data_junc5'};

dataSets = arrayfun(@(i) fullfile(dataPath, sprintf('test_data_junc%d', i)), ...
1:numFolders, 'UniformOutput', false);
dirParts = strsplit(dataSets{1}, '\');
dirParts = strsplit(dataSets{1}, filesep);
townConfig = dataset.(townName);

for i = 1:length(dataSets)
[p, last1, ~] = fileparts(dataSets{i}); % 'test_data_junc1'

[p, last2, ~] = fileparts(p); % 'Town10HD_Opt'
% 合并
lastTwo = fullfile(last2, last1); % 'Town10HD_Opt\test_data_junc1'

juncField = sprintf('intersection_%d', i);
juncConfig = townConfig.(juncField);
transMatrix = juncConfig.TransformationMatrix;
loadAllTraj(lastTwo, transMatrix);
loadAllTraj(dataSets{i}, transMatrix);
end

%% 加载所有轨迹
currentPath = fileparts(mfilename('fullpath'));
juncTracksFolderPath = fullfile(currentPath, townNameFull);
juncTracksFolderPath = fullfile(currentPath, dirParts{1});
% 获取所有轨迹文件
matFiles = dir(fullfile(juncTracksFolderPath, "*.mat"));
numMatFiles = length(matFiles);
Expand All @@ -56,15 +33,24 @@
end

%% 轨迹匹配,链接全部路口的轨迹
matchThreshold = 0.7; % 车辆匹配阈值
matchThreshold = 0.65; % 车辆匹配阈值
traj = linkIdentities(juncTrajCell, matchThreshold);

% 获取程序结束时间
sys_time_after = posixtime(datetime('now'));
% 计算程序耗时
program_run_time = sys_time_after - sys_time_before;
% 得出在线结束时间
t_end = t_start + program_run_time;
% 保存为.mat 文件
save_folder = '/mnt/mydrive/traffic_twin/waypoint_control/multi_obj_track';
txt_save_path = fullfile(save_folder, 'matlab_final.txt');
fileID = fopen(txt_save_path, 'w');
fprintf(fileID, '起始时间:%.6f\n终止时间:%.6f\n总耗时:%.4f', t_start, t_end, program_run_time);
fclose(fileID);

% 获取当前目录
currentFileDir = fileparts(mfilename('fullpath'));

% 保存 traj 到当前目录下的 traj.mat 文件
save(fullfile(currentFileDir, 'traj.mat'), 'traj');

computeSpeedCorrelations(townName)

computeDelay(townName)
Loading