{"id":40708884,"url":"https://github.com/leggedrobotics/semantic_front_end_filter","last_synced_at":"2026-01-21T12:38:19.195Z","repository":{"id":327911806,"uuid":"472711972","full_name":"leggedrobotics/semantic_front_end_filter","owner":"leggedrobotics","description":null,"archived":false,"fork":false,"pushed_at":"2025-01-29T13:37:40.000Z","size":99134,"stargazers_count":7,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"public","last_synced_at":"2025-12-10T09:57:11.906Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leggedrobotics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-03-22T10:16:05.000Z","updated_at":"2025-06-03T04:37:55.000Z","dependencies_parsed_at":"2025-12-10T10:03:11.869Z","dependency_job_id":null,"html_url":"https://github.com/leggedrobotics/semantic_front_end_filter","commit_stats":null,"previous_names":["leggedrobotics/semantic_front_end_filter"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/leggedrobotics/semantic_front_end_filter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leggedrobotics%2Fsemantic_front_end_filter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leggedrobotics%2Fsemantic_front_end_filter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leggedrobotics%2Fsemantic_front_end_filter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leggedrobotics%2Fsemantic_front_end_filter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leggedrobotics","download_url":"https://codeload.github.com/leggedrobotics/semantic_front_end_filter/tar.gz/refs/heads/public","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leggedrobotics%2Fsemantic_front_end_filter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28632942,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T04:47:28.174Z","status":"ssl_error","status_checked_at":"2026-01-21T04:47:22.943Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-21T12:38:18.641Z","updated_at":"2026-01-21T12:38:19.190Z","avatar_url":"https://github.com/leggedrobotics.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  Semantic Pointcloud Filter\n  \u003cbr\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-GPLv3-blue.svg\" alt=\"License: GPL v3\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://sites.google.com/leggedrobotics.com/semantic-pointcloud-filter?usp=sharing\"\u003e[Project page]\u003c/a\u003e \u0026nbsp; \n  \u003ca href=\"https://arxiv.org/abs/2305.07995\"\u003e[Paper]\u003c/a\u003e \u0026nbsp; \n  \u003ca href=\"https://drive.google.com/file/d/1MjcNVJ2iwSdw3h5Z6QahUG4deMm8cr8H/view?usp=sharing\"\u003e[Data]\u003c/a\u003e \u0026nbsp; \n  \u003ca href=\"https://youtu.be/y56zwSrnJTg\"\u003e[Video]\u003c/a\u003e\n\u003c/p\u003e\n\n![Overview](./intro.png)\n\nOfficial implementation of paper **Seeing Through the Grass: Semantic Pointcloud Filter for Support Surface Learning**. Here you can find the code for SPF training and the self-supervised label genration.\n\n## Installation\n\n### Dependencies\ncreate and activate conda environment\n\n```bash\nconda env create -f environment.yaml\nconda activate spf_venv\n```\nIf you want to visulize the reconstruced support surface created by Gaussian Process, you also need to install the [msgpack-c](https://github.com/msgpack/msgpack-c/tree/cpp_master). And add the [grid_map](https://github.com/ANYbotics/grid_map) packages into your catkin workspace. \n\n### Install SPF\n\n```bash\ncd semantic_front_end_filter\npip install -e .\n``` \n\n## Getting started\n\n### Self-supervised label generation\nFor the details of how to reconstruct the support surface from the robot feet trajectories, see [here](https://github.com/leggedrobotics/semantic_front_end_filter/tree/public/semantic_front_end_filter/utils/labelling).\n\n### Dataset structure\nYou can download our training data from [here](https://drive.google.com/drive/folders/1tRlrYeos8YdGmtDGacB-2Bt_fNqFKyHx), which we build on data collected from Perugia, Italy.\n\nThis dataset contains six trajectories: three for training and three for evaluation. To visualize a single data point from any trajectory, use the following command:\n```bash\npython semantic_front_end_filter/scripts/dataset_vis.py --data_path \u003cpath-to-data-folder\u003e\n```\nThis will display an image like the one shown below:\n![Overview](./dataset_vis.png)\n- **Left column**: Model input for the SPF network.\n- **Right column**: Ground truth labels needed for training. \n  - SSDE Label: Support Surface Depth Estimation (mean and variance)\n  - SSSeg Label: Support Surface Semantic Segmentation (Obstacles vs. Support Surface)\n\n### Train model \nFor your own robot, you need to raycast the reconstructed support surface in the camera point of view to get the supervison label for depth estimation. \n\nTo starting training, run\n\n```bash\npython semantic_front_end_filter/scripts/train.py --data_path \u003cpath-to-data-folder\u003e\n```\nTo validate the trained model, run\n```bash\npython semantic_front_end_filter/scripts/eval.py --model \u003cpath-to-model-folder\u003e --outdir \u003cpath-to-save-the-eveluation-plot\u003e --data_path \u003cpath-to-data-folder\u003e\n```\nOur trained model can be downloaded [here](https://drive.google.com/drive/folders/1N1dHvVLqcGxWwW_Jcsr1a0xgog58q9Xg?usp). Please remember to download the whole folder.\n\n## Citing this work\n```bibtex\n@ARTICLE{qiao23spf,\n  author={Li, Anqiao and Yang, Chenyu and Frey, Jonas and Lee, Joonho and Cadena, Cesar and Hutter, Marco},\n  journal={IEEE Robotics and Automation Letters}, \n  title={Seeing Through the Grass: Semantic Pointcloud Filter for Support Surface Learning}, \n  year={2023},\n  volume={8},\n  number={11},\n  pages={7687-7694},\n  doi={10.1109/LRA.2023.3320016}\n }\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleggedrobotics%2Fsemantic_front_end_filter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleggedrobotics%2Fsemantic_front_end_filter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleggedrobotics%2Fsemantic_front_end_filter/lists"}