先輩曰く、ROS2というのが流行ってるとのこと
とりあえず、ROS2とはなにか、AIに聞いてみよう
ROS2(Robot Operating System 2)は、ロボット開発のためのオープンソースフレームワークです。名前に「OS」とありますが、実際にはLinuxやWindowsの上で動く「ミドルウェア(通信や制御の土台となるソフトウェア基盤)」に近いものです。
🔑 ROS2の特徴
- 分散システムの通信をサポート
- ロボットを構成する各モジュール(センサー、モーター制御、カメラ、AI処理など)を「ノード」として分け、
それらが「トピック(メッセージのやり取り)」を介して通信します。- リアルタイム性と信頼性の向上
- ROS1(初代ROS)の課題だったリアルタイム性・信頼性を改善し、
DDS(Data Distribution Service)という産業用通信規格をベースにした通信を採用しています。- マルチプラットフォーム対応
- Linuxだけでなく、WindowsやmacOS、組み込みシステム(RTOSなど)でも動作可能。
- セキュリティ強化
- データ暗号化や認証機能が追加され、産業ロボットや自動運転など安全性が求められる分野でも利用しやすくなっています。
- 豊富なエコシステム
- SLAM(自己位置推定と地図作成)、ナビゲーション、画像認識などのパッケージが揃っており、研究から実用まで幅広く使えます。
📌 具体的な利用例
- 自動運転車のセンサー統合と経路計画
- 工場ロボットの協調制御
- ドローンの飛行制御とカメラ画像処理
- 研究用のサービスロボットや家庭用ロボット
👉 まとめると、ROS2は 「ロボットの脳や神経系をつなぐための共通基盤」 といえます。
なんでも、最近の工場によく使われて、(使うのはめんどくさいけど)使えるとAIとの連携が楽になるシステムらしい
正直、Webやシステム、サーバー、回路まで各種言語がある程度使える時点で、そっちでいいよね。となっているが、すべての動作や連携がPython一つで終わるのは、魅力的と言える。
まあ、とりあえず、使ってみよう
DockerとROS2の初期設定
開発用PCではスペックが心もとないので、今回は開発用(兼ゲーム用)のPCにVB経由でUbuntu24.04を入れてその中で作っていく。
VBはネットワークをブリッジでの接続にして、同一ネットワークの他PCからの接続ができるようにしておこう
Step.1) Dockerを入れる
# 1) 依存パッケージ
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
# 2) Dockerの公式GPG鍵とレポジトリ登録
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 3) Docker Engine 本体
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 4) sudoなしで使えるように(再ログインが必要)
sudo usermod -aG docker $USER
再ログイン(VBの再起動でも可)後に、
docker run hello-world
が通ればOK。
※ネットワークが繋がってないと、動かないので注意!
Step.2)ROS2動作テスト用のJazzyイメージを試そう
# 対話シェルで入る(終了すると自動削除)
docker run -it --rm osrf/ros:jazzy-desktop
# 中に入ったら
ros2 --help
ros2 pkg list | head
たまに BrokenPipeError になることがあるが、特に気にしない(なーにがあってもきにしない~♪)
とりあえず、動いていそうならデモノードを動かしましょう。
apt-get update
apt-get install -y ros-jazzy-demo-nodes-cpp ros-jazzy-demo-nodes-py
ここから、ターミナルをもう一つ起動します。
ただ、コンテナID(Dockerの仮想PCの名称)は環境ごとに違うので、いい感じに書き換えてください。([container ID]を docker ps で参照して、適切な物に置き換えてください。)
docker exec -it [container ID] /ros_entrypoint.sh bash
2つのターミナルが起動できたら、それぞれで
ros2 --help
を使用し、ros2コマンドが使えるか確認しておきましょう。
ターミナル1:
ros2 run demo_nodes_cpp talker
ターミナル2:
ros2 run demo_nodes_cpp listener
それぞれのターミナルで、[INFO] … Publishing: ‘Hello World’ と、受信側に I heard: … が流れればOKです。
とりあえず、これでDockerは閉じましょう(閉じなくてもいいけど、重くなっても知らないよ?)
Dockerの閉じ方は exit いつものだよね。
Step.3)ワークスペースを作ろう
ホスト側(dockerじゃない場所)から任意のディレクトリを作り、さっきのコンテナに追加しよう。
#ワークスペース作成
mkdir -p ~/ros2_ws/src
#コンテナにディレクトリを追加して、起動
docker run --rm -it \
-v ~/ros2_ws:/ws \
osrf/ros:jazzy-desktop
#マウント確認
ls /ws
touch /ws/hello_from_container.txt
指定のディレクトリ(LinuxのHome/ros2_ws)に新しく.txtが入っていれば成功
ここで、ビルドできるか試しておこう
git clone https://github.com/ros2/examples.git src/examples
colcon build
source install/setup.bash
ros2 run examples_rclcpp_minimal_publisher publisher_lambda
これで、publisher(発信者)が起動するはずだから、別のターミナルで
ros2 run examples_rclcpp_minimal_subscriber subscriber_lambda
を使ってトピックをリッスンしてみよう。
ros2における状況確認用のコマンドは下記の通り
ros2 topic list # どんなトピックがある?
ros2 topic echo /topic # パケット中身を表示
ros2 topic hz /topic # 送信レート
ros2 node list # 動いているノード一覧
ros2 interface show std_msgs/msg/String # メッセージ定義
これを使えば、ROS2同士ならいつでも連絡が取れるよ!