# 他のロボットでの利用と制御層の分離 `glyph_motion` の文字・筆画処理は COBOTTA 専用ではありません。文字の幾何情報と配置結果を生成する層と、ロボットを動かす層は別です。 ## 確認できるクラスと役割 - `glyph_motion.lib.font_geometry.FontStrokePath`:筆画の点列を表現するデータ型。 - `glyph_motion.font_line_layout.FontLineLayout`:KanjiVG から文字を読み込み、文字セルへ配置する。ロボット接続やペン上下、速度制御は行いません。 - `glyph_motion.font_line_layout.PositionedCharacter`:文字と、配置後の `strokes` を保持します。 - `glyph_motion.font_bcap_cobotta_writer.FontBcapCobottaWriter`:COBOTTA 用の実機制御クラスです。`CobottaBcap` を使用し、絶対 P 座標へ変換して書字します。 ## 他のロボットに対応する手順 1. `FontLineLayout` を使って文字列から配置済み筆画を生成します。返された各 `PositionedCharacter.strokes` を利用します。 2. 筆画内の点列を、使用するロボットの座標系・単位・書字面へ変換します。座標軸の符号、XY交換、原点、ツール姿勢、動作範囲をロボットごとに決定します。 3. 各筆画の開始前にペンを上げて始点へ移動し、ペンを下ろして筆画の点を順に描画します。筆画の終了時にはペンを上げ、次の筆画へ移動します。 4. ロボット固有の接続、アーム取得、サーボ有効化、速度・加減速設定、停止、エラー復旧は、ロボット用の制御クラスで実装します。 5. 必要に応じて、その制御クラスをデバイスサーバーに公開します。`FontBcapCobottaWriter` をそのまま別機種で使用できるという意味ではありません。 6. 実機投入前に、生成した点列、座標変換、作業範囲、ペン退避高さ、緊急停止を検証してください。 ## COBOTTA とデバイスサーバー 添付された実装で確認できる COBOTTA 側の制御フロントは **`font_bcap_cobotta_writer.py`** の **`FontBcapCobottaWriter`** です。`connect()`、`set_params()`、`write()`、`disconnect()` などを実装しています。`write(text, start_height_mm=None, return_to_start=None, new_line=None)` は実機への書字処理であり、別ロボット向けに共通化された呼び出しではありません。 デバイスサーバー側の公開メソッド名やクライアント API は、サーバー実装の実ファイルで別途確認してください。ここでは、未確認の `write_text()` や `preview_text()` をこのクラスの実装済み API として扱いません。