一个简单的log分析脚本实现


需求

录制了一段CAN报文,数据log,要从中分析出某个信号的值,转换关系y=x*255 + 25

log数据

下面是一部分数据

  can7  001   [8]  02 00 00 00 00 00 00 00
  can7  002   [8]  BC 06 10 73 00 00 00 00
  can7  003   [8]  6E E3 05 00 07 00 DB FF
  can7  004   [8]  50 0F 09 00 E5 FF F6 FF
  can7  005   [8]  5C 23 00 00 00 00 00 00
  can7  001   [8]  02 00 00 00 00 00 00 00
  can7  002   [8]  44 1A 10 73 00 00 00 00
  can7  003   [8]  6F E3 05 00 D8 FF F0 FF
  can7  004   [8]  37 10 05 00 F5 FF FF FF
  can7  005   [8]  5E 23 00 00 00 00 00 00
  can7  001   [8]  02 00 00 00 00 00 00 00
  can7  002   [8]  CC 2D 10 73 00 00 00 00
  can7  003   [8]  70 E3 05 00 EC FF B8 FF
  can7  004   [8]  41 0F E5 FF D6 FF F7 FF
  can7  005   [8]  5E 23 00 00 00 00 00 00
  can7  001   [8]  02 00 00 00 00 00 00 00
  can7  002   [8]  54 41 10 73 00 00 00 00
  can7  003   [8]  71 E3 05 00 EE FF 0E 00
  can7  004   [8]  42 10 21 00 FD FF FA FF
  can7  005   [8]  5E 23 00 00 00 00 00 00
  can7  001   [8]  02 00 00 00 00 00 00 00
  can7  002   [8]  DC 54 10 73 00 00 00 00
  can7  003   [8]  72 E3 05 00 EE FF 8F FF
  can7  004   [8]  31 0F C5 FF CC FF F9 FF
  can7  005   [8]  5E 23 00 00 00 00 00 00
  can7  001   [8]  02 00 00 00 00 00 00 00
  can7  002   [8]  64 68 10 73 00 00 00 00
  can7  003   [8]  73 E3 05 00 F7 FF 27 00
  can7  004   [8]  48 10 40 00 01 00 F6 FF
  can7  005   [8]  65 23 00 00 00 00 00 00
  can7  001   [8]  02 00 00 00 00 00 00 00
  can7  002   [8]  EC 7B 10 73 00 00 00 00
  can7  003   [8]  74 E3 05 00 DC FF 9E FF
  can7  004   [8]  56 0F AE FF C8 FF FA FF
  ......

脚本源码

f = open('imu_can.log', 'r')
fout = open('imu_can.txt', 'w')

def calculate_tmp(input):
    str_tmp = input[19:24]
    tmp = (int(str_tmp[0:2],16) + int(str_tmp[3:5], 16)*255)/255 + 25
    tmp = str(tmp) + '\n'
    fout.write(tmp)

for line in f.readlines():
    if(line[10] == '5'):
        calculate_tmp(line)

解析后的数据

60.36078431372549
60.36862745098039
60.36862745098039
60.36862745098039
60.36862745098039
60.39607843137255
60.39607843137255
60.39607843137255
60.39607843137255
60.35294117647059
60.35294117647059
60.35294117647059
60.411764705882355
60.411764705882355
60.411764705882355
60.411764705882355
60.39607843137255
60.39607843137255
60.39607843137255
60.39607843137255
60.36078431372549
60.36078431372549
60.36078431372549
60.36078431372549
60.36862745098039
60.36862745098039
60.36862745098039
60.36862745098039
60.35294117647059
60.35294117647059
60.35294117647059
60.35294117647059
60.411764705882355

后记

在数据量很大的情况下,脚本分析很关键!

以下是一个简单的Unity脚本,用于实现可视域分析效果: ```csharp using UnityEngine; public class VisualAnalysis : MonoBehaviour { public float viewDistance = 10f; // 可视距离 public float viewAngle = 60f; // 可视角度 private Transform player; // 玩家的Transform组件 private Vector3 raycastOffset; // 射线检测的偏移量 void Start() { // 获取玩家的Transform组件 player = GameObject.FindGameObjectWithTag("Player").transform; // 设置射线检测的偏移量 raycastOffset = new Vector3(0, player.GetComponent<Collider>().bounds.size.y / 2, 0); } void Update() { // 计算玩家和视野之间的距离 float distance = Vector3.Distance(transform.position, player.position); // 如果玩家在可视范围内,并且没有障碍物遮挡,则可见 if (distance <= viewDistance && IsVisible()) { Debug.Log("Player is visible!"); } } // 检测玩家是否可见 bool IsVisible() { // 计算玩家和视野之间的向量 Vector3 direction = player.position - transform.position; // 计算玩家和视野之间的角度 float angle = Vector3.Angle(direction, transform.forward); // 如果玩家在可视角度内,并且没有障碍物遮挡,则可见 if (angle <= viewAngle / 2) { RaycastHit hit; if (Physics.Raycast(transform.position + raycastOffset, direction.normalized, out hit, viewDistance)) { if (hit.collider.gameObject.CompareTag("Player")) { return true; } } } return false; } } ``` 这个脚本会检测玩家是否在视野范围内,如果玩家在范围内并且没有障碍物遮挡,则会输出日志信息。在这个脚本中,使用了射线检测来判断玩家是否被遮挡,同时也可以通过修改可视距离和可视角度来调整可视范围。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值