
2026/10/18 20:16
オープン・マイクロマニピュレーター:サブマイクロメートル単位の 3 次元運動制御プラットフォーム
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
このプロジェクトでは、整列、プローブ測定、顕微鏡観察など高精密な光学タスク向けに設計されたオープンソースかつ低コストの XYZ マイクロマニピュレーターを紹介する。分解能は 50nm に達し、並進運動学的構造と安価な市販ステッパーモーターを組み合わせ、独自の「磁気ギアリング」メカニズムによりエンコーダー分解能を30倍に向上させた。システムは 5V〜6V で動作し、USB シリアルインターフェースまたは Python API を介したクローズドループコントローラー(30kHz)を採用し、ライブカメラフィードとの統合をサポートする。
著しい機能強化を含むファームウェアの更新が行われた:v1.0.4 ではレーザーエンボシングなどのツール機能への対応ピン(J5)としての GPIO ピンサポートと、改善された較正機能が追加され、v1.0.1 では並列ホーム、永続的な関節較正、新しい G コードコマンドが実装されている。ビルドは FreeCAD モデル(v1.2.0dev)によってサポートされており、ユーザーには
kinematic_model_delta3d.cpp と比較してアーム長さなどの特定寸法を確認する必要がある。
最近のハードウェア改良では、前期モデルで見つかったホミング時の自己衝突、リンクロッドの一貫性不足、摩擦などの課題に対処している。特に、PCB バージョン v1.2 は修理が必要であり(ダイオード D1 のショートされたビアをドリルアウト)、これは v1.3 で修正されている。ユーザーは 3D プリント部品における熱ひずみと、慎重なビルド検証の必要性について留意すべきである。今後の開発はコミュニティ主導のビルドガイド、モーター誤差の詳細な特性評価、およびツールサポートの拡張に焦点を当てている。
本文
オープンマイクロマニピュレーター
サブミクロンの精度を達成する、オープンソースの低コストかつ組み立てが容易なモーター化 XYZ マイクロマニピュレーター運動制御プラットフォームです。光学系の位置合わせ、電子部品のプロービング、顕微鏡観察などへの応用が想定されています。
詳細や組み立て方法については、以下の YouTube 動画をご確認ください: 「オープンソースのモーター化 XYZ マイクロマニピュレーター - 手頃な価格のサブミクロン運動制御」
技術的特長と仕組み
- 機構設計: 平行リンク機構とミニチュアサイズのボールジョイントを採用。優れた機械的剛性と広い動作範囲を両立しています。
- 駆動システム: 市販(Off-the-shelf)のステッピングモーターを使用。
- 30kHz のクローズドループコントローラーと高精度な PWM シグナルで駆動。
- 「磁気ギアリング」技術:
- 低コストな磁気回転エンコーダーの分解能を 30 倍向上。
- ステップサイズを 50nm まで下げることが可能。
- ※注意点: 分解能と絶対精度は異なります。絶対精度は著しく劣る可能性があります。
- 通信・制御:
- USB シリアルインターフェース経由で簡単な G コードコマンドで制御可能。
- 他のプロジェクトへの統合も容易。
- ファームウェアには、滑らかで正確な経路追従を実現するための先行計画(Look-ahead)機能を含む完全な運動計划スタックを実装。
始め方:高レベル手順
プロジェクトを複製および動作させるための基本的ステップは以下の通りです。
- 本ドキュメントを読み込み、関連する動画を視聴する。
- 「部品リスト(Bill of Materials)」の部品を入手する。
- 装置と電子回路を組み立てる。
で組立式に合わせてハードウェア設定を変更する。hw_config.h- VSCode と PlatformIO プラグインを使用してファームウェアをアップロードする。
- 軸の校正を行う。
参考: 新しい装置向けのセットアップについては [セットアップガイド] をご参照ください。 相談窓口: 組み立てに関するご質問やトラブル、プロジェクト関連の議論については Discord サーバーに参加してください。
✨ ニュー:ハードウェアバージョン 4.0
前回の設計の問題点を解消した新ハードウェアがリリースされました。主な改善点は以下の通りです。
- ホーミング中の自己衝突を解消しました。
- スクリューのみでボールジョイントブロックを接続する構成の不具合(回転)を修正しました。
- リンク棒の長さの一貫性保証問題を解決しました。
- 不要なボールジョイントからの摩擦を取り除きました。
- プリンター品質や隅の丸みに依存した正確なボール位置決定プロセスを見直し、信頼性を向上させました。
- 接着後に交換・取り外しが困難だったゴムバンドの固定方法を改善しました。
改良詳細:
- ボールジョイントおよびリンク製造プロセスの詳細は YouTube 動画 [「オープンマイクロマニピュレーターのためのより良いボールジョイント」] をご覧ください。
- FreeCAD モデルも再構成・改善され、すべてのピンとファスナーを含む状態となりました(機械部品参照資料として機能)。
注意: BOM(部品リスト)はまだ更新されていません。
オープンマイクロマニピュレーター GUI
Python の制御プログラムとグラフィカルユーザーインターフェース(GUI)が用意されており、装置の移動をシンプルに操作できます。
- 多機能画面: 顕微鏡カメラなどのライブカメラ映像表示に対応。
- 追加機能: シンプルな G コードランナー、リアルタイムマウス制御(生物学応用向け)を搭載。
- [オープンマイクロマニピュレーター GUI] をご参照ください。
🐍 Python API
軽量な Python API により、すべてのシリアル通信を処理し、利便性の高いコマンド実行とデバッグメッセージ出力が可能です。
- 機能: ホーミング、移動、校正を行う関数や、装置情報の照会機能を含む。
- 導入:
をプロジェクトにコピー(依存関係はopen_micro_stage_api.py
でインストール)してすぐにスタート可能です。requirements.txt
使用例
from open_micro_stage_api import OpenMicroStageInterface # インターフェースを作成して接続 oms = OpenMicroStageInterface(show_communication=True, show_log_messages=True) oms.connect('/dev/ttyACM0') # ジョイントを校正する(一度だけ実行) # for i in range(3): oms.calibrate_joint(i, save_result=True) # 装置をホーミング oms.home() # 複数の X, Y, Z 位置 [mm] へ移動 oms.move_to(0.0, 0.0, 0.0, f=10) oms.move_to(3.1, 4.1, 5.9, f=26) oms.move_to(0.0001, 0.0, 0.0, f=10) # 移動の完了を待機 oms.wait_for_stop()
API メイン関数一覧
connect(port, baud_rate=921600)disconnect()
/set_workspace_transform(transform)get_workspace_transform()home(axis_list=None)calibrate_joint(joint_index, save_result)move_to(x, y, z, f, move_immediately, blocking, timeout)set_tool_output(tool_idx, output_value, immediate)set_pose(x, y, z)dwell(time_s, blocking, timeout)enable_motors(enable)wait_for_stop(polling_interval_ms, disable_callbacks)set_max_acceleration(linear_accel, angular_accel)set_servo_parameter(pos_kp, pos_ki, vel_kp, vel_ki, vel_filter_tc)
✨ ファームウェア v1.0.4 主な更新内容
多数のマイナー改良とバグ修正に加え、素晴らしい新機能を搭載。
ツール機能の強化
- GPIO 制御: PCB の J5 ピンに設置された 2 つの GPIO パインでのツール使用をサポート(レーザーエングレービングなどへの活用)。
- プランナー統合: G コード実行時に高速かつ正確なタイミングで動作。
- PWM サポート: ソフトウェア PWM に頼らず PIO 機能を使って追加チャネルを確保可能。
G コード使用例:
M3 T0 S0.7 // ツール 0 の PWM 出力を 70% に設定 G4 S0.001 // ダウェルコマンド(または他の運動コマンド)- ツールの出力を適用するために必要
カリブレーション機能の改善
- エンコーダーのアラインメントなど潜在的な問題を検出するための追加エラーチェック機能を導入。
運動モデルパラメータ
- 初期化コードの整理およびパラメータコメントの充実化。
- パラメータは HW v4.0 用にプリセットされていますが、必要に応じて旧 HW-v3.0 パラメータに戻せます。
重要: ハードウェアバージョン v3.0 を使用している場合は、
ファイルにおいて旧式の運動パラメータに戻す必要があります(ファイルの上部にあるkinematic_model_delta3d.cppで切り替え可能です)。#define
ファームウェア v1.0.1 主な更新内容
校正、ホーミング、ログ出力の改善および新しい G コードコマンドを追加。
機能改良
- ホーミング: パラレルホーミング対応、繰り返し精度向上、より正確な幾何学的基準確保。
- ジョイント校正: 手順の洗練化、フラッシュストレージへの永続保存(再起動後も再校正不要)。
- ログ出力: より明確で詳細な情報表示。
新しい G コードコマンド一覧
| コマンド | 説明 |
|---|---|
| ジョイントをホーミングする(複数軸同時ホーミング対応) |
| ポーズ設定コマンド(サーボターゲット直接設定、運動コントローラーバイパス可能) |
| モーターのオン/オフ(オン時にエンコーダーからポーズ復元) |
| エンコーダー値を読み取り |
| サーボループパラメータを設定 |
| ジョイント校正(フラッシュ保存オプション付き) |
| 装置状態に関する各種情報を取得 |
| ファームウェアバージョンを取得 |
⚙ CAD データファイル
すべての CAD モデルは FreeCAD で作成されており、独自の CAD ソリューションへの登録や支払いなしで閲覧・改修可能です。
- 設計思想: ほとんどのコンポーネントを 3 軸 CNC ミリングでの容易な加工を前提に設計。
- 3D プリンティング対応可能: ただし、**熱的ドリフト(熱膨張)**に対応する必要があります(カーボン填充フィラメント推奨)。
| ファイル種別 | 入手先 | 備考 |
|---|---|---|
| CAD モデル | こちら | FreeCAD バージョン 1.2.0dev 対応。古いバージョンでは動作しない可能性があります。 |
| STL ファイル | こちら | 3D プリンティング用です。 |
⚙ 運動モデル
- 定義ファイル:
kinematic_model_delta3d.cpp - 注意点: 組み立て時の寸法をコンストラクタで設定された値と照らし合わせてください。特にアームの長さが一致しているか確認してください。
⚙ 電子回路
重要: PCB バージョン v1.2(ボード上のバージョンラベルをご確認ください)の場合、ダイオード D1 の位置がずれているバイア(ビア)をドリルアウトして修復する必要があります(ショートして 5V レールとグランドを接続しています)。
- この問題は v1.3 で修正されています。
- 設計ツール: KiCAD 使用。
- 部品選定: モータードライバーや MCU ボードなど、一般的な市販品のみ使用。シンプルな PCB で接続(SMD 溶着不要で組立てアクセシビリティ向上)。
- 動作電圧: 通常モーターのコイル抵抗に合わせて、**5V-6V(2A)**での動作を推奨。
- 製造ファイル: リポジトリに PCB メーカーに直接アップロード可能なファイルを包含。
⚙ ファームウェア
C++ で書かれたファームウェアは 'SimpleFOC' プロジェクトからのヒントを受けます。ハードウェア中心で余計な工夫なしにシンプルかつ読みやすさを重視しています。
- 運動計画: 先行計画(Look-ahead)実装。
- 自由度: 他のコントローラーとは異なり、**真の 6 軸自由度(6DOF)**ポーズ補間・計画をサポートし、ヘキサポッド運動プラットフォームへの拡張が用意されています。
- 設定: パイン番号、モーター種類などのパラメータは
で確認してください。アップロード前によく確認を。hw_config.h
ビルドとフラッシュ手順
- Visual Studio Code(Windows および Linux で無料)を使用することを推奨。
- PlatformIO アドオンをインストール。
- ファームウェアフォルダーを開いてビルドおよびフラッシュを実行します。
⚙ G コードインターフェース
ファームウェアは以下の表に示す G コードコマンドのみをサポートします。各コマンドには
Ok またはエラーレスポンスが返されます。
| コマンド | 説明 |
|---|---|
| エンドエフェクタを指定位置まで直線で移動。 • X,Y,Z: 目標位置 • F: フィードレート |
| G0 と同じ動作。 |
| 一時停止(ダウェル)。 • S: 秒数 / P: ミリ秒数 |
| サーボループの現在ポーズを直接設定。 オプションで回転ベクトル指定可能。 |
| 1 つ以上のジョイントをホーミング。 オプション:ジョイント選択 A–F。 |
| ツール出力を設定。 • T: ツールインデックス • S: 出力値 (0.0..1.0) 注意: 新しい値は次の運動またはダウェルコマンドで適用されます。 |
| モーターを有効化し、現在のポーズを読み取る(スタートポーズ)。 |
| モーターを無効化。 |
| 現在の内部ポーズを取得。(エンコーダーは読み込まれない) |
| 現在のエンコーダー角度(度)と生エンコーダー値を取得。 |
| プランナーキュー内の項目数を取得。 |
| 計画された移動完了チェック(1 = 完了、0 = 未完了)。 |
| サーボループパラメータ設定。 • A,B: ポジション PI ゲイン • C,D: 速度 PI ゲイン • F: 速度フィルタ時定数 |
| ジョイント校正。 • J: ジョイントインデックス • S: 結果保存フラグ |
| 装置およびサーボループ情報取得(状態、角度、ループ周波数等)。 |
| ファームウェアバージョン取得。 |
| 加速度設定。 • L: 線形加速度 • A: 角加速度 |
*注:通信プロトコルでは回転に 3D ベクトルを使用します(方向は軸、長さは角度)。
❤️ サポート
本プロジェクトを支援したい場合は以下の方法をご検討ください。
- 組み立てガイドへの貢献: プルリクエスト送信または Issue 作成により手順の改善・拡張にご協力ください。
- 特性化研究: 典型なラジアルステッピングモーターシャフト誤差運動の特性化(Nema-17 など)をご提案いただけますと幸いです。(詳細については Cylos Garage の YouTube ビデオを参照)
- フィードバック: 成功・失敗、プロセス改善に関するご意見をお聞かせください。
- 金銭的支援: プロジェクトに価値を感じられる場合は、Ko-fi ☕ で寄付が可能です。