現在、私たちはラズベリーパイとAX-12ダイナミックスサーボのロボットを構築しています。私たちは現在python3に移植しているpython2ライブラリを見つけました。python3でエラーが発生する特定のメソッドで問題を特定しました。python2とpython3の違いは、バイトの追加とシリアルポートへの送信
ザ・Pythonの2バージョンが実際に私たちがしようとしていることは、この変数を調整している魅力
AX_GOAL_LENGTH = 5
AX_WRITE_DATA = 3
AX_GOAL_POSITION_L = 30
AX_START = 255
AX_REG_WRITE = 4
def move(self, id, position):
self.direction(Ax12.RPI_DIRECTION_TX)
Ax12.port.flushInput()
p = [position&0xff, position>>8]
checksum = (~(id + Ax12.AX_GOAL_LENGTH + Ax12.AX_WRITE_DATA + Ax12.AX_GOAL_POSITION_L + p[0] + p[1]))&0xff
outData = chr(Ax12.AX_START)
outData += chr(Ax12.AX_START)
outData += chr(id)
outData += chr(Ax12.AX_GOAL_LENGTH)
outData += chr(Ax12.AX_WRITE_DATA)
outData += chr(Ax12.AX_GOAL_POSITION_L)
outData += chr(p[0])
outData += chr(p[1])
outData += chr(checksum)
Ax12.port.write(outData)
のように動作します:
Ax12.port.write(bytes(outData,'utf-8'))
今スクリプトは悲しげサーボはもう動作しません、実行されます。
我々はまた、バイト配列内のバイトを配置する
result = bytes([Ax12.AX_START, Ax12.AX_START,
Ax12.AX_GOAL_LENGTH,Ax12.AX_REG_WRITE,
Ax12.AX_GOAL_POSITION_L, p[0], p[1], checksum
])
Ax12.port.write(result)
をしようとしたスクリプトが実行されますが、サーボは実行されません。
私は、outDataに対して行われた操作は、python3とpython2では異なっていると思います。何が調整されるべきか、異なるべきかを知ることはできません。
誰かが現在私が間違っていることを見ていますか?
あなたの 'bytes'バージョンには' id'値がありません。あなたは 'AX_WRITE_DATA'の代わりに' AX_REG_WRITE'を送信しています。 –