python对串口助手传入的16进制字符数据进行绘图

博主分享了如何借助Python进行电机PID参数的调整。在初始尝试通过感官调整未果后,博主选择将数据发送到电脑并绘制图表以更直观地进行参数优化。通过读取串口数据并解析16进制数值,绘制了左轮速度图像,为下一步的PID调节打下了基础。代码中详细展示了数据处理和绘图的过程。
摘要由CSDN通过智能技术生成
        近期需要对项目的电机PID参数调节,一开始是凭感官来调整,就是通过眼睛看,调了好久发现效果根本无法得知,很折磨,最后想着将速度先发到电脑上,再绘图,更直观的来调节pid参数。电脑没装matlab而且每次都得20多个G,就拿python写了

串口传进来的数据格式是

前两个数据表示左轮速度的高八位以及低八位,后两个是右轮速度的高八位和低八位,先建一个txt把数据都保存着

网上搜到的python代码都是那种一列一个数据,对这只用一列的数据根本不适用,并且这些数据都是字符串,先得识别成16进制再转换成十进制,然后绘图。python以前没咋接触过,就使用树莓派的时候浅浅用过。。所以对这数据的处理费了很大一部分时间

这是最后绘出来左轮的速度图像,目的是达到了,,目前就开始着手调节PID了

代码如下 

 

import matplotlib.pyplot as plt

file = open('map_1.txt')  #打开文档
data = file.readline() #读取文档数据
para_1 = []  #新建列表,用于保存第一列数据
para_2 = []  #新建列表,用于保存第二列数据
para_3 = []
para_4 = []

para_sum_L = []
para_sum_R = []
para_arr = []
flag_times = 16
i = 0
j = 0


for num in data:                                        #会遍历每一个值 如果每次遍历都赋值的话,次数会是预期的四倍,使多出来的列表没有值可以赋,所以要控制赋值次数,通过flag_times每四次赋一次值
    if(flag_times%16==0):                               #控制写入表的次数 每遍历四个值写入一次  (需要/16)
        para_1.append(int(str(data.split()[i]),16)*256)         #左轮速度参数   --高位
        para_2.append(int(str(data.split()[i+1]),16))           #左轮速度参数   --低位
    # para_3.append(int(str(data.split()[i+2]),16)*256)         #右轮速度参数   --高位
    # para_4.append(int(str(data.split()[i+3]),16))             #右轮速度参数   --低位
        para_sum_L.append(para_1[j]+para_2[j])                    #左轮速度参数   =高位*256+低位转为16进制
        para_arr.append(j)                                      #横坐标
        i = i + 4
        j = j+1
        print(para_1)
        print(para_2)
    flag_times = flag_times + 1                                 #每次遍历数据时+1来通过判断此数值进行每四次取一次值
plt.figure()
plt.title('map')
plt.plot(para_arr, para_sum_L)
plt.show()

//需要将所要绘制数据的txt文件保存在代码同意文件夹下

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值