近期需要对项目的电机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文件保存在代码同意文件夹下