Skip to content
View gaoshenghan1130's full-sized avatar

Highlights

  • Pro

Organizations

@sjtu-src @agora-systems

Block or report gaoshenghan1130

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don't include any personal information such as legal names or email addresses. Markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
gaoshenghan1130/README.md

Hi, I'm Gao Shenghan

About Me

Skills

Core

  • Python
  • C++
  • STM32
  • Node.js / Express
  • Git & CI/CD
  • SQL & REST APIs
  • Unity

And More...

  • Backend & Systems: CMake, Express, REST APIs, SQL, Git, CI/CD, Multithreading, Network Programming, UDP, ROS2
  • Tools & Practices: Unit Testing, Qt, OOP, Unity, Unix/Linux, Neovim, Vim, VSCode, STM32CubeIDE, Microsoft Visual Studio, Docker & Containerization, NumPy / SciPy / Pandas
  • Programming: Lua, JavaScript, Java, MATLAB, Mathematica, C#, Elm, HTML/CSS, Functional Programming, Asynchronous Programming, Memory Management (C/C++), Linux/Macos Shell Scripting,
  • Robotics & Embedded: Arduino, Real-Time Systems, Pybind11, Protobuf, Control Systems, Bluetooth, Serial Communication, IMU, Kalman Filter, PID Control, Sensor Fusion, Path Planning(D*)

Contact

Project Portfolio

⭐️ Feel free to check out my projects and contributions!

Robotics and Embedded Systems
Web(Backend) Development and Software Design
Embedded Systems

Project Lists

Robotics & Embedded Systems

RoboCup SSL Team - SJTU SRC (2023-2024)

Role: Software Team Leader – overseeing full software architecture and integration

  • Determine software architecture and module division
  • Decide on orientation of softw
  • Lead final code review and debugging
  • Ensure system reliability and maintainability

Task Stack: C++, Python, Lua, Qt, Google Protobuf, OOP, Data Structures & Algorithms, Real Time Systems, Git, Unit Testing, Multithreading, Network Programming, UDP, CMake

A comprehensive overhaul of the software architecture for the RoboCup Small Size League team at SJTU, featuring recursive skill structures and two levels of FSM (Finite State Machine). Key contributions include:

  • UDP Python Server for using Python libraries in a C++ codebase:

    • Multiprocessing architecture to handle client connections across threads and overcome GIL limitations for maximum performance
    • Asynchronous I/O for Python module communication (using asyncio)
    • RRCC (Request–Response–Confirm–ConfirmContinue) protocol for reliable communication; see PyModule Protobuf Definition and RRCC (original Chinese version here)
    • Qt signal-slot wrapper for asynchronous communication on the C++ side
    • QThread wrapper for singleton thread pool management with direct return values from thread calls using hashed name-mapping, protected by mutex
    • Unit testing for each module to ensure reliability and correctness
  • Best Advancer Matcher Algorithm:

    • Accounts for dynamic positions of robots and the ball
    • Solves a quartic equation (fourth-degree polynomial) using Ferrari's method in O(1) time complexity for best advancer selection
    • Achieved a 20% improvement in successful pass rate based on past failure logs
  • Chip Location Prediction with a Single Camera:

    • Kalman filter for ball state estimation and prediction
    • Parabolic trajectory approximation using the least squares method (utilizing the Python server module above)
    • ±0.3 m accuracy in chip location prediction near the field boundaries; less accurate directly under the camera due to limited information, but sufficient for most field positions

RoboCup SSL Team - SJTU SRC (2025)

Role: Software Team Leader (same as above)

Task Stack: Python, CMake, Qt, Pybind11, OOP, Unit Testing, Finite State Machine, Data Structures & Algorithms

A next-generation software architecture for the RoboCup Small Size League team at SJTU, designed to enhance motion control, REPLACEING LUA WITH PYTHON, and improve overall system robustness. Key contributions include:

  • Portation from Linux to Windows-Linux Cross Platform (Not using WSL, but rewriting CMakeLists.txt and codebase for Windows compatibility)

    • Reconfigure some of third party libraries for Windows compatibility and modern CMake usage and toolchains, listing in my respository including a old versiono of ODE (later found better version in vcpkg), and vartypes (provided by the Robocup Official without a Windowsos version).
    • Rewrite CMakeLists.txt in all modules, create a top-level CMakeLists.txt to manage all submodules, enable compilation either with each module or all-in-one.
    • Optimize cmake sturcture, create function automatically to recursively add all source files in a directory to target, avoiding manual adding. Shortening code size each module from 200-400 lines to less than 100 lines.
    • Refactor config-time generation of protobuf, lua and python bindings to compile time generation, monitoring changes in proto/lua/py files and auto-regenerate corresponding cpp/h files.
  • Python Based FSM (Finite State Machine) for better modularity and maintainability(original Chinese version here):

    • Each skill is represented as a state in the FSM, allowing for clear transitions and encapsulation of behavior
    • Simplifies the addition of new skills and modification of existing ones without affecting the overall system
  • Modular Motion Test System Framework for new member D* Argorithm training and testing

    • Modular design allows for easy integration of new motion algorithms and testing scenarios
    • Provides a controlled environment for algorithm development and performance evaluation
    • CRTP(Curiously Recurring Template Pattern) based design for compile-time polymorphism, reducing runtime overhead, maintaining shorter and more readable code
    • Debug Engine based Vim-like UI for real-time parameter tuning and visualization
    • Unit Testing for motion algorithms to ensure reliability and correctness

MRoboSub Team - UMich

Role: Software Developer – focusing on embedded systems and ROS2 integration

Task Stack: Python, ROS2, Real-Time Systems, Git, Unit Testing

  • Refactor Teleop Control Module for improved responsiveness and reliability

    • Reconstruct yaml file for parameter management: tie buttons to commands instead of commands to buttons, allowing for easier remapping and customization, reducing code size by 60%
  • Ongoing...

Web(Backend) Development and Software Design

IEEE Student Branch - UMich

Role: Full Stack Developer – development of the branch's official website

Task Stack: Node.js/Express, SQL, REST APIs, JavaScript, HTML/CSS, Git, CI/CD

  • Point System for Event Participation:
    • Backend API development using Node.js and Express
    • SQL database design for storing user points and event data
    • RESTful API endpoints for point retrieval and updates
    • Currently working on call UMich API for authentication and user data integration

Personal/Small Team Projects

Role: Full Stack Developer, Game Developer, Project Manager

Task Stack: Elm, Functional Programming, Git, HTML/CSS, JavaScript

  • Java Based MySQL Client GUI

    • Developed a Java Swing application for managing MySQL databases
    • Implemented for collaborators unable to use command line tools (Intended for backend setup and management for IEEE Student Branch website)
    • Features include database connection management, query execution, and result visualization
  • Time Wield - Time Travel Game: A course team project for ENGR1000J in SJTU. The game features a unique time travel mechanic that allows players to accelerate or slow down time to solve puzzles and navigate through levels. This link is avaiable only with SJTU account, but the product can be found on offical course website. Key contributions include:

    • Refactor OOP structure in Messager Engine, enabling easy addition of new message types and handlers, and connection between specific objects.
    • Rewrite logics in game engine, separating rendering collision detection and game logic collision detection, optimizing performance by 5000 times. Camera system combined with reduced collision detection area, further improving performance.
  • After Dusk - 3D Unity Puzzle Game: A team project for a game design competition hosted by SJTU GameJam Club. Featuring a Mother and Daughter duo solving puzzles, with their actions mirroring each other. The club is no longer maintaining their website, so the link has lost. Key contributions include:

    • Design and implement the dual moving mechanism
    • Develop puzzle mechanics and level design

Embeded Systems

STM32 Microcontroller Applications in Unicycles

Role: Research Assistant – exploring STM32 microcontroller applications in unicycles, mentored by Prof. Orosz.

Task Stack: C, Embedded Systems, Real-Time Systems, Control Systems, STM32, Serial Communication, Bluetooth, Git

  • Serial Communication Module for real-time data transmission:

    • Convert TTL to RS485 for long-distance communication, raising voltage level to reduce noise interference, and establishing links between STM32WB55 Core Board and Client Motor
    • Debugging console with SWV (Serial Wire Viewer) for real-time monitoring and logging
    • Currently implementing Bluetooth module integration for wireless control and data transmission
  • Cross IDE Config&Build System:

    • Wrapped a standard STM32 project with CMake for cross-IDE compatibility (supporting STM32CubeIDE, and VSCode)
    • Able to flash and debug directly from VSCode using Cortex-Debug extension or Command Line Instructions
  • IMU Integration and Sensor Fusion (Dumped)

    • Integrate BNO055 IMU for real-time orientation and motion data
    • Debugging for error out put for IMU data reading and calibration, finding out that tedious calibration is needed for accurate data
  • Fully Autonomous Unicycle Prototype with self-balancing and path-following capabilities (Goal for 2025-2026)

    • Mechanical design and assembly of the unicycle frame and components
    • Control algorithm development for self-balancing and navigation
    • Simulation and testing in a controlled environment
  • Ongoing...

Popular repositories Loading

  1. Unicycle Unicycle Public

    STM32 plugin for an unicycle

    C 2

  2. Math285_Project_Perfect_Pendulum Math285_Project_Perfect_Pendulum Public

    Render visualized solution to the tautochrone problem

    Elm

  3. student_info student_info Public

    A system to store student's infomations

    Java

  4. tutor_xza tutor_xza Public

    HTML

  5. ODE_modernRepair ODE_modernRepair Public

    ode是比较老的运动模型库,采用现代clang和CMake会有许多报错,这里提供一个修复版。

    C++

  6. VarTypes_Robocup VarTypes_Robocup Public

    grSim 的vartypes库十分的古老,只有一个源(https://github.com/szi/vartypes),可能是拆分了google的部分功能,在此保存一版

    C++