Skip to content

Navigation Menu

Sign in
Sign up

Latest commit

History

100 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CourtSweeper

A Vision-Based Tennis Ball Retriever with Dual-Roller Intake Mechanism

ouc_alt


I. Introduction

This repository contains the software and hardware integration code for an autonomous tennis ball collection robot. The system utilizes a Jetson Orin NX to process visual and spatial data. It identifies tennis balls using a YOLO26 vision model and navigates the environment using a ROS2-based SLAM implementation. The physical ball collection is executed by a custom dual-motor friction wheel mechanism. A native Swift iOS application serves as the user interface for telemetry visualization and emergency control.


II. Demonstration

demo


III. Project Structure

1. Mainbody

CourtSweeper/
├── doc/ # Development Logs
│ ├── figures/
│ └── log/
│ └─ development_log.md
├── paper/ # Report
│ ├── proj_proposal/
│ └── final_report/
├── ref/ # Reference
├── ROS/ # ROS-relative
│ ├── config/
│ └── map/
├── src/ # Source code
│ ├── chassis/
│ │ └── ...
│ ├── distance/
│ │ └── ...
│ ├── lidar/
│ │ └── ...
│ ├── map/
│ │ └── ...
│ ├── roller/
│ │ └── ...
│ ├── vision/
│ │ └── ...
│ ├── env_config.py
│ └── main.py
├── User Interface/ # Swift App
├── LICENSE
└── README.md

2. Submodule

Source code part

Vision Module
vision/
├── mlmodel/
│ ├── engine/ # TensorRT model
│ ├── onnx/ # ONNX model
│ └── pt/ # Pt model
│
├── training/ # model training-related
│ ├── dataset/
│ ├── runs/
│ ├── weight/
│ ├── dataset_collect.py
│ └── model_training.py
├── cv_config.py # cv-related env config
└── video_node.py # load vision model
Chassis Module
chassis/
├── chassis_ctrl.py # chassis mov ctrl
└── chassis_sub.py # chassis info sub
Distance Module
distance/
└── distance_sub.py # distance info sub
Lidar Module
lidar/
├── lidar_parse.py # RPLidar (test only)
└── x2_lidar_parse(deprecated).py # YDLidar (test only)
Map Module
map/
├── map_generation.py # slam mapping
├── map_navigation.py # slam navigation
└── workflow.md
Roller Module
roller/
├── roller_drive.py
└── roller_setting.ino # Arduino blink


User Interface part

User Interface (TODO)
User_Interface/
├── CourtSweeper.xcodeproj # Xcode project config
├── CourtSweeper/
│ ├── App/
│ │ └── CourtSweeperApp.swift # App entry point
│ │
│ ├── Models/
│ │ └── RobotCell.swift # Data model
│ │
│ ├── ViewModels/
│ │ └── RobotControlViewModel.swift # State management hub
│ │
│ ├── Views/
│ │ ├── RobotControlView.swift # Main control interface
│ │ └── Components/ # Reusable UI components folder
│ │ ├── VideoStreamCard.swift # Video player container
│ │ └── GridMatrixView.swift # Grid matrix container
│ │
│ └── Assets.xcassets/ # Media asset catalog

IV. System Details

  1. Hardware Architecture
  • Chassis Platform: A DJI RoboMaster chassis provides mobility, camera input, infrared sensor and wireless communication.
  • Edge Computing: A Jetson Orin NX serves as the primary computational platform. It operates headlessly using a display emulator and VNC.
  • Spatial Mapping: An RPLidar A1M8 transmits 2D spatial data via serial communication. Due to chassis occlusion, the functional field of view is restricted to a 180-degree forward-facing arc.
  • Actuation Control: An Arduino Uno acts as the lower-level microcontroller. It receives serial commands from the Jetson to drive the custom friction wheel intake mechanism using BTS7960 motor drivers and 755 motors.
  • Power Distribution: Power is physically isolated across three independent circuits to maintain electrical stability - Jetson Orin NX: 12V 6800mAh battery; Intake Mechanism: 11.1V 3S 5200mAh LiPo battery; RoboMaster Chassis: Factory default battery.
  1. Software Environment
  • Operating System: The system runs on Ubuntu 22.04 with JetPack 6.2.1.
  • Process Isolation: Vision and navigation stacks are isolated to prevent dependency conflicts.
  • Vision Stack: The YOLO26 model executes within a dedicated Conda environment.
  • Navigation Stack: ROS2 SLAM applications operate directly within the native system environment.
  • Communication Bridge: A custom ROS2 node handles cross-environment data exchange. It interfaces with a modified SDK (Robomaster-SDK-Ultra) compatible with newer Python versions to manage velocity commands, odometry calculations, TF broadcasting, and image stream publishing.

The core dependencies are listed below:

Environment Version
JetPack 6.2.1
Ubuntu 22.04 Jammy
CUDA 12.6.68
cuDNN 9.3.0.75
VPI 3.2.4
Vulkan 1.3.204
Python 3.10.12
OpenCV 4.11.0 with CUDA: YES
PyTorch 2.5.0a0+872d972e41.nv24.8 (torchvision 0.20.0a0+afc54f7)
TensorRT 10.3.0

V. Limitations and Future Work

  1. Due to fabrication constraints, the mechanical stability of the custom dual-friction wheel structure requires further optimization.
  2. SLAM mapping degrades in wide-open outdoor environments, leading to reduced navigation reliability.
  3. The communication bandwidth of the RoboMaster chassis limits data throughput, constraining high-frequency data processing.
  4. The current lidar configuration is restricted to a three-directional field of view. Future designs will implement an unoccluded 360-degree sensor placement.
  5. The iOS application requires further feature development and user interface refinements.

⚠️ License: This project isn't open-source. See Details LICENSE.

ouc2_alt

About

A Vision-Based Tennis Ball Retriever with Dual-Roller Intake Mechanism.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /