websocket 3dscan control

Yen edited this page Apr 14, 2016 · 19 revisions

Websocket API: 3dscan-control

  • Location ws://localhost:8080/ws/3d-scan-control/[uuid]

連線到指定序號的印表機,請將 [uuid] 替換為印表機序號 建立 WebSocket 連線後連線狀態會進入 Stage 1 狀態

Stage 1

連線階段

在連線建立後,用戶端送出一個完整的 websocket text message 內容為使用者的 RSA Private Key,送出後

fluxghost 會開始嘗試與印表機建立連線,此時會收到下列訊息

  • {"status": "connecting"}
    • 表示正在嘗試與印表機連線,此訊息會以 0.3~3 秒 頻率發送
  • {"status": "connected"}
    • 已連線到印表機,進入 Stage 2 通訊規格
  • {"status": "error", "error": "XXX"}
    • 連線發生錯誤,其中 XXX 參考 錯誤代碼表,此訊息傳送後連線將直接被切斷。
啟動掃描階段

在收到 connected 訊息後 fluxghost 會嘗試將印表機切換至 Scan 狀態:

  • 成功時 ⇠ {"status": "ready"}
  • 失敗時 ⇠ {"status": "error", "error": "XXX"}
    • 當失敗時由 error 會帶有失敗內容

當收到 error 時可用兩種指令進入 Scan 狀態:

  • retry 或是 take_control
  • 成功時 ⇠ {"status": "ready"}
  • 失敗時 ⇠ {"status": "error", "error": "XXX"}

retry 會嘗試軟性重試,take_control 會嘗試發動 kick 指令踢掉其他佔用連線的使用者

必須確實收到 ready 訊息 才會進入 Stage 2

Stage 2 (掃描可用階段)

此階段可以接收下列指令

取得一張照片
  • image
  • {"status": "binary", "mime": "MIME_TYPE", "length": 1234}
    • mime 可能為 "image/jpg" 或 "image/png"
    • length 為檔案長度
  • ⇠ BINARY DATA
  • {"status": "ok"}
檢查鏡頭狀態,使用這個功能需要時間讓pi運算
  • scan_check
  • {"status": "ok", "message": [message]}')
    message will be one of this:
    • "not open" : 相機沒拉出來
    • "no object": 沒偵測到校正物件 (如果發現這個,是禁止校正的)
    • "good":好棒棒
    • "no laser":雷射沒拉出來
      >>> NOTE: 現在SimulateWebsocket3DScanControl上這個指令會隨機回某個狀態 <<<
校正流程,請確認有收到scan_check有收到good才能做
  • calibrate
  • {"status": "continue"}
    等待校正完成,SimulateWebsocket3DScanControl上會等一秒,正式應該需要若干分鐘 完成時
  • {"status": "ok"}')
    校正失敗
  • {"status": "fail"}')
設定掃描解精細度
  • resolution 200
    • 200 為一圈的步數
  • {"status": "ok", "info": "200"}
掃描參數調整

set_params [key] [value]
key should be one of theese: 'MAXLaserRange', 'MINLaserRange', 'LaserRangeMergeDistance', 'LLaserAdjustment', 'RLaserAdjustment', 'MagnitudeThreshold'

  • 設定成功
  • {"status": "ok"}
  • 格式錯誤
    • {"status": "error", "error": "[key] [value] format error"}
  • key錯誤
    • {"status": "error", "error": "[wrong key] key not exist"}
  • value錯誤
    • {"status": "error", "error": "[wrong value] value error"}
做一次掃描
  • scan [step]
    [step] is a optional parameter, specified which step it is for this scan command
  • {"status": “chunk", "left": [left points], “ right”: [right points]}
    • [left points] 表示 左邊點雲數量
    • [right points] 表示 右邊點雲數量
  • ⇠ BINARY DATA
    • binary 表示點資料,每個點使用 24 個 bytes 表示,因此 binary 長度為 24 * (左邊點雲數量 + 右邊點雲數量)
  • {"status": "ok"}

點資料解析,float 編碼為 little endian

  • bytes 0-3: X 座標 (float)
  • bytes 4-7: Y 座標 (float)
  • bytes 8-11: Z 座標 (float)
  • byte 1215: 點的顏色(R) (float, 0.01.0)
  • byte 1619: 點的顏色(G) (float, 0.01.0)
  • byte 2023: 點的顏色(B) (float, 0.01.0)

Javascript Example

ws = new WebSocket("ws://localhost:8080/ws/3d-scan-control/FFFFFFFFFFFFFFFFFFFFFFFFF");
ws.onmessage = function(v) { console.log(v.data);}
ws.onclose = function(v) { console.log("CONNECTION CLOSED, code=" + v.code +
    "; reason=" + v.reason); }

// After recive connected...
ws.send("image")
ws.send("image")
ws.send("start")
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.