こんにちは、しょうたです。最近、ファミレスで見かける配膳ロボット、気になりませんか?特にすかいらーくが導入している猫型ロボット「BellaBot(ベラボット)」の滑らかな動きと障害物回避性能には本当に驚かされます。
実はこの優秀な配膳ロボット、制御システムに**ROS 2(Robot Operating System 2)**という技術が使われているんです。それを知って以来、私もロボット開発に興味を持ち、ROS 2の学習を始めることにしました。
ただ、Apple Silicon Macでの環境構築には少し工夫が必要です。この記事では、MacBook Pro M1 Max上でVMware Fusionを使用し、Ubuntu 22.04 ARM64環境にROS 2 Humble Hawksbillを構築する手順を詳しく解説します。RViz2やGazeboなどのGUIツールもしっかり動作する、実用的な開発環境の構築方法を備忘録としてまとめました。
M1/M2/M3/M4 MacでROS 2開発を始めたい方、VMware Fusionでの仮想環境構築に興味がある方の参考になれば幸いです。
環境概要
ホスト環境
- ハードウェア: MacBook Pro M1 Max (64GB RAM)
- 仮想化ソフトウェア: VMware Fusion
ゲストOS
- OS: Ubuntu 22.04 LTS (Jammy Jellyfish) for ARM64
- 目的: ROS 2開発のためのGUI環境構築
Apple Silicon Mac(M1/M2/M3シリーズ)では、ARM64アーキテクチャに対応したUbuntu環境が必要です。今回はVMware Fusionを使用して仮想マシンを構築します。
仮想マシンのセットアップとOSインストール
ROS 2開発の基盤として、リソース効率の良いUbuntu Server Live Installer (ARM64)をベースに構築します。
Ubuntuイメージのダウンロード
| 設定項目 | 詳細 |
|---|---|
| 推奨イメージ | ubuntu-22.04.x-live-server-arm64.iso |
| ダウンロード元 | Ubuntu公式リリースイメージサイト (Jammy Jellyfish / releaseディレクトリ) |
| 推奨理由 | サーバー版をベースとし、必要なパッケージのみを追加する標準的な方法 |
重要: ARM64版のイメージをダウンロードしてください。Intel版(amd64)では動作しません。
仮想マシンの基本設定
| 設定項目 | 値 |
|---|---|
| プロセッサ | 5コア |
| ストレージ容量 | 64GB |
| メモリ | 16GB |
リソースは開発内容に応じて調整してください。RViz2やGazeboを使用する場合は、メモリ16GB以上を推奨します。
インストール時の設定
| 設定項目 | 値 |
|---|---|
| ユーザー名 | shotalab |
| フルネーム | Shota Kawano |
| サーバー名 (ホスト名) | ubuntu-arm64 |
| キーボードレイアウト | Japanese (Macintosh) |
| OpenSSH | インストールを有効化 |
OpenSSHを有効化しておくことで、後からMacのターミナルから快適に作業できます。
GNOMEデスクトップ環境の導入
ROS 2の可視化ツール(RViz2、Gazeboなど)の使用を可能にするため、標準のデスクトップ環境を追加します。
システムのアップデート
まず、システムを最新の状態にアップデートします。
sudo apt update
sudo apt upgrade -y
GNOMEデスクトップ環境のインストール
標準のUbuntuデスクトップ環境をインストールします。これには、グラフィカルインターフェースに必要なすべてのパッケージとログインマネージャ(GDM3)が含まれます。
sudo apt install ubuntu-desktop -y
注意: このインストールには時間がかかります(環境によって30分〜1時間程度)。気長に待ちましょう。
システムの再起動
新しいデスクトップ環境を有効化するため、システムを再起動します。
sudo reboot
再起動後、GUIログイン画面が表示されます。
VMware Toolsの導入
M1 Mac上のARM64環境では、オープンソースのopen-vm-toolsを使用し、ホストOSとの連携機能を有効化します。
open-vm-tools-desktopのインストール
GUI環境での機能(画面解像度の自動調整、クリップボードの共有)をサポートするパッケージをインストールします。
sudo apt update
sudo apt install open-vm-tools-desktop -y
有効になる機能
| 機能 | 詳細 |
|---|---|
| 画面解像度の自動調整 | 仮想マシンウィンドウのサイズ変更に追従 |
| クリップボードの共有 | macOSとUbuntu間でのコピー&ペーストが可能 |
システムの再起動
ツールの設定を適用するため、システムを再起動します。
sudo reboot
再起動後、ウィンドウサイズを変更すると自動的に解像度が調整されるようになります。
日本語入力環境の設定
ここでは、Macユーザーが快適に作業できるよう、日本語入力システム(IME)であるMozcを導入し、Macの日本語キーボード特有の英数・かなキーでIMEのON/OFFを切り替えられるように設定します。
日本語環境のインストール
まず、GUIの設定画面から日本語環境をインストールします。
言語サポートの追加
- Settings(設定)を開く
- Region & Language > Manage Installed Languages をクリック
- Install / Remove Languages… をクリック
- Japaneseを選択してApply
- パスワードを入力してAuthenticate
- インストールが実行されます
インターフェース言語の設定
インストール後、Region & LanguageのLanguageをJapaneseに設定します。
ポイント: インターフェース言語が日本語になりますが、後述のMozc設定のためにも実施しておきましょう。
キーボードレイアウトの設定
Mac JISキーボードの配列を正しく認識させるため、キーボード配置を設定します。ターミナルで以下のコマンドを実行します。
sudo dpkg-reconfigure keyboard-configuration
対話形式で設定が進むので、以下の選択肢を選んでください。
| 設定項目 | 選択肢 |
|---|---|
| キーボードモデル | Apple Aluminium (JIS) |
| キーボードの国 | Japanese |
| キーボードの配列 | Japanese – Japanese (Macintosh) |
| ナショナル/ラテンモードを切り替える方法 | 切り替えなし |
| ナショナル/ラテン入力で一時切り替えを行う方法 | 一時切り替えなし |
| AltGr として機能させるキー | キーボード配置のデフォルト |
| コンポーズキー | コンポーズキーなし |
| Control+Alt+Backspace を使いますか? | <いいえ> |
設定が完了したら、一度再起動またはログアウトして設定を反映させましょう。
Mozcのキーバインド設定
Ubuntuに標準搭載されている日本語IMEであるMozcのキー設定をカスタマイズし、英数キーで半角英数、かなキーで日本語入力に切り替わるようにします。
Mozcの設定画面を開く
- デスクトップ右上のメニュー(インプットソース)で「Japanese (Mozc)」を選択
- 同じメニューからtools > properties を選択
- Mozcの設定ウインドウが開きます
キーバインディングの編集
- 「キー設定の選択」の右にある「編集…」ボタンをクリック
- 設定ウィンドウ内のリストを編集します
- 入力キーが「Eisu」の行のコマンドをすべて「IME を無効化」に変更
- 入力キーが「Hiragana」の行のコマンドをすべて「IME を有効化」に変更
- OKを押して設定を保存
- 設定を反映させるため、Ubuntu を再起動します
設定後の動作は以下のようになります。
| キー | 動作 |
|---|---|
| 英数キー | 日本語入力OFF(半角英数入力モード) |
| かなキー | 日本語入力ON(ひらがな入力モード) |
英数キーの誤認識問題の修正
VMware Fusion上のUbuntu環境では、Macの英数キーが意図せずCaps Lockとして動作してしまう問題があります。これは、Ubuntu側のキーボード設定ファイル(XKBシンボルファイル)の定義が、Macの英数キーをCaps Lockと誤認しているために起こります。
キー定義ファイルを直接編集し、Caps_Lockとしての機能を削除してEisu_toggle(英数キーの本来の機能)のみを持たせます。
問題箇所の確認
以下のコマンドを実行し、修正対象の箇所を確認します。
grep -n CAPS /usr/share/X11/xkb/symbols/jp
出力例:
47: key <CAPS> { [ Eisu_toggle, Caps_Lock ] };
186: key <CAPS> { [ Eisu_toggle, Caps_Lock ] };
249: replace key <CAPS> { [ Caps_Lock ] };
3箇所でCaps_Lockが定義されていることが確認できます。
設定ファイルの編集
管理者権限でキー定義ファイルを編集します。
sudo nano /usr/share/X11/xkb/symbols/jp
ファイル内の該当箇所を以下のように修正します。
修正箇所1・2(47行目付近と186行目付近の2箇所):
| 修正前 | 修正後 |
|---|---|
key <CAPS> { [ Eisu_toggle, Caps_Lock ] }; | key <CAPS> { [ Eisu_toggle ] }; |
修正箇所3(249行目付近の1箇所):
| 修正前 | 修正後 |
|---|---|
replace key <CAPS> { [ Caps_Lock ] }; | replace key <CAPS> { [ Eisu_toggle ] }; |
nanoエディタの操作:
Ctrl + Wで検索(CAPSと入力)- 該当箇所を編集
Ctrl + Oで保存(Enterで確認)Ctrl + Xで終了
設定の反映
ファイルを保存し、システムを再起動します。
sudo reboot
再起動後、英数キーとかなキーがそれぞれ半角英数、日本語入力の切り替えとして正しく機能するようになります。これで、Macユーザーにとってストレスのない日本語入力環境が整いました!
SSH接続の設定
作業性を考慮してSSH接続でセットアップを実施します。MacのターミナルからUbuntu環境にアクセスできると、コピー&ペーストも楽になります。
IPアドレスの確認
Ubuntu側で以下のコマンドを実行し、IPアドレスを確認します。
ip addr
inetの後に表示されるIPアドレス(例: 172.16.170.134)をメモしてください。
ホストPCからSSH接続
IPアドレスを確認後、Mac側のターミナルから以下のコマンドで接続します。
ssh shotalab@172.16.170.134
初回接続時は、フィンガープリントの確認が表示されるのでyesを入力してください。
ROS 2 Humble Hawksbillのインストール準備
ロケール設定の確認と調整
ROS 2の動作に必要なUTF-8ロケールを設定します。
ロケール設定の確認
locale
ロケールの設定(必要な場合)
sudo apt update && sudo apt install locales -y
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
ROS 2リポジトリの設定
以前の設定でエラーが発生した場合を考慮し、古いリポジトリファイルを削除し、最新の鍵を確実に取得した上で、新しいリポジトリ行を設定します。
古いリポジトリ設定の削除
過去に作成したROS 2のリポジトリファイルを削除します。
sudo rm -f /etc/apt/sources.list.d/ros2.list
GPGキーの再ダウンロードと配置
GPGキーを管理者権限でダウンロードし、システムの鍵リングディレクトリに上書き配置します。
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
ROS 2リポジトリの再追加
ARM64版ROS 2 Humbleのリポジトリソースを再設定します。signed-byオプションが、上記で配置した鍵ファイルを指していることを確認してください。
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
ROS 2 Humble Hawksbillのインストール
リポジトリが正しく設定されたか確認し、ROS 2をインストールします。
パッケージインデックスの更新
ここで前回のエラーが解消されているかを確認します。
sudo apt update
期待される結果: packages.ros.orgに対してErr:やW: GPG errorが表示されず、Get:またはHit:でリポジトリ情報が取得されれば成功です。
ROS 2 Desktop Fullのインストール
更新が成功したら、開発に必要なすべてのツール(RViz2、Gazebo Classicなど)を含むパッケージをインストールします。
sudo apt install ros-humble-desktop-full -y
注意: このインストールも時間がかかります(20分〜40分程度)。
環境設定
シェルを起動するたびにROS 2のコマンドが使えるように設定します。
.bashrcへの永続的な設定
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
現在のシェルに反映
source ~/.bashrc
動作確認
ROS 2環境の確認
環境変数を参照し、ROS 2のディストリビューションが正しく設定されているかを確認します。
echo $ROS_DISTRO
期待される出力: humble
デモの実行(Talker-Listener)
ノード間のメッセージ通信が正しく機能しているかを確認します。
ターミナル1(リスナー: Subscriber)
ros2 run demo_nodes_cpp listener
ターミナル2(トーカー: Publisher)
別の新しいターミナルを開くか、source ~/.bashrcを実行してから以下のコマンドを実行します。
ros2 run demo_nodes_py talker
ターミナル1で「I heard: [Hello World: ]」というメッセージが連続して表示されれば、基本的なROS 2環境構築は成功です。
ROS 2 GUIツールの動作確認

GUI環境が正しくセットアップされ、ROS 2の可視化ツールが動作するかを確認します。
1. RViz2の起動テスト
RViz2は3D可視化ツールです。最もシンプルな起動方法で動作確認を行います。
rviz2
期待される結果: 3Dビューアのウィンドウが表示されます。正常に起動すれば、グリッド表示や座標軸が確認できます。
2. turtlesimデモ(GUIあり)
最も簡単で視覚的なデモです。亀をキーボードで操作することで、ROS 2のノード間通信とGUI表示の両方を確認できます。
ターミナル1: turtlesimノードの起動
ros2 run turtlesim turtlesim_node
期待される結果: 亀のいるウィンドウが表示されます。
ターミナル2: キーボードコントロール
別のターミナルを開き、以下のコマンドを実行します。
ros2 run turtlesim turtle_teleop_key
操作方法: このターミナルをアクティブにして、矢印キーを押すと亀が動きます。
3. rqt_graphでノードの可視化
ROS 2のノード間の接続を視覚的に確認できます。
rqt_graph
推奨: turtlesimデモを実行中にこれを起動すると、ノード間の通信が視覚的に確認できます。
4. Gazeboシミュレータの起動確認
ROS 2 Humble環境では、Ignition Gazebo(Gazebo Fortress)が標準シミュレータとして使用されます。
Ignition Gazeboの起動
ign gazebo
期待される結果: Gazeboシミュレータのウィンドウが起動し、3Dシミュレーション環境が表示されます。
補足情報
| 項目 | 詳細 |
|---|---|
| コマンド | ign gazebo (Ignition Gazeboの起動コマンド) |
| パッケージ | ros-humble-desktop-fullに含まれる |
| 備考 | 従来のgazeboコマンドではなく、ign gazeboを使用する |
まとめ
以上で、M1 Max MacBook Pro上のVMware Fusion環境に、ROS 2 Humble開発環境を構築する手順は完了です。
この環境では以下が可能になります:
- ROS 2ノードの開発とテスト
- RViz2による3Dビジュアライゼーション
- turtlesimやrqt_graphなどのGUIツールの使用
- Ignition Gazeboによるロボットシミュレーション
- MacとUbuntu間でのシームレスなファイル共有とクリップボード連携
Apple Silicon Macでのロボット開発やROS 2学習の第一歩として、この環境構築が参考になれば幸いです。
Happy Robot Development!

コメント