🔥

ROS2 Jazzy on Ubuntu24.04 + Gazeboでシミュレーションを試す4: LLM+LangChain編

に公開

前回、GAZEBO SIMで強化学習をためしました。
https://zenn.dev/takeofuture/articles/7da22e8751886e
今回はLLMでTURTLEBOT3を自然言語で指示して動かしてみたいと思います。
UBUNTU24.04を想定してます。ROS2とGAZEBOがはいっていることが必要なので以下の記事を参考にしていただければ幸いです。
ROS2の導入(RASPBERRYとなってますがPCでもUbuntu24.04さえはいっていれば手順は変わりません)
https://zenn.dev/takeofuture/articles/e99cc33d4a7bc3
GAZEBOの環境も設定します
https://zenn.dev/takeofuture/articles/40d83d88ff6138
また、簡単なTURTLEBOT3というロボットカーのオブジェクトも以下の記事を参考に用意します
https://zenn.dev/takeofuture/articles/a40714ecf8917b
今回は自然言語でロボットを操作することですが大本のアイデアは以下の論文からとってきてます。
https://arxiv.org/pdf/2410.06472
設定はとてもシンプルです。
ソースコードは以下で公開しています。
https://github.com/takeofuture/ROS2_Agent_Gazebo/tree/main

環境構築

# python3 -m venv rosa
# source rosa/bin/activate
(rosa)$ pip install jpl-rosa
(rosa)$ pip install langchain-openai

基本これで終わりです。
一応上記のgithubのコードを使っていただいたほうが確実かもしれません。

# python3 -m venv rosa
# source yourpyenvname/bin/activate
(rosa)$ git clone https://github.com/takeofuture/ROS2_Agent_Gazebo.git
(rosa)$ cd ROS2_Agent_Gazebo
(rosa)$ pip install -r requirement.txt

私は論文で言及のあったOpenAIのGPT-4oのAPIを使う方法と自前でたてたローカルのQwen2.5を両方をためしました。OPENAIを使う場合はconfig.pyの変数を以下のようにして自身のOPENAIのキーをいれてください。(課金されます)

OPENAI_API_KEY = "your open api key"
LLM_PROVIDER="openai" # or オープンソースモデルつかうなら vllm

起動

起動もシンプルです。まずUbuntu24.04のはいったPCで以下を起動して環境を画面上に出現させてください。

(rosa)$ source /opt/ros/jazzy/setup.bash
(rosa)$ gz sim -r ~/rl_demo/worlds/arena.sdf

その次に、この中にTurtleBot3というロボカーと、そのロボカーに指令を送り、そのロボカーから観測情報を受けるトピックというもののブリッジをかけておきます。

#TurtleBot3を登場させる
(rosa)$ ros2 run ros_gz_sim create -world arena -file /opt/ros/jazzy/share/turtlebot3_gazebo/models/turtlebot3_waffle/model.sdf -name tb3 -x -2.5 -y -2.5 -z 0.02

# TurtleBot3にコマンド送るためのトピック
(rosa)$ ros2 run ros_gz_bridge parameter_bridge \
  /cmd_vel@geometry_msgs/msg/Twist@gz.msgs.Twist &

# TurtleBot3から観測状態:位置を受けるためのトピック
(rosa)$ ros2 run ros_gz_bridge parameter_bridge \
  /odom@nav_msgs/msg/Odometry@gz.msgs.Odometry &

できましたらあとはコマンドで動かすこともできますし、streamlitというWEBインターフェースでも動かせます。
コマンド:

(rosa)$ python run_tb3_rosa.py

STREAMLIT:

(rosa)$ treamlit run app_tb3.py --server.address 0.0.0.0 --server.port 8501

構成はこのようになってます。

ではいくつかコマンドをうってためします。以下の自然言語コマンドを実施しました。

1) .2m前進して
2). 1m後進して
3). 左に45度旋回して
4). 前に1m進んで
5). 左に45度曲がって
6). 前に2mすすんで

すると実際には以下のように動きます。このデモはQWENというオープンソースをつかったときのものになります。少し座標は微妙ですが💦
https://youtu.be/F0t5vOG_gMs

Discussion