实时仿真的核心为:通过传感器获取物理世界的局部状态(温度、变形和压力等),后续基于实时仿真进行推理,进而为智能装备提供完备的信息输入,最终实现物理感知。
在无人机安全监测领域,通过传感器获取系统的负载情况,后续基于实时仿真,推断结构在极端工作环境下的实时变形特征,确保无人系统的安全可靠(应用于载人飞行器的安全监测)。
近来,我们单独将力学传感器及对应的采集模块列出来,通过Demo实例展示产品的性能,具体如下图所示,实例中采用的小球重量为0.7g;重力传感器的量程为5kg,实验中将小球从空中抛下的时候,接触瞬间出现翻滚等行为。

重力传感器具体测量的信号如图2所示,在小球于传感器接触前,数据采集模块的读数处于稳定状态,接触瞬间,传感器能够准确捕捉接触期间的力学变化过程,具有很好的精度。

数据采集模块与传感器的具体实例:

数据采集模块的尺寸为:65mm*35mm*24mm,具体如下图所示:



具体的采集代码为:
import minimalmodbus
import serial
import struct
import time
# 串口配置
ser = serial.Serial('COM5', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=1)
sensor_vibration = minimalmodbus.Instrument(ser, slaveaddress=1)
# 从机地址为 1
# 保存文件路径output_file = 'i32_values.txt'
# 将无符号 32 位整数转换为有符号 32 位整数
def u32_to_i32(u32: int) -> int:
return struct.unpack(">i", u32.to_bytes(4, byteorder="big", signed=False))[0]
# 循环连续采集数据并保存到文件
def continuous_sampling():
with open(output_file, 'a') as file: # 打开文件并追加写入
while True:
try:
# 读取寄存器 1002 和 1003
reg_1002 = sensor_vibration.read_register(registeraddress=1002, functioncode=3)
reg_1003 = sensor_vibration.read_register(registeraddress=1003, functioncode=3)
# 合并寄存器值,假设 reg_1002 为高位,reg_1003 为低位
u32_value = (reg_1002 << 16) | reg_1003 # 合并为 32 位无符号整数
# 转换为有符号 32 位整数
i32_value = u32_to_i32(u32_value)
# 打印结果
#print(f"Reg1002 (高16位) = 0x{reg_1002:04X}")
#print(f"Reg1003 (低16位) = 0x{reg_1003:04X}")
#print(f"合并的 32-bit HEX = {u32_value:08X}")
#print(f"转换为有符号整数 = {i32_value}")
# 将值写入文本文件
file.write(f"{i32_value}\n")
# 等待 50ms
time.sleep(0.05)
except Exception as e:
print(f"发生错误: {e}")
break
if __name__ == '__main__':
continuous_sampling()