Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@

- [ ] Write documentation
- [ ] Create issues for future work
- [ ] This PR is on our `DDLitLab` project board
- [ ] This PR is on our [SoccerDiffusion](https://github.com/orgs/bit-bots/projects/26) project board
2 changes: 1 addition & 1 deletion .github/workflows/test-dataset.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:

- name: Setup DB with alembic migrations
run: |
cd ./ddlitlab2024/dataset
cd ./soccer_diffusion/dataset
poetry run alembic upgrade head

- name: Populate DB with dummy data
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ ENV/
*.pth

# Wandb Logs
ddlitlab2024/ml/training/wandb/
soccer_diffusion/ml/training/wandb/

# Input data
input/
4 changes: 2 additions & 2 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"type": "debugpy",
"request": "launch",
"name": "Launch Bit-Bots import",
"program": "${workspaceFolder}/ddlitlab2024/dataset/cli/run.py",
"program": "${workspaceFolder}/soccer_diffusion/dataset/cli/run.py",
"args": [
"import",
"bit-bots",
Expand All @@ -15,7 +15,7 @@
"type": "debugpy",
"request": "launch",
"name": "Launch B-Human import",
"program": "${workspaceFolder}/ddlitlab2024/dataset/cli/run.py",
"program": "${workspaceFolder}/soccer_diffusion/dataset/cli/run.py",
"args": [
"import",
"b-human",
Expand Down
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,19 @@
"bigendian",
"dateutil",
"ddlitlab",
"denoising",
"dtype",
"dtypes",
"frombuffer",
"gamestate",
"ignoretz",
"mcap",
"nanosec",
"ndarray",
"ndim",
"nullable",
"ollama",
"pretraining",
"pybh",
"rclpy",
"resampler",
Expand Down
23 changes: 15 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
# DDLitLab2024 Project Hamburg Bit-Bots
# SoccerDiffusion

End-to-end machine learning for soccer-playing robots. We are experimenting with diffusion-models to generate robot motions based on recent sensor measurements.
> Toward Learning End-to-End Humanoid Robot Soccer from Gameplay Recordings

> [!IMPORTANT]
> This is still an ongioing research project.
Find our (preprint) paper and more information about the project on our [website](https://bit-bots.github.io/SoccerDiffusion/).

> [!NOTE]
> This repository contains the source code for our [DDLitLab project](https://www.isa.uni-hamburg.de/ddlitlab.html) [Fußballspielende Roboter: Ende-zu-Ende-KI für Wahrnehmung und Steuerung im RoboCup](https://www.isa.uni-hamburg.de/ddlitlab/data-literacy-studierendenprojekte/vierte-foerderrunde/e2e-robot-soccer.html) for the fourth funding round.
> [!IMPORTANT]
> This is still an ongoing research project.

## Getting Started

Expand All @@ -19,13 +18,13 @@ End-to-end machine learning for soccer-playing robots. We are experimenting with
1. Download this repo:

```shell
git clone https://github.com/bit-bots/ddlitlab2024.git
git clone https://github.com/bit-bots/SoccerDiffusion.git
```

2. Go into the downloaded directory:

```shell
cd ddlitlab2024
cd soccer_diffusion
```

3. Install dependencies using [poetry](https://python-poetry.org/docs/#installation):
Expand Down Expand Up @@ -55,3 +54,11 @@ Some tools contained in this repository require additional system-dependencies.
```

Then build the Python package as described in [this document](https://docs.b-human.de/master/python-bindings/#local-build).

## Acknowledgements

We gratefully acknowledge funding and support from the project [*Digital and Data Literacy in Teaching Lab (DDLitLab)*](https://www.hcl.uni-hamburg.de/ddlitlab.html) at the University of Hamburg and the [*Stiftung Innovation in der Hochschullehre*](https://stiftung-hochschullehre.de/) foundation.
We extend our special thanks to the members of the [*Hamburg Bit-Bots*](https://bit-bots.de/) RoboCup team for their continuous support and for providing data and computational resources.
We also thank the RoboCup teams [*B-Human*](https://b-human.de/) and [*HULKs*](https://hulks.de/) for generously sharing their data for this research.
Additionally, we are grateful to the [*Technical Aspects of Multimodal Systems (TAMS)*](https://tams.informatik.uni-hamburg.de/) research group at the University of Hamburg for providing computational resources.
This research was partially funded by the Ministry of Science, Research and Equalities of Hamburg, as well as the German Research Foundation (DFG) and the National Science Foundation of China (NSFC) through the project [*Crossmodal Learning*](https://www.crossmodal-learning.org/home.html) (TRR-169).
817 changes: 425 additions & 392 deletions poetry.lock

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

[tool.poetry]
name = "ddlitlab2024"
version = "0.0.1"
name = "soccer_diffusion"
version = "1.0.0"
readme = "README.md"
repository = "https://github.com/bit-bots/ddlitlab2024"
repository = "https://github.com/bit-bots/SoccerDiffusion"
authors = ["Florian Vahl", "Jan Gutsche", "Joern Griepenburg"]
description = ""

Expand Down Expand Up @@ -60,4 +60,4 @@ line-length = 120
select = ["F", "E", "B", "W", "I", "N", "UP"]

[tool.poetry.scripts]
cli = "ddlitlab2024.dataset.cli.run:main"
cli = "soccer_diffusion.dataset.cli.run:main"
8 changes: 5 additions & 3 deletions ddlitlab2024/__init__.py → soccer_diffusion/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
from pathlib import Path
from uuid import UUID, uuid4

_project_name: str = "ddlitlab2024"
_project_name: str = "soccer_diffusion"
__version__: str = importlib.metadata.version(_project_name)

# Craft LOGGING PATH
# Get the log directory from the environment variable or use the default
_logging_dir: str = os.path.abspath(
os.environ.get("DDLITLAB_LOG_DIR", os.path.join(os.path.dirname(__file__), "..", "logs"))
os.environ.get("SOCCER_DIFFUSION_LOG_DIR", os.path.join(os.path.dirname(__file__), "..", "logs"))
)

# Verify that the log directory exists and create it if it doesn't
Expand Down Expand Up @@ -40,7 +40,9 @@

SESSION_ID: UUID = uuid4()

DB_PATH: Path = Path(os.environ.get("DDLITLAB_DB_PATH", Path.joinpath(Path(__file__).parent, "dataset", "db.sqlite3")))
DB_PATH: Path = Path(
os.environ.get("SOCCER_DIFFUSION_DB_PATH", Path.joinpath(Path(__file__).parent, "dataset", "db.sqlite3"))
)

DEFAULT_RESAMPLE_RATE_HZ = 50
IMAGE_MAX_RESAMPLE_RATE_HZ = 10
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from rich.logging import RichHandler

from ddlitlab2024 import LOGGING_PATH, SESSION_ID
from soccer_diffusion import LOGGING_PATH, SESSION_ID

MODULE_NAME: str = "dataset"

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
from enum import Enum
from pathlib import Path

from ddlitlab2024 import DB_PATH
from ddlitlab2024.dataset.errors import CLIArgumentError
from soccer_diffusion import DB_PATH
from soccer_diffusion.dataset.errors import CLIArgumentError


class ImportType(str, Enum):
Expand All @@ -29,7 +29,7 @@ def values(cls):

class CLIArgs:
def __init__(self):
self.parser = ArgumentParser(description="ddlitlab dataset CLI")
self.parser = ArgumentParser(description="soccer_diffusion dataset CLI")
self.set_global_args(self.parser)

subparsers = self.parser.add_subparsers(dest="command", help="Command to run")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,26 @@

from rich.console import Console

from ddlitlab2024 import DEFAULT_RESAMPLE_RATE_HZ, IMAGE_MAX_RESAMPLE_RATE_HZ, __version__
from ddlitlab2024.dataset import logger
from ddlitlab2024.dataset.cli.args import CLIArgs, CLICommand, DBCommand, ImportType
from ddlitlab2024.dataset.converters.game_state_converter.b_human_game_state_converter import BHumanGameStateConverter
from ddlitlab2024.dataset.converters.game_state_converter.bit_bots_game_state_converter import BitBotsGameStateConverter
from ddlitlab2024.dataset.converters.image_converter import BHumanImageConverter, BitbotsImageConverter, ImageConverter
from ddlitlab2024.dataset.converters.synced_data_converter import SyncedDataConverter
from ddlitlab2024.dataset.db import Database
from ddlitlab2024.dataset.imports.model_importer import ImportStrategy
from ddlitlab2024.dataset.resampling.max_rate_resampler import MaxRateResampler
from ddlitlab2024.dataset.resampling.original_rate_resampler import OriginalRateResampler
from ddlitlab2024.dataset.resampling.previous_interpolation_resampler import PreviousInterpolationResampler
from soccer_diffusion import DEFAULT_RESAMPLE_RATE_HZ, IMAGE_MAX_RESAMPLE_RATE_HZ, __version__
from soccer_diffusion.dataset import logger
from soccer_diffusion.dataset.cli.args import CLIArgs, CLICommand, DBCommand, ImportType
from soccer_diffusion.dataset.converters.game_state_converter.b_human_game_state_converter import (
BHumanGameStateConverter,
)
from soccer_diffusion.dataset.converters.game_state_converter.bit_bots_game_state_converter import (
BitBotsGameStateConverter,
)
from soccer_diffusion.dataset.converters.image_converter import (
BHumanImageConverter,
BitbotsImageConverter,
ImageConverter,
)
from soccer_diffusion.dataset.converters.synced_data_converter import SyncedDataConverter
from soccer_diffusion.dataset.db import Database
from soccer_diffusion.dataset.imports.model_importer import ImportStrategy
from soccer_diffusion.dataset.resampling.max_rate_resampler import MaxRateResampler
from soccer_diffusion.dataset.resampling.original_rate_resampler import OriginalRateResampler
from soccer_diffusion.dataset.resampling.previous_interpolation_resampler import PreviousInterpolationResampler

err_console = Console(stderr=True)

Expand All @@ -36,7 +44,7 @@ def main():
logger.debug(f"Parsed CLI args: {args}")

if args.version:
logger.info(f"running ddlitlab2024 CLI v{__version__}")
logger.info(f"running soccer_diffusion CLI v{__version__}")
sys.exit(0)

should_create_schema = args.command == CLICommand.DB and args.db_command == DBCommand.CREATE_SCHEMA
Expand All @@ -46,17 +54,17 @@ def main():
case CLICommand.DB:
match args.db_command:
case DBCommand.RECORDING2MCAP:
from ddlitlab2024.dataset.recording2mcap import recording2mcap
from soccer_diffusion.dataset.recording2mcap import recording2mcap

recording2mcap(db.session, args.recording, args.output_dir)

case DBCommand.DUMMY_DATA:
from ddlitlab2024.dataset.dummy_data import insert_dummy_data
from soccer_diffusion.dataset.dummy_data import insert_dummy_data

insert_dummy_data(db.session, args.num_recordings, args.num_samples_per_rec, args.image_step)

case CLICommand.IMPORT:
from ddlitlab2024.dataset.imports.model_importer import ImportMetadata, ModelImporter
from soccer_diffusion.dataset.imports.model_importer import ImportMetadata, ModelImporter

import_strategy: ImportStrategy
import_path: Path = Path(args.file)
Expand All @@ -65,7 +73,7 @@ def main():

match args.type:
case ImportType.BIT_BOTS:
from ddlitlab2024.dataset.imports.strategies.bit_bots import BitBotsImportStrategy
from soccer_diffusion.dataset.imports.strategies.bit_bots import BitBotsImportStrategy

logger.info(f"Trying to import file '{args.file}' to database...")

Expand All @@ -90,7 +98,7 @@ def main():
)

case ImportType.B_HUMAN:
from ddlitlab2024.dataset.imports.strategies.b_human import BHumanImportStrategy
from soccer_diffusion.dataset.imports.strategies.b_human import BHumanImportStrategy

metadata = ImportMetadata(
allow_public=False,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from abc import ABC, abstractmethod

from ddlitlab2024.dataset.imports.data import InputData, ModelData
from ddlitlab2024.dataset.models import Recording
from ddlitlab2024.dataset.resampling.resampler import Resampler
from soccer_diffusion.dataset.imports.data import InputData, ModelData
from soccer_diffusion.dataset.models import Recording
from soccer_diffusion.dataset.resampling.resampler import Resampler


class Converter(ABC):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from enum import Enum, auto

from ddlitlab2024.dataset import logger
from ddlitlab2024.dataset.converters.converter import Converter
from ddlitlab2024.dataset.imports.data import InputData, ModelData
from ddlitlab2024.dataset.models import GameState, Recording, RobotState, TeamColor
from ddlitlab2024.dataset.resampling.original_rate_resampler import OriginalRateResampler
from soccer_diffusion.dataset import logger
from soccer_diffusion.dataset.converters.converter import Converter
from soccer_diffusion.dataset.imports.data import InputData, ModelData
from soccer_diffusion.dataset.models import GameState, Recording, RobotState, TeamColor
from soccer_diffusion.dataset.resampling.original_rate_resampler import OriginalRateResampler

# ruff: noqa: N815

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from enum import Enum

from ddlitlab2024.dataset import logger
from ddlitlab2024.dataset.converters.converter import Converter
from ddlitlab2024.dataset.imports.data import InputData, ModelData
from ddlitlab2024.dataset.models import GameState, Recording, RobotState, TeamColor
from ddlitlab2024.dataset.resampling.original_rate_resampler import OriginalRateResampler
from soccer_diffusion.dataset import logger
from soccer_diffusion.dataset.converters.converter import Converter
from soccer_diffusion.dataset.imports.data import InputData, ModelData
from soccer_diffusion.dataset.models import GameState, Recording, RobotState, TeamColor
from soccer_diffusion.dataset.resampling.original_rate_resampler import OriginalRateResampler


class GameStateMessage(int, Enum):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import cv2
import numpy as np

from ddlitlab2024.dataset import logger
from ddlitlab2024.dataset.converters.converter import Converter
from ddlitlab2024.dataset.imports.data import InputData, ModelData
from ddlitlab2024.dataset.models import DEFAULT_IMG_SIZE, Image, Recording
from ddlitlab2024.dataset.resampling.max_rate_resampler import MaxRateResampler
from soccer_diffusion.dataset import logger
from soccer_diffusion.dataset.converters.converter import Converter
from soccer_diffusion.dataset.imports.data import InputData, ModelData
from soccer_diffusion.dataset.models import DEFAULT_IMG_SIZE, Image, Recording
from soccer_diffusion.dataset.resampling.max_rate_resampler import MaxRateResampler


class ImageConverter(Converter, abc.ABC):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from ddlitlab2024.dataset.converters.converter import Converter
from ddlitlab2024.dataset.imports.data import InputData, ModelData
from ddlitlab2024.dataset.models import JointCommands, JointStates, Recording, Rotation
from ddlitlab2024.dataset.resampling.previous_interpolation_resampler import PreviousInterpolationResampler
from ddlitlab2024.utils.utils import shift_radian_to_positive_range
from soccer_diffusion.dataset.converters.converter import Converter
from soccer_diffusion.dataset.imports.data import InputData, ModelData
from soccer_diffusion.dataset.models import JointCommands, JointStates, Recording, Rotation
from soccer_diffusion.dataset.resampling.previous_interpolation_resampler import PreviousInterpolationResampler
from soccer_diffusion.utils.utils import shift_radian_to_positive_range


class SyncedDataConverter(Converter):
Expand Down
4 changes: 2 additions & 2 deletions ddlitlab2024/dataset/db.py → soccer_diffusion/dataset/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
from sqlalchemy import Engine, create_engine, event
from sqlalchemy.orm import Session, sessionmaker

from ddlitlab2024.dataset import logger
from ddlitlab2024.dataset.models import Base
from soccer_diffusion.dataset import logger
from soccer_diffusion.dataset.models import Base


@event.listens_for(Engine, "connect")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
from sqlalchemy.orm import Session
from tqdm import tqdm

from ddlitlab2024.dataset import logger
from ddlitlab2024.dataset.models import (
from soccer_diffusion.dataset import logger
from soccer_diffusion.dataset.models import (
GameState,
Image,
JointCommands,
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from dataclasses import dataclass, field
from typing import Any

from ddlitlab2024.dataset.models import GameState, Image, JointCommands, JointStates, Recording, Rotation
from ddlitlab2024.utils.utils import camelcase_to_snakecase
from soccer_diffusion.dataset.models import GameState, Image, JointCommands, JointStates, Recording, Rotation
from soccer_diffusion.utils.utils import camelcase_to_snakecase


def joints_dict_from_msg_data(joints_data: list[tuple[str, float]]) -> dict[str, float]:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from abc import ABC, abstractmethod
from pathlib import Path

from ddlitlab2024.dataset.converters.converter import Converter
from ddlitlab2024.dataset.db import Database
from ddlitlab2024.dataset.imports.data import ImportMetadata, ModelData
from soccer_diffusion.dataset.converters.converter import Converter
from soccer_diffusion.dataset.db import Database
from soccer_diffusion.dataset.imports.data import ImportMetadata, ModelData


class ImportStrategy(ABC):
Expand Down
Loading
Loading