iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
生成式 AI

AI x Hardware系列 第 11

【爆笑血淚】販賣機小車的暴走日常 —— 一個後端 QAQC 的抓狂血淚史

  • 分享至 

  • xImage
  •  

這不是一篇嚴肅的技術白皮書。
這是一篇後端 QAQC 工程師,被販賣機小車逼瘋的懺悔錄。
請帶著笑意閱讀,因為只有笑,才能掩蓋得了我的眼淚。


序章:販賣機裡的靈魂

外人看販賣機,看到的是一格一格的飲料、零食、咖啡罐。
RD 看販賣機,看到的是一堆電路板、馬達、韌體程式碼。
而我,一個後端 QAQC,看販賣機,看到的是——

一台坐在 XY 軌道上左右亂竄的小車。

這台小車,理論上應該是可靠的搬運工:
去對的位置,取對的商品,送到對的出口。
但在我們開發的真實世界裡,它更像是:

  • 喝醉酒的暴走族
  • 隨機跳舞的街舞少年
  • 頭上揹著一顆黑殼詛咒石的馬拉松選手

簡單來說:
小車不是機械,是一個帶有靈魂的惡夢。


第一章:自動掃描的謊言

廠商的簡報總是那麼動聽。
他們說:

「別擔心,我們有自動掃描功能!
自動掃描 → 自動產生座標 → 自動套用。」

聽起來像夢幻般的 CI/CD 流程。
自動化、免人力、智慧型。
甚至讓 RD 一度興奮到拍桌:
「哇,以後 QAQC 只要驗驗 API 就好!」

然後現實給了我們一個大耳光。

  • 自動掃描:常常卡住,掃出來的數字比樂透還隨機。
  • 自動產生座標:誤差大到懷疑它是不是在看隔壁房間的地圖。
  • 自動套用:這三個字根本就是幻覺,從來沒成功過。

結果 QAQC 的我,只能再次打開那個老掉牙的手動設定界面,
一格一格把座標調回正確位置。

就算系統已經掃描過,沒有手動設定,小車就是不鳥你。
它會冷冷地待在原地,靜默到你懷疑是不是掛了電。
更慘的是,log 裡還會冒一句:

[INFO] Carriage idle, no position defined.

我看著這行字,心裡只有一句 OS:
「哼,根本是在冷嘲熱諷吧。」


第二章:爆衝、急停、罷工

好吧,假設今天我真的耐著性子,手動設好了座標。
是不是就能一切順利?

不。
不。
不。

小車的日常就像三本漫畫:

  • 《爆衝!販賣機戰士》
    → 小車突然加速,像要參加 F1 一樣,速度快到 QAQC 的眼睛追不上。

  • 《急停列車》
    → 跑到一半突然急煞,硬生生停在軌道中間,整個販賣機彷彿按下暫停鍵。

  • 《怠工之舞》
    → 左右亂晃,動作毫無章法,像在跳某種奇怪的 TikTok 舞蹈。

而這一切的根源,往往來自那顆「又黑又重的馬達外殼」。
它壓在小車上,就像讓小車揹著一顆墓碑去跑酷。
結果就是:

  • 加速不靈光 → 爆衝更容易
  • 煞車不及時 → 急停更暴力
  • 轉向不精準 → 座標再正確也沒屁用

我常常看著那顆黑殼,心裡默默替小車祈禱:
「兄弟,辛苦你了。」


第三章:RD 的經典錯誤

如果要票選「QAQC 抓狂排行榜 TOP 1」,
毫無疑問是——

RD 忘記確認小車狀態,就直接下指令。

這件事,百試百中,保證出事。

舉例:

  • 小車正在搬貨,你卻強制叫它回原點 → 砰!撞牆!
  • 小車正在校正,你卻硬要它出貨 → 咻!爆衝!
  • 小車明明 idle,但你沒給座標就叫它跑 → 原地裝死!

log 當場炸裂,錯誤訊息像彈幕一樣狂噴:

[ERROR] XY position not found
[ERROR] Command rejected: state mismatch
[ERROR] Motor overload detected
[ERROR] QAQC screaming detected

看到最後一行,我整個人傻眼。
我才想起來,這不是機器回報的,這是我心靈的吶喊。


第四章:Console 的修羅場

每次小車出事,console 就變成一場災難現場。
全是紅色字,像開了聖誕節特效。

  • RD 在前面抓頭:「咦?怎麼又炸了?」
  • QAQC 在後面咬牙切齒:「因為你沒問它在幹嘛啊!」
  • 小車靜靜停著,彷彿在說:「呵,活該。」

最誇張的一次,錯誤訊息直接衝破 console buffer,
把 Jenkins log 也拖下水。
結果 CI/CD pipeline 硬生生掛掉,
前端同事笑到肚子痛,說這是「全員販賣機」。


第五章:黑殼的詛咒

有段時間,我們甚至認真懷疑:
是不是那顆黑殼帶有詛咒。

因為它太重,導致:

  • 馬達加速 → 小車抽筋
  • 馬達減速 → 小車打滑
  • 馬達轉向 → 小車抽風

有一次測試,小車跑到一半,黑殼震得像地震。
飲料罐還沒掉下來,QAQC 的眼淚先掉下來了。

RD 嘴硬說:
「啊沒差啦,反正只要 log 沒爆就好。」
結果下一秒:

[ERROR] Motor vibration detected
[ERROR] Carriage lost in hyperspace

我只好冷冷回一句:
「恭喜你,現在它不只是小車,是量子小車了。」


第六章:狀態機的啟示

最後,我們才總算悟了。
問題不在小車,它只是忠實執行者。
真正的錯誤在於:

我們沒有建立正確的狀態機。

要讓小車乖乖聽話,必須先問:

  1. 你現在在哪裡?(座標)
  2. 你正在做什麼?(狀態)
  3. 我可以安全地下新指令嗎?(允許)

這三個問題不問清楚,
下指令就等於自找麻煩。

換句話說:
狀態機就是小車的語言。
如果不學會它的語言,
小車就會用爆笑、暴力、崩潰的方式懲罰你。


第七章:QAQC 的心聲

我常常幻想,如果有一天這台小車能開口說話,
它一定會對我們這群 RD 和 QAQC 嘆氣:

「拜託啦,先問我在幹嘛,再叫我做事,好嗎?」

這麼簡單的道理,
卻是我花了無數個深夜,
對著滿屏錯誤 log,
才徹底學會的血淚教訓。


總結:

  • 自動掃描座標:多半失效。
  • 手動設定:唯一可用的方法。
  • 沒座標:小車不鳥你。
  • 忘記問狀態就下指令:小車用爆衝、急停、裝死來懲罰你。
  • 真正的關鍵:狀態機設計

後記

這篇文章不是技術指引,而是一首 QAQC 的黑色惡夢。
寫給所有被硬體小車搞到心神俱裂的人。

願你在看到小車爆衝時,
能笑著說:
「啊,這只是狀態機的惡作劇。」

願你在看到滿屏錯誤 log 時,
能淡淡地關掉 console,
然後轉頭去喝一杯珍奶。

因為哭,已經沒有用了。


上一篇
術式的分段——在力量與毀滅之間
下一篇
🌊 森林的微笑,海洋的守護 —— AI 與 3030 海洋保育的相遇
系列文
AI x Hardware12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言