PAC9300 運動控制器與 機器視覺的綜合應(yīng)用

文:深圳市雷賽控制技術(shù)有限公司 左力2020年第三期

雷賽PAC9300運動控制器外形如圖1所示,它本質(zhì)為一臺專用的嵌入式工業(yè)計算機,其CPU為4核1.99GHz主頻、內(nèi)存為2GB、固態(tài)硬盤為60GB,操作系統(tǒng)為Windows7,運動控制軟件獨占一個CPU核,另外3核運行其他軟件。

PAC9300運動控制器與機器視覺的綜合應(yīng)用1.jpg

圖1 雷賽PAC9300運動控制器外觀

PAC9300運動控制器有1路EtherCAT總線接口,可連接128個節(jié)點;控制32個電機時通訊周期可達1ms。PAC9300運動控制器有1個VGA顯示器接口、4個USB接口,可用于連接顯示器、鍵盤和鼠標等設(shè)備;有2個Ethernet網(wǎng)絡(luò)接口,用于連接上位機、網(wǎng)口相機等設(shè)備;還有2路RS232接口和2路RS485接口,可與其他擴展設(shè)備連接。

PAC9300運動控制器具有多軸直線插補、空間圓弧插補、螺旋線插補、樣條曲線插補、電子齒輪、電子凸輪等運動控制功能,可采用符合IEC61131-3標準的5種編程方式編寫程序,5種編程方式分別為:梯形圖(LD)、指令表(IL)、順序功能圖表(SFC)、功能塊圖(FBD)、結(jié)構(gòu)化文本(ST)。

下面通過一個實驗由三軸平臺模擬點膠機結(jié)合機器視覺,給工件定位,實現(xiàn)工件點膠的過程,以展示PAC9300運動控制器優(yōu)異的性能。

視覺點膠機模擬實驗裝置及動作流程

1 實驗系統(tǒng)硬件

實驗系統(tǒng)的照片如圖2所示。三軸平臺上有一個雷賽L7總線型交流伺服電機、二個DM系列總線型步進電機以及一些IO器件,電路圖詳見圖3。三軸平臺上安裝了一個總線接口相機,并連接在PAC9300上,用于拍攝工件照片、通過圖像處理獲取工件位置。

PAC9300運動控制器與機器視覺的綜合應(yīng)用2.jpg

圖2 雷賽PAC9300運動控制器實驗系統(tǒng)

PAC9300運動控制器與機器視覺的綜合應(yīng)用3.jpg

圖3 EtherCAT總線三軸運動平臺電路圖

2 實驗系統(tǒng)的軟件結(jié)構(gòu)

如圖4所示,視覺點膠機模擬實驗系統(tǒng)的軟件由運動控制程序和機器視覺程序2部分組成。2個相對獨立的程序通過讀寫共享內(nèi)存交換信息。運動控制程序采用結(jié)構(gòu)化文本語言編寫;機器視覺程序采用C#語言編寫。

PAC9300運動控制器與機器視覺的綜合應(yīng)用4.jpg

圖4 視覺點膠機模擬實驗系統(tǒng)軟件結(jié)構(gòu)

3 動作流程

(1)運動控制程序用Jog運動調(diào)整平臺位置,使相機能完整拍攝工裝位置;

(2)在界面上按PositionReset鍵,設(shè)置平臺當前位置為加工原點。

(3)圖像處理程序初始化相機;

(4)標定相機,計算像素長度系數(shù)kx,ky;

(5)運動控制程序用Jog運動調(diào)整平臺位置,使點膠針頭到達工裝位置的左上角。按Getoffset鍵,得到加工原點與加工原點的偏差dx,dy,dz;

(6)按Home鍵,點膠頭回到加工原點;

(7)放置工件后,點擊Dispense鍵,開始點膠加工;

(8)運動控制程序給圖像處理程序發(fā)送指令;

(9)圖像處理程序接收到指令后,控制相機給工裝拍照,獲取0~9號工件的位置;

(10)為了能以較短的時間完成10個工件的點膠動作,圖像處理程序優(yōu)化點膠路徑,并將點膠路徑發(fā)送給運動控制程序;

(11)運動控制程序按規(guī)劃路徑點膠,完成后自動回到加工原點;

(12)轉(zhuǎn)至流程7。

視覺點膠機模擬實驗系統(tǒng)的軟件

1 點膠過程的主要算法

在工裝上任意擺放了10個工件,如圖5所示。圖像處理程序?qū)?yōu)化處理后數(shù)據(jù)傳送給運動控制程序。點膠頭從起點出發(fā),依次對#7、#0、#9、#3、#5、#2、#8、#4、#1、#6工件點膠,為最后返回原點。每個工件的點膠時間長為0.5秒。

PAC9300運動控制器與機器視覺的綜合應(yīng)用5.jpg

圖5 工裝上任意擺放的10個工件及點膠軌跡

為了讓點膠過程運動平穩(wěn)、快速,點膠頭在工件之間的運動軌跡如圖6所示。采用樣條曲線插補函數(shù)控制軌跡運動,可保證矢量速度連續(xù)平穩(wěn)。樣條曲線共8個點;但從原點出發(fā)的樣條曲線P0~P2三個點的Z軸坐標和P3點的相同;最后回原點的樣條曲線P5~P7三個點的Z軸坐標和P4點的相同。

PAC9300運動控制器與機器視覺的綜合應(yīng)用6.jpg

圖6點膠頭從一個工件移動到另一個工件的運動軌跡

在調(diào)用樣條曲線插補函數(shù)前,必須計算樣條曲線各點的坐標;還要計算點與點之間距離,得到點與點之間的運動時間。

P0~P7的坐標計算公式如下:

起點為:P0(0,0,0);

終點為:P7(x1,y1,0);

P1、P6點的高度設(shè)為h1,其坐標為:P1(0,0,h1)、P6(x1,y1,h1);

P3、P4點的高度設(shè)為h1+r,其坐標為:P3(p,q,h1+r)、P4(x1-p,y1-q,h1+r);

其中:q=kp

k=y1/x1

p2+q2=r2

p=(r2/(1+k2))0.5,如果x1小于0,則p為負P2、P5點為圓弧的中點,其坐標為:

P2(m,n,h2)、P5(x1-m,y1-n,h2);

其中:h2=h1+r*sin(PI/4)

m2+n2=L2

L=r-r*cos(PI/4)

n=k*m

m=(L2/(1+k2))0.5,如果x1小于0,則m為負如果x1=0,則:m=0

n=r-r*cos(PI/4),如果y1小于0,則n為負

p=0

q=r,如果y1小于0,則q為負計算樣條曲線各段運動時間的公式如下:

設(shè)樣條曲線插補速度為v,則:

P0~P1點的時間為t1=h1/v

P1~P2點的時間為t2=PI*r/4/v

P2~P3點的時間為t3=t2

P3~P4點的時間為t4=(P4(x1-2p)2+(y1-2q)2)0.5/v

P4~P5點的時間為t5=t2

P5~P6點的時間為t6=t2

P6~P7點的時間為t6=t1

PAC9300運動控制器與機器視覺的綜合應(yīng)用7.jpg

圖7 點膠過程的位移曲線和速度曲線

PAC9300運動控制器與機器視覺的綜合應(yīng)用8.jpg

圖8 局部放大圖

圖7為樣條曲線插補運動的位移與速度曲線。圖8是曲線的放大圖。由圖可看出:樣條曲線插補的位移曲線十分平滑;速度曲線也很連續(xù)。

2 運動控制程序的框圖

PAC9300運動控制器采用循環(huán)掃描方式執(zhí)行結(jié)構(gòu)化文本編寫的程序。這和C#由事件觸發(fā)執(zhí)行程序的方式完全不同。

點膠機的運動控制主程序框圖如圖9所示。程序首先進行共享內(nèi)存初始化工作。完成后,將變量initMem設(shè)為FALSE。電機可運動鍵按下后,可進行手動控制平臺運動、也可進行自動點膠。

PAC9300運動控制器與機器視覺的綜合應(yīng)用9.jpg

圖9 點膠機的運動控制主程序框圖

PAC9300運動控制器與機器視覺的綜合應(yīng)用10.jpg

圖10 手動控制平臺運動子程序框圖

手動控制平臺運動子程序框圖如圖10所示。

該子程序可進行X軸、Y軸和Z軸的回原點(Home)運動;可控制3個軸的點動(Jog運動),且點動的速度有高、中、低三檔可選;可控制3軸進行點位運動;還可加工原點與相機原點的偏移量。

PAC9300運動控制器與機器視覺的綜合應(yīng)用11.jpg

圖11 點膠子程序框圖

點膠子程序框圖如圖11所示。其中有3個狀態(tài):splineBusy、PVTBusy、DelayOff2(定時器2時間到)。

當splineBusy=TRUE時,進行樣條曲線各點坐標和時間的計算、樣條曲線插補函數(shù)參數(shù)的設(shè)置、啟動樣條曲線插補運動。

當PVTBusy=TRUE時,等待樣條曲線插補運動結(jié)束。若運動結(jié)束,就開啟點膠閥。

當DelayOff2=TRUE時,等待定時器時間到。若時間到,關(guān)閉點膠閥;為運動到下一個點做準備。

PAC的運動控制程序原代碼請見附錄。

3 運動控制程序的界面

PAC9300運動控制器與機器視覺的綜合應(yīng)用12.jpg

圖12 PAC9300運動控制器的操作界面

雷賽PAC9300運動控制器可以在顯示器上顯示優(yōu)美的操作界面,如圖12所示。

JOG分組框(GroupBox)中6個按鍵可控制運動平臺3個軸朝正、負方向點動。運動平臺上的2、4、6、8和1、7號鍵也可以控制相應(yīng)的軸點動。

Movedistance分組框中3個文本框可輸入3個軸的運動距離,后面3個按鍵是點位運動的啟動按鍵。

Position分組框在3個文本框顯示的是3個軸的位置。

Select Speed下拉列表框(ComboBox)可選擇種速度:Low、Middle、High。

Inputs分組框中為9個復(fù)選框(Checkbox),用于指示運動平臺上9個按鍵的狀態(tài)。當有鍵按下時,框中顯示有一個“√”。速度表為BarDisplay控件。

Output按鍵是PushSwitchLed控件;當按鍵按下左邊的指示燈變綠,按鍵抬起指示燈變紅。

雷賽PAC運動控制器的軟件中還有很多實用的控件,在此不一一列舉。

視覺點膠機模擬實驗系統(tǒng)的圖像處理程序

1 相機像素點尺寸的標定

要從圖像中獲取物體的位置,首先要標定圖像的像素點的尺寸。

PAC9300運動控制器與機器視覺的綜合應(yīng)用13.jpg

圖13 圖像坐標與加工坐標的關(guān)系

如圖13所示,在相機拍攝范圍內(nèi),分別放置2個用于測量距離的標記:Mark點1和Mark點2。已知2個標記的相對距離為dx和dy。

相機拍攝照片,通過圖像處理,得到Mark點1和Mark點2在照片中的位置坐標,分別為(x1,y1),(x2,y2)。該坐標的單位為像素。則像素點x和y方向的尺寸分別為:

kx=dx/(x2-x1)

ky=dy/(y1-y2),單位:mm/像素

PAC9300運動控制器與機器視覺的綜合應(yīng)用14.jpg

圖14 標定結(jié)果

標定結(jié)果如圖14所示,一個像素的長和寬約為0.012mm。

2 圖像坐標與加工坐標的關(guān)系

相機是固定在運動平臺的機座上,不隨X、Y、Z軸一起運動。在工裝位置畫一個圖像坐標X’Y’,如圖13所示。圖像坐標系中Y’軸方向和我們習慣采用的Y軸方向相反。

調(diào)整相機位置和平臺位置,使圖像的左上角與圖像坐標原點重合,如圖14所示,將此時X、Y軸的位置設(shè)為加工原點。

手動調(diào)節(jié)X、Y軸,使點膠頭移動到圖像坐標原點。此時X、Y軸的移動距離即為點膠頭的加工坐標與圖像坐標的偏移量:Xoffset、Yoffset,如圖13所示。該方法比較簡單,但精度不是太高。

通過圖像處理得到工件位置坐標(x’,y’)轉(zhuǎn)換至加工坐標(x,y)的關(guān)系式如下:

x=x’+Xoffset

y=-y’+Yoffset

3 圖像處理程序框圖

圖像處理程序主程序框圖如圖15所示。完成相機初始化后,定時器控制相機每100ms拍照一次,并將圖像顯示在界面上。在開始對工件進行位置識別之前,要進行相機的標定,計算像素點的尺寸。

PAC9300運動控制器與機器視覺的綜合應(yīng)用15.jpg

圖15 圖像處理程序主程序框圖

當Start按鍵按下后,打開線程1。線程1的程序框圖如圖16所示。

PAC9300運動控制器與機器視覺的綜合應(yīng)用16.jpg

圖16 線程1的程序框圖

初始化共享內(nèi)存后,線程1等待運動控制程序發(fā)來的指令。當接受到一個新指令,且指令代碼為22時,線程1開始進行工件位置識別。

如果識別成功,將對工件坐標數(shù)據(jù)進行路徑優(yōu)化,使點膠時間最短。

PAC9300運動控制器與機器視覺的綜合應(yīng)用17.jpg

圖17 圖像識別及數(shù)據(jù)優(yōu)化結(jié)果

如圖17所示,接受到第22號指令,指令代碼為22,圖像識別成功。如果按0~9的順序?qū)ぜc膠,路徑長為115.1mm,經(jīng)過優(yōu)化計算后,點膠路徑為#7、#0、#9、#3、#5、#2、#8、#4、#1、#6,路徑長為66.4mm。圖像識別、路徑優(yōu)化共耗時986ms。

運動控制程序與圖像處理程序之間的數(shù)據(jù)交換

運動控制程序與圖像處理程序之間的數(shù)據(jù)交換通過讀寫共享內(nèi)存得以實現(xiàn)。

PAC9300運動控制器與機器視覺的綜合應(yīng)用18.jpg

圖18 2個進程通過共享內(nèi)存通信

共享內(nèi)存是內(nèi)存映射文件的一種特殊形式。如圖18所示,共享內(nèi)存映射的是一塊物理內(nèi)存,而非磁盤上的文件。2個進程通過虛擬地址空間及用戶級頁表可以讀、寫物理內(nèi)存中的同一塊區(qū)域,從而實現(xiàn)進程間的通信。該方式通訊效率高。

1 圖像處理程序中有關(guān)共享內(nèi)存的代碼

存放在共享內(nèi)存的數(shù)據(jù)為結(jié)構(gòu)類數(shù)據(jù)。因此,在使用共享內(nèi)存前,要定義自己的結(jié)構(gòu)體。詳細代碼如下:

//實例化3個結(jié)構(gòu)體

DataExchangeCommanddataExchangeR;//存放指令

DataExchangeResult1dataExchangeW1;//存放指令執(zhí)行結(jié)果

DataExchangeResult2dataExchangeW2;//存放優(yōu)化后的軌跡數(shù)據(jù)

intdataSizeR=Marshal.SizeOf(typeof(DataExchangeCommand));//給結(jié)構(gòu)體分配空間

intdataSizeW1=Marshal.SizeOf(typeof(DataExchangeResult1));

intdataSizeW2=Marshal.SizeOf(typeof(DataExchangeResult2));

using(varcommandRead=MemoryMappedFile.CreateOrOpen("SharedMemory_Command",dataSizeR))

using(varresultWrite1=MemoryMappedFile.CreateOrOpen("SharedMemory_Result1",dataSizeW1))

using(varresultWrite2=MemoryMappedFile.CreateOrOpen("SharedMemory_Result2",dataSizeW2))

//在系統(tǒng)內(nèi)存中創(chuàng)建或打開具有指定容量的內(nèi)存映射文件

{

using(varaccessorRead=commandRead.CreateViewAccessor(0,dataSizeR,MemoryMappedFileAccess.Read))

using(varaccessorWrite1=resultWrite1.CreateViewAccessor(0,dataSizeW1,MemoryMappedFileAccess.Write))

using(varaccessorWrite2=resultWrite2.CreateViewAccessor(0,dataSizeW2,MemoryMappedFileAccess.Write))

//創(chuàng)建View對象:指定內(nèi)存映射文件的偏移量、大小和訪問限制

{

………

while(true)//循環(huán)查詢由運動控制程序發(fā)來的指令

{

accessorRead.Read(0,outdataExchangeR);         //讀共享內(nèi)存

commandNo=dataExchangeR.Noi;        //將結(jié)構(gòu)體的數(shù)據(jù)賦值給變量

commandValue=dataExchangeR.command;

………

dataExchangeW1.Noi=commandNo;        //給結(jié)構(gòu)體的數(shù)據(jù)賦值

dataExchangeW1.picOK=pictureOK;

accessorWrite1.Write(0,refdataExchangeW1);        //寫入共享內(nèi)存

………

dataExchangeW2.x0=OPx[0];        //給結(jié)構(gòu)體的數(shù)據(jù)賦值

dataExchangeW2.y0=OPy[0];

dataExchangeW2.x1=OPx[1];

dataExchangeW2.y1=OPy[1];

………

accessorWrite2.Write(0,refdataExchangeW2);        //寫入共享內(nèi)存

………

if(Job1Stop==1)        //結(jié)束通信

{

accessorRead.Dispose();        //關(guān)閉共享內(nèi)存

accessorWrite1.Dispose();

accessorWrite2.Dispose();

commandRead.Dispose();

resultWrite1.Dispose();

resultWrite2.Dispose();

     }

   }

 }

}

………

用Memory Mapped File.Create Or Open和Create View Accessor函數(shù)初始化共享內(nèi)存后,就可以反復(fù)讀寫共享內(nèi)存了。在退出程序前要釋放共享內(nèi)存空間。

2 運動控制程序中有關(guān)共享內(nèi)存的代碼

結(jié)構(gòu)化文本語言有關(guān)共享內(nèi)存的函數(shù),與C#的類似,但沒有創(chuàng)建View對象的函數(shù)。在創(chuàng)建內(nèi)存映射文件時,文件名要和C#的一樣。詳細代碼如下:

//定義共享內(nèi)存的變量:

hShMemRead1:RTS_IEC_HANDLE;

ResultRead1:RTS_IEC_RESULT;

deInstRead1:DataExchangeResult1;

ReadResult1:RTS_IEC_RESULT;

iRead1:__UXINT;

ulSizeR1:UDINT:=SIZEOF(DataExchangeResult1);

hShMemRead2:RTS_IEC_HANDLE;

ResultRead2:RTS_IEC_RESULT;

deInstRead2:DataExchangeResult2;

ReadResult2:RTS_IEC_RESULT;

iRead2:__UXINT;

ulSizeR2:UDINT:=SIZEOF(DataExchangeResult2);

hShMemWrite:RTS_IEC_HANDLE;

ResultWrite:RTS_IEC_RESULT;

deInstWrite:DataExchangeCommand;

WriteResult:RTS_IEC_RESULT;

iWrite:__UXINT;

ulSizeW:UDINT:=SIZEOF(DataExchangeCommand);

……

//在共享內(nèi)存內(nèi)寫、讀數(shù)據(jù):

hShMemWrite:=SysSharedMemoryCreate('SharedMemory_Command',0,ADR(ulSizeW),ADR(ResultWrite));

//在系統(tǒng)內(nèi)存中創(chuàng)建或打開具有指定容量的內(nèi)存映射文件

deInstWrite.Noi:=1;        //給結(jié)構(gòu)體賦值,指令編號

deInstWrite.command:=22;        //指令代碼

iWrite:=SysSharedMemoryWrite(hShMemWrite,0,ADR(deInstWrite),SIZEOF(deInstWrite),ADR(WriteResult));

//將結(jié)構(gòu)體寫入共享內(nèi)存

……

hShMemRead1:=SysSharedMemoryCreate('SharedMemory_Result1',0,ADR(ulSizeR1),ADR(ResultRead1));

hShMemRead2:=SysSharedMemoryCreate('SharedMemory_Result2',0,ADR(ulSizeR2),ADR(ResultRead2));

//在系統(tǒng)內(nèi)存中創(chuàng)建或打開具有指定容量的內(nèi)存映射文件

iRead1:=SysSharedMemoryRead(hShMemRead1,0,ADR(deInstRead1),SIZEOF(deInstRead1),ADR(ReadResult1));

iRead2:=SysSharedMemoryRead(hShMemRead2,0,ADR(deInstRead2),SIZEOF(deInstRead2),ADR(ReadResult2));

//讀共享內(nèi)存的數(shù)據(jù)

Px[1]:=deInstRead2.x0;        //共享內(nèi)存的數(shù)據(jù)賦值給變量

Px[2]:=deInstRead2.x1;

Px[3]:=deInstRead2.x2;

Px[4]:=deInstRead2.x3;

……

RTRIGcloseM(CLK:=ButtonCloseM);        //獲取CloseM按鍵按下的上升沿

IFRTRIGcloseM.Q=TRUETHEN

iWrite:=SysSharedMemoryClose(hShm:=hShMemWrite);//關(guān)閉共享內(nèi)存

iRead1:=SysSharedMemoryClose(hShm:=hShMemRead1);

iRead2:=SysSharedMemoryClose(hShm:=hShMemRead2);

END_IF

……

小結(jié)

用結(jié)構(gòu)化文本語言編寫的運動控制程序和用C#語言編寫的圖像處理程序在PAC9300運動控制器上同時運行,一個負責運動平臺的控制,一個負責圖像處理和數(shù)據(jù)優(yōu)化;各司其職,發(fā)揮出各自的優(yōu)勢;同時通過共享內(nèi)存交換信息,又相互協(xié)作,使PAC運動控制器強大的性能得到充分的體現(xiàn)。

PAC9300運動控制器與機器視覺的綜合應(yīng)用19.jpg

圖19 2個程序同時運行時占用PAC資源的情況

如圖19所示,PAC9300運動控制器在運行這2個程序時,CPU使用率在40%左右。在“CPU使用記錄”第3個圖形中(即CPU的第3個核),有一個小波峰,是圖像處理程序在進行圖像識別,持續(xù)時間不到1秒,物理內(nèi)存使用率在50%左右,說明PAC9300運行這2個程序還比較輕松。

本實驗結(jié)果表明:

(1)雷賽PAC9300運動控制器不但具有優(yōu)秀的運動控制功能,其人機界面也十分優(yōu)美,用鼠標、鍵盤操作方便。

(2)PAC9300的CPU性能很好,完全可以同時運行圖像處理程序。

(3)使用共享內(nèi)存,可以使2個相對獨立的程序進行快速的信息交換。

(4)采用本實驗的硬件結(jié)構(gòu),比工控機+運動控制卡、運動控制器+觸摸屏這兩種方案的性價比都更好。

中傳動網(wǎng)版權(quán)與免責聲明:

凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.wangxinlc.cn)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

伺服與運動控制

關(guān)注伺服與運動控制公眾號獲取更多資訊

直驅(qū)與傳動

關(guān)注直驅(qū)與傳動公眾號獲取更多資訊

中國傳動網(wǎng)

關(guān)注中國傳動網(wǎng)公眾號獲取更多資訊

熱搜詞
  • 運動控制
  • 伺服系統(tǒng)
  • 機器視覺
  • 機械傳動
  • 編碼器
  • 直驅(qū)系統(tǒng)
  • 工業(yè)電源
  • 電力電子
  • 工業(yè)互聯(lián)
  • 高壓變頻器
  • 中低壓變頻器
  • 傳感器
  • 人機界面
  • PLC
  • 電氣聯(lián)接
  • 工業(yè)機器人
  • 低壓電器
  • 機柜
回頂部
點贊 0
取消 0
往期雜志
  • 2025年第一期

    2025年第一期

    伺服與運動控制

    2025年第一期

  • 2024年第六期

    2024年第六期

    伺服與運動控制

    2024年第六期

  • 2024年第五期

    2024年第五期

    伺服與運動控制

    2024年第五期

  • 2024年第四期

    2024年第四期

    伺服與運動控制

    2024年第四期

  • 2024年第三期

    2024年第三期

    伺服與運動控制

    2024年第三期