2

4 つの車輪を持つデバイスの制御ノードを実装しています。これまでのところ、次のノードがあります。

TALKER:
--Publishes messages for movement of vehicle

LISTENER:
--Listens to messages for movement of vehicle and controls vehicle directly

これら 2 つの作品間の通信と私の唯一の問題は、車両の制御不能な動きを防ぐためにどちらかがシャットダウンした場合にどうするかということです。ros::isShuttingDown()LISTENER を呼び出して、いつ殺されようとしているのかを検出します。

ただし、TALKER がシャットダウンされた場合、LISTENER は TALKER から受信した最後のメッセージに従って車両を動かし続けます。最初はros::isShuttingDown()、最終的な「停止」メッセージを LISTENER に送信するために、TALKER でも使用しようとしましたが、ノードがシャットダウンすると、通信ができないようです。

したがって、ノード TALKER がまだ生きているかどうか (または新しいメッセージがまだ受信されているかどうか) を LISTENER 内でチェックする方法を探しています。

ノード(この場合はTALKER)がまだ生きているかどうかを確認する方法についてのアイデアはありますか?または、最後の ROS メッセージが受信されてからの経過時間を検出する簡単な方法はありますか?

4

2 に答える 2

2

ボンドパッケージを見てみましょう。私はそれがまさにあなたが必要とすることをすると信じています。

于 2013-09-25T22:51:59.803 に答える
1

"ros/network.h" をインクルードする別の興味深い組み込みの方法を見つけました:

// master.h:
....

/**
* \brief Retreives the currently-known list of nodes from the master
*/
ROSCPP_DECL bool getNodes(V_string& nodes);

....

ただし、別のcppファイル内から使用する方法がわかりませんでした...

于 2013-10-01T09:19:17.917 に答える