使用閉包實現機械人robot位置的實時更新

2021-10-18 03:51:21 字數 1366 閱讀 4416

如何使用閉包實現機械人robot位置的實時更新?今天番茄加速就來講一下。

定義機械人的初始位置,然後返回乙個move函式,它能幫助我們實現機械人x, y 某個或兩個方向上的移動,並列印出當前的位置。

構建乙個外部函式,傳遞initx,inity 兩個引數,代表robot的初始位置,然後內嵌乙個move函式,體內要引用cordx, cordy兩個引數,這就是所謂的環境,它們+move函式組成閉包。

def rundist(initx,inity):

cordx,cordy = initx,inity

def move(**kwargs):

pass

return move

下面,寫move函式體內實現:

def move(**kwargs):

nonlocal cordx

nonlocal cordy

if 『x』 in kwargs.keys():

cordx+=kwargs[『x』]

if 『y』 in kwargs.keys():

cordy+=kwargs[『y』]

print(『current position (%d,%d)』 %(cordx,cordy))

完整的**如下:

in [21]: def rundist(x,y):

…: cordx,cordy = x,y

…: def move(**kwargs):

…: nonlocal cordx

…: nonlocal cordy

…: if 『x』 in kwargs.keys():

…: cordx+=kwargs[『x』]

…: if 『y』 in kwargs.keys():

…: cordy+=kwargs[『y』]

…: print(『current position (%d,%d)』 %(cordx,cordy))

…: return move

使用rundist函式,過程如下:

in [22]: mv = rundist(0,0)

in [23]: mv(x=1,y=3)

current position (1,3)

in [24]: mv(x=5)

current position (6,3)

in [25]: mv(y=3)

current position (6,6)

可以看到一次初始化位置,並返回乙個move函式,下面不斷呼叫move函式,並且在呼叫的時候就都能記憶住上一次的位置,比較方便。

這就是函式式程式設計中利用閉包特性的功能體現。

Robot杯全國機械人公開賽

這是大學的時候參加的乙個比賽。robot杯全國機械人公開賽。做的是搬運機械人。屬於光電組的。大概有乙個月都在準備這個比賽。我和儀器與電子學院的培松同學。資訊與通訊工程學院的彥宗同學遍歷了從硬體設計。到軟體編寫。過程艱辛。硬體 晶元用的是stm 32。加上機械人的乙個框架。搬運用的手臂是兩個舵機加上兩...

發那科機械人點位編輯 Fanuc機械人指令編輯大全

程式編輯介面,在編輯 edcmd 中有一系列的功能選項,本文重點對 變更編號 取消 及 改為備註 三個功能做詳細介紹。1.變更編號 renumber 該選項的功能作用是 以公升序方式,從游標所在行起,自上而下賦予程式中位置變數新的位置編號,使程式中的位置編號更加整齊。圖1示教程式設計中,由於經常需要...

發那科機械人點位編輯 Fanuc機械人指令編輯大全

程式編輯介面,在編輯 edcmd 中有一系列的功能選項,本文重點對 變更編號 取消 及 改為備註 三個功能做詳細介紹。1.變更編號 renumber 該選項的功能作用是 以公升序方式,從游標所在行起,自上而下賦予程式中位置變數新的位置編號,使程式中的位置編號更加整齊。圖1示教程式設計中,由於經常需要...