[openrtm-users 01644] NXTRTCについて

7 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 20時間 24分 前
登録日: 2009-06-23 14:31
[openrtm-users 01644] NXTRTCについて

専門学校生 加藤です。   パソコンからNXTRTCに繋ぎ制御することができました。 ありがとうございました。   一つ質問があります。 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
一度やってみたのですがエラーが発生してしまいました。   パソコンからモータA,Bを動かすプログラムを送信し、NXT側でモータA,Bが動いたときに別のモータを動かす。   のような動作をさせたいです。 可能でしょうか?
  お時間頂けたらご教授お願いします。
 

未定義
root
オフライン
Last seen: 20時間 24分 前
登録日: 2009-06-23 14:31
[openrtm-users 01647] NXTRTCについて

加藤様

栗原です。

> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
「別のプログラムを実行させておく」がどのような方法(別スレッド?)で実行されている
のかはわかりませんが、別のモータを制御する事は可能です。

NXTRTC.pyの"def onExecute(self,ec_idl):"内にあります以下の行
vel_[self._mapping[self._map[0][0]]] = self._d_vel.data[0]
vel_[self._mapping[self._map[0][1]]] = self._d_vel.data[1]
を、以下のようにして頂くことで、NXTのCのポートに接続されている
モータを動かす事ができます。
vel_[0] = self._d_vel.data[0]
vel_[1] = self._d_vel.data[1]
vel_[2] = self._d_vel.data[1] # ここに”別のモータ”の速度を入力する。

”別のモータ”の速度を独自に変更したい場合は、速度を計算した
結果を"vel_[2] = "の行のself._d_vel.data[1]のところと置き
換えてみて下さい。

ちなみに、上記のように変更した場合、InPortに新しいデータが
届いた時のみモータが動きます。

上記の変更を行ったNXTRTC.pyを添付させて頂いております。

以上、宜しくお願い致します。

On Thu, 3 Mar 2011 14:16:26 +0900 (JST)
wrote:

> 専門学校生 加藤です。
>
> パソコンからNXTRTCに繋ぎ制御することができました。
> ありがとうございました。
>
> 一つ質問があります。
> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
> 一度やってみたのですがエラーが発生してしまいました。
>
> パソコンからモータA,Bを動かすプログラムを送信し、NXT側でモータA,Bが動いたときに別のモータを動かす。
>
> のような動作をさせたいです。
> 可能でしょうか?
>
> お時間頂けたらご教授お願いします。
>
>

root
オフライン
Last seen: 20時間 24分 前
登録日: 2009-06-23 14:31
[openrtm-users 01648] NXTRTCについて

栗原様   加藤です。   ありがとうございます。 とても勉強になります。 今後もNXTRTCは利用していきたいのでよく覚えておきます。   しかし今回やりたいのが、LEGO
Mindstorms自体のプログラムを実行しながらなおかつパソコンから制御ができないか、ということです。   当方NXTRTCについては勉強を始めたばかりでプログラムについてあまり分からない点が多いので、少し前からやっている mindstorms のプログラムを併用できないかと思いました。
  超音波センサが反応したときにモータCを動かし、地面の色が変わったときにモータCを元に戻すというプログラムを LEGO mindstorms にロードし実行してみました。   (希望では、TkJoystickCompとNXTRTCをeclipceで結線しモータA,Bを動かし、 LEGO mindstorms
のほうのプログラムでモータCと超音波センサと光学センサを制御するといった形です)   しかし実行してすぐ液晶画面に「error」と表示され、system diagram ではNXTRTCが緑色から赤色に代わりエラーとなりました。   一応、 mindstorms
上のプログラムはモータA,BやPORT3の光学センサとPORT4の超音波センサに関するプログラムは一切しておりません(PORT2とPORT1に各センサあり)。   パソコンとNXTをbluetoothで繋ぎながらNXT自体に別のプログラムを実行させるのはできないのでしょうか。  
お時間いただければご教授お願いします。
kurihara shinji <shinji.kurihara@aist.go.jp> wrote:

加藤様

栗原です。

> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
「別のプログラムを実行させておく」がどのような方法(別スレッド?)で実行されている
のかはわかりませんが、別のモータを制御する事は可能です。

NXTRTC.pyの"def onExecute(self,ec_idl):"内にあります以下の行
vel_[self._mapping[self._map[0][0]]] = self._d_vel.data[0]
vel_[self._mapping[self._map[0][1]]] = self._d_vel.data[1]
を、以下のようにして頂くことで、NXTのCのポートに接続されている
モータを動かす事ができます。
vel_[0] = self._d_vel.data[0]
vel_[1] = self._d_vel.data[1]
vel_[2] = self._d_vel.data[1] # ここに”別のモータ”の速度を入力する。

”別のモータ”の速度を独自に変更したい場合は、速度を計算した
結果を"vel_[2] = "の行のself._d_vel.data[1]のところと置き
換えてみて下さい。

ちなみに、上記のように変更した場合、InPortに新しいデータが
届いた時のみモータが動きます。

上記の変更を行ったNXTRTC.pyを添付させて頂いております。

以上、宜しくお願い致します。

On Thu, 3 Mar 2011 14:16:26 +0900 (JST)
wrote:

> 専門学校生 加藤です。
>
> パソコンからNXTRTCに繋ぎ制御することができました。
> ありがとうございました。
>
> 一つ質問があります。
> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
> 一度やってみたのですがエラーが発生してしまいました。
>
> パソコンからモータA,Bを動かすプログラムを送信し、NXT側でモータA,Bが動いたときに別のモータを動かす。
>
> のような動作をさせたいです。
> 可能でしょうか?
>
> お時間頂けたらご教授お願いします。
>
>

root
オフライン
Last seen: 20時間 24分 前
登録日: 2009-06-23 14:31
[openrtm-users 01649] NXTRTCについて

加藤様

安藤です

NXTRTCでは基本的に、デフォルトのファームウエアでnxtpython
から操作することを前提としているので、カスタムファームウエアでは
動作しないと思います。

ただし、カスタムファームウエアで、nxtpythonとも通信し、独自の
ロジックも実装して動作するようなプログラムを作成すれば加藤さんの
やりたいようなことも実現可能だとは思います。

例えば、以下のNXTwayをRTCから動作させている例もありますが、
これはNXT側で倒立振子の制御をしつつ、BluetoothでRTCからの
指令を受け取ってNXTwayを動かしています。
http://www.openrtm.org/openrtm/ja/node/268

ただ、NXTwayについても、nxtOSEKで開発されたプログラムを
流用しただけですので、詳細についてはnxtOSEKのページ等を
ご覧ください。
http://lejos-osek.sourceforge.net/jp/nxtway_gs.htm

#もしかすると、nxtOSEKをよくご存じのかたがこのMLを見ているかもしれませんね。
#どなたかいらっしゃいませんか?

2011年3月3日19:50 :
> 栗原様
>
> 加藤です。
>
> ありがとうございます。
> とても勉強になります。
> 今後もNXTRTCは利用していきたいのでよく覚えておきます。
>
> しかし今回やりたいのが、LEGO Mindstorms自体のプログラムを実行しながらなおかつパソコンから制御ができないか、ということです。
>
> 当方NXTRTCについては勉強を始めたばかりでプログラムについてあまり分からない点が多いので、少し前からやっている mindstorms のプログラムを併用できないかと思いました。
>
> 超音波センサが反応したときにモータCを動かし、地面の色が変わったときにモータCを元に戻すというプログラムを LEGO mindstorms
> にロードし実行してみました。
>
> (希望では、TkJoystickCompとNXTRTCをeclipceで結線しモータA,Bを動かし、 LEGO mindstorms
> のほうのプログラムでモータCと超音波センサと光学センサを制御するといった形です)
>
> しかし実行してすぐ液晶画面に「error」と表示され、system diagram ではNXTRTCが緑色から赤色に代わりエラーとなりました。
>
> 一応、 mindstorms
> 上のプログラムはモータA,BやPORT3の光学センサとPORT4の超音波センサに関するプログラムは一切しておりません(PORT2とPORT1に各センサあり)。
>
> パソコンとNXTをbluetoothで繋ぎながらNXT自体に別のプログラムを実行させるのはできないのでしょうか。
>
> お時間いただければご教授お願いします。
> kurihara shinji wrote:
>
> 加藤様
>
> 栗原です。
>
>> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
> 「別のプログラムを実行させておく」がどのような方法(別スレッド?)で実行されている
> のかはわかりませんが、別のモータを制御する事は可能です。
>
> NXTRTC.pyの"def onExecute(self,ec_idl):"内にあります以下の行
> vel_[self._mapping[self._map[0][0]]] = self._d_vel.data[0]
> vel_[self._mapping[self._map[0][1]]] = self._d_vel.data[1]
> を、以下のようにして頂くことで、NXTのCのポートに接続されている
> モータを動かす事ができます。
> vel_[0] = self._d_vel.data[0]
> vel_[1] = self._d_vel.data[1]
> vel_[2] = self._d_vel.data[1] # ここに”別のモータ”の速度を入力する。
>
> ”別のモータ”の速度を独自に変更したい場合は、速度を計算した
> 結果を"vel_[2] = "の行のself._d_vel.data[1]のところと置き
> 換えてみて下さい。
>
> ちなみに、上記のように変更した場合、InPortに新しいデータが
> 届いた時のみモータが動きます。
>
> 上記の変更を行ったNXTRTC.pyを添付させて頂いております。
>
>
> 以上、宜しくお願い致します。
>
>
>
> On Thu, 3 Mar 2011 14:16:26 +0900 (JST)
> wrote:
>
>> 専門学校生 加藤です。
>>
>> パソコンからNXTRTCに繋ぎ制御することができました。
>> ありがとうございました。
>>
>> 一つ質問があります。
>> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
>> 一度やってみたのですがエラーが発生してしまいました。
>>
>> パソコンからモータA,Bを動かすプログラムを送信し、NXT側でモータA,Bが動いたときに別のモータを動かす。
>>
>> のような動作をさせたいです。
>> 可能でしょうか?
>>
>> お時間頂けたらご教授お願いします。
>>
>>
>
>
> #!/usr/bin/env python
> # -*- coding:shift_jis -*-
> # -*- Python -*-
>
> import sys
> import time
> sys.path.append(".")
>
> # Import RTM module
> import OpenRTM
> import RTC
>
>
> # import NXTBrick class
> import NXTBrick
>
>
> # This module's spesification
> #
> nxtrtc_spec = ["implementation_id", "NXTRTC",
> "type_name", "NXTRTC",
> "description", "NXT sample component",
> "version", "0.1",
> "vendor", "AIST",
> "category", "example",
> "activity_type", "DataFlowComponent",
> "max_instance", "10",
> "language", "Python",
> "lang_type", "SCRIPT",
> "conf.default.map", "A,B",
> ""]
>
> #
>
> class NXTRTC(OpenRTM.DataFlowComponentBase):
> def __init__(self, manager):
> OpenRTM.DataFlowComponentBase.__init__(self, manager)
>
> # DataPorts initialization
> #
> self._d_vel = RTC.TimedFloatSeq(RTC.Time(0,0),[])
> self._velIn = OpenRTM.InPort("vel", self._d_vel,
> OpenRTM.RingBuffer(8))
> self.registerInPort("vel",self._velIn)
> self._d_pos = RTC.TimedFloatSeq(RTC.Time(0,0),[])
> self._posOut = OpenRTM.OutPort("pos", self._d_pos,
> OpenRTM.RingBuffer(8))
> self.registerOutPort("pos",self._posOut)
> self._d_sens = RTC.TimedFloatSeq(RTC.Time(0,0),[])
> self._sensOut = OpenRTM.OutPort("sens", self._d_sens,
> OpenRTM.RingBuffer(8))
> self.registerOutPort("sens",self._sensOut)
>
> # initialize of configuration-data.
> #
> self._map = [['A', 'B']]
> self._nxtbrick = None
> self._mapping = {'A':0,'B':1,'C':2}
>
> def onInitialize(self):
> # Bind variables and configuration variable
> #
> self.bindParameter("map", self._map, "A,B")
>
> # create NXTBrick object
> try:
> print "Connecting to NXT brick ...."
> self._nxtbrick = NXTBrick.NXTBrick()
> print "Connection established."
> except:
> print "NXTBrick connection failed."
> return RTC.RTC_ERROR
>
> return RTC.RTC_OK
>
> def onFinalize(self):
> self._nxtbrick.close()
>
> def onActivated(self, ec_id):
> self._nxtbrick.setMotors([0,0,0])
> # reset NXTBrick's position.
> self._nxtbrick.resetPosition()
> return RTC.RTC_OK
>
> def onDeactivated(self, ec_id):
> self._nxtbrick.setMotors([0,0,0])
> # reset NXTBrick's position.
> self._nxtbrick.resetPosition()
>
> return RTC.RTC_OK
>
> def onExecute(self, ec_id):
> # check new data.
> if self._velIn.isNew():
> # read velocity data from inport.
> self._d_vel = self._velIn.read()
> vel_ = [0,0,0]
> #vel_[self._mapping[self._map[0][0]]] = self._d_vel.data[0]
> #vel_[self._mapping[self._map[0][1]]] = self._d_vel.data[1]
> vel_[0] = self._d_vel.data[0]
> vel_[1] = self._d_vel.data[1]
> vel_[2] = self._d_vel.data[1]
> # set velocity
> self._nxtbrick.setMotors(vel_)
>
> # get sensor data.
> sensor_ = self._nxtbrick.getSensors()
> if sensor_:
> self._d_sens.data = sensor_
> # write sensor data to outport.
> self._sensOut.write()
>
> # get position data.
> position_ = self._nxtbrick.getMotors()
> if position_:
> self._d_pos.data = \
> [position_[self._mapping[self._map[0][0]]][9], \
> position_[self._mapping[self._map[0][1]]][9]]
> # write position data to outport.
> self._posOut.write()
>
> return RTC.RTC_OK
>
>
>
> def MyModuleInit(manager):
> profile = OpenRTM.Properties(defaults_str=nxtrtc_spec)
> manager.registerFactory(profile,
> NXTRTC,
> OpenRTM.Delete)
>
> # Create a component
> comp = manager.createComponent("NXTRTC")
>
>
>
> def main():
> mgr = OpenRTM.Manager.init(len(sys.argv), sys.argv)
> #mgr = OpenRTM.Manager.init(sys.argv)
> mgr.setModuleInitProc(MyModuleInit)
> mgr.activateManager()
> mgr.runManager()
>
> if __name__ == "__main__":
> main()
>
>
>
>

root
オフライン
Last seen: 20時間 24分 前
登録日: 2009-06-23 14:31
[openrtm-users 01652] NXTRTCについて

加藤です。   以前栗原様に教えていただいたNXTRTCのモータCを動かすプログラムについて質問があります。   添付していただいたNXTRTCのプログラムですが、 新しくInPortに 50
というデータが届いた場合、モータCが50の速度で動く。   という解釈で合っていますでしょうか?   お時間頂けたらご教授お願いします。

kurihara shinji <shinji.kurihara@aist.go.jp> wrote:

加藤様

栗原です。

> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
「別のプログラムを実行させておく」がどのような方法(別スレッド?)で実行されている
のかはわかりませんが、別のモータを制御する事は可能です。

NXTRTC.pyの"def onExecute(self,ec_idl):"内にあります以下の行
vel_[self._mapping[self._map[0][0]]] = self._d_vel.data[0]
vel_[self._mapping[self._map[0][1]]] = self._d_vel.data[1]
を、以下のようにして頂くことで、NXTのCのポートに接続されている
モータを動かす事ができます。
vel_[0] = self._d_vel.data[0]
vel_[1] = self._d_vel.data[1]
vel_[2] = self._d_vel.data[1] # ここに”別のモータ”の速度を入力する。

”別のモータ”の速度を独自に変更したい場合は、速度を計算した
結果を"vel_[2] = "の行のself._d_vel.data[1]のところと置き
換えてみて下さい。

ちなみに、上記のように変更した場合、InPortに新しいデータが
届いた時のみモータが動きます。

上記の変更を行ったNXTRTC.pyを添付させて頂いております。

以上、宜しくお願い致します。

On Thu, 3 Mar 2011 14:16:26 +0900 (JST)
wrote:

> 専門学校生 加藤です。
>
> パソコンからNXTRTCに繋ぎ制御することができました。
> ありがとうございました。
>
> 一つ質問があります。
> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
> 一度やってみたのですがエラーが発生してしまいました。
>
> パソコンからモータA,Bを動かすプログラムを送信し、NXT側でモータA,Bが動いたときに別のモータを動かす。
>
> のような動作をさせたいです。
> 可能でしょうか?
>
> お時間頂けたらご教授お願いします。
>
>

root
オフライン
Last seen: 20時間 24分 前
登録日: 2009-06-23 14:31
[openrtm-users 01653] NXTRTCについて

加藤様

栗原です。

> 添付していただいたNXTRTCのプログラムですが、
> 新しくInPortに 50 というデータが届いた場合、モータCが50の速度で動く。
>
> という解釈で合っていますでしょうか?
まず、NXTRTC.pyは、InPortのデータ型にTimedFloatSeqというデータ型を使用しており、
要素数は2(左車輪の速度、右車輪の速度)を想定して作成してます。
よって、先日お送りしたサンプルでは、
 vel_[2] = self._d_vel.data[1]
のようにしてましたので、右車輪の指令値と同じ速度で、モータCも回ります。
なので、InPortのリストデータの2番目の要素の値が50であれば、モータCも50(power)で
回転します。

もし、左右の車輪とは別の指令値で、かつInPortのデータで動かしたい場合は、
 vel_[2] = self._d_vel.data[2]
のようにする事で可能です。
ただし、現在のTkJoyStickComp.pyは一つのOutPortで2つデータ(vel_left,vel_right)
しか出力しませんので、3つの要素を出力するようにするか、別途3つの要素を出力する
ようなデータポート、または、RTコンポーネントを作り、NXTRTCのInPortと接続する必要
があります。

2011年3月6日1:58 :
> 加藤です。
>
> 以前栗原様に教えていただいたNXTRTCのモータCを動かすプログラムについて質問があります。
>
> 添付していただいたNXTRTCのプログラムですが、
> 新しくInPortに 50 というデータが届いた場合、モータCが50の速度で動く。
>
> という解釈で合っていますでしょうか?
>
> お時間頂けたらご教授お願いします。
>
> kurihara shinji wrote:
>
> 加藤様
>
> 栗原です。
>
>> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
> 「別のプログラムを実行させておく」がどのような方法(別スレッド?)で実行されている
> のかはわかりませんが、別のモータを制御する事は可能です。
>
> NXTRTC.pyの"def onExecute(self,ec_idl):"内にあります以下の行
> vel_[self._mapping[self._map[0][0]]] = self._d_vel.data[0]
> vel_[self._mapping[self._map[0][1]]] = self._d_vel.data[1]
> を、以下のようにして頂くことで、NXTのCのポートに接続されている
> モータを動かす事ができます。
> vel_[0] = self._d_vel.data[0]
> vel_[1] = self._d_vel.data[1]
> vel_[2] = self._d_vel.data[1] # ここに”別のモータ”の速度を入力する。
>
> ”別のモータ”の速度を独自に変更したい場合は、速度を計算した
> 結果を"vel_[2] = "の行のself._d_vel.data[1]のところと置き
> 換えてみて下さい。
>
> ちなみに、上記のように変更した場合、InPortに新しいデータが
> 届いた時のみモータが動きます。
>
> 上記の変更を行ったNXTRTC.pyを添付させて頂いております。
>
>
> 以上、宜しくお願い致します。
>
>
>
> On Thu, 3 Mar 2011 14:16:26 +0900 (JST)
> wrote:
>
>> 専門学校生 加藤です。
>>
>> パソコンからNXTRTCに繋ぎ制御することができました。
>> ありがとうございました。
>>
>> 一つ質問があります。
>> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
>> 一度やってみたのですがエラーが発生してしまいました。
>>
>> パソコンからモータA,Bを動かすプログラムを送信し、NXT側でモータA,Bが動いたときに別のモータを動かす。
>>
>> のような動作をさせたいです。
>> 可能でしょうか?
>>
>> お時間頂けたらご教授お願いします。
>>
>>
>
>
> #!/usr/bin/env python
> # -*- coding:shift_jis -*-
> # -*- Python -*-
>
> import sys
> import time
> sys.path.append(".")
>
> # Import RTM module
> import OpenRTM
> import RTC
>
>
> # import NXTBrick class
> import NXTBrick
>
>
> # This module's spesification
> #
> nxtrtc_spec = ["implementation_id", "NXTRTC",
> "type_name", "NXTRTC",
> "description", "NXT sample component",
> "version", "0.1",
> "vendor", "AIST",
> "category", "example",
> "activity_type", "DataFlowComponent",
> "max_instance", "10",
> "language", "Python",
> "lang_type", "SCRIPT",
> "conf.default.map", "A,B",
> ""]
>
> #
>
> class NXTRTC(OpenRTM.DataFlowComponentBase):
> def __init__(self, manager):
> OpenRTM.DataFlowComponentBase.__init__(self, manager)
>
> # DataPorts initialization
> #
> self._d_vel = RTC.TimedFloatSeq(RTC.Time(0,0),[])
> self._velIn = OpenRTM.InPort("vel", self._d_vel,
> OpenRTM.RingBuffer(8))
> self.registerInPort("vel",self._velIn)
> self._d_pos = RTC.TimedFloatSeq(RTC.Time(0,0),[])
> self._posOut = OpenRTM.OutPort("pos", self._d_pos,
> OpenRTM.RingBuffer(8))
> self.registerOutPort("pos",self._posOut)
> self._d_sens = RTC.TimedFloatSeq(RTC.Time(0,0),[])
> self._sensOut = OpenRTM.OutPort("sens", self._d_sens,
> OpenRTM.RingBuffer(8))
> self.registerOutPort("sens",self._sensOut)
>
> # initialize of configuration-data.
> #
> self._map = [['A', 'B']]
> self._nxtbrick = None
> self._mapping = {'A':0,'B':1,'C':2}
>
> def onInitialize(self):
> # Bind variables and configuration variable
> #
> self.bindParameter("map", self._map, "A,B")
>
> # create NXTBrick object
> try:
> print "Connecting to NXT brick ...."
> self._nxtbrick = NXTBrick.NXTBrick()
> print "Connection established."
> except:
> print "NXTBrick connection failed."
> return RTC.RTC_ERROR
>
> return RTC.RTC_OK
>
> def onFinalize(self):
> self._nxtbrick.close()
>
> def onActivated(self, ec_id):
> self._nxtbrick.setMotors([0,0,0])
> # reset NXTBrick's position.
> self._nxtbrick.resetPosition()
> return RTC.RTC_OK
>
> def onDeactivated(self, ec_id):
> self._nxtbrick.setMotors([0,0,0])
> # reset NXTBrick's position.
> self._nxtbrick.resetPosition()
>
> return RTC.RTC_OK
>
> def onExecute(self, ec_id):
> # check new data.
> if self._velIn.isNew():
> # read velocity data from inport.
> self._d_vel = self._velIn.read()
> vel_ = [0,0,0]
> #vel_[self._mapping[self._map[0][0]]] = self._d_vel.data[0]
> #vel_[self._mapping[self._map[0][1]]] = self._d_vel.data[1]
> vel_[0] = self._d_vel.data[0]
> vel_[1] = self._d_vel.data[1]
> vel_[2] = self._d_vel.data[1]
> # set velocity
> self._nxtbrick.setMotors(vel_)
>
> # get sensor data.
> sensor_ = self._nxtbrick.getSensors()
> if sensor_:
> self._d_sens.data = sensor_
> # write sensor data to outport.
> self._sensOut.write()
>
> # get position data.
> position_ = self._nxtbrick.getMotors()
> if position_:
> self._d_pos.data = \
> [position_[self._mapping[self._map[0][0]]][9], \
> position_[self._mapping[self._map[0][1]]][9]]
> # write position data to outport.
> self._posOut.write()
>
> return RTC.RTC_OK
>
>
>
> def MyModuleInit(manager):
> profile = OpenRTM.Properties(defaults_str=nxtrtc_spec)
> manager.registerFactory(profile,
> NXTRTC,
> OpenRTM.Delete)
>
> # Create a component
> comp = manager.createComponent("NXTRTC")
>
>
>
> def main():
> mgr = OpenRTM.Manager.init(len(sys.argv), sys.argv)
> #mgr = OpenRTM.Manager.init(sys.argv)
> mgr.setModuleInitProc(MyModuleInit)
> mgr.activateManager()
> mgr.runManager()
>
> if __name__ == "__main__":
> main()
>
>
>
>

root
オフライン
Last seen: 20時間 24分 前
登録日: 2009-06-23 14:31
[openrtm-users 01650] NXTRTCについて

安藤です

いえ、nxtOSEKしかだめということはないと思いますが。。。
ただ、OpenRTM-aistの開発チームの方では、NXTについては
それほど深く理解しているわけではないので、今のところ
nxtOSEKでやる方法しかわかりません。
他にいい方法を見つけられたら、ぜひMLで教えてください。
よろしくお願いいたします。

2011年3月3日22:52 :
> 安藤様
>
> 加藤です。
>
> nxtOSEKしか無理ですかー。
> 了解です。
>
> 前に一度インストールしたので、機会があれば勉強したいと思います。
>
> ありがとうございました。
> Ando Noriaki wrote:
>
> 加藤様
>
> 安藤です
>
> NXTRTCでは基本的に、デフォルトのファームウエアでnxtpython
> から操作することを前提としているので、カスタムファームウエアでは
> 動作しないと思います。
>
> ただし、カスタムファームウエアで、nxtpythonとも通信し、独自の
> ロジックも実装して動作するようなプログラムを作成すれば加藤さんの
> やりたいようなことも実現可能だとは思います。
>
> 例えば、以下のNXTwayをRTCから動作させている例もありますが、
> これはNXT側で倒立振子の制御をしつつ、BluetoothでRTCからの
> 指令を受け取ってNXTwayを動かしています。
> http://www.openrtm.org/openrtm/ja/node/268
>
> ただ、NXTwayについても、nxtOSEKで開発されたプログラムを
> 流用しただけですので、詳細についてはnxtOSEKのページ等を
> ご覧ください。
> http://lejos-osek.sourceforge.net/jp/nxtway_gs.htm
>
> #もしかすると、nxtOSEKをよくご存じのかたがこのMLを見ているかもしれませんね。
> #どなたかいらっしゃいませんか?
>
>
> 2011年3月3日19:50 :
>> 栗原様
>>
>> 加藤です。
>>
>> ありがとうございます。
>> とても勉強になります。
>> 今後もNXTRTCは利用していきたいのでよく覚えておきます。
>>
>> しかし今回やりたいのが、LEGO Mindstorms自体のプログラムを実行しながらなおかつパソコンから制御ができないか、ということです。
>>
>>
>> 当方NXTRTCについては勉強を始めたばかりでプログラムについてあまり分からない点が多いので、少し前からやっている mindstorms のプログラムを併用できないかと思いました。
>>
>> 超音波センサが反応したときにモータCを動かし、地面の色が変わったときにモータCを元に戻すというプログラムを LEGO mindstorms
>> にロードし実行してみました。
>>
>> (希望では、TkJoystickCompとNXTRTCをeclipceで結線しモータA,Bを動かし、 LEGO mindstorms
>> のほうのプログラムでモータCと超音波センサと光学センサを制御するといった形です)
>>
>> しかし実行してすぐ液晶画面に「error」と表示され、system diagram ではNXTRTCが緑色から赤色に代わりエラーとなりました。
>>
>> 一応、 mindstorms
>>
>> 上のプログラムはモータA,BやPORT3の光学センサとPORT4の超音波センサに関するプログラムは一切しておりません(PORT2とPORT1に各センサあり)。
>>
>> パソコンとNXTをbluetoothで繋ぎながらNXT自体に別のプログラムを実行させるのはできないのでしょうか。
>>
>> お時間いただければご教授お願いします。
>> kurihara shinji wrote:
>>
>> 加藤様
>>
>> 栗原です。
>>
>>> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
>> 「別のプログラムを実行させておく」がどのような方法(別スレッド?)で実行されている
>> のかはわかりませんが、別のモータを制御する事は可能です。
>>
>> NXTRTC.pyの"def onExecute(self,ec_idl):"内にあります以下の行
>> vel_[self._mapping[self._map[0][0]]] = self._d_vel.data[0]
>> vel_[self._mapping[self._map[0][1]]] = self._d_vel.data[1]
>> を、以下のようにして頂くことで、NXTのCのポートに接続されている
>> モータを動かす事ができます。
>> vel_[0] = self._d_vel.data[0]
>> vel_[1] = self._d_vel.data[1]
>> vel_[2] = self._d_vel.data[1] # ここに”別のモータ”の速度を入力する。
>>
>> ”別のモータ”の速度を独自に変更したい場合は、速度を計算した
>> 結果を"vel_[2] = "の行のself._d_vel.data[1]のところと置き
>> 換えてみて下さい。
>>
>> ちなみに、上記のように変更した場合、InPortに新しいデータが
>> 届いた時のみモータが動きます。
>>
>> 上記の変更を行ったNXTRTC.pyを添付させて頂いております。
>>
>>
>> 以上、宜しくお願い致します。
>>
>>
>>
>> On Thu, 3 Mar 2011 14:16:26 +0900 (JST)
>> wrote:
>>
>>> 専門学校生 加藤です。
>>>
>>> パソコンからNXTRTCに繋ぎ制御することができました。
>>> ありがとうございました。
>>>
>>> 一つ質問があります。
>>> 繋いだ先のNXT自体に別のプログラムを実行させておくことはできますでしょうか?
>>> 一度やってみたのですがエラーが発生してしまいました。
>>>
>>> パソコンからモータA,Bを動かすプログラムを送信し、NXT側でモータA,Bが動いたときに別のモータを動かす。
>>>
>>> のような動作をさせたいです。
>>> 可能でしょうか?
>>>
>>> お時間頂けたらご教授お願いします。
>>>
>>>
>>
>>
>> #!/usr/bin/env python
>> # -*- coding:shift_jis -*-
>> # -*- Python -*-
>>
>> import sys
>> import time
>> sys.path.append(".")
>>
>> # Import RTM module
>> import OpenRTM
>> import RTC
>>
>>
>> # import NXTBrick class
>> import NXTBrick
>>
>>
>> # This module's spesification
>> #
>> nxtrtc_spec = ["implementation_id", "NXTRTC",
>> "type_name", "NXTRTC",
>> "description", "NXT sample component",
>> "version", "0.1",
>> "vendor", "AIST",
>> "category", "example",
>> "activity_type", "DataFlowComponent",
>> "max_instance", "10",
>> "language", "Python",
>> "lang_type", "SCRIPT",
>> "conf.default.map", "A,B",
>> ""]
>>
>> #
>>
>> class NXTRTC(OpenRTM.DataFlowComponentBase):
>> def __init__(self, manager):
>> OpenRTM.DataFlowComponentBase.__init__(self, manager)
>>
>> # DataPorts initialization
>> #
>> self._d_vel = RTC.TimedFloatSeq(RTC.Time(0,0),[])
>> self._velIn = OpenRTM.InPort("vel", self._d_vel,
>> OpenRTM.RingBuffer(8))
>> self.registerInPort("vel",self._velIn)
>> self._d_pos = RTC.TimedFloatSeq(RTC.Time(0,0),[])
>> self._posOut = OpenRTM.OutPort("pos", self._d_pos,
>> OpenRTM.RingBuffer(8))
>> self.registerOutPort("pos",self._posOut)
>> self._d_sens = RTC.TimedFloatSeq(RTC.Time(0,0),[])
>> self._sensOut = OpenRTM.OutPort("sens", self._d_sens,
>> OpenRTM.RingBuffer(8))
>> self.registerOutPort("sens",self._sensOut)
>>
>> # initialize of configuration-data.
>> #
>> self._map = [['A', 'B']]
>> self._nxtbrick = None
>> self._mapping = {'A':0,'B':1,'C':2}
>>
>> def onInitialize(self):
>> # Bind variables and configuration variable
>> #
>> self.bindParameter("map", self._map, "A,B")
>>
>> # create NXTBrick object
>> try:
>> print "Connecting to NXT brick ...."
>> self._nxtbrick = NXTBrick.NXTBrick()
>> print "Connection established."
>> except:
>> print "NXTBrick connection failed."
>> return RTC.RTC_ERROR
>>
>> return RTC.RTC_OK
>>
>> def onFinalize(self):
>> self._nxtbrick.close()
>>
>> def onActivated(self, ec_id):
>> self._nxtbrick.setMotors([0,0,0])
>> # reset NXTBrick's position.
>> self._nxtbrick.resetPosition()
>> return RTC.RTC_OK
>>
>> def onDeactivated(self, ec_id):
>> self._nxtbrick.setMotors([0,0,0])
>> # reset NXTBrick's position.
>> self._nxtbrick.resetPosition()
>>
>> return RTC.RTC_OK
>>
>> def onExecute(self, ec_id):
>> # check new data.
>> if self._velIn.isNew():
>> # read velocity data from inport.
>> self._d_vel = self._velIn.read()
>> vel_ = [0,0,0]
>> #vel_[self._mapping[self._map[0][0]]] = self._d_vel.data[0]
>> #vel_[self._mapping[self._map[0][1]]] = self._d_vel.data[1]
>> vel_[0] = self._d_vel.data[0]
>> vel_[1] = self._d_vel.data[1]
>> vel_[2] = self._d_vel.data[1]
>> # set velocity
>> self._nxtbrick.setMotors(vel_)
>>
>> # get sensor data.
>> sensor_ = self._nxtbrick.getSensors()
>> if sensor_:
>> self._d_sens.data = sensor_
>> # write sensor data to outport.
>> self._sensOut.write()
>>
>> # get position data.
>> position_ = self._nxtbrick.getMotors()
>> if position_:
>> self._d_pos.data = \
>> [position_[self._mapping[self._map[0][0]]][9], \
>> position_[self._mapping[self._map[0][1]]][9]]
>> # write position data to outport.
>> self._posOut.write()
>>
>> return RTC.RTC_OK
>>
>>
>>
>> def MyModuleInit(manager):
>> profile = OpenRTM.Properties(defaults_str=nxtrtc_spec)
>> manager.registerFactory(profile,
>> NXTRTC,
>> OpenRTM.Delete)
>>
>> # Create a component
>> comp = manager.createComponent("NXTRTC")
>>
>>
>>
>> def main():
>> mgr = OpenRTM.Manager.init(len(sys.argv), sys.argv)
>> #mgr = OpenRTM.Manager.init(sys.argv)
>> mgr.setModuleInitProc(MyModuleInit)
>> mgr.activateManager()
>> mgr.runManager()
>>
>> if __name__ == "__main__":
>> main()
>>
>>
>>
>>
>
>
>
>
>

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2209
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク