一、 引子:手机里的导航路线,无人车是怎么看懂的?
孩子们,每当周末爸爸妈妈带你出去玩,出门的第一件事是什么? 一定是打开手机里的高德地图、百度地图或者打车软件,输入目的地,对不对?
这时候,你会看到手机屏幕上出现了一条亮闪闪的路线。接着,司机叔叔一踩油门,车子就稳稳地带着你出发了。
你有没有想过,手机里的导航软件,到底是怎么把一条复杂的马路,“翻译”给车子听,让它知道一步步往前开的?如果以后路上面跑的都是不需要司机的“自动驾驶汽车”,无人车又是怎么在千变万化的世界里自主认路、并且沿着路线丝滑行驶的呢?
其实,自动驾驶技术的核心思路,可以拆解为简单的三步:
路线规划: 软件在地图上定下路线。
交通规则控制: 车辆遇到红绿灯自动停走。
动态避障: 遇到突发障碍物自动刹车绕行。
今天,有趣爸 就带大家从最基础的第一步开始——不聊枯燥的编程公式,直接用你每天都能见到的“打车导航与路线跟随”逻辑,在 Scratch 里手搓一套自动驾驶的雏形系统!
二、 角色扮演:把“打车这件事”搬进 Scratch 舞台
为了实现真正的自主导航,我们在软件里不能只建一个小车,而是要构建一个有层次的“打车系统”。在这个系统里,藏了三个你天天都能见到的“老朋友”:
1. 【地图节点】 ── 负责“设定导航路线”的手机软件
就像我们在手机里输入一串地址,地图软件会自动在马路上钉下 6 个“隐形图钉”(从 1 号点到 6 号点)。为了让马路看起来很自然,这里藏了两个非常好玩的排版算法:
怎么走出自然的路线?(波浪感设计): 如果图钉前后左右乱长,马路就会缩成一团。我们让它在水平方向老老实实地排队(横向每隔 90 步钉一个),但在上下高度上随机起伏(在 -170 到 170 之间取随机数)。这样,一条像波浪一样自然延伸的马路就长出来了!
怎么区分这么多图钉?(专属身份证号): 舞台上一口气长出 6 个图钉,小车怎么知道谁是谁?这里用了一个极重要的绝招——【局部变量(只适用于当前角色)】。每个图钉一出生,就会继承一个独一无二的目标编号(1到6)。这个编号是它私有的,就像每个人都有自己的身份证号,后面我们找路全靠它!
【💡 有趣爸配图指引:】
2. 【地图标记】 ── 永远跑在车前面的“虚拟导航标”
小车出发后,总得有个眼前的目标。这个绿色的小圆点,就像是手机导航里那个“前方 50 米处请向右转”的虚拟导向箭头。它需要精确地知道自己该去 1-6 号图钉里的哪一个。
【💡 有趣爸配图指引】
3. 【自动汽车】 ── 负责执行的“网约车司机”
我们的小车最省心了,它根本不需要背下整张复杂的地图。它就像一个绝对信任导航的司机叔叔,眼睛里死死盯着眼前那个绿色的小圆点(地图标记)。向导定位到哪里,小车就调整车头迎面碾压过去。
【💡 有趣爸配图指引】
三、 生活算法解密:那些藏在代码里的“司机智慧”
这个软件跑起来之后,你会看到非常丝滑的一幕:小车不需要知道终点在哪里,它只要盯着绿色的小圆点冲过去就行了。但在把生活经验转化成程序逻辑时,有趣爸在代码里藏了三个非常高明的“黄金编程技巧”:
技巧 A:解决“网约车抢单”的时序冲突(等待 0.1 秒)
在并行运行程序时,由于电脑运行速度极快,当小车喊“换下一个点”时,绿色小圆点可能还没来得及在公共记事本上读到新的坐标,就急匆匆地出发了。这会导致小车在原地傻眼,以初始化坐标来错误判断。
技巧 B:车头进站的优雅(碰到后多走几步)
很多孩子写的车,一碰到目标点(绿色小圆点)就立刻停下或瞬间暴力转弯,看起来一卡一卡的,很不自然。
技巧 C:终点熄火的智慧(小于 6 的递归收敛)
当小车开到第 6 个点(终点)后,如果不加控制,它还会继续盲目地呼叫“请去 7 号点”,导致程序报错抽风。
四、 思维跃迁:拖不烂的路线!这就叫“解耦思维”
为了向孩子们证明这个生活算法有多聪明,有趣爸在课堂上带孩子们玩了一个“破坏性实验”:
游戏在运行的时候,你用鼠标强行去舞台上把那 6 个蓝色的目标点任意拖拽、揉成一团,或者拉成一条九曲十八弯的蛇形。
你会惊奇地发现——自动汽车居然不需要改任何一行代码,它依然能极其聪明地拐弯、抹角,准确地把 1 到 6 号点全部安全跑完!
我们一行控制运动的代码都没有改,但小车却自动适应了千变万化的新环境。
在工业界,这叫做解耦(Decoupling)思维。我们把“路线环境(外部数据)”与“行驶逻辑(内部代码)”彻底切断了。小车拥有了独立的、通杀一切地形的“自主导航模式”。
有趣爸一直跟孩子们说:学编程,千万不要去死记硬背。因为最厉害的算法,其实全部藏在我们的日常生活中。
你早上起床,先穿衣服、再刷牙、最后背书包出门,这是一套“顺序算法”;
妈妈在菜市场挑苹果,大的红的放进袋子,小的烂的扔一边,这是一套“条件过滤算法”;
哪怕是今天我们聊的自动驾驶,它的本质也不过就是把你出门坐车时“看一眼手机地图、跟着导航箭头走、到了地方就下车”的生活习惯,用积木翻译给计算机听而已。
当孩子发现,原来自己每天的行为模式,就是大厂工程师写在无人车里的核心逻辑时,他们看这个世界的眼神就会彻底变了。
五、 结尾与追更钩子
第一期特训,我们的无人车已经学会了像人类一样“看地图导航”,并且用“生活智慧”解决了进站、熄火和时序冲突。
但是,真实的马路上不仅有目的地,还有规矩。如果在这 6 个随机生成的导航点中间,突然多出了纵横交错的红绿灯,我们这个只会跟着导航一股脑往前冲的无人车,该如何学会“克制”与“观察”?
下一期,有趣爸带大家继续升级系统,给小车装上“两层眼皮”,开启我们的第二连载:马路上的红绿灯!
欢迎爸爸妈妈带孩子一起在评论区聊聊:你在生活中,还发现了哪些有趣的“生活算法”?
趣爸编程网dadcoming.com使命:孩子有趣爸
专注领域:兴趣与编程
工作联络:roomhj(微信)
点击“阅读原文”进入趣爸编程网!