思考问题:机器人运动控制如何与图形界面交互?
不得不说,先锋机器人的软件做的真不怎么样。图形界面交互用户体验很差。
现在我遇到一个很现实的问题:SLAM需要采集激光数据和机器人的位姿,同时我还要再这个界面中控制机器人的运动。这个想来真是一个复杂的问题。
测试使用ArRobot分别直接在MFC的WinApp和Dialog中进行初始化,执行runSync则报错,不执行则连接直接退出。ArRobot内置了线程,不知到是不是导致了失败。
然后测试服务和客户端模式,socket编程,用了自带的serverDemo,但是客户端请求的命令去确无法执行。自带的客户端demo也是内置了线程和键盘处理,没有成功。
不过我坚信这个问题肯定是可以解决的,因为MobileEye里面就实现了。
通过与利曼售后工程师的沟通,目前初步实现了通过图形界面进行先锋机器人的运动控制。 现在采用的是C/S模式,socket编程。当然主要还是使用的SDK里面的函数实现的。
主要的技巧是多开了一个线程。
通过UI界面开一个线程pThread,在该线程中初始化客户端对象(客户端内置了线程Thread3,执行runSync方法会开启新的线程)。
将UI的键盘消息通过flag在pThread中进行分发,让Thread3中对应执行相应的回调函数。此时不在Thread3中执行键盘检测函数,因为已经在UI线程中侦测了。
问题算是有了解决方案,思考如果直接应用程序连接机器人呢,这种技巧是不是也可以用呢?
kbhit函数:检查当前是否有键盘输入。
激光数据接收肯定要占用一个线程。
通过界面控制机器人在主线程或者再开一个线程。