2017-01-12 7 views
2

나는 각 콜백 함수 후에 특정 계산을 수행해야하는 ROS 프로그램을 작성 중이다. 내 콜백 함수는 기본적으로 주제를 구독하고 특정 계산을 수행하는 데 사용되는 변수의 값을 설정합니다. 구독하고자하는 주제에는 30Hz의 주파수가 있습니다. 그래서, 30 Hz의 속도로 실행되는 내 프로그램에서 while 루프가 있습니다. 루프는 다음 코드와 다소 비슷하다ros :: spinOnce()가 특정 콜백 수를 콜백 대기열에서 호출하도록하는 방법이 있습니까?

while (ros::ok()) 
{ 
    ros::spinOnce(); //this should set a certain variable "a" 
    perform_computation(); //this performs computation on the variable "a" 
    looprate.sleep(); //this runs at 30 Hz 
} 

답변

2

ROS : spinOnce은() : ROS와 유사한 스핀()하지만 차단하지 않는 차이가있다. ros :: spinOnce()를 호출 할 때마다 개의 메시지가 마지막 호출 이후에 처리됩니다. 즉, 각 메시지에 대한 모든 가입자 콜백 함수가 호출됩니다. 콜백 함수를 제어하려는 경우 콜백 함수에서받은 메시지를 버퍼링하고 원하는 속도와 방식으로 버퍼링 된 메시지를 처리합니다. 이것은 콜백이 긴 계산을 수행하는 경우 정보를 처리해야하는 방법이기도합니다. 콜백 함수는 매우 빨라야합니다.