Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

servoのアラームでemergencysignalを出したい #490

Closed
YoheiKakiuchi opened this issue Feb 18, 2015 · 35 comments
Closed

servoのアラームでemergencysignalを出したい #490

YoheiKakiuchi opened this issue Feb 18, 2015 · 35 comments

Comments

@YoheiKakiuchi
Copy link
Contributor

サーボのアラームでemergency signalを出したいのですが、
iob.hのservoアラームのビット定義[1] は12bit分されていて、servo alarmのmaskとshift [2] からは
16bitがmaskされており、ほかのshiftからも16bit 使えるように見えます。

この未定義の4bitのうち1ビットを SS_EMERGENCYとさせていただき、
RobotHardwareの checkemergency [3] か servo alarmをセット[4]しているところで
このビットが立っていたら、emergency signalを出すというようにしたいと考えております。

まずは、iob.hのアラームビット定義を追加して良いかと 、
そのアラームによってemergency signalを送るようにする変更について意見をお願いします。

[1] iob.hのservoアラームのビット定義(12bit)
https://github.com/fkanehiro/hrpsys-base/blob/master/lib/io/iob.h#L33-L46

[2] servo alarmのmaskとshift
https://github.com/fkanehiro/hrpsys-base/blob/master/idl/RobotHardwareService.idl#L9-L18

[3] checkemergency
https://github.com/fkanehiro/hrpsys-base/blob/master/rtc/RobotHardware/RobotHardware.cpp#L220

[4] servo alarmのセット
https://github.com/fkanehiro/hrpsys-base/blob/master/rtc/RobotHardware/RobotHardware.cpp#L289

@YoheiKakiuchi
Copy link
Contributor Author

この件に関連しまして、DataLoggerの以下の部分のコードはどのような動作をするように意図されているのでしょうか?
https://github.com/fkanehiro/hrpsys-base/blob/master/rtc/DataLogger/DataLogger.cpp#L243

ec_id == 0 のときは、emergency_signalを読んで、それ以外のときはログをとるようになっている
ように読めます。
しかし、手元のテストでは ec_id == 0 にならないためemergency_signalを出してもログが記録されないようです。
使い方が間違っているのでしょうか?

@fkanehiro
Copy link
Owner

通常DataLoggerは他のRTCと直列実行して、他のRTCのECで駆動されていると思います。
他のRTCのECで駆動される場合はec_idは1000とかになりますね。
で、DataLoggerをDataLogger自身のECでも走らせる(ec_id=0)と非常信号を受け取ってログを保存するようになります。
DataLoggerをDataLogger自身のECで走らせるには、
log.start(log.owned_ecs[0])
とかします。

@k-okada
Copy link
Contributor

k-okada commented Mar 9, 2015

DataLoggerをDataLogger自身のECで走らせる/走らせない,の違いは
どのようなときにつかい分けたらいいんでしょうか?

◉ Kei Okada

2015-03-10 7:36 GMT+09:00 Fumio KANEHIRO [email protected]:

通常DataLoggerは他のRTCと直列実行して、他のRTCのECで駆動されていると思います。
他のRTCのECで駆動される場合はec_idは1000とかになりますね。
で、DataLoggerをDataLogger自身のECでも走らせる(ec_id=0)と非常信号を受け取ってログを保存するようになります。
DataLoggerをDataLogger自身のECで走らせるには、
log.start(log.owned_ecs[0])
とかします。


Reply to this email directly or view it on GitHub
#490 (comment)
.

@fkanehiro
Copy link
Owner

非常信号で自動的にログを取りたければ走らせる、別に取らなくてよければ走らせない、でしょうか。

2015年3月9日 18:47 Kei Okada [email protected]:

DataLoggerをDataLogger自身のECで走らせる/走らせない,の違いは
どのようなときにつかい分けたらいいんでしょうか?

◉ Kei Okada

2015-03-10 7:36 GMT+09:00 Fumio KANEHIRO [email protected]:

通常DataLoggerは他のRTCと直列実行して、他のRTCのECで駆動されていると思います。
他のRTCのECで駆動される場合はec_idは1000とかになりますね。
で、DataLoggerをDataLogger自身のECでも走らせる(ec_id=0)と非常信号を受け取ってログを保存するようになります。
DataLoggerをDataLogger自身のECで走らせるには、
log.start(log.owned_ecs[0])
とかします。


Reply to this email directly or view it on GitHub
<
https://github.com/fkanehiro/hrpsys-base/issues/490#issuecomment-77959372>

.


Reply to this email directly or view it on GitHub
#490 (comment)
.

@YoheiKakiuchi
Copy link
Contributor Author

ありがとうございます。
以下で、emergency signalからログが保存できるように出来ました。
#510

@k-okada
Copy link
Contributor

k-okada commented Mar 13, 2015

非常信号で自動的にログを取りたければ走らせる、別に取らなくてよければ走らせない、でしょうか。

だとすると,常に別ECで走らせておけばいい気がしますが,それだとやはり取りこぼしがあったりする,とかあるんでしょうか?

◉ Kei Okada

On Wed, Mar 11, 2015 at 4:30 PM, Yohei Kakiuchi [email protected]
wrote:

ありがとうございます。
以下で、emergency signalからログが保存できるように出来ました。
#510 #510


Reply to this email directly or view it on GitHub
#490 (comment)
.

@fkanehiro
Copy link
Owner

?別ECというのはどれのことだろう?

@k-okada
Copy link
Contributor

k-okada commented Mar 14, 2015

すいません.別ECというのは

、DataLoggerをDataLogger自身のECでも走らせる(ec_id=0)と非常信号を受け取ってログを保存するようになります。
のことです

◉ Kei Okada

On Sat, Mar 14, 2015 at 4:02 PM, Fumio KANEHIRO [email protected]
wrote:

?別ECというのはどれのことだろう?


Reply to this email directly or view it on GitHub
#490 (comment)
.

@fkanehiro
Copy link
Owner

常に走らせておいて問題ないと思いますよ。

@k-okada
Copy link
Contributor

k-okada commented Mar 31, 2015

#510 でクローズでしょうか?

@k-okada
Copy link
Contributor

k-okada commented Apr 5, 2015

すいません.これ,テストに通っていないは,純粋にこのPRを入れるとプログラムが動かないのですが,具体的にはself.log.start(self.log.owned_ecs[0])から帰ってきません.

1)上のコメントでは,

DataLoggerをDataLogger自身のECで走らせるには、
log.start(log.owned_ecs[0])

と書いてありますが,PR(https://github.com/fkanehiro/hrpsys-base/pull/510/files)では,

+        self.log.owned_ecs[0].start()
+        self.log.start(self.log.owned_ecs[0])

どちらがただしいでしょうか?僕の環境だと,
self.log.owned_ecs[0].start() だとRTCがactiveにならず,self.log.start(self.log.owned_ecs[0])から帰ってこないです.これをする場所はserializeする前とか,後とか条件はあるでしょうか?一応,いろいろ場所を変えてみましたが,効果なさそうです.

  1. DataLoggerをDataLogger自信のECで走らせる場合には,

    のr.start() は止めるべきでしょうか?

@k-okada
Copy link
Contributor

k-okada commented Apr 5, 2015

あと,

rtm.serializeComponents(rtcList)

        rtm.serializeComponents(rtcList)

のrtcListにself.logは入っていていいのでしょうか?

@fkanehiro
Copy link
Owner

おっとすいません。
PRの方が正しくて、

   self.log.owned_ecs[0].start()
   self.log.start(self.log.owned_ecs[0])

をself.logをserializeComponent()した後で、両方やるのが正しいと思います。
前者はEC自体をstartするもので、後者は指定したECでRTCを駆動すること指示するもので意味合いが
違います。
通常ECは作られた時に勝手にスタートするのですが、serializeComponent()が呼ばれた時にRTCを
駆動しているEC(通常はRTCとセットで作られたowned_ecs[0])は止めてしまうので、再スタートする
必要があり、1行目が必要となります。

rtc.ec.stop()

ログを取りながら、エマー信号でログを自動的に保存するには、ロガーをserializeComponent()して
別のRTCのECで駆動しておきながら、ロガー自身のECでエマー信号を監視する、ということになります。

@k-okada
Copy link
Contributor

k-okada commented Apr 5, 2015

うーん.だとすると,2行目から帰ってこないんですが,,,なにかちがうんですかねぇ.

◉ Kei Okada

2015-04-05 22:09 GMT+09:00 Fumio KANEHIRO [email protected]:

おっとすいません。
PRの方が正しくて、

self.log.owned_ecs[0].start()
self.log.start(self.log.owned_ecs[0])

をself.logをserializeComponent()した後で、両方やるのが正しいと思います。
前者はEC自体をstartするもので、後者は指定したECでRTCを駆動すること指示するもので意味合いが
違います。
通常ECは作られた時に勝手にスタートするのですが、serializeComponent()が呼ばれた時にRTCを
駆動しているEC(通常はRTCとセットで作られたowned_ecs[0])は止めてしまうので、再スタートする
必要があり、1行目が必要となります。

rtc.ec.stop()

ログを取りながら、エマー信号でログを自動的に保存するには、ロガーをserializeComponent()して
別のRTCのECで駆動しておきながら、ロガー自身のECでエマー信号を監視する、ということになります。


Reply to this email directly or view it on GitHub
#490 (comment)
.

@k-okada
Copy link
Contributor

k-okada commented Apr 5, 2015

https://github.com/fkanehiro/hrpsys-base/blob/master/python/rtm.py#L107
で,

    def start(self, ec=None):
        if ec == None:
            ec = self.ec
        if ec != None:
            ec.activate_component(self.ref)
            while self.isInactive(ec):
                time.sleep(0.01)

となっていますが,self.isInactivate(self.ec)とするとかありますか?

@fkanehiro
Copy link
Owner

serializeした後は、DataLoggerのself.ecは他のRTCのecになっているはずで、ここはこのままで
いいはずです。

以下のようなスクリプトで試す限りは返ってこなくなる、ということはなさそうです。

import rtm

rtm.nsport = 2809
rtm.initCORBA()

ms = rtm.findRTCmanager()
print "ms=",ms

ms.load("NullComponent")
np = ms.create("NullComponent")
print "np=",np

ms.load("DataLogger")
dl = ms.create("DataLogger")
print "dl=",dl

rtm.serializeComponents([np, dl])

np.start()
dl.start()
print "here"

dl.owned_ecs[0].start()
dl.start(dl.owned_ecs[0])

@k-okada
Copy link
Contributor

k-okada commented Apr 5, 2015

うーん.こちらの環境だと,今度はこのプログラムだと,np.start()が帰ってこないです.

$ ./hoge.py 
<module 'rtm' from '/home/k-okada/catkin_ws/ws_rtmros/devel/lib/python2.7/dist-packages/hrpsys/rtm.py'>
configuration ORB with  kokada-t440s : 2809
ms= <rtm.RTCmanager instance at 0x7f2a8e91fa28>
np= <rtm.RTcomponent instance at 0x7f2a8e91fcf8>
dl= <rtm.RTcomponent instance at 0x7f2a8e91ffc8>
start
<rtm.RTcomponent instance at 0x7f2a8e91fcf8>
[<OpenRTM._objref_ExtTrigExecutionContextService instance at 0x7f2a8e91fd40>]

実行したプログラムは以下

print "start"
print np
print np.owned_ecs
np.start()
print "np"

ちなみに,VERBOSEにしてとったログを
https://gist.githubusercontent.com/k-okada/32ef62ec2fc516ca311d/raw/rtc5265.log
に起きました

@k-okada
Copy link
Contributor

k-okada commented Apr 5, 2015

ORBgiopMaxMsgSize=2147483648 LANG=C ROS_HOME=/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot /home/k-okada/catkin_ws/ws_rtmros/devel/lib/hrpsys/hrpsys-simulator /home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.xml -o manager.is_master:YES -o naming.formats:%n.rtc -o exec_cxt.periodic.rate:1000000 -o manager.shutdown_onrtcs:NO -o manager.modules.load_path:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/lib -o manager.modules.preload:HGcontroller.so -o manager.components.precreate:HGcontroller -o exec_cxt.periodic.type:SynchExtTriggerEC -f /home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.RobotHardware.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.RobotHardware.500conf -o example.SequencePlayer.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.ForwardKinematics.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.ImpedanceController.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.AutoBalancer.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.StateHolder.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.TorqueFilter.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.TorqueController.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.ThermoEstimator.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.ThermoLimiter.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.VirtualForceSensor.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.AbsoluteForceSensor.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.RemoveForceSensorLinkOffset.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.KalmanFilter.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.Stabilizer.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.CollisionDetector.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.SoftErrorLimiter.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.HGcontroller.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o corba.nameservers:localhost:2809 -endless -realtime

を立ち上げています

@fkanehiro
Copy link
Owner

NullComponent0のECのタイプがSyncExtTriggerになっているけれども、トリガが
送られているだろうか?

2015-04-05 23:12 GMT+09:00 Kei Okada [email protected]:

ORBgiopMaxMsgSize=2147483648 LANG=C ROS_HOME=/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot /home/k-okada/catkin_ws/ws_rtmros/devel/lib/hrpsys/hrpsys-simulator /home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.xml -o manager.is_master:YES -o naming.formats:%n.rtc -o exec_cxt.periodic.rate:1000000 -o manager.shutdown_onrtcs:NO -o manager.modules.load_path:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/lib -o manager.modules.preload:HGcontroller.so -o manager.components.precreate:HGcontroller -o exec_cxt.periodic.type:SynchExtTriggerEC -f /home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.RobotHardware.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.RobotHardware.500conf -o example.SequencePlayer.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.ForwardKinematics.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.ImpedanceController.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.AutoBalancer.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.StateHolder.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.TorqueFilter.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.TorqueController.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.ThermoEstimator.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.ThermoLimiter.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.VirtualForceSensor.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.AbsoluteForceSensor.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.RemoveForceSensorLinkOffset.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.KalmanFilter.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.Stabilizer.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.CollisionDetector.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.SoftErrorLimiter.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o example.HGcontroller.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.500.conf -o corba.nameservers:localhost:2809 -endless -realtime

を立ち上げています


Reply to this email directly or view it on GitHub
#490 (comment)
.

@k-okada
Copy link
Contributor

k-okada commented Apr 5, 2015

トリガはどうやって送るのでしょうか?

@k-okada
Copy link
Contributor

k-okada commented Apr 5, 2015

rtcdの時は -o exec_cxt.periodic.rate:1000000 -o exec_cxt.periodic.type:SynchExtTriggerECで,
hrpsys-simulatorのときは,-o exec_cxt.periodic.rate:500 -o exec_cxt.periodic.type:PeriodicExecutionContex とかでしょうか?

@k-okada
Copy link
Contributor

k-okada commented Apr 5, 2015

ちがいますね.https://code.google.com/p/hrpsys-base/issues/detail?id=14
rtcdのときはhrpExecutionContext でした.シミュレーションでこの機能をつかいたかったら,
log.confみたいなところで,ECのタイプをきめなければいけないのでしょうか.
一回createCompしたらECのタイプは変更できないのでしょうか.
とりあえず,

        if self.log and not isinstance(self.log.owned_ecs[0], OpenRTM._objref_ExtTrigExecutionContextService):
            self.log.owned_ecs[0].start()
            self.log.start(self.log.owned_ecs[0])

としました.

ところで,この場所はいまsetupLoggerの最後ですが,ここでいいでしょうか(あるいはここでないといけないでしょうか)activateCompsの最後でもいいかなとも思ったんですが.

@k-okada k-okada mentioned this issue Apr 5, 2015
@fkanehiro
Copy link
Owner

その変更だとシミュレーション時はエマーでログを保存する、ということはできませんがそれでいいでしょうか。

場所についてはロガーのセットアップとも言えるし、コンポーネントをアクティベートしてるとも言えるし、ほぼ同じ場所で呼んでるので、まぁお好みで。serializeComponents()の後であればよいです。

hrpExecutionContextとかSyncExtTriggerとかは実時間スレッドを模擬するためのもので、システムの中で使う数は(こちらでは)限られているので、こちらではrtc.confでこれらの実行コンテキストを指定することはせずに、serializeComponentsの引数のコンポーネントリストの最初のコンポーネントに対応するxxx.confでこれらの実行コンテキストを指定するようにしています。どこにも紐付けられてない実行コンテキストを作ったり、コンポーネントに紐付けられている実行コンテキストを作りなおしたりする手段がないようなので。

@k-okada
Copy link
Contributor

k-okada commented Apr 6, 2015

相変わらずわかっていなくてもうしわけないですが,いまみてみると,SampleRobot.RobotHardware.confは(serializecomponentnの最初のRTCはRobotHardware)

exec_cxt.periodic.type: hrpExecutionContext
exec_cxt.periodic.rate: 500

になっていて,実行時の-o exec_cxt.periodic.rate:1000000 -o exec_cxt.periodic.type:SynchExtTriggerEC
を抜いたらうまく動いていました.これでいいのでしょうか?SampleRobot.RobotHardware.conf
にSynchExtTriggerEC とかかなくていいでしょうか?

また,SampleRobot.RobotHardware.confに何も書かず,-o exec_cxt.periodic.rate:1000000 -o exec_cxt.periodic.type:SynchExtTriggerEC
を抜いても動いているようですが,なにか不都合が有りますでしょうか.

◉ Kei Okada

2015-04-06 8:09 GMT+09:00 Fumio KANEHIRO [email protected]:

その変更だとシミュレーション時はエマーでログを保存する、ということはできませんがそれでいいでしょうか。

場所についてはロガーのセットアップとも言えるし、コンポーネントをアクティベートしてるとも言えるし、ほぼ同じ場所で呼んでるので、まぁお好みで。serializeComponents()の後であればよいです。

hrpExecutionContextとかSyncExtTriggerとかは実時間スレッドを模擬するためのもので、システムの中で使う数は(こちらでは)限られているので、こちらではrtc.confでこれらの実行コンテキストを指定することはせずに、serializeComponentsの引数のコンポーネントリストの最初のコンポーネントに対応するxxx.confでこれらの実行コンテキストを指定するようにしています。どこにも紐付けられてない実行コンテキストを作ったり、コンポーネントに紐付けられている実行コンテキストを作りなおしたりする手段がないようなので。


Reply to this email directly or view it on GitHub
#490 (comment)
.

@k-okada
Copy link
Contributor

k-okada commented Apr 6, 2015

あと,どのケースでも owned_ecsは
[<OpenRTM._objref_ExtTrigExecutionContextService instance at 0x7f72f0c46c68>]
なのですが,これがどこからトリガがやってくるようになっているかはわかるものなのでしょうか?
つまり,運良く誰かがトリガをかけてくれそうなら自身のECで起動し,そうでなければ,serializeのECでよい,
みたいにできるでしょうか.

◉ Kei Okada

2015-04-06 11:38 GMT+09:00 Kei Okada [email protected]:

相変わらずわかっていなくてもうしわけないですが,いまみてみると,SampleRobot.RobotHardware.confは(serializecomponentnの最初のRTCはRobotHardware)

exec_cxt.periodic.type: hrpExecutionContext
exec_cxt.periodic.rate: 500

になっていて,実行時の-o exec_cxt.periodic.rate:1000000 -o exec_cxt.periodic.type:SynchExtTriggerEC
を抜いたらうまく動いていました.これでいいのでしょうか?SampleRobot.RobotHardware.conf
にSynchExtTriggerEC とかかなくていいでしょうか?

また,SampleRobot.RobotHardware.confに何も書かず,-o exec_cxt.periodic.rate:1000000 -o exec_cxt.periodic.type:SynchExtTriggerEC
を抜いても動いているようですが,なにか不都合が有りますでしょうか.

◉ Kei Okada

2015-04-06 8:09 GMT+09:00 Fumio KANEHIRO [email protected]:

その変更だとシミュレーション時はエマーでログを保存する、ということはできませんがそれでいいでしょうか。

場所についてはロガーのセットアップとも言えるし、コンポーネントをアクティベートしてるとも言えるし、ほぼ同じ場所で呼んでるので、まぁお好みで。serializeComponents()の後であればよいです。

hrpExecutionContextとかSyncExtTriggerとかは実時間スレッドを模擬するためのもので、システムの中で使う数は(こちらでは)限られているので、こちらではrtc.confでこれらの実行コンテキストを指定することはせずに、serializeComponentsの引数のコンポーネントリストの最初のコンポーネントに対応するxxx.confでこれらの実行コンテキストを指定するようにしています。どこにも紐付けられてない実行コンテキストを作ったり、コンポーネントに紐付けられている実行コンテキストを作りなおしたりする手段がないようなので。


Reply to this email directly or view it on GitHub
#490 (comment)
.

@fkanehiro
Copy link
Owner

う〜む、いまいちどういう使い方をしようとしているのかがわからないのですが、
RobotHardwareがある、ということは実機モードなのかな?
実機モードであれば、
-o exec_cxt.periodic.rate:1000000 -o exec_cxt.periodic.type: SynchExtTriggerEC
をrtcdに渡す必要はないと思います。

実行コンテキストのタイプを指定しないとデフォルトの実行コンテキストで作られるわけですが、
これは非実時間スレッドによる周期実行をするものなので、それでよければよい、実時間でないと
だめであればダメということかと思います。

2015年4月6日 11:38 Kei Okada [email protected]:

相変わらずわかっていなくてもうしわけないですが,いまみてみると,SampleRobot.RobotHardware.confは(serializecomponentnの最初のRTCはRobotHardware)

exec_cxt.periodic.type: hrpExecutionContext
exec_cxt.periodic.rate: 500

になっていて,実行時の-o exec_cxt.periodic.rate:1000000 -o exec_cxt.periodic.type:SynchExtTriggerEC
を抜いたらうまく動いていました.これでいいのでしょうか?SampleRobot.RobotHardware.conf
にSynchExtTriggerEC とかかなくていいでしょうか?

また,SampleRobot.RobotHardware.confに何も書かず,-o exec_cxt.periodic.rate:1000000 -o exec_cxt.periodic.type:SynchExtTriggerEC
を抜いても動いているようですが,なにか不都合が有りますでしょうか.

◉ Kei Okada

2015-04-06 8:09 GMT+09:00 Fumio KANEHIRO [email protected]:

その変更だとシミュレーション時はエマーでログを保存する、ということはできませんがそれでいいでしょうか。

場所についてはロガーのセットアップとも言えるし、コンポーネントをアクティベートしてるとも言えるし、ほぼ同じ場所で呼んでるので、まぁお好みで。serializeComponents()の後であればよいです。

hrpExecutionContextとかSyncExtTriggerとかは実時間スレッドを模擬するためのもので、システムの中で使う数は(こちらでは)限られているので、こちらではrtc.confでこれらの実行コンテキストを指定することはせずに、serializeComponentsの引数のコンポーネントリストの最初のコンポーネントに対応するxxx.confでこれらの実行コンテキストを指定するようにしています。どこにも紐付けられてない実行コンテキストを作ったり、コンポーネントに紐付けられている実行コンテキストを作りなおしたりする手段がないようなので。


Reply to this email directly or view it on GitHub
<
https://github.com/fkanehiro/hrpsys-base/issues/490#issuecomment-89868332>

.


Reply to this email directly or view it on GitHub
#490 (comment)
.

@fkanehiro
Copy link
Owner

どの実行コンテキストもExtTrigExecutionContextServiceを継承しているようなので見分けつかないですね。

2015年4月6日 11:40 Kei Okada [email protected]:

あと,どのケースでも owned_ecsは
[<OpenRTM._objref_ExtTrigExecutionContextService instance at 0x7f72f0c46c68>]
なのですが,これがどこからトリガがやってくるようになっているかはわかるものなのでしょうか?
つまり,運良く誰かがトリガをかけてくれそうなら自身のECで起動し,そうでなければ,serializeのECでよい,
みたいにできるでしょうか.

◉ Kei Okada

2015-04-06 11:38 GMT+09:00 Kei Okada [email protected]:

相変わらずわかっていなくてもうしわけないですが,いまみてみると,SampleRobot.RobotHardware.confは(serializecomponentnの最初のRTCはRobotHardware)

exec_cxt.periodic.type: hrpExecutionContext
exec_cxt.periodic.rate: 500

になっていて,実行時の-o exec_cxt.periodic.rate:1000000 -o exec_cxt.periodic.type:SynchExtTriggerEC
を抜いたらうまく動いていました.これでいいのでしょうか?SampleRobot.RobotHardware.conf
にSynchExtTriggerEC とかかなくていいでしょうか?

また,SampleRobot.RobotHardware.confに何も書かず,-o exec_cxt.periodic.rate:1000000 -o exec_cxt.periodic.type:SynchExtTriggerEC
を抜いても動いているようですが,なにか不都合が有りますでしょうか.

◉ Kei Okada

2015-04-06 8:09 GMT+09:00 Fumio KANEHIRO [email protected]:

その変更だとシミュレーション時はエマーでログを保存する、ということはできませんがそれでいいでしょうか。

場所についてはロガーのセットアップとも言えるし、コンポーネントをアクティベートしてるとも言えるし、ほぼ同じ場所で呼んでるので、まぁお好みで。serializeComponents()の後であればよいです。

hrpExecutionContextとかSyncExtTriggerとかは実時間スレッドを模擬するためのもので、システムの中で使う数は(こちらでは)限られているので、こちらではrtc.confでこれらの実行コンテキストを指定することはせずに、serializeComponentsの引数のコンポーネントリストの最初のコンポーネントに対応するxxx.confでこれらの実行コンテキストを指定するようにしています。どこにも紐付けられてない実行コンテキストを作ったり、コンポーネントに紐付けられている実行コンテキストを作りなおしたりする手段がないようなので。


Reply to this email directly or view it on GitHub
<
https://github.com/fkanehiro/hrpsys-base/issues/490#issuecomment-89868332>

.


Reply to this email directly or view it on GitHub
#490 (comment)
.

@k-okada
Copy link
Contributor

k-okada commented Apr 6, 2015

すいません.実行は
#490 (comment)
でやっています.hrpsys_simulatorをつかっていて,RobotHardwareはなくて,SampleRobot(Robot)0.rtcができています.なので,ここで,

-o example.RobotHardware.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.RobotHardware.500conf 

としてあるのは何も効果がなく,
-o example.SampleRoobt\(Robot\).config_file とかしないとダメなんでしょうかね.
いずれにせよ,シミュレーションのときは,デフォルトでよいのでしょうか?
そもそも,SynchExtTriggerEC をつかわなくてよかった,ということでしょうか.

@fkanehiro
Copy link
Owner

シミュレーション時にSyncExtTriggerECが必要かどうかは、シミュレーション世界の時刻に同期した処理(実世界でいうところのリアルタイム処理)が必要か否か次第ですが、普通は少なくとも関節の制御には必要かと思います。

で、SyncExtTriggerECの使用をrtcdの引数またはrtc.confで指定するか、特定のコンポーネントのconfファイルで指定するかは動かすECの内SyncExtTriggerが多いか通常のPeriodicが多いか次第でしょうか。
動かすECが10個あって1個だけSyncExtTriggerにするのなら、rtcdの引数でECのタイプを指定することはせず、そのECが所属するRTCのconfファイルでSyncExtTriggerの使用を指定すればいいですし、逆のケースであれば、rtcdの引数でデフォルトのECのタイプとしてSyncExtTriggerを指定しておき、通常のPeriodicを使いたいRTCのconfファイルでそのデフォルト設定をオーバライドすればよいかと。

今回のケースですとおそらく、リアルタイム(SyncExtTrigger)で動くEC(SampleRobotが持っているもの)と非リアルタイムで動くEC(DataLoggerが持っているもの)が1個づつぐらいしかないと思うのでどちらでもよくて、これまでrtcdの引数でSyncExtTriggerを指定していたのであれば、それは変えずにDataLogger.confを作ってPeriodicの使用を指定してはどうでしょうか。

2015年4月6日 12:08 Kei Okada [email protected]:

すいません.実行は
#490 (comment)
#490 (comment)

でやっています.hrpsys_simulatorをつかっていて,RobotHardwareはなくて,SampleRobot(Robot)0.rtcができています.なので,ここで,

-o example.RobotHardware.config_file:/home/k-okada/catkin_ws/ws_rtmros/devel/share/hrpsys/samples/SampleRobot/SampleRobot.RobotHardware.500conf

としてあるのは何も効果がなく,
-o example.SampleRoobt(Robot).config_file とかしないとダメなんでしょうかね.
いずれにせよ,シミュレーションのときは,デフォルトでよいのでしょうか?
そもそも,SynchExtTriggerEC をつかわなくてよかった,ということでしょうか.


Reply to this email directly or view it on GitHub
#490 (comment)
.

@k-okada
Copy link
Contributor

k-okada commented Apr 6, 2015

ありがとうございます.
結局ですが
https://github.com/fkanehiro/hrpsys-base/pull/544/files
みたいにして,log_use_own_ecというメンバ変数をいれてシミュレーションで
emregencyの時にログが欲しい人は,これをtrueにしてもらうというふうにしようかと
思っていますがどうでしょうか?
samperobotのサンプルはlog用のconfを作るようにしましたが,はやりそうしていない
応用プログラムはありそうなので,デフォルトはこれまでと同じにしておいたほうが
いいかともいました.(何も言わず帰ってこない,というのは結構気が付かないので)
よろしくお願いいたします.

@fkanehiro
Copy link
Owner

ログ自体は他人のecを使って取るので、変数名はちょっと変えた方がいいかもしれませんが、まぁ
よろしいのではないでしょうか。

start()等、いくつか無限に返ってこなくなる可能性のある関数がありますが、これは凶悪なので
タイムアウトするようにする、とかしたほうが良さそうですね。

2015年4月6日 16:55 Kei Okada [email protected]:

ありがとうございます.
結局ですが
https://github.com/fkanehiro/hrpsys-base/pull/544/files
みたいにして,log_use_own_ecというメンバ変数をいれてシミュレーションで
emregencyの時にログが欲しい人は,これをtrueにしてもらうというふうにしようかと
思っていますがどうでしょうか?
samperobotのサンプルはlog用のconfを作るようにしましたが,はやりそうしていない
応用プログラムはありそうなので,デフォルトはこれまでと同じにしておいたほうが
いいかともいました.(何も言わず帰ってこない,というのは結構気が付かないので)
よろしくお願いいたします.


Reply to this email directly or view it on GitHub
#490 (comment)
.

@k-okada
Copy link
Contributor

k-okada commented Apr 6, 2015

なるほど.log_use_non_serialize_ec ? log_use_owned_ec ?とかでしょうか.

@fkanehiro
Copy link
Owner

ネーミングセンスが無いんで、お任せします:-)

2015-04-06 17:09 GMT+09:00 Kei Okada [email protected]:

なるほど.log_use_non_serialize_ec ? log_use_owned_ec ?とかでしょうか.


Reply to this email directly or view it on GitHub
#490 (comment)
.

@k-okada
Copy link
Contributor

k-okada commented Apr 7, 2015

ありがとうございます.ようやくクローズできます.

@YoheiKakiuchi
Copy link
Contributor Author

すいません。テスト環境で動いていないことが分かっていませんでした。
それで、実際にやりたかったのは以下のPRのhardwareのサーボアラームでログをとることになります。
#556

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants