-
Notifications
You must be signed in to change notification settings - Fork 52
自動生成されるServiceROSBridgeがシングルスレッド実行 #1127
Copy link
Copy link
Open
Description
rtmbuildで自動生成されるServiceROSBridgeはROSのserviceをシングルスレッドで処理するので、特定の条件を満たすまでsleepする系のサービスコールを呼んだときに、デッドロックに陥る場合がある、という問題があります。
例えば、AutoBalancerServiceROSBridgeに次のような順でサービスコールを送ると、AutoBalancerServiceROSBridgeがデッドロックに陥り、困りました。
$ rosservice call /AutoBalancerServiceROSBridge/goVelocity "vx: 0.0
vy: 0.0
vth: 0.0"
$ rosservice call /AutoBalancerServiceROSBridge/waitFootSteps "{}"
$ # 以降別ターミナルからAutoBalancerServiceROSBridge にサービスコールを送れなくなる. 別ターミナルから/AutoBalancerServiceROSBridge/goStopなどを呼んでも止まらない。AutoBalancer本体のRTCは、OpenRTMの仕様でサービスコールを別スレッドで処理するのでデッドロックになりません。
一つのROSのクライアントノードからサービスコールをしている場合には、問題が起こるような順番で呼ばなければいいのでこの問題は起こりにくいのですが、複数のROSのクライアントノードから非同期にサービスコールをしている場合に、頻発します。
ROSのserviceをマルチスレッドで処理できるようにしたいです。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels