警備ロボットシステムを作っています！

SEQSENSE株式会社 ロボットエンジニア
兼 明治大学 研究・知財戦略機構 客員研究員
渡辺 敦志
at-watatsushi.w@ieee.org
https://openspur.org/~atsushi.w/

自動テスト、まわしてますか？

• Continuous Integration‒ ビルドやテストを自動かつ継続的に実行しながら行う開発
代表的なCIツール・サービス

挙動の正しさを担保しながら高速に開発• Continuous Delivary‒ テストに通ったバージョンを自動かつ継続的に実環境に適用

リリースとフィードバックのサイクルを早め素早く価値を高める

モダンなOSSや製品の開発には欠かせない

CC BY-SA 3.0

• OSは共有して、実行空間(ファイルシステム・プロセス・ネットワーク)を分離‒ システム構築手順をコードで表現できる‒ 実行環境と依存関係をイメージにまとめて管理できる‒ 仮想マシンと比較してオーバーヘッドが非常に小さい• Dockerがデファクトスタンダード

Docker, inc, Apache 2.0 license

再現性高くソフトウェアシステムを構築・運用できるCI/CDとの相性がよい• 非常に軽いLinux Distribution‒ 軽量標準Cライブラリ musl (マッスル)‒ 軽量Unixユーティリティ BusyBox

Alpine Linux, CC BY-SA 4.0

デフォルトインストール(Linux kernel 含む)

Docker ベースイメージ

Ubuntu 18.04

1.5 GB

64 MB

Alpine 3.8

503 MB

5.6 MB

ストレージ容量が小さくすむため
Docker Image のベースによく使われる• Alpine Linux用のROSパッケージリポジトリを公開‒ ROSパッケージ‒ Alpine Linux 公式にない依存ライブラリ• Docker Imageを提供

alpine-ros/alpine-ros$ docker pull alpineros/alpine‐ros:kinetic‐ros‐core$ docker pull alpineros/alpine‐ros:melodic‐ros‐core

ROSベースのシステムを軽量な Docker Image で構築可能！

• rviz + neonavigation をインストールして実行してみる# Dockerfile

alpine-ros/package-install-demo

FROM alpineros/alpine‐ros:melodic‐ros‐core
RUN apk add ‐‐no‐cache \ros‐${ROS_DISTRO}‐neonavigation‐launch \ros‐${ROS_DISTRO}‐rviz# コンテナ内からGUIを正しく表示するためのおまじない
RUN apk add ‐‐no‐cache dbus font‐noto mesa‐dri‐intel \&& dbus‐uuidgen && apk del ‐‐no‐cache dbus \&& mkdir /usr/share/X11/xkb
COPY 00‐font.conf /etc/fonts/conf.d/
CMD roslaunch neonavigation_launch demo.launch

等価な Ubuntu ROS 版と比べてインストールがかなり早い• Ubuntu と Alpine でインストール時間、ストレージサイズを比較‒ 素の Linux から、 ros̲core メタパッケージをインストール‒ インストール時間はデフォルトのリポジトリから業務用回線で取得した参考値
ベース Linux Distribution

インストール時間

Ubuntu Linux

51.4 秒

Alpine Linux17.8 秒

Docker イメージサイズ

934 MB

約1/3

約1/2
507 MB

インストール時間とストレージサイズを大幅に削減
プロダクトシステムにも使いやすい！

公式 rosdistro
週1で自動更新

ros/rosdistro

seqsense/aports-ros-updater

Alpine パッケージ定義
seqsense/aports-ros-experimental

パッケージ
Releaseリポジトリ

更新時に自動ビルド(Travis-CI 上で実行)
seqsense/aports-ros-experimental

バイナリパッケージリポジトリ(AWS S3)

パッケージ追加はseqsense/aports-ros-updater に PR をください• ROS Kinetic, Melodicに対応• ROSパッケージ (計273パッケージ)‒ 公式メタパッケージ: ros̲base, ros̲core, perception, robot, viz, navigation‒ デバイスドライバ類: adi̲driver, joy, rosserial, urg̲node, usb̲cam, xsens̲driver, etc.
‒ SEQSENSE関連パッケージ: mcl̲3dl, neonavigation, urg̲stamped, ypspur̲ros• 依存ライブラリ (99パッケージ)‒ PCL, OpenCV, clisp, OGRE, etc.

SEQSENSEの製品に使える程度にはちゃんと動きます！

• インストール先が /usr/ros/${ROS_DISTRO}‒ Alpine のパッケージビルダーが /opt へのインストールを許可しないため• rosdep でROSパッケージの名前解決ができない‒ 非公式ディストリビューションで rospkg が非対応なため‒ 近日対応予定

順次改善予定！

• ダウンロード高速化‒ バイナリパッケージリポジトリのCDN (Contents Delivery Network) 対応‒ SEQSENSE がサーバ維持費用を出しています！

• Python 3 移行
‒ 今年いっぱいで Python 2 サポート終了• ROS 2 対応
‒ 依存関係・ビルド環境の調査中

興味のある方はぜひご協力お願いします！

• 古いメンテナンスされていないパッケージ‒ log4cxx (最後のリリースが2014年)• モダンな環境でのビルドに問題がある古いパッケージ‒ netpbm (ビルド依存関係の不備、テストに必要なライブラリが古すぎる)‒ clisp, SBCL (コア数の多いCPU上でビルドできない)• 満たせないライブラリ依存関係‒ 特定バージョンの 組み合わせに依存していて、ビルド不可(一部のライブラリをバックポートして対応)

軽量を保つために
Alpine 公式リポジトリのパッケージ数が少なめで大変軽量でコンテナフレンドリーな Alpine Linux に ROS を移植
CI/CD の高速化に貢献
バイナリパッケージリポジトリを公開中！

GitHub:https://github.com/alpine-ros/
Docker Hub: https://hub.docker.com/r/alpineros/alpine-ros• Upstream Firstで各所のリポジトリに貢献• ROSパッケージの公開‒ urg̲stamped: タイムスタンプが正確なURGドライバ‒ mcl̲3dl: 軽量な3-D/6-DoFローカリゼーション‒ neonavigation: 3-DoF移動ロボットプランナー

seqsense/urg̲stamped
at-wat/mcl̲3dl
at-wat/neonavigation

SEQSENSEでOSS活動しつつ実用的なロボット開発をしませんか？
※当然、業務時間中にOSS活動できます