2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LLMとROS2で亀を動かす!〜DockerとMCPで始める次世代ロボティクス〜

2
Last updated at Posted at 2025-12-14

この記事は

自然言語でロボットを動かしたい
ポイントはROS2MCP の組合せ

ゴールイメージ🐢

日本語で「右に進め」と言ったら、ロボット(亀)が右に進んでくれる。それがゴール。

ROS2 + TURTLESIM + MCP: MCP application with Claude

検証環境

上記動画のとおり、実物のロボットは使いません。
手元のノートパソコンで検証します。もちろん無料で全部できます。

  • Windows 11 Home
  • Docker Desktop |会社で使う人はライセンス注意
  • WSL2
  • LM Studio
    • Qwen3 4B
  • アドバイザーとしてのGemini無料版

本当はGithub CopilotのMCP機能を使いたかったのだけれども、12/24まで使えない😐

image.png

お急ぎの方は

「ここでなんと、公式のexampleに気が付く」の章からお読みください
序盤は寄り道をしています

使うものを精査する

だいたいのことはAIに投げれば答えがでる
人間がやるべきことは、中身を精査すること。ということで使うものの準備。

Dockerイメージ

由緒正しきオープンソースなロボットの団体が提供しているDockerイメージを使用する
URLの短さは、由緒の正しさ

ROSのWikiを流し読みするに、HumbleがUbuntu22.04時代のものであり、今はJazzyに継承されていったようである
どうやらJazzyのほうが新しいようだが、GeminiがHumbleを使えというのでHumbleを使う

dockerイメージをpullする。タグはHubmleのデスクトップ(フル版)を意味する。
docker pull osrf/ros:humble-desktop-full
使い捨てコンテナ起動
export HOST_GATEWAY="172.17.80.1"

docker run -it --rm --name ros2_turtle -e ROS_DOMAIN_ID=42 -e ROS_STATIC_PEERS=$HOST_GATEWAY -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix osrf/ros:humble-desktop-full ros2 run turtlesim turtlesim_node

HOST_GATEWAY="172.17.80.1"って何?

WSL環境のネットワーク

サブネットマスクが20bitなのでアドレス範囲は「172.17.80.0 〜 172.17.95.255」

WindowsマシンのWSL環境のIPアドレス
イーサネット アダプター vEthernet (WSL (Hyper-V firewall)):

   IPv4 アドレス . . . . . . . . . . . .: 172.17.80.1
   サブネット マスク . . . . . . . . . .: 255.255.240.0
UbuntuのIPアドレス
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:bd:b1:d7 brd ff:ff:ff:ff:ff:ff
    inet 172.17.82.122/20 brd 172.17.95.255 scope global eth0

Docker環境のネットワーク

docker0は16bitのサブネット

# 起動中のROS2コンテナに入る
docker exec -it ros2_turtle bash

# 必要なツールをインストールして実行
apt update
apt install -y iproute2 net-tools
ip a

inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0

WSL環境とDocker環境がどちらも172.17から始まるので
サブネットマスク長まで意識していないと
「なんで同じセグメントなのに疎通取れないのか?」となってしまう。

ここでなんと、公式のexampleに気が付く

dockerでturtlesimを動かす例題が載っていた
こちらのフォルダをローカルに落として先に進む

git clone https://github.com/robotmcp/ros-mcp-server.git

# Ubuntuのhomeディレクトリにコピーする
robocopy ros-mcp-server\examples\5_docker_turtlesim \\wsl.localhost\Ubuntu\home\5_docker_turtlesim /E

README.mdに従って進める

WindowsでUbuntuの黒い窓を開いて進める

image.png

Ubuntuの黒い窓にて
# docker-compose.yml があるディレクトリまで移動
docker compose build --no-cache turtlesim

docker compose up

# 権限エラーではじかれるので、以下実行
chmod +x ./docker/scripts/launch_turtlesim.sh

# まだ何かおこられるので改行コードを直す
sudo apt update && sudo apt install -y dos2unix
dos2unix docker/scripts/launch_turtlesim.sh

docker compose up -d
# カメが表示されたら成功

# コンテナに入ってカメを動かす
docker exec -it ros2-turtlesim bash
source /opt/ros/humble/setup.bash
ros2 run turtlesim turtle_teleop_key

Animation11.gif

これはキーボードの十字キーで操作しているだけ
次章以降は、自然言語でカメを動かす

コンテナネットワーク

今回はWindowsマシンの LM Studio から命令を出すので
ホストマシンとコンテナネットワークとの橋渡しが必要

docker-compose.yamlを編集する
services:
  turtlesim:
    # **【変更点 1: ポートマッピングの追加】**
    ports:
      - "9090:9090"
    # **【変更点 2: network_mode: host の削除】**
    # network_mode: host 

これでWindowsの LM Studio から 127.0.0.1:9090にアクセスできる

Windowsマシンからコンテナ内のサーバに接続確認

試しに pwoershell からアクセスしてみればエラーが出る
エラーが出るが、これは正常な動作。websocketプロトコル以外でアクセスしたエラーなのでOK

Invoke-WebRequest -Uri http://127.0.0.1:9090
# Invoke-WebRequest : Can "Upgrade" only to "WebSocket".

docker compose した画面のほうでも、アクセスを受けたログが出ているはず

ros2-turtlesim  | [rosbridge_websocket-1] WARNING:tornado.access:400 GET / (172.18.0.1) 12.04ms

MCPサーバを構築

Guthubの手順に従ってMCPサーバ構築
GithubではClaudeの例で書かれているが、今回はLM Studioを使う

curl -LsSf https://astral.sh/uv/install.sh | sh

# uv のインストール先を PATH に追加
export PATH="/root/.local/bin:$PATH"

uvx ros-mcp --help
# helpっぽい内容が表示されたらOK

LM Studioで mcp.json を編集する
7行目のUbuntuは自分の環境(powershell wsl -lで調べる)にあわせて編集する

image.png

カメに移動命令

LM Studioのチャット画面にて「forward turtle」と唱えると
3つの tools が動いて、カメが右に動いた

image.png

動いたけれども、貧弱なマシンでは qwen モデルでさえとても時間がかかる
カメをこれだけ動かすのに5分くらいは待たされる

image.png

おわりに

LM StudioのMCP機能を使って
docker に作った turtlesim を動かした

メリークリスマス🎅

糸冬了!!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?