こんにちは。koraです。
前回に引き続き、サーボモーターの動作を確認します。今回はDYNAMISEL SDKを使ってRaspberry Pi 4から動作させます。
DYNAMIXEL SDKのインストール
まずDYNAMIXEL SDKをインストールします。ROBOTISのe-Manualには、インストール方法としてgitを使う方法、zipファイルをダウンロードする方法、ROSパッケージとしてインストールする方法が紹介されています。最新のバージョンを利用するにはgitを使うと良いらしいので、さっそくやってみます。
Raspberry Pi 4で次のコマンドを入力し、GitHubのリポジトリをクローンします。
$ git clone https://github.com/ROBOTIS-GIT/DynamixelSDK.git
SDKの中のpythonディレクトリに移ってPython APIをインストールします。
$ cd DynamixelSDK/python $ sudo python setup.py install
これでPythonからDYNAMIXEL SDKを利用できるはずです。
Raspberry Pi 4とXM540の接続
Raspberry Pi 4でubuntu 18.04を使っている場合、デフォルトでGPIOピンヘッダー(物理ピン8、GPIO14がTX、物理ピン10、GPIO15がRX)がシリアル通信に利用できるようです。
ブレッドボード上でGPIOヘッダーとRS485変換ICを繋ぎます。今回はサーボモータから情報を受け取らないので送受信を切り替える必要はなく、RS485変換ICのDEピンとREピンは常にHIGHにします。
サンプルの実行
e-Manualにサンプルコードがありますが、バージョンが合っていないようで動きませんでした。代わりにGitHubのサンプルを参考に動作させてみます。
DynamixelのIDは 1、ボーレートは 57600 ですのでそのように設定します。また、シリアル通信のデバイス名は /dev/ttyS0 になります。
DXL_ID = 1 BAUDRATE = 57600 DEVICENAME = '/dev/ttyS0'
今回は送信オンリーで受信ができない回路構成になっていますので、サンプルの write1ByteTxRx と write4ByteTxRx を、次の write1ByteTxOnly と write4ByteTxOnly に書き換えて使用します。。
# Enable torque dxl_comm_result = packetHandler.write1ByteTxOnly( portHandler, DXL_ID, ADDR_PRO_TORQUE_ENABLE, TORQUE_ENABLE)
index = 0 while 1: # Write goal position dxl_comm_result = packetHandler.write4ByteTxOnly( portHandler, DXL_ID, ADDR_PRO_GOAL_POSITION, dxl_goal_position[index]) sleep(1) index = 1 - index
書き換えたPythonコードをsudo権限で実行すると、Raspberry Pi 4から XM540 を動かすことができました。