Jetson NanoからSkyWay経由でカメラ画像を送信できたので、その方法を備忘録として残したいと思います。
2020/06/03 追記 : Jetson Xavier NXでも確認できました。
前提条件
- Jetson Nano Developer Kit
- JetPack SD Card Image r32.3.1がセットアップ済み
- Raspberry Pi Camera Module V2
パッケージを更新
お約束として、パッケージを更新しておきます。
sudo apt update
sudo apt upgrade
curlをインストール
sudo apt install curl
最新のDockerをインストール
curl -sSL https://get.docker.com/ | sh
一応 docker-compose もインストールしておきます。
sudo apt install python3-pip libffi-dev libssl-dev
sudo pip3 docker-compose
SkyWayから提供されているSkyWay WebRTC Gatewayのバイナリがarm32用なので、qemuをインストールします。
sudo apt install binfmt-support qemu qemu-user-static
ユーザーをDOCKER GROUPに入れておきます。
sudo usermod -aG docker <ユーザー名>
Dockerfileの準備
こちらのDockerfileを元にJetson Nano用に以下のように修正しました。
FROM forumi0721alpinearmhf/alpine-armhf-glibc:latest
#default 8000
ENV PORT_NUM 8000
#error/warn/debug
ENV LOG_LEVEL "error"
# Set the working directory to /skyway
WORKDIR /skyway
RUN apk add --no-cache --virtual tmpPackages ca-certificates wget && \
wget https://github.com/skyway/skyway-webrtc-gateway/releases/download/0.2.1/gateway_linux_arm && \
chmod +x ./gateway_linux_arm && \
apk add libgcc && \
apk add libuuid && \
apk add libpthread-stubs && \
rm /root/.wget-hsts && \
echo [general] > ./config.toml && \
echo api_port=$PORT_NUM >> ./config.toml && \
echo log_level=\"$LOG_LEVEL\" >> ./config.toml && \
apk del tmpPackages
ENV LD_LIBRARY_PATH /lib:/lib/glibc:/usr/lib
# Run rest when the container launches
ENTRYPOINT /skyway/gateway_linux_arm
Dockerイメージのビルド&起動
docker build ./ -t <タグ名>
docker run -itd --name <コンテナ名> -p 8000:8000 -p 50000-50063:50000-50063/udp <タグ名>
タグ名・コンテナ名は適当な名前を入れてください。
udpポートはこちらのサポートコミュニティの議論を参考にとりあえず64個分とってみました。
docker-composeの場合は以下の設定でいけると思います。
version: "3"
services:
skyway:
container_name: <コンテナ名>
build: ./
ports:
- "8000:8000"
- "50000-50063:50000-50063/udp"
nodeJSの準備
アプリをJavascript(Typescript)で書いたので、nodeJSを準備します。
使い勝手を考えてnvm経由でインストールします。
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.2/install.sh | bash
nvm install v12.16.1
こちらがサンプルアプリになります。
PeerIDは SSG_{Jetson Nanoのシリアルナンバー}
になるので、クライアントから指定して接続してください。
時間がありましたら、iOSのサンプルアプリも紹介できたらと思います。