ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
伽利略系统Windows客户端实现原理
-
这篇文章详细介绍了客户端各部分实现原理。希望能方便大家更加了解客户端。
1. 通信部分
1.1 主机发现部分
如果小强和你的电脑在同一个局域网下。在点击客户端左上角连接按钮的时候客户端会自动连接至小强。这个过程即为主机自动发现过程。其实现原理如下。
首先小强上会开启一个udp广播服务端。向局域网发送广播数据。广播数据包含小强的主机信息,如ip,mac,端口,id。客户端会等待广播数据。当Windows客户端收到广播数据之后向小强上的udp服务器发送数据,表明自己的存在。之后小强程序会根据收到的相关信息和Windows客户端建立连接。在局域网内同时有多个小强主机和多个客户端的时候。按照之前说明,每个小强主机都会广播出自己相关信息。客户端会根据收到的udp广播信息维护一份当前局域网小强主机的列表。当客户端点击连接按钮后会弹出一个下拉菜单选择需要连接的小强主机。
2.1 客户端与主机通信
在发现过程完成之后,客户端和服务器都有了对方的信息。Windows客户端会建立一个udp服务器,然后小强通过udp连接把状态信息发送至Windows客户端。Windows客户端显示对应的状态。
2. 地图载入部分
2.1 地图文件载入
地图文件保存在小强
home
文件夹内的slamdb
和saved-slamdb
之中。其中slamdb中保存的为当前地图,saved-slamdb中保存的是已经保存的地图。当Windows客户端连接到小强之后会开始从小强下载地图。即把小强slamdb文件夹中的文件下载到Windows本地。下载过程是通过winscp实现的。
2.2 地图绘制
在地图相关文件下载完成之后,Windows客户端进行本地地图数据解析。获取到每个特征点的三维坐标和关键帧的三维坐标。然后再把三维坐标投影到二维平面上。通过相应的图形库画出来。最后的效果就是俯视的点云图像。
3. 控制部分
控制部分的通信协议即为伽利略导航系统通信协议
Windows客户端可以实时的获取到当前机器人的状态。客户端根据机器人的状态显示不同的信息。遥控功能,导航控制等各种功能可以通过向小强发送对应的udp数据开启。4. 经验总结
当前的客户端通信部分是通过udp协议自己实现的。但是个人感觉还是采用ROS的通用做法更好一些。因为各种功能包可以直接使用。比如自动发现部分就可以使用
zeroconf
包。避免重复造轮子。ROS本身的topic通信方式是有消息队列的,连接有一定的稳定保证规则,数据更加可靠。udp方式有时丢包会比较严重。现象就是网比较差的时候遥控会反应比较慢。相对的ROS的通信方式占的带宽会更多。对于客户端的状态显示问题这里需要注意。客户端本身一定是没有状态的,所有状态都是从机器人获取的。机器人就好像一个状态机,服务端可以发布指令控制其处于不同的状态。然后通过从机器人获取到的状态信息更新界面。否则如果机器人掉线,或者客户端重新启动,客户端的状态就和机器人无法对应上,客户端状态控制也很麻烦。