2025年は、より身近にロボットハードウェアとAIがより近くに感じられるプロダクト(アーム、コンピュータ、ヒューマノイド‥)が多く登場しました。
その中でもSO-101は入門に最適なロボットだと思います。
今回は、そのSO-101をつかった「別の」使い方を紹介します。
SO-101とは?
SO-101は、Hugging Faceの「LeRobot」プロジェクトが公開する低コスト・オープンソースのロボットアームキットです。
3Dプリント部品と比較的入手が容易なサーボモーターで組み立てられ、リーダーアームとフォロワーアームの2台構成で模倣学習や強化学習の実験に適します。
値段・入手性ともにとても身近なデバイスで作成できることや、初心者にも易しいドキュメントページが用意されていることから、初学者にとてもおすすめです。
先月のMakerFaire Tokyoでリーダーフォロワーデモの体験をしましたが、低遅延で同期の取れた動作が実現していて、割と壊れにくそうだったのには驚きました。
SO-101をROS 2で?
SO-101はPythonベースの開発環境での実験を想定していますが、実はROS で動かすマニピュレーター入門機として最適なのではないか?と考えるようになりました。
フィードバックがあり、易しい説明もついているアームが4万円で買えてしまう、
私が結構前から推進してきた「高専生向けROS講習」における大きな課題の一つ、学習にかかる費用面を解決できるかもしれません。
MoveItとの繋ぎこみまで
ここからは、ロボットをros2_controlで繋ぎこみ、最終的にMoveIt2で動かせるようにするところについて説明します。
以下が必要な環境です
- SO-101のフォロワー側(ものが挟めそうな方)
- Ubuntu22.04など、ROS-HumbleあるいはJazzyのMoveIt2に関する依存関係を解決できるLinux PC
- Ar-Ray-code/feetech_ros2_driver
- Ar-Ray-code/lerobot_ws
今回の実装においては、既に作成されていた環境を組み合わせただけでかなり完成に近づけられています。感謝!🙏
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は以下にあります。(最終軸が間違っているので注意)
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つしかついていませんでした‥(忘れないでね)🔖😇⭐
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で召喚される気がするので、続きはそこでお話できたらと思います。