シリアルサーボ
       各社からシリアル接続のサーボが発売されている。、シリアルサーボはこれまでの一方的なサーボへの指令だけでなく、サーボモータのさまざまな状態を把握できるため、これまで以上にインテリジェントなロボット制御が可能になる。 
       各社が採用しているシリアル通信方式は以下のようである。 
       
      
        
      
      
        
          
             | 
            方式 | 
            通信速度 | 
           
          
            | 近藤科学 | 
            ICS2.0 | 
            115,200bps(固定) | 
           
          
            | Hitec | 
            HITEC Multi-protocol Interface | 
            19,200bps(固定) | 
           
          
            | ROBOTIS | 
            RS485(半2重) | 
            7,343〜1,000,000bps | 
           
          
            | TTL(半2重) | 
           
          
            | Futaba | 
            RS485(半2重) | 
            9.600〜1,382,400bps | 
           
          
            VSTONE 
            JR PROPO | 
            LVSerial(全2重) | 
            ? | 
           
        
       
      
        
       シリアル接続でのモータ制御の場合、ノイズによる誤動作は致命的となる。RS485はノイズに強い通信方式であり、特に大型ロボットには有効。また通信速度が遅いと制御周期が遅くなる。2足歩行ロボットでPWM並みの制御周期を得るためには、数100kbps以上の速度が必要となる。もう1点、コントローラとの相性を考えると、通信速度がコントローラで出しやすいことが望まれる。FUTABAの場合1,382,400bpsは115,200bpsの12倍で整数倍のため相性が良い。1Mbpsは300で割っても整数にはならない。通信規格としてはFUTABAが最も優れているのではないかと思う。 
        
        
       次に、各社のサーボにおいてシリアル接続で何ができるかを比較する。ただし、その仕様を公開しているメーカーはあまり多くない。近藤科学、ROBOTICS、FUTABAについては各社のサイトで公開しているデータを元にまとめた。また、Hitecについては、こちらとこちらのデータを参考にした。 
       
      
      
        条件設定
        
          
             | 
            FUTABA 
            RS485 | 
            ROBOTIS 
            TTL,RS485 | 
            近藤科学 
            ICS2.0 | 
            HITEC 
            HMI | 
           
          
            | 通信レート | 
            ○ | 
            ○ | 
            × | 
            × | 
           
          
            | 通信応答時間 | 
            × | 
            ○ | 
            × | 
            × | 
           
          
            | 動作角度範囲 | 
            ○ | 
            ○ | 
            ○ | 
            ○ | 
           
          
            | 最大動作温度 | 
            ○ | 
            ○ | 
            × | 
            × | 
           
          
            | 最大動作電圧 | 
            × | 
            ○ | 
            × | 
            × | 
           
          
            | 応答の有無 | 
            ○ | 
            ○ | 
            × | 
            × | 
           
          
            エラー時のアラーム 
            LED点滅の有無 | 
            × | 
            ○ | 
            ー | 
            ー | 
           
          
            | エラー時のトルクOFFの有無 | 
            × | 
            ○ | 
            × | 
            × | 
           
          
            | トルクON/OFF | 
            ○ | 
            ○ | 
            ○ | 
            ○ | 
           
          
            | LED点灯 | 
            ○ | 
            ○ | 
            ー | 
            ー | 
           
          
            コンプライアンスマージン 
            デッドバンド | 
            ○ | 
            ○ | 
            ○ | 
            ○ | 
           
          
            コンプライアンススロープ 
            ストレッチ | 
            ○ | 
            ○ | 
            ○ | 
            × | 
           
          
            | パンチ | 
            ○ | 
            ○ | 
            ○ | 
            × | 
           
          
            | PIDパラメータ | 
            ○ | 
            × | 
            △(ダンピング) | 
            △(PD)? | 
           
          
            | 加減速時間 | 
            ○ | 
            × | 
            × | 
            × | 
           
          
            | 目標角度 | 
            ○ | 
            ○ | 
            ○ | 
            ○ | 
           
          
            | 速度 | 
            ○(移動時間) | 
            ○(角速度) | 
            ○ | 
            ○ | 
           
          
            | 最大トルク | 
            ○ | 
            ○ | 
            × | 
            × | 
           
          
            | 複数サーボの同期動作 | 
            ○ | 
            ○ | 
            × | 
            ○? | 
           
          
            | 書込み禁止 | 
            × | 
            ○ | 
            × | 
            × | 
           
        
       
      
        
      
      
        状態読み込み
        
          
             | 
            FUTABA 
            RS485 | 
            ROBOTIS 
            TTL,RS485 | 
            近藤科学 
            ICS2.0 | 
            HITEC 
            HMI | 
           
          
            | 角度 | 
            ○ | 
            ○ | 
            ○ | 
            ○ | 
           
          
            | 速度 | 
            × | 
            ○(角速度) | 
            × | 
            × | 
           
          
            負荷 
            トルク 
            電流 | 
            ○(大きさ) | 
            ○(向きと大きさ) | 
            × | 
            ○(大きさ) | 
           
          
            | 電圧 | 
            ○ | 
            ○ | 
            × | 
            ○ | 
           
          
            | 温度 | 
            ○ | 
            ○ | 
            × | 
            × | 
           
          
            | 移動開始後の経過時間 | 
            ○ | 
            × | 
            × | 
            × | 
           
        
       
      
        
       FUTABAとROBOTISが他社よりも一歩進んでいる。両者とも温度管理をしており、高温に成った場合自動的にトルクをOFFにする機能があり、サーボの保護に有効である。また、FUTABAはPIDパラメータや加減速時間も指定でき、より細かな動作の設定ができる。 
       また、FUTABAやROBOTISは指令に対する応答を無くすことができる。サーボを動かす時に応答をOFFにしておけば半2重でも連続して指令を送ることができる。 
       さらに、さまざまな負荷の大きさ(電流)が読めると、サーボモータ自身をセンサーとして利用して、ロボットの制御の幅も広がる。例えば負荷の大きさ(電流)がわかると、それによって力を加減することができる。そのようなシステムは、鉄人プロジェクトでも過去にデモンストレーションしている(ハンド)。その時は既存のサーボモータに鉄人プロジェクトで開発した負荷読み込みのセンサーを付けたが、同じ機能がサーボモータについたことになる。 
        
      
        
          
              | 
           
          
            FUTABA RPU-10用のモーションエディター 
            コンプライアンスもポーズごとに指定できる | 
           
        
       
        
      
      
        
          
              | 
           
          
            FUTABA コントローラ RPU-10 
            非常に小さく、RS485でサーボを制御できる | 
           
        
       
      
       
        
       目標角度・移動指令 
       もっともよく使う目標角度・移動の指令について比較してみる。 
        
       個別指定 
       サーボ1個づつの目標角度は各社以下の方法で指定する。 
       
      
        - FUTABA
 
        角度のみ指定 
        
          
            
              ヘッダー 
              (2バイト) 
              FA AF | 
              サーボID 
              (1バイト) 
              01 | 
              フラグ 
              (1バイト) 
              00 | 
              メモリアドレス 
              (1バイト) 
              1E | 
              データ長 
              (1バイト) 
              02 | 
              サーボ数 
              (1バイト) 
              1 | 
              目標角度 
              (2バイト) 
              84 03 | 
              チェックサム 
              (1バイト) 
              9B | 
             
          
         
        合計10バイト 
         
        移動時間も指定 
        
          
            
              ヘッダー 
              (2バイト) 
              FA AF | 
              サーボID 
              (1バイト) 
              01 | 
              フラグ 
              (1バイト) 
              00 | 
              メモリアドレス 
              (1バイト) 
              1E | 
              データ長 
              (1バイト) 
              04 | 
              サーボ数 
              (1バイト) 
              01 | 
              移動時間 
              (2バイト) 
              50 FB  | 
              目標角度 
              (2バイト) 
              E8 03 | 
              チェックサム 
              (1バイト) 
              64 | 
             
          
         
        合計12バイト 
         
         - ROBOTIS
 
        角度のみ指定
        
          
            
              ヘッダー 
              (2バイト) 
              FF FF | 
              サーボID 
              (1バイト) 
              01 | 
              データ長+2 
              (1バイト) 
              05 | 
              データ書き込みコマンド 
              (1バイト) 
              03 | 
              メモリアドレス 
              (1バイト) 
              1E | 
              目標角度 
              (2バイト) 
              00 02 | 
              チェックサム 
              (1バイト) 
               | 
             
          
         
        合計9バイト 
         
        移動角速度も指定
        
          
            
              ヘッダー 
              (2バイト) 
              FF FF | 
              サーボID 
              (1バイト) 
              01 | 
              データ長+2 
              (1バイト) 
              07 | 
              データ書き込みコマンド 
              (1バイト) 
              03 | 
              メモリアドレス 
              (1バイト) 
              1E | 
              目標角度 
              (2バイト) 
              00 02 | 
              移動角速度 
              (2バイト) 
              00 02 | 
              チェックサム 
              (1バイト) 
              D3 | 
             
          
         
        合計11バイト 
         
         - 近藤科学
 
        角度のみ指定 
        
          
            
              
              
                
                  
                    ポジション設定コマンド 
                    +サーボID 
                    (1バイト) 
                    81 | 
                    目標角度 
                    (2バイト) 
                    7F 7F | 
                   
                
               
              送信3バイト | 
              + | 
              
              
                
                  
                    ポジション設定コマンド 
                    +サーボID 
                    (1バイト) 
                    81 | 
                    現在角度 
                    (2バイト) 
                    51 20 | 
                   
                
               
              返信3バイト | 
             
          
         
          
         - Hitec
 
        角度のみ指定 
        
          
            
              
              
                
                  
                    ヘッダー 
                    (1バイト) 
                    80 | 
                    サーボID 
              (1バイト) 
              01 | 
                    目標角度 
                    (2バイト) 
                    7F 7F | 
                    チェックサム 
              (1バイト) 
                     | 
                   
                
               
              送信5バイト | 
              + | 
              
              
              返信2バイト | 
             
          
         
         
        
       バイト数的には近藤科学が少ない。ただし、送信後必ず返信がある。また、ロボットを動かす時には複数のサーボに指令を送ることが多く、その場合は以下に述べるように複数のサーボにまとめてデータが送れるFUTABAやROBOTISの場合のほうがバイト数はずっと少なくなる。 
       また、FUTABAやROBOTISの場合は、チェックサム機能があるため誤動作は起こりにくい。 
       さらに、サーボモータを個別に一個一個指定する場合(非同期動作)は、サーボ間の動作開始の時間遅れが問題になる。以下、24個のFUTABAのRS301CRに一個一個目標角度指定を行った場合のサーボモータの動作を示す。同じ角度を指定しているにもかかわらず、大きな角度のずれが見られる。 
        
       
       
       
      
      
        
          
              | 
           
          
            非同期(目標角度を1個づつ指定) 
            動画(WMV 489KB) 
            24個のサーボに移動指令。 
            左ID1、右ID24 
            1/10スロー再生 | 
           
        
       
      
        
       
       
       複数サーボの同期動作 
       サーボ間の動作のズレを無くすために、FUTABAとROBOTISでは同期動作を行うことができるようになっている(HitecのMHIでもできるとの情報があるが、できないとの情報もあり未確認)。その場合は、以下のようなコマンドを使用する。 
       
      
        - FUTABA
 
        角度のみ指定 
        
          
            
              ヘッダー 
              (2バイト) 
              FA AF | 
              ロングパケット指定 
              (1バイト) 
              00 | 
              フラグ 
              (1バイト) 
              00 | 
              メモリアドレス 
              (1バイト) 
              1E | 
              データ長 
              (1バイト) 
              48 | 
              サーボ数 
              (1バイト) 
              18 | 
              サーボID1 
              (1バイト) 
              01 | 
              目標角度 
              (2バイト) 
              84 03 | 
              サーボID2 
              (1バイト) 
              02 | 
              目標角度 
              (2バイト) 
              35 01 | 
              ・・・・ | 
              サーボIDN 
              (1バイト) 
              18 | 
              チェックサム 
              (1バイト) 
               | 
             
          
         
        合計8+3*サーボ数 バイト 
          
        移動時間も指定 
        
          
            
              ヘッダー 
              (2バイト) 
              FA AF | 
              ロングパケット指定 
              (1バイト) 
              00 | 
              フラグ 
              (1バイト) 
              00 | 
              メモリアドレス 
              (1バイト) 
              1E | 
              データ長 
              (1バイト) 
              60 | 
              サーボ数 
              (1バイト) 
              18 | 
              サーボID1 
              (1バイト) 
              01 | 
              移動時間 
              (2バイト) 
              50 FB | 
              目標角度 
              (2バイト) 
              E8 03 | 
              ・・・・ | 
              サーボIDN 
              (1バイト) 
              18 | 
              移動時間 
              (2バイト) 
              45 FA  | 
              目標角度 
              (2バイト) 
              22 34 | 
              チェックサム 
              (1バイト) 
               | 
             
          
         
        合計8+5*サーボ数 バイト 
         
         - ROBOTIS
 
        角度のみ指定
        
          
            
              ヘッダー 
              (2バイト) 
              FF FF | 
              Broadcast ID 
              (1バイト) 
              FE | 
              (1個当たりのデータ長+1)*サーボ数+4 
              (1バイト) 
              4C | 
              同期書き込みコマンド 
              (1バイト) 
              83 | 
              メモリアドレス 
              (1バイト) 
              1E | 
              1個当たりのデータ長 
              (1バイト) 
              02 | 
              サーボID1 
              (1バイト) 
              01 | 
              目標角度 
              (2バイト) 
              00 02 | 
              ・・・・ | 
              サーボIDN 
              (1バイト) 
              18 | 
              目標角度 
              (2バイト) 
              00 02 | 
              チェックサム 
              (1バイト) 
               | 
             
          
         
        合計8+3*サーボ数 バイト 
          
        
          
            
              ヘッダー 
              (2バイト) 
              FF FF | 
              Broadcast ID 
              (1バイト) 
              FE | 
              (1個当たりのデータ長+1)*サーボ数+4 
              (1バイト) 
              7C | 
              同期書き込みコマンド 
              (1バイト) 
              83 | 
              メモリアドレス 
              (1バイト) 
              1E | 
              1個当たりのデータ長 
              (1バイト) 
              04 | 
              サーボID1 
              (1バイト) 
              01 | 
              目標角度 
              (2バイト) 
              00 02 | 
              移動角速度 
              (2バイト) 
              10 02 | 
              ・・・・ | 
              サーボIDN 
              (1バイト) 
              18 | 
              目標角度 
              (2バイト) 
              00 02 | 
              移動角速度 
              (2バイト) 
              10 02 | 
              チェックサム 
              (1バイト) 
               | 
             
          
         
        合計8+5*サーボ数 バイト 
          
        
       同期状態で動かせばすべてのサーボが同時に動き始め、以下のようにモーターごとの角度ずれは起こらない。 
        
       
       
      
      
        
          
              | 
           
          
            同期(目標角度を一度に指定し、同時に移動開始) 
            動画(WMV 474KB) 
            24個のサーボに移動指令。 
            左ID1、右ID24 
            1/10スロー再生 | 
           
        
       
      
       
       
       
       速度指令 
       速度の指定は多くのメーカーが角速度なのに対し、FUTABAだけは移動時間での指定となっている。通常ロボットのモーションを作る時には目標角度と移動時間を指定するが、実際に時間を管理しているのはコントローラであり、コントローラがポーズ間を補間して定期的に目標位置をサーボに指令しているにすぎない。そのため、コントローラから頻繁にサーボへの指令が必要になる。それに対し、FUTABAでは時間の管理をサーボモータで行うため、ポーズの開始に1度データを送れば次のポーズまでデータを送る必要がなく、コントローラの負荷が大幅に軽減される。ROBOTISの場合角速度を細かく指定できるため角速度=目標角度/移動時間で計算できるが、急な動作の場合は等速度では無いため大まかな指定になってしまう。このような点からFUTABAの移動時間の指定方式は、ロボット制御に適した方法なのかもしれない。 
        
       
      
      
        
          
              | 
           
          
            | スタンダードな方式(目標位置指定、角速度指定) | 
           
        
       
      
        
      
      
        
          
              | 
           
          
            | FUTABA方式(移動時間指定) | 
           
        
       
      
       
      
      
        
          
              | 
           
          
            FUTABA RPU-10用のモーションエディター 
            移動時間を100ms単位で指定できる 
            さらに、直接シリアルコマンドを送れば10ms単位での指定も可能 | 
           
        
       
      
       
        
        
       以上の状況を考えると、シリアルサーボはFUTABAとROBOTISが1歩リードしている感じである。 
       |