Я использую Player (Player/Stage) в iRobot Create. Интерфейс для получения данных одометрия у робота довольно прост: вызовите playerc_client_read, а затем, если вы правильно подписали прокси-сервер playerc_position2d, вы должны иметь доступ к членам прокси-сервера px, py, pa для расстояния, пройденного по x и y (в метрах); и вращение (в радианах).Игрок неправильно получает данные одометрия для создания в многопоточном приложении
У меня нет проблем с выполнением этого в однопоточном приложении - все данные одометрия находятся там, где мне это нужно.
Однако, когда я пытаюсь переместить контроллер робота в свой поток (с помощью pthreads), я сталкиваюсь с некоторыми проблемами. Проблема в том, что обновляется только px. ру и ра всегда остаются 0.
Вот суть робота резьбы
//declare everything (including the playerc_client_t* object and playerc_position2d_t* object)
//connect to server (in pull mode or push mode, it doesn't seem to matter)
//subscribe to position2d proxy
while(!should_quit) {
playerc_client_read(client)
double xPosition = position2d->px;
double yPosition = position2d->py;
double radians = position2d->pa;
//do some stuff
sleep(10 milliseconds)
}
cleanup and unsubscribe
и достаточно точно, только xPosition когда-либо установить в то время как yPosition и радиан остаются 0 независимо от того, как движется робот.
Я ничего не нашел в Интернете, это известная ошибка? У кого-нибудь еще была эта проблема? Может ли кто-нибудь объяснить, почему это может произойти? Спасибо.
Полное раскрытие информации: Я аспирант, и это для проекта класса.