巨型农场与多无人机协作
在本次课程中,我们解锁了极其强大的“巨型农场”功能,从控制单架无人机,正式迈入多无人机协同工作的新阶段!通过编写程序,我们可以让无人机“兵分多路”,极大提高农场的运作效率。
一、 核心概念与新指令
在多无人机模式下,我们需要掌握以下三个核心函数:
💡 无人机的“三大定律”
平行宇宙(各自独立): 每架无人机都运行自己独立的程序,互不干扰,且不会互相碰撞。
众生平等(没有主从之分): 没有所谓的“主”无人机。任何无人机都可以生成新无人机,并且都计入总数上限。
功成身退: 当无人机完成了你分配给它的函数任务(或程序终止时),它就会自动消失。
二、 课堂代码精讲:自动化胡萝卜矩阵
在课堂上,我们结合了外部引入的工具库(import tool),编写了一段非常高效的多无人机播种代码。我们来拆解它的运作逻辑:
import tool
# 任务函数:单个无人机的工作流程(负责一整列的种植)
def harvest_column():
for _ in range(get_world_size()):
tool.auto_water() # 智能浇水
tool.auto_till() # 翻土
tool.auto_harvest() # 收割现有作物
plant(Entities.Carrot) # 种下胡萝卜
move(North) # 向上移动一格
# 调度循环:第一架无人机的任务(负责生成其他无人机)
while True:
if spawn_drone(harvest_column): # 如果成功生成了一架新无人机
move(East) # 本机就向东移动一格,准备生成下一架
🔍 逻辑剖析
“播种机”与“调度员”: 这段代码巧妙地让第一架无人机变成了“调度员”。它不断向东(
East)移动,每走一步就释放一架新无人机。垂直作业: 被释放出来的新无人机,成为了“播种机”。它们会执行
harvest_column函数,一路向北(North)边走边干活,直到处理完这一整列。极限保护:
if spawn_drone(...)这句判断非常关键。如果生成的无人机数量达到了上限,spawn_drone会返回None(相当于 False),此时调度员就不会再向东移动,从而避免了程序报错。
三、 幕后功臣:Tool 工具库的模块化思维
在主程序中,代码显得非常简洁,这是因为我们把复杂的细节隐藏在了 tool.py 中。这种将重复工作打包成独立函数的方法,叫做模块化编程(封装)。
回顾一下我们自己编写的强力工具:
1. 智能浇水 (auto_water)
我们加入了水位判断逻辑,让水资源利用率最大化:
def auto_water():
# 智能浇水逻辑:保持地块湿润以获得5倍加速
# 只有当有水罐 且 水位低于 0.75 时才使用
if num_items(Items.Water) > 0:
if get_water() < 0.75:
use_item(Items.Water)
2. 智能翻土 (auto_till) 与 智能收割 (auto_harvest)
通过提前判断地形和植物状态,避免了无人机执行无效动作或报错:
def auto_till():
if get_ground_type() == Grounds.Grassland:
till()
def auto_harvest():
if can_harvest():
harvest()
3. 精准导航 (move_to)
利用 while 循环,无论无人机当前在哪,都能精准移动到我们指定的 (target_x, target_y) 坐标。这是全图自动化的基础。
📝 课后思考题:
观察
tool.py中的sway()和prepare_all_soil()函数,它们都使用了一种名为“S 形走位”的算法(通过i % 2 == 0判断)。想一想,与每次都回到起点重新开始相比,“S 形走位”为单架无人机节省了多少移动时间?