主控和语音控制模块之间预计使用websocket进行通信,其中主控作为服务端,所以需要在语音控制模块部分编写一个websocket客户端与主控进行连接,记录一下探索过程。
rosbridge
最初的探索焦点集中于ros系统上,目标是寻找合适的ros功能包能够直接与websocket相连接,参考此教程发现rosbridge功能包是一个专门为ros与web交互所创建的功能包。不过在探索中发现,rosbridge提供的功能只有websocket服务端,不能直接写客户端,和我们的需求有所不同。不过也还是有使用的价值,所以也在此记录一下,方便日后查阅。
python编写客户端
后来寻找编写客户端的方法,此工程和我们的需求很像。不过,考虑到我们要传输的数据并不复杂而且交互性不强,所以我没有采用使用C++编写客户端的方法,而是采用了使用python编写websocket-client的方法。
- 安装websocket-client模块
首先给python环境安装websocket-client模块。
pip install websocket-client
- 简易python websocket client
- 编写自己的websocket client
考虑到树莓派的计算能力,我想采用的方法是在电脑上跑主控程序,在树莓派上跑语音模块ros,使用时需要使两者连接在同一个局域网下,然后websocket-client的连接地址就是电脑的地址及不同端口,可以使用ifconfig进行查询。
源码:
from websocket import create_connection
import time
import rospy
from std_msgs.msg import String
voice_ws = create_connection