我在 iRobot Create 上使用 Player(播放器/舞台)。从机器人获取里程数据的接口相当简单:调用 playerc_client_read,然后如果你正确订阅了 playerc_position2d 代理,你应该能够访问代理的成员 px、py、pa 以获取在 x 和 y 中行驶的距离(以米为单位);和旋转(以弧度为单位)。
我对在单线程应用程序中执行此操作没有任何问题——所有里程计数据都在我需要的地方。
但是,当我尝试将机器人控制器移动到它自己的线程(使用 pthreads)时,我遇到了一些问题。问题是似乎只有 px 被更新了。py 和 pa 始终保持为 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。
我在网上找不到其他东西,这是一个已知的错误吗?有没有其他人有这个问题?有人可以提供有关为什么会发生这种情况的见解吗?谢谢你。
全面披露:我是一名研究生,这是一个班级项目。