Skip to content
Open
Show file tree
Hide file tree
Changes from 63 commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
6632c97
add: copy docker stuff from deep learning repo
MadsJJ Jan 8, 2026
86206ab
update: docker image name
MadsJJ Jan 8, 2026
c06ca2e
remove: requirements.txt from dockerfile
MadsJJ Jan 8, 2026
f75a80b
add: install and log to dockerignore
MadsJJ Jan 8, 2026
b1e9e9f
Merge commit 'f75a80bd4935c44d34d0b4b13a95f37daadde104' into feature/…
MadsJJ Jan 8, 2026
04b803b
add: clangd to devcontainer
MadsJJ Jan 13, 2026
4fbb8e0
add: locate_pipeline package.
MadsJJ Jan 13, 2026
05089ff
add: find pipeline start using bottommost pixels. possible to debug
MadsJJ Jan 22, 2026
7153251
add: DVL-based 3D pose estimation with ConvexHull endpoint detection
MadsJJ Feb 5, 2026
a82343a
simplify: remove DVL/camera_info age checks, use latest messages
MadsJJ Feb 5, 2026
ab7a0a1
refactor: remove legacy detection methods and depth backprojection
MadsJJ Feb 5, 2026
6323d01
fix: correct backprojection coordinate system (Y=altitude, not Z=-alt…
MadsJJ Feb 5, 2026
ec384bf
refactor: split the pipeline locator node into two separate packages …
MadsJJ Feb 11, 2026
3f5bb84
add: vortex_msgs repo using vcstool. also add script and usager frien…
MadsJJ Feb 11, 2026
82322f4
add:
MadsJJ Feb 11, 2026
eaec501
refactor: use tf2 transforms for backprojection
MadsJJ Feb 16, 2026
1214bf3
fix: remove redundant backprojection in endpoint selection
MadsJJ Feb 16, 2026
d667958
build: add tf2 dependencies for geometry library
MadsJJ Feb 16, 2026
db66507
refactor: update image overlay visualization
MadsJJ Feb 16, 2026
9d42900
config: update localizer parameters and launch file
MadsJJ Feb 16, 2026
46d48af
feat: publish pipeline position as Landmark
MadsJJ Feb 18, 2026
693df5c
fix: update Landmark message to new vortex-msgs structure
MadsJJ Feb 18, 2026
87a6e6a
change from publishing landmark to landmark_array
vortexuser Feb 18, 2026
0f295a1
use same parameters as sim
vortexuser Feb 18, 2026
626f5d2
init list with a size
vortexuser Feb 18, 2026
f657d7c
refactor: replace debug prints with ROS log levels
MadsJJ Feb 19, 2026
b5a7030
switch to landmark server compatible vortex-msgs branch.
MadsJJ Feb 19, 2026
899f762
gitignore vcs dependency
MadsJJ Feb 19, 2026
9b50092
use correct camera info topic
MadsJJ Feb 19, 2026
c40eb6e
feat: lowest pixel endpoint detection.
MadsJJ Feb 19, 2026
6eb2bdd
fixed debug visualizer
MadsJJ Feb 19, 2026
924d2d6
add: DS_Store to gitignore
MadsJJ Mar 4, 2026
d05ad15
remove: old locate_pipeline package
MadsJJ Mar 4, 2026
2be48d2
refactor: rename pipeline packages for clarity
MadsJJ Mar 4, 2026
3c52d66
docs: add READMEs for both packages
MadsJJ Mar 5, 2026
e43df36
fix: use yaml-only debug config, remove launch arg override
MadsJJ Mar 5, 2026
b205570
fix: correct misleading comments and stale log messages
MadsJJ Mar 5, 2026
bb64785
refactor: extract preprocessing, furthest_points and debug into separ…
MadsJJ Mar 5, 2026
df863f0
refactor: restructure mask callback to avoid clone and scope issues
MadsJJ Mar 5, 2026
324a187
refactor(image_endpoints): remove dead CameraIntrinsics and undistort…
MadsJJ Mar 5, 2026
8c09ec9
style: unify code style and add log_level launch argument to both pac…
MadsJJ Mar 5, 2026
114a2ae
refactor(position_estimator): rename localizer_node to position_estim…
MadsJJ Mar 5, 2026
9fbc886
refactor(position_estimator): rename geometry to backproject_ground_p…
MadsJJ Mar 5, 2026
a14eb55
pre-commit
MadsJJ Mar 5, 2026
9b2287e
chore: remove accidentally tracked vortex-msgs submodule reference
MadsJJ Mar 5, 2026
b3bd1ef
Merge branch 'main' into feature/19-locate-pipeline-start
MadsJJ Mar 5, 2026
257edb3
remove: data_mutex as there is no benefit to multi-threading this node
MadsJJ Mar 5, 2026
705f105
fix: debug launch arg in both packages
MadsJJ Mar 11, 2026
dec7100
update: landmark type usage to new vortex-msgs main branch structure
MadsJJ Mar 11, 2026
37162b3
fix: pass dependencies.repos into upstream_workspace for industrial-ci
MadsJJ Mar 12, 2026
63570ee
fix: pre-commit
MadsJJ Mar 12, 2026
73584c4
fix: correct opencv rosdep key in package.xml
MadsJJ Mar 12, 2026
e47d858
add: vcs-repo-file-url to code-coverage ci thing
MadsJJ Mar 12, 2026
05b8155
fix: colcon ignore pipeline-line-fitting because it didnt build in in…
MadsJJ Mar 12, 2026
0fb538c
feature: implement orientation to landmark to keep it in camera view
MadsJJ Mar 12, 2026
7bc2aa4
fixed: pre-commit stuff. a lot of changes to line fitting
MadsJJ Mar 12, 2026
ebb7609
remove: old vortex-msgs gitlink in the git index creating problems in…
MadsJJ Mar 12, 2026
4023019
fix: address copilot review comments on PR
MadsJJ Mar 12, 2026
54ff610
fix: remove vortex-msgs gitlink
MadsJJ Mar 12, 2026
cea0bb9
add: pipeline landmark orientation using vector from start to end of …
MadsJJ Mar 12, 2026
b6d9da4
remove: hardcoded max_dist. not needed atp
MadsJJ Mar 12, 2026
8120627
refactor: place dependencies.repos in root as commented on pr
MadsJJ Mar 12, 2026
2b8e1a7
remove: pipeline_filtering. not used anymore
MadsJJ Mar 12, 2026
15b0968
upgrade clangd. previous version (14) was pinned by ubuntu 22 apt repo.
MadsJJ Mar 20, 2026
729ed41
add: pre-commit
MadsJJ Mar 20, 2026
c843bff
fix: address PR review comments from jorgenfj
MadsJJ Mar 20, 2026
8650875
refactor: rename methods to snake_case
MadsJJ Mar 20, 2026
fd6c804
update: vortex-msgs to main as it has meen merged
MadsJJ Mar 20, 2026
28d67c4
pr fix: Convert DetectorNode and PositionEstimatorNode to composable …
MadsJJ Mar 20, 2026
25d280d
pre-commit
MadsJJ Mar 20, 2026
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
4 changes: 2 additions & 2 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ AllowShortCaseLabelsOnASingleLine: false
AllowShortCompoundRequirementOnASingleLine: true
AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: Never
AllowShortIfStatementsOnASingleLine: WithoutElse
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
Expand Down Expand Up @@ -116,7 +116,7 @@ BreakFunctionDefinitionParameters: false
BreakInheritanceList: BeforeColon
BreakStringLiterals: true
BreakTemplateDeclarations: Yes
ColumnLimit: 80
ColumnLimit: 99
CommentPragmas: "^ IWYU pragma:"
CompactNamespaces: false
ConstructorInitializerIndentWidth: 4
Expand Down
46 changes: 46 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"name": "vortex-pipeline-detection-devcontainer",
"image": "vortex-pipeline-detection:latest",
"customizations": {
"vscode": {
"settings": {
"terminal.integrated.defaultProfile.linux": "bash",
// 1. Disable Microsoft IntelliSense to let clangd take over
"C_Cpp.intelliSenseEngine": "disabled",
"cmake.autoSelectActiveFolder": false,
"cmake.configureOnOpen": false,
// 2. Tell clangd where to find the compilation database
"clangd.arguments": [
"--compile-commands-dir=${workspaceFolder}/build",
"--background-index",
"--completion-style=detailed",
"--header-insertion=never",
"--clang-tidy",
"--query-driver=/usr/bin/g++"
],
// 3. Ensure CMake Tools generates the needed file
"cmake.copyCompileCommands": "${workspaceFolder}/build/compile_commands.json"
},
"extensions": [
"ms-vscode.cpptools-extension-pack",
"llvm-vs-code-extensions.vscode-clangd",
"ranch-hand-robotics.rde-pack",
"ms-python.python",
"ms-python.vscode-pylance",
"usernamehw.errorlens",
"eamodio.gitlens",
"gruntfuggly.todo-tree",
"gxl.git-graph-3"
]
}
},
"postCreateCommand": "./scripts/import_dependencies.sh && mkdir -p build && touch build/compile_commands.json",
"remoteUser": "devuser",
"workspaceFolder": "/ros2_ws",
"workspaceMount": "source=${localWorkspaceFolder},target=/ros2_ws,type=bind,consistency=cached",
"runArgs": [
"--privileged",
"--network=host",
"--ipc=host"
]
}
31 changes: 31 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Ignore build artifacts and large/runtime folders
build/
install/
log/
*.log

# Docker and local config
docker/
.dockerignore

# VCS
.git
.gitignore

# VS Code
.vscode/

# Python
__pycache__/
*.pyc
*.pyo
*.pyd
venv/
.env

# Misc
*.swp
*.swo
node_modules/
bags/
rosbags/
2 changes: 2 additions & 0 deletions .github/workflows/code-coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@ on:
jobs:
code-coverage:
uses: vortexntnu/vortex-ci/.github/workflows/reusable-code-coverage.yml@main
with:
vcs-repo-file-url: dependencies.repos
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} # Set in the repository secrets
1 change: 1 addition & 0 deletions .github/workflows/industrial-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ jobs:
uses: vortexntnu/vortex-ci/.github/workflows/reusable-industrial-ci.yml@main
with:
ros_repo: '["testing", "main"]'
upstream_workspace: dependencies.repos
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
#VCS DEPENDENCIES
*/vortex-msgs

devel/
logs/
build/
install/
log/
bin/
lib/
msg_gen/
Expand Down Expand Up @@ -52,3 +57,10 @@ qtcreator-*

# Catkin custom files
CATKIN_IGNORE

# AI
.claude
CLAUDE.MD

# OS specific files
.DS_Store
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ repos:
hooks:
- id: clang-format
args: [--style=file]
types_or: [c, c++, cuda, proto, textproto]
- repo: local
hooks:
- id: ament_cppcheck
Expand Down
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,3 @@
[![Industrial CI](https://github.com/vortexntnu/vortex-pipeline-detection/actions/workflows/industrial-ci.yml/badge.svg)](https://github.com/vortexntnu/vortex-pipeline-detection/actions/workflows/industrial-ci.yml)
[![pre-commit](https://github.com/vortexntnu/vortex-pipeline-detection/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/vortexntnu/vortex-pipeline-detection/actions/workflows/pre-commit.yml)
[![codecov](https://codecov.io/github/vortexntnu/vortex-pipeline-detection/graph/badge.svg?token=LbazZadssf)](https://codecov.io/github/vortexntnu/vortex-pipeline-detection)

5 changes: 5 additions & 0 deletions dependencies.repos
Comment thread
MadsJJ marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
repositories:
vortex-msgs:
type: git
url: https://github.com/vortexntnu/vortex-msgs.git
version: feat/Point2DArray-msg
70 changes: 70 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# ----------------------------------------------------------------------------
# Base Image
# ----------------------------------------------------------------------------
ARG BASE_IMAGE=ros:humble
FROM ${BASE_IMAGE}

# ----------------------------------------------------------------------------
# Setup Arguments & Environment
# ----------------------------------------------------------------------------
USER root
SHELL ["/bin/bash", "-c"]
ARG DEBIAN_FRONTEND=noninteractive
ARG ROS_DISTRO=humble

# Define User Args
ARG USER_ID=1000
ARG GROUP_ID=1000
ARG USERNAME=devuser

ENV WORKSPACE=/ros2_ws
WORKDIR ${WORKSPACE}

# ----------------------------------------------------------------------------
# Create non-root user
# ----------------------------------------------------------------------------
RUN groupadd --gid ${GROUP_ID} ${USERNAME} || true && \
useradd --uid ${USER_ID} --gid ${GROUP_ID} -m -s /bin/bash ${USERNAME} || true && \
apt-get update && apt-get install -y sudo && \
echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
apt-get clean && rm -rf /var/lib/apt/lists/*

# ----------------------------------------------------------------------------
# Install System Dependencies
# ----------------------------------------------------------------------------
RUN apt-get update && apt-get install -y \
git \
python3-vcstool \
python3-pip \
ros-${ROS_DISTRO}-cv-bridge \
ros-${ROS_DISTRO}-vision-msgs \
ros-${ROS_DISTRO}-pcl-conversions \
libopencv-dev \
libpcl-dev \
python3-colcon-common-extensions \
clangd \
&& apt-get clean && rm -rf /var/lib/apt/lists/*

RUN pip3 install cython

# ----------------------------------------------------------------------------
# Copy Workspace Files
# ----------------------------------------------------------------------------
COPY . ${WORKSPACE}
RUN chown -R ${USER_ID}:${GROUP_ID} ${WORKSPACE}

# ----------------------------------------------------------------------------
# Install ROS dependencies
# ----------------------------------------------------------------------------
RUN rosdep update && rosdep install --from-paths . --ignore-src -r -y

# ----------------------------------------------------------------------------
# User Configuration
# ----------------------------------------------------------------------------
RUN echo "if [ -f /ros2_ws/scripts/bashrc_extra.sh ]; then source /ros2_ws/scripts/bashrc_extra.sh; fi" >> /home/${USERNAME}/.bashrc

# Switch to the user
USER ${USERNAME}
WORKDIR /home/${USERNAME}

CMD ["bash"]
58 changes: 58 additions & 0 deletions docker/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/usr/bin/env bash
set -euo pipefail

# ------------------------------------------------------------------------------
# Environment Variables
# ------------------------------------------------------------------------------
IMAGE="vortex-pipeline-detection:latest" # Docker image name/tag
BASE_IMAGE="ros:humble" # Base image for Docker builds

# ------------------------------------------------------------------------------
# Platform Detection
# ------------------------------------------------------------------------------
ARCHITECTURE="$(uname -m)"
if [[ "$ARCHITECTURE" == "arm64" || "$ARCHITECTURE" == "aarch64" ]]; then
PLATFORM="linux/arm64"
elif [[ "$ARCHITECTURE" == "x86_64" ]]; then
PLATFORM="linux/amd64"
else
echo "Unsupported architecture: $ARCHITECTURE" >&2
exit 1
fi

# ------------------------------------------------------------------------------
# Locate Script and Workspace Root
# ------------------------------------------------------------------------------
SCRIPT_DIR="$(dirname "$(realpath "$0")")"
WORKSPACE="$(realpath "$SCRIPT_DIR/..")"

# ------------------------------------------------------------------------------
# Build Start Info
# ------------------------------------------------------------------------------
echo "======================================================================"
echo " Building Docker Image"
echo " • PLATFORM: $PLATFORM"
echo " • BASE_IMAGE: $BASE_IMAGE"
echo " • IMAGE: $IMAGE"
echo " • BUILD CONTEXT: $WORKSPACE"
echo "======================================================================"
echo ""

# ------------------------------------------------------------------------------
# Build Docker Image with Buildx
# ------------------------------------------------------------------------------
docker buildx build \
--platform "$PLATFORM" \
--network=host \
--build-arg BASE_IMAGE="$BASE_IMAGE" \
--build-arg USER_ID="$(id -u)" \
--build-arg GROUP_ID="$(id -g)" \
--tag "$IMAGE" \
--file "$SCRIPT_DIR/Dockerfile" \
--load \
"$WORKSPACE"

echo ""
echo "======================================================================"
echo " Successfully built image '$IMAGE' for platform '$PLATFORM'"
echo "======================================================================"
32 changes: 32 additions & 0 deletions docker/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env bash
set -euo pipefail

# ------------------------------------------------------------------------------
# Image Configuration
# ------------------------------------------------------------------------------
IMAGE="vortex-pipeline-detection:latest" # Default Docker image name/tag

# ------------------------------------------------------------------------------
# Locate Script Directory and Workspace Root
# ------------------------------------------------------------------------------
SCRIPT_DIR="$(dirname "$(realpath "$0")")"
WORKSPACE="$(realpath "$SCRIPT_DIR/..")"

echo "======================================================================"
echo " Running Container"
echo " • IMAGE: $IMAGE"
echo " • Volume mount: $WORKSPACE -> /ros2_ws"
echo "======================================================================"
echo ""

# ------------------------------------------------------------------------------
# Run Docker Container (imports dependencies, then starts interactive shell)
# ------------------------------------------------------------------------------
docker run -it --rm \
--privileged \
--network host \
--ipc=host \
-v "$WORKSPACE":/ros2_ws \
-w /ros2_ws \
"$IMAGE" \
/bin/bash -c "./scripts/import_dependencies.sh && exec bash"
71 changes: 0 additions & 71 deletions pipeline-filtering/CMakeLists.txt

This file was deleted.

Loading
Loading