hiro_handleを使ってWindowsからHIRONX実機を動かす
初稿: 2013/10/6, 最終更新:
8.Windowsにhiro_handleをセットアップ
HIRONXのメーカー付属サンプルプログラムのJythonが邪魔な場合や、Windows環境からHIROを直接動かしたいとき、電通大の末廣先生が開発されたhiro_handleを使うと便利です。詳細は、リンク先をご覧ください。
hiro_handle:rtc_handleを使ってhiroNXを動かす
ここでは、Windowsへインストールする時の注意点だけを記載します。
8.1 準備
自前のpcのネットワークの設定
- 自身の有線のネットワークアドレス
HIRONXのQNXコントローラのIPアドレスと同じサブネットになるように、ネットワーク設定を変更します。そのままインターネットに接続できなくなってしまうので、LANカードを2枚差しにしたり、無線LANを使えるようにしておくと便利です。
仮に、ネットワーク設定が次のようになっているとします。*1
QNXのIP Address: 10.254.20.1
この場合、hiro_handleをインストールするPCのネットワークは次のようにします。
IP Address: 10.254.20.20 //下2桁は0-254までの適当な数字
Subnet Mask: 255.255.255.0
- robot-hostのネットワークアドレスが引けるようにする.
Windowsの/etc/hostsは、
C:\Windows\System32\drivers\etc\hosts
です。セキュリティ権限がないと編集できませんので、管理者権限が得られるように設定変更してください。テキストエディタで開いて、”QNXのIP Address hiroシリアル番号”を一番最後に一行加えます。シリアル番号は、頭を0で埋める3桁の数字ですので注意してください。
10.254.20.1 hiro020
OpenRTM-aist-Pythonの準備
まずOpenRTM-aist-Pythonと必要なツールを産総研のOpenRTM-aist-Python-1.1.0-RC1からダウンロードします。
- python-2.6.6.msi (表記が2.6.2になっていますが、2.6.6の表記の間違いです)
- Windows用インストーラ OpenRTM-aist-Python-1.1.0-RC1.msi
- Python版ソースコード(Win32) OpenRTM-aist-Python-1.1.0-RC1.zip
- MSVCR71.dll, MSVCP71.dll
1,2はダウンロード後インストールします。4も説明に従い、正しくコピーします。
コマンドプロンプトでPythonを使えるようにするため、環境変数PATH(コントロール パネル\システムとセキュリティ\システムからシステムの詳細設定>詳細設定>環境変数>システム環境変数)の最後尾にPythonを加えます。
;C:\Python26;
まだインストールしていない多くの場合、MSVCR71.dll, MSVCP71.dll が必要になるので、64ビットOSの場合c:\Windows\SysWow64の下にコピーします。
8.2 hiro_handleのインストール
ソースからのビルドで追加
指示に従って修正を加えていきます。OpenRTM-aist-Pythonのビルド方法はこちらに説明があります。
rtc_handle のインストール、hiro_handle のインストール
ここでは、c:\workspace\hiro_handleの下に展開するものとします。パスを通す代わりにお行儀が悪いですが、rtc_handleの下のrtc_handle.py、rtc_handle_util.pyとembryonic_rtcの下のEmbryonicRtc.pyをc:\workspace\hiro_handleの下にコピーします。
hiroNXのrtcのservice interfaceのidlのインストール
そのままではWindowsのコマンドプロンプト上でワイルドカード*は有効になりませんので、一つ一つファイル名を直接入力します。
omniidl -bpython *.idl
の代わりに、
omniidl -bpython RobotHardwareService.idl
omniidl -bpython SequencePlayerService.idl
omniidl -bpython SystemAdminService.idl
omniidl -bpython ArmControlService.idl
omniidl -bpython GrasperService.idl
omniidl -bpython TimeKeepereService.idl
omniidl -bpython DataLoggerService.idl
8.3 使い方
set_env.pyのNS_HIROを使用するHIROのシリアル番号に指定します。
NS_HIRO=”hiro020″
QNXの上に起動しているnameserviceを使うことにしてrtc.confを次のように編集します。
corba.nameservers: hiro020:9876
8.4 テスト
ここでは他にrtc_handleのコンポーネントを使いませんので、hiro_test.pyを書き換えます。実機があるなら、動作テストもしてしまいましょう。
import sys
from hiro_handle import *
#env=RtmEnv(sys.argv,[NS0,NS1])
#hiro=HiroEnv(None, NS_HIRO, env.orb)
hiro=HiroEnv(sys.argv, NS_HIRO)
hiro.init()
hiro.servoOff(doConfirm=False)
hiro.calibrateJoint()
hiro.getVersion()
hiro.goInitial()
hiro.servoOff(doConfirm=False);
ただし、log周りに少しバグがありますので、logを使わないようにhiro_handle.pyを一部書き換えます。servoOff関数の中のself.saveLog()を頭に#をつけてコメントアウトしてください。
HIRONXの実機があれば、QNXの電源を入れて実行してみましょう。最初はぶつけたり、暴走したりする可能性もありますので、十分に注意してください。コマンドプロンプトを開いてスクリプトを実行します。
python hiro_test.py
上手く動きましたか?
fig.16 実行結果
*1:HIRONXのネットワーク設定は、販売時期やシリアル番号によって異なり、メーカーサポートページのオンラインマニュアルに記載されています。ただし、IDとパスワードが必要です。購入するまでロボットの詳細が分からないのですから不便ですね。