Ros

ROSコールバックとスピニング:ros :: spin()、ros :: spinOnceとros :: MultiThreadedSpinner、ros :: AsyncSpinner



Ros Callbacks Spinning



http://wiki.ros.org/roscpp/Overview/Callbacks%20and%20Spinning

1つのトピックのみをサブスクライブする一部の単純なノードでは、ros :: spin()を使用して受信ループに入ります。サブスクライブされたトピックが公開されるたびに、メッセージデータを受信して​​処理するためのコールバック関数を入力します。しかし、多くの場合、ノードはさまざまなソースからデータを受信して​​処理する必要があり、これらのデータの頻度も異なります。コールバック関数に時間をかけすぎると、他のコールバック関数がブロックされます。データの損失を引き起こします。この場合、データのスムーズなフローを確保するために、ノードに対して複数のスレッドを開く必要があります。

ros :: MultiThreadedSpinner

ros::MultiThreadedSpinner spinner(4) // Use 4 threads spinner.spin() // spin() will not return until the node has been shutdown

ros :: AsyncSpinner

AsyncSpinnerはMultiThreadedSpinnerよりも優れており、start()関数とstop()関数があり、破棄されると自動的に停止します。



ros::AsyncSpinner spinner(4) // Use 4 threads spinner.start() ros::waitForShutdown()

-------------------------------------------------- ------------------------ 2019年7月15日----------------------- -------------------------------------------------- --------
画像