2026/8/23 14:46:38

TERRA导航状态机深度解析:如何精准引导你走完10个检查点

TERRA导航状态机深度解析:如何精准引导你走完10个检查点 TERRA导航状态机深度解析如何精准引导你走完10个检查点【免费下载链接】terra项目地址: https://gitcode.com/gh_mirrors/terra2/terraTERRA 是一款将 AI 与正念散步结合的开源口袋导航设备ChatGPT 根据你想要的时间和心情生成一串 GPS 检查点固件中的 TERRA导航状态机则通过 16 向箭头和震动反馈精准引导你走完最多 10 个检查点并回到起点。本文带你完整拆解这套状态机的 4 个状态、2 个关键距离阈值以及让它聪明又省电的工程细节。 一图看懂4 个状态如何串联整段路线TERRA 的导航核心是一个简洁有限状态机定义在 Terra.ino 中enum NavigationState { NOT_STARTED, // 未开始等待定位、走向起点 NAVIGATING, // 导航中箭头指路 AT_CHECKPOINT, // 到达检查点停留展示 TRAIL_ENDED // 路线结束 };整个流转路径非常直观NOT_STARTED→距起点 ≤ 10m→NAVIGATING⇄距检查点 ≤ 10m ↔ 停留 5 秒→AT_CHECKPOINT→到达终点站→TRAIL_ENDED状态进入条件屏幕显示下一步NOT_STARTED上电初始PENDING → GOTOSTART走近起点后开始导航NAVIGATING出发 / 检查点停留结束16 向箭头之一接近下一站时开始震动AT_CHECKPOINT距检查点 ≤ 10m对应检查点图案1~105 秒后自动继续导航TRAIL_ENDED到达最后一个检查点PENDING完成提示路线结束 ✅ 状态一NOT_STARTED——先找到起点刚开机时状态机会先显示PENDING图案等待第一次 GPS 数据收到定位后切换为GOTOSTART提示你请走到路线起点。只有当数据已收到且距起点不超过 10 米时才正式进入NAVIGATING并把目标设为第 1 个检查点。这段逻辑见 Terra.ino 第 227~243 行。这样设计的意义在于把走到起点也当作一次导航任务避免用户在错误位置就开启路线。 状态二NAVIGATING——16 向箭头实时指路导航中固件每秒计算一次相对方位角目标方位角 − 罗盘当前朝向见 calculateRelativeDirection再落入 selectArrowImage 的 16 个 22.5° 扇区从 N 到 NNW 中挑出最贴近的那支箭头渲染到圆屏上。接近下一站时还有贴心反馈当距离进入20 米设备开始每 500ms 震动一次DRV2605 触觉马达让你不用抬眼也能感知快到站了触发逻辑在 第 311~314 行。 状态三AT_CHECKPOINT——到站的 5 秒仪式当与检查点距离 ≤10 米状态机切换为AT_CHECKPOINT屏幕淡出当前箭头、淡入对应的检查点图案imagelist.h 中共备有 10 张 240×240 图案并记录到达时间戳5 秒后自动回到NAVIGATING同时把目标推进到下一站第 289~293 行。若到的是最后一站则直接进入TRAIL_ENDED并显示完成提示第 277~284 行。检查点坐标与数量由 config.h 中的stopLats[]、stopLons[]和numberOfStops决定。⚡ 关键阈值速查表TERRA 精准导航的秘密参数参数数值作用checkpointTrigger10 米判定到达检查点/起点vibrationTrigger20 米提前触发接近震动震动间隔500ms接近时的连续提示节奏检查点停留5 秒让你从容打卡后自动继续主循环周期1000ms每秒刷新一次导航刷新阈值0.5 米距离变化不足 0.5m 不重复刷屏这些参数集中在 Terra.ino 第 37~42 行改起来毫不费力——想更灵敏把 10 调成 15 即可。 传感器如何喂给状态机GPS CMPS12 罗盘状态机的每一次判断都来自两个传感器GPS北天 BN-8809600 波特串口提供经纬度配合 TinyGPSPlus 库计算距离与方位角见 getDistanceToCMPS12 倾角补偿电子罗盘I2C 地址 0x60读出 16 位角度再除以 10 得到朝向实现见 readCompass️ 调试技巧固件默认开启debugMode第 3 行无需真实 GPS——在串口监视器里输入纬度,经度逐点挪动自己就能在书桌前完整走一遍从 PENDING 到 TRAIL_ENDED 的全部状态是验证状态机逻辑最快的方式。️ 快速上手3 步生成你的专属检查点路线生成路线本地运行 App/server.jsNode.js v21.5调用/generate-trail接口让 ChatGPT 按你的时间和心情产出检查点坐标再在 index.html 中下载生成的config.h写入固件用下载的文件替换 Arduino Code/Terra/config.h重新编译烧录 ESP32 即可打印外壳使用 STL Files/ 中的 3D 打印模型把硬件装进透明外壳即可出门散步 进阶玩法你可以把 240×240 黑白 BMP 图片转成 XBM 位图替换 images/checkpoints/ 中的图案让每个检查点都有专属视觉符号16 支箭头图案同样位于 images/arrows/。小结TERRA导航状态机用最朴素的 4 状态设计把生成路线 → 走向起点 → 逐站导航 → 到站停留 → 完成串成一次无需手机的散步体验10 米判定到达保证精准20 米震动提示带来从容16 向箭头让方向一目了然。读懂这套状态机你也能为自己的任何 IoT 导航项目搭出同样可靠的骨架。【免费下载链接】terra项目地址: https://gitcode.com/gh_mirrors/terra2/terra创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考