myCobot 280は、6軸の卓上ロボットアームである。このガイドの対象は、PCからUSBシリアルで接続するコントローラ構成のM5版だけ。Pi版・Jetson Nano版のポートや起動方法をM5版へ流用しない。公式のpymycobotにはモデル別のMyCobot280クラスがあり、関節角度・座標・エラー・ファームウェアを読み取れる。実機操作はこのサイトでは行っていない。
最初に機種と制御系統を固定する
本体、箱、購入記録でM5版であることを確認する。M5版は、アームの上部Atomとベース側Basicのファームウェアが通信系統を構成し、PCからシリアルポートへ接続する。公式資料のMyCobot280SocketはRaspberry Pi版向けの別経路で、アーム側マシンがサーバーを起動してTCP/IPで接続し、既定ポート9000を使う方式である。この手順では使わない。公式mycobot_ros2はROS2の別パッケージであり、Socket経路と同じものではない。
公式ROS2資料にはmyCobot 280 M5、Pi、Jetson Nanoなど複数のモデル用URDFが列挙されている。モデルごとの制御系統は同じと仮定せず、M5版のCOM3を例にした初期化コードを別版へ流用しない。
機体は安定した台へ固定し、周囲から手や物を離す。初回はサーボを有効化せず、power_on、focus_all_servos、send_angle、send_coords、脱力、原点復帰を実行しない。ここで確認するのは通信・読取と、関節を動かさないライト設定だけである。
1. 公式SDKを入れる
Elephant Robotics公式のpymycobotをPython環境へ入れる。SDKの公式説明は、M5版のファームウェアが対応していることを前提にしている。まずはプロジェクトごとの仮想環境を作り、版を固定してから使う。
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
pip install pymycobot
このコマンドはライブラリをインストールするだけで、アームへ移動命令を送らない。SDKを更新した後も、既存のファームウェアとモデル別APIの組み合わせが対応しているかを公式資料で確認する。
2. シリアルポートを特定する
公式APIには、接続されたシリアルポート一覧を返すutils.get_port_list()と、M5 Basicを検出して最初のポートを返すutils.detect_port_of_basic()がある。いきなりCOM3や/dev/ttyUSB0を決め打ちせず、検出結果を読んでから対象を選ぶ。
from pymycobot import utils
print(utils.get_port_list())
print(utils.detect_port_of_basic())
検出結果が空の場合は、USBケーブル、OSのデバイス認識、権限、ファームウェアを確認する。この時点で動作確認のために別ポートへ総当たり接続したり、サーボを有効化したりしない。
3. 読取専用の初期化と通信確認
検出したM5 Basicのポートを変数へ入れ、公式のMyCobot280を初期化する。次の例は状態を読むだけで、モーターへの移動命令を含まない。
from pymycobot import MyCobot280
from pymycobot import utils
port = utils.detect_port_of_basic()
if port is None:
raise RuntimeError("M5 Basicのシリアルポートが見つかりません")
mc = MyCobot280(port)
connected = mc.is_controller_connected()
system_version = mc.get_system_version()
basic_version = mc.get_basic_version()
error = mc.get_error_information()
print("connected:", connected)
print("system_version:", system_version)
print("basic_version:", basic_version)
print("error:", error)
connected、Atomのシステムバージョン、M5 Basicのバージョン、エラー情報を別々に記録する。get_error_information()の値が0でない場合は、移動命令へ進まず、公式のエラー定義と機体表示を確認する。通信が切れた場合も、同じコマンドを連打して状態を作らない。
4. 関節角度と座標を読む
通信確認後も、まずは現在値を読む。公式APIのget_angles()は6関節の角度リスト、get_coords()は[x, y, z, rx, ry, rz]の座標・姿勢リストを返す。値の取得はアームを動かさないが、読取時点の姿勢を画面や手元で確認する。
angles = mc.get_angles()
coords = mc.get_coords()
print("angles:", angles)
print("coords:", coords)
この出力を「目標位置へ到達した」という証拠にしない。実機未接続のこのサイトでは、返り値の型と公式APIの契約だけを扱う。角度や座標をAIへ渡す場合は、単位、取得時刻、通信エラーを一緒に保持し、古い値を現在位置として使わない。
5. 末端ライトだけを最初の書込みにする
M5版の公式API説明には、末端ライトの色をset_color(r, g, b)で指定するインターフェースがある。これは読取専用ではなく書込み系APIだが、アームの関節を動かさない出力で、通信経路の書込みを確認する例として使える。周囲の安全を確認し、実機で行う場合もライト設定だけを目的にする。
result = mc.set_color(0, 128, 255)
print("set_color result:", result)
r、g、bはそれぞれ0〜255で、公式説明の戻り値は完了時1である。戻り値1は通信/API層の受理を示すだけで、LEDが見えること、ファームウェアが想定どおり反映したことをこのサイトから保証しない。確認後に関節を動かす必要はない。
6. AIへ渡す境界
AIへ公開する最初のツールは、get_angles、get_coords、get_error_informationのような読取系に絞る。移動系のsend_anglesやsend_coords、サーボ電源、脱力、キャリブレーションは別の安全設計が必要であり、このガイドの到達条件に含めない。MCPへ載せる場合も、ツール名・対象ポート・現在値の取得時刻・エラー状態を固定し、読取と書込を同じ権限で公開しない。
可動部があるため、腕の下へ手を入れない、落下物を置かない、非常時に電源を切れる状態にする、という人間側の条件を先に揃える。実機を持っていない読者は、仮想値でAPIの呼び出し形だけを検証し、動作したと書かない。
このサイトの標本はM5版を含むmyCobot 280の総合記録であり、実機verifiedではない。myCobot 280(M5版を含む)の接続口と評価尺度は/ratingを参照する。
参考情報
いずれも2026年9月11日に確認した。