Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
5de89d6
新增LiDAR数据处理,增强传感器系统
Z-w-7799 Dec 18, 2025
8704ed7
多车辆协同与V2X通信模拟
Z-w-7799 Dec 18, 2025
688ff19
合并upstream/main,解决add/add和content冲突,保留自己的新文件
Z-w-7799 Dec 18, 2025
d652292
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 19, 2025
7eee0e6
传感器数据增强和多天气模拟
Z-w-7799 Dec 19, 2025
75497c7
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 19, 2025
8dcf6e2
内存和性能优化,数据格式标准化
Z-w-7799 Dec 19, 2025
c5b3fc5
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 19, 2025
ad2cd13
更新依赖文件
Z-w-7799 Dec 19, 2025
5fe1ccb
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 19, 2025
819c6cc
更新依赖文件 清除临时文件
Z-w-7799 Dec 19, 2025
fb8cca1
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 20, 2025
e2774e7
修复 gzip 导入问题修复性能监控
Z-w-7799 Dec 20, 2025
1c89585
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 20, 2025
1446fb4
优化数据收集器和传感器管理器
Z-w-7799 Dec 20, 2025
b3d1e21
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 21, 2025
6023f24
优化 data_analyzer.py - 添加更详细的分析和缓存机制
Z-w-7799 Dec 21, 2025
bcd0515
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 21, 2025
711cf95
添加配置验证和动态调整,添加批量处理和性能优化
Z-w-7799 Dec 21, 2025
96e821f
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 21, 2025
365bcfd
添加内存监控和早期停止机制
Z-w-7799 Dec 21, 2025
eab3be2
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 21, 2025
7bf2df9
为内存监控添加配置项,优化下采样函数
Z-w-7799 Dec 21, 2025
1f71867
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 21, 2025
1ab6196
修复了性能监控中的帧率计算问题
Z-w-7799 Dec 21, 2025
ca27ed3
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 21, 2025
a716e9a
重写readme文件 修改部分代码 去除注释
Z-w-7799 Dec 21, 2025
15daf52
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 21, 2025
27e134a
修改为符合规范的markdown 并加回原本应该存在的注释部分
Z-w-7799 Dec 21, 2025
782fa8a
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 21, 2025
c340d1a
修改为符合规范的markdown
Z-w-7799 Dec 21, 2025
6eb897b
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 21, 2025
576c773
add: ROS封装配置文件和修改后的源码
Z-w-7799 Dec 21, 2025
84d1f41
添加一个文件
Z-w-7799 Dec 21, 2025
91edb71
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 24, 2025
9552e81
新增行人安全监控器,增强场景管理器
Z-w-7799 Dec 24, 2025
df8b0de
Merge branch 'OpenHUTB:main' into feature/my-new-files
Z-w-7799 Dec 25, 2025
aa12359
场景管理增强,传感器增强
Z-w-7799 Dec 25, 2025
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
59 changes: 56 additions & 3 deletions src/enhance_pedestrian_safety/annotation_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,12 @@ def detect_objects(self, world, frame_num, timestamp):
'frame_id': frame_num,
'timestamp': timestamp,
'objects': [],
'camera_info': {}
'camera_info': {},
'safety_info': {
'pedestrian_count': 0,
'vehicle_count': 0,
'high_risk_interactions': 0
}
}

try:
Expand All @@ -36,6 +41,16 @@ def detect_objects(self, world, frame_num, timestamp):
annotations['objects'].append(obj_info)
self.object_counter += 1

# 更新安全统计
if 'walker' in obj_type:
annotations['safety_info']['pedestrian_count'] += 1
elif 'vehicle' in obj_type:
annotations['safety_info']['vehicle_count'] += 1

# 检测高风险交互
annotations['safety_info']['high_risk_interactions'] = self._detect_high_risk_interactions(
annotations['objects'])

self._save_annotations(frame_num, annotations)
return annotations

Expand Down Expand Up @@ -110,6 +125,30 @@ def _get_object_class(self, type_id):
else:
return 'unknown'

def _detect_high_risk_interactions(self, objects):
"""检测高风险交互"""
high_risk_count = 0
pedestrians = [obj for obj in objects if obj['class'] == 'pedestrian']
vehicles = [obj for obj in objects if obj['class'] in ['car', 'vehicle']]

for pedestrian in pedestrians:
for vehicle in vehicles:
# 计算距离
p_loc = pedestrian['location']
v_loc = vehicle['location']

distance = np.sqrt(
(p_loc['x'] - v_loc['x']) ** 2 +
(p_loc['y'] - v_loc['y']) ** 2 +
(p_loc['z'] - v_loc['z']) ** 2
)

# 如果距离小于5米,认为是高风险交互
if distance < 5.0:
high_risk_count += 1

return high_risk_count

def _save_annotations(self, frame_num, annotations):
"""保存标注到文件"""
filename = f"frame_{frame_num:06d}.json"
Expand All @@ -130,7 +169,13 @@ def _update_master_annotation(self):
'total_frames': len(self.frame_annotations),
'total_objects': self.object_counter,
'frames': list(self.frame_annotations.keys()),
'created': datetime.now().isoformat()
'created': datetime.now().isoformat(),
'safety_summary': {
'total_pedestrians': sum(f['safety_info']['pedestrian_count'] for f in self.frame_annotations.values()),
'total_vehicles': sum(f['safety_info']['vehicle_count'] for f in self.frame_annotations.values()),
'total_high_risk': sum(
f['safety_info']['high_risk_interactions'] for f in self.frame_annotations.values())
}
}

with open(master_file, 'w', encoding='utf-8') as f:
Expand All @@ -141,6 +186,7 @@ def generate_summary(self):
vehicle_count = 0
pedestrian_count = 0
other_count = 0
high_risk_count = 0

for frame_data in self.frame_annotations.values():
for obj in frame_data.get('objects', []):
Expand All @@ -151,14 +197,21 @@ def generate_summary(self):
else:
other_count += 1

high_risk_count += frame_data['safety_info']['high_risk_interactions']

summary = {
'total_frames': len(self.frame_annotations),
'total_objects': self.object_counter,
'vehicles': vehicle_count,
'pedestrians': pedestrian_count,
'other_objects': other_count,
'high_risk_interactions': high_risk_count,
'average_objects_per_frame': self.object_counter / len(
self.frame_annotations) if self.frame_annotations else 0
self.frame_annotations) if self.frame_annotations else 0,
'safety_metrics': {
'pedestrian_to_vehicle_ratio': pedestrian_count / max(1, vehicle_count),
'high_risk_percentage': high_risk_count / max(1, self.object_counter) * 100
}
}

summary_file = os.path.join(self.annotations_dir, "summary.json")
Expand Down
1 change: 0 additions & 1 deletion src/enhance_pedestrian_safety/carla_utils.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
"""
CARLA 工具模块 - 用于自动查找和配置 CARLA 路径
"""
# carla_utils.py
import sys
import os
import glob
Expand Down
87 changes: 68 additions & 19 deletions src/enhance_pedestrian_safety/config_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

try:
import yaml

YAML_AVAILABLE = True
except ImportError:
YAML_AVAILABLE = False
Expand Down Expand Up @@ -65,6 +66,13 @@ def suggest_optimizations(config: Dict[str, Any]) -> List[str]:
if len(enabled_outputs) > 5:
suggestions.append(f"启用的输出类型过多({len(enabled_outputs)}),可能影响性能,建议只启用必要的输出")

# 行人安全相关建议
if config.get('traffic', {}).get('pedestrians', 0) < 5:
suggestions.append("行人数量较少,建议增加行人数量以更好地测试行人安全")

if not config.get('v2x', {}).get('enabled', False):
suggestions.append("V2X通信未启用,建议启用以支持行人安全预警")

return suggestions


Expand Down Expand Up @@ -193,7 +201,8 @@ def optimize_for_safety(config: Dict[str, Any]) -> Dict[str, Any]:
'walker.pedestrian.0002',
'walker.pedestrian.0003',
'walker.pedestrian.0004'
]
],
'speed_limit': 30.0 # 添加车速限制
})

# 优化传感器配置以更好地检测行人
Expand Down Expand Up @@ -225,14 +234,17 @@ def optimize_for_safety(config: Dict[str, Any]) -> Dict[str, Any]:
v2x.update({
'enabled': True,
'communication_range': 300.0,
'update_interval': 1.0 # 更频繁地更新
'update_interval': 1.0, # 更频繁地更新
'enable_safety_warnings': True,
'pedestrian_warning_threshold': 10.0 # 行人警告距离阈值
})

coop = optimized.setdefault('cooperative', {})
coop.update({
'num_coop_vehicles': 2,
'enable_shared_perception': True,
'enable_traffic_warnings': True,
'enable_pedestrian_warnings': True, # 启用行人警告
'enable_maneuver_coordination': False,
'data_fusion_interval': 0.5, # 更频繁地融合
'max_shared_objects': 100,
Expand All @@ -247,7 +259,8 @@ def optimize_for_safety(config: Dict[str, Any]) -> Dict[str, Any]:
'compression_level': 3,
'enable_memory_cache': True,
'max_cache_size': 40,
'frame_rate_limit': 8.0
'frame_rate_limit': 8.0,
'safety_monitoring_interval': 1.0 # 安全监控间隔
})

# 输出配置
Expand All @@ -260,16 +273,33 @@ def optimize_for_safety(config: Dict[str, Any]) -> Dict[str, Any]:
'save_fusion': True,
'save_cooperative': True,
'save_enhanced': True,
'save_safety_reports': True, # 保存安全报告
'validate_data': True,
'run_analysis': True,
'run_quality_check': True
'run_quality_check': True,
'generate_safety_summary': True # 生成安全摘要
})

# 增强配置
enhanced = optimized.setdefault('enhancement', {})
enhanced.update({
'enabled': True,
'enable_random': True,
'quality_check': True,
'save_original': True,
'save_enhanced': True,
'calibration_generation': True,
'enhanced_dir_name': 'enhanced',
'methods': ['normalize', 'contrast', 'brightness', 'pedestrian_highlight', 'safety_warning'],
'weather_effects': True,
'augmentation_level': 'medium',
'pedestrian_safety_mode': True # 启用行人安全模式
})

return optimized


class ConfigManager:

PRESET_CONFIGS = {
'balanced': {
'description': '平衡配置 - 兼顾性能和质量',
Expand Down Expand Up @@ -338,8 +368,8 @@ def load_config(config_file: Optional[str] = None, preset: Optional[str] = None)
def _get_default_config() -> Dict[str, Any]:
return {
'scenario': {
'name': 'multi_sensor_scene',
'description': '多传感器协同数据采集场景',
'name': 'pedestrian_safety',
'description': '行人安全增强数据采集场景',
'town': 'Town10HD',
'weather': 'clear',
'time_of_day': 'noon',
Expand All @@ -351,7 +381,7 @@ def _get_default_config() -> Dict[str, Any]:
'traffic': {
'ego_vehicles': 1,
'background_vehicles': 8,
'pedestrians': 6,
'pedestrians': 12, # 增加默认行人数量
'traffic_lights': True,
'batch_spawn': True,
'max_spawn_attempts': 5,
Expand All @@ -363,8 +393,11 @@ def _get_default_config() -> Dict[str, Any]:
],
'pedestrian_types': [
'walker.pedestrian.0001',
'walker.pedestrian.0002'
]
'walker.pedestrian.0002',
'walker.pedestrian.0003',
'walker.pedestrian.0004'
],
'speed_limit': 30.0
},
'sensors': {
'vehicle_cameras': 4,
Expand Down Expand Up @@ -406,16 +439,19 @@ def _get_default_config() -> Dict[str, Any]:
'latency_mean': 0.05,
'latency_std': 0.01,
'packet_loss_rate': 0.01,
'message_types': ['bsm', 'spat', 'map', 'rsm', 'perception', 'warning'],
'message_types': ['bsm', 'spat', 'map', 'rsm', 'perception', 'warning', 'pedestrian_warning'],
'update_interval': 2.0,
'security_enabled': False,
'encryption_level': 'none',
'qos_policy': 'best_effort'
'qos_policy': 'best_effort',
'enable_safety_warnings': True,
'pedestrian_warning_threshold': 10.0
},
'cooperative': {
'num_coop_vehicles': 2,
'enable_shared_perception': True,
'enable_traffic_warnings': True,
'enable_pedestrian_warnings': True,
'enable_maneuver_coordination': False,
'data_fusion_interval': 1.0,
'max_shared_objects': 50,
Expand All @@ -431,9 +467,10 @@ def _get_default_config() -> Dict[str, Any]:
'save_enhanced': True,
'calibration_generation': True,
'enhanced_dir_name': 'enhanced',
'methods': ['normalize', 'contrast', 'brightness'],
'methods': ['normalize', 'contrast', 'brightness', 'pedestrian_highlight', 'safety_warning'],
'weather_effects': True,
'augmentation_level': 'medium'
'augmentation_level': 'medium',
'pedestrian_safety_mode': True
},
'performance': {
'batch_size': 5,
Expand Down Expand Up @@ -468,6 +505,7 @@ def _get_default_config() -> Dict[str, Any]:
},
'sensor_cleanup_timeout': 0.5,
'frame_rate_limit': 5.0,
'safety_monitoring_interval': 1.0,
'memory_management': {
'gc_interval': 50,
'max_memory_mb': 500,
Expand All @@ -479,16 +517,18 @@ def _get_default_config() -> Dict[str, Any]:
'output_format': 'standard',
'save_raw': True,
'save_stitched': True,
'save_annotations': False,
'save_annotations': True,
'save_lidar': True,
'save_fusion': True,
'save_cooperative': True,
'save_v2x_messages': True,
'save_enhanced': True,
'save_safety_reports': True,
'validate_data': True,
'run_analysis': False,
'run_analysis': True,
'run_quality_check': True,
'generate_summary': True,
'generate_safety_summary': True,
'compression_enabled': True,
'file_naming': 'sequential',
'backup_original': False
Expand All @@ -501,7 +541,9 @@ def _get_default_config() -> Dict[str, Any]:
'performance_log_interval': 10.0,
'enable_progress_bar': True,
'enable_real_time_stats': True,
'stats_update_interval': 5.0
'stats_update_interval': 5.0,
'enable_safety_monitor': True,
'safety_log_interval': 2.0
},
'debug': {
'enable_debug_mode': False,
Expand All @@ -514,7 +556,7 @@ def _get_default_config() -> Dict[str, Any]:
'metadata': {
'version': '1.0.0',
'author': 'CVIPS System',
'description': '多传感器协同数据采集配置',
'description': '行人安全增强数据采集配置',
'created': '',
'modified': ''
}
Expand Down Expand Up @@ -686,6 +728,7 @@ def print_config_summary(config: Dict[str, Any]):
print(f" 主车: {traffic['ego_vehicles']}")
print(f" 背景车辆: {traffic['background_vehicles']}")
print(f" 行人: {traffic['pedestrians']}")
print(f" 车速限制: {traffic.get('speed_limit', '无')} km/h")
print(f" 交通灯: {'启用' if traffic['traffic_lights'] else '禁用'}")

sensors = config['sensors']
Expand All @@ -702,19 +745,21 @@ def print_config_summary(config: Dict[str, Any]):
if v2x['enabled']:
print(f" 通信范围: {v2x['communication_range']}米")
print(f" 更新间隔: {v2x['update_interval']}秒")
print(f" 安全警告: {'启用' if v2x.get('enable_safety_warnings', False) else '禁用'}")

coop = config['cooperative']
print(f"\n🤝 协同感知:")
print(f" 协同车辆: {coop['num_coop_vehicles']}")
print(f" 共享感知: {'启用' if coop['enable_shared_perception'] else '禁用'}")
print(f" 交通警告: {'启用' if coop['enable_traffic_warnings'] else '禁用'}")
print(f" 行人警告: {'启用' if coop.get('enable_pedestrian_warnings', False) else '禁用'}")

perf = config['performance']
print(f"\n⚡ 性能:")
print(f" 批处理大小: {perf['batch_size']}")
print(f" 压缩: {'启用' if perf['enable_compression'] else '禁用'}")
print(f" 下采样: {'启用' if perf['enable_downsampling'] else '禁用'}")
print(f" 帧率限制: {perf['frame_rate_limit']} FPS")
print(f" 安全监控间隔: {perf.get('safety_monitoring_interval', 1.0)}秒")

output = config['output']
print(f"\n💾 输出:")
Expand All @@ -724,6 +769,10 @@ def print_config_summary(config: Dict[str, Any]):
if isinstance(v, bool) and v and k.startswith('save_')]
print(f" 启用输出: {', '.join(enabled_outputs)}")

print(f"\n🛡️ 行人安全:")
print(f" 安全监控: {'启用' if config['monitoring'].get('enable_safety_monitor', False) else '禁用'}")
print(f" 增强安全模式: {'启用' if config['enhancement'].get('pedestrian_safety_mode', False) else '禁用'}")

print("=" * 60)

@staticmethod
Expand Down
Loading
Loading