你的購物車是空的
{{ (item.variation.media ? item.variation.media.alt_translations : item.product.cover_media.alt_translations) | translateModel }} {{ (item.variation.media
                    ? item.variation.media.alt_translations
                    : item.product.cover_media.alt_translations) | translateModel
                }}
{{ 'product.bundled_products.label' | translate }}
{{ 'product.bundle_group_products.label' | translate }}
{{ 'product.gift.label' | translate }}
{{ 'product.addon_products.label' | translate }}
{{item.product.title_translations|translateModel}}
{{ field.name_translations | translateModel }}
  • {{ childProduct.title_translations | translateModel }}

    {{ getChildVariationShorthand(childProduct.child_variation) }}

  • {{ getSelectedItemDetail(selectedChildProduct, item).childProductName }} x {{ selectedChildProduct.quantity || 1 }}

    {{ getSelectedItemDetail(selectedChildProduct, item).childVariationName }}

{{item.variation.name}}
{{item.quantity}}x NT$0 {{ item.unit_point }} 點
{{addonItem.product.cover_media.alt_translations | translateModel}}
{{ 'product.addon_products.label' | translate }}
{{addonItem.product.title_translations|translateModel}}
{{addonItem.quantity}}x {{ mainConfig.merchantData.base_currency.alternate_symbol + "0" }}

【研習】AI服務型仿生機器人-智慧管家實務 線上研習課程

一、 舉辦目的與課程說明: AI服務型機器人已經融入我們生活中取代人力,而本研習將透過快速AI應用技術,打造一款智慧服務型管家,可語音、可辨識、可互動、可教學,更可應用於各行各業。短短研習,大大成效。 原來學 AI 可以這樣學,全球首發” 會看、會聽、會說 "的 AI人型機器人,從玩Python開始到AI人型機器人的互動與控制;從影像控制、手勢控制、循線、即時控制到AI 語音助理、語音控制、wiki問答、AI神經網路…無所不包,無所不控。 本課程適用於Python程式設計、微電腦、AI人工智慧…等課程。課程精彩有趣、互動性十足,將讓您體驗前所未見,別開生面的特色課程。以下提供您判斷您是否須要參加本研習: 當您覺得怎麼都是用車來教 當您想了解如何將AI融入生活應用中 當您期待在短時間內學到AI核心應用技術 當您期待開課不單只是上課,還要更多的….   本課程具提升科技領域教學與成效,敬請指派教師參加本研習。   二、 主辦單位與日期:   【中】彰化文興高中 111 年 7 月 8 (五) 10:00-12:00 【北】明志科技大學 電機工程系  111 年 7 月 29  (五)  10:00-12:00 【中】朝陽科技大學 資訊工程系  111 年 8 月 9  (二)  10:00-12:00   三、 協辦單位: 飆機器人_科技教育應用團隊   四、 參加對象: 高中職以上相關背景及大專院校教師。   五、 適用課程: 人工智慧、智慧服務、智慧農業、智慧居家、醫療照護、自動控制、自然語言、影像處理、系統整合、Python…等,讓AIoT特色課程與成效一同帶入您的課程裡。   六、 報名方式: 教師請上飆機器人官網 – 教師研習 完成報名手續。   七、 研習時間與課表: 10:00 – 12:00   八、 報名須知: 因疫情影響,配合政府防疫政策,停課不停學,採線上研習(meeting)方式。課程將分教學、實作與應用實施。   報名成功後將提供連結,於email通知,勞請留正確mail。   額滿時主辦單位有權調整最終上課名單。   課程將濃縮,較為緊湊,請準時上線。   恕不接受現場報名。  
2022-06-20

【研習】AI嘉年華創新微課程 線上研習課程

一、 舉辦目的: AI時代到來的到來,應用AI最多的領域在於「智慧型機器人」,在教育領域也不斷需求方法來更好的導入AI教育課程,讓學生可以體驗到有趣好玩的AI人工智慧課程,更重要的是如何讓您無門檻的導入到學校中是我們此次的研習目標: 不須再如傳統AI課程一樣學習繁雜的神經網路、機器學習…等程式,透過AI教育應用模組並藉由輕鬆好玩的方式了解學習AI影像辨識所需的採樣、標記、訓練與預測結果。 能夠無門檻輕鬆導入AI人工智慧相關課程並建立跨領域相關課程。 輕鬆結合智慧型機器人所需自走車搭配方法並配合競賽方式,可適用於開設寒暑假育樂營、AI體驗課程、校內競賽活動…等等。   本課程具提升科技領域教學與成效,敬請指派教師參加本研習。   二、 主辦單位與日期:   【北】飆機器人_科技教育應用團隊 2022年8月12日   三、 協辦單位: 飆機器人_科技教育應用團隊   四、 參加對象: 國、高中職以上相關背景及大專院校教師。   五、 適用課程: 影像辨識、人工智慧、自動控制、資訊科技、生活科技、智慧機器人、C語言、Arduino、Microbit、 AIoT人工智慧、物聯網、寒暑假育樂營…等,讓AIoT特色課程與成效一同帶入您的課程裡。   六、 報名方式: 教師請上飆機器人官網 – 教師研習 完成報名手續。   七、 研習時間與課表: 10:00 – 12:00   八、 報名須知: 因疫情影響,配合政府防疫政策,停課不停學,採線上研習(meeting)方式。課程將分教學、實作與應用實施。   報名成功後將提供連結,於email通知,勞請留正確mail。   額滿時主辦單位有權調整最終上課名單。   課程將濃縮,較為緊湊,請準時上線。   恕不接受現場報名。
2022-06-20

【研習】工業4.0 協作型機械手臂應用於服務型機器人 線上研習課程

  一、 舉辦目的與課程說明: 工業4.0與智慧製造正如火如荼的展開,學界與業界接軌的教學實作環境已是目前趨勢,本次研習我們提供多種具空間定位與自動教導等業界等級的五軸手臂、協作型手臂、校園淺口袋協作手臂、滑台、輸送帶、AGV/AMR ….,除一一讓您體驗與導入務實的教學課程與智慧工廠的場域應用外,還舉一反三走出工廠,融入生活時事的AI專題應用,最後還能結合競賽,輕鬆建構跨時代、跨領域的課程要求與教學績效。 一場讓您前所未見的方便攜帶、輕巧簡便型的全方位桌上型協作機械手臂特色課程與課程規劃,從教學、場域、競賽、展示、招生、成效一次擁有,等您加入攜手推動!等您加入攜手推動!將服務型機器人與協作型機械手臂在各種領域的延伸應用 AI無人餐飲化應用。 人機協作與人機介面應用。 AI智慧語音功能結合於醫療、餐廳、飯店等服務行業。 零門檻建立智慧製造課程場域。 支援最夯的ROS、ROS2、Python開發環境,方便二次開發。 提供課程與成效: 提供學校訓練學生成為協作型機械手臂與AIoT整合應用工程師之能力。藉由Python為主要程式設計核心,步步引導,將業界應用技術透過模組化教學模式與學生們熟悉的Raspberry Pi資源,輕鬆將AI與AIoT結合進機械手臂。   本課程具建立智慧製造人才培育中心,並具備完整課程規劃,具提升科技領域教學與之成效,敬請指派教師參加本研習。   二、 主辦單位與日期:   【北】國立宜蘭大學 機械與機電工程學系 111年 7 月 22  (五)  10:00-12:00 【南】國立屏東科技大學 智慧機電學程     111 年 8 月 5  (二)  10:00-12:00   三、 協辦單位與應用單位: 飆機器人_科技教育應用團隊 農委會   四、 參加對象: 高中職以上相關背景及大專院校教師。   五、 適用課程: 工業物聯網、智慧農業、照護醫療、人工智慧、自動控制、ROS 2.0 、系統整合、智慧機器人、Python、 AIoT人工智慧、物聯網…等,讓AIoT特色課程與成效一同帶入您的課程裡。   六、 報名方式: 教師請上飆機器人官網 – 教師研習 完成報名手續。   七、 研習時間與課表: 10:00 – 12:00   八、 報名須知: 因疫情影響,配合政府防疫政策,停課不停學,採線上研習(meeting)方式。課程將分教學、實作與應用實施。   報名成功後將提供連結,於email通知,勞請留正確mail。   額滿時主辦單位有權調整最終上課名單。   課程將濃縮,較為緊湊,請準時上線。   恕不接受現場報名。
2022-06-13

LIMO的ROS2--Dockerfile版本安裝

前言 警告:本安裝基於VSCode進行,對VSCode有不適者請勿使用   我們在前面幾篇文章教學了LIMO上ROS2的安裝,但那些命令打起來還是有點麻煩--有沒有辦法簡化這個安裝流程呢? 還真的有。 Dockerfile是一個用來構建映像的文字檔,文本內容包含了一條條構建映像所需的指令和說明,若有人撰寫好Dockerfile,我們想安裝只需要將工作目錄移動到Dockerfile所在資料夾,一行指令即可安裝: docker build -t <映像名稱>:<版本標籤> . 解決了安裝的問題,但執行每次都得打一串指令,每開一個新的命令列又要再打一次,有點麻煩--有沒有辦法簡化呢? 還真的有。 VSCode的兩個插件--Docker和Remote-containers可以在VSC匯入Dockerfile,並在之後開啟VSC時自動啟動container,並讓命令列常駐在其中執行。 因此,本文的就來教大家怎麼配置VSC環境,搭配我們製作的Dockerfile讓LIMO的ROS2環境一步到位。     安裝VSCode VSCode沒有辦法直接以命令安裝--雖然有可以命令安裝的號稱同等產品VSCodium,但很遺憾的,Remote-containers在VSCodium中不能安裝……所以   第一步:下載安裝用的deb檔,到官網可以輕鬆地找到它: 在嵌入式系統大多數時候都是選.deb,ARM 64。   第二步:下載完成之後打開下載資料夾,右鍵開啟terminal: 輸入 sudo dpkg -i <剛剛載下來的檔案名稱>   第三步:VSCode安裝完成後,打開VSCode直接點向插件市集(雖然是市集,但並沒有付費購買喔): 裡面比較必要安裝的有python、Docker和Remote-Containers,請用關鍵字搜尋並安裝它們   第四步:安裝完插件後,點選File => Open Folder: 打開我們提供的Dockerfile資料夾(由於包含我們教材的原始範例碼,因此須跟業務人員聯繫取得喔!):   第五步:開啟資料夾完成後,點左下角的綠色><,然後在彈出的上方輸入框輸入Reopen,選取Reopen in Container: 第一次安裝會跑一陣子,但我們只需要等待即可。當安裝完成後,下方命令列會變成這樣子,就代表VSCode已經把container配置完成--更棒的是,之後每次開VSC都會幫你啟動好。   第六步:最後要做的,就是把LIMO的東西編譯好,在這個命令列中輸入 colcon build --symlink-install   完成,就這麼簡單,基本上點點滑鼠、打一兩個指令就可以了--只需要花點時間等待下載即可。 經過上述配置,我們接下來可以使用熟悉的VSCode介面進行工作(尤其是使用過我們ROS智慧機器人教材的用戶),當然,不用一直敲那些命令也是一大利多。   ……最關鍵的還是不用去改原始碼,心理壓力少很多(?
2022-06-13

【研習】工業物聯網(IIoT)應用於綠能智慧氣象站 線上研習課程

  一、 舉辦目的與課程說明: 本課程以工業物聯網(Industrial Internet of Things)為核心技術,並以綠能智慧氣象站為範例,解析「感知層」、「網路層」、「應用層」,三層面之架構。延伸發想應用於醫療、農業、工業、服務業與環境教育…等延伸應用。 感知層:Modbus解析各氣象站感測器,作為業界自動控制核心。 網路層:MQTT作為多機多點監控站之通訊橋梁,達成多點農田戶外布局監控。 應用層:Node-Red快速設計專屬人機介面及line警報通知。 延伸應用:同技術發想至智慧居家照護監控中心、車輛戰情中心、工廠中控中心…等應用案例 課程與專業認證:提供學校訓練學生成為全方位IoT實務應用工程師的課程內容與學習衡量指標。從感知層到網路層至應用層,步步引導,將業界應用技術透過模組化教學模式與學生們熟悉的Arduino、Raspberry Pi資源,輕鬆將IoT/IIoT融入課堂中,課程亦搭配IoT實務工程師認證,檢驗學生學習成效。   本課程具建立智慧製造/環境工程/農業人才培育中心,並具備完整課程與認證等規劃,具提升科技領域教學與之成效,敬請指派教師參加本研習。   二、 主辦單位與日期:                                    【南】國立虎尾科技大學 電機工程系  111 年 7 月 12  (二)  10:00-12:00 【北】國立中央大學 資訊工程系 TPRAI教育聯盟  111 年 8 月 3  (三)  10:00-12:00 【中】國立中興大學 環境工程學系  111 年 8 月 16 (二)  10:00-12:00   三、 協辦單位與應用單位: 飆機器人_科技教育應用團隊 國立中興大學生醫工程研究所 農委會   四、 參加對象: 高中職以上相關背景及大專院校教師。   五、 適用課程: 工業物聯網、智慧農業、智慧環境監測、照護醫療、人工智慧、自動控制、ROS 2.0 、系統整合、智慧機器人、Python、 AIoT人工智慧、物聯網…等,讓AIoT特色課程與成效一同帶入您的課程裡。   六、 報名方式: 教師請上飆機器人官網 – 教師研習 完成報名手續。   七、 研習時間與課表: 10:00 – 12:00   八、 報名須知: 因疫情影響,配合政府防疫政策,停課不停學,採線上研習(meeting)方式。課程將分教學、實作與應用實施。   報名成功後將提供連結,於email通知,勞請留正確mail。   額滿時主辦單位有權調整最終上課名單。   課程將濃縮,較為緊湊,請準時上線。   恕不接受現場報名。
2022-06-13

【研習】AI應用於AMR導航應用與ROS智慧自駕 線上研習課程

  一、 舉辦目的與課程說明: AMR (Autonomous Mobile Robot)能為世界的科技與工業改變什麼? 不須再如傳統AGV搬運車,侷限於固定環境路線,可彈性佈署產線與路徑。 能夠輕鬆協同多機與不同系統的設備,進行協作溝通。 結合光達SLAM、深度視覺,更加優化導航安全性與延伸應用,室內戶外皆宜。   內涵的核心通訊ROS(Robot Operating System)有什麼好處呢? 職缺近幾年呈爆炸性成長,全球各大廠家及台灣設備支援ROS已成必備功能。而全球預估至2024年將會有近一百萬台及55%機器人使用ROS。 節點(Node)可自由包覆模組化,程式復用性高、易維護修改、傳承性高。   如何能讓台灣教育不落人後,本課程提供,競爭力提升校園導入方案 #ROS2前進校園 ,成立AMR暨ROS人才培育中心,我們規劃了推出三階段的機器人作業系統實務課程與兩階段認證, 從Python開始,深入淺出的實做加上完善的教學設備與教材,與時俱進的教學環境與成果及各式ROS2.0 & AMR的場域應用與建置,更凸顯ROS2.0 & AMR的新觀念、新視野、新價值。 本課程具提升科技領域教學與成效,敬請指派教師參加本研習。 二、 主辦單位與日期:   【中】國立勤益科技大學 資訊工程系  111 年 7 月 15  (五)  10:00-12:00 【北】國立中央大學 資訊工程系 TPRAI教育聯盟  111 年 7 月 20  (三)  10:00-12:00 【北】明志科技大學 電機工程系 111年 8 月 10 日 (三)  10:00-12:00   三、 協辦單位與應用單位: 飆機器人_科技教育應用團隊 國立中興大學生醫工程研究所 農委會   四、 參加對象: 高中職以上相關背景及大專院校教師。   五、 適用課程: 導航自駕、智慧農業、照護醫療、人工智慧、自動控制、ROS 2.0 、系統整合、智慧機器人、Python、 AIoT人工智慧、物聯網…等,讓AIoT特色課程與成效一同帶入您的課程裡。   六、 報名方式: 教師請上飆機器人官網 – 教師研習 完成報名手續。   七、 研習時間與課表: 10:00 – 12:00   八、 報名須知: 因疫情影響,配合政府防疫政策,停課不停學,採線上研習(meeting)方式。課程將分教學、實作與應用實施。   報名成功後將提供連結,於email通知,勞請留正確mail。   額滿時主辦單位有權調整最終上課名單。   課程將濃縮,較為緊湊,請準時上線。   恕不接受現場報名。
2022-06-08

LIMO的ROS2--額外設定與說明

前言 在我們上一篇文章中,我們提到了怎麼安裝LIMO的ROS2容器。其中有一些命令,我們照著打安裝過去,但卻不知道代表什麼意思。本篇我們將針對這些小部分進行補充,並介紹"為什麼"與"之後可以怎麼使用"。   本篇內容如不閱讀並不影響後續課程進行,有興趣者再配飯觀賞即可!   建立容器時的指令 docker run --network=host  --cap-add=SYS_PTRACE --cap-add=SYS_RAWIO --security-opt=seccomp:unconfined --security-opt=apparmor:unconfined --volume=/tmp/.X11-unix:/tmp/.X11-unix --runtime=nvidia --device /dev/ttyTHS1:/dev/ttyTHS1 --device /dev/ttyUSB0:/dev/ydlidar --device /dev/bus/usb/:/dev/bus/usb -v $(pwd)/:workspace --env="DISPLAY=$DISPLAY" --name limo-foxy-dev  -w /workspace -id ros:foxy 我們仍未知道這行命令在說什麼。 ……所以今天我們就來一步一步來拆解,說明其中這些參數的意義。   --network=host 這行指出容器的網路使用host(也就是母體系統)的網路。通過加上這行,容器才有上網能力,也才能做到我們前面在容器內使用apt等方式安裝軟體包的行為--同時也保證了ROS2可以對區網通訊。   --cap-add=SYS_PTRACE --cap-add=SYS_RAWIO 增加容器可以存取的權限,我們知道sudo有非常大的權力可以控制各種命令和存取。capadd則是將這些權力拆散,讓容器碰到指定的某些部份時可以不用sudo操作。 其中SYS_PTRACE讓容器可以追蹤進程,RAWIO則使容器可以存取諸如/devport、/dev/mem、/dev/kmem等等裝置。 順帶一提,sudo(正確來說應該是root)的權利在這定義下被拆分為29項,這裡使用的只是冰山一角而已。   --security-opt=seccomp:unconfined --security-opt=apparmor:unconfined 對容器做安全性的設置,常看見的就是AppArmor(Application Armor)和seccomp(Secure computing mode),這兩者在此處都預設不設限制。   --volume=/tmp/.X11-unix:/tmp/.X11-unix 可以簡單的想像成和原生系統共用資料夾,可以重新指定在容器中對應的路徑。   --runtime=nvidia 由於我們是在NV上進行,並且「有可能」使用到NV的GPU,因此需要加上這個參數讓容器載入NV的設置。   --device /dev/ttyTHS1:/dev/ttyTHS1 --device /dev/ttyUSB0:/dev/ydlidar --device /dev/bus/usb/:/dev/bus/usb 將原生系統的硬體橋接到容器中,同樣可以在容器內為他改名。   --env="DISPLAY=$DISPLAY" 這很關鍵(同時也是松靈原廠沒加的參數),他讓容器可以直接使用原生系統的螢幕輸出,這樣後續我們才能利用這個容器執行rviz…… 執行時,原生系統也要打上相關的指令開啟權限給Docker: xhost +local:docker  我們也可以將這行新增到bashrc裡面自動開啟權限。   --name limo-foxy-dev  -w /workspace 為容器命名,以及指定進入容器時的工作目錄  
2022-06-02

LIMO的ROS2--部署container

前言 我們在上一篇文章中介紹了Docker的安裝法,今天要介紹的是LIMO上如何利用Docker配置ROS2開發環境。 在開始安裝之前,我們先來介紹一下Docker是怎麼安裝這些容器的。     容器(Container)怎麼安裝? 使用虛擬機的時候,我們可能安裝完虛擬機,接著就是直接使用別人做好的虛擬機映像檔。這個映像檔因虛擬機軟體有些有特殊格式,比如VMWare可能會直接給你一個巨大的壓縮檔,解壓縮之後是個包含vmdk等一堆檔案的資料夾,直接用VM匯入後即可使用。而最常見的可能是以img為附檔名的映像檔,這種格式和我們燒錄SD卡時使用的一致,也是匯入後即可使用。 但使用這些檔案大家都能注意到一件事情,也就是檔案極其之大,小從3GB(Ubuntu20.04純系統)大至12GB(NV Jetson Nano系統),這使得我們在傳送時相當不便。 而容器不只好傳,甚至還有專門的集中區供各Docker用戶檢索下載。其最關鍵的原因是,容器本身只需要一個檔案就可以完整敘述裡面的內容物,這個檔案叫做DockerFile。同時,它也是我們使用Docker時最常用的安裝方法。 DockerFile是一個類似於批次檔的東西,開頭通常會先引用其他已經完善且常用的容器,比方說官方的Ubuntu容器。接著會寫明了建立容器時需要執行的所有指令--包含你安裝系統後需要安裝的所有函式庫以及設定指令。也就是說,我們使用DockerFile建立容器時,安裝完主系統核心後,就相當於我們一行一行輸入需要的指令安裝需要的包,因此不會像直接裝映像檔一樣下載龐大的檔案(當然,安裝完後也是有一定大小的)。 利用DockerFile安裝確實有其便利性,但就相對需要對它的知識才能夠自由調整安裝內容。畢竟某些函式庫就是需要先裝某一個才能裝下一個,如果一開始不知道而直接打進去安裝指令,有可能容器就建立失敗,要從一大串訊息裡挖出錯誤訊息也是個麻煩的事情。 因此對於初學者,我們比較推薦第二個方法,同時也是LIMO使用的做法:只裝包含系統的基本容器,連線進去慢慢打指令安裝需要的東西。   在LIMO配置ROS2容器 LIMO中配置ROS2的時候,我們第一步會安裝一個包含標準ROS2 FOXY版本的容器,這個容器由ROS官方發佈: mkdir limo_foxy_dev && cd limo_foxy_dev docker run --network=host  --cap-add=SYS_PTRACE --cap-add=SYS_RAWIO --security-opt=seccomp:unconfined --security-opt=apparmor:unconfined --volume=/tmp/.X11-unix:/tmp/.X11-unix --runtime=nvidia --device /dev/ttyTHS1:/dev/ttyTHS1 --device /dev/ttyUSB0:/dev/ydlidar --device /dev/bus/usb/:/dev/bus/usb -v $(pwd)/:workspace --env="DISPLAY=$DISPLAY" --name limo-foxy-dev  -w /workspace -id ros:foxy 第二行看起來很長,但其實拆開來解讀並不困難。 docker run會執行容器,若容器不存在,則會試著從我們前面提到的線上docker發佈集中區搜尋有沒有資源可供下載。我們可以從第二行最後面的內容看到-id ros:foxy,就是指定了ros的容器,其版本為foxy。 而中間的一大串由–帶頭的敘述則是建立容器時需要的參數,包含有網路的橋接、硬體裝置的映射等。這邊即使沒看懂也不影響,基本上由原廠處理這些問題即可。   安裝完這些東西之後,第二步我們試著連接進去: docker exec -it limo-foxy-dev /bin/bash exec這個指令會在容器中執行後續的命令,而-it則是附加的參數,有幾個選項可以選: -d :分離模式,命令會在後台運行 -i :即使你什麼指令都沒打,也會維持命令列輸入的狀態 -t :分配一個終端機給它 因此,我們上面的指令會在執行完後保持接收命令列輸入的狀態: (大概就像這樣子,可以注意到左邊的名稱變成root/nano,且工作目錄也從原本的變成容器中預設的工作目錄了) 注意:接下來的所有動作都是在容器中進行了喔!   第三步:設定ROS2的環境變數,讓他每次只要連入容器內的命令列就會自動載入--當然,那是為了之後方便,現在還是得先手動載入一次: echo "source /opt/ros/foxy/setup.bash" >> /etc/bash.bashrc source /opt/ros/foxy/setup.bash   第四步:安裝python的pip工具,以及更新ROS2函式庫的參考清單: apt-get update #重要,Docker剛新建不會有apt清單,沒跑這行指令apt什麼都裝不起來! apt install -y python3-pip nano openssh-server systemctl udev swig pip install rosdep rosdep init && rosdep update   第五步:安裝光達的SDK和相關的包 git clone https://github.com/YDLIDAR/YDLidar-SDK.git mkdir -p YDLidar-SDK/build cd YDLidar-SDK/build cmake .. make make install cd .. pip install . cd .. && rm -r YDLidar-SDK   第六步:複製LIMO的ROS2包 git clone --recursive https://github.com/agilexrobotics/limo_ros2.git src   接著的第七步會比較麻煩,我們需要調整一下光達的參數讓它可以正常運作。使用我們前面安裝的nano來開啟檔案: nano /workspace/src/ydlidar_ros2/src/ydlidar_ros2_driver_node.cpp 開啟後我們需要對這幾行的數值進行更改,建議使用nano的 ctrl+/ 組合鍵跳轉到該行比較方便: 61行:int optval = 115200; 76行:optval = 3; 108行:b_optvalue = true; 134行:f_optvalue = 12.f; 143行:f_optvalue = 8.f;   (這是使用快捷鍵直接跳轉會看到的畫面,輸入行數後,編輯的輸入標就會移到該行囉。) 全部編輯完之後請按下ctrl + x,接著按下Y存檔。   第八步:安裝LIMO所依賴的ROS2包,並編譯LIMO本體的包(注意:時間會稍微長一點點) rosdep install --from-paths src --ignore-src -r -y colcon build --symlink-install *如果看不懂第二行,建議閱讀出貨教材的ROS2章節:編譯 編譯過程中會有一些小警告,不影響編譯和正常執行,不用擔心。 執行完這一步,LIMO上的ROS2配置暫時告一段落--除了導航相關的資源還未安裝這一點外。   我們先嘗試驗證一下到現在安裝的包和硬體是否有正確配置: source install/setup.bash ros2 launch limo_bringup limo_start.launch.py *第一行是標準的編譯包後載入參數,如果看不懂可閱讀出貨教材的ROS2章節:編譯 第二行會開啟LIMO的底盤啟動程序,包含了底盤和光達等硬體,正確執行的話應該如下顯示: (關鍵就是看到YDLidar is scanning)   我們可以打開另外一個命令列,透過ROS2 topic指令確定目前執行的狀況: (可以看到,imu、odom、scan這幾個頻道都建立成功,可以自行使用echo命令確認訊息。並且底盤控制用的cmd_vel也建立完成,可以使用pub命令嘗試控制看看)   若輸出畫面沒有異常,我們就完成第一階段的ROS2環境部署任務了,先稍作休息,我們下一篇文章再進行後面的動作。
2022-05-31

LIMO的ROS2--Docker特性與安裝

前言 根據5月11號AgileX的消息,LIMO的ROS2將採用Docker的方式部署環境,官方給出的幾個原因如下: Jetson Nano仍未提供官方的Ubuntu20.04版本,這代表以比較新的ROS2版本開發的LIMO難以直接部署環境 LIMO原生安裝的ROS若和ROS2共存,可能產生開發環境混亂的狀況,更可能發生非預期的錯誤 備份相較使用映像檔方式方便   而由於近期NVidia主板缺貨,大量的替代板出現的狀況下產生了其他可能適用的理由: 替代板大多使用emmc,在emmc空間不足的狀況下,Docker可以透過改變容器位置來利用外接硬碟空間 emmc主板環境備份麻煩(需要Linux系統),備份一個container相較簡單 發佈只需要一個文件檔,用戶可以透過Docker載入文件檔自動重新建立出container,而不需傳送幾GB的映像檔   因此,本篇文章將來說明,這個未來不只LIMO,可能很多地方都會使用到的技術:Docker   Docker是什麼? Docker 是一個開放原始碼軟體,是一個開放平台,用於開發應用、交付應用、執行應用。 Docker允許使用者將基礎設施中的應用單獨分割出來,形成更小的顆粒(容器),從而提高交付軟體的速度。 Docker容器與虛擬機器類似,但二者在原理上不同。容器是將作業系統層虛擬化,虛擬機器則是虛擬化硬體,因此容器更具有可攜式性、高效地利用伺服器。 容器更多的用於表示 軟體的一個標準化單元。由於容器的標準化,因此它可以無視基礎設施的差異,部署到任何一個地方。另外,Docker也為容器提供更強的業界的隔離相容。 Docker 利用Linux核心中的資源分離機制,例如cgroups,以及Linux核心命名空間,來建立獨立的容器(containers)。這可以在單一Linux實體下運作,避免啟動一個虛擬機器造成的額外負擔。   上面的文字為wiki的Docker敘述--說實話,第一眼確實不太容易看懂這在說什麼,因此我們用簡單的方式重新試著說明。   不知道大家有沒有使用過VMWare,或者Visual Box這類虛擬機軟體? 虛擬機無疑為我們帶來很多便利,由於大多數人的電腦都是windows,需要執行其他系統才支援的程式時就會使用到虛擬機,最常使用到的可能就是Ubuntu系統虛擬機和手機的Android虛擬機了。但使用虛擬機會有個問題--當我們大量啟動虛擬機後,對電腦運算能力和資源的需求會越堆越高,甚至到了會影響原生系統安定性的程度。 Docker可以說是一種更輕便的虛擬機。相較於一般的虛擬機需要安裝整個系統,Docker只將必要的東西打包起來執行,換個說法就是虛擬機包含作業系統,而Docker不包含。我們可以看一下底下這張圖來了解兩者的包含關係: 圖中右邊為VM,可以看到VM包含OS,並且在和硬體之間有一個虛擬層,VM透過虛擬層和硬體溝通(因此常常聽到VM使用了硬體虛擬化技術) 而左邊的Docker不包含OS,而是在OS之上架構了一個Docker層,透過Docker層和OS溝通(因此有人說Docker使用的是系統虛擬化技術) 兩者包含層級的不同使得在效能上有巨大的差異。根據實驗,Docker中執行程式的速度幾乎和原生系統完全相同,且大多數情況而言,一個安裝完整資源的容器大小遠小於VM的大小,這使得Docker在執行效率和發布效率上都遠勝於VM--Docker綁定在系統上是個小小的缺點,但大多數的機器人和嵌入式裝置都使用Ubuntu作為主系統,因此這問題並不嚴重。   當然,不在Ubuntu上還是可以使用的,代價就是需要額外安裝Linux核心--但這調整不見得常常會成功: (去年本鳥試圖在windows上使用Docker時撞出的隕石坑,就是硬體虛擬化跟系統虛擬化的設定衝突了……)   而在機器人上之所以需要使用Docker,最大的原因就是希望開發環境獨立了。 相較於另外一個技術--Visual Env而言,Docker支援的語言不限於python,也不限於該語言需要的函式庫,而是任何語言和任何你在系統會安裝的東西都可以一併獨立打包。比方說,ROS(2)會使用apt方法安裝,若使用Visual Env則沒辦法讓主系統和開發環境分離,使用Docker則可以。除了容易發佈和使用別人提供的ROS2環境,要還原自己的錯誤動作也可以利用Docker的版本機制救回。而使用ROS2開發的用戶,也可能因為ROS2改版而躊躇是否需要跟進新版的ROS2,這時候使用Docker,在一台機器人上面共存多個不同版本的ROS2就不是問題了。 另外一個好處是解決了emmc版本主板的問題。 目前市面上比較常見的emmc主板,幾乎都是使用16GB作為標準規格--這個尺寸在RPi上可能還好,但在NV Jetson Nano上就有點嚴重了。NVidia Jetson Nano本身的原生映像檔就高達12GB, 扣除掉常常用來彌補顯示卡記憶體不足的swap部分,實際上能使用的空間可能不到1GB,這幾乎是裝完ROS後就卡死的程度,更別提想裝ROS2了。雖然一般這種emmc板都會另外配備外接的擴充儲存空間(通常是SD卡),但很遺憾的,Ubuntu要變更apt的安裝位置相當的麻煩,因此大多數情況下都只能乖乖裝回原來root的位置,這意味著非常容易遇到空間不足的問題。 但變更Docker的儲存位置卻很簡單,因此利用將容器的儲存位置移動到外接空間,可以一定程度上解決這個問題。   如何開始使用Docker? 註:一般而言,LIMO本身有預先安裝好Docker,僅需做最底下解決sudo問題的部分即可--除非啟動時遇到異常狀況再行重裝。   在Ubuntu上使用Docker相對簡單,只需要注意原生裝的Docker常常是舊版的,重新裝一次比較好的這件事情就好…… 以下步驟參考自Docker官方指南:在Ubuntu上安裝Docker 第一步:我們要先移除掉原本舊版的docker。 sudo apt-get remove docker docker-engine docker.io containerd runc   第二步:更新一下apt的列表: sudo apt-get update   第三步:安裝必要的程式:  sudo apt-get install ca-certificates curl gnupg lsb-release   第四步:添加官方的安裝金鑰:  sudo mkdir -p /etc/apt/keyrings  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg   第五步:添加Docker的安裝源: echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null   第六步:更新安裝列表並安裝: sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin   上面步驟完成之後,我們大概就完成了Docker的安裝。要確認有沒有安裝完成,可以使用這個指令確認一下: sudo docker run hello-world 若安裝皆正常,應該會看到以下這個畫面:   當然,我們現在只是安裝好他,實際上目前關鍵的容器並沒有任何我們需要的東西。 下一篇文,我們將來尋找適合的容器並解說如何安裝它。 我們前面可以注意到,我們每一行Docker指令都需要sudo執行,說真的打起來有點煩。 一個偷懶的解決方法是,將使用者直接加入可以存取Docker的群組,讓他不需要額外權限即可執行。此方法參考自官方網站。 sudo groupadd docker sudo usermod -aG docker $USER 這兩行執行完後,關閉命令列,接著使用docker命令就不需要輸入sudo了。根據官網的說法,如果有打算將Docker使用到公開的port上讓外部網路可以存取,則不太建議這樣設置(有可能有安全性上的危險)。 但因為我們後續打算搭配VSCode進行開發,因此設置不用sudo的權限有其便利性,若和我們一樣使用VSCode作為IDE,那可能還是做這個設置好一點。   畢竟LIMO上也沒有什麼機密資訊(?)
2022-05-30