記事一覧

【M1 Mac】VMware FusionでROS 2 Humble環境を構築する完全ガイド

最近、ファミレスで見かける配膳ロボット、気になりませんか?特にすかいらーくが導入している猫型ロボット「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の設定画面から日本語環境をインストールします。

言語サポートの追加

  1. Settings(設定)を開く
  2. Region & Language > Manage Installed Languages をクリック
  3. Install / Remove Languages… をクリック
  4. Japaneseを選択してApply
  5. パスワードを入力してAuthenticate
  6. インストールが実行されます

インターフェース言語の設定

インストール後、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の設定画面を開く

  1. デスクトップ右上のメニュー(インプットソース)で**「Japanese (Mozc)」**を選択
  2. 同じメニューからtools > properties を選択
  3. Mozcの設定ウインドウが開きます

キーバインディングの編集

  1. **「キー設定の選択」の右にある「編集…」**ボタンをクリック
  2. 設定ウィンドウ内のリストを編集します
  • 入力キーが**「Eisu」の行のコマンドをすべて「IME を無効化」**に変更
  • 入力キーが**「Hiragana」の行のコマンドをすべて「IME を有効化」**に変更
  1. OKを押して設定を保存
  2. 設定を反映させるため、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!

ROS 2ではじめよう 次世代ロボットプログラミング