阶段五:实战项目 环境感知
环境监测是群体机器人的重要应用:多个传感器/机器人协作监测大范围区域的环境参数(污染物浓度、温度、辐射等),目标是构建准确的环境地图并定位污染源。
| 策略 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 梯度上升 | 沿浓度梯度移动 | 简单高效 | 噪声敏感 |
| 信息驱动 | 最大化信息增益 | 样本高效 | 计算量大 |
| 化学趋向 | 模拟细菌趋化 | 鲁棒 | 收敛慢 |
| 贝叶斯搜索 | 更新源位置后验 | 概率最优 | 需先验 |
import random, math; random.seed(42)
source_x, source_y = 70, 60
def concentration(x, y, t):
dist = math.hypot(x-source_x, y-source_y)
if dist < 1: return 100
sigma = 3+0.1*dist; return max(0, 100*math.exp(-dist**2/(2*sigma**2))*math.exp(-0.01*t)+random.gauss(0,2))
n_robots = 6; grid_size = 100
class MonitorBot:
def __init__(self, rid, x, y): self.id=rid; self.x=x; self.y=y; self.vx=0; self.vy=0; self.samples=[]
robots = [MonitorBot(rid, random.uniform(5,15), random.uniform(30,70)) for rid in range(n_robots)]
best_conc = 0; best_pos = (0,0)
for step in range(200):
for r in robots:
c = concentration(r.x, r.y, step); r.samples.append((r.x,r.y,c))
if c > best_conc: best_conc = c; best_pos = (r.x, r.y)
eps = 1.0
cx1=concentration(r.x+eps,r.y,step); cx0=concentration(r.x-eps,r.y,step)
cy1=concentration(r.x,r.y+eps,step); cy0=concentration(r.x,r.y-eps,step)
grad_x=(cx1-cx0)/(2*eps); grad_y=(cy1-cy0)/(2*eps)
fx=0.3*grad_x+random.gauss(0,0.2); fy=0.3*grad_y+random.gauss(0,0.2)
for b in robots:
if b is r: continue
ddx,ddy=r.x-b.x,r.y-b.y; d=math.hypot(ddx,ddy)
if 01.5: r.vx*=1.5/sp; r.vy*=1.5/sp
r.x+=r.vx; r.y+=r.vy; r.x=max(0,min(grid_size,r.x)); r.y=max(0,min(grid_size,r.y))
if step%40==0:
avg_dist=sum(math.hypot(r.x-source_x,r.y-source_y) for r in robots)/n_robots
print(f"Step {step:3d}: 最佳浓度={best_conc:.1f}, 平均距源={avg_dist:.1f}")
avg_dist=sum(math.hypot(r.x-source_x,r.y-source_y) for r in robots)/n_robots
total_samples=sum(len(r.samples) for r in robots)
print(f"\n源位置: ({source_x},{source_y}), 平均距源: {avg_dist:.1f}, 总采样: {total_samples}")
print("✅ 验证通过:多机器人通过梯度上升逐步靠近污染源")
ERROR: Traceback (most recent call last): File "", line 13, in NameError: name 'i' is not defined. Did you mean: 'id'?
梯度上升可能陷入局部浓度峰值。信息论方法选择下一个采样点以最大化关于源位置的不确定性减少:
本课环境监测的计算复杂度是实际应用中的关键考量因素。在群体规模为N、迭代次数为T的情况下:
对于大规模问题,可以采用以下策略降低复杂度:
环境监测与其他相关方法的对比分析:
| 算法 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| 本课方法 | 分布式、鲁棒、可扩展 | 近似解、参数敏感 | 大规模动态环境 |
| 集中式方法 | 全局最优、确定性强 | 单点故障、不可扩展 | 小规模静态问题 |
| 分层方法 | 兼顾全局和局部 | 层次设计复杂 | 中等规模问题 |
| 混合方法 | 综合各方法优点 | 实现复杂度高 | 高要求场景 |
环境监测领域的当前热点研究方向包括:
标准高斯羽流模型假设稳态、均匀风场和恒定扩散率,实际环境通常更复杂:
初始化阶段:所有智能体/粒子的初始位置和速度随机生成。随机初始化保证了多次运行的统计意义,但单次运行的结果可能因随机种子不同而变化。
主循环结构:每个时间步包含三个阶段——感知(获取邻居和环境信息)、决策(根据规则计算控制量)、执行(更新位置和速度)。这种"感知-决策-执行"循环是所有群体机器人算法的基本框架。
参数调优建议:先用默认参数运行一次观察基本行为,然后逐个调整关键参数。每次只改一个参数,记录变化效果。重点关注:收敛速度、稳态误差和鲁棒性。
常见问题:
环境监测在群体机器人整体知识体系中的位置和关联:
理解本课内容需要掌握的前置概念:Python基础编程、线性代数(矩阵运算)、概率论(随机变量和分布)、图论基础(图的基本概念和遍历算法)。如果你对这些前置知识感到陌生,建议先回顾相关基础教材。
本课内容为后续课程奠定基础。在后续学习中,我们将把本课的算法原理与其他技术结合,构建更复杂、更实用的群体机器人系统。特别值得关注的是:如何将本课的算法从仿真环境迁移到实际机器人平台,需要考虑传感器噪声、通信延迟、执行器误差等现实因素。
环境监测不仅属于机器人学,还与以下学科密切相关:
群体机器人课程 © 2026 | 第23课/共25课