Web-based IPC & Dashboard-like UI
ROS1ã®ãããªããã»ã¹ééä¿¡ãšãGUIã«ããããŒã¿ã®å¯èŠåãé¢æ°åŒã³åºããã§ããã·ã¹ãã ã§ãã
C++ (C++17以äž), C, Python (3.8以äž), JavaScript/TypeScript ã§çžäºã«æ°å€ãæååãç»åãªã©ã®ããŒã¿ãéåä¿¡ããããé¢æ°ãåŒã³åºãããããããšãã§ããŸãã
Linux, MacOS, Windows(MSVC, MinGW, MSYS2, Cygwin) ã§åäœããŸãã
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) orwebcfaced-<version>.dll
(Debug)
ã®1ã€ã®ã¿ã§ãããæåã§ãã®ã©ã€ãã©ãªã«ãªã³ã¯ããŠäœ¿ãããšãã§ããŸãã
WebCFaceå
éšã§ã¯å€éšã©ã€ãã©ãªãå€æ°äœ¿çšããŠããŸããããããã¯ã·ã³ãã«ããã¹ãŠéå
¬éã«ããŠããã®ã§ãŠãŒã¶ãŒã䜿çšããã©ã€ãã©ãªãšã¯å¹²æžããŸããã
(WebCFaceããœãŒã¹ãããã«ãããå Žåãšãbrewã§ã€ã³ã¹ããŒã«ããå Žåãé€ã)
Python, JavaScript ã«ã¯ PyPI / npm ã« webcface
ããã±ãŒãžãçšæããŠããã®ã§ãããã€ã³ã¹ããŒã«ããã ãã§äœ¿ããŸãã
éä¿¡ã«WebSocketã䜿çšããŠãããããWebãã©ãŠã¶äžã§ããã®ãŸãŸåäœããŸãã
å°ãé£æ床ã¯äžãããŸãããCã®APIãçµç±ããããšã§ä»ã®èšèªããã䜿çšã§ãããšæããŸãã
WebCFaceã®éä¿¡ã«ã¯WebSocketãšMessagePackã䜿ã£ãŠããŸãã ãã®ããããã»ã¹éã ãã§ãªãWebãã©ãŠã¶ãŒãšã®éä¿¡ãå¯èœã«ãªã£ãŠããŸãã ããã«åäžãã·ã³äžãDocker,WSLçµç±ãªã©äœ¿çšå¯èœãªå Žåã¯TCPã®ä»£ããã«Unixãã¡ã€ã³ãœã±ããã䜿çšããŸãã
Wi-FiãEtherNetçµç±ã§è€æ°ã®PCé(OSåãã)ã§éä¿¡ããããšãå¯èœã§ãã WindowsãšWSL1/2ã®éã®çžäºéä¿¡ãèªåçã«æ¥ç¶ãããŸãã
WebCFaceã§éåä¿¡ã§ããããŒã¿åãšããŠ
- æ°å€åã»æ°å€é åå(Value)
- æååå(Text)
- ç»å(Image)
- é¢æ°åŒã³åºã(Func)
- ããã¹ããã°(Log)
ãªã©ã®åãçšæãããŠããŸãã ãŠãŒã¶ãŒãã¡ãã»ãŒãžåãå®çŸ©ã§ããROSãgRPCãšæ¯ã¹ããšèªç±åºŠã¯äœããããããŸãããã ãããã®ããŒã¿åã®çµã¿åããã§ããã°ç°¡åã«éåä¿¡ãããããšãã§ããŸãã ã³ãŒãäŸã«ã€ããŠã¯ããã¥ã¡ã³ãã® 1-2. Tutorial (Communication) ãåç §ããŠãã ããã
ImageåããŒã¿ã¯éåä¿¡ã®éçšã§ç»åãçž®å°ãããJPEGãPNGã«å§çž®ããããšãã£ãæäœããµãŒããŒåŽã§è¡ãããšãã§ããŸãã 衚瀺ç®çãªã©ãå§çž®ããç»åã§ååãªå Žåã«ã¯ç°¡åã«éä¿¡éãåæžã§ããŸãã
WebCFaceã®éä¿¡ããŒã¿åœ¢åŒã¯OSãã©ã€ãã©ãªã®èšèªã«ãããå
±éã§ããŸãããŒãžã§ã³éã§åŸæ¹äºææ§ããããŸãã
ã€ãŸããç°ãªãããŒãžã§ã³ã®ã¯ã©ã€ã¢ã³ãå士ã§ããç°ãªãããŒãžã§ã³ã®OSã§ãåé¡ãªãéä¿¡ãå¯èœã§ãã
(C++ã®ver1.1.6以åãé€ã)
ãã ãããããã®ã¯ã©ã€ã¢ã³ãã®ããŒãžã§ã³ãããµãŒããŒã®æ¹ãæ°ããããŒãžã§ã³ã§ããå¿
èŠããããŸãã
ãµãŒããŒããã¯ã©ã€ã¢ã³ãã®ã»ããæ°ããå Žåã®åäœã¯ä¿èšŒããŸããã
WebCFaceã§ã¯ããã°ã©ã éã§ããŒã¿ã®éåä¿¡ãã§ããAPIã ãã§ãªãã Webãã©ãŠã¶ãŒããWebCFaceã§éä¿¡ãããŠããããŒã¿ãå¯èŠåãããé¢æ°ãåŒã³åºãããã§ããUI(WebUI)ãæäŸããŸãã
ããã«ãã¿ã³ãå ¥åæ¬ãªã©ã®äžŠã¹æ¹ãWebCFaceã䜿ã£ãC++,Pythonãªã©ã®ããã°ã©ã ã®åŽã§å®çŸ©ããŠãããWebUIã«è¡šç€ºãããããšãã§ãã ããã«ããHTMLãCSSã®ç¥èããªããŠãç°¡æãªUIãäœæããããšãã§ããŸãã ã³ãŒãäŸã¯ããã¥ã¡ã³ãã® 1-1. Tutorial (Visualizing) ãåç §ããŠãã ããã
ãŸããåæ§ã«2Dã3Dã®å³åœ¢ãWebCFaceã䜿ã£ãããã°ã©ã åŽã®èšè¿°ã®ã¿ã§WebUIã«æç»ãããããšãã§ããŸãã
ãããã®æç»ããŒã¿ã¯ View, Canvas2D, Canvas3D ãšããŠä»ã®ããŒã¿å(æ°å€ãæååãªã©)ãšåæ§ã«WebCFaceå ã®éä¿¡ããŒã¿ãšããŠååšããŠããã WebUI以å€ã§ããããã®ããŒã¿ãåä¿¡ããŠè¡šç€ºããã¢ããªãäœæããããšã¯å¯èœã§ãã
ã³ãã³ãã©ã€ã³ããWebCFaceã®ããŒã¿ã«ã¢ã¯ã»ã¹ã§ããã³ãã³ããããã€ãçšæããŠããŸãã
webcface-launcher ã¯äºåã«ç»é²ããŠãããã³ãã³ãã®èµ·åã»åæ¢ãWebCFaceã®Viewããæäœããããšãã§ããæ©èœã§ãã serverãšlauncherã ããåžžæèµ·åããŠãããWebUIã䜿ã£ãŠããã°ã©ã ããªã¢ãŒãã«æäœãããšãã䜿ãæ¹ãã§ããŸãã
webcface-tui ã¯ã¿ãŒããã«äžã§æäœã§ããTUIã¢ããªã§ãWebãã©ãŠã¶ãéããªããŠãããŒã¿ããªã¢ã«ã¿ã€ã ã§ç¢ºèªããããViewã®æäœãã§ããŸãã
Doxygenã§APIãªãã¡ã¬ã³ã¹ãšãšãã«ãã¥ãŒããªã¢ã«ãããã¥ã¡ã³ããå ¬éããŠããŸãã
- ããŠã³ããŒããã€ã³ã¹ããŒã«æ¹æ³ã¯README(ãã®äž)ã«ãããŸã
- 1 ãã¥ãŒããªã¢ã«: Visualizing / Communication
- 2 Server / WebUI
- 3 ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã®ã»ããã¢ãã / WebCFaceã®ãœãŒã¹ããã®ãã«ã
- C/C++ APIãªãã¡ã¬ã³ã¹
- webcface-python APIãªãã¡ã¬ã³ã¹
- webcface-js APIãªãã¡ã¬ã³ã¹
- webcface: ãµãŒã㌠& C/C++ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãª (ãã®ãªããžããª)
- webcface-webui: webãã©ãŠã¶çšUIã¢ããª
- webcface-tools: ã³ãã³ãã©ã€ã³ããŒã«çŸ€
- webcface-js: JavaScriptã¯ã©ã€ã¢ã³ãã©ã€ãã©ãª
- webcface-python: Pythonã¯ã©ã€ã¢ã³ãã©ã€ãã©ãª
- webcface-package: ãã«ããããµãŒããŒãã©ã€ãã©ãªãWebUIãTools ãã¢ãŒã«ã€ãåããŠãªãªãŒã¹ããŠããå Žæ
- homebrew-webcface: Homebrewã®Tapã管çããŠããŸã
WebCFace ver1ã«ã€ããŠã¯ v1ãã©ã³ã ãåç §ããŠãã ããã
ver2ã¯ä»¥äžã®ããã«Linux,Windows,MacOSçšã«ãã«ãããã¢ãŒã«ã€ããããŠã³ããŒãã§ããŸãã
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.4.1-1/webcface_2.4.1-1_linux_amd64.zip
sudo unzip webcface_2.4.1-1_linux_amd64.zip -d /opt/webcface
rm webcface_2.4.1-1_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.4.1-1/webcface_2.4.1-1_linux_arm64.zip
sudo unzip webcface_2.4.1-1_linux_arm64.zip -d /opt/webcface
rm webcface_2.4.1-1_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.4.1-1/webcface_2.4.1-1_linux_armhf.zip
sudo unzip webcface_2.4.1-1_linux_armhf.zip -d /opt/webcface
rm webcface_2.4.1-1_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ããã±ãŒãžãšããŠãã«ããããã®ã 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.4.1/webcface_2.4.1_amd64.deb
curl -fLO https://github.com/na-trium-144/webcface-tools/releases/download/v2.1.0/webcface-tools_2.1.0_amd64.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.10.0/webcface-webui_1.10.0_all.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.10.0/webcface-desktop_1.10.0_linux_amd64.deb
sudo apt install ./webcface*.deb
rm ./webcface*.deb
arm64
curl -fLO https://github.com/na-trium-144/webcface/releases/download/v2.4.1/webcface_2.4.1_arm64.deb
curl -fLO https://github.com/na-trium-144/webcface-tools/releases/download/v2.1.0/webcface-tools_2.1.0_arm64.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.10.0/webcface-webui_1.10.0_all.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.10.0/webcface-desktop_1.10.0_linux_arm64.deb
sudo apt install ./webcface*.deb
rm ./webcface*.deb
armhf
curl -fLO https://github.com/na-trium-144/webcface/releases/download/v2.4.1/webcface_2.4.1_armhf.deb
curl -fLO https://github.com/na-trium-144/webcface-tools/releases/download/v2.1.0/webcface-tools_2.1.0_armhf.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.10.0/webcface-webui_1.10.0_all.deb
curl -fLO https://github.com/na-trium-144/webcface-webui/releases/download/v1.10.0/webcface-desktop_1.10.0_linux_armv7l.deb
sudo apt install ./webcface*.deb
rm ./webcface*.deb
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.4.1-1/webcface_2.4.1-1_macos_universal.zip
curl -fLO https://github.com/na-trium-144/webcface-package/releases/download/v2.4.1-1/webcface-desktop_2.4.1-1_macos_app.zip
sudoæš©éã䜿çšã§ããã°ä»¥äžã®ããã« webcface_universal ã /opt/webcface ã«ã webcface-desktop_app ã /Applications ã«å±éããã®ãããããã§ãã
sudo unzip webcface_2.4.1-1_macos_universal.zip -d /opt/webcface
sudo unzip webcface-desktop_2.4.1-1_macos_app.zip -d /Applications
rm webcface_2.4.1-1_macos_universal.zip
rm webcface-desktop_2.4.1-1_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"
ãå¿
èŠã«ãªããããããŸããã
na-trium-144/webcface ã®tap ããã€ã³ã¹ããŒã«ã§ããŸããã brewã§ãã«ãããwebcfaceã¯sharedã©ã€ãã©ãªãšããŠå€æ°ã®äŸåã©ã€ãã©ãªãå¿ èŠã«ãªãã®ã§ããŸãããããããŸããã
ãŸããbrewã§ã€ã³ã¹ããŒã«ããå Žå WebCFace Desktop ã¢ããªã¯ä»å±ããŸããã
brew tap na-trium-144/webcface
brew install webcface webcface-webui webcface-tools
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çšãã€ããªã¯ä»ã®ãšããé åžããŠããŸãã(ãœãŒã¹ãããã«ãããŠãã ãã)
WebCFaceãšé¢é£ããããã°ã©ã ã¯ãã¹ãŠMITã©ã€ã»ã³ã¹ã§å ¬éããŠããŸãã詳现㯠LICENSE ãåç §ããŠãã ããã
WebCFaceæ¬äœãštoolsã䜿çšããŠãããµãŒãããŒãã£ãŒã®ã©ã€ãã©ãªã®ã©ã€ã»ã³ã¹ã¯ãããã以äžãåç §ããŠãã ããã
- msgpack-c (Boost Software License) : https://github.com/msgpack/msgpack-c
- eventpp (Apache 2.0) : https://github.com/wqking/eventpp
- spdlog (MIT) : https://github.com/gabime/spdlog
- curl : https://curl.se/docs/copyright.html
- Asio (Boost Software License) : http://think-async.com/Asio/
- Crow (BSD 3-Clause) : https://github.com/CrowCpp/Crow
- CLI11 (BSD 3-Clause) : https://github.com/CLIUtils/CLI11
- UTF8-CPP (BSD 1.0) : https://github.com/nemtrif/utfcpp
- ImageMagick: https://imagemagick.org/script/license.php
- tiny-process-library (MIT) : https://gitlab.com/eidheim/tiny-process-library
- toml++ (MIT) : https://github.com/marzer/tomlplusplus
- FTXUI (MIT) : https://github.com/ArthurSonzogni/FTXUI