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

博主分享了如何借助Python进行电机PID参数的调整。在初始尝试通过感官调整未果后,博主选择将数据发送到电脑并绘制图表以更直观地进行参数优化。通过读取串口数据并解析16进制数值,绘制了左轮速度图像,为下一步的PID调节打下了基础。代码中详细展示了数据处理和绘图的过程。
1万+

被折叠的 条评论
为什么被折叠?



