Unity+RasPi with ROSに挑戦

一つ前の記事と内容が少し被っているが、今回は大学院の講義で購入したRaspberry Pi 400を使って何か出来ないか調べてみたところ、以下の記事を見つけたので、今回はこちらをアレンジしてRasPi上にROS2をインストールして、WindowsのUnityと通信してみたいと思う。

実行環境

・Windows側
Windows11 Pro
Unity 2022.3.7f1
ROS-TCP-Connector v0.7.0

・Raspberry Pi 400側
Ubuntu Desktop 22.04 (64bit)
ROS2 Humble
ROS-TCP-Endpoint v0.7.0

RasPi側のセットアップ

まず最初にRasPiのOSのセットアップを行う。micro SDカードを準備し、Raspberry Pi ImagerでOSの書き込みを行う。今回はUbuntu Desktop 22.04 (64bit)を利用する。

次にRasPiを起動して、以下の初期設定を行う。詳細は割愛。
・ユーザー設定
・Wifi設定
・apt update & apt upgrade
・SSHの設定

RasPiのセットアップが完了したら、ROS2のインストールを行う。今回はOSがUbuntu 22.04なので、それに対応するROS2 Humbleをインストールする。Ubuntuのバージョンに応じてサポート対象のROS2のバージョンも異なるようなので、詳細は以下の画像とリンクを参照。

公式のインストール手順に従って進めていく。

まずはLocaleの確認、UTF-8になっていることを確認。

Ubuntu Universe repositoryをenabledにする。

sudo apt install software-properties-common
sudo add-apt-repository universe

ROS 2 GPG keyを追加する。

sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

リポジトリをsources listに追加する。

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

上記の作業を実施した後に、apt update & apt upgradeを行う。

sudo apt update
sudo apt upgrade

ros-humble-desktopをインストールする、結構時間がかかるので注意。

sudo apt install ros-humble-desktop

環境設定を実施して、動作確認。

次に作業用のワークスペースの作成するため、colconをインストール。

sudo apt install python3-colcon-common-extensions

ワークスペース用のディレクトリを作成。

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws

ROS-TCP-Endpointをワークスペースにcloneする。ここでの注意点としてはmain-ros2のブランチを指定する。

cd ~/ros2_ws/src
git clone -b main-ros2 https://github.com/Unity-Technologies/ROS-TCP-Endpoint

ワークスペースをビルドする。

cd ~/ros2_ws
colcon build
source ~/ros2_ws/install/setup.bash

Windows側のセットアップ

3Dのテンプレートを利用して、Unityの新規プロジェクトを作成。Package ManagerのAdd package from git URLより、ROS-TCP-ConnectorのGitリポジトリへのURLを最新のタグを指定して入力し、AddをクリックしてROS-TCP-Connectorをインポートする。

ROS-TCP-Connectorの設定を確認する。ROS IP AddressはRasPiのローカルIPアドレスを指定する。

次にC#スクリプトを作成し、コードの中身を以下に変更する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Robotics.ROSTCPConnector;
using StringMsg = RosMessageTypes.Std.StringMsg;

public class Subscriber_Test : MonoBehaviour
{

    void Start()
    {
        ROSConnection.GetOrCreateInstance().Subscribe<StringMsg>("test", Callback);
    }

    void Callback(StringMsg msg)
    {
        Debug.Log(msg.data);
    }

}

Hierarchyウィンドウを右クリックしてCreate Emptyを作成し、Subscriberにリネームする。そして作成したSubscriber_Testをアタッチ。

通信の実行

ROS2側でターミナルを開き、エンドポイントの実行。

ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=192.168.1.14

Unity側にメッセージを送信。

ros2 topic pub /test std_msgs/String "data: Hello!"

ターミナル上でメッセージがPublishされているのが確認出来る。

Unityを実行すると、Consoleでログが出力されているのが確認出来る。

その他参考リンク


いいなと思ったら応援しよう!