目录
一、前言

二、视觉自动循迹的算法流程
(1)图像的获取
(2)图像的预处理
(3)目标轨迹的提取
(4)根据已知曲线进行预测控制
三、核心模块及要点
轨迹图像细化
from skimage import morphology
def path_skeletonize(img):
"""
图像的细化
Parameters
----------
img : TYPE
RGB
Returns
-------
skeleton : TYPE
Binary
"""
_,binary = cv2.threshold(img,200,255,cv2.THRESH_BINARY_INV)
binary[binary==255] = 1
skeletonimg = morphology.skeletonize(binary)
skeleton = skeletonimg.astype(np.uint8)*255
return skeleton
for i in range(286,0,-1):
u1=999
u2=999
temp=0
count=0
umax=Pathimg.shape[1]
crossv=i
#print("Pathimg shape:",Pathimg.shape)
if Pathimg[i][0]>=1 or Pathimg[i][umax-1]>=1:
iscross=1
break
for j in range(umax):
if count==2:
temp=temp/2
aimPath[i]=temp
break
if Pathimg[i][umax-j-1]>=1 and u2==999:
temp=temp+umax-j
count=count+1
u2=10000
if Pathimg[i][j]>=1 and u1==999:
temp=temp+j
count=count+1
u1=10000
小车轮距L的测量
def solve_ccenterby_3P(p1,p2,p3):
"""
已知圆上三点坐标,求圆心和半径
"""
try:
if len(p1)==2:
x1=p1[0]
y1=p1[1]
x2=p2[0]
y2=p2[1]
x3=p3[0]
y3=p3[1]
A=x1*(y2-y3)-y1*(x2-x3)+x2*y3-x3*y2
B=(x1**2+y1**2)*(y3-y2)+(x2**2+y2**2)*(y1-y3)+(x3**2+y3**2)*(y2-y1)
C=(x1**2+y1**2)*(x2-x3)+(x2**2+y2**2)*(x3-x1)+(x3**2+y3**2)*(x1-x2)
D=(x1**2+y1**2)*(x3*y2-x2*y3)+(x2**2+y2**2)*(x1*y3-x3*y1)+(x3**2+y3**2)*(x2*y1-x1*y2)
cx=-B/A/2
cy=-C/A/2
r=math.sqrt((B**2+C**2-4*A*D)/(4*A*A))
return (cx,cy),r
else:
print("type erro or lenth must be 2 .ex:(x1,y1)")
except Exception as e:
print("erro",e)
return None,None
预测轨迹变换
def Center2Head(xt, yt, theta,HeadL=0.2):
"""
已知中心点坐标(xt,yt),及转向角theta,求车头坐标
车头
O --------
|
| 车头距离中心:0.2M
|----O----| --------
小车中心
"""
#平移矩阵
T=np.array([[1,0,xt],
[0,1,yt],
[0,0,1]])
#旋转矩阵
Tangle=math.pi/2-theta
R=np.array([[math.cos(Tangle),math.sin(Tangle),0],
[-math.sin(Tangle),math.cos(Tangle),0],
[0,0,1]])
HXY=np.array([[0],
[HeadL],
[1]])
Hxy=np.dot(T, np.dot(R,HXY))
hx=Hxy[0][0]
hy=Hxy[1][0]
return hx, hy
四、运行效果
五、总结
文章转载自JAMES费,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。













