0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

搭建一個開源ADAS項目的步驟流程

智能汽車電子與軟件 ? 來源:車端 ? 2023-04-14 17:18 ? 次閱讀

一、項目范圍

該項目是一個高級駕駛輔助系統(tǒng)的原型,專注于感知算法(目標(biāo)檢測、車道線分割和交通標(biāo)志分類)。它提供了3個主要功能:

前方碰撞警告

車道偏離警告

交通標(biāo)志檢測及超速預(yù)警

它還提供了「有限的」虛擬硬件訪問權(quán)限,作為邁向商業(yè)產(chǎn)品的一步:

通過 LAN 中的 GPS 源的 GPS 讀取器

一個 CAN 讀取器,用于從虛擬 can 總線讀取車速和轉(zhuǎn)向信號

但是,可以使用 GPS 模塊或 CAN 轉(zhuǎn) USB 電纜收集 GPS 和 CAN 信號。我將提供一些關(guān)于如何設(shè)置這些設(shè)備的說明。

二。硬件設(shè)置

30b0433c-daa3-11ed-bfe3-dac502259ad0.png

處理該項目所有輸入的中心組件是中央處理器。這臺計算機(jī)接收兩個輸入:(i) 來自相機(jī)的圖像,以及 (ii) 汽車底盤數(shù)據(jù),例如汽車速度和轉(zhuǎn)向信號。中央處理負(fù)責(zé)處理這些輸入以在需要時發(fā)出警告。在這個項目的范圍內(nèi),由于實驗條件有限,我們實施了一個模擬模塊來提供相機(jī)和傳感器讀取器輸入的替代方案」。在商業(yè)產(chǎn)品中,傳感器讀取器模塊可以通過 GPS 模塊和 CAN 總線讀取器(例如 CAN 轉(zhuǎn) USB 電纜)來實現(xiàn);可以使用 USB 攝像頭提供攝像頭輸入。

「硬件清單:」

Jetson Nano 開發(fā)者套件

Sandisk Ultra 64GB class-10 SD

Wareshare 5寸液晶觸摸屏

Wareshare 8Ω 5W 喇叭

Jetson Nano 2寸5V散熱風(fēng)扇

透明外殼。

1.如何獲取汽車傳感器(速度,轉(zhuǎn)向燈)

使用 GPS 模塊

「出于開發(fā)和教育目的:」

從您的手機(jī)共享 GPS:

從 Google Play 商店下載「共享 GPS應(yīng)用程序。」

設(shè)置您的手機(jī)局域網(wǎng)地址,src/sensors/car_gps_reader.cpp并使用此應(yīng)用程序與您的 Jetson Nano 共享 GPS 信息。這樣,我們就可以獲取GPS信號,估計車速。

使用 USB GPS 接收器

「對于商業(yè)產(chǎn)品:」

查看此模塊精度:< 3m。

如何設(shè)置CAN總線以讀取車速和轉(zhuǎn)向信號

「基本信息」

在這個項目中,我們沒有在真車上設(shè)置物理 CAN 總線(只是一個使用 socket CAN 的仿真系統(tǒng))。但是,它可以通過使用 CAN 轉(zhuǎn) USB 電纜來實現(xiàn)。

CAN總線的一些信息:

一般信息

如何侵入您的車輛?:hacking-can-bus.pdf

開源 CAN 電纜:CANtact。這將支持您將 CAN 總線連接到 linux 套接字,「我的 ADAS 源代碼已經(jīng)支持該套接字」。

硬件設(shè)計

固件:

在韓國

您還需要 OBD-II 到 DB9 電纜來連接汽車 OBD-II

一旦 CANtact 設(shè)備處理了來自車輛的 CAN 消息,它們就會通過 USB B 型端口輸出。因此,這需要 USB-B 到 USB-A 電纜:https://www.amazon.com/AmazonBasics-USB-2-0-Cable-Male/dp/B00NH11KIK

「我們在哪里可以找到要連接的 CAN 總線?」

在這個項目中,我們只使用虛擬 CAN 總線,因此項目源代碼仍然不支持與汽車 CAN 總線的真實連接。不幸的是,雖然 CAN 總線是汽車行業(yè)的標(biāo)準(zhǔn),但如果您想找到您的 can 線在哪里,您通常需要查看汽車電氣圖才能找到內(nèi)部 CAN 總線。自 1996 年以來,有一個名為 OBD2 的汽車標(biāo)準(zhǔn),可以提供一種方便的方式連接到 CAN 總線。

「OBD2接口在哪里?」

OBD-II 端口通常位于儀表板下方,方向盤柱下方(下圖中的 1 - 3)。如果端口不在轉(zhuǎn)向柱下方,請在數(shù)字 4 - 9 指示的區(qū)域中尋找端口。

30c60780-daa3-11ed-bfe3-dac502259ad0.png

「我怎樣才能反轉(zhuǎn)CAN工程并讀取速度?」

您可以使用 Wireshark 或 candump 查找車速和轉(zhuǎn)向燈在哪里。CAN總線是沒有加密的,大家可以根據(jù)下面的說明嘗試查找。

2. 如何標(biāo)定相機(jī)

將 USB 攝像頭連接到 Jetson Nano 板后,我們需要運(yùn)行 OpenADAS 軟件來校準(zhǔn)攝像頭。校準(zhǔn)實際上是基于透視變換的距離估計。這是為距離計算校準(zhǔn)相機(jī)的便捷方式。

變換參數(shù)包括從真實世界距離到鳥瞰圖像空間的米到像素映射,以及鳥瞰圖像到相機(jī)圖像之間的透視變換矩陣。為了計算這些參數(shù),我們使用以下解決方案:在汽車前面放一塊紅地毯,測量距離 W1、W2、L1、L2。地毯應(yīng)該足夠大,并且必須對稱地放置在汽車的長軸上。

30ccd4e8-daa3-11ed-bfe3-dac502259ad0.png

單擊設(shè)置按鈕以打開相機(jī)校準(zhǔn)。

在 UI 中輸入 L1、L2、W1、W2。

30ddf9ee-daa3-11ed-bfe3-dac502259ad0.png

之后,通過單擊「重新拍攝照片」選擇 4 個點(diǎn),選擇一個點(diǎn)并移動滑塊。這些點(diǎn)必須以正確的順序拾取。相機(jī)標(biāo)定后,標(biāo)定文件將被保存data/camera_calib.txt并在每次啟動程序時加載回來。

三、感知模型和算法

1. 物體檢測與交通標(biāo)志分類模型

該物體檢測模塊負(fù)責(zé)檢測前方障礙物物體,如其他車輛或行人,以及交通標(biāo)志。這些結(jié)果可用于前方碰撞預(yù)警和超速預(yù)警。為了提供這些功能,該模塊包含兩個主要組件:基于 CenterNet 的對象檢測神經(jīng)網(wǎng)絡(luò)和基于 ResNet-18 的交通標(biāo)志分類網(wǎng)絡(luò)。因此,我們將在下圖中看到 2 個深度學(xué)習(xí)模型。

30e79670-daa3-11ed-bfe3-dac502259ad0.png

1.1.使用 CenterNet 進(jìn)行目標(biāo)檢測

CenterNet 是一種簡單但高效的對象檢測模型。與其他流行的目標(biāo)檢測模型相比,CenterNet 可以非常有效地適應(yīng)速度-精度權(quán)衡。與其他流行的基于錨框的對象檢測網(wǎng)絡(luò)不同,CenterNet 依靠關(guān)鍵點(diǎn)檢測器來檢測對象的中心,然后回歸其他屬性。

30ecf43a-daa3-11ed-bfe3-dac502259ad0.png

CenterNet管道 「論文:」作為點(diǎn)的對象 - Xingyi Zhou、Dequan Wang、Philipp Kr?henbühlhttps://arxiv.org/abs/1904.07850。

「訓(xùn)練」

我使用 CenterNet 作者的官方存儲庫來訓(xùn)練對象檢測器(進(jìn)行了一些修改)。請閱讀此處的安裝步驟以安裝培訓(xùn)所需的環(huán)境。

「筆記:」

我建議使用 Anaconda 或 Miniconda 為每個任務(wù)創(chuàng)建一個虛擬環(huán)境。不要混合你的環(huán)境,因為我們必須使用不同的 Python 和包版本。

「必須使用」PyTorch v0.4.1 并將其設(shè)置為此處的說明:https://github.com/xingyizhou/CenterNet/blob/master/readme/INSTALL.md。不保證其他版本有效。

我修改了官方存儲庫以使用 Berkeley DeepDrive (BDD) 數(shù)據(jù)集](https://bdd-data.berkeley.edu/)。您可以在此處克隆源代碼以開始訓(xùn)練。在我的存儲庫中,我用10個類訓(xùn)練了 CenterNet:person、、、、、、、、、和。ridercarbustruckbikemotortraffic lighttraffic signtrain

「使用 TensorRT 進(jìn)行模型優(yōu)化」

使用 PyTorch 框架訓(xùn)練 CenterNet 后,我們獲得 PyTorch 模型格式(.pth)的模型文件。為了優(yōu)化 NVIDIA Jetson Nano 上的推理速度,我們需要將這些模型轉(zhuǎn)換為 TensorRT 引擎文件。轉(zhuǎn)換是通過稱為 ONNX(開放式神經(jīng)網(wǎng)絡(luò)交換)的中間格式完成的。首先使用 PyTorch ONNX 模塊將 PyTorch 模型轉(zhuǎn)換為 ONNX 格式(步驟 1)。

之后,我們將 ONNX 模型轉(zhuǎn)換為每個推理平臺的 TensorRT 引擎(步驟 2)。因為從ONNX到TensorRT引擎的轉(zhuǎn)換時間比較長,所以在我的實現(xiàn)中,我將TensorRT引擎轉(zhuǎn)換后序列化到硬盤,每次程序啟動時加載。在此步驟中,我們必須注意 TensorRT 引擎在不同計算機(jī)硬件上的構(gòu)建方式不同。所以,

30f9eb5e-daa3-11ed-bfe3-dac502259ad0.png

使用此存儲庫將預(yù)訓(xùn)練模型轉(zhuǎn)換為 ONNX 格式

「筆記:」

創(chuàng)建另一個虛擬環(huán)境,這與培訓(xùn)不同。這個新的 Python 環(huán)境應(yīng)該使用 Pytorch v1.0 或 v1.1。我為上面的這個轉(zhuǎn)換任務(wù)準(zhǔn)備了一個存儲庫。您可以使用此處的說明來設(shè)置您自己的環(huán)境。

您可以從該文件夾convert_to_onnx_mobilenet.py中閱讀(對于 MobileNetv2 主干)和convert_to_onnx_rescdn18.py(對于 ResNet-18 主干)中的一些轉(zhuǎn)換示例源代碼。

擁有 ONNX 模型后,轉(zhuǎn)到 OpenADAS 以更新配置文件中新對象檢測模型的路徑:src/configs/config_object_detection.h.您還可以使用此存儲庫進(jìn)行轉(zhuǎn)換。

1.2.交通標(biāo)志分類

由于「BDD 數(shù)據(jù)集」的限制——它只包含 1 類交通標(biāo)志(未指定標(biāo)志類型),我不得不訓(xùn)練另一個神經(jīng)網(wǎng)絡(luò)來識別標(biāo)志類型。由于速度和準(zhǔn)確性高,因此也選擇了「ResNet-18來完成這項任務(wù)?!?/strong>我使用 Tensorflow 和 Keras 框架訓(xùn)練了模型。

「數(shù)據(jù)集」

在這個項目中,我只設(shè)計了對最大速度標(biāo)志進(jìn)行分類的系統(tǒng),并將每個速度級別視為一個單獨(dú)的對象類。為了收集足夠的訓(xùn)練數(shù)據(jù),我使用了 2 個數(shù)據(jù)集:Mapillary Traffic Sign Dataset (MTSD) 和 German Traffic Sign Recognition (GRSRB) 數(shù)據(jù)集。由于 MTSD 是一個交通標(biāo)志檢測數(shù)據(jù)集,我使用標(biāo)志邊界框來裁剪它們以進(jìn)行分類任務(wù)。裁剪后,我合并了 2 個數(shù)據(jù)集,得到 18,581 個最高限速交通標(biāo)志圖像分為 13 個類別,以及 879 個末端限速標(biāo)志(將所有末端限速標(biāo)志僅視為 1 類)。

此外,我使用來自其他交通標(biāo)志和物體的 20,000 張裁剪圖像作為“未知”類別。該數(shù)據(jù)集中共有 15 個類別:最大速度標(biāo)志(5km/h、10km/h、20km/h、30km/h、40km/h、50km/h、60km/h、70km/h、80km/h , 90 公里/小時, 100 公里/小時, 110km/h、120km/h)、限速終點(diǎn)(EOSL)等標(biāo)志(OTHER)。之后,這個數(shù)據(jù)集被分成 3 個子集:訓(xùn)練集(80%)、驗證集(10%)和測試集(10%)。每個交通標(biāo)志類別的分布是隨機(jī)的。

「訓(xùn)練步驟」

使用此存儲庫中的源代碼來訓(xùn)練交通標(biāo)志分類器

「第一步:初始化環(huán)境」

創(chuàng)建anaconda環(huán)境:

conda create --name python=3.6

激活創(chuàng)建的環(huán)境并安裝所有要求:

pip install requirements.txt

「第 2 步:訓(xùn)練模型」

準(zhǔn)備如下結(jié)構(gòu)的數(shù)據(jù)集:

3106392c-daa3-11ed-bfe3-dac502259ad0.png

使用以下命令訓(xùn)練模型:

pythontrain.py

「使用 TensorRT 進(jìn)行模型優(yōu)化」

轉(zhuǎn)換為 UFF

convert_h5_to_pb.py修改和中的模型路徑convert_pb_to_uff.py。

將.h5模型轉(zhuǎn)換為.pb, 最后.uff:

pipinstallrequirements-h5-to-uff.txt
pythonconvert_h5_to_pb.py
pythonconvert_pb_to_uff.py

擁有 ONNX 模型后,轉(zhuǎn)到 OpenADAS 以更新配置文件中新交通標(biāo)志分類模型的路徑:src/configs/config_sign_classification.h.

2.車道線分割模型

車道線檢測模塊負(fù)責(zé)檢測車道線和車道偏離情況。然后將該結(jié)果用于車道偏離警告。我使用深度神經(jīng)網(wǎng)絡(luò)和霍夫變換線檢測器進(jìn)行車道線檢測。下面介紹車道線檢測的流程。

31100150-daa3-11ed-bfe3-dac502259ad0.png

車道線檢測流水線

用于車道線分割的 U-Net 模型

U-Net 是一種在生物醫(yī)學(xué)圖像分割中表現(xiàn)良好的全卷積網(wǎng)絡(luò),它可以用較少的訓(xùn)練圖像數(shù)據(jù)展示高精度的分割結(jié)果。我將 U-Net 應(yīng)用于車道線分割問題,并結(jié)合霍夫變換以線方程的形式找到車道線。

3121f6ee-daa3-11ed-bfe3-dac502259ad0.png

U網(wǎng)模型

為了在嵌入式硬件上運(yùn)行輕量級分割模型,我對原始 U-Net 模型進(jìn)行了兩次修改:

(1) 將decoder filters的數(shù)量調(diào)整為128, 64, 32, 16, 8個filters,從decoder的頂部到網(wǎng)絡(luò)的輸出;

(2) 用 ResNet-18 主干替換原來的主干。

這些修改減少了 U-Net 中的參數(shù)數(shù)量,并為我們提供了一個可以超過 200 幀每秒 (FPS) 運(yùn)行的輕量級模型(模型 U-Net ResNet-18 輸入大小 384x382,RTX 2070 GPU 上的 TensorRT float 16 ).

數(shù)據(jù)集

數(shù)據(jù)集是從Mapillary Vista 數(shù)據(jù)集準(zhǔn)備的,并進(jìn)行了一些修改。原始數(shù)據(jù)集包含訓(xùn)練集中約 18000 張圖像和驗證集中約 2000 張圖像。我合并這些集合,刪除一些不包含車道線或有太多噪音的圖像。最終數(shù)據(jù)集有 15303 張圖像。我將這個集合隨機(jī)分成三個子集:10712 張圖像用于訓(xùn)練(~70%),2296 張圖像用于驗證(~15%)和 2295 張圖像用于測試(~15%)。因為 Mapillary Vista 的標(biāo)簽包含很多對象類,所以我只保留車道線類來生成二值分割掩碼作為新標(biāo)簽。

312c315e-daa3-11ed-bfe3-dac502259ad0.png

Mapillary Vistas 數(shù)據(jù)集預(yù)處理——圖像 A、B 來自 Mapillary Vitas

訓(xùn)練

使用我的存儲庫訓(xùn)練 U-Net 進(jìn)行車道線分割

「第一步:初始化環(huán)境」

創(chuàng)建anaconda環(huán)境:

conda create --name python=3.6

激活創(chuàng)建的環(huán)境并安裝所有要求:

pip install requirements.txt

「第 2 步:訓(xùn)練模型」

在目錄中創(chuàng)建新的配置文件list_config請不要修改舊的配置文件,以便我們更好地觀察,模型和訓(xùn)練歷史將自動保存到saved_models文件夾中。

對于培訓(xùn),只需運(yùn)行:

python model/train.py

或者

./train.sh

使用 TensorRT 進(jìn)行模型優(yōu)化

轉(zhuǎn)換為 UFF

為此任務(wù)創(chuàng)建另一個虛擬環(huán)境。

convert_h5_to_pb.py修改和中的模型路徑convert_pb_to_uff.py。

.h5將模型轉(zhuǎn)換為.pb,并最終使用這些命令(請更新和.uff中模型的正確路徑)convert_h5_to_pb.pyconvert_pb_to_uff.py

pipinstallrequirements-h5-to-uff.txt
pythonconvert_h5_to_pb.py
pythonconvert_pb_to_uff.py

擁有 UFF 模型后,轉(zhuǎn)到 OpenADAS 以在車道檢測配置文件中更新該新模型的路徑:src/configs/config_lane_detection.h.

使用霍夫變換進(jìn)行車道線檢測

霍夫變換是一種在圖像處理中非常有效的線檢測算法。該算法的總體思想是創(chuàng)建從圖像空間(A)到新空間(B)的映射,空間(A)中的每條線對應(yīng)空間中的一個點(diǎn)(B),空間中的每個點(diǎn)(A)對應(yīng)空間中的正弦曲線 (B)。將 (A) 中的所有點(diǎn)投影到空間 (B) 中的正弦曲線后,我們找到交點(diǎn)密度最高的地方。然后將這些位置投影到 (A) 成線。通過這種方式,霍夫線變換算法可以在圖像空間(A)中找到線。

尋找候選車道線的過程如下圖所示。從線分割網(wǎng)絡(luò)產(chǎn)生的分割掩碼,車道線檢測模塊使用概率霍夫變換來檢測原始線段(1)。之后,使用由 Bernard A. Galler 和 Michael J. Fischer 在 1964 年反轉(zhuǎn)的不相交集/聯(lián)合查找森林算法將這些線劃分為組。我們使用線之間的空間距離和角度差將屬于一個線段分組同一條線。經(jīng)過步驟(2),我們可以看到不同的線組被繪制成不同的顏色。步驟 (3) 接收這些線組作為輸入,并使用具有 L2 距離的最大似然估計在每個組中擬合一條線。

313b71e6-daa3-11ed-bfe3-dac502259ad0.png

線候選檢測

該系統(tǒng)將車道分割模型與上述車道檢測算法相結(jié)合,可以檢測不同環(huán)境下的車道線,判斷車道偏離情況。它為車道偏離警告模塊創(chuàng)建可靠的輸入。

4.警告規(guī)則

該系統(tǒng)使用基于規(guī)則的警告算法。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • GPS技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    10240
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2700

    瀏覽量

    463174
  • ADAS系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    226

    瀏覽量

    25665
  • 讀取器
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    5226

原文標(biāo)題:如何搭建一個開源ADAS項目

文章出處:【微信號:智能汽車電子與軟件,微信公眾號:智能汽車電子與軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    搭建開源大語言模型服務(wù)的方法

    本文我們將總結(jié)5種搭建開源大語言模型服務(wù)的方法,每種都附帶詳細(xì)的操作步驟,以及各自的優(yōu)缺點(diǎn)。
    的頭像 發(fā)表于 10-29 09:17 ?111次閱讀

    MXoptiCal-簡化精密測量-只需幾個步驟即可實現(xiàn)致的目標(biāo)測量#ADAS

    adas
    北匯信息POLELINK
    發(fā)布于 :2024年09月20日 10:16:32

    Matepad pro12.2 已上市半個月,但是還沒有在開源網(wǎng)站看到該項目的開源信息,違背開源精神

    Matepad pro12.2 已上市半個月,本人自己也購買了同款12+256的pad,想要同步學(xué)習(xí)下這款pad的些體驗還不錯的功能點(diǎn),但是目前為止還沒有在開源網(wǎng)站看到該項目的開源
    發(fā)表于 08-27 17:25

    ADAS系統(tǒng)組成簡介#ADAS

    adas
    北匯信息POLELINK
    發(fā)布于 :2024年08月03日 20:05:37

    pytorch環(huán)境搭建詳細(xì)步驟

    PyTorch作為廣泛使用的深度學(xué)習(xí)框架,其環(huán)境搭建對于從事機(jī)器學(xué)習(xí)和深度學(xué)習(xí)研究及開發(fā)的人員來說至關(guān)重要。以下將介紹PyTorch環(huán)境搭建的詳細(xì)
    的頭像 發(fā)表于 08-01 15:38 ?661次閱讀

    在PyTorch中搭建最簡單的模型

    在PyTorch中搭建最簡單的模型通常涉及幾個關(guān)鍵步驟:定義模型結(jié)構(gòu)、加載數(shù)據(jù)、設(shè)置損失函數(shù)和優(yōu)化器,以及進(jìn)行模型訓(xùn)練和評估。
    的頭像 發(fā)表于 07-16 18:09 ?1726次閱讀

    性能測試的流程步驟有哪些

    性能測試是軟件測試的重要環(huán)節(jié),主要目的是評估軟件在不同負(fù)載條件下的性能表現(xiàn),以確保軟件能夠滿足用戶的需求。本文將詳細(xì)介紹性能測試的流程步驟
    的頭像 發(fā)表于 05-29 16:00 ?649次閱讀

    開源項目】用ESP32做一個數(shù)字沙漏

    沙漏用來形象地顯示時間的流逝,現(xiàn)在市面上很難找到大型沙漏了,常見的只有廚房用的小沙漏,大概能顯示3到5分鐘。 在這個項目里,作者制作了完整流程正好為
    發(fā)表于 04-28 11:44

    開放原子開源基金會與 9 開源項目舉行捐贈簽約儀式

    軟件、OpenTenBase、MetaToC、crowdos、NXROS、Dorothy SSR、onps 開源網(wǎng)絡(luò)協(xié)議共 9 開源項目捐贈方代表共同簽約。
    的頭像 發(fā)表于 12-21 17:30 ?806次閱讀
    開放原子<b class='flag-5'>開源</b>基金會與 9 <b class='flag-5'>個</b><b class='flag-5'>開源</b><b class='flag-5'>項目</b>舉行捐贈簽約儀式

    ADAS1000晶振不起振的原因?

    現(xiàn)有問題想請教下,我使用ADAS1000-3搭配STM32進(jìn)行單導(dǎo)心電電路的搭建,對ADAS
    發(fā)表于 12-19 06:12

    開放原子開源基金會與9開源項目舉行捐贈簽約儀式

    軟件、OpenTenBase、MetaToC、crowdos、NXROS、Dorothy SSR、onps開源網(wǎng)絡(luò)協(xié)議共9開源項目捐贈方代表共同簽約。
    的頭像 發(fā)表于 12-17 15:55 ?730次閱讀

    pcb設(shè)計流程步驟

    pcb設(shè)計流程步驟
    的頭像 發(fā)表于 12-13 17:30 ?3811次閱讀

    如何自己搭建服務(wù)器?

    如何自己搭建服務(wù)器?自己搭建服務(wù)器涉及到硬件和軟件兩
    的頭像 發(fā)表于 12-12 16:52 ?3725次閱讀

    搭建ftp服務(wù)器的步驟

    搭建ftp服務(wù)器的步驟? 搭建FTP服務(wù)器是項需要定技術(shù)知識的任務(wù),但是只要按照以下步驟進(jìn)行
    的頭像 發(fā)表于 12-07 16:32 ?1106次閱讀

    搭建ssm框架的詳細(xì)流程

    有效地集成和利用這些開源框架,提高開發(fā)效率,并且具有良好的可擴(kuò)展性和可維護(hù)性。 本文將詳細(xì)介紹搭建SSM框架的流程,包括環(huán)境搭建、創(chuàng)建項目、
    的頭像 發(fā)表于 12-03 14:52 ?3215次閱讀