最近的工程要參考 OpenROV 的內容,在 Github 上找到了 OpenROV 的相關包與源碼,翻譯總結官方提供的 README.md 如下:
Cockpit 是爲任意遠程操作航行器或設備而開發的用戶操作界面與控制系統,它是 OpenROV 系列水下機器人的核心。Cockpit 構建在最新最全的網絡標準之上,與嵌入式 Linux 與微控制器共同工作,提供了這些系統的遙控。
一、主要特性
- 連接手機、桌面、平板電腦的座艙,不需要安裝
- 在瀏覽器中近於實時的顯示h.264/MJPEG視頻(近於120ms的延遲)
- 遊戲本、鍵盤、搖桿可控
- 陀螺儀 / 加速度計用於穩定飛行控制
- 基於GPU的視頻過濾,電腦增強視頻
- 基於可完全擴展插件的架構
- 支持社區主題和插件
- 瀏覽器中,記錄視頻回放和傳感器遙測
- 支持語言翻譯
- 在雲端備份數據與視頻
- 通知並控制系統升級
- 爲許多ROV電機配置構建相應配置
- 實時視頻與控制的對等分配
- 實時的視頻與數據流
- 以及其他等等
二、相關工程
openrov-cockpit 是若干包中的一個,它將這些包結合在了一起,使其能夠控制一個 ROV。具體可以參考 openrov-software 中的其他包的說明列表。
1. 需要在本機運行的程序(機器人上嵌入式系統)
- USB 網絡攝像機:UVC 兼容攝像機,支持 MJPEG 壓縮
- mjpg-streamer:http://sourceforge.net/projects/mjpg-streamer/
- ffmpeg:(用於模擬 h.264 視頻管道)
- Node.js:http://nodejs.org/
對於嵌入式機器人系統,openrov-cockpit 是通常與幾個不同的包一起安裝,這些包也包括了對於不同硬件解決方案的驅動與配置。我們爲 OpenROV 產品提供圖像。如果你有任何關於安裝在其他設備上的問題,請到我們的 Gitter 或者 OpenROV Forums 上聯繫。
三、如何在非嵌入式電腦環境下開發
該章節覆蓋了在你筆記本電腦或臺式機上的開發。
預先條件:
- 完成 openrov-cockpit 倉庫的 git clone
- 不使用 root 權限運行
- 不運行在 ARM 上(以前存在一些只有在 intel 平臺下的開發以來,這將中斷標準的安裝過程)
- 如果使用模擬視頻,需要在你的機器上安裝 FFMPEG
1. 安裝你需要安裝的所有依賴項
當運行該命令時,你需要連接實時網絡。
Linuxs/OSX:
npm run deploy:prod
Windows:
set NODE_ENV=production
set npm_config_shrinkwrap=true
npm install
如果你想安裝爲系統安裝依賴項,則必須忽略 shrinkwrap 的設置,具體命令如下:
Linuxs /OSX:
npm run deploy:dev
Windows:
set NODE_ENV=development
set npm_config_shrinkwrap=false
npm install
上述命令將遍歷所有路徑,尋找 bower.json 和 package.json 文件並安裝它們,這將花費幾分鐘運行。當安裝在 Intel 硬件上時,goemux 工程將展示一些錯誤信息,這些錯誤可以作爲工程被忽略,然後作爲附加依賴項進行安裝。安裝退出時,控制檯應該顯示如下內容:
│ ├── lodash@3.10.1
│ └── punycode@1.4.1
├─┬ tap-parser@1.2.2
│ ├── events-to-array@1.0.2
│ └─┬ js-yaml@3.5.5
│ └── argparse@1.0.7
└── tmatch@2.0.1
npm WARN OpenROV-Cockpit@30.1.0 No license field.
[brian@Babs openrov-cockpit]$
node 進程希望具體環境標誌位被設置改變其行爲。你可以覆蓋所有的設置,通過命令行將它們存儲進一個配置文件。
Windows 用戶:在執行 node 命令之前,你必須手動安裝環境變量。
運行模擬模式時,最少的選項如下所示:
- USB_MOCK = true:Cockpit 將加載模擬依賴項,用來代替真實依賴項(可以產生虛假的實時事件);
- HARDWARE_MOCK = true:Cockpit 將加載模擬 MCU 接口,用來模擬固件;
- configfile = ‘< path >’:讀 / 寫 rovconfig.json 文件的位置。你的賬號需要具有訪問該地址的權限;
- pluginsDownloadDirectory = ’ /tmp/plugins ‘:如果該文件夾缺失,則將會被創建。該文件夾用來下載插件。
運行命令:
USE_MOCK=true HARDWARE_MOCK=true configfile='/tmp/rovconfig.json' pluginsDownloadDirectory='/tmp/plugins' node src/cockpit.js
最小命令行將運行 node 進程,它將允許你連接到網址 http://localhost:8080,該網址將你帶入 Cockpit。模擬依賴項將傳遞虛假數據。最小命令行將不啓動任何視頻流。
一些更加通用的附加項如下:
- MOCK_VIDEO_TYPE=MJPEG 或 MOCK_VIDEO_TYPE=GEOMUX:選擇視頻服務爲使用模擬模式
- MOCK_VIDEO_HARDWARE=true:使視頻服務產生模擬數據,代替使用真實的硬件
- env plugins__ui-manager__selectedUI=’classic-ui’:覆蓋已經加載的默認主題
運行命令:
USE_MOCK=true DEV_MODE=true HARDWARE_MOCK=true MOCK_VIDEO_TYPE=GEOMUX MOCK_VIDEO_HARDWARE=true configfile='/tmp/rovconfig.json' pluginsDownloadDirectory='/tmp/plugins' env plugins__ui-manager__selectedUI='classic-ui' node src/cockpit.js
2. 調試 node 進程
有很多工具開發和調試,在我們提供的 ROV 鏡像中包含了 Cloud9 IDE。在本機開發時選擇工具的方式如下:
(1) 使用 node inspector
NPM 包允許你通過命令行開啓一個網絡服務器,命令行允許使用基於瀏覽器(Chrome, 火狐等)的網絡套件調試 node 進程。
安裝命令如下:
npm install -g node-inspector
To start node inspector:
啓動 node inspector:
node-inspector --web-port 3080
我們需要確定一個網絡端口選項,因爲對於瀏覽器,node-inspector 默認監聽端口 8080。
然後附帶上 debug 選項,啓動 cockpit 的 node 進程(或者如果你想令你的進程暫停知道你連接到你的調試會話,就附帶上選項–debug-brk)。命令如下:
USE_MOCK=true DEV_MODE=true configfile='/tmp/rovconfig.json' pluginsDownloadDirectory='/tmp/plugins' node src/cockpit.js --debug
現在你應該可以打開瀏覽器窗口,進入http://localhost:3080,並獲取一個調試會話。然後打開另一個瀏覽器窗口進入http://localhost:8080,啓動與 cockpit 的互動。
(2) 與 forever 共同使用 node inspector
你可以安裝你的調試會話,這樣當你的代碼改變時,系統將在背景中神奇且近於立即的重啓並重新加載 cockpit。
你需要安裝 forever,指令如下:
npm install -g forever
然後改變啓動 cockpit 的命令行,令 forever 程序加載 node inspector,指令如下:
USE_MOCK=true DEV_MODE=true HARDWARE_MOCK=true configfile='/tmp/rovconfig.json' pluginsDownloadDirectory='/tmp/plugins' forever -w -c 'node --debug' src/cockpit.js
(3) 使用 Visual Studio Code (VSC)
Visual Studio Code 是十分正式的跨平臺 IDE,它可以用來寫或調試不同種類的語言,主要是Node.JS。針對調試,cockpit 項目在模擬模式下包含了一系列默認配置文件。
帶 VSC 的調試步驟如下:
- 在你的平臺下安裝 Visual Studio Code;
- 在 VSC 中打開 openrov-cockpit 項目文件夾;
- 按下 F5 開始調試;
- 通常狀況下,cockpit 軟件現在可以訪問http://localhost:8080
- 使用 VSC 設置斷點,逐步調試代碼,檢查變量,以及其他操作。具體細節見 VSC 文檔。
此外,有一些插件允許同一時間在 VSC 與瀏覽器中同時調試,我們將在以後提供具體說明。
四、其他開發者任務
1. 擴充升級 node 依賴項
https://docs.npmjs.com/cli/update
ncu --updateAll
2. NPM shrinkwrap 所有包
當爲下一 release 準備進行 repo 操作,防止依賴項移動時,執行如下命令:
npm run shrinkwrap
在升級了新依賴項後,shrinkwrap 文件將自動重新生成。在用這些文件檢查源代碼之前要運行:
npm run prepshinkwrap
這將從 shrinkwrap 中移除 “OptionalDepenencies” 而不重新生成依賴項。