ロボット開発概要

ROS 1/2やHW選定、四駆・アーム型ロボットについて

過去の弊社の勉強会資料の、まとめ です。一部、正確ではないかもしれない事を、ご容赦下さい。

2026/4/25

ROS とは? (ROS 1/2共通)

•Robot Operating Systemの略 (OSと名が付くが、実際には主にLinux上に載るミドルウェアである)
•ロボットを制御するための仕組み
•開発ツールやライブラリーが含まれている
•オープンソースのソフトウェア・プラットフォーム
•Linux系OS上を中心に動く
•世界中の人が使用している
•開発言語: C++、Python等
•RTミドルウェア(RTM)との比較:
•RTMは、Winでも動くが、国内団体が開発したものが多い
•RTMはGUIでの開発だが、ROSはCUIが基本である
→ 世界展開は、ROS程でない (英語のドキュメントやチュートリアルが少ないため)

ROS 1に含まれる内容

  • 通信
  • 各種ツール
    • catkin (ビルドシステム)
    • rviz (ロボットの情報を3次元に可視化する)
    • ROSbag (ROS メッセージ データを保存するためのファイル形式)
    • ROSlaunch (複数のROSノードをまとめて起動/停止するためのツール)
    • Gazebo (オープンソースの2D/3Dロボット・シミュレーター)

ROS 通信モデル

トピック通信 (単体)

トピック通信 (複数)

サービス通信

アクション通信

ROS 通信比較

種類 特徴 用途
トピック通信 連続データ
多対多通信可能
センサーデータ
ロボット呼び出し状態
サービス通信 短時間処理 単純呼び出し
状態把握
アクション通信 複雑
長時間動作
ロボット処理実行

catkin とは? (ROS 1のみ)

  • 1例として、次のコマンドを実行するとビルドされる

「イメージ的には」gccやg++みたいなモノ

$ mkdir -p ~/catkin_ws/src (ディレクトリー作成)

$ cd ~/catkin_ws

$ catkin_make

※ catkin build(新コマンド)でも、ビルドできる

(catkin_make後にcatkin buildするのは、移行作業が必要)

rviz とは? (ROS 1/2 共通)

1.URDFモデル(関節等)を作る

2.ロボットを動かすノードを作る

3.rvizとロボット動作を起動する

LiDARやSLAMで作ったマップ上に、ロボットが動くのが再現される

LiDARとは? (ROS 1/2 共通)

  • LiDAR = Light Detection And Ranging

レーザーを照射して、反射から距離や物体を検知する

SLAM とは? (ROS 1/2 共通)

  • SLAM = Simultaneous Localization And Mapping

自己位置推定と地図作成をするもの

Gazebo とは? (ROS 1/2 共通)

  • ロボットのシミュレーターである
  • 例:

1.CADでSTLファイルを作成

2.URDFモデルを作成

3.シミュレーター上で動かす

 

STL: Standard Triangulated Language

URDF: Unified Robot Description Format

ROSを用いた開発手順 (ROS 1/2 共通)

ROS 2の概要

  • 複数台のロボットを同時制御
  • 組み込み系のマイコン等、マルチプラットフォーム対応
  • 通信品質確保やリアルタイム通信機能を標準対応化
  • ROS 1と2の互換性は、低い (ただし、パッケージは移植可能)
  • ドキュメントやチュートリアルが少ない

複数台ロボット制御

  • Open-RMF等を使って、ロボットを群制御できる
  • RMF: Robotics Middleware Framework
  • オープンソース
  • ロボット群や、ドアやエレベーター、建物を相互運用する
  • ロボット同士の干渉を減らす → 処理負荷を軽減

ROS 1からの変更点

  • ビルドコマンドが変更 (catkin_make / catkin build → colcon build)
  • ROS Master不要 (1は、一々起動する必要があった)
  • パラメーターをノード毎に持つようになった (ROS Masterが関係)
  • 別マシンとの接続は、自動的に発見される (1は指定しないと、できない)
  • msgの型のルールが変更
  • ROS時刻が、2種類から3種類に変更された
  • 非同期APIがある (1は、同期APIしかなかった)

ROS 1からの変更点

  • catkin_make のROS 2版

(ROS 2 PG類をビルドするためのコマンド)

  • 例 (ビルドしてから実行する)

$ cd ros2_ws

$ colcon build

$ ros2 run “パッケージ名称” “実行名称”

colcon とは? (ROS 2のみ)

ノード とは?

  • ROS/ROS2のプログラムの単位
  • 通信して、他のノードと情報交換を行う

ROS 1/2 のパラメーター機能の違い

  • パラメーター
    • ノード実行中に変更可能な変数
    • 読み書きはサーバーを通じて実施する
  • ROS 1/2のサーバー機能の違い:
    • ROS 1 ・・・ マスターが持つ
    • ROS 2 ・・・ ノードが持つ

別マシンとの接続

  • ROS 1
    • ROS Master を使用して、IPアドレス等を指定しなければ、ならない
  • ROS 2
    • OMGのDDS対応
    • 自動探索できるので、通信しやすい
    • 多様な環境で利用可能

※ OMG: Object Management Group

※ DDS: Data Distribution Service

通信の相違

  • ROS 1/2 両対応
    • Pub & Sub通信 (メッセージを送信して受信する)
    • Service通信 (リスエストを送ると、レスポンスが返る)
    • Action通信 (数種コマンドを送ると、ステータス結果や応答が返る)
  • ROS 1/2 違い
    • 通信方法
    • ROS 1: TCP (一般にWebブラウジングやファイル転送に使われる)
    • ROS 2: UDP (一般にストリーミング等に使われる)
    • ROS 2 ではroscore不要
    • メッセージ型
      • ROS 1: std_msgs::String
      • ROS 2: std_msgs::msgs::String

ROS時刻

  • ROS1
    • ROS時刻はROS::Time
    • 実時刻はROS::WallTime
  • ROS2
    • rclcpp::Timeの1つの型。次から選べる
    • RCL_ROS_TIME : システムクロックをダイレクトに取得する
    • RCL_SYSTEM_TIME : use_sim_timeがtrueならば、/clockトピックから時刻を計算する
    • RCL_STEADY_TIME : HWの周辺機器が絡む時に使う
    • 違うオプションのTime同士の演算を行うとexceptionが起きる

対応OS

  • ROS 1
    • Linux(/Windows)
  • ROS 2
    • Linux、Windows (10のみサポート)、Mac

組み込みシステムでの利用

  • mROS 2
  • 例(ESP 32):
    • パッケージをgitからクローンする
    • 同一NWでの作動が条件
    • IPアドレス等を設定する
    • 基板上のROS 2で、Pub & Sub通信ができる

ROS 1/2 比較

ROS 2で、出来る事

  • 複数のロボット制御にも対応
  • 組み込みプラットフォームに対応
  • リアルタイム制御可能
  • NW品質が、アバウトでよい
  • プログラミング形式が、ある程度、固定
  • 製品化に対応

ROS 2で、出来ない事・課題

  • デバイスを物理的に繋いで、インストールだけすれば動くレベルではない
  • ワークスペースやビルドがCUIベースでGUIでない
    • RTミドルウェアはGUIである
  • マルチOS対応と謳っていても、Linuxが主
  • 計算リソースが少ない状態では、動かない
  • 制御系の、電源ぶつ切り等に、かなり弱い
  • 用途がロボット車両や、せいぜい、アームが主
    • 人間型や、四足歩行型には、標準で対応でない
  • 作ったモノに、高度な判断能力が無い
    • 障害物回避等はできても、状況に合わせた高度な動きは出来ない
  • 標準で、音声入力や音声合成に対応していない
  • 標準で、生成AIを用いた指令は、できない
  • 入出力のI/Fが、ROSに依存している
    • rvizやGazebo位がI/Fであり、それ以外は、独自に作る必要がある
  • スマホやタブレット対応でない
  • 標準で、ブラウザーから、直でプログラム作成や作動等はできない
    • Jupyter Notebookのような事は、できない
  • HWがROS対応でないと動かない
  • 他のIoT機器との連携感が、そんなない
  • 標準でデジタルツイン等に対応していない
  • ロケットや飛行機 等を全て制御できる等のレベルではない