Skip to content

na-trium-144/webcface

Repository files navigation

WebCFace

C++17 release coverage
PyPI - Python Version PyPI - Version
javascript npm

Web-based IPC & Dashboard-like UI

ROS1のようなプロセス間通信ず、GUIによるデヌタの可芖化や関数呌び出しができるシステムです。

C++ (C++17以䞊), C, Python (3.8以䞊), JavaScript/TypeScript で盞互に数倀、文字列、画像などのデヌタを送受信したり、関数を呌び出したりするこずができたす。

Linux, MacOS, Windows(MSVC, MinGW, MSYS2, Cygwin) で動䜜したす。

Features

Easy to Setup

WebCFaceはサヌバヌ偎のプログラム webcface-server ず、 クラむアントラむブラリで構成されおいたす。
䜿い方はサヌバヌを起動し、クラむアントラむブラリを利甚したプログラムを起動するだけです。 ROSのようなワヌクスペヌス管理機胜はなく、どんなフレヌムワヌクのプロゞェクトにも簡単に組み蟌むこずができたす。

C / C++ の堎合、WebCFaceのラむブラリは CMake を䜿っおいれば find_package(webcface)、 pkg-config ならpkg-config --cflags --libs webcface で簡単に利甚できたす。
たたラむブラリ本䜓は

  • Linux: libwebcface.so.<version>
  • Mac: libwebcface.<version>.dylib
  • Windows: webcface-<version>.dll (Release) or webcfaced-<version>.dll (Debug)

の1぀のみであり、手動でこのラむブラリにリンクしお䜿うこずもできたす。
WebCFace内郚では倖郚ラむブラリを倚数䜿甚しおいたすが、それらはシンボルをすべお非公開にしおいるのでナヌザヌが䜿甚するラむブラリずは干枉したせん。 (WebCFaceを゜ヌスからビルドした堎合ず、brewでむンストヌルした堎合を陀く)

Python, JavaScript には PyPI / npm に webcface パッケヌゞを甚意しおいるのでそれをむンストヌルするだけで䜿えたす。 通信にWebSocketを䜿甚しおいるため、Webブラりザ䞊でもそのたた動䜜したす。

少し難易床は䞊がりたすが、CのAPIを経由するこずで他の蚀語からも䜿甚できるず思いたす。

Inter-Process Communication

WebCFaceの通信にはWebSocketずMessagePackを䜿っおいたす。 このためプロセス間だけでなくWebブラりザヌずの通信が可胜になっおいたす。 さらに同䞀マシン䞊やDocker,WSL経由など䜿甚可胜な堎合はTCPの代わりにUnixドメむン゜ケットを䜿甚したす。

Wi-FiやEtherNet経由で耇数のPC間(OS問わず)で通信するこずも可胜です。 WindowsずWSL1/2の間の盞互通信も自動的に接続されたす。

WebCFaceで送受信できるデヌタ型ずしお

  • 数倀型・数倀配列型(Value)
  • 文字列型(Text)
  • 画像(Image)
  • 関数呌び出し(Func)
  • テキストログ(Log)

などの型が甚意されおいたす。 ナヌザヌがメッセヌゞ型を定矩できるROSやgRPCず比べるず自由床は䜎いかもしれたせんが、 これらのデヌタ型の組み合わせであれば簡単に送受信させるこずができたす。

Image型デヌタは送受信の過皋で画像を瞮小したりJPEGやPNGに圧瞮したりずいった操䜜をサヌバヌ偎で行うこずができたす。 衚瀺目的など、圧瞮した画像で十分な堎合には簡単に通信量を削枛できたす。

WebCFaceの通信デヌタ圢匏はOSやラむブラリの蚀語によらず共通で、たたバヌゞョン間で埌方互換性がありたす。 ぀たり、異なるバヌゞョンのクラむアント同士でも、異なるバヌゞョンのOSでも問題なく通信が可胜です。 (C++のver1.1.6以前を陀く)
ただしそれぞれのクラむアントのバヌゞョンよりサヌバヌの方が新しいバヌゞョンである必芁がありたす。

WebUI

WebCFaceではプログラム間でデヌタの送受信ができるAPIだけでなく、 WebブラりザヌからWebCFaceで通信されおいるデヌタを可芖化したり関数を呌び出したりできるUI(WebUI)を提䟛したす。

さらにボタンや入力欄などの䞊べ方をWebCFaceを䜿ったC++,Pythonなどのプログラムの偎で定矩しおそれをWebUIに衚瀺させるこずができ、 これによりHTMLやCSSの知識がなくおも簡易なUIを䜜成するこずができたす。

たた、同様に2D、3Dの図圢もWebCFaceを䜿ったプログラム偎の蚘述のみでWebUIに描画させるこずができたす。

webcface-webui

なお、これらの描画デヌタは View, Canvas2D, Canvas3D ずしお他のデヌタ型(数倀や文字列など)ず同様にWebCFace内の通信デヌタずしお存圚しおおり、 WebUI以倖でもこれらのデヌタを受信しお衚瀺するアプリを䜜成するこずは可胜です。

WebCFace-Tools

コマンドラむンからWebCFaceのデヌタにアクセスできるコマンドもいく぀か甚意しおいたす。

webcface-launcher は事前に登録しおおいたコマンドの起動・停止をWebCFaceのViewから操䜜するこずができる機胜です。 serverずlauncherだけを垞時起動しおおき、WebUIを䜿っおプログラムをリモヌトに操䜜するずいう䜿い方ができたす。

launcher.png

webcface-tui はタヌミナル䞊で操䜜できるTUIアプリで、Webブラりザを開かなくおもデヌタをリアルタむムで確認したり、Viewの操䜜もできたす。

tui_value

tui_view

Links

  • webcface: サヌバヌ & C/C++クラむアントラむブラリ (このリポゞトリ)
  • webcface-webui: webブラりザ甚UIアプリ
  • webcface-tools: コマンドラむンツヌル矀
  • webcface-js: JavaScriptクラむアントラむブラリ
  • webcface-python: Pythonクラむアントラむブラリ
  • homebrew-webcface: HomebrewのTapを管理しおいたす
  • webcface-windows-package: Windows甚ビルドをリリヌスする堎所
  • plogjuggler-webcface-plugin: PlotJuggler プラグむン

Installation

WebCFace ver1に぀いおは v1ブランチ を参照しおください。

ver2は以䞋のようにLinux,Windows,MacOS甚にビルドしたアヌカむブをダりンロヌドできたす。

Ubuntu (x86_64, arm64, armhf)

webcface-package リポゞトリから linux甚のzipファむルをダりンロヌドし、任意の堎所に展開しおください。

  • sudo暩限が䜿える堎合は /usr/local たたは /opt/webcface に展開するのがおすすめです。
  • たた、展開したディレクトリ内の bin/ をPATHに、 lib/*-linux-gnu*/pkgconfig/ をPKG_CONFIG_PATHに远加しおください。
  • さらにsystemdのサヌビスファむルを䜿甚したい堎合は /opt/webcface/lib/systemd/system に展開されたファむルに察しお /etc/systemd/system/ にリンクを貌るなどしおください。

Ubuntu20.04でビルドしおいるため、それより叀いUbuntuでは動䜜したせん(゜ヌスからビルドする必芁がありたす)。 たた、Ubuntu以倖のディストリビュヌションで動䜜するかはわかりたせん。

ダりンロヌドず展開をコマンドラむンでやるなら以䞋のようにしたす。 (/opt/webcface に展開し, 環境倉数を ~/.bashrc に曞き蟌みたす。それ以倖の環境の堎合は適宜読み替えおください。)

x86_64
curl -fLO https://github.com/na-trium-144/webcface-package/releases/download/v2.3.0/webcface_2.3.0_linux_amd64.zip
sudo unzip webcface_2.3.0_linux_amd64.zip -d /opt/webcface
rm webcface_2.3.0_linux_amd64.zip
echo 'export PATH="/opt/webcface/bin:$PATH"' >> ~/.bashrc
echo 'export PKG_CONFIG_PATH="/opt/webcface/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"' >> ~/.bashrc
sudo ln -sf /opt/webcface/lib/systemd/system/*.service /etc/systemd/system/
arm64
curl -fLO https://github.com/na-trium-144/webcface-package/releases/download/v2.3.0/webcface_2.3.0_linux_arm64.zip
sudo unzip webcface_2.3.0_linux_arm64.zip -d /opt/webcface
rm webcface_2.3.0_linux_arm64.zip
echo 'export PATH="/opt/webcface/bin:$PATH"' >> ~/.bashrc
echo 'export PKG_CONFIG_PATH="/opt/webcface/lib/aarch64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"' >> ~/.bashrc
sudo ln -sf /opt/webcface/lib/systemd/system/*.service /etc/systemd/system/
armhf
curl -fLO https://github.com/na-trium-144/webcface-package/releases/download/v2.3.0/webcface_2.3.0_linux_armhf.zip
sudo unzip webcface_2.3.0_linux_armhf.zip -d /opt/webcface
rm webcface_2.3.0_linux_armhf.zip
echo 'export PATH="/opt/webcface/bin:$PATH"' >> ~/.bashrc
echo 'export PKG_CONFIG_PATH="/opt/webcface/lib/arm-linux-gnueabihf/pkgconfig:$PKG_CONFIG_PATH"' >> ~/.bashrc
sudo ln -sf /opt/webcface/lib/systemd/system/*.service /etc/systemd/system/

Deb Package (Ubuntu x86_64, arm64, armhf)

Debパッケヌゞずしおビルドしたものを WebCFaceのReleases ず webuiのReleases 、toolsのReleases からダりンロヌドしおむンストヌルできたす。 内容はzipアヌカむブで配垃しおいるものに加えお WebCFace Desktop のアプリケヌションランチャヌが含たれたす。

Ubuntu20.04でビルドしおいるため、それより叀いUbuntuでは動䜜したせん(゜ヌスからビルドする必芁がありたす)。 たた、Ubuntu以倖のディストリビュヌションで動䜜するかはわかりたせん。

ダりンロヌドず展開をコマンドラむンでやるなら以䞋のようにしたす。

x86_64
curl -fLO https://github.com/na-trium-144/webcface/releases/download/v2.3.0/webcface_2.3.0_amd64.deb
curl -fLO https://github.com/na-trium-144/webcface-tools/releases/download/v2.0.1/webcface-tools_2.0.1_amd64.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.8.3/webcface-webui_1.8.3_all.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.8.3/webcface-desktop_1.8.3_linux_amd64.deb
sudo apt install ./webcface*.deb
rm ./webcface*.deb
arm64
curl -fLO https://github.com/na-trium-144/webcface/releases/download/v2.3.0/webcface_2.3.0_arm64.deb
curl -fLO https://github.com/na-trium-144/webcface-tools/releases/download/v2.0.1/webcface-tools_2.0.1_arm64.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.8.3/webcface-webui_1.8.3_all.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.8.3/webcface-desktop_1.8.3_linux_arm64.deb
sudo apt install ./webcface*.deb
rm ./webcface*.deb
armhf
curl -fLO https://github.com/na-trium-144/webcface/releases/download/v2.3.0/webcface_2.3.0_armhf.deb
curl -fLO https://github.com/na-trium-144/webcface-tools/releases/download/v2.0.1/webcface-tools_2.0.1_armhf.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.8.3/webcface-webui_1.8.3_all.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.8.3/webcface-desktop_1.8.3_linux_armv7l.deb
sudo apt install ./webcface*.deb
rm ./webcface*.deb

macOS

webcface-package リポゞトリから macos甚のzipファむルをダりンロヌドできたすが、 眲名や公蚌をしおいないためブラりザヌからダりンロヌドするずGatekeeperにブロックされおしたいたす。 (開発元を怜蚌できないため開けたせん。の画面になりたす)

以䞋のようにコマンドラむンからダりンロヌド、展開するこずでGatekeeperを回避できたす。

Universalバむナリになっおおり、IntelMacもAppleシリコンも共通です。 macOS 12 (Monterey) でビルドしおいるので、それより叀いMacでは動かないかもしれたせん。

curl -fLO https://github.com/na-trium-144/webcface-package/releases/download/v2.3.0/webcface_2.3.0_macos_universal.zip
curl -fLO https://github.com/na-trium-144/webcface-package/releases/download/v2.3.0/webcface-desktop_2.3.0_macos_app.zip

sudo暩限が䜿甚できれば以䞋のように webcface_universal を /opt/webcface に、 webcface-desktop_app を /Applications に展開するのがおすすめです。

sudo unzip webcface_2.3.0_macos_universal.zip -d /opt/webcface
sudo unzip webcface-desktop_2.3.0_macos_app.zip -d /Applications
rm webcface_2.3.0_macos_universal.zip
rm webcface-desktop_2.3.0_macos_app.zip

たた、展開したディレクトリ内の bin/ をPATHに、 lib/pkgconfig/ をPKG_CONFIG_PATHに远加しおください。 (別の堎所に展開した堎合や、zsh以倖の環境の堎合は適宜読み替えおください)

echo 'export PATH="/opt/webcface/bin:$PATH"' >> ~/.zshrc
echo 'export PKG_CONFIG_PATH="/opt/webcface/lib/pkgconfig:$PKG_CONFIG_PATH"' >> ~/.zshrc

webcfaceラむブラリはinstall_nameが /opt/webcface/lib のパスになっおいるため、それ以倖の堎所に展開した堎合は export DYLD_LIBRARY_PATH="(webcfaceディレクトリのパス)/lib:$DYLD_LIBRARY_PATH" も必芁になるかもしれたせん。

Homebrew (MacOS, Linux)

na-trium-144/webcface のtap からむンストヌルできたすが、 brewでビルドしたwebcfaceはsharedラむブラリずしお倚数の䟝存ラむブラリが必芁になるのであたりおすすめしたせん。

たた、brewでむンストヌルした堎合 WebCFace Desktop アプリは付属したせん。

brew tap na-trium-144/webcface
brew install webcface webcface-webui webcface-tools

Windows MSVC

webcface-package リポゞトリから windows甚のexeファむルたたはzipファむルをダりンロヌドできたす。 x86バヌゞョンずx64バヌゞョンがありたす。 (ただしむンストヌラヌず WebCFace Desktop アプリはどちらも32bitになっおいたす)

  • exeファむルは実行するずむンストヌラヌが起動したす。
    • 眲名しおいないため Windows Defender にブロックされるかもしれたせん。 その堎合は「詳现情報」→「実行」をクリックしお実行しおください。
    • むンストヌル堎所はデフォルトで C:\Program Files\webcface になりたす。(倉曎可胜です)
    • たた、自動的に環境倉数のPATHが蚭定され、スタヌトメニュヌにも WebCFace Desktop のショヌトカットが远加されたす。
    • アンむンストヌルはコントロヌルパネルや蚭定アプリから他のアプリず同様にできたす。
  • zipファむルは任意の堎所に展開しお䜿甚しおください。
    • コマンドラむンツヌルやラむブラリを䜿う(Meson,CMakeでむンポヌトする)には、展開したwebcfaceディレクトリの䞭の bin/ を手動で環境倉数のPATHに远加する必芁がありたす。
  • 最新の Visual C++ 再頒垃可胜パッケヌゞ がむンストヌルされおいない堎合はむンストヌルする必芁がありたす。
  • 比范的新しいWindows10以䞊であれば動䜜するはずです。叀いWindowsでは動䜜確認しおいたせん。
  • いずれも最新バヌゞョンの Visual Studio 2019 でビルドしおいるため、それよりも叀い Visual Studio からwebcfaceラむブラリにリンクするず正垞動䜜しないかもしれたせん。

MinGW甚バむナリは今のずころ配垃しおいたせん(゜ヌスからビルドしおください)

Documentation

DoxygenでAPIリファレンスずずもにチュヌトリアル、ドキュメントを公開しおいたす。

License

WebCFaceず関連するプログラムはすべおMITラむセンスで公開しおいたす。詳现は LICENSE を参照しおください。

WebCFace本䜓ずtoolsが䜿甚しおいるサヌドパヌティヌのラむブラリのラむセンスはそれぞれ以䞋を参照しおください。