Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
14159ee
chore: Add CI configuration from arjoc/feat/ci_config
arjo129 Jun 22, 2026
5331c10
Update branches for build workflow trigger
arjo129 Jun 22, 2026
fbce150
Update CI workflow branch to epic/next-gen-base
arjo129 Jun 22, 2026
9ed725a
Add branch to CI workflow for additional feature
arjo129 Jun 22, 2026
cca76c8
Remove nav2 stuff
arjo129 Jun 23, 2026
131152e
Merge remote-tracking branch 'refs/remotes/upstream/arjoc/feat/ci_con…
arjo129 Jun 23, 2026
94b070d
Rosdep new code as well
arjo129 Jun 23, 2026
7bbb9f0
Rosdep new code as well
arjo129 Jun 23, 2026
f8ee72d
Update CI
arjo129 Jun 23, 2026
c22c3e0
Update readme
arjo129 Jun 23, 2026
9d1d062
try not using repos file
arjo129 Jun 23, 2026
ece8324
Fix typo
arjo129 Jun 23, 2026
7e2372b
Update README.md
arjo129 Jun 23, 2026
861fd19
remove broken source path
arjo129 Jun 23, 2026
43a20f7
Merge remote-tracking branch 'refs/remotes/upstream/arjoc/feat/ci_con…
arjo129 Jun 23, 2026
f62db4d
remove broken source path
arjo129 Jun 23, 2026
af74575
add rosdep init
arjo129 Jun 23, 2026
b74c322
to rosdepinit or not that is the question
arjo129 Jun 23, 2026
1e5cda5
rosdep binary
arjo129 Jun 23, 2026
ef81869
fix instructions
arjo129 Jun 23, 2026
fab5a5f
Remove repos file
arjo129 Jun 23, 2026
571864e
Remove repos reference
arjo129 Jun 23, 2026
ec9d260
Update dockerfile to use colcon cargo from apt
arjo129 Jun 24, 2026
3426906
Update readme instructions
arjo129 Jun 24, 2026
f975482
Fix apt command
arjo129 Jun 24, 2026
1b4333b
Update README for clarity on workspace dependencies
arjo129 Jun 24, 2026
c64a1c6
Use rosenv
arjo129 Jun 24, 2026
c904c40
Merge remote-tracking branch 'refs/remotes/upstream/arjoc/feat/ci_con…
arjo129 Jun 24, 2026
d99c551
Re-add colcon-ros-cargo
arjo129 Jun 24, 2026
f784b07
update readme since vcs is no longer needed
arjo129 Jun 24, 2026
25eb2f6
Dockerfile base
arjo129 Jun 24, 2026
de2fb74
Force upgrade
arjo129 Jun 24, 2026
677135e
Add break-system package line
arjo129 Jun 24, 2026
725ee7b
Limit to only epic branch
arjo129 Jun 24, 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
54 changes: 54 additions & 0 deletions .github/workflows/build_base.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Build and Publish Base Container

on:
push:
branches: [ epic/next-gen-base ]
paths:
- 'docker/Dockerfile.base'
- 'docker/base.repos'
workflow_dispatch:

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository_owner }}/ros2_rust_base

jobs:
build-and-push:
name: Build and Push ROS 2 Rust Base Image
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value=jazzy

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile.base
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
38 changes: 38 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Next-Gen Prototype CI

on:
push:
branches: [ epic/next-gen-base ]
pull_request:
branches: [ epic/next-gen-base ]

jobs:
ci-check:
name: Colcon Overlay Build & Test Suite
runs-on: ubuntu-latest
container:
image: ghcr.io/open-rmf/ros2_rust_base:jazzy

steps:
- name: Checkout Prototype Repository
uses: actions/checkout@v4
with:
path: next_gen_ws/src/next_gen_prototype

- name: Build Prototype Packages (Overlay Workspace)
working-directory: next_gen_ws
run: |
source /opt/ros/jazzy/setup.bash
rosdep update
rosdep install --from-paths . --ignore-src -y --skip-keys="rclrs ament_cargo ament_python"
colcon build
shell: bash

- name: Run Automated Verification Tests
working-directory: next_gen_ws
run: |
source /opt/ros/jazzy/setup.bash
source install/setup.bash
colcon test --packages-select rmf_path_server_test --event-handlers console_direct+
colcon test-result --all
shell: bash
39 changes: 26 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,38 @@ on discourse.

## Build Instructions

1. Install `rust`, `colcon-cargo` and `colcon-cargo-ros`:
```
# Install Rust (see https://rustup.rs/)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Install required system packages
sudo apt install -y git libclang-dev python3-pip python3-vcstool
1. Install `rust` and `colcon-cargo`.

**Method 1: Using a machine with ros2-jazzy installed**

```
# Install Rust (see https://rustup.rs/)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Install colcon plugins for Rust
pip install --break-system-packages colcon-cargo colcon-ros-cargo
# Install required system packages
sudo apt install -y git libclang-dev python3-pip

```
# Install colcon plugins for Rust
sudo apt install python3-colcon-cargo
pip3 install --break-system-packages colcon-ros-cargo
```

**Method 2: Using a container**
We pre-build base containers with all the dependencies you can use `rocker`, `distrobox`, `podman` or
any other oci compliant tool to get a base dev environment. For the purposes of this set of instructions we use distrobox:
```
distrobox create --image ghcr.io/open-rmf/ros2_rust_base:jazzy -n ros2_rust_base
distrobox enter ros2_rust_base
```

2. **Import Workspace Dependencies (via `.repos` file)**
Create a workspace and import the required ROS 2 Rust and navigation dependencies using this [`setup.repos`](https://gist.github.com/arjo129/1711acb6fdf2956640f022a1ebde3869):
2. **Import Workspace Dependencies**
Create a workspace and clone the repo:
```bash
mkdir -p rmf_ws/src
cd rmf_ws
vcs import src --input https://gist.githubusercontent.com/arjo129/1711acb6fdf2956640f022a1ebde3869/raw/5786aa3d5e87a556c5c6769cc0983264b06a20d7/gistfile1.txt
cd rmf_ws/src
git clone https://github.com/open-rmf/next_gen_prototype.git
cd ..
```

3. **Build the PR Packages**
Expand Down
56 changes: 56 additions & 0 deletions docker/Dockerfile.base
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
FROM ros:jazzy-ros-base

# Disable interactive prompts during package installation
ENV DEBIAN_FRONTEND=noninteractive

# Install core build dependencies, Rust prerequisites, and ROS 2 build tools
RUN apt-get update && apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
curl \
git \
python3-pip \
python3-vcstool \
clang \
libclang-dev \
build-essential \
python3-colcon-common-extensions \
python3-colcon-cargo\
libssl-dev \
pkg-config \
&& rm -rf /var/lib/apt/lists/*

# Install colcon extensions for Rust
RUN pip3 install --no-cache-dir --break-system-packages colcon-ros-cargo

# Install Rust toolchain (Stable) and global Cargo tools accessible to all users
ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path && \
cargo install cargo-ament-build && \
chmod -R a+rwX /usr/local/cargo /usr/local/rustup


# Initialize Underlay Workspace
WORKDIR /opt/ros2_rust_ws

# Stage the prototype branch to resolve its rosdep system dependencies directly into the base image
COPY . /tmp/next_gen_prototype

# Install ROS 2 dependencies via rosdep for both underlay and prototype branch
RUN apt-get update && \
rosdep init || true && \
rosdep update && \
rosdep install --from-paths /tmp/next_gen_prototype --ignore-src -yr --skip-keys="rclrs ament_cargo ament_python" && \
rm -rf /var/lib/apt/lists/* && \
rm -rf /tmp/next_gen_prototype

# Build the Underlay Workspace
#RUN /bin/bash -c "source /opt/ros/jazzy/setup.bash && \
# colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release"

# Provide automatic sourcing entrypoint configuration inside ~/.bashrc
RUN echo "source /opt/ros/jazzy/setup.bash" >> /root/.bashrc
#echo "source /opt/ros2_rust_ws/install/setup.bash" >> /root/.bashrc

CMD ["/bin/bash"]
9 changes: 2 additions & 7 deletions path_server/rmf_path_server/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,9 @@ edition = "2021"
[dependencies]
futures = "0.3.32"
rclrs = "*"
rmf_prototype_msgs = "*"
ros-env = "0.2.0"
rmf_participant_discovery = { path = "../../rmf_participant_discovery" }
unique_identifier_msgs = "*"
nav_msgs = "*"
nav2_msgs = "*"
geometry_msgs = "*"
std_msgs = "*"
builtin_interfaces = { version = "2.0.3" }

serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1.0", features = ["full"] }
mapf = { git = "https://github.com/open-rmf/mapf" }
Expand Down
6 changes: 4 additions & 2 deletions path_server/rmf_path_server/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
// limitations under the License.

use mapf_post::{na::Isometry2, MapfResult, SemanticPlan, SemanticWaypoint};
use nav_msgs::msg::Odometry;
use rclrs::{IntoPrimitiveOptions, Node};
use rmf_prototype_msgs::msg::{Destination, Plan, PlanId, TrafficDependency, Waypoint};
use ros_env::builtin_interfaces;
use ros_env::nav_msgs::msg::Odometry;
use ros_env::rmf_prototype_msgs;
use ros_env::rmf_prototype_msgs::msg::{Destination, Plan, PlanId, TrafficDependency, Waypoint};
use std::collections::{hash_map::Entry, HashMap};
use std::sync::Arc;

Expand Down
4 changes: 2 additions & 2 deletions path_server/rmf_path_server/src/planner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@

use hetpibt::external_tracks_pibt::PiBTWithExternalTracks;
use mapf_post::na::Isometry2;
use nav_msgs::msg::Odometry;
use rmf_prototype_msgs::msg::Destination;
use ros_env::nav_msgs::msg::Odometry;
use ros_env::rmf_prototype_msgs::msg::Destination;
use std::collections::HashMap;

use std::sync::atomic::AtomicBool;
Expand Down
8 changes: 2 additions & 6 deletions path_server/rmf_plan_executor/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@ edition = "2021"

[dependencies]
rclrs = "*"
rmf_prototype_msgs = "*"
nav_msgs = "*"
nav2_msgs = "*"
geometry_msgs = "*"
std_msgs = "*"
builtin_interfaces = { version = "2.0.3" }
ros-env = "0.2.0"

mapf_post = { git = "https://github.com/arjo129/mapf_post", branch="arjo/feat/more_efficient_checks"}
rmf_participant_discovery = { path = "../../rmf_participant_discovery" }
13 changes: 8 additions & 5 deletions path_server/rmf_plan_executor/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,22 @@
// See the License for the specific language governing permissions and
// limitations under the License.

use geometry_msgs::msg::Pose;
use mapf_post::{
na::{Isometry2, Vector2},
spatial_allocation::{CurrentPosition, Grid2D},
MapfResult, WaypointFollower,
};
use nav2_msgs::msg::Costmap;
use nav_msgs::msg::Odometry;
use rclrs::{IntoPrimitiveOptions, Node};
use rmf_prototype_msgs::msg::{
use ros_env::builtin_interfaces;
use ros_env::geometry_msgs::msg::Pose;
use ros_env::nav2_msgs;
use ros_env::nav2_msgs::msg::Costmap;
use ros_env::nav_msgs::msg::Odometry;
use ros_env::rmf_prototype_msgs;
use ros_env::rmf_prototype_msgs::msg::{
DestinationConstraints, Plan, PlanRelease, SafeZone, SafeZoneId, TargetOrientation,
};
use ros_env::std_msgs;
use std::{
collections::{BTreeMap, HashMap},
sync::Arc,
Expand Down Expand Up @@ -525,7 +529,6 @@ impl PlanExecutor {

#[cfg(test)]
mod tests {
use super::*;
use mapf_post::na::{Isometry2, Vector2};
use mapf_post::{Trajectory, WaypointFollower};

Expand Down
4 changes: 2 additions & 2 deletions path_server/rmf_plan_executor/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.

use nav_msgs::msg::Odometry;
use rclrs::{Context, CreateBasicExecutor, IntoPrimitiveOptions, SpinOptions};
use rmf_plan_executor::PlanExecutor;
use rmf_prototype_msgs::msg::{ParticipantList, Plan};
use ros_env::nav_msgs::msg::Odometry;
use ros_env::rmf_prototype_msgs::msg::{ParticipantList, Plan};
use std::collections::HashMap;

struct RobotConnections {
Expand Down
2 changes: 1 addition & 1 deletion rmf_participant_discovery/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ edition = "2021"

[dependencies]
rclrs = "*"
rmf_prototype_msgs = "*"
ros-env = "0.2.0"
4 changes: 2 additions & 2 deletions rmf_participant_discovery/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
// limitations under the License.

use rclrs::IntoPrimitiveOptions;
use rmf_prototype_msgs::msg::ParticipantList;
use ros_env::rmf_prototype_msgs::msg::ParticipantList;
use std::collections::HashSet;

#[derive(Debug, Clone, Default)]
Expand Down Expand Up @@ -101,7 +101,7 @@ where
#[cfg(test)]
mod tests {
use super::*;
use rmf_prototype_msgs::msg::Participant;
use ros_env::rmf_prototype_msgs::msg::Participant;

#[test]
fn test_participant_tracker() {
Expand Down
Loading