91一区-亚洲欧美日韩精品-欧美1区2区-亚洲国产网站-天天看毛片-五月天黄色网-欧美精品一级片-欧美乱视频-黄色一级录像片-国产精品久久久久久亚洲av-国产一区av在线-99色精品-三女警花合力承欢猎艳都市h-日本zzjj-露脸啪啪清纯大学生美女-色噜噜狠狠狠综合曰曰曰-巨乳美女动漫-久久麻豆av-在线观看你懂的网址-熟女性饥渴一区二区三区

蘇州昊瓦智能裝備有限公司
當(dāng)前位置: > 3D相機(jī)資訊

閃兔分揀機(jī)器人,基于RaspberryPi Zero W的機(jī)器人的制作

點(diǎn)擊:105
物流分揀機(jī)器人設(shè)計(jì)方案菜鳥(niǎo)快遞分揀機(jī)器人

第1步:籌備

步調(diào)2:代碼布局

我將代碼分別為這些文件,我將逐個(gè)注釋:

正在接下來(lái)的步調(diào)中,我將一步一步天注釋這些文件

第3步:

快遞分揀機(jī)器人設(shè)計(jì)軟件設(shè)計(jì)

這是應(yīng)用程序的次要出口面,包括機(jī)械人類

importasGPIO

垃圾分揀機(jī)器人的缺點(diǎn)

fromimportreactor,task

importl298NDrive

importremoteControl

importlogging

importutils

log=

enableMotors=True#Motorscanbedisabledfortestingwiththis

runFrequency=1#ThefrequencyonwichthemainTaskwillberan

classAum2:

def__init__:

(“InitializingAum2robot.。.”)

#Configuration

=5555#Porttoopensotheremotecanconnect

#Configureminandmaxservopulselengths

#Keepinmindthesearenotpinsbutservoouts

=(10,11,12,13,14,15,enableMotors)

=

defprocessRemoteCommand:

=(,,-9.8,9.8,-4095,4095)

,int

defrun:

print

defstart

瓜果分揀機(jī)器人方案

l=

#runwillbecalledwiththisfrequency

#Gatherourcodeinamainfunction

defmain:

robot=Aum2

#Standardboilerplatetocallthemainfunctiontobegin

#theprogram.

if__name__==‘__main__’:

main

有些我要對(duì)此文件頒發(fā)評(píng)論的要點(diǎn):

我正在利用歪曲庫(kù)來(lái)調(diào)和來(lái)自UDP的近程節(jié)制定單服務(wù)器跟機(jī)器人的次要Run方式。如你所見(jiàn),該方式此刻甚么也沒(méi)有做,可是其設(shè)法主意是正在此中增添代碼以使機(jī)器人更具自治性。

processRemoteCommand方式將是

起頭方式是正在我設(shè)置須要調(diào)和的兩件事時(shí):監(jiān)聽(tīng)

第4步:

此文件包括兩個(gè)類,即RemoteControl類,RCCommand類

importlogging

importtraceback

fromimportDatagramProtocol

fromimportreactor

importutils

log=

classRemoteControl(DatagramProtocol):

def__init__:

=port

defstart(self,onCommandReceived):

(“InitializingRemoteControl.。.”)

=onCommandReceived

defdatagramReceived(self,data,addr):

try:

(“Received%rfrom%s”%

command=RCCommand

except(KeyboardInterrupt,SystemExit):

raise

except:

_exc

classRCCommand:

閃兔分揀機(jī)

#Timestamp[sec],sensorid,x,y,z,sensorid,x,y,z,sensorid,x,y,z

#890.71558,3,0.076,9.809,0.565,。..

def__init__:

=0

=0

=0

=

iflen》=5and[1].strip==“3”:

=-float

=-float

=float

(“x={}y={}z={}”.format

else:

(“Invalidmessage:{}”.format

一樣是RemoteControl類,它利用歪曲的框架去偵聽(tīng)運(yùn)轉(zhuǎn)WirelessIMU使用的Android手機(jī)發(fā)送的UDP程序包。此應(yīng)用程序發(fā)送存在以下布局的動(dòng)靜:

890.71558,3、0.076、9.809、0.565,4,-0.559、0.032,-0.134、5-21.660,-36.960,-28.140

我只對(duì)下面突出顯現(xiàn)的動(dòng)靜部門(mén)感興趣,那就是傳感器ID3,和加速度計(jì)供給的三個(gè)丈量值(0.076、9.809、0.565)。

你可以正在代碼中看到,類RCCommand將此動(dòng)靜的有用參數(shù)轉(zhuǎn)換為機(jī)器人所需的x跟y值,此中

x是疇前到后的軸,而

y則是從一側(cè)到另一側(cè)。

我也有z軸的代碼,可是我臨時(shí)沒(méi)有利用它。

步調(diào)5:

這是擔(dān)任節(jié)制電動(dòng)機(jī)的文件。為此,它將下令發(fā)送到16伺服驅(qū)動(dòng)器,該驅(qū)動(dòng)器毗鄰到L298N電動(dòng)機(jī)驅(qū)動(dòng)器。我念我能夠會(huì)正在我構(gòu)建的每一個(gè)RaspberryPi機(jī)器人上重用該類。它的確很簡(jiǎn)略,而且沒(méi)有須要龐大的處置懲罰便可實(shí)現(xiàn)它的事情。

importAdafruit_PCA9685

importlogging

importmath

importutils

log=

classL298NDrive:

def__init__(self,enA,in1,in2,in3,in4,enB,enabled):

(“InitializingL298Drive.。.”)

=0

=4095

=enA

=in1

=in2

=in3

=in4

=enB

=enabled

ifenabled:

defenable:

=True

物料分揀機(jī)器人的設(shè)計(jì)

#InitialisethePCA9685usingthedefaultaddress。

=Adafruit_

defdisable:

=False

#InitialisethePCA9685usingthedefaultaddress。

=None

defsetSpeeds(self,rSpeed,lSpeed):

defsetSpeed(self,motor,speed):

pwm=int

(“Motor:{}speed:{}pwm:{}”.format(motor,speed,pwm))

ifmotor==1:

ifspeed》=0:

if:

_pwm

_pwm

else:

if:

_pwm

_pwm

if:

_pwm

else:#motor==2

ifspeed》=0:

if:

_pwm

_pwm

else:

if:

_pwm

_pwm

if:

_pwm

可以看出,代碼的次要部門(mén)正在setSpeed(self,motor,speed)方式中,該方式吸收要設(shè)置的電動(dòng)機(jī)編號(hào),并通知伺服驅(qū)動(dòng)器若何處置懲罰與該電動(dòng)機(jī)關(guān)系的引腳。

大概該當(dāng)給出一些注釋以相識(shí)我為何要履行我的事情

L298N機(jī)電驅(qū)動(dòng)器

利用6個(gè)引腳驅(qū)動(dòng)兩個(gè)機(jī)電:

enA用來(lái)通知速率,咱們要使電動(dòng)機(jī)啟動(dòng)1。通電后,通知駕駛員電動(dòng)機(jī)1該當(dāng)沿一個(gè)標(biāo)的目的挪動(dòng)

in2通電時(shí),通知駕駛員電動(dòng)機(jī)1應(yīng)該沿相反標(biāo)的目的挪動(dòng)

in3通電時(shí),見(jiàn)告駕駛員機(jī)電2該當(dāng)沿一個(gè)標(biāo)的目的挪動(dòng)

in4通知駕駛員,電動(dòng)機(jī)2該當(dāng)沿相反標(biāo)的目的挪動(dòng)

enB用于通知速率,咱們?cè)竿妱?dòng)機(jī)遷移轉(zhuǎn)變

以是正在咱們的例子中,由于我對(duì)一切引腳皆利用了伺服驅(qū)動(dòng)器:

當(dāng)我做到那一點(diǎn):

_pwm

我真的是正在通知伺服驅(qū)動(dòng)器,正在一切PWM時(shí)代,該引腳該當(dāng)為OFF,

當(dāng)我如許做時(shí):

_pwm

我實(shí)際上是正在通知伺服驅(qū)動(dòng)器,正在一切PWM周期中,該引腳該當(dāng)處于ON地位(以是我將其翻開(kāi)

然后,當(dāng)我如許做時(shí):

_pwm

我利用真正的PWM引腳,并利用速率參數(shù)設(shè)置我所要求的脈沖。

步調(diào)6:

最初,這是最初的安然。它沒(méi)有包括類,可是我認(rèn)為我會(huì)正在其他處所重用的一切有用功用。

importmath

importlogging

log=

defmap(v,in_min,in_max,out_min,out_max):

#Checkthatthevalueisatleastin_min

ifv《in_min:

v=in_min

#Checkthatthevalueisatmostin_max

ifv》in_max:

v=in_max

return*(out_max-out_min)//+out_min

defjoystickToDiff(x,y,minJoystick,maxJoystick,minSpeed,maxSpeed):

#Ifxandyare0,thenthereisnotmuchtocalculate.。.

ifx==0andy==0:

return

#FirstComputetheangleindeg

#Firsthypotenuse

z=

#angleinradians

rad=

#andindegrees

快遞分揀機(jī)器人充電

angle=rad*180/

#Nowangleindicatesthemeasureofturn

#Alongastraightline,withanangleo,theturnco-efficientissame

#thisappliesforanglesbetween0-90,withangle0thecoeffis-1

#withangle45,theco-efficientis0andwithangle90,itis1

tcoeff=-1+*2

turn=tcoeff*

turn=round/100

#Andmaxofyorxisthemovement

mov=max

#Firstandthirdquadrant

if(x》=0andy》=0)or:

rawLeft=mov

rawRight=turn

else:

rawRight=mov

rawLeft=turn

#Reversepolarity

ify《0:

rawLeft=0-rawLeft

rawRight=0-rawRight

#minJoystick,maxJoystick,minSpeed,maxSpeed

#Mapthevaluesontothedefinedrang

rightOut=map(rawRight,minJoystick,maxJoystick,minSpeed,maxSpeed)

leftOut=map(rawLeft,minJoystick,maxJoystick,minSpeed,maxSpeed)

(“x={}y={},rOut={},lOut={}”.format(x,y,rightOut,leftOut))

return(rightOut,leftOut)

這里只有兩種方式,第一種是從地圖功能的Arduino。它將指定輸入限定內(nèi)的值轉(zhuǎn)換為輸出規(guī)模內(nèi)的響應(yīng)值。

我為輸入值增添了限定,以是我只接管av,位于in_min跟in_max以內(nèi)。

我擁有的另一個(gè)函數(shù)(joystickToDiff)略微龐大一點(diǎn),可是其目標(biāo)是從輸入的操縱桿對(duì)轉(zhuǎn)換值,以到達(dá)差動(dòng)驅(qū)動(dòng)機(jī)器人擺布機(jī)電所需的速率。此輸出已托付,已轉(zhuǎn)換為指定為參數(shù)的速率規(guī)模。

你可以正在我的博客中找到有關(guān)此部門(mén)的更多詳細(xì)信息

智能分揀機(jī)器人底板閃兔分揀機(jī)器人國(guó)產(chǎn)分揀機(jī)器人批發(fā)商