125 lines
4.3 KiB
Python
125 lines
4.3 KiB
Python
"""
|
|
环境感知示例
|
|
演示如何使用环境感知和响应机制
|
|
"""
|
|
|
|
from panda3d.core import Vec3
|
|
import sys
|
|
import os
|
|
|
|
# 添加插件路径
|
|
plugin_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
sys.path.insert(0, plugin_dir)
|
|
|
|
from swarm_manager import SwarmManager
|
|
from config import Config
|
|
|
|
def create_environment_demo(world):
|
|
"""
|
|
创建环境感知演示
|
|
"""
|
|
print("创建环境感知演示...")
|
|
|
|
# 创建群体管理器
|
|
swarm_manager = SwarmManager(world)
|
|
|
|
# 配置环境感知参数
|
|
config = swarm_manager.config
|
|
|
|
# 启用环境感知
|
|
config.set("environment_awareness_enabled", True)
|
|
|
|
# 设置传感器参数
|
|
config.set("sensor_range", 20.0) # 增加传感器范围
|
|
config.set("sensor_accuracy", 0.95) # 提高传感器精度
|
|
|
|
# 设置环境响应权重
|
|
config.set("obstacle_response_weight", 2.5)
|
|
config.set("predator_response_weight", 3.5)
|
|
config.set("resource_seek_weight", 0.8)
|
|
config.set("hazard_avoid_weight", 4.0)
|
|
|
|
# 创建示例群体
|
|
swarm_manager.create_example_swarm("鸟类", 30)
|
|
|
|
# 添加环境元素
|
|
# 1. 添加障碍物
|
|
swarm_manager.create_obstacle(Vec3(10, 10, 5), 3.0)
|
|
swarm_manager.create_obstacle(Vec3(-15, 5, 8), 2.5)
|
|
swarm_manager.create_obstacle(Vec3(0, -20, 3), 4.0)
|
|
|
|
# 2. 添加捕食者
|
|
predator = swarm_manager.create_predator(Vec3(25, 0, 10))
|
|
|
|
# 3. 添加资源点
|
|
if hasattr(swarm_manager, 'environment_manager'):
|
|
swarm_manager.environment_manager.add_resource(Vec3(-10, 15, 5), "食物", 100.0)
|
|
swarm_manager.environment_manager.add_resource(Vec3(20, -10, 7), "水源", 80.0)
|
|
|
|
# 4. 添加危险区域
|
|
if hasattr(swarm_manager, 'environment_manager'):
|
|
swarm_manager.environment_manager.add_hazard(Vec3(5, 0, 5), "有毒气体", 6.0)
|
|
swarm_manager.environment_manager.add_hazard(Vec3(-25, -15, 3), "辐射区", 8.0)
|
|
|
|
# 设置目标点(让群体向目标移动,观察环境响应)
|
|
swarm_manager.set_target(Vec3(30, 30, 15))
|
|
config.set("seek_enabled", True)
|
|
|
|
print("环境感知演示创建完成")
|
|
print(f"- 群体成员数量: {len(swarm_manager.members)}")
|
|
print(f"- 障碍物数量: {len(swarm_manager.obstacles)}")
|
|
print(f"- 捕食者数量: {len(swarm_manager.predators)}")
|
|
|
|
if hasattr(swarm_manager, 'environment_manager'):
|
|
env_info = swarm_manager.environment_manager.get_environment_info()
|
|
print(f"- 资源点数量: {len(env_info.get('resources', []))}")
|
|
print(f"- 危险区域数量: {len(env_info.get('hazards', []))}")
|
|
|
|
return swarm_manager
|
|
|
|
def update_environment_demo(swarm_manager, dt):
|
|
"""
|
|
更新环境感知演示
|
|
"""
|
|
# 更新环境时间
|
|
if hasattr(swarm_manager, 'environment_manager'):
|
|
swarm_manager.environment_manager.advance_time(dt)
|
|
swarm_manager.environment_manager.update_environment_dynamics()
|
|
|
|
# 可以在这里添加动态环境变化
|
|
# 例如:移动障碍物、改变天气等
|
|
|
|
def demo_environment_awareness_features():
|
|
"""
|
|
演示环境感知特性的使用方法
|
|
"""
|
|
print("=== 环境感知特性演示 ===")
|
|
|
|
# 1. 传感器配置
|
|
print("1. 传感器配置:")
|
|
print(" - sensor_range: 传感器的感知范围")
|
|
print(" - sensor_accuracy: 传感器的精度 (0.0-1.0)")
|
|
|
|
# 2. 环境响应权重
|
|
print("2. 环境响应权重:")
|
|
print(" - obstacle_response_weight: 避障响应权重")
|
|
print(" - predator_response_weight: 躲避捕食者响应权重")
|
|
print(" - resource_seek_weight: 寻找资源响应权重")
|
|
print(" - hazard_avoid_weight: 避开危险区域响应权重")
|
|
|
|
# 3. 环境元素
|
|
print("3. 环境元素:")
|
|
print(" - obstacles: 障碍物")
|
|
print(" - predators: 捕食者")
|
|
print(" - resources: 资源点")
|
|
print(" - hazards: 危险区域")
|
|
|
|
# 4. 环境动态
|
|
print("4. 环境动态:")
|
|
print(" - time_of_day: 时间变化")
|
|
print(" - weather: 天气变化")
|
|
print(" - resource regeneration: 资源恢复")
|
|
|
|
if __name__ == "__main__":
|
|
# 如果直接运行此脚本,显示特性说明
|
|
demo_environment_awareness_features() |