Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

updates project to work with zephyr v4.0.x #146

Open
wants to merge 4 commits into
base: jazzy
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 17 additions & 46 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,71 +1,42 @@
name: CI

on:
workflow_dispatch:
inputs:
name:
description: "Manual trigger"
pull_request:
branches:
- '**'
branches-ignore: ["iron", "rolling", "humble"]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please do not ignore PR to active branches


jobs:

micro_ros_zephyr_module:
runs-on: ubuntu-latest
container: ubuntu:22.04
container:
image: zephyrprojectrtos/ci:v0.26.17
options: --user root
env:
CMAKE_PREFIX_PATH: /opt/toolchains
strategy:
fail-fast: false
matrix:
zephyr_version: ["zephyr-v3.1.0", "zephyr-v2.7.2"]
include:
- zephyr_version: zephyr-v2.7.2
zephyr_sdk: 0.14.2
sdk_filename: zephyr-sdk-$TOOLCHAIN_VERSION\_linux-x86_64_minimal.tar.gz
- zephyr_version: zephyr-v3.1.0
zephyr_sdk: 0.14.2
sdk_filename: zephyr-sdk-$TOOLCHAIN_VERSION\_linux-x86_64_minimal.tar.gz
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
path: micro_ros_zephyr_module

- name: Build
shell: bash
run: |
# Install dependencies
apt update
export DEBIAN_FRONTEND=noninteractive
apt install -y --no-install-recommends wget git cmake ninja-build gperf \
ccache dfu-util device-tree-compiler wget \
python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \
make gcc gcc-multilib g++-multilib libsdl2-dev

# Install Zephyr environment
pip3 install --user -U west
export PATH=~/.local/bin:/github/home/.local/bin:"$PATH"
west init zephyrproject
cd zephyrproject
cd zephyr
git checkout ${{ matrix.zephyr_version }}
cd ..
west update
west zephyr-export
pip3 install --user -r zephyr/scripts/requirements.txt
cd ..
export TOOLCHAIN_VERSION=${{ matrix.zephyr_sdk }}
export TOOLCHAIN_FILE_NAME=${{ matrix.sdk_filename }}
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v$TOOLCHAIN_VERSION/$TOOLCHAIN_FILE_NAME
tar xvf $TOOLCHAIN_FILE_NAME
cd zephyr-sdk-$TOOLCHAIN_VERSION
./setup.sh -h -t arm-zephyr-eabi -c
cd ..
source zephyr-sdk-$TOOLCHAIN_VERSION/environment-setup-x86_64-pokysdk-linux
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=$(pwd)/zephyr-sdk-$TOOLCHAIN_VERSION
source zephyrproject/zephyr/zephyr-env.sh
# Zephyr setup
apt -y update
west init
west update --narrow

# Installing micro-ROS prerequisites
pip3 install catkin_pkg lark-parser empy colcon-common-extensions

# Build with Serial USB transport
west build -b disco_l475_iot1 micro_ros_zephyr_module -- -DCONFIG_MICROROS_TRANSPORT_SERIAL_USB=y
west build -b disco_l475_iot1 $GITHUB_WORKSPACE/micro_ros_zephyr_module -p -- -DCONFIG_MICROROS_TRANSPORT_SERIAL_USB=y

# Build with Serial transport
west build -b disco_l475_iot1 micro_ros_zephyr_module -- -DCONFIG_MICROROS_TRANSPORT_SERIAL=y
west build -b disco_l475_iot1 $GITHUB_WORKSPACE/micro_ros_zephyr_module -p -- -DCONFIG_MICROROS_TRANSPORT_SERIAL=y
48 changes: 48 additions & 0 deletions .github/workflows/legacy_ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Legacy_CI

on:
workflow_dispatch:
inputs:
name:
description: "Manual trigger"
pull_request:
branches: ["iron", "rolling", "humble"]

jobs:

legacy_micro_ros_zephyr_module:
runs-on: ubuntu-latest
container:
image: zephyrprojectrtos/ci:v0.23.2
options: --user root
env:
CMAKE_PREFIX_PATH: /opt/toolchains
strategy:
fail-fast: false
matrix:
zephyr_version: ["zephyr-v3.1.0", "zephyr-v2.7.2"]
steps:
- uses: actions/checkout@v4
with:
path: micro_ros_zephyr_module

- name: Build
shell: bash
run: |
# Zephyr setup
apt -y update
west init
cd zephyr
git checkout ${{ matrix.zephyr_version }}
cd ..
west update --narrow

# Installing micro-ROS prerequisites
pip3 install catkin_pkg lark-parser empy colcon-common-extensions

# Build with Serial USB transport
west build -b disco_l475_iot1 $GITHUB_WORKSPACE/micro_ros_zephyr_module -p -- -DCONFIG_MICROROS_TRANSPORT_SERIAL_USB=y

# Build with Serial transport
west build -b disco_l475_iot1 $GITHUB_WORKSPACE/micro_ros_zephyr_module -p -- -DCONFIG_MICROROS_TRANSPORT_SERIAL=y

56 changes: 56 additions & 0 deletions .github/workflows/legacy_nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Legacy_Nightly

on:
workflow_dispatch:
inputs:
name:
description: "Manual trigger"
schedule:
- cron: '0 4 * * *'

jobs:

legacy_nightly_micro_ros_zephyr_module:
runs-on: ubuntu-latest
container:
image: zephyrprojectrtos/ci:v0.23.2
options: --user root
env:
CMAKE_PREFIX_PATH: /opt/toolchains
strategy:
fail-fast: false
matrix:
zephyr_version: ["zephyr-v3.1.0", "zephyr-v2.7.2"]
distro: ["iron", "humble", "rolling"]
include:
- distro: iron
branch: iron
- distro: humble
branch: humble
- distro: rolling
branch: rolling
steps:
- uses: actions/checkout@v4
with:
path: micro_ros_zephyr_module
ref: ${{ matrix.branch }}

- name: Build
shell: bash
run: |
# Zephyr setup
apt -y update
west init
cd zephyr
git checkout ${{ matrix.zephyr_version }}
cd ..
west update --narrow

# Installing micro-ROS prerequisites
pip3 install catkin_pkg lark-parser empy colcon-common-extensions

# Build with Serial USB transport
west build -b disco_l475_iot1 $GITHUB_WORKSPACE/micro_ros_zephyr_module -p -- -DCONFIG_MICROROS_TRANSPORT_SERIAL_USB=y

# Build with Serial transport
west build -b disco_l475_iot1 $GITHUB_WORKSPACE/micro_ros_zephyr_module -p -- -DCONFIG_MICROROS_TRANSPORT_SERIAL=y
69 changes: 14 additions & 55 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,75 +10,34 @@ on:

jobs:

micro_ros_zephyr_module:
nightly_micro_ros_zephyr_module:
runs-on: ubuntu-latest
container: ubuntu:22.04
container:
image: zephyrprojectrtos/ci:v0.26.17
options: --user root
env:
CMAKE_PREFIX_PATH: /opt/toolchains
strategy:
fail-fast: false
matrix:
zephyr_version: ["zephyr-v3.1.0", "zephyr-v2.7.2"]
distro: ["iron", "humble", "rolling", "jazzy"]
include:
- distro: iron
branch: iron
- distro: rolling
branch: rolling
- distro: humble
branch: humble
- distro: jazzy
branch: jazzy
- zephyr_version: zephyr-v2.7.2
zephyr_sdk: 0.14.2
sdk_filename: zephyr-sdk-$TOOLCHAIN_VERSION\_linux-x86_64_minimal.tar.gz
- zephyr_version: zephyr-v3.1.0
zephyr_sdk: 0.14.2
sdk_filename: zephyr-sdk-$TOOLCHAIN_VERSION\_linux-x86_64_minimal.tar.gz
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
path: micro_ros_zephyr_module
branch: ${{ matrix.branch }}
ref: jazzy
Comment on lines +23 to +26
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nightly is not running all ROS 2 distros as in previous approach

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello @pablogs9. Thanks for the feedback.

Currently, I have split the GitHub actions into the following configurations:

  1. The iron/rolling/humble coverage was moved into GitHub actions called "legacy_ci.yml" and "legacy_nightly.yml". These "legacy" actions test the iron/rolling/humble branches against Zephyr versions v3.1.0 and v2.7.2, using the Zephyr docker image based on SDK 0.14.2. [This matches the configuration currently in use by this microROS Zephyr project.]

  2. The jazzy coverage is in "ci.yml" and "nightly.yml". These actions are running with Zephyr version v4.0.99, using the Zephyr docker image based on SDK 0.16.9-rc3.

Is it imperative that the older ROS 2 distros run on the newer Zephyr setup?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello @Z0rdon,

Humble is an active distro until May 2027 and Rolling is "newer" than Jazzy.

I'm okay with getting rid of Iron since it is EOL.

Concerning the CI, ideally, we need to have a single workflow that tests the module for all active distros.


- name: Build
shell: bash
run: |
# Install dependencies
apt update
export DEBIAN_FRONTEND=noninteractive
apt install -y --no-install-recommends wget git cmake ninja-build gperf \
ccache dfu-util device-tree-compiler wget \
python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \
make gcc gcc-multilib g++-multilib libsdl2-dev

# Install Zephyr environment
pip3 install --user -U west
export PATH=~/.local/bin:/github/home/.local/bin:"$PATH"
west init zephyrproject
cd zephyrproject
cd zephyr
git checkout ${{ matrix.zephyr_version }}
cd ..
west update
west zephyr-export
pip3 install --user -r zephyr/scripts/requirements.txt
cd ..
export TOOLCHAIN_VERSION=${{ matrix.zephyr_sdk }}
export TOOLCHAIN_FILE_NAME=${{ matrix.sdk_filename }}
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v$TOOLCHAIN_VERSION/$TOOLCHAIN_FILE_NAME
tar xvf $TOOLCHAIN_FILE_NAME
cd zephyr-sdk-$TOOLCHAIN_VERSION
./setup.sh -h -t arm-zephyr-eabi -c
cd ..
source zephyr-sdk-$TOOLCHAIN_VERSION/environment-setup-x86_64-pokysdk-linux
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=$(pwd)/zephyr-sdk-$TOOLCHAIN_VERSION
source zephyrproject/zephyr/zephyr-env.sh
# Zephyr setup
apt -y update
west init
west update --narrow

# Installing micro-ROS prerequisites
pip3 install catkin_pkg lark-parser empy colcon-common-extensions

# Build with Serial USB transport
west build -b disco_l475_iot1 micro_ros_zephyr_module -- -DCONFIG_MICROROS_TRANSPORT_SERIAL_USB=y
west build -b disco_l475_iot1 $GITHUB_WORKSPACE/micro_ros_zephyr_module -p -- -DCONFIG_MICROROS_TRANSPORT_SERIAL_USB=y

# Build with Serial transport
west build -b disco_l475_iot1 micro_ros_zephyr_module -- -DCONFIG_MICROROS_TRANSPORT_SERIAL=y
west build -b disco_l475_iot1 $GITHUB_WORKSPACE/micro_ros_zephyr_module -p -- -DCONFIG_MICROROS_TRANSPORT_SERIAL=y
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

# micro-ROS module for Zephyr

This module has been tested in Zephyr RTOS v2.7.0 (SDK 0.14.2) and v3.1.0 (SDK 0.14.2).
This module has been tested in Zephyr RTOS v4.0.99 (SDK 0.16.9-rc3), using a docker image based on 'zephyrprojectrtos/zephyr-build:v0.26.17'.

## Dependencies

Expand All @@ -18,7 +18,7 @@ pip3 install catkin_pkg lark-parser empy colcon-common-extensions
For example for `disco_l475_iot1` board:

```bash
west build -b disco_l475_iot1 micro_ros_zephyr_module
west build -b disco_l475_iot1 -p
```

Some configuration parameters can be found using:
Expand Down
4 changes: 1 addition & 3 deletions modules/libmicroros/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,9 @@ externalproject_add(libmicroros_project
BUILD_BYPRODUCTS ${MICROROS_DIR}/libmicroros.a
)

zephyr_library_import(libmicroros ${MICROROS_DIR}/libmicroros.a)
zephyr_link_libraries(${MICROROS_DIR}/libmicroros.a)

zephyr_interface_library_named(microros)
add_dependencies(microros libmicroros)
add_dependencies(microros libmicroros_project)
target_include_directories(microros INTERFACE ${MICROROS_DIR}/include)

Expand Down Expand Up @@ -96,7 +95,6 @@ zephyr_library_sources(

add_dependencies(microros microros_transports)
add_dependencies(microros_transports libmicroros_project)
add_dependencies(microros_transports libmicroros)

# Cleaning

Expand Down
2 changes: 1 addition & 1 deletion prj.conf
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
CONFIG_GPIO=y
CONFIG_MICROROS=y
CONFIG_CPP=y

CONFIG_MAIN_STACK_SIZE=25000
CONFIG_MAIN_THREAD_PRIORITY=3
Expand All @@ -9,7 +10,6 @@ CONFIG_NEWLIB_LIBC_NANO=n
CONFIG_PTHREAD_IPC=n

CONFIG_POSIX_API=y
CONFIG_APP_LINK_WITH_POSIX_SUBSYS=y
CONFIG_POSIX_CLOCK=y

CONFIG_STDOUT_CONSOLE=y
Expand Down
5 changes: 3 additions & 2 deletions src/main.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <version.h>

#if ZEPHYR_VERSION_CODE >= ZEPHYR_VERSION(3,1,0)
#include <zephyr/zephyr.h>
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/gpio.h>
Expand Down Expand Up @@ -39,7 +39,7 @@ void timer_callback(rcl_timer_t * timer, int64_t last_call_time)
}
}

void main(void)
int main(void)
{
rmw_uros_set_custom_transport(
MICRO_ROS_FRAMING_REQUIRED,
Expand Down Expand Up @@ -91,4 +91,5 @@ void main(void)
// free resources
RCCHECK(rcl_publisher_fini(&publisher, &node))
RCCHECK(rcl_node_fini(&node))
return 0;
}
Loading