55:なお、APIが返すエラー情報はここでは無視しています。APIが返すエラー情報はここでは無視しています。必要最低限の動作フローを元しているため、本来行わなくてはならないエラー処理をかなり省略しています。返り値のみで判断せざるを得ないサブルーチンは、使用しているAPIでエラーが発生すると想定外の動作を励起する事が想定されます。ここでは必要最低限の動作フローを元しているため、本来行わなくてはならないエラー処理をかなり省略しています。返り値のみで判断せざるを得ないサブルーチンは、使用しているAPIでエラーが発生すると想定外の動作を励起する事が想定されます。信頼性の高いシステムを構築する場合は可能な限り厳密なエラー処理を追加し、処理が容易に進捗しないコードを心がけるべきです。信頼性の高いシステムを構築する場合は可能な限り厳密なエラー処理を追加し、処理が容易に進捗しないコードを心がけるべきなので、あくまで参考として紹介します。PROシリーズはモデルによってコントロールテーブル上の各アイテムの扱う値の範囲が異なっていたり、物理値を扱うものやDynamixelの内部でのみ意味のある値があるため、各アイテムを直接扱うとなると互換性のあるプログラムが作りにくい構成になっています。ここでは主にモデル間の差異を吸収して角度として扱うためのサブルーチンと、動作するにあたって最低限必要なサブルーチンを紹介します。複数軸を同時に扱う場合はこの限りではありません。Enable(562)に1を書き込んでおく必要があります。Enableに0を書き込みます。Enable(562)に1を書き込んでおく必要があります。Enableに0を書き込みます。Enableの操作のみで出力軸が実際に回転し始めることはありません。Enableの操作のみで出力軸が勝手に回転し始めることはありません。Positionの分解能が異なり、角度を元に位置を指令するにしても変換が必要です。Velocityの単位が異なっているため、いずれも物理値を元に指令する場合は変換が必要です。Limit(40~43)が初期状態であれば、それら利用して係数を算出しておき、モデル毎の差異を吸収して角度と位置を相互に変換できます。Limit(40~43)が初期状態であれば、それら利用して係数を算出しておき、モデル毎の差異を吸収して角度と位置を相互に変換できます。Position(596~599)へ書き込んだ値に応じて出力軸が移動します。Limitの範囲を超えた値を受け取らないため、ここでは上下限値で飽和させた上で指令しています。Velocity(600~603)へ書き込んだ値に応じて出力軸の回転速度が決まります。Limit(32~35)を超えた値を受け取らないため、ここではその値で飽和させた上で指令しています。Position(596~599)へ書き込んだ値に応じて出力軸が移動します。Limitの範囲を超えた値を受け取らないため、ここでは上下限値で飽和させた上で指令しています。Modeですが、モードが違えば操作も異なりますし、思い通りの動作が行われない事も起こりえます。Enable(562)が0の状態でのみ可能です。Position(596~599)へ-180~180度の範囲で10度ずつ角度を増やして指令します。紹介した各処理ルーチンを使用し、現在位置を起点に最大動作範囲を往復回転させるプログラムです。IDの変更自体は該当のアドレスに新しいIDを書き込むだけですが、変更先のIDを持ったデバイスが無い事を確認した上で変更するプログラムを紹介します。IDの変更は該当のアドレスに新しいIDを書き込む事で行いますが、複数のデバイスが接続された環境での変更はIDの競合が発生する等のリスクがあります。手動で既存のIDを調べながら変更するのは少々手間なので、変更先のIDを持ったデバイスが無い事を確認して更新するプログラムを紹介します。