背景介绍
当前具有各种传感器,能获取外界环境的状态变化;如何搭建物理传感器与虚拟模型之间的关联,能够将传感器采集的数据实时传递给仿真模型,进而实现动态更新显得极为关键。
经过几年的探索,我们与合作伙伴实现了实时仿真领域的物联网平台,后续搭建在腾讯云CVM服务器,具体可以参考:
http://82.157.56.208:7777/
附:在过去很多年,尽管共享单车、共享充电宝等领域并没有取得商业上的成功,但是我一直觉得类似项目还挺有意思,实现了大规模数据的管理,给人和物搭建了数据传递的链路。
应用实例
我们以人形机器人状态感知为例,展示数据传输的实施过程。实际使用过程中,我们使用陀螺仪传感器获取机器狗的宏观状态,后续通过MQTT协议上传到物联网平台,最终转发到实时仿真网关进行可视化,具体为:
采用边缘网关获取陀螺仪传感器信号,并通过transform_sensor_data进行数据预处理,后续配置MQTT服务器的三元组信息,将实时温度,速度和加速度数据上传到云服务器,具体代码如下所示:
# MQTT 服务器信息
broker = "ip" # MQTT 服务器地址
port = 1883 # 默认 MQTT 端口
clientid = "ClientId" # 替换为你的 clientid
username = "UserName" # 替换为你的 username
password = "05b61b97bb8fb1bb9d5433e223fea16223f9b78b;hmacsha1" # 替换为你的 password
# 上行请求 Topic
up_topic = "$thing/up/property/00x/vibration" # 替换为你的上行请求 Topic
# 下行响应 Topic
down_topic = "$thing/down/property/00x/vibration" # 替换为你的下行响应 Topic
# 构造 payload
def generate_payload():
return {
"method": "report",
"msgToken": "123",
"timestamp": int(time.time() * 1000), # 当前时间戳(毫秒)
"params": {
"tem": transform_sensor_data(sensor_vibration.read_register(registeraddress=0, functioncode=3)),
"accx": transform_sensor_data(sensor_vibration.read_register(registeraddress=10, functioncode=3)),
"accy": transform_sensor_data(sensor_vibration.read_register(registeraddress=11, functioncode=3)),
"accz": transform_sensor_data(sensor_vibration.read_register(registeraddress=12, functioncode=3)),
"vx": transform_sensor_data(sensor_vibration.read_register(registeraddress=1, functioncode=3)),
"vy": transform_sensor_data(sensor_vibration.read_register(registeraddress=2, functioncode=3)),
"vz": transform_sensor_data(sensor_vibration.read_register(registeraddress=3, functioncode=3))
}
}