GithubHelp home page GithubHelp logo

pomelo925 / ttennis-pickup-robot Goto Github PK

View Code? Open in Web Editor NEW
4.0 2.0 1.0 378.63 MB

清華大學動力機械系25級畢業專題項目

Dockerfile 0.13% Shell 0.50% CMake 2.93% Makefile 6.35% Python 1.26% C 74.90% C++ 12.66% TypeScript 0.01% PowerShell 0.09% Common Lisp 0.37% JavaScript 0.55% CSS 0.01% Assembly 0.26%

ttennis-pickup-robot's Introduction

TTennis Pickup Robot 桌球自動拾取智慧機器人

2024年清華大學25級動力機械系畢業專題

本人負責項目為所有軟體、部分韌體及部分硬體,其餘非本人負責項目最終會清楚標註貢獻者。

摘要

本計畫旨在研發一台可以自動撿桌球且將桌球放入發球機的機器人,以減輕桌球**員的負擔,並提高其訓練的效率。綜合評估了幾款現有自動撿球機器人的優缺點後,我們確立研究的主要目標為提升現有自動撿球機器人的功能,包括提高取球效率、增加集球倉容量、引入自動辨識球和動態避障功能等。具體研究方法為透過機器人的差動底盤、取球機構,以及深度相機的RGBD資訊、ROS(Robot Operating System)系統、Wi-Fi通訊等,達成此機器人能夠高效、快速地自動收集桌球,且提供建圖定位、撿球模式、供球模式和倒球模式等多元模式,且有利於使用者簡易操作的設備,從而提高**員訓練的效率。

研究動機與研究問題

在桌球**中,無論是業餘對打或專業訓練,球員經常須花費大量時間和精力在場上撿球,此單調而繁瑣的事情卻佔據一大部分的**時間。尤其對於專業**員,長時間反覆性的彎腰撿球不僅浪費訓練時間,也可能造成腰部疲勞或肌肉損傷。

鑒於以上,我們想研發一台智慧自動桌球拾取機器人,代替球員雙手拾球,使**員能夠更有效率地訓練,而業餘者也能省免撿球麻煩而享受對打樂趣。此機器人主要用於一般性的娛樂或訓練場地等,自動尋找並拾取場上大數量的桌球,並將球供給球員。由於正式專業的桌球比賽上,為了確保賽場內無干擾物,球場上只允許有一顆桌球,按照慣例球員須自行撿球。此場景中機器人反而會影響球賽,因此我們設計的拾取機器人並不會用於正式比賽上。

基於上述動機,我們需要考量以下問題:

  1. 自動撿桌球機器人的設計:我們須要設計一個能夠自主辨識、撿取和歸還球的機器人系統。這需要結合機器視覺、機器人控制、感知技術等多個領域的知識和技術,以確保機器人能夠正確地辨識並準確地撿取和歸還球。
  2. 效率和速度:自動撿桌球機器人的效率和速度對於其實用性至關重要。機器人的機構設計須最大程度地提高撿球效率,並且確保它在訓練場地中的操作速度足夠快,以滿足**員的需求。
  3. 動態避障:拾取機器人會在桌球場上快速移動,如何在機器人執行任務的同時避開**員也非常重要,若因避障影響撿球效率是可預期而難以避免的,然我們仍會思考如何更有效率地規劃避障演算法。

研究方法及步驟

1. 機構設計

機構目標是高效率地蒐集場上桌球,並能在機器內儲存至少200顆。初步的機構規劃可分為以下四個部分:

  • 差動底盤:負責機器的移動 差動底盤使用前方左右各一的膠輪作為主動輪,後方的兩顆萬向輪作為從動輪。這樣的配置讓機器能精確且快速地移動和轉向,同時後方的萬向輪在不影響機器轉向的前提下,能有效避免車體傾倒。另外,為了防止機器在移動過程中因地面不平整而打滑,作為主動輪的膠輪會採取懸吊的設計,使用彈簧進行避震。

  • intake機構:轉動滾筒蒐集地上桌球 負責蒐集場上桌球的 Intake 機構是機器人比賽中經常使用的設計,從文獻回顧的地方也可以看到不少現有機種也有使用,其特點是能夠快速地收集重量較輕的物體,非常適合本次計畫收集桌球的任務。我們計劃在機器的前端安裝三個較長的滾筒,這些滾筒由一顆直流馬達驅動,通過皮帶連接,使得它們能夠同時高速旋轉。當這些滾筒旋轉時,會一次性將多顆機器前方散落的桌球掃入機器體內,相較於現有機種intake只能一次捲入一顆,我們設計的機構能夠實現更快速且有效的蒐集任務。

  • 環形輸送帶:將桌球運送至集球倉 當桌球收集至機器體內後,我們會使用一個垂直的環形輸送帶來抬升這些桌球,靈感來源於水車。實現方式是在輸送帶上安裝許多籃子,使其沿著軌道循環,這些籃子會將桌球從機器體內抬升,然後將它們從集球倉的頂部落入集球倉中。這樣的設計可以將桌球穩定且快速地儲存到集球倉中,使得機器能夠持續進行蒐集任務。

  • 升降集球倉:用於儲存桌球。 桌球經由前面的流程落入集球倉內,基於一般桌球置球架的容量大概在200顆左右,所以我們訂定集球倉的預計容量也要達到至少200顆。同時,為了方便**員取球,集球倉會具有抬升功能,當**員需要使用時,集球倉將抬升至一個方便取球的高度。抬升的機構預計採取繩排伸縮,使用馬達將線材捲起,透過安裝在滑軌上的滑輪將整個集球倉拉起至足夠的高度,使**員可以不用彎腰,直接伸手從集球倉拿取乒乓球。此外,有時**員會用發球機進行訓練,因此集球倉的一側會由伺服馬達控制擋板,當集球倉抬升至發球機的高度時,擋板會放下,使得桌球因集球倉底部的傾斜而滾入發球機內,實現更加多樣化的功能。

2. 軟體架構

軟體端部分,首先機器人藉由深度相機獲取RGBD資訊,利用Ultralytics YOLOv8對RGB影像推論桌球相對於機身的位置,並透過座標轉換取得桌球與我機中心之位置。影像系統將資訊發佈給主程式後,交由其規劃目標點並發佈目標點給導航系統,導航會規劃到達目標點的行走路徑,包含最短路徑與動靜態避障之間的權衡,最後發佈底盤移動速度給STM微晶片控制板,並驅動無刷及直流馬達。

導航系統除了避障,另一部份是使用RGBD-SLAM建圖技術實現機器室內定位。這一切的軟體將交由上位機負責計算,我們採用能夠應對即時神經網絡辨識大量計算的Intel Alder Lake N95/i3-N300 iKOOLCORE R2 N300,它提供足夠的USB 3.2接口並支持4K@60fps的影像傳輸,並有被動冷卻設計,確保電腦能長時間在封閉的機器內部穩定運行而不熱當。

接著是定位系統,考慮到SLAM建圖技術有即時計算需求,將採用RTAB-map作為基礎開發,透過對較少被訪問到的地圖點放入LTM(Long-Term Memory)中以減少運算量;而導航系統,則使用典型的navigation stack導航架構,move_base庫以gmapping整合定位建圖資訊並存入靜態地圖,爾後透過對我機及動靜態障礙物設立膨脹層以形成costmap,規劃與目標點之最佳全局與區域路徑。最後,主程式負責接收遙控器指令,並在行走時整合所有資訊,作為各系統間的溝通橋樑。

軟體端開發環境上,我們選擇開發社群廣大且技術成熟的ROS(Robot Operating System),其豐富開源的軟體包可滿足本次計畫需求。影像處理系統,將透過訂閱由realsense-ros發佈的訊息,使用ROS的PCL庫稀疏化影像(VoxelGrid Filter),並配合DBSCAN聚類演算法分割不同物體之邊緣。

ROS開發過程中,可搭配其內建視覺化工具Rviz及Gazebo,協助開發經過濾後的遮罩影像,和觀察機器人在模擬環境中的避障表現,盡量降低實機測試之風險。另外,機器人的軟體開發皆將基於docker虛擬化技術之上,所開發之應用程序也將以容器形式啟動,目的是提升程序的便攜性,若未來機器有量產需求,可輕易移植於其他相同硬體架構之主機上。

3. 感測器、韌體以及通訊:

感測器與軔體(圖八中的淺橘色區塊)部分,機器人須配備廣角相機以盡可能地捕獲場地上乒乓球和**員的動態資訊。由於有YOLO深度學習和RGBD SLAM的建圖需求,相機必須同時獲取RGB8和深度資訊,我們研究後選擇Intel® RealSense™ depth camera D435,其自身搭載Vision Processor D4計算單元,能減輕上位機計算負擔,同時可使用官方開源Intel® RealSense™ SDK 2.0,增強開發靈活性與適應性。

另一方面,在韌體計算單元上,我們選擇基於ARM架構的STM32H723ZG微晶片,以滿足對多個直流馬達的速度控制和timer設定需求。同時,它也支援SPI、I2C、ETH及USART等多種通訊協議,其中UART協議將作為rosserial通訊接口基礎,作為STM端和上位機ROS端溝通橋梁。在開發上將使用STM32CubeIDE撰寫與燒錄韌體程式碼。

最後是遙控觸控螢幕,會安裝有Wi-Fi模組的ESP32,用於與機器人溝通。ESP32會接收螢幕按鈕上的觸控指令,並透過Wi-Fi發佈控制訊息給機器人。

預期結果

考慮到智慧自動桌球機器人的實用性及商品化,以下場景為使用者首次使用此機器人時,應有的預期操作模式與結果。

  • 安裝桌邊遙控器:使用者可根據操作手冊安裝遙控器於桌球桌邊。
  • 開機:透過遙控器喚醒機器人。
  • 建圖定位:機器人須對新環境探索並做建圖,作為日後行走之地圖依據。此時使用者須清空場地不必要阻礙物。使用者點擊「探索環境」後,機器人便進入建圖模式,測試相機與底盤馬達運作正常後,開始根據演算法隨機探索地圖並生成靜態地圖。當所有環境皆存入後,機器會回到原點,並顯示「探索結束」。此步驟只須執行一次。
  • 撿球模式:此模式須確保已執行過建圖定位。機器人在撿球模式中,機器人將在桌球場中尋找並蒐集桌球,使用者可調整機器人移動速度。機器人會持續在場上尋找與蒐集(即便沒有桌球),直至即將沒電、使用者呼叫、異物阻塞等情況機器人才會停止撿球。
  • 呼叫按鈕:使用者可隨時點擊觸控螢幕上的「呼叫」按鈕,機器人會立即停止當前工作,並移動至原點。
  • 供球模式:機器人將移動到球員身旁並佇立於原地,抬起集球箱供給球員進行發球練習。使用者可透過螢幕微調機器人的位置。
  • 倒球模式:或稱發球機模式。此模式會先確認使用者是否已安裝桌球發球機,或是否已在對面球桌安裝集球網。機器人會移動至合適位置,抬起集球箱後打開箱上之閘門,使球落入集球網中,供給桌球給發球機。

關於機器人在撿球表現上的預期細節,首先移動速度最高可至一米/秒,路徑上之桌球都能順利吸入機器內部,且整體運作聲音小於環境噪聲。集球倉預計至少可儲存200顆桌球,且不管何種位置或角度吸入桌球,機內之桌球流水線皆不會受到干涉。避障部分,若是於首次建圖中遇到之障礙物,將列為禁區而永不進入;若是於行進中遇到之新障礙物,將在一定距離時停止行走,並重新規劃新路徑行走。由於避障系統的核心訴求是「不可對使用者造成任何傷害」,因此我們會以安全為最高原則開發,若因避障影響撿球效率是可預期而難以避免的,然我們仍會思考如何更有效率地規劃避障演算法。

ttennis-pickup-robot's People

Contributors

pomelo925 avatar

Stargazers

YuShan avatar  avatar Assume-Zhan avatar  avatar

Watchers

 avatar  avatar

Forkers

sichitong

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.