えいあーるれいの(技術)日記

Ar-Ray (Ar-Ray-code) のつぶやきなど。

SO-101をMoveItで使用する (ROS Jazzy)

2025年は、より身近にロボットハードウェアとAIがより近くに感じられるプロダクト(アーム、コンピュータ、ヒューマノイド‥)が多く登場しました。

その中でもSO-101は入門に最適なロボットだと思います。

今回は、そのSO-101をつかった「別の」使い方を紹介します。


SO-101とは?

SO-101は、Hugging Faceの「LeRobot」プロジェクトが公開する低コスト・オープンソースのロボットアームキットです。

3Dプリント部品と比較的入手が容易なサーボモーターで組み立てられ、リーダーアームとフォロワーアームの2台構成で模倣学習や強化学習の実験に適します。

huggingface.co

値段・入手性ともにとても身近なデバイスで作成できることや、初心者にも易しいドキュメントページが用意されていることから、初学者にとてもおすすめです。

先月のMakerFaire Tokyoでリーダーフォロワーデモの体験をしましたが、低遅延で同期の取れた動作が実現していて、割と壊れにくそうだったのには驚きました。


SO-101をROS 2で?

SO-101はPythonベースの開発環境での実験を想定していますが、実はROS で動かすマニピュレーター入門機として最適なのではないか?と考えるようになりました。

フィードバックがあり、易しい説明もついているアームが4万円で買えてしまう、

私が結構前から推進してきた「高専生向けROS講習」における大きな課題の一つ、学習にかかる費用面を解決できるかもしれません。


MoveItとの繋ぎこみまで

ここからは、ロボットをros2_controlで繋ぎこみ、最終的にMoveIt2で動かせるようにするところについて説明します。

以下が必要な環境です

今回の実装においては、既に作成されていた環境を組み合わせただけでかなり完成に近づけられています。感謝!🙏

github.com

github.com


1. 環境構築

まずは、ワークスペースを作成します。

ROS 2環境を事前に整えてください。

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

git clone https://github.com/Ar-Ray-code/lerobot_ws.git -b sts_servo
git clone https://github.com/Ar-Ray-code/feetech_ros2_driver.git -b auto_calib

rosdep install --from-paths src --ignore-src -r -y

ビルドします。

export DISTRO=humble
source /opt/ros/${DISTRO}/setup.bash

colcon build

2. キャリブレーション

マニピュレーターとPCをUSBケーブルで接続します。ポートをユーザーから操作できるように dialout グループに所属させる必要があります。

キャリブレーションを行います。

キャリブレーション方法は、以下のコマンドでキャリブレーション開始コマンドを実行後、LeRobotプロジェクトのチュートリアルと同様、各関節のサーボモーター中間地点で固定してEnter、上限・下限まで回してEnterを押します。

source ~/ros2_ws/install/setup.bash

ros2 run feetech_ros2_driver feetech_calibration_node --ros-args -p usb_port:=/dev/ttyACM0 -p save_path:=./path_to_save_location.json

↓私が実際にキャリブレーションを行った結果のjsonは以下にあります。(最終軸が間違っているので注意)

lerobot_ws/src/lerobot_controller/config/example_calib.json at sts_servo · Ar-Ray-code/lerobot_ws · GitHub


3. MoveIt2で操作

このキャリブレーション結果を使ってMoveIt2でSO-101を動かしてみましょう。ここから、ターミナルが3つ必要です。

ターミナル1

SO-101をros2_controlを使ってROS 2に繋ぎこみます。

export DISTRO=humble
source /opt/ros/${DISTRO}/setup.bash

ros2 launch lerobot_controller so101_controller.launch.py is_sim:=False usb_port:=/dev/ttyACM0

ターミナル2

MoveIt2を起動します。

export DISTRO=humble
source /opt/ros/${DISTRO}/setup.bash

ros2 launch lerobot_controller so101_controller.launch.py is_sim:=False

ターミナル3

Rviz2 を起動します。

export DISTRO=humble
source /opt/ros/${DISTRO}/setup.bash

rviz

GUIにMoveIt2のプラグインを追加します。(moveit_ros_visualization -> MotionPlanning)


あとは、矢印が動かせる範囲で位置を指定して「Plan and Execute」を押すだけ!

これで誰でもMoveIt沼に入れますね!🫠


おまけ:RaspberryPi4に繋ぎ込んでみた

RaspberryPi OSにros2_controlのインタフェースを生やし(簡単ではない)てしまえば、LANケーブルを接続するだけでROS 2から簡単にロボットアームにアクセスできますね。

‥というわけで構築してみました。

残念ながらMoveItはビルドできなかったため、ros2_controlのみです。(そもそもMoveItはラズパイでは重いかも‥)

ビルド方法はrpi-bullseye-ros2のBookworm・Jazzy版をダウンロードしてきて、so101.repos の内容をcloneしてビルドします。

Xに投稿したところ、15ブックマークくらいついていたのにスターは1つしかついていませんでした‥(忘れないでね)🔖😇⭐

github.com

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

curl -O https://raw.githubusercontent.com/Ar-Ray-code/rpi-bullseye-ros2/b84943f1d58fbefe196a02ec64a17bffbf389172/repos/so101.repos
vcs import < so101.repos
curl https://raw.githubusercontent.com/Ar-Ray-code/rpi-bullseye-ros2/b84943f1d58fbefe196a02ec64a17bffbf389172/install-list/so101.txt | xargs sudo apt install -y

pip install --break-system-packages empy==3.3.4

ビルドはRaspberry Pi5で1時間くらいかかります。

DISTRO=jazzy
source /opt/ros/${DISTRO}/setup.bash

colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release

serviceファイルも作っておきました。そのうちインストーラーも作っておきます 🙃


ここまで、SO-101のMoveIt繋ぎこみの手順を簡単に解説しました。

おそらく次回のrosjpで召喚される気がするので、続きはそこでお話できたらと思います。