Repository files navigation

Overview of the Crowd Analysis Setup

Overview of the crowd analysis pipeline (placeholder)

This repository accompanies an academic publication, and an updated, improved version of the Crowdbot dataset. It provides a reproducible analysis pipeline for pedestrian behavior in crowds. By analyzing motion metrics and proxemics, we study differences between human–human interactions (HHI) and human–robot interactions (HRI) in crowded public spaces across the Crowdbot, JRDB, and SiT datasets.


Files & Folders

The repository layout is as follows (key items):

  • AB3DMOT/ — LiDAR-based tracking (package:ab3dmot), original repo: https://github.com/xinshuoweng/AB3DMOT
  • checkpoints/ — pre-trained detector weights (e.g., DR-SPAAM, Person_MinkUNet). Uploaded together with the dataset.
  • crowd_analysis/
    • crowd_behavior.ipynb — main analysis notebook with all motion metrics and proxemics analysis
  • datasets_configs/ — dataset configuration YAMLs
    • data_path_Crowdbot.yaml
    • data_path_JRDB.yaml
    • data_path_SiT.yaml
  • datasets_utils/ — dataset utilities (package:crowdbot_data) used by both environments
  • lidar_det_2D_3D/ — LiDAR detection (package:lidar_det) combining
  • rosbags_extraction/ — scripts for ROS bag processing
    • 1_Lidar_from_rosbags.py
    • 2_Pose_from_rosbags.py
    • 3_Detections_from_lidar.py
    • 4_Tracks_from_detections.py
    • Extract_gt_JRDB.py
    • Extract_SiT.py
  • run_pipeline.sh — script with a full processing pipeline for generating the input data
  • requirements.txt — Python packages installed into crowd_env

Dataset

Structure

graph LR;
ROOT[Dataset root];
ROOT-->CK[checkpoints/];
CK-->CKP[*.pth];
ROOT-->RB[rosbags/];
RB-->RBX[_defaced/];
RBX-->BAGS[.bag];
ROOT-->PR[processed/];
PR-->PRX[*_processed/];
PRX-->ALG[alg_res/];
ALG-->DET[detections/];
ALG-->TRK[tracks/];
PRX-->L3D[lidars/];
PRX-->L2D[lidars_2d/];
PRX-->PED[ped_data/];
PRX-->SRC[source_data/];
SRC-->TF[tf_robot/];
SRC-->TS[timestamp/];
Loading

Demo

ItemPreview
(a) Pedestrian trajectoriesTrajectories
(b) Motion metrics distributionsMetrics
(c) Minimum distance distributionsMinDist
(d) Linear minimum distance vs. robot velocityLinMinDist

Proposed/Recommended environment setup with tested package versions

Python version used: 3.8.10

Two Conda environments are used:

  • ros_env — ROS I/O from rosbags (bag reading, TF transforms, message types).
  • crowd_env — Deep-learning detection/tracking + analysis/visualization.

1) Create ros_env (RoboStack Noetic)

RoboStack brings ROS Noetic into Conda directly (guide: https://robostack.github.io/noetic.html).

mamba create -n ros_env -c conda-forge -c robostack-noetic ros-noetic-desktop ros-noetic-tf2-sensor-msgs
mamba activate ros_env
# Minimal math/transforms used by ros-side scripts
pip install scipy==1.16.2 numpy-quaternion==2024.0.12

RoboStack already provides the compiled message/runtime bits; no extra apt is needed.

2) Create crowd_env

Create the environment (CUDA 11.8 + PyTorch 2.0.0 as tested):

mamba create -n crowd_env python=3.8.10 ipykernel cuda-toolkit pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 setuptools=69.5.1 mkl=2023.2.0 mkl-include=2023.2.0 mkl-devel=2023.2.0 -c "nvidia/label/cuda-11.8.0" -c pytorch -c nvidia
mamba activate crowd_env
# Install remaining packages for crowd_env
pip install -r requirements.txt

TorchSparse (install from source — version 2.0.0)

torchsparse==2.0.0 is required for 3D detection and must be installed from source. See the official repository/instructions:
https://github.com/mit-han-lab/torchsparse

Ensure your PyTorch CUDA version is compatible (this setup uses CUDA 11.8 with PyTorch 2.0.0).

Local packages (editable installs)

  • Install in both ros_env and crowd_env:

    # Dataset Utils (package: crowdbot_data)
    mamba activate ros_env && pip install -e ./datasets_utils
    mamba activate crowd_env && pip install -e ./datasets_utils
  • Install only in crowd_env:

    # LiDAR Detection (package: lidar_det)
    pip install -e ./lidar_det_2D_3D
    # internal libs
    pip install -e ./lidar_det_2D_3D/lib/iou3d
    pip install -e ./lidar_det_2D_3D/lib/jrdb_det3d_eval
    # LiDAR-based Tracking (package: ab3dmot) — original repo: https://github.com/xinshuoweng/AB3DMOT
    pip install -e ./AB3DMOT

Pipeline overview

The repository provides .ipynb and .py processing scripts. They take as input processed rosbags or prepared LiDAR data from Crowdbot, JRDB, and SiT, and produce outputs in a unified Crowdbot data convention for crowd behavior analysis.

Four processing stages

  1. 1_Lidar_from_rosbags.py — For Crowdbot and JRDB: extracts 2D/3D LiDAR scans from rosbags and transforms them to the global frame. Saves synchronized LiDAR timestamps. (uses ros_env)
  2. 2_Pose_from_rosbags.py — For Crowdbot and JRDB: extracts robot pose, upsamples to 200 Hz, applies smoothing, and computes velocity, acceleration, and jerk. Synchronizes pose timestamps with LiDAR. (uses ros_env)
  3. 3_Detections_from_lidar.py — For Crowdbot, JRDB, and SiT: runs 2D (DR-SPAAM) and 3D (Person_MinkUNet) detectors on prepared LiDAR data (no rosbags). Produces 2D-only, 3D-only, and merged close–far detections. (uses crowd_env)
  4. 4_Tracks_from_detections.py — For Crowdbot, JRDB, and SiT: builds tracks with AB3DMOT from detections (no rosbags). Produces 2D/3D/merged tracks. (uses crowd_env)

Dataset-specific extractors

  • Extract_gt_JRDB.py — extracts ground truth for JRDB only.
  • Extract_SiT.py — extracts LiDAR, egomotion, and labels for SiT.

Automated full pipeline

bash run_pipeline.sh

References:

Please cite both the dataset as well as the publication if you use our dataset/repository in your work.

Crowdbot_v2 dataset

Wojcikiewicz, D., Billard, A., & Paez-Granados, D. (2025). CrowdBot_v2: Pedestrian–Robot crowd navigation dataset with pedestrian tracking (v2.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.17694140

Academic Publication

Wojcikiewicz D., Billard A., Paez-Granados D. Assessing pedestrian responses to autonomous and personal mobility robots in crowded public spaces. Science Advances (2026). https://doi.org/10.1126/sciadv.aef2576


Acknowledgment

This research work was partially supported by the Innosuisse Project 103.421 IP-IC "Developing an AI-enabled Robotic Personal Vehicle for Reduced Mobility Population in Complex Environments" and the JST Moonshot R&D [Grant Number JPMJMS2034-18].

About

Reproducible pipeline for analyzing pedestrian behavior and human–robot interactions across CrowdBot, JRDB, and SiT.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Overview of the Crowd Analysis Setup

Overview of the crowd analysis pipeline (placeholder)

This repository accompanies an academic publication, and an updated, improved version of the Crowdbot dataset. It provides a reproducible analysis pipeline for pedestrian behavior in crowds. By analyzing motion metrics and proxemics, we study differences between human–human interactions (HHI) and human–robot interactions (HRI) in crowded public spaces across the Crowdbot, JRDB, and SiT datasets.


Files & Folders

The repository layout is as follows (key items):

  • AB3DMOT/ — LiDAR-based tracking (package:ab3dmot), original repo: https://github.com/xinshuoweng/AB3DMOT
  • checkpoints/ — pre-trained detector weights (e.g., DR-SPAAM, Person_MinkUNet). Uploaded together with the dataset.
  • crowd_analysis/
    • crowd_behavior.ipynb — main analysis notebook with all motion metrics and proxemics analysis
  • datasets_configs/ — dataset configuration YAMLs
    • data_path_Crowdbot.yaml
    • data_path_JRDB.yaml
    • data_path_SiT.yaml
  • datasets_utils/ — dataset utilities (package:crowdbot_data) used by both environments
  • lidar_det_2D_3D/ — LiDAR detection (package:lidar_det) combining
  • rosbags_extraction/ — scripts for ROS bag processing
    • 1_Lidar_from_rosbags.py
    • 2_Pose_from_rosbags.py
    • 3_Detections_from_lidar.py
    • 4_Tracks_from_detections.py
    • Extract_gt_JRDB.py
    • Extract_SiT.py
  • run_pipeline.sh — script with a full processing pipeline for generating the input data
  • requirements.txt — Python packages installed into crowd_env

Dataset

Structure

graph LR;
ROOT[Dataset root];
ROOT-->CK[checkpoints/];
CK-->CKP[*.pth];
ROOT-->RB[rosbags/];
RB-->RBX[_defaced/];
RBX-->BAGS[.bag];
ROOT-->PR[processed/];
PR-->PRX[*_processed/];
PRX-->ALG[alg_res/];
ALG-->DET[detections/];
ALG-->TRK[tracks/];
PRX-->L3D[lidars/];
PRX-->L2D[lidars_2d/];
PRX-->PED[ped_data/];
PRX-->SRC[source_data/];
SRC-->TF[tf_robot/];
SRC-->TS[timestamp/];
Loading

Demo

ItemPreview
(a) Pedestrian trajectoriesTrajectories
(b) Motion metrics distributionsMetrics
(c) Minimum distance distributionsMinDist
(d) Linear minimum distance vs. robot velocityLinMinDist

Proposed/Recommended environment setup with tested package versions

Python version used: 3.8.10

Two Conda environments are used:

  • ros_env — ROS I/O from rosbags (bag reading, TF transforms, message types).
  • crowd_env — Deep-learning detection/tracking + analysis/visualization.

1) Create ros_env (RoboStack Noetic)

RoboStack brings ROS Noetic into Conda directly (guide: https://robostack.github.io/noetic.html).

mamba create -n ros_env -c conda-forge -c robostack-noetic ros-noetic-desktop ros-noetic-tf2-sensor-msgs
mamba activate ros_env
# Minimal math/transforms used by ros-side scripts
pip install scipy==1.16.2 numpy-quaternion==2024.0.12

RoboStack already provides the compiled message/runtime bits; no extra apt is needed.

2) Create crowd_env

Create the environment (CUDA 11.8 + PyTorch 2.0.0 as tested):

mamba create -n crowd_env python=3.8.10 ipykernel cuda-toolkit pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 setuptools=69.5.1 mkl=2023.2.0 mkl-include=2023.2.0 mkl-devel=2023.2.0 -c "nvidia/label/cuda-11.8.0" -c pytorch -c nvidia
mamba activate crowd_env
# Install remaining packages for crowd_env
pip install -r requirements.txt

TorchSparse (install from source — version 2.0.0)

torchsparse==2.0.0 is required for 3D detection and must be installed from source. See the official repository/instructions:
https://github.com/mit-han-lab/torchsparse

Ensure your PyTorch CUDA version is compatible (this setup uses CUDA 11.8 with PyTorch 2.0.0).

Local packages (editable installs)

  • Install in both ros_env and crowd_env:

    # Dataset Utils (package: crowdbot_data)
    mamba activate ros_env && pip install -e ./datasets_utils
    mamba activate crowd_env && pip install -e ./datasets_utils
  • Install only in crowd_env:

    # LiDAR Detection (package: lidar_det)
    pip install -e ./lidar_det_2D_3D
    # internal libs
    pip install -e ./lidar_det_2D_3D/lib/iou3d
    pip install -e ./lidar_det_2D_3D/lib/jrdb_det3d_eval
    # LiDAR-based Tracking (package: ab3dmot) — original repo: https://github.com/xinshuoweng/AB3DMOT
    pip install -e ./AB3DMOT

Pipeline overview

The repository provides .ipynb and .py processing scripts. They take as input processed rosbags or prepared LiDAR data from Crowdbot, JRDB, and SiT, and produce outputs in a unified Crowdbot data convention for crowd behavior analysis.

Four processing stages

  1. 1_Lidar_from_rosbags.py — For Crowdbot and JRDB: extracts 2D/3D LiDAR scans from rosbags and transforms them to the global frame. Saves synchronized LiDAR timestamps. (uses ros_env)
  2. 2_Pose_from_rosbags.py — For Crowdbot and JRDB: extracts robot pose, upsamples to 200 Hz, applies smoothing, and computes velocity, acceleration, and jerk. Synchronizes pose timestamps with LiDAR. (uses ros_env)
  3. 3_Detections_from_lidar.py — For Crowdbot, JRDB, and SiT: runs 2D (DR-SPAAM) and 3D (Person_MinkUNet) detectors on prepared LiDAR data (no rosbags). Produces 2D-only, 3D-only, and merged close–far detections. (uses crowd_env)
  4. 4_Tracks_from_detections.py — For Crowdbot, JRDB, and SiT: builds tracks with AB3DMOT from detections (no rosbags). Produces 2D/3D/merged tracks. (uses crowd_env)

Dataset-specific extractors

  • Extract_gt_JRDB.py — extracts ground truth for JRDB only.
  • Extract_SiT.py — extracts LiDAR, egomotion, and labels for SiT.

Automated full pipeline

bash run_pipeline.sh

References:

Please cite both the dataset as well as the publication if you use our dataset/repository in your work.

Crowdbot_v2 dataset

Wojcikiewicz, D., Billard, A., & Paez-Granados, D. (2025). CrowdBot_v2: Pedestrian–Robot crowd navigation dataset with pedestrian tracking (v2.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.17694140

Academic Publication

Wojcikiewicz D., Billard A., Paez-Granados D. Assessing pedestrian responses to autonomous and personal mobility robots in crowded public spaces. Science Advances (2026). https://doi.org/10.1126/sciadv.aef2576


Acknowledgment

This research work was partially supported by the Innosuisse Project 103.421 IP-IC "Developing an AI-enabled Robotic Personal Vehicle for Reduced Mobility Population in Complex Environments" and the JST Moonshot R&D [Grant Number JPMJMS2034-18].

About

Reproducible pipeline for analyzing pedestrian behavior and human–robot interactions across CrowdBot, JRDB, and SiT.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Overview of the Crowd Analysis Setup

Overview of the crowd analysis pipeline (placeholder)

This repository accompanies an academic publication, and an updated, improved version of the Crowdbot dataset. It provides a reproducible analysis pipeline for pedestrian behavior in crowds. By analyzing motion metrics and proxemics, we study differences between human–human interactions (HHI) and human–robot interactions (HRI) in crowded public spaces across the Crowdbot, JRDB, and SiT datasets.


Files & Folders

The repository layout is as follows (key items):

  • AB3DMOT/ — LiDAR-based tracking (package:ab3dmot), original repo: https://github.com/xinshuoweng/AB3DMOT
  • checkpoints/ — pre-trained detector weights (e.g., DR-SPAAM, Person_MinkUNet). Uploaded together with the dataset.
  • crowd_analysis/
    • crowd_behavior.ipynb — main analysis notebook with all motion metrics and proxemics analysis
  • datasets_configs/ — dataset configuration YAMLs
    • data_path_Crowdbot.yaml
    • data_path_JRDB.yaml
    • data_path_SiT.yaml
  • datasets_utils/ — dataset utilities (package:crowdbot_data) used by both environments
  • lidar_det_2D_3D/ — LiDAR detection (package:lidar_det) combining
  • rosbags_extraction/ — scripts for ROS bag processing
    • 1_Lidar_from_rosbags.py
    • 2_Pose_from_rosbags.py
    • 3_Detections_from_lidar.py
    • 4_Tracks_from_detections.py
    • Extract_gt_JRDB.py
    • Extract_SiT.py
  • run_pipeline.sh — script with a full processing pipeline for generating the input data
  • requirements.txt — Python packages installed into crowd_env

Dataset

Structure

graph LR;
ROOT[Dataset root];
ROOT-->CK[checkpoints/];
CK-->CKP[*.pth];
ROOT-->RB[rosbags/];
RB-->RBX[_defaced/];
RBX-->BAGS[.bag];
ROOT-->PR[processed/];
PR-->PRX[*_processed/];
PRX-->ALG[alg_res/];
ALG-->DET[detections/];
ALG-->TRK[tracks/];
PRX-->L3D[lidars/];
PRX-->L2D[lidars_2d/];
PRX-->PED[ped_data/];
PRX-->SRC[source_data/];
SRC-->TF[tf_robot/];
SRC-->TS[timestamp/];
Loading

Demo

ItemPreview
(a) Pedestrian trajectoriesTrajectories
(b) Motion metrics distributionsMetrics
(c) Minimum distance distributionsMinDist
(d) Linear minimum distance vs. robot velocityLinMinDist

Proposed/Recommended environment setup with tested package versions

Python version used: 3.8.10

Two Conda environments are used:

  • ros_env — ROS I/O from rosbags (bag reading, TF transforms, message types).
  • crowd_env — Deep-learning detection/tracking + analysis/visualization.

1) Create ros_env (RoboStack Noetic)

RoboStack brings ROS Noetic into Conda directly (guide: https://robostack.github.io/noetic.html).

mamba create -n ros_env -c conda-forge -c robostack-noetic ros-noetic-desktop ros-noetic-tf2-sensor-msgs
mamba activate ros_env
# Minimal math/transforms used by ros-side scripts
pip install scipy==1.16.2 numpy-quaternion==2024.0.12

RoboStack already provides the compiled message/runtime bits; no extra apt is needed.

2) Create crowd_env

Create the environment (CUDA 11.8 + PyTorch 2.0.0 as tested):

mamba create -n crowd_env python=3.8.10 ipykernel cuda-toolkit pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 setuptools=69.5.1 mkl=2023.2.0 mkl-include=2023.2.0 mkl-devel=2023.2.0 -c "nvidia/label/cuda-11.8.0" -c pytorch -c nvidia
mamba activate crowd_env
# Install remaining packages for crowd_env
pip install -r requirements.txt

TorchSparse (install from source — version 2.0.0)

torchsparse==2.0.0 is required for 3D detection and must be installed from source. See the official repository/instructions:
https://github.com/mit-han-lab/torchsparse

Ensure your PyTorch CUDA version is compatible (this setup uses CUDA 11.8 with PyTorch 2.0.0).

Local packages (editable installs)

  • Install in both ros_env and crowd_env:

    # Dataset Utils (package: crowdbot_data)
    mamba activate ros_env && pip install -e ./datasets_utils
    mamba activate crowd_env && pip install -e ./datasets_utils
  • Install only in crowd_env:

    # LiDAR Detection (package: lidar_det)
    pip install -e ./lidar_det_2D_3D
    # internal libs
    pip install -e ./lidar_det_2D_3D/lib/iou3d
    pip install -e ./lidar_det_2D_3D/lib/jrdb_det3d_eval
    # LiDAR-based Tracking (package: ab3dmot) — original repo: https://github.com/xinshuoweng/AB3DMOT
    pip install -e ./AB3DMOT

Pipeline overview

The repository provides .ipynb and .py processing scripts. They take as input processed rosbags or prepared LiDAR data from Crowdbot, JRDB, and SiT, and produce outputs in a unified Crowdbot data convention for crowd behavior analysis.

Four processing stages

  1. 1_Lidar_from_rosbags.py — For Crowdbot and JRDB: extracts 2D/3D LiDAR scans from rosbags and transforms them to the global frame. Saves synchronized LiDAR timestamps. (uses ros_env)
  2. 2_Pose_from_rosbags.py — For Crowdbot and JRDB: extracts robot pose, upsamples to 200 Hz, applies smoothing, and computes velocity, acceleration, and jerk. Synchronizes pose timestamps with LiDAR. (uses ros_env)
  3. 3_Detections_from_lidar.py — For Crowdbot, JRDB, and SiT: runs 2D (DR-SPAAM) and 3D (Person_MinkUNet) detectors on prepared LiDAR data (no rosbags). Produces 2D-only, 3D-only, and merged close–far detections. (uses crowd_env)
  4. 4_Tracks_from_detections.py — For Crowdbot, JRDB, and SiT: builds tracks with AB3DMOT from detections (no rosbags). Produces 2D/3D/merged tracks. (uses crowd_env)

Dataset-specific extractors

  • Extract_gt_JRDB.py — extracts ground truth for JRDB only.
  • Extract_SiT.py — extracts LiDAR, egomotion, and labels for SiT.

Automated full pipeline

bash run_pipeline.sh

References:

Please cite both the dataset as well as the publication if you use our dataset/repository in your work.

Crowdbot_v2 dataset

Wojcikiewicz, D., Billard, A., & Paez-Granados, D. (2025). CrowdBot_v2: Pedestrian–Robot crowd navigation dataset with pedestrian tracking (v2.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.17694140

Academic Publication

Wojcikiewicz D., Billard A., Paez-Granados D. Assessing pedestrian responses to autonomous and personal mobility robots in crowded public spaces. Science Advances (2026). https://doi.org/10.1126/sciadv.aef2576


Acknowledgment

This research work was partially supported by the Innosuisse Project 103.421 IP-IC "Developing an AI-enabled Robotic Personal Vehicle for Reduced Mobility Population in Complex Environments" and the JST Moonshot R&D [Grant Number JPMJMS2034-18].

About

Reproducible pipeline for analyzing pedestrian behavior and human–robot interactions across CrowdBot, JRDB, and SiT.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Overview of the Crowd Analysis Setup

Overview of the crowd analysis pipeline (placeholder)

This repository accompanies an academic publication, and an updated, improved version of the Crowdbot dataset. It provides a reproducible analysis pipeline for pedestrian behavior in crowds. By analyzing motion metrics and proxemics, we study differences between human–human interactions (HHI) and human–robot interactions (HRI) in crowded public spaces across the Crowdbot, JRDB, and SiT datasets.


Files & Folders

The repository layout is as follows (key items):

  • AB3DMOT/ — LiDAR-based tracking (package:ab3dmot), original repo: https://github.com/xinshuoweng/AB3DMOT
  • checkpoints/ — pre-trained detector weights (e.g., DR-SPAAM, Person_MinkUNet). Uploaded together with the dataset.
  • crowd_analysis/
    • crowd_behavior.ipynb — main analysis notebook with all motion metrics and proxemics analysis
  • datasets_configs/ — dataset configuration YAMLs
    • data_path_Crowdbot.yaml
    • data_path_JRDB.yaml
    • data_path_SiT.yaml
  • datasets_utils/ — dataset utilities (package:crowdbot_data) used by both environments
  • lidar_det_2D_3D/ — LiDAR detection (package:lidar_det) combining
  • rosbags_extraction/ — scripts for ROS bag processing
    • 1_Lidar_from_rosbags.py
    • 2_Pose_from_rosbags.py
    • 3_Detections_from_lidar.py
    • 4_Tracks_from_detections.py
    • Extract_gt_JRDB.py
    • Extract_SiT.py
  • run_pipeline.sh — script with a full processing pipeline for generating the input data
  • requirements.txt — Python packages installed into crowd_env

Dataset

Structure

graph LR;
ROOT[Dataset root];
ROOT-->CK[checkpoints/];
CK-->CKP[*.pth];
ROOT-->RB[rosbags/];
RB-->RBX[_defaced/];
RBX-->BAGS[.bag];
ROOT-->PR[processed/];
PR-->PRX[*_processed/];
PRX-->ALG[alg_res/];
ALG-->DET[detections/];
ALG-->TRK[tracks/];
PRX-->L3D[lidars/];
PRX-->L2D[lidars_2d/];
PRX-->PED[ped_data/];
PRX-->SRC[source_data/];
SRC-->TF[tf_robot/];
SRC-->TS[timestamp/];
Loading

Demo

ItemPreview
(a) Pedestrian trajectoriesTrajectories
(b) Motion metrics distributionsMetrics
(c) Minimum distance distributionsMinDist
(d) Linear minimum distance vs. robot velocityLinMinDist

Proposed/Recommended environment setup with tested package versions

Python version used: 3.8.10

Two Conda environments are used:

  • ros_env — ROS I/O from rosbags (bag reading, TF transforms, message types).
  • crowd_env — Deep-learning detection/tracking + analysis/visualization.

1) Create ros_env (RoboStack Noetic)

RoboStack brings ROS Noetic into Conda directly (guide: https://robostack.github.io/noetic.html).

mamba create -n ros_env -c conda-forge -c robostack-noetic ros-noetic-desktop ros-noetic-tf2-sensor-msgs
mamba activate ros_env
# Minimal math/transforms used by ros-side scripts
pip install scipy==1.16.2 numpy-quaternion==2024.0.12

RoboStack already provides the compiled message/runtime bits; no extra apt is needed.

2) Create crowd_env

Create the environment (CUDA 11.8 + PyTorch 2.0.0 as tested):

mamba create -n crowd_env python=3.8.10 ipykernel cuda-toolkit pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 setuptools=69.5.1 mkl=2023.2.0 mkl-include=2023.2.0 mkl-devel=2023.2.0 -c "nvidia/label/cuda-11.8.0" -c pytorch -c nvidia
mamba activate crowd_env
# Install remaining packages for crowd_env
pip install -r requirements.txt

TorchSparse (install from source — version 2.0.0)

torchsparse==2.0.0 is required for 3D detection and must be installed from source. See the official repository/instructions:
https://github.com/mit-han-lab/torchsparse

Ensure your PyTorch CUDA version is compatible (this setup uses CUDA 11.8 with PyTorch 2.0.0).

Local packages (editable installs)

  • Install in both ros_env and crowd_env:

    # Dataset Utils (package: crowdbot_data)
    mamba activate ros_env && pip install -e ./datasets_utils
    mamba activate crowd_env && pip install -e ./datasets_utils
  • Install only in crowd_env:

    # LiDAR Detection (package: lidar_det)
    pip install -e ./lidar_det_2D_3D
    # internal libs
    pip install -e ./lidar_det_2D_3D/lib/iou3d
    pip install -e ./lidar_det_2D_3D/lib/jrdb_det3d_eval
    # LiDAR-based Tracking (package: ab3dmot) — original repo: https://github.com/xinshuoweng/AB3DMOT
    pip install -e ./AB3DMOT

Pipeline overview

The repository provides .ipynb and .py processing scripts. They take as input processed rosbags or prepared LiDAR data from Crowdbot, JRDB, and SiT, and produce outputs in a unified Crowdbot data convention for crowd behavior analysis.

Four processing stages

  1. 1_Lidar_from_rosbags.py — For Crowdbot and JRDB: extracts 2D/3D LiDAR scans from rosbags and transforms them to the global frame. Saves synchronized LiDAR timestamps. (uses ros_env)
  2. 2_Pose_from_rosbags.py — For Crowdbot and JRDB: extracts robot pose, upsamples to 200 Hz, applies smoothing, and computes velocity, acceleration, and jerk. Synchronizes pose timestamps with LiDAR. (uses ros_env)
  3. 3_Detections_from_lidar.py — For Crowdbot, JRDB, and SiT: runs 2D (DR-SPAAM) and 3D (Person_MinkUNet) detectors on prepared LiDAR data (no rosbags). Produces 2D-only, 3D-only, and merged close–far detections. (uses crowd_env)
  4. 4_Tracks_from_detections.py — For Crowdbot, JRDB, and SiT: builds tracks with AB3DMOT from detections (no rosbags). Produces 2D/3D/merged tracks. (uses crowd_env)

Dataset-specific extractors

  • Extract_gt_JRDB.py — extracts ground truth for JRDB only.
  • Extract_SiT.py — extracts LiDAR, egomotion, and labels for SiT.

Automated full pipeline

bash run_pipeline.sh

References:

Please cite both the dataset as well as the publication if you use our dataset/repository in your work.

Crowdbot_v2 dataset

Wojcikiewicz, D., Billard, A., & Paez-Granados, D. (2025). CrowdBot_v2: Pedestrian–Robot crowd navigation dataset with pedestrian tracking (v2.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.17694140

Academic Publication

Wojcikiewicz D., Billard A., Paez-Granados D. Assessing pedestrian responses to autonomous and personal mobility robots in crowded public spaces. Science Advances (2026). https://doi.org/10.1126/sciadv.aef2576


Acknowledgment

This research work was partially supported by the Innosuisse Project 103.421 IP-IC "Developing an AI-enabled Robotic Personal Vehicle for Reduced Mobility Population in Complex Environments" and the JST Moonshot R&D [Grant Number JPMJMS2034-18].

About

Reproducible pipeline for analyzing pedestrian behavior and human–robot interactions across CrowdBot, JRDB, and SiT.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Overview of the Crowd Analysis Setup

Overview of the crowd analysis pipeline (placeholder)

This repository accompanies an academic publication, and an updated, improved version of the Crowdbot dataset. It provides a reproducible analysis pipeline for pedestrian behavior in crowds. By analyzing motion metrics and proxemics, we study differences between human–human interactions (HHI) and human–robot interactions (HRI) in crowded public spaces across the Crowdbot, JRDB, and SiT datasets.


Files & Folders

The repository layout is as follows (key items):

  • AB3DMOT/ — LiDAR-based tracking (package:ab3dmot), original repo: https://github.com/xinshuoweng/AB3DMOT
  • checkpoints/ — pre-trained detector weights (e.g., DR-SPAAM, Person_MinkUNet). Uploaded together with the dataset.
  • crowd_analysis/
    • crowd_behavior.ipynb — main analysis notebook with all motion metrics and proxemics analysis
  • datasets_configs/ — dataset configuration YAMLs
    • data_path_Crowdbot.yaml
    • data_path_JRDB.yaml
    • data_path_SiT.yaml
  • datasets_utils/ — dataset utilities (package:crowdbot_data) used by both environments
  • lidar_det_2D_3D/ — LiDAR detection (package:lidar_det) combining
  • rosbags_extraction/ — scripts for ROS bag processing
    • 1_Lidar_from_rosbags.py
    • 2_Pose_from_rosbags.py
    • 3_Detections_from_lidar.py
    • 4_Tracks_from_detections.py
    • Extract_gt_JRDB.py
    • Extract_SiT.py
  • run_pipeline.sh — script with a full processing pipeline for generating the input data
  • requirements.txt — Python packages installed into crowd_env

Dataset

Structure

graph LR;
ROOT[Dataset root];
ROOT-->CK[checkpoints/];
CK-->CKP[*.pth];
ROOT-->RB[rosbags/];
RB-->RBX[_defaced/];
RBX-->BAGS[.bag];
ROOT-->PR[processed/];
PR-->PRX[*_processed/];
PRX-->ALG[alg_res/];
ALG-->DET[detections/];
ALG-->TRK[tracks/];
PRX-->L3D[lidars/];
PRX-->L2D[lidars_2d/];
PRX-->PED[ped_data/];
PRX-->SRC[source_data/];
SRC-->TF[tf_robot/];
SRC-->TS[timestamp/];
Loading

Demo

ItemPreview
(a) Pedestrian trajectoriesTrajectories
(b) Motion metrics distributionsMetrics
(c) Minimum distance distributionsMinDist
(d) Linear minimum distance vs. robot velocityLinMinDist

Proposed/Recommended environment setup with tested package versions

Python version used: 3.8.10

Two Conda environments are used:

  • ros_env — ROS I/O from rosbags (bag reading, TF transforms, message types).
  • crowd_env — Deep-learning detection/tracking + analysis/visualization.

1) Create ros_env (RoboStack Noetic)

RoboStack brings ROS Noetic into Conda directly (guide: https://robostack.github.io/noetic.html).

mamba create -n ros_env -c conda-forge -c robostack-noetic ros-noetic-desktop ros-noetic-tf2-sensor-msgs
mamba activate ros_env
# Minimal math/transforms used by ros-side scripts
pip install scipy==1.16.2 numpy-quaternion==2024.0.12

RoboStack already provides the compiled message/runtime bits; no extra apt is needed.

2) Create crowd_env

Create the environment (CUDA 11.8 + PyTorch 2.0.0 as tested):

mamba create -n crowd_env python=3.8.10 ipykernel cuda-toolkit pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 setuptools=69.5.1 mkl=2023.2.0 mkl-include=2023.2.0 mkl-devel=2023.2.0 -c "nvidia/label/cuda-11.8.0" -c pytorch -c nvidia
mamba activate crowd_env
# Install remaining packages for crowd_env
pip install -r requirements.txt

TorchSparse (install from source — version 2.0.0)

torchsparse==2.0.0 is required for 3D detection and must be installed from source. See the official repository/instructions:
https://github.com/mit-han-lab/torchsparse

Ensure your PyTorch CUDA version is compatible (this setup uses CUDA 11.8 with PyTorch 2.0.0).

Local packages (editable installs)

  • Install in both ros_env and crowd_env:

    # Dataset Utils (package: crowdbot_data)
    mamba activate ros_env && pip install -e ./datasets_utils
    mamba activate crowd_env && pip install -e ./datasets_utils
  • Install only in crowd_env:

    # LiDAR Detection (package: lidar_det)
    pip install -e ./lidar_det_2D_3D
    # internal libs
    pip install -e ./lidar_det_2D_3D/lib/iou3d
    pip install -e ./lidar_det_2D_3D/lib/jrdb_det3d_eval
    # LiDAR-based Tracking (package: ab3dmot) — original repo: https://github.com/xinshuoweng/AB3DMOT
    pip install -e ./AB3DMOT

Pipeline overview

The repository provides .ipynb and .py processing scripts. They take as input processed rosbags or prepared LiDAR data from Crowdbot, JRDB, and SiT, and produce outputs in a unified Crowdbot data convention for crowd behavior analysis.

Four processing stages

  1. 1_Lidar_from_rosbags.py — For Crowdbot and JRDB: extracts 2D/3D LiDAR scans from rosbags and transforms them to the global frame. Saves synchronized LiDAR timestamps. (uses ros_env)
  2. 2_Pose_from_rosbags.py — For Crowdbot and JRDB: extracts robot pose, upsamples to 200 Hz, applies smoothing, and computes velocity, acceleration, and jerk. Synchronizes pose timestamps with LiDAR. (uses ros_env)
  3. 3_Detections_from_lidar.py — For Crowdbot, JRDB, and SiT: runs 2D (DR-SPAAM) and 3D (Person_MinkUNet) detectors on prepared LiDAR data (no rosbags). Produces 2D-only, 3D-only, and merged close–far detections. (uses crowd_env)
  4. 4_Tracks_from_detections.py — For Crowdbot, JRDB, and SiT: builds tracks with AB3DMOT from detections (no rosbags). Produces 2D/3D/merged tracks. (uses crowd_env)

Dataset-specific extractors

  • Extract_gt_JRDB.py — extracts ground truth for JRDB only.
  • Extract_SiT.py — extracts LiDAR, egomotion, and labels for SiT.

Automated full pipeline

bash run_pipeline.sh

References:

Please cite both the dataset as well as the publication if you use our dataset/repository in your work.

Crowdbot_v2 dataset

Wojcikiewicz, D., Billard, A., & Paez-Granados, D. (2025). CrowdBot_v2: Pedestrian–Robot crowd navigation dataset with pedestrian tracking (v2.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.17694140

Academic Publication

Wojcikiewicz D., Billard A., Paez-Granados D. Assessing pedestrian responses to autonomous and personal mobility robots in crowded public spaces. Science Advances (2026). https://doi.org/10.1126/sciadv.aef2576


Acknowledgment

This research work was partially supported by the Innosuisse Project 103.421 IP-IC "Developing an AI-enabled Robotic Personal Vehicle for Reduced Mobility Population in Complex Environments" and the JST Moonshot R&D [Grant Number JPMJMS2034-18].

About

Reproducible pipeline for analyzing pedestrian behavior and human–robot interactions across CrowdBot, JRDB, and SiT.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Overview of the Crowd Analysis Setup

Overview of the crowd analysis pipeline (placeholder)

This repository accompanies an academic publication, and an updated, improved version of the Crowdbot dataset. It provides a reproducible analysis pipeline for pedestrian behavior in crowds. By analyzing motion metrics and proxemics, we study differences between human–human interactions (HHI) and human–robot interactions (HRI) in crowded public spaces across the Crowdbot, JRDB, and SiT datasets.


Files & Folders

The repository layout is as follows (key items):

  • AB3DMOT/ — LiDAR-based tracking (package:ab3dmot), original repo: https://github.com/xinshuoweng/AB3DMOT
  • checkpoints/ — pre-trained detector weights (e.g., DR-SPAAM, Person_MinkUNet). Uploaded together with the dataset.
  • crowd_analysis/
    • crowd_behavior.ipynb — main analysis notebook with all motion metrics and proxemics analysis
  • datasets_configs/ — dataset configuration YAMLs
    • data_path_Crowdbot.yaml
    • data_path_JRDB.yaml
    • data_path_SiT.yaml
  • datasets_utils/ — dataset utilities (package:crowdbot_data) used by both environments
  • lidar_det_2D_3D/ — LiDAR detection (package:lidar_det) combining
  • rosbags_extraction/ — scripts for ROS bag processing
    • 1_Lidar_from_rosbags.py
    • 2_Pose_from_rosbags.py
    • 3_Detections_from_lidar.py
    • 4_Tracks_from_detections.py
    • Extract_gt_JRDB.py
    • Extract_SiT.py
  • run_pipeline.sh — script with a full processing pipeline for generating the input data
  • requirements.txt — Python packages installed into crowd_env

Dataset

Structure

graph LR;
ROOT[Dataset root];
ROOT-->CK[checkpoints/];
CK-->CKP[*.pth];
ROOT-->RB[rosbags/];
RB-->RBX[_defaced/];
RBX-->BAGS[.bag];
ROOT-->PR[processed/];
PR-->PRX[*_processed/];
PRX-->ALG[alg_res/];
ALG-->DET[detections/];
ALG-->TRK[tracks/];
PRX-->L3D[lidars/];
PRX-->L2D[lidars_2d/];
PRX-->PED[ped_data/];
PRX-->SRC[source_data/];
SRC-->TF[tf_robot/];
SRC-->TS[timestamp/];
Loading

Demo

ItemPreview
(a) Pedestrian trajectoriesTrajectories
(b) Motion metrics distributionsMetrics
(c) Minimum distance distributionsMinDist
(d) Linear minimum distance vs. robot velocityLinMinDist

Proposed/Recommended environment setup with tested package versions

Python version used: 3.8.10

Two Conda environments are used:

  • ros_env — ROS I/O from rosbags (bag reading, TF transforms, message types).
  • crowd_env — Deep-learning detection/tracking + analysis/visualization.

1) Create ros_env (RoboStack Noetic)

RoboStack brings ROS Noetic into Conda directly (guide: https://robostack.github.io/noetic.html).

mamba create -n ros_env -c conda-forge -c robostack-noetic ros-noetic-desktop ros-noetic-tf2-sensor-msgs
mamba activate ros_env
# Minimal math/transforms used by ros-side scripts
pip install scipy==1.16.2 numpy-quaternion==2024.0.12

RoboStack already provides the compiled message/runtime bits; no extra apt is needed.

2) Create crowd_env

Create the environment (CUDA 11.8 + PyTorch 2.0.0 as tested):

mamba create -n crowd_env python=3.8.10 ipykernel cuda-toolkit pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 setuptools=69.5.1 mkl=2023.2.0 mkl-include=2023.2.0 mkl-devel=2023.2.0 -c "nvidia/label/cuda-11.8.0" -c pytorch -c nvidia
mamba activate crowd_env
# Install remaining packages for crowd_env
pip install -r requirements.txt

TorchSparse (install from source — version 2.0.0)

torchsparse==2.0.0 is required for 3D detection and must be installed from source. See the official repository/instructions:
https://github.com/mit-han-lab/torchsparse

Ensure your PyTorch CUDA version is compatible (this setup uses CUDA 11.8 with PyTorch 2.0.0).

Local packages (editable installs)

  • Install in both ros_env and crowd_env:

    # Dataset Utils (package: crowdbot_data)
    mamba activate ros_env && pip install -e ./datasets_utils
    mamba activate crowd_env && pip install -e ./datasets_utils
  • Install only in crowd_env:

    # LiDAR Detection (package: lidar_det)
    pip install -e ./lidar_det_2D_3D
    # internal libs
    pip install -e ./lidar_det_2D_3D/lib/iou3d
    pip install -e ./lidar_det_2D_3D/lib/jrdb_det3d_eval
    # LiDAR-based Tracking (package: ab3dmot) — original repo: https://github.com/xinshuoweng/AB3DMOT
    pip install -e ./AB3DMOT

Pipeline overview

The repository provides .ipynb and .py processing scripts. They take as input processed rosbags or prepared LiDAR data from Crowdbot, JRDB, and SiT, and produce outputs in a unified Crowdbot data convention for crowd behavior analysis.

Four processing stages

  1. 1_Lidar_from_rosbags.py — For Crowdbot and JRDB: extracts 2D/3D LiDAR scans from rosbags and transforms them to the global frame. Saves synchronized LiDAR timestamps. (uses ros_env)
  2. 2_Pose_from_rosbags.py — For Crowdbot and JRDB: extracts robot pose, upsamples to 200 Hz, applies smoothing, and computes velocity, acceleration, and jerk. Synchronizes pose timestamps with LiDAR. (uses ros_env)
  3. 3_Detections_from_lidar.py — For Crowdbot, JRDB, and SiT: runs 2D (DR-SPAAM) and 3D (Person_MinkUNet) detectors on prepared LiDAR data (no rosbags). Produces 2D-only, 3D-only, and merged close–far detections. (uses crowd_env)
  4. 4_Tracks_from_detections.py — For Crowdbot, JRDB, and SiT: builds tracks with AB3DMOT from detections (no rosbags). Produces 2D/3D/merged tracks. (uses crowd_env)

Dataset-specific extractors

  • Extract_gt_JRDB.py — extracts ground truth for JRDB only.
  • Extract_SiT.py — extracts LiDAR, egomotion, and labels for SiT.

Automated full pipeline

bash run_pipeline.sh

References:

Please cite both the dataset as well as the publication if you use our dataset/repository in your work.

Crowdbot_v2 dataset

Wojcikiewicz, D., Billard, A., & Paez-Granados, D. (2025). CrowdBot_v2: Pedestrian–Robot crowd navigation dataset with pedestrian tracking (v2.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.17694140

Academic Publication

Wojcikiewicz D., Billard A., Paez-Granados D. Assessing pedestrian responses to autonomous and personal mobility robots in crowded public spaces. Science Advances (2026). https://doi.org/10.1126/sciadv.aef2576


Acknowledgment

This research work was partially supported by the Innosuisse Project 103.421 IP-IC "Developing an AI-enabled Robotic Personal Vehicle for Reduced Mobility Population in Complex Environments" and the JST Moonshot R&D [Grant Number JPMJMS2034-18].

About

Reproducible pipeline for analyzing pedestrian behavior and human–robot interactions across CrowdBot, JRDB, and SiT.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Overview of the Crowd Analysis Setup

Overview of the crowd analysis pipeline (placeholder)

This repository accompanies an academic publication, and an updated, improved version of the Crowdbot dataset. It provides a reproducible analysis pipeline for pedestrian behavior in crowds. By analyzing motion metrics and proxemics, we study differences between human–human interactions (HHI) and human–robot interactions (HRI) in crowded public spaces across the Crowdbot, JRDB, and SiT datasets.


Files & Folders

The repository layout is as follows (key items):

  • AB3DMOT/ — LiDAR-based tracking (package:ab3dmot), original repo: https://github.com/xinshuoweng/AB3DMOT
  • checkpoints/ — pre-trained detector weights (e.g., DR-SPAAM, Person_MinkUNet). Uploaded together with the dataset.
  • crowd_analysis/
    • crowd_behavior.ipynb — main analysis notebook with all motion metrics and proxemics analysis
  • datasets_configs/ — dataset configuration YAMLs
    • data_path_Crowdbot.yaml
    • data_path_JRDB.yaml
    • data_path_SiT.yaml
  • datasets_utils/ — dataset utilities (package:crowdbot_data) used by both environments
  • lidar_det_2D_3D/ — LiDAR detection (package:lidar_det) combining
  • rosbags_extraction/ — scripts for ROS bag processing
    • 1_Lidar_from_rosbags.py
    • 2_Pose_from_rosbags.py
    • 3_Detections_from_lidar.py
    • 4_Tracks_from_detections.py
    • Extract_gt_JRDB.py
    • Extract_SiT.py
  • run_pipeline.sh — script with a full processing pipeline for generating the input data
  • requirements.txt — Python packages installed into crowd_env

Dataset

Structure

graph LR;
ROOT[Dataset root];
ROOT-->CK[checkpoints/];
CK-->CKP[*.pth];
ROOT-->RB[rosbags/];
RB-->RBX[_defaced/];
RBX-->BAGS[.bag];
ROOT-->PR[processed/];
PR-->PRX[*_processed/];
PRX-->ALG[alg_res/];
ALG-->DET[detections/];
ALG-->TRK[tracks/];
PRX-->L3D[lidars/];
PRX-->L2D[lidars_2d/];
PRX-->PED[ped_data/];
PRX-->SRC[source_data/];
SRC-->TF[tf_robot/];
SRC-->TS[timestamp/];
Loading

Demo

ItemPreview
(a) Pedestrian trajectoriesTrajectories
(b) Motion metrics distributionsMetrics
(c) Minimum distance distributionsMinDist
(d) Linear minimum distance vs. robot velocityLinMinDist

Proposed/Recommended environment setup with tested package versions

Python version used: 3.8.10

Two Conda environments are used:

  • ros_env — ROS I/O from rosbags (bag reading, TF transforms, message types).
  • crowd_env — Deep-learning detection/tracking + analysis/visualization.

1) Create ros_env (RoboStack Noetic)

RoboStack brings ROS Noetic into Conda directly (guide: https://robostack.github.io/noetic.html).

mamba create -n ros_env -c conda-forge -c robostack-noetic ros-noetic-desktop ros-noetic-tf2-sensor-msgs
mamba activate ros_env
# Minimal math/transforms used by ros-side scripts
pip install scipy==1.16.2 numpy-quaternion==2024.0.12

RoboStack already provides the compiled message/runtime bits; no extra apt is needed.

2) Create crowd_env

Create the environment (CUDA 11.8 + PyTorch 2.0.0 as tested):

mamba create -n crowd_env python=3.8.10 ipykernel cuda-toolkit pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 setuptools=69.5.1 mkl=2023.2.0 mkl-include=2023.2.0 mkl-devel=2023.2.0 -c "nvidia/label/cuda-11.8.0" -c pytorch -c nvidia
mamba activate crowd_env
# Install remaining packages for crowd_env
pip install -r requirements.txt

TorchSparse (install from source — version 2.0.0)

torchsparse==2.0.0 is required for 3D detection and must be installed from source. See the official repository/instructions:
https://github.com/mit-han-lab/torchsparse

Ensure your PyTorch CUDA version is compatible (this setup uses CUDA 11.8 with PyTorch 2.0.0).

Local packages (editable installs)

  • Install in both ros_env and crowd_env:

    # Dataset Utils (package: crowdbot_data)
    mamba activate ros_env && pip install -e ./datasets_utils
    mamba activate crowd_env && pip install -e ./datasets_utils
  • Install only in crowd_env:

    # LiDAR Detection (package: lidar_det)
    pip install -e ./lidar_det_2D_3D
    # internal libs
    pip install -e ./lidar_det_2D_3D/lib/iou3d
    pip install -e ./lidar_det_2D_3D/lib/jrdb_det3d_eval
    # LiDAR-based Tracking (package: ab3dmot) — original repo: https://github.com/xinshuoweng/AB3DMOT
    pip install -e ./AB3DMOT

Pipeline overview

The repository provides .ipynb and .py processing scripts. They take as input processed rosbags or prepared LiDAR data from Crowdbot, JRDB, and SiT, and produce outputs in a unified Crowdbot data convention for crowd behavior analysis.

Four processing stages

  1. 1_Lidar_from_rosbags.py — For Crowdbot and JRDB: extracts 2D/3D LiDAR scans from rosbags and transforms them to the global frame. Saves synchronized LiDAR timestamps. (uses ros_env)
  2. 2_Pose_from_rosbags.py — For Crowdbot and JRDB: extracts robot pose, upsamples to 200 Hz, applies smoothing, and computes velocity, acceleration, and jerk. Synchronizes pose timestamps with LiDAR. (uses ros_env)
  3. 3_Detections_from_lidar.py — For Crowdbot, JRDB, and SiT: runs 2D (DR-SPAAM) and 3D (Person_MinkUNet) detectors on prepared LiDAR data (no rosbags). Produces 2D-only, 3D-only, and merged close–far detections. (uses crowd_env)
  4. 4_Tracks_from_detections.py — For Crowdbot, JRDB, and SiT: builds tracks with AB3DMOT from detections (no rosbags). Produces 2D/3D/merged tracks. (uses crowd_env)

Dataset-specific extractors

  • Extract_gt_JRDB.py — extracts ground truth for JRDB only.
  • Extract_SiT.py — extracts LiDAR, egomotion, and labels for SiT.

Automated full pipeline

bash run_pipeline.sh

References:

Please cite both the dataset as well as the publication if you use our dataset/repository in your work.

Crowdbot_v2 dataset

Wojcikiewicz, D., Billard, A., & Paez-Granados, D. (2025). CrowdBot_v2: Pedestrian–Robot crowd navigation dataset with pedestrian tracking (v2.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.17694140

Academic Publication

Wojcikiewicz D., Billard A., Paez-Granados D. Assessing pedestrian responses to autonomous and personal mobility robots in crowded public spaces. Science Advances (2026). https://doi.org/10.1126/sciadv.aef2576


Acknowledgment

This research work was partially supported by the Innosuisse Project 103.421 IP-IC "Developing an AI-enabled Robotic Personal Vehicle for Reduced Mobility Population in Complex Environments" and the JST Moonshot R&D [Grant Number JPMJMS2034-18].

About

Reproducible pipeline for analyzing pedestrian behavior and human–robot interactions across CrowdBot, JRDB, and SiT.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Overview of the Crowd Analysis Setup

Overview of the crowd analysis pipeline (placeholder)

This repository accompanies an academic publication, and an updated, improved version of the Crowdbot dataset. It provides a reproducible analysis pipeline for pedestrian behavior in crowds. By analyzing motion metrics and proxemics, we study differences between human–human interactions (HHI) and human–robot interactions (HRI) in crowded public spaces across the Crowdbot, JRDB, and SiT datasets.


Files & Folders

The repository layout is as follows (key items):

  • AB3DMOT/ — LiDAR-based tracking (package:ab3dmot), original repo: https://github.com/xinshuoweng/AB3DMOT
  • checkpoints/ — pre-trained detector weights (e.g., DR-SPAAM, Person_MinkUNet). Uploaded together with the dataset.
  • crowd_analysis/
    • crowd_behavior.ipynb — main analysis notebook with all motion metrics and proxemics analysis
  • datasets_configs/ — dataset configuration YAMLs
    • data_path_Crowdbot.yaml
    • data_path_JRDB.yaml
    • data_path_SiT.yaml
  • datasets_utils/ — dataset utilities (package:crowdbot_data) used by both environments
  • lidar_det_2D_3D/ — LiDAR detection (package:lidar_det) combining
  • rosbags_extraction/ — scripts for ROS bag processing
    • 1_Lidar_from_rosbags.py
    • 2_Pose_from_rosbags.py
    • 3_Detections_from_lidar.py
    • 4_Tracks_from_detections.py
    • Extract_gt_JRDB.py
    • Extract_SiT.py
  • run_pipeline.sh — script with a full processing pipeline for generating the input data
  • requirements.txt — Python packages installed into crowd_env

Dataset

Structure

graph LR;
ROOT[Dataset root];
ROOT-->CK[checkpoints/];
CK-->CKP[*.pth];
ROOT-->RB[rosbags/];
RB-->RBX[_defaced/];
RBX-->BAGS[.bag];
ROOT-->PR[processed/];
PR-->PRX[*_processed/];
PRX-->ALG[alg_res/];
ALG-->DET[detections/];
ALG-->TRK[tracks/];
PRX-->L3D[lidars/];
PRX-->L2D[lidars_2d/];
PRX-->PED[ped_data/];
PRX-->SRC[source_data/];
SRC-->TF[tf_robot/];
SRC-->TS[timestamp/];
Loading

Demo

ItemPreview
(a) Pedestrian trajectoriesTrajectories
(b) Motion metrics distributionsMetrics
(c) Minimum distance distributionsMinDist
(d) Linear minimum distance vs. robot velocityLinMinDist

Proposed/Recommended environment setup with tested package versions

Python version used: 3.8.10

Two Conda environments are used:

  • ros_env — ROS I/O from rosbags (bag reading, TF transforms, message types).
  • crowd_env — Deep-learning detection/tracking + analysis/visualization.

1) Create ros_env (RoboStack Noetic)

RoboStack brings ROS Noetic into Conda directly (guide: https://robostack.github.io/noetic.html).

mamba create -n ros_env -c conda-forge -c robostack-noetic ros-noetic-desktop ros-noetic-tf2-sensor-msgs
mamba activate ros_env
# Minimal math/transforms used by ros-side scripts
pip install scipy==1.16.2 numpy-quaternion==2024.0.12

RoboStack already provides the compiled message/runtime bits; no extra apt is needed.

2) Create crowd_env

Create the environment (CUDA 11.8 + PyTorch 2.0.0 as tested):

mamba create -n crowd_env python=3.8.10 ipykernel cuda-toolkit pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 setuptools=69.5.1 mkl=2023.2.0 mkl-include=2023.2.0 mkl-devel=2023.2.0 -c "nvidia/label/cuda-11.8.0" -c pytorch -c nvidia
mamba activate crowd_env
# Install remaining packages for crowd_env
pip install -r requirements.txt

TorchSparse (install from source — version 2.0.0)

torchsparse==2.0.0 is required for 3D detection and must be installed from source. See the official repository/instructions:
https://github.com/mit-han-lab/torchsparse

Ensure your PyTorch CUDA version is compatible (this setup uses CUDA 11.8 with PyTorch 2.0.0).

Local packages (editable installs)

  • Install in both ros_env and crowd_env:

    # Dataset Utils (package: crowdbot_data)
    mamba activate ros_env && pip install -e ./datasets_utils
    mamba activate crowd_env && pip install -e ./datasets_utils
  • Install only in crowd_env:

    # LiDAR Detection (package: lidar_det)
    pip install -e ./lidar_det_2D_3D
    # internal libs
    pip install -e ./lidar_det_2D_3D/lib/iou3d
    pip install -e ./lidar_det_2D_3D/lib/jrdb_det3d_eval
    # LiDAR-based Tracking (package: ab3dmot) — original repo: https://github.com/xinshuoweng/AB3DMOT
    pip install -e ./AB3DMOT

Pipeline overview

The repository provides .ipynb and .py processing scripts. They take as input processed rosbags or prepared LiDAR data from Crowdbot, JRDB, and SiT, and produce outputs in a unified Crowdbot data convention for crowd behavior analysis.

Four processing stages

  1. 1_Lidar_from_rosbags.py — For Crowdbot and JRDB: extracts 2D/3D LiDAR scans from rosbags and transforms them to the global frame. Saves synchronized LiDAR timestamps. (uses ros_env)
  2. 2_Pose_from_rosbags.py — For Crowdbot and JRDB: extracts robot pose, upsamples to 200 Hz, applies smoothing, and computes velocity, acceleration, and jerk. Synchronizes pose timestamps with LiDAR. (uses ros_env)
  3. 3_Detections_from_lidar.py — For Crowdbot, JRDB, and SiT: runs 2D (DR-SPAAM) and 3D (Person_MinkUNet) detectors on prepared LiDAR data (no rosbags). Produces 2D-only, 3D-only, and merged close–far detections. (uses crowd_env)
  4. 4_Tracks_from_detections.py — For Crowdbot, JRDB, and SiT: builds tracks with AB3DMOT from detections (no rosbags). Produces 2D/3D/merged tracks. (uses crowd_env)

Dataset-specific extractors

  • Extract_gt_JRDB.py — extracts ground truth for JRDB only.
  • Extract_SiT.py — extracts LiDAR, egomotion, and labels for SiT.

Automated full pipeline

bash run_pipeline.sh

References:

Please cite both the dataset as well as the publication if you use our dataset/repository in your work.

Crowdbot_v2 dataset

Wojcikiewicz, D., Billard, A., & Paez-Granados, D. (2025). CrowdBot_v2: Pedestrian–Robot crowd navigation dataset with pedestrian tracking (v2.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.17694140

Academic Publication

Wojcikiewicz D., Billard A., Paez-Granados D. Assessing pedestrian responses to autonomous and personal mobility robots in crowded public spaces. Science Advances (2026). https://doi.org/10.1126/sciadv.aef2576


Acknowledgment

This research work was partially supported by the Innosuisse Project 103.421 IP-IC "Developing an AI-enabled Robotic Personal Vehicle for Reduced Mobility Population in Complex Environments" and the JST Moonshot R&D [Grant Number JPMJMS2034-18].

About

Reproducible pipeline for analyzing pedestrian behavior and human–robot interactions across CrowdBot, JRDB, and SiT.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages