diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f07be7632..ba54cd392 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,78 +1,95 @@
-name: "CI: Run tests"
-on:
- pull_request:
- types: [opened, synchronize, reopened]
- push:
- branches:
- - develop
- - master
- - "release/*"
-jobs:
- build:
- defaults:
- run:
- shell: bash
- working-directory: "/opt/carma/"
- runs-on: ubuntu-latest
- container:
- image: usdotfhwastol/carma-base:carma-system-4.5.0
- env:
- INIT_ENV: "/home/carma/.base-image/init-env.sh"
- ROS_2_ENV: "/opt/ros/foxy/setup.bash"
- TERM: xterm
- options: "--user root"
- steps:
- - name: Checkout ${{ github.event.repository.name }}
- uses: actions/checkout@v3.3.0
- with:
- path: src/${{ github.event.repository.name }}
- fetch-depth: 0
- - name: Move source code
- run: mv $GITHUB_WORKSPACE/src /opt/carma/
- - name: Checkout dependencies
- run: |
- ./src/${{ github.event.repository.name }}/carma-messenger-core/docker/checkout.bash -r /opt/carma/
- - name: Build Ros1
- run: |
- source "$INIT_ENV"
- PACKAGES=$(find . -maxdepth 2 -type f -name package.xml | sed 's/\.\///' | cut -d/ -f1)
- sed -i '/colcon build/ s/$/ --parallel-workers 4 --packages-up-to $PACKAGES/' /home/carma/.ci-image/engineering_tools/code_coverage/make_with_coverage.bash
- make_with_coverage.bash -m -e /opt/carma/ -o ./coverage_reports/gcov
- - name: Run Ros1 C++ Tests
- continue-on-error: true
- run: |
- source "$INIT_ENV"
- sed -i '/colcon test/ s/$/ --parallel-workers 4 --packages-above $PACKAGES/' /home/carma/.ci-image/engineering_tools/code_coverage/make_with_coverage.bash
- make_with_coverage.bash -t -e /opt/carma/ -o ./coverage_reports/gcov
- - name: Backup ROS1 compile_commands.json
- run: |
- mv /opt/carma/build/compile_commands.json /opt/carma/compile_commands.ros1.json
- - name: Cleanup before ROS 2 build
- # Clear the build and install folders before building ROS 2
- run: |
- rm -rf /opt/carma/install
- rm -rf /opt/carma/build
- - name: Build Ros2
- run: |
- source "$INIT_ENV"
- source "$ROS_2_ENV"
- PACKAGES=$(find . -maxdepth 2 -type f -name package.xml | sed 's/\.\///' | cut -d/ -f1)
- sed -i '/colcon build/ s/$/ --parallel-workers 4 --packages-up-to $PACKAGES/' /home/carma/.ci-image/engineering_tools/code_coverage/make_with_coverage.bash
- make_with_coverage.bash -m -e /opt/carma/ -o ./coverage_reports/gcov
- - name: Run Ros2 C++ Tests
- continue-on-error: true
- run: |
- source "$INIT_ENV"
- source "$ROS_2_ENV"
- sed -i '/colcon test/ s/$/ --parallel-workers 4 --packages-above $PACKAGES/' /home/carma/.ci-image/engineering_tools/code_coverage/make_with_coverage.bash
- make_with_coverage.bash -t -e /opt/carma/ -o ./coverage_reports/gcov
- - name: Combine ROS1 and ROS2 compile_commands.json files
- continue-on-error: true
- run: |
- mv /opt/carma/build/compile_commands.json /opt/carma/compile_commands.ros2.json
- jq -s add /opt/carma/compile_commands.ros1.json /opt/carma/compile_commands.ros2.json > /opt/carma/build/compile_commands.json
- - name: Run SonarScanner
- uses: usdot-fhwa-stol/actions/sonar-scanner@main
- with:
- sonar-token: ${{ secrets.SONAR_TOKEN }}
- working-dir: "/opt/carma/src/${{ github.event.repository.name }}"
+name: "CI: Run tests"
+on:
+ pull_request:
+ types: [opened, synchronize, reopened]
+ push:
+ branches:
+ - develop
+ - master
+ - "release/*"
+jobs:
+ determine_docker_org_and_tag:
+ runs-on: ubuntu-latest
+ outputs:
+ docker_organization: ${{ steps.docker-org-and-tag.outputs.docker_organization }}
+ docker_image_tag: ${{ steps.docker-org-and-tag.outputs.docker_image_tag }}
+ steps:
+ - id: docker-org-and-tag
+ uses: usdot-fhwa-stol/actions/docker-org-and-tag@main
+ build:
+ needs: determine_docker_org_and_tag
+ defaults:
+ run:
+ shell: bash
+ working-directory: "/opt/carma/"
+ runs-on: ubuntu-latest
+ container:
+ image: ${{ needs.determine_docker_org_and_tag.outputs.docker_organization }}/carma-base:${{ needs.determine_docker_org_and_tag.outputs.docker_image_tag }}
+ env:
+ INIT_ENV: "/home/carma/.base-image/init-env.sh"
+ ROS_2_ENV: "/opt/ros/foxy/setup.bash"
+ TERM: xterm
+ options: "--user root"
+ steps:
+ - name: Checkout ${{ github.event.repository.name }}
+ uses: actions/checkout@v4
+ with:
+ path: src/${{ github.event.repository.name }}
+ fetch-depth: 0
+ - name: Move source code
+ run: mv $GITHUB_WORKSPACE/src /opt/carma/
+ - name: Determine base branch
+ id: determine-base-branch
+ run: |
+ if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
+ echo git_branch="$GITHUB_BASE_REF" >> $GITHUB_OUTPUT
+ else
+ echo git_branch="$GITHUB_REF_NAME" >> $GITHUB_OUTPUT
+ fi
+ - name: Checkout dependencies
+ run: |
+ ./src/${{ github.event.repository.name }}/carma-messenger-core/docker/checkout.bash -r /opt/carma/ -b ${{ steps.determine-base-branch.outputs.git_branch }}
+ - name: Build Ros1
+ run: |
+ source "$INIT_ENV"
+ PACKAGES=$(find . -maxdepth 2 -type f -name package.xml | sed 's/\.\///' | cut -d/ -f1)
+ sed -i '/colcon build/ s/$/ --parallel-workers 4 --packages-up-to $PACKAGES/' /home/carma/.ci-image/engineering_tools/code_coverage/make_with_coverage.bash
+ make_with_coverage.bash -m -e /opt/carma/ -o ./coverage_reports/gcov
+ - name: Run Ros1 C++ Tests
+ continue-on-error: true
+ run: |
+ source "$INIT_ENV"
+ sed -i '/colcon test/ s/$/ --parallel-workers 4 --packages-above $PACKAGES/' /home/carma/.ci-image/engineering_tools/code_coverage/make_with_coverage.bash
+ make_with_coverage.bash -t -e /opt/carma/ -o ./coverage_reports/gcov
+ - name: Backup ROS1 compile_commands.json
+ run: |
+ mv /opt/carma/build/compile_commands.json /opt/carma/compile_commands.ros1.json
+ - name: Cleanup before ROS 2 build
+ # Clear the build and install folders before building ROS 2
+ run: |
+ rm -rf /opt/carma/install
+ rm -rf /opt/carma/build
+ - name: Build Ros2
+ run: |
+ source "$INIT_ENV"
+ source "$ROS_2_ENV"
+ PACKAGES=$(find . -maxdepth 2 -type f -name package.xml | sed 's/\.\///' | cut -d/ -f1)
+ sed -i '/colcon build/ s/$/ --parallel-workers 4 --packages-up-to $PACKAGES/' /home/carma/.ci-image/engineering_tools/code_coverage/make_with_coverage.bash
+ make_with_coverage.bash -m -e /opt/carma/ -o ./coverage_reports/gcov
+ - name: Run Ros2 C++ Tests
+ continue-on-error: true
+ run: |
+ source "$INIT_ENV"
+ source "$ROS_2_ENV"
+ sed -i '/colcon test/ s/$/ --parallel-workers 4 --packages-above $PACKAGES/' /home/carma/.ci-image/engineering_tools/code_coverage/make_with_coverage.bash
+ make_with_coverage.bash -t -e /opt/carma/ -o ./coverage_reports/gcov
+ - name: Combine ROS1 and ROS2 compile_commands.json files
+ continue-on-error: true
+ run: |
+ mv /opt/carma/build/compile_commands.json /opt/carma/compile_commands.ros2.json
+ jq -s add /opt/carma/compile_commands.ros1.json /opt/carma/compile_commands.ros2.json > /opt/carma/build/compile_commands.json
+ - name: Run SonarScanner
+ uses: usdot-fhwa-stol/actions/sonar-scanner@main
+ with:
+ sonar-token: ${{ secrets.SONAR_TOKEN }}
+ working-dir: "/opt/carma/src/${{ github.event.repository.name }}"
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index bb025f102..93f9e657d 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -1,50 +1,36 @@
-name: Docker build
-on:
- pull_request:
- types: [opened, synchronize, reopened]
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v2
- - name: Login to DockerHub
- uses: docker/login-action@v2
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
- # branch names with special characters cannot be used to create docker image tag,
- # so removing all special characters and replacing them with - for valid docker image tag.
- - name: Modify Branch Name
- run: echo "MODIFIED_BRANCH_NAME=$(echo '${{ github.ref_name }}' | sed 's/[^a-zA-Z0-9]/-/g')" >> $GITHUB_ENV
- - name: Print Modified Branch Name
- run: echo "Modified the branch name to $MODIFIED_BRANCH_NAME"
- - name: Build and Push carma-messenger-ui Docker Image
- uses: docker/build-push-action@v3
- with:
- context: ./carma-messenger-ui/
- push: true
- tags: usdotfhwastol/carma-messenger-ui:${{ env.MODIFIED_BRANCH_NAME }}
-
- - name: Build and Push carma-messenger-core Docker Image
- uses: docker/build-push-action@v3
- with:
- context: ./carma-messenger-core/
- push: true
- tags: usdotfhwastol/carma-messenger-core:${{ env.MODIFIED_BRANCH_NAME }}
-
- - name: Build and Push chevrolet_tahoe_2018 Docker Image
- uses: docker/build-push-action@v3
- with:
- context: ./carma-messenger-config/chevrolet_tahoe_2018/
- push: true
- tags: usdotfhwastol/carma-messenger-config:${{ env.MODIFIED_BRANCH_NAME }}-chevrolet_tahoe_2018
-
- - name: Build and Push development Docker Image
- uses: docker/build-push-action@v3
- with:
- context: ./carma-messenger-config/development/
- push: true
- tags: usdotfhwastol/carma-messenger-config:${{ env.MODIFIED_BRANCH_NAME }}-development
+name: Docker build
+on:
+ pull_request:
+ types: [opened, synchronize, reopened]
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Login to DockerHub
+ uses: docker/login-action@v3
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+ - name: Build and Push carma-messenger-ui Docker Image
+ uses: docker/build-push-action@v5
+ with:
+ context: ./carma-messenger-ui/
+ - name: Build and Push carma-messenger-core Docker Image
+ uses: docker/build-push-action@v5
+ with:
+ context: ./carma-messenger-core/
+ build-args: |
+ BRANCH=${{ github.base_ref }}
+ - name: Build and Push chevrolet_tahoe_2018 Docker Image
+ uses: docker/build-push-action@v5
+ with:
+ context: ./carma-messenger-config/chevrolet_tahoe_2018/
+
+ - name: Build and Push development Docker Image
+ uses: docker/build-push-action@v5
+ with:
+ context: ./carma-messenger-config/development/
diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml
index 9415758b8..3eef0eae6 100644
--- a/.github/workflows/dockerhub.yml
+++ b/.github/workflows/dockerhub.yml
@@ -1,53 +1,89 @@
-name: Docker Hub build
-on:
- push:
- branches:
- - "develop"
- - "master"
- - "release/*"
- tags:
- - "carma-system-*"
-jobs:
- docker:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v2
- - name: Login to DockerHub
- uses: docker/login-action@v2
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
-
- - name: Build and Push carma-messenger-ui Docker Image
- uses: docker/build-push-action@v3
- with:
- context: ./carma-messenger-ui/
- push: true
- tags: usdotfhwastol/carma-messenger-ui:${{ github.ref_name }}-carma-messenger-ui
-
- - name: Build and Push carma-messenger-core Docker Image
- uses: docker/build-push-action@v3
- with:
- context: ./carma-messenger-core/
- push: true
- tags: usdotfhwastol/carma-messenger-core:${{ github.ref_name }}-carma-messenger-core
-
- - name: Build and Push chevrolet_tahoe_2018 Docker Image
- uses: docker/build-push-action@v3
- with:
- context: ./carma-messenger-config/chevrolet_tahoe_2018/
- push: true
- tags: usdotfhwastol/carma-messenger-config:${{ github.ref_name }}-chevrolet_tahoe_2018
-
- - name: Build and Push development Docker Image
- uses: docker/build-push-action@v3
- with:
- context: ./carma-messenger-config/development/
- push: true
- tags: usdotfhwastol/carma-messenger-config:${{ github.ref_name }}-development
-
-
-
+name: Docker Hub build
+on:
+ push:
+ branches:
+ - develop
+ - master
+ - "release/*"
+ tags:
+ - "carma-system-*"
+jobs:
+ determine_docker_org_and_tag:
+ runs-on: ubuntu-latest
+ outputs:
+ docker_organization: ${{ steps.docker-org-and-tag.outputs.docker_organization }}
+ docker_image_tag: ${{ steps.docker-org-and-tag.outputs.docker_image_tag }}
+ steps:
+ - id: docker-org-and-tag
+ uses: usdot-fhwa-stol/actions/docker-org-and-tag@main
+ docker:
+ needs: determine_docker_org_and_tag
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Get Docker Image Metadata
+ shell: bash
+ id: docker-image-metadata
+ run: |
+ echo system_version=$("./carma-messenger-core/docker/get-system-version.sh") >> $GITHUB_OUTPUT
+ echo build_date=$("date -u +”%Y-%m-%dT%H:%M:%SZ") >> $GITHUB_OUTPUT
+ echo vcs_ref=$("git rev-parse --short HEAD")
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Login to DockerHub
+ uses: docker/login-action@v3
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+
+ - name: Build and Push carma-messenger-ui Docker Image
+ uses: docker/build-push-action@v5
+ with:
+ context: ./carma-messenger-ui/
+ push: true
+ tags: usdotfhwastol/carma-messenger-ui:${{ github.ref_name }}
+ build-args: |
+ BUILD_DATE=${{ steps.docker-image-metadata.outcome.build_date }}
+ VCS_REF=${{ steps.docker-image-metadata.outcome.vcs_ref }}
+ VERSION=${{ steps.docker-image-metadata.outcome.version }}
+
+
+ - name: Build and Push carma-messenger-core Docker Image
+ uses: docker/build-push-action@v5
+ with:
+ context: ./carma-messenger-core/
+ push: true
+ tags: usdotfhwastol/carma-messenger-core:${{ github.ref_name }}
+ build-args: |
+ GIT_BRANCH=${{ github.ref_name }}
+ DOCKER_TAG=${{ needs.determine_docker_org_and_tag.outputs.docker_image_tag }}
+ DOCKER_ORG=${{ needs.determine_docker_org_and_tag.outputs.docker_organization }}
+ BUILD_DATE=${{ steps.docker-image-metadata.outcome.build_date }}
+ VCS_REF=${{ steps.docker-image-metadata.outcome.vcs_ref }}
+ VERSION=${{ steps.docker-image-metadata.outcome.version }}
+
+ - name: Build and Push chevrolet_tahoe_2018 Docker Image
+ uses: docker/build-push-action@v5
+ with:
+ context: ./carma-messenger-config/chevrolet_tahoe_2018/
+ push: true
+ tags: usdotfhwastol/carma-messenger-config:${{ github.ref_name }}-chevrolet_tahoe_2018
+ build-args: |
+ BUILD_DATE=${{ steps.docker-image-metadata.outcome.build_date }}
+ VCS_REF=${{ steps.docker-image-metadata.outcome.vcs_ref }}
+ VERSION=${{ steps.docker-image-metadata.outcome.version }}
+
+ - name: Build and Push development Docker Image
+ uses: docker/build-push-action@v5
+ with:
+ context: ./carma-messenger-config/development/
+ push: true
+ tags: usdotfhwastol/carma-messenger-config:${{ github.ref_name }}-development
+ build-args: |
+ BUILD_DATE=${{ steps.docker-image-metadata.outcome.build_date }}
+ VCS_REF=${{ steps.docker-image-metadata.outcome.vcs_ref }}
+ VERSION=${{ steps.docker-image-metadata.outcome.version }}
+
+
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..cf9b0c9a8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,44 @@
+*.bak
+logs
+.project
+.classpath
+.settings
+gradle.properties
+.gradle
+*~
+myClock.bin
+/*.tar.gz
+*.class
+**/bin
+**/__pycache__
+
+# ignore build directories
+build
+target
+devel
+
+# ignore Intellij project files and dirs
+*.ipr
+*.iws
+*.iml
+.idea
+/src/ruby/*
+!/src/ruby/*.rb
+
+# Ignore root level CMakeLists.txt
+/CMakeLists.txt
+
+# Ignore Guidance auto-generate VersionID files
+carma/guidance/src/main/resources/version
+carma/guidance/out/**
+carma/route/out/**
+
+# Ignore sensitive data files and directories
+srx_can_driver
+srx_objects
+truck_can_driver
+**/J2735_201603.asn1
+
+# exceptions
+!hooks/build
+.vscode
diff --git a/README.md b/README.md
index 0c0f0bcfd..ecc5d4724 100644
--- a/README.md
+++ b/README.md
@@ -2,17 +2,17 @@
|----------------------|---------------------|
[![CI](https://github.com/usdot-fhwa-stol/carma-messenger/actions/workflows/ci.yml/badge.svg)](https://github.com/usdot-fhwa-stol/carma-messenger/actions/workflows/ci.yml) | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=usdot-fhwa-stol_carma-messenger&metric=alert_status)](https://sonarcloud.io/dashboard?id=usdot-fhwa-stol_carma-messenger) |
# DockerHub Release Builds
-| Carma Messenger UI | Carma Messenger Config | Carma Messenger Core |
-|-----|-----|-----|
-[![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/usdotfhwastol/carma-messenger-ui?label=Carma%20messenger%20UI)](https://hub.docker.com/repository/docker/usdotfhwastol/carma-messenger-ui) | [![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/usdotfhwastol/carma-messenger-config?label=Carma%20messenger%20Config)](https://hub.docker.com/repository/docker/usdotfhwastol/carma-messenger-config) | [![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/usdotfhwastol/carma-messenger-core?label=Carma%20messenger%20Core)](https://hub.docker.com/repository/docker/usdotfhwastol/carma-messenger-core)
+| Carma Messenger UI & Carma Messenger Config & Carma Messenger Core |
+|-----|
+[![Docker Hub build](https://github.com/usdot-fhwa-stol/carma-messenger/actions/workflows/dockerhub.yml/badge.svg?branch=master)](https://github.com/usdot-fhwa-stol/carma-messenger/actions/workflows/dockerhub.yml)
# DockerHub Release Candidate Builds
-| Carma Messenger UI | Carma Messenger Config | Carma Messenger Core |
-|-----|-----|-----|
-[![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/usdotfhwastolcandidate/carma-messenger-ui?label=Carma%20messenger%20UI)](https://hub.docker.com/repository/docker/usdotfhwastolcandidate/carma-messenger-ui) | [![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/usdotfhwastolcandidate/carma-messenger-config?label=Carma%20messenger%20Config)](https://hub.docker.com/repository/docker/usdotfhwastolcandidate/carma-messenger-config) | [![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/usdotfhwastolcandidate/carma-messenger-core?label=Carma%20messenger%20Core)](https://hub.docker.com/repository/docker/usdotfhwastolcandidate/carma-messenger-core)
+| Carma Messenger UI & Carma Messenger Config & Carma Messenger Core |
+|-----|
+[![Docker Hub build](https://github.com/usdot-fhwa-stol/carma-messenger/actions/workflows/dockerhub.yml/badge.svg?branch=release%2Flavida)](https://github.com/usdot-fhwa-stol/carma-messenger/actions/workflows/dockerhub.yml)
# DockerHub Develop Builds
-| Carma Messenger UI | Carma Messenger Config | Carma Messenger Core |
-|-----|-----|-----|
-[![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/usdotfhwastoldev/carma-messenger-ui?label=Carma%20messenger%20UI)](https://hub.docker.com/repository/docker/usdotfhwastoldev/carma-messenger-ui) | [![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/usdotfhwastoldev/carma-messenger-config?label=Carma%20messenger%20Config)](https://hub.docker.com/repository/docker/usdotfhwastoldev/carma-messenger-config) | [![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/usdotfhwastoldev/carma-messenger-core?label=Carma%20messenger%20Core)](https://hub.docker.com/repository/docker/usdotfhwastoldev/carma-messenger-core)
+| Carma Messenger UI & Carma Messenger Config & Carma Messenger Core |
+|-----|
+[![Docker Hub build](https://github.com/usdot-fhwa-stol/carma-messenger/actions/workflows/dockerhub.yml/badge.svg?branch=develop)](https://github.com/usdot-fhwa-stol/carma-messenger/actions/workflows/dockerhub.yml)
diff --git a/carma-messenger-config/chevrolet_tahoe_2018/.env b/carma-messenger-config/chevrolet_tahoe_2018/.env
new file mode 100644
index 000000000..a21604879
--- /dev/null
+++ b/carma-messenger-config/chevrolet_tahoe_2018/.env
@@ -0,0 +1,2 @@
+DOCKER_ORG=usdotfhwastoldev
+DOCKER_TAG=develop
\ No newline at end of file
diff --git a/carma-messenger-config/chevrolet_tahoe_2018/Dockerfile b/carma-messenger-config/chevrolet_tahoe_2018/Dockerfile
index c3baa8fad..5859310e4 100755
--- a/carma-messenger-config/chevrolet_tahoe_2018/Dockerfile
+++ b/carma-messenger-config/chevrolet_tahoe_2018/Dockerfile
@@ -1,11 +1,11 @@
-# Copyright (C) 2018-2021 LEIDOS.
-#
+# Copyright (C) 2018-2024 LEIDOS.
+#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -35,5 +35,7 @@ LABEL org.label-schema.build-date=${BUILD_DATE}
ADD . /root/vehicle/config
VOLUME /opt/carma/vehicle/config
+RUN mkdir -p /opt/carma/vehicle/config
+RUN cp -a /root/vehicle/config/.env /opt/carma/vehicle/config/
CMD cp /root/vehicle/config/* /opt/carma/vehicle/config
diff --git a/carma-messenger-config/chevrolet_tahoe_2018/docker-compose-background.yml b/carma-messenger-config/chevrolet_tahoe_2018/docker-compose-background.yml
index b968effc1..7a722145d 100755
--- a/carma-messenger-config/chevrolet_tahoe_2018/docker-compose-background.yml
+++ b/carma-messenger-config/chevrolet_tahoe_2018/docker-compose-background.yml
@@ -17,7 +17,7 @@ version: '2'
services:
carma-messenger-ui:
- image: usdotfhwastol/carma-messenger-ui:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-messenger-ui:${DOCKER_TAG}
network_mode: host
container_name: carma-messenger-ui
environment:
diff --git a/carma-messenger-config/chevrolet_tahoe_2018/docker-compose.yml b/carma-messenger-config/chevrolet_tahoe_2018/docker-compose.yml
index 73f402f91..c74fd5438 100755
--- a/carma-messenger-config/chevrolet_tahoe_2018/docker-compose.yml
+++ b/carma-messenger-config/chevrolet_tahoe_2018/docker-compose.yml
@@ -13,11 +13,9 @@
# the License.
# Docker Compose Spec Version
-version: '2'
-
services:
roscore:
- image: usdotfhwastol/carma-base:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-base:${DOCKER_TAG}
network_mode: host
container_name: roscore
volumes_from:
@@ -30,7 +28,7 @@ services:
command: roscore
ros1_bridge:
- image: usdotfhwastol/carma-msgs:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-msgs:${DOCKER_TAG}
network_mode: host
container_name: ros1_bridge
volumes_from:
@@ -45,7 +43,7 @@ services:
command: bash -c 'wait-for-it.sh localhost:11311 -- rosparam load /opt/carma/vehicle/config/bridge.yml && source ~/.base-image/workspace/install/setup.bash && ros2 run ros1_bridge dynamic_bridge --multi-threads'
messenger:
- image: usdotfhwastol/carma-messenger-core:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-messenger-core:${DOCKER_TAG}
network_mode: host
container_name: carma-messenger-core
volumes_from:
@@ -58,7 +56,7 @@ services:
command: wait-for-it.sh localhost:11311 -- roslaunch /opt/carma/vehicle/config/carma-messenger-docker.launch
messenger_ros2:
- image: usdotfhwastol/carma-messenger-core:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-messenger-core:${DOCKER_TAG}
network_mode: host
container_name: messenger_ros2
volumes_from:
@@ -73,7 +71,7 @@ services:
command: bash -c 'source /opt/carma/install_ros2/setup.bash && ros2 launch /opt/carma/vehicle/config/carma-messenger-docker.launch.py'
cohda_dsrc_driver:
- image: usdotfhwastol/carma-cohda-dsrc-driver:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-cohda-dsrc-driver:${DOCKER_TAG}
container_name: carma-cohda-dsrc-driver
network_mode: host
volumes_from:
@@ -87,7 +85,7 @@ services:
command: bash -c 'source /opt/carma/install/setup.bash && ros2 launch /opt/carma/vehicle/config/drivers.launch.py drivers:=dsrc_driver'
torc-pinpoint-driver:
- image: usdotfhwastol/carma-torc-pinpoint-driver:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-torc-pinpoint-driver:${DOCKER_TAG}
container_name: carma-torc-pinpoint-driver
network_mode: host
volumes_from:
@@ -99,4 +97,4 @@ services:
- /opt/carma/logs:/opt/carma/logs
- /opt/carma/.ros:/opt/carma/.ros
- /opt/carma/vehicle:/opt/carma/vehicle
- command: bash -c 'wait-for-it.sh localhost:11311 -- roslaunch /opt/carma/vehicle/config/drivers.launch drivers:=pinpoint_driver'
+ command: bash -c 'source /opt/carma/install/setup.bash && ros2 launch /opt/carma/vehicle/config/drivers.launch.py drivers:=pinpoint_driver'
diff --git a/carma-messenger-config/chevrolet_tahoe_2018/drivers.launch b/carma-messenger-config/chevrolet_tahoe_2018/drivers.launch
deleted file mode 100755
index 6098c946d..000000000
--- a/carma-messenger-config/chevrolet_tahoe_2018/drivers.launch
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/carma-messenger-config/chevrolet_tahoe_2018/drivers.launch.py b/carma-messenger-config/chevrolet_tahoe_2018/drivers.launch.py
index 74e594f2e..abd8dac7a 100644
--- a/carma-messenger-config/chevrolet_tahoe_2018/drivers.launch.py
+++ b/carma-messenger-config/chevrolet_tahoe_2018/drivers.launch.py
@@ -29,66 +29,165 @@
import launch.events
import launch_ros.actions
-import launch_ros.events
+import launch_ros.events
import launch_ros.events.lifecycle
import lifecycle_msgs.msg
+
def generate_launch_description():
"""
Launch desired CARMA Messenger drivers
"""
- env_log_levels = EnvironmentVariable('CARMA_ROS_LOGGING_CONFIG', default_value='{ "default_level" : "WARN" }')
+ env_log_levels = EnvironmentVariable(
+ "CARMA_ROS_LOGGING_CONFIG", default_value='{ "default_level" : "WARN" }'
+ )
- configuration_delay = LaunchConfiguration('configuration_delay')
+ configuration_delay = LaunchConfiguration("configuration_delay")
declare_configuration_delay_arg = DeclareLaunchArgument(
- name ='configuration_delay', default_value='4.0')
+ name="configuration_delay", default_value="4.0"
+ )
- drivers = LaunchConfiguration('drivers')
+ drivers = LaunchConfiguration("drivers")
declare_drivers_arg = DeclareLaunchArgument(
- name = 'drivers', default_value = 'dsrc_driver', description = "Desired drivers to launch specified by package name."
+ name="drivers",
+ default_value="dsrc_driver",
+ description="Desired drivers to launch specified by package name.",
)
dsrc_group = GroupAction(
- condition=IfCondition(PythonExpression(["'dsrc_driver' in '", drivers, "'.split()"])),
+ condition=IfCondition(
+ PythonExpression(["'dsrc_driver' in '", drivers, "'.split()"])
+ ),
actions=[
- PushRosNamespace(EnvironmentVariable('CARMA_INTR_NS', default_value='hardware_interface')),
+ PushRosNamespace(
+ EnvironmentVariable("CARMA_INTR_NS", default_value="hardware_interface")
+ ),
IncludeLaunchDescription(
- PythonLaunchDescriptionSource([ FindPackageShare('dsrc_driver'), '/launch/dsrc_driver.py']),
- launch_arguments = {
- 'log_level' : GetLogLevel('dsrc_driver', env_log_levels),
- }.items()
+ PythonLaunchDescriptionSource(
+ [FindPackageShare("dsrc_driver"), "/launch/dsrc_driver.py"]
+ ),
+ launch_arguments={
+ "log_level": GetLogLevel("dsrc_driver", env_log_levels),
+ }.items(),
),
- ]
+ ],
+ )
+
+ pinpoint_group = GroupAction(
+ condition=IfCondition(
+ PythonExpression(["'pinpoint_driver' in '", drivers, "'.split()"])
+ ),
+ actions=[
+ PushRosNamespace(
+ EnvironmentVariable("CARMA_INTR_NS", default_value="hardware_interface")
+ ),
+ IncludeLaunchDescription(
+ PythonLaunchDescriptionSource(
+ [FindPackageShare("pinpoint"), "/launch/pinpoint.launch.py"]
+ ),
+ launch_arguments={
+ "log_level": GetLogLevel("pinpoint", env_log_levels),
+ }.items(),
+ ),
+ ],
)
- ros2_cmd = launch.substitutions.FindExecutable(name='ros2')
+ ros2_cmd = launch.substitutions.FindExecutable(name="ros2")
process_configure_dsrc_driver_node = launch.actions.ExecuteProcess(
- cmd=[ros2_cmd, "lifecycle", "set", [ EnvironmentVariable('CARMA_INTR_NS', default_value='hardware_interface'), "/dsrc_driver_node" ], "configure"],
+ condition=IfCondition(
+ PythonExpression(["'dsrc_driver' in '", drivers, "'.split()"])
+ ),
+ cmd=[
+ ros2_cmd,
+ "lifecycle",
+ "set",
+ [
+ EnvironmentVariable(
+ "CARMA_INTR_NS", default_value="hardware_interface"
+ ),
+ "/dsrc_driver_node",
+ ],
+ "configure",
+ ],
)
- configuration_trigger = launch.actions.TimerAction(
- period=configuration_delay,
- actions=[
- process_configure_dsrc_driver_node
- ]
+ configured_event_handler_dsrc_driver_node = launch.actions.RegisterEventHandler(
+ launch.event_handlers.OnExecutionComplete(
+ target_action=process_configure_dsrc_driver_node,
+ on_completion=[
+ launch.actions.ExecuteProcess(
+ cmd=[
+ ros2_cmd,
+ "lifecycle",
+ "set",
+ [
+ EnvironmentVariable(
+ "CARMA_INTR_NS", default_value="hardware_interface"
+ ),
+ "/dsrc_driver_node",
+ ],
+ "activate",
+ ],
+ )
+ ],
+ )
)
- configured_event_handler_dsrc_driver_node = launch.actions.RegisterEventHandler(launch.event_handlers.OnExecutionComplete(
- target_action=process_configure_dsrc_driver_node,
- on_completion=[
+ process_configure_pinpoint_node = launch.actions.ExecuteProcess(
+ condition=IfCondition(
+ PythonExpression(["'pinpoint_driver' in '", drivers, "'.split()"])
+ ),
+ cmd=[
+ ros2_cmd,
+ "lifecycle",
+ "set",
+ [
+ EnvironmentVariable(
+ "CARMA_INTR_NS", default_value="hardware_interface"
+ ),
+ "/pinpoint",
+ ],
+ "configure",
+ ],
+ )
+
+ configured_event_handler_pinpoint_node = launch.actions.RegisterEventHandler(
+ launch.event_handlers.OnExecutionComplete(
+ target_action=process_configure_pinpoint_node,
+ on_completion=[
launch.actions.ExecuteProcess(
- cmd=[ros2_cmd, "lifecycle", "set", [ EnvironmentVariable('CARMA_INTR_NS', default_value='hardware_interface'), "/dsrc_driver_node" ], "activate"],
+ cmd=[
+ ros2_cmd,
+ "lifecycle",
+ "set",
+ [
+ EnvironmentVariable(
+ "CARMA_INTR_NS", default_value="hardware_interface"
+ ),
+ "/pinpoint",
+ ],
+ "activate",
+ ],
)
- ]
+ ],
)
)
- return LaunchDescription([
- declare_configuration_delay_arg,
- declare_drivers_arg,
- dsrc_group,
- configuration_trigger,
- configured_event_handler_dsrc_driver_node
- ])
+ configuration_trigger = launch.actions.TimerAction(
+ period=configuration_delay,
+ actions=[process_configure_dsrc_driver_node, process_configure_pinpoint_node],
+ )
+
+ return LaunchDescription(
+ [
+ declare_configuration_delay_arg,
+ declare_drivers_arg,
+ dsrc_group,
+ pinpoint_group,
+ configuration_trigger,
+ configured_event_handler_dsrc_driver_node,
+ configured_event_handler_pinpoint_node,
+ ]
+ )
diff --git a/carma-messenger-config/development/.env b/carma-messenger-config/development/.env
new file mode 100644
index 000000000..a21604879
--- /dev/null
+++ b/carma-messenger-config/development/.env
@@ -0,0 +1,2 @@
+DOCKER_ORG=usdotfhwastoldev
+DOCKER_TAG=develop
\ No newline at end of file
diff --git a/carma-messenger-config/development/Dockerfile b/carma-messenger-config/development/Dockerfile
index c3baa8fad..5859310e4 100755
--- a/carma-messenger-config/development/Dockerfile
+++ b/carma-messenger-config/development/Dockerfile
@@ -1,11 +1,11 @@
-# Copyright (C) 2018-2021 LEIDOS.
-#
+# Copyright (C) 2018-2024 LEIDOS.
+#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -35,5 +35,7 @@ LABEL org.label-schema.build-date=${BUILD_DATE}
ADD . /root/vehicle/config
VOLUME /opt/carma/vehicle/config
+RUN mkdir -p /opt/carma/vehicle/config
+RUN cp -a /root/vehicle/config/.env /opt/carma/vehicle/config/
CMD cp /root/vehicle/config/* /opt/carma/vehicle/config
diff --git a/carma-messenger-config/development/docker-compose-background.yml b/carma-messenger-config/development/docker-compose-background.yml
index 88a24709b..a614cbe83 100755
--- a/carma-messenger-config/development/docker-compose-background.yml
+++ b/carma-messenger-config/development/docker-compose-background.yml
@@ -17,7 +17,7 @@ version: '2'
services:
carma-messenger-ui:
- image: usdotfhwastol/carma-messenger-ui:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-messenger-ui:${DOCKER_TAG}
network_mode: host
container_name: carma-messenger-ui
volumes_from:
diff --git a/carma-messenger-config/development/docker-compose.yml b/carma-messenger-config/development/docker-compose.yml
index e09563f88..8320238f6 100755
--- a/carma-messenger-config/development/docker-compose.yml
+++ b/carma-messenger-config/development/docker-compose.yml
@@ -13,11 +13,9 @@
# the License.
# Docker Compose Spec Version
-version: '2'
-
services:
roscore:
- image: usdotfhwastol/carma-base:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-base:${DOCKER_TAG}
network_mode: host
container_name: roscore
volumes_from:
@@ -28,7 +26,7 @@ services:
command: roscore
ros1_bridge:
- image: usdotfhwastol/carma-msgs:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-msgs:${DOCKER_TAG}
network_mode: host
container_name: ros1_bridge
volumes_from:
@@ -42,7 +40,7 @@ services:
command: bash -c 'wait-for-it.sh localhost:11311 -- rosparam load /opt/carma/vehicle/config/bridge.yml && source ~/.base-image/workspace/install/setup.bash && ros2 run ros1_bridge dynamic_bridge --multi-threads'
messenger:
- image: usdotfhwastol/carma-messenger-core:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-messenger-core:${DOCKER_TAG}
network_mode: host
container_name: carma-messenger-core
volumes_from:
@@ -54,7 +52,7 @@ services:
command: wait-for-it.sh localhost:11311 -- roslaunch /opt/carma/vehicle/config/carma-messenger-docker.launch
messenger_ros2:
- image: usdotfhwastol/carma-messenger-core:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-messenger-core:${DOCKER_TAG}
network_mode: host
container_name: messenger_ros2
volumes_from:
@@ -67,7 +65,7 @@ services:
command: bash -c 'source /opt/carma/install_ros2/setup.bash && ros2 launch /opt/carma/vehicle/config/carma-messenger-docker.launch.py'
cohda_dsrc_driver:
- image: usdotfhwastol/carma-cohda-dsrc-driver:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-cohda-dsrc-driver:${DOCKER_TAG}
container_name: carma-cohda-dsrc-driver
network_mode: host
volumes_from:
@@ -78,7 +76,7 @@ services:
command: bash -c 'source /opt/carma/install/setup.bash && ros2 launch /opt/carma/vehicle/config/drivers.launch.py drivers:=dsrc_driver'
torc-pinpoint-driver:
- image: usdotfhwastol/carma-torc-pinpoint-driver:carma-system-4.5.0
+ image: ${DOCKER_ORG}/carma-torc-pinpoint-driver:${DOCKER_TAG}
container_name: carma-torc-pinpoint-driver
network_mode: host
volumes_from:
@@ -86,4 +84,4 @@ services:
volumes:
- /opt/carma/logs:/opt/carma/logs
- /opt/carma/.ros:/opt/carma/.ros
- command: bash -c 'wait-for-it.sh localhost:11311 -- roslaunch /opt/carma/vehicle/config/drivers.launch drivers:=pinpoint_driver'
+ command: bash -c 'source /opt/carma/install/setup.bash && ros2 launch /opt/carma/vehicle/config/drivers.launch.py drivers:=pinpoint_driver'
diff --git a/carma-messenger-config/development/drivers.launch b/carma-messenger-config/development/drivers.launch
deleted file mode 100755
index 6098c946d..000000000
--- a/carma-messenger-config/development/drivers.launch
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/carma-messenger-config/development/drivers.launch.py b/carma-messenger-config/development/drivers.launch.py
index 74e594f2e..abd8dac7a 100644
--- a/carma-messenger-config/development/drivers.launch.py
+++ b/carma-messenger-config/development/drivers.launch.py
@@ -29,66 +29,165 @@
import launch.events
import launch_ros.actions
-import launch_ros.events
+import launch_ros.events
import launch_ros.events.lifecycle
import lifecycle_msgs.msg
+
def generate_launch_description():
"""
Launch desired CARMA Messenger drivers
"""
- env_log_levels = EnvironmentVariable('CARMA_ROS_LOGGING_CONFIG', default_value='{ "default_level" : "WARN" }')
+ env_log_levels = EnvironmentVariable(
+ "CARMA_ROS_LOGGING_CONFIG", default_value='{ "default_level" : "WARN" }'
+ )
- configuration_delay = LaunchConfiguration('configuration_delay')
+ configuration_delay = LaunchConfiguration("configuration_delay")
declare_configuration_delay_arg = DeclareLaunchArgument(
- name ='configuration_delay', default_value='4.0')
+ name="configuration_delay", default_value="4.0"
+ )
- drivers = LaunchConfiguration('drivers')
+ drivers = LaunchConfiguration("drivers")
declare_drivers_arg = DeclareLaunchArgument(
- name = 'drivers', default_value = 'dsrc_driver', description = "Desired drivers to launch specified by package name."
+ name="drivers",
+ default_value="dsrc_driver",
+ description="Desired drivers to launch specified by package name.",
)
dsrc_group = GroupAction(
- condition=IfCondition(PythonExpression(["'dsrc_driver' in '", drivers, "'.split()"])),
+ condition=IfCondition(
+ PythonExpression(["'dsrc_driver' in '", drivers, "'.split()"])
+ ),
actions=[
- PushRosNamespace(EnvironmentVariable('CARMA_INTR_NS', default_value='hardware_interface')),
+ PushRosNamespace(
+ EnvironmentVariable("CARMA_INTR_NS", default_value="hardware_interface")
+ ),
IncludeLaunchDescription(
- PythonLaunchDescriptionSource([ FindPackageShare('dsrc_driver'), '/launch/dsrc_driver.py']),
- launch_arguments = {
- 'log_level' : GetLogLevel('dsrc_driver', env_log_levels),
- }.items()
+ PythonLaunchDescriptionSource(
+ [FindPackageShare("dsrc_driver"), "/launch/dsrc_driver.py"]
+ ),
+ launch_arguments={
+ "log_level": GetLogLevel("dsrc_driver", env_log_levels),
+ }.items(),
),
- ]
+ ],
+ )
+
+ pinpoint_group = GroupAction(
+ condition=IfCondition(
+ PythonExpression(["'pinpoint_driver' in '", drivers, "'.split()"])
+ ),
+ actions=[
+ PushRosNamespace(
+ EnvironmentVariable("CARMA_INTR_NS", default_value="hardware_interface")
+ ),
+ IncludeLaunchDescription(
+ PythonLaunchDescriptionSource(
+ [FindPackageShare("pinpoint"), "/launch/pinpoint.launch.py"]
+ ),
+ launch_arguments={
+ "log_level": GetLogLevel("pinpoint", env_log_levels),
+ }.items(),
+ ),
+ ],
)
- ros2_cmd = launch.substitutions.FindExecutable(name='ros2')
+ ros2_cmd = launch.substitutions.FindExecutable(name="ros2")
process_configure_dsrc_driver_node = launch.actions.ExecuteProcess(
- cmd=[ros2_cmd, "lifecycle", "set", [ EnvironmentVariable('CARMA_INTR_NS', default_value='hardware_interface'), "/dsrc_driver_node" ], "configure"],
+ condition=IfCondition(
+ PythonExpression(["'dsrc_driver' in '", drivers, "'.split()"])
+ ),
+ cmd=[
+ ros2_cmd,
+ "lifecycle",
+ "set",
+ [
+ EnvironmentVariable(
+ "CARMA_INTR_NS", default_value="hardware_interface"
+ ),
+ "/dsrc_driver_node",
+ ],
+ "configure",
+ ],
)
- configuration_trigger = launch.actions.TimerAction(
- period=configuration_delay,
- actions=[
- process_configure_dsrc_driver_node
- ]
+ configured_event_handler_dsrc_driver_node = launch.actions.RegisterEventHandler(
+ launch.event_handlers.OnExecutionComplete(
+ target_action=process_configure_dsrc_driver_node,
+ on_completion=[
+ launch.actions.ExecuteProcess(
+ cmd=[
+ ros2_cmd,
+ "lifecycle",
+ "set",
+ [
+ EnvironmentVariable(
+ "CARMA_INTR_NS", default_value="hardware_interface"
+ ),
+ "/dsrc_driver_node",
+ ],
+ "activate",
+ ],
+ )
+ ],
+ )
)
- configured_event_handler_dsrc_driver_node = launch.actions.RegisterEventHandler(launch.event_handlers.OnExecutionComplete(
- target_action=process_configure_dsrc_driver_node,
- on_completion=[
+ process_configure_pinpoint_node = launch.actions.ExecuteProcess(
+ condition=IfCondition(
+ PythonExpression(["'pinpoint_driver' in '", drivers, "'.split()"])
+ ),
+ cmd=[
+ ros2_cmd,
+ "lifecycle",
+ "set",
+ [
+ EnvironmentVariable(
+ "CARMA_INTR_NS", default_value="hardware_interface"
+ ),
+ "/pinpoint",
+ ],
+ "configure",
+ ],
+ )
+
+ configured_event_handler_pinpoint_node = launch.actions.RegisterEventHandler(
+ launch.event_handlers.OnExecutionComplete(
+ target_action=process_configure_pinpoint_node,
+ on_completion=[
launch.actions.ExecuteProcess(
- cmd=[ros2_cmd, "lifecycle", "set", [ EnvironmentVariable('CARMA_INTR_NS', default_value='hardware_interface'), "/dsrc_driver_node" ], "activate"],
+ cmd=[
+ ros2_cmd,
+ "lifecycle",
+ "set",
+ [
+ EnvironmentVariable(
+ "CARMA_INTR_NS", default_value="hardware_interface"
+ ),
+ "/pinpoint",
+ ],
+ "activate",
+ ],
)
- ]
+ ],
)
)
- return LaunchDescription([
- declare_configuration_delay_arg,
- declare_drivers_arg,
- dsrc_group,
- configuration_trigger,
- configured_event_handler_dsrc_driver_node
- ])
+ configuration_trigger = launch.actions.TimerAction(
+ period=configuration_delay,
+ actions=[process_configure_dsrc_driver_node, process_configure_pinpoint_node],
+ )
+
+ return LaunchDescription(
+ [
+ declare_configuration_delay_arg,
+ declare_drivers_arg,
+ dsrc_group,
+ pinpoint_group,
+ configuration_trigger,
+ configured_event_handler_dsrc_driver_node,
+ configured_event_handler_pinpoint_node,
+ ]
+ )
diff --git a/carma-messenger-core/.vscode/c_cpp_properties.json b/carma-messenger-core/.vscode/c_cpp_properties.json
deleted file mode 100644
index 490bb3550..000000000
--- a/carma-messenger-core/.vscode/c_cpp_properties.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "configurations": [
- {
- "browse": {
- "databaseFilename": "",
- "limitSymbolsToIncludedHeaders": true
- },
- "includePath": [
- "/home/carma/carma-messenger-ws/devel/include/**",
- "/opt/ros/noetic/include/**",
- "/home/carma/carma-messenger-ws/src/carma-utils/carma_utils/include/**",
- "/home/carma/carma-messenger-ws/src/carma-utils/cav_driver_utils/include/**",
- "/home/carma/carma-messenger-ws/src/carma-messenger/carma-messenger-core/cpp_message/include/**",
- "/home/carma/carma-messenger-ws/src/carma-utils/driver_shutdown/include/**",
- "/home/carma/carma-messenger-ws/src/carma-utils/motion_predict/include/**",
- "/home/carma/carma-messenger-ws/src/carma-utils/socketcan_bridge/include/**",
- "/home/carma/carma-messenger-ws/src/carma-utils/socketcan_interface/include/**",
- "/home/carma/carma-messenger-ws/src/carma-messenger/carma-messenger-core/truck_inspection_plugin/include/**",
- "/home/carma/carma-messenger-ws/src/carma-utils/uncertainty_tools/include/**",
- "/home/carma/carma-messenger-ws/src/carma-utils/wgs84_utils/include/**",
- "/usr/include/**"
- ],
- "name": "ROS",
- "intelliSenseMode": "gcc-x64",
- "compilerPath": "/usr/bin/gcc",
- "cStandard": "gnu11",
- "cppStandard": "c++17"
- }
- ],
- "version": 4
-}
\ No newline at end of file
diff --git a/carma-messenger-core/.vscode/settings.json b/carma-messenger-core/.vscode/settings.json
deleted file mode 100644
index f09289db1..000000000
--- a/carma-messenger-core/.vscode/settings.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "python.autoComplete.extraPaths": [
- "/home/carma/carma-messenger-ws/devel/lib/python2.7/dist-packages",
- "/opt/ros/noetic/lib/python2.7/dist-packages"
- ]
-}
\ No newline at end of file
diff --git a/carma-messenger-core/Dockerfile b/carma-messenger-core/Dockerfile
index 3ee91c930..4ab0f88c0 100755
--- a/carma-messenger-core/Dockerfile
+++ b/carma-messenger-core/Dockerfile
@@ -11,13 +11,15 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
-
-FROM usdotfhwastol/carma-base:carma-system-4.5.0 as base_image
+ARG DOCKER_ORG="usdotfhwastoldev"
+ARG DOCKER_TAG="develop"
+FROM ${DOCKER_ORG}/carma-base:${DOCKER_TAG} as base_image
FROM base_image as setup
+ARG GIT_BRANCH="develop"
RUN mkdir ~/src
COPY --chown=carma . /home/carma/src/
-RUN ~/src/docker/checkout.bash
+RUN ~/src/docker/checkout.bash -b ${GIT_BRANCH}
RUN ~/src/docker/install.sh
diff --git a/carma-messenger-core/carma-messenger/launch/carma-messenger.launch b/carma-messenger-core/carma-messenger/launch/carma-messenger.launch
index db8a3f540..ac9a5d633 100644
--- a/carma-messenger-core/carma-messenger/launch/carma-messenger.launch
+++ b/carma-messenger-core/carma-messenger/launch/carma-messenger.launch
@@ -1,6 +1,6 @@
-
-
-
-
-
diff --git a/carma-messenger-core/carma-messenger/launch/carma-messenger.launch.py b/carma-messenger-core/carma-messenger/launch/carma-messenger.launch.py
index 53f8cca0f..e1cd8c16a 100644
--- a/carma-messenger-core/carma-messenger/launch/carma-messenger.launch.py
+++ b/carma-messenger-core/carma-messenger/launch/carma-messenger.launch.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2022-2023 LEIDOS.
+# Copyright (C) 2024 LEIDOS.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -77,10 +77,28 @@ def generate_launch_description():
]
)
+ ui_group = GroupAction(
+ actions=[
+ IncludeLaunchDescription(
+ PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/ui.launch.py']),
+ ),
+ ]
+ )
+
+ traffic_incident_group = GroupAction(
+ actions=[
+ IncludeLaunchDescription(
+ PythonLaunchDescriptionSource([get_package_share_directory('traffic_incident'), '/launch', '/traffic_incident.launch.py']),
+ ),
+ ]
+ )
+
return LaunchDescription([
declare_configuration_delay_arg,
declare_route_file_folder,
transform_group,
v2x_group,
- plugins_group
+ plugins_group,
+ ui_group,
+ traffic_incident_group
])
diff --git a/carma-messenger-core/carma-messenger/launch/plugins.launch.py b/carma-messenger-core/carma-messenger/launch/plugins.launch.py
index db4b3b7a4..3d2bf6049 100644
--- a/carma-messenger-core/carma-messenger/launch/plugins.launch.py
+++ b/carma-messenger-core/carma-messenger/launch/plugins.launch.py
@@ -48,9 +48,6 @@ def generate_launch_description():
declare_configuration_delay_arg = DeclareLaunchArgument(
name ='configuration_delay', default_value='4.0')
- truck_inspection_plugin_param_file = os.path.join(
- get_package_share_directory('truck_inspection_plugin'), 'config/parameters.yaml')
-
emergency_response_vehicle_plugin_param_file = os.path.join(
get_package_share_directory('emergency_response_vehicle_plugin'), 'config/parameters.yaml')
@@ -60,18 +57,6 @@ def generate_launch_description():
executable='carma_component_container_mt',
namespace=GetCurrentNamespace(),
composable_node_descriptions=[
- ComposableNode(
- package='truck_inspection_plugin',
- plugin='truck_inspection_plugin::Node',
- name='truck_inspection_plugin_node',
- extra_arguments=[
- {'use_intra_process_comms': True},
- {'--log-level' : GetLogLevel('truck_inspection_plugin', env_log_levels) }
- ],
- parameters = [
- truck_inspection_plugin_param_file
- ]
- ),
ComposableNode(
package='emergency_response_vehicle_plugin',
plugin='emergency_response_vehicle_plugin::EmergencyResponseVehiclePlugin',
@@ -96,10 +81,6 @@ def generate_launch_description():
ros2_cmd = launch.substitutions.FindExecutable(name='ros2')
- process_configure_truck_inspection_plugin = launch.actions.ExecuteProcess(
- cmd=[ros2_cmd, "lifecycle", "set", "/truck_inspection_plugin_node", "configure"],
- )
-
process_configure_emergency_response_vehicle_plugin = launch.actions.ExecuteProcess(
cmd=[ros2_cmd, "lifecycle", "set", "/emergency_response_vehicle_plugin_node", "configure"],
)
@@ -107,21 +88,10 @@ def generate_launch_description():
configuration_trigger = launch.actions.TimerAction(
period=configuration_delay,
actions=[
- process_configure_truck_inspection_plugin,
process_configure_emergency_response_vehicle_plugin
]
)
- configured_event_handler_truck_inspection_plugin = launch.actions.RegisterEventHandler(launch.event_handlers.OnExecutionComplete(
- target_action=process_configure_truck_inspection_plugin,
- on_completion=[
- launch.actions.ExecuteProcess(
- cmd=[ros2_cmd, "lifecycle", "set", "/truck_inspection_plugin_node", "activate"],
- )
- ]
- )
- )
-
configured_event_handler_emergency_response_vehicle_plugin = launch.actions.RegisterEventHandler(launch.event_handlers.OnExecutionComplete(
target_action=process_configure_emergency_response_vehicle_plugin,
on_completion=[
@@ -137,6 +107,5 @@ def generate_launch_description():
declare_configuration_delay_arg,
carma_v2x_plugins_container,
configuration_trigger,
- configured_event_handler_truck_inspection_plugin,
configured_event_handler_emergency_response_vehicle_plugin
])
diff --git a/carma-messenger-core/carma-messenger/launch/ui.launch b/carma-messenger-core/carma-messenger/launch/ui.launch
deleted file mode 100644
index dcc07bdc1..000000000
--- a/carma-messenger-core/carma-messenger/launch/ui.launch
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/carma-messenger-core/carma-messenger/launch/ui.launch.py b/carma-messenger-core/carma-messenger/launch/ui.launch.py
new file mode 100644
index 000000000..90df56bd8
--- /dev/null
+++ b/carma-messenger-core/carma-messenger/launch/ui.launch.py
@@ -0,0 +1,50 @@
+# Copyright (C) 2024 LEIDOS.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from launch import LaunchDescription
+from launch.actions import GroupAction, IncludeLaunchDescription
+from launch_ros.actions import SetRemap
+from ament_index_python.packages import get_package_share_directory
+from launch_xml.launch_description_sources import XMLLaunchDescriptionSource
+import os
+
+
+def generate_launch_description():
+ """
+ Launch file for launching the nodes in the CARMA Messenger user interface stack
+ """
+
+ params = os.path.join(
+ get_package_share_directory('carma-messenger'),
+ 'ui',
+ 'config',
+ 'CommandAPIParams.yaml'
+ )
+
+ ui_group = GroupAction(
+ actions=[
+ SetRemap("system_alert", "/system_alert"),
+ SetRemap("bsm", "incoming_bsm"),
+ IncludeLaunchDescription(
+ XMLLaunchDescriptionSource(os.path.join(get_package_share_directory("rosbridge_server"), 'launch', 'rosbridge_websocket_launch.xml')),
+ launch_arguments = {
+ 'params_glob' : [params],
+ }.items()
+ ),
+ ]
+ )
+
+ return LaunchDescription([
+ ui_group
+ ])
\ No newline at end of file
diff --git a/carma-messenger-core/cpp_message/test/test_MobilityRequest.cpp b/carma-messenger-core/cpp_message/test/test_MobilityRequest.cpp
index 5afebfab9..99b46f44d 100644
--- a/carma-messenger-core/cpp_message/test/test_MobilityRequest.cpp
+++ b/carma-messenger-core/cpp_message/test/test_MobilityRequest.cpp
@@ -36,7 +36,7 @@ TEST(MobilityRequestMessageTest, testDecodeMobilityRequestMsg)
84,26,166,12,168,54,114,193,147,54,109,217,48,102,217,195,86,141,219,181,112,193,184,79,171,234,250,190,207,
179,236,197,171,38,108,219,178,96,205,179,134,173,27,183,106,225,131,112};
// {0,240,129,225,77,90,113,39,212,90,209,171,22,12,38,173,56,147,234,45,104,213,131,150,172,88,65,133,14,36,88,204,88,177,98,197,139,22,43,89,50,100,201,107,54,108,217,173,131,6,12,21,172,88,177,98,197,139,22,44,88,177,98,229,147,38,108,219,178,96,205,179,134,173,27,183,106,225,131,126,116,60,60,182,225,95,67,102,30,155,247,238,211,187,58,6,73,131,42,13,19,6,84,26,166,12,168,54,98,201,147,54,109,217,48,102,217,195,86,141,219,181,112,193,186,183,219,78,235,251,186,237,197,151,147,166,49,170,202,143,34,37,102,16,230,66,160,225,195,54,139,54,105,199,151,119,60,183,248,108,195,211,43,168,147,234,45,98,193,131,6,107,49,225,229,203,78,94,87,247,97,219,149,213,61,59,59,101,228,130,167,46,184,245,160,141,34,188,20,21,35,72,165,13,102,60,60,185,105,203,202,254,156,142,170,211,137,62,162,6,12,24,48,96,193,138,206,249,116,231,209,209,210,204,57,57,223,231,191,55,78,248,121,101,191,219,47,46,122,119,238,117,79,207,62,153,118,160,173,151,151,61,59,247,32,171,187,94,237,253,247,44,201,135,166,91,251,243,95,217,135,159,75,252,250,97,233,150,254,157,220,248,101,199,211,78,253,206,172,217,179,101,108,217,171,98,68,89,147,15,76,183,247,230,191,179,15,62,151,240,228,231,127,30,29,154,113,114,195,211,78,253,206,172,217,179,101,108,217,171,98,68,89,195,150,91,253,57,105,225,127,14,78,119,244,101,195,179,166,139,248,244,101,199,173,212,126,89,114,238,89,135,39,59,252,250,97,233,215,155,170,89,114,44,211,207,157,254,120,247,242,202,233,163,149,156,50,242,219,167,165,254,89,120,245,211,203,46,71,76,22,116,211,183,47,62,152,118,240,116,197,171,134,174,25,182,110,205,139,134,45,19,6,84,28,166,12,168,53,76,25,80,108,229,131,38,108,219,178,96,205,179,134,173,27,183,106,225,131,112,159,87,213,245,125,159,103,217,139,86,76,217,183,100,193,155,103,13,90,55,110,213,195,6,224};
-
+
auto node = std::make_shared("test_node");
cpp_message::Mobility_Request worker(node->get_node_logging_interface());
@@ -51,7 +51,7 @@ TEST(MobilityRequestMessageTest, testDecodeMobilityRequestMsg)
// std::cout<<"H_timestamp:"<> res = worker.encode_mobility_request_message(message);
-
+
if(res)
{
std::vector to_read=res.get();
@@ -145,6 +145,9 @@ TEST(MobilityRequestMessageTest, testEncodeMobilityRequestMsg)
}
}
+/** This test has been temporarily disabled to support Continuous Improvement (CI) processes.
+ // Related GitHub Issue:
+
TEST(MobilityRequestMessageTest, testEncodeDecodeMobilityRequestMsg)
{
auto node = std::make_shared("test_node");
@@ -156,13 +159,13 @@ TEST(MobilityRequestMessageTest, testEncodeDecodeMobilityRequestMsg)
header.sender_bsm_id="10ABCDEF";
header.plan_id="11111111-2222-3333-AAAA-111111111111";
header.timestamp = 9223372036854775807;
- message.m_header=header;
+ message.m_header=header;
//body
message.strategy="Carma/Platooning";
message.plan_type.type=4;
message.urgency=50;
-
+
//location
carma_v2x_msgs::msg::LocationECEF starting_location;
starting_location.ecef_x=0;
@@ -189,7 +192,7 @@ TEST(MobilityRequestMessageTest, testEncodeDecodeMobilityRequestMsg)
offset1.offset_z=1;
trajectory.offsets.push_back(offset1);
-
+
carma_v2x_msgs::msg::LocationOffsetECEF offset2;
offset2.offset_x=2;
offset2.offset_y=2;
@@ -201,7 +204,7 @@ TEST(MobilityRequestMessageTest, testEncodeDecodeMobilityRequestMsg)
//expiration
message.expiration=1523372036854775807;
boost::optional> res = worker.encode_mobility_request_message(message);
-
+
if(res) EXPECT_TRUE(true);
else
{
@@ -220,7 +223,7 @@ TEST(MobilityRequestMessageTest, testEncodeDecodeMobilityRequestMsg)
auto res2 = worker.encode_mobility_request_message(result);
if(res2) EXPECT_TRUE(true);
- else
+ else
{
std::cout << "Encoding failed while unit testing BSM encoder!\n";
EXPECT_TRUE(false);
@@ -234,6 +237,7 @@ TEST(MobilityRequestMessageTest, testEncodeDecodeMobilityRequestMsg)
}
EXPECT_EQ(message, res2_decoded.get());
}
+*/
TEST(MobilityRequestMessageTest, testEncodeMobilityRequestMsg_base_case)
{
@@ -246,13 +250,13 @@ TEST(MobilityRequestMessageTest, testEncodeMobilityRequestMsg_base_case)
header.sender_bsm_id="";
header.plan_id="";
header.timestamp = 0;
- message.m_header=header;
+ message.m_header=header;
//body
message.strategy="";
message.plan_type.type=0;
message.urgency=0;
-
+
//location
carma_v2x_msgs::msg::LocationECEF starting_location;
starting_location.ecef_x=0;
@@ -279,13 +283,13 @@ TEST(MobilityRequestMessageTest, testEncodeMobilityRequestMsg_base_case)
offset1.offset_z=0;
trajectory.offsets.push_back(offset1);
-
+
message.trajectory=trajectory;
//expiration
message.expiration=0;
boost::optional> res = worker.encode_mobility_request_message(message);
-
+
if(res)
{
// std::vector to_read=res.get();
diff --git a/carma-messenger-core/docker/checkout.bash b/carma-messenger-core/docker/checkout.bash
index 9dad7bb4a..50e55ce00 100755
--- a/carma-messenger-core/docker/checkout.bash
+++ b/carma-messenger-core/docker/checkout.bash
@@ -20,11 +20,13 @@
set -exo pipefail
dir=~
+BRANCH=develop # The script will use this unless the -b flag updates it
while [[ $# -gt 0 ]]; do
arg="$1"
case $arg in
- -d|--develop)
- BRANCH=develop
+ -b|--branch)
+ BRANCH=$2
+ shift
shift
;;
-r|--root)
@@ -35,10 +37,6 @@ while [[ $# -gt 0 ]]; do
esac
done
-if [[ "$BRANCH" = "develop" ]]; then
- git clone https://github.com/usdot-fhwa-stol/carma-msgs.git ~/src/CARMAMsgs --branch $BRANCH
- git clone https://github.com/usdot-fhwa-stol/carma-utils.git ~/src/CARMAUtils --branch $BRANCH
-else
- git clone https://github.com/usdot-fhwa-stol/carma-msgs.git ${dir}/src/CARMAMsgs --branch carma-system-4.5.0
- git clone https://github.com/usdot-fhwa-stol/carma-utils.git ${dir}/src/CARMAUtils --branch carma-system-4.5.0
-fi
+git clone https://github.com/usdot-fhwa-stol/carma-msgs.git ${dir}/src/CARMAMsgs --branch $BRANCH
+git clone https://github.com/usdot-fhwa-stol/carma-utils.git ${dir}/src/CARMAUtils --branch $BRANCH
+
diff --git a/carma-messenger-core/emergency_response_vehicle_plugin/test/test_emergency_response_vehicle_plugin.cpp b/carma-messenger-core/emergency_response_vehicle_plugin/test/test_emergency_response_vehicle_plugin.cpp
index 98860a446..e1f638b7b 100644
--- a/carma-messenger-core/emergency_response_vehicle_plugin/test/test_emergency_response_vehicle_plugin.cpp
+++ b/carma-messenger-core/emergency_response_vehicle_plugin/test/test_emergency_response_vehicle_plugin.cpp
@@ -16,6 +16,7 @@
#include
+#include
#include "emergency_response_vehicle_plugin/emergency_response_vehicle_plugin_node.hpp"
@@ -39,7 +40,7 @@ namespace emergency_response_vehicle_plugin{
double lon_2_deg = -77.14740;
double distance_between_points_meters = worker_node->getDistanceBetween(lat_1_deg, lon_1_deg, lat_2_deg, lon_2_deg);
-
+
// Verify distance output is within 10.0 meters of the distance reported the Google Maps measurement tool (334.97 meters for these points)
ASSERT_NEAR(distance_between_points_meters, 334.97, 10.0);
@@ -82,7 +83,7 @@ namespace emergency_response_vehicle_plugin{
worker_node->route_destination_points_.push_back(future_destination_point_1);
worker_node->route_destination_points_.push_back(future_destination_point_2);
worker_node->route_destination_points_.push_back(future_destination_point_3);
-
+
// Set configuration parameter so that ERV must be <= 200 meters to next point for the next point to be removed from route_destination_points_
worker_node->config_.min_distance_to_next_destination_point = 200.0; // Meters
@@ -95,11 +96,11 @@ namespace emergency_response_vehicle_plugin{
// Set configuration parameter so that ERV must be <= 500 meters to next point for the next point to be removed from route_destination_points_
worker_node->config_.min_distance_to_next_destination_point = 500.0; // Meters
-
+
// Trigger pose callback with current location ~335 meters from first point in route_destination_points_
std::unique_ptr current_pose_ptr2 = std::make_unique(current_pose);
worker_node->poseCallback(std::move(current_pose_ptr2));
-
+
// Verify route_destination_points_ is reduced in size by 1 since ERV is within 500 meters of the next point in route_destination_points_
ASSERT_EQ(worker_node->route_destination_points_.size(), 2);
ASSERT_NEAR(worker_node->route_destination_points_[0].latitude, future_destination_point_2.latitude, 0.1);
@@ -197,7 +198,7 @@ namespace emergency_response_vehicle_plugin{
// Update statuses of lights and sirens (again) and regenerate BSM
worker_node->emergency_lights_active_ = true;
worker_node->emergency_sirens_active_ = true;
-
+
bsm_msg = worker_node->generateBSM();
ASSERT_EQ(bsm_msg.part_ii[0].special_vehicle_extensions.vehicle_alerts.siren_use.siren_in_use, j2735_v2x_msgs::msg::SirenInUse::IN_USE);
@@ -211,13 +212,16 @@ namespace emergency_response_vehicle_plugin{
TEST(EmergencyResponseVehiclePluginTest, testLoadRouteDestinationPointsFromFile){
rclcpp::NodeOptions options;
auto worker_node = std::make_shared(options);
-
+
worker_node->configure(); //Call configure state transition
worker_node->config_.enable_emergency_response_vehicle_plugin = true;
worker_node->activate(); //Call activate state transition to get not read for runtime
// Provide file path to getRouteDestinationPointsFromFile() to extract route destination points
- worker_node->loadRouteDestinationPointsFromFile("../../install_ros2/emergency_response_vehicle_plugin/share/emergency_response_vehicle_plugin/resource/example_route.csv");
+ std::string path = ament_index_cpp::get_package_share_directory("emergency_response_vehicle_plugin");
+ std::string file = "/resource/example_route.csv";
+ file = path.append(file);
+ worker_node->loadRouteDestinationPointsFromFile(file);
// Verify size and contents of route_destination_points
ASSERT_EQ(worker_node->route_destination_points_.size(), 3);
@@ -246,7 +250,7 @@ namespace emergency_response_vehicle_plugin{
TEST(EmergencyResponseVehiclePluginTest, testProcessIncomingUdpBinary){
rclcpp::NodeOptions options;
auto worker_node = std::make_shared(options);
-
+
worker_node->configure(); //Call configure state transition
worker_node->config_.enable_emergency_response_vehicle_plugin = true;
worker_node->activate(); //Call activate state transition to get not read for runtime
@@ -307,5 +311,4 @@ int main(int argc, char ** argv)
rclcpp::shutdown();
return success;
-}
-
+}
diff --git a/carma-messenger-core/j2735_convertor/include/j2735_convertor/j2735_convertor_node.hpp b/carma-messenger-core/j2735_convertor/include/j2735_convertor/j2735_convertor_node.hpp
index 26c54c036..ee2acc481 100644
--- a/carma-messenger-core/j2735_convertor/include/j2735_convertor/j2735_convertor_node.hpp
+++ b/carma-messenger-core/j2735_convertor/include/j2735_convertor/j2735_convertor_node.hpp
@@ -19,7 +19,6 @@
#include
#include
#include
-#include
#include
diff --git a/carma-messenger-core/lib_asn1c/CMakeLists.txt b/carma-messenger-core/lib_asn1c/CMakeLists.txt
index b287b7deb..05de99909 100644
--- a/carma-messenger-core/lib_asn1c/CMakeLists.txt
+++ b/carma-messenger-core/lib_asn1c/CMakeLists.txt
@@ -33,10 +33,12 @@ if(${ROS_VERSION} EQUAL 1) # ROS 1
catkin_package()
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
install(FILES third_party_lib/libasn1c_x64.so DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RENAME libasn1c.so)
- elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386")
install(FILES third_party_lib/libasn1c_x86.so DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RENAME libasn1c.so)
+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
+ install(FILES third_party_lib/libasn1c_arm64.so DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RENAME libasn1c.so)
endif()
else() # ROS2
@@ -44,10 +46,12 @@ else() # ROS2
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
install(FILES third_party_lib/libasn1c_x64.so DESTINATION lib RENAME libasn1c.so)
- elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386")
install(FILES third_party_lib/libasn1c_x86.so DESTINATION lib RENAME libasn1c.so)
+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
+ install(FILES third_party_lib/libasn1c_arm64.so DESTINATION lib RENAME libasn1c.so)
endif()
ament_auto_package()
diff --git a/carma-messenger-core/lib_asn1c/third_party_lib/libasn1c_arm64.so b/carma-messenger-core/lib_asn1c/third_party_lib/libasn1c_arm64.so
new file mode 100755
index 000000000..572f56cbe
Binary files /dev/null and b/carma-messenger-core/lib_asn1c/third_party_lib/libasn1c_arm64.so differ
diff --git a/carma-messenger-core/lib_asn1c/third_party_lib/libasn1c_update.txt b/carma-messenger-core/lib_asn1c/third_party_lib/libasn1c_update.txt
index a38590749..481a84726 100644
--- a/carma-messenger-core/lib_asn1c/third_party_lib/libasn1c_update.txt
+++ b/carma-messenger-core/lib_asn1c/third_party_lib/libasn1c_update.txt
@@ -37,4 +37,8 @@ Note: In order to use m32 flag, you should have the package libc6-dev-i386 ready
Copy the new generated shared libraries in your Workspace.
-Paste and replace the old libraries in this folder.
\ No newline at end of file
+Paste and replace the old libraries in this folder.
+
+## To build on ARM, follow the same instructions but for the final build only run:
+
+gcc -DPDU=MessageFrame -shared -o libasn1c_arm64.so -I./include/ ./src/*.c -fPIC
\ No newline at end of file
diff --git a/carma-messenger-core/traffic_incident/CMakeLists.txt b/carma-messenger-core/traffic_incident/CMakeLists.txt
index 018123e35..36141014f 100644
--- a/carma-messenger-core/traffic_incident/CMakeLists.txt
+++ b/carma-messenger-core/traffic_incident/CMakeLists.txt
@@ -1,5 +1,5 @@
-# Copyright (C) 2020-2021 LEIDOS.
+# Copyright (C) 2024 LEIDOS.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
@@ -13,91 +13,60 @@
# License for the specific language governing permissions and limitations under
# the License.
-cmake_minimum_required(VERSION 2.8.3)
+cmake_minimum_required(VERSION 3.5)
project(traffic_incident)
find_package(carma_cmake_common REQUIRED)
-carma_check_ros_version(1)
+carma_check_ros_version(2)
carma_package()
-## Find catkin macros and libraries
-## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
-## is used, also find other catkin packages
-find_package(catkin REQUIRED COMPONENTS
- carma_utils
- cav_msgs
- cav_srvs
- gps_common
- roscpp
-)
-
-
-###################################
-## catkin specific configuration ##
-###################################
-## The catkin_package macro generates cmake config files for your package
-## Declare things to be passed to dependent projects
-## INCLUDE_DIRS: uncomment this if your package contains header files
-## LIBRARIES: libraries you create in this project that dependent projects also need
-## CATKIN_DEPENDS: catkin_packages dependent projects also need
-## DEPENDS: system dependencies of this project that dependent projects also need
-catkin_package(
- INCLUDE_DIRS include
-# LIBRARIES traffic_incident
- CATKIN_DEPENDS carma_utils cav_msgs gps_common roscpp
-# DEPENDS system_lib
-)
+find_package(ament_cmake_auto REQUIRED)
+ament_auto_find_build_dependencies()
-###########
-## Build ##
-###########
+# Name build targets
+set(node_exec traffic_node_exec)
+set(node_lib traffic_node)
-## Specify additional locations of header files
-## Your package locations should be listed before other locations
+# Includes
include_directories(
include
- ${catkin_INCLUDE_DIRS}
)
-add_executable(traffic_incident_node src/main.cpp src/traffic_incident_node.cpp)
+ament_export_include_directories(include)
-add_library(traffic_incident_worker_lib src/traffic_incident_worker.cpp)
-add_dependencies(traffic_incident_worker_lib ${catkin_EXPORTED_TARGETS})
+# Build
+ament_auto_add_library(${node_lib} SHARED
+ src/traffic_incident_node.cpp
+ src/traffic_incident_worker.cpp
+)
-## Specify libraries to link a library or executable target against
-target_link_libraries(traffic_incident_node traffic_incident_worker_lib ${catkin_LIBRARIES})
+ament_auto_add_executable(${node_exec}
+ src/main.cpp
+)
-#############
-## Install ##
-#############
+# Register component
+rclcpp_components_register_nodes(${node_lib} "traffic::TrafficIncidentNode")
-## Mark executables for installation
-install(TARGETS traffic_incident_node traffic_incident_worker_lib
- ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
- LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
- RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# All locally created targets will need to be manually linked
+# ament auto will handle linking of external dependencies
+target_link_libraries(${node_exec}
+ ${node_lib}
)
-## Mark cpp header files for installation
-install(DIRECTORY include/
- DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
-)
+# Testing
+if(BUILD_TESTING)
-## Mark other files for installation (e.g. launch and bag files, etc.)
-install(DIRECTORY
- launch
- config
- DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
-)
+ find_package(ament_lint_auto REQUIRED)
+ ament_lint_auto_find_test_dependencies() # This populates the ${${PROJECT_NAME}_FOUND_TEST_DEPENDS} variable
-#############
-## Testing ##
-#############
+ ament_add_gtest(test_traffic_incident test/test_traffic.cpp)
-## Add gtest based cpp test target and link libraries
-catkin_add_gmock(${PROJECT_NAME}-test
- test/main.cpp
- test/test_traffic.cpp
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/test # Add test directory as working directory for unit tests
-)
-target_link_libraries(${PROJECT_NAME}-test traffic_incident_worker_lib ${catkin_LIBRARIES})
+ ament_target_dependencies(test_traffic_incident ${${PROJECT_NAME}_FOUND_TEST_DEPENDS})
+
+ target_link_libraries(test_traffic_incident ${node_lib})
+
+endif()
+
+ament_auto_package(
+ INSTALL_TO_SHARE config launch
+)
\ No newline at end of file
diff --git a/carma-messenger-core/traffic_incident/include/traffic_incident_node.h b/carma-messenger-core/traffic_incident/include/traffic_incident_node.h
deleted file mode 100644
index 515134a1f..000000000
--- a/carma-messenger-core/traffic_incident/include/traffic_incident_node.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2020-2021 LEIDOS.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#ifndef TRAFFIC_INCIDENT_H
-#define TRAFFIC_INCIDENT_H
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include "traffic_incident_worker.h"
-
-namespace traffic{
-
-class TrafficIncidentNode
-{
-
- private:
-
- //node handle
- ros::CARMANodeHandle nh_;
- ros::CARMANodeHandle pnh_;
-
- //subscriber
- ros::Subscriber pinpoint_driver_sub_;
-
- //publisher
- ros::Publisher traffic_mobility_operation_pub_;
-
- //services
- ros::ServiceServer start_broadcast_request_service_server;
- ros::ServiceServer stop_broadcast_request_service_server;
-
- //TrafficIncidentWorker class object
- TrafficIncidentWorker traffic_worker_;
-
- /*!fn initialize()
- \brief initialize this node before running
- */
- void initialize();
-
- //ROS Params
- std::string sender_id_;
- std::string event_reason_;
- std::string event_type_;
- double down_track_;
- double up_track_;
- double min_gap_;
-
- public:
-
- /*! \fn TrafficIncidentNode()
- \brief TrafficIncidentNode constructor
- */
- TrafficIncidentNode();
-
- /*! \fn publishTrafficIncidentMobilityOperation()
- \brief Publish mobility operation message
- */
- void publishTrafficIncidentMobilityOperation(const cav_msgs::MobilityOperation& traffic_msg);
-
- // Service callback
- bool startTrafficBroadcastCallback(cav_srvs::SetTrafficEventRequest& req, cav_srvs::SetTrafficEventResponse& resp);
- bool stopTrafficBroadcastCallback(std_srvs::TriggerRequest& req, std_srvs::TriggerResponse& resp);
-
- /*!fn run()
- \brief General starting point to run this node
- */
- void run();
-
-};
-
-}//traffic
-
-#endif /* TRAFFIC_INCIDENT_H */
\ No newline at end of file
diff --git a/carma-messenger-core/traffic_incident/include/traffic_incident_node.hpp b/carma-messenger-core/traffic_incident/include/traffic_incident_node.hpp
new file mode 100644
index 000000000..ecb461796
--- /dev/null
+++ b/carma-messenger-core/traffic_incident/include/traffic_incident_node.hpp
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2024 LEIDOS.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+#ifndef TRAFFIC_INCIDENT_H
+#define TRAFFIC_INCIDENT_H
+
+#include
+#include
+
+#include "traffic_incident_worker.hpp"
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+namespace traffic
+{
+class TrafficIncidentNode : public carma_ros2_utils::CarmaLifecycleNode
+{
+public:
+ /*! \fn TrafficIncidentNode()
+ \brief TrafficIncidentNode constructor
+ */
+ explicit TrafficIncidentNode(const rclcpp::NodeOptions &);
+
+ /*! \fn publishTrafficIncidentMobilityOperation()
+ \brief Publish mobility operation message
+ */
+ void publishTrafficIncidentMobilityOperation(
+ const carma_v2x_msgs::msg::MobilityOperation & traffic_msg);
+
+ // Service callback
+ bool startTrafficBroadcastCallback(
+ const std::shared_ptr,
+ const carma_msgs::srv::SetTrafficEvent::Request::SharedPtr req,
+ carma_msgs::srv::SetTrafficEvent::Response::SharedPtr resp);
+ bool stopTrafficBroadcastCallback(
+ const std::shared_ptr,
+ const std_srvs::srv::Trigger::Request::SharedPtr req,
+ std_srvs::srv::Trigger::Response::SharedPtr resp);
+
+private:
+ carma_ros2_utils::CallbackReturn handle_on_configure(const rclcpp_lifecycle::State &);
+
+ carma_ros2_utils::CallbackReturn handle_on_activate(const rclcpp_lifecycle::State &);
+
+ void spin_callback(void);
+
+ // subscriber
+ carma_ros2_utils::SubPtr pinpoint_driver_sub_;
+
+ // publisher
+ carma_ros2_utils::PubPtr traffic_mobility_operation_pub_;
+
+ // services
+ carma_ros2_utils::ServicePtr
+ start_broadcast_request_service_server;
+ carma_ros2_utils::ServicePtr stop_broadcast_request_service_server;
+
+ // timer
+ rclcpp::TimerBase::SharedPtr spin_timer_;
+
+ // TrafficIncidentWorker class object
+ TrafficIncidentWorker traffic_worker_;
+
+ // ROS Params
+ std::string sender_id_;
+ std::string event_reason_;
+ std::string event_type_;
+ double down_track_;
+ double up_track_;
+ double min_gap_;
+};
+
+} // namespace traffic
+
+#endif /* TRAFFIC_INCIDENT_H */
\ No newline at end of file
diff --git a/carma-messenger-core/traffic_incident/include/traffic_incident_worker.h b/carma-messenger-core/traffic_incident/include/traffic_incident_worker.hpp
similarity index 61%
rename from carma-messenger-core/traffic_incident/include/traffic_incident_worker.h
rename to carma-messenger-core/traffic_incident/include/traffic_incident_worker.hpp
index 886bd2b4c..c447709a4 100644
--- a/carma-messenger-core/traffic_incident/include/traffic_incident_worker.h
+++ b/carma-messenger-core/traffic_incident/include/traffic_incident_worker.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2019-2021 LEIDOS.
+ * Copyright (C) 2024 LEIDOS.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -17,45 +17,45 @@
#ifndef TRAFFIC_INCIDENT_WORKER_H
#define TRAFFIC_INCIDENT_WORKER_H
-#include
-#include
-#include
#include
+#include
#include
-#include
#include
-#include
+#include
-namespace traffic{
+#include
+#include
+#include
+
+namespace traffic
+{
class TrafficIncidentWorker
{
-
- public:
-
- using PublishTrafficCallback = std::function;
+public:
+ using PublishTrafficCallback =
+ std::function;
/*!
* \brief Constructor
*/
TrafficIncidentWorker(PublishTrafficCallback traffic_pub);
-
- /*! \fn pinpointDriverCallback(const gps_common::GPSFix &pinpoint_msg)
+
+ /*! \fn pinpointDriverCallback(const gps_msgs::msg::GPSFix &pinpoint_msg)
\brief pinpointDriverCallback populates lat lon heading from pinpoint driver.
- \param gps_common::GPSFix.
+ \param gps_msgs::msg::GPSFix.
*/
- void pinpointDriverCallback(const gps_common::GPSFix &pinpoint_msg);
+ void pinpointDriverCallback(gps_msgs::msg::GPSFix::UniquePtr pinpoint_msg);
/*! \fn anytypeToString(T value)
\brief anytypeToString converts anytype to string value
\param value which gets converted.
*/
- template
- std::string anytypeToString(T value)
+ template std::string anytypeToString(T value)
{
std::stringstream ss;
- ss<
-
-
-
-
-
-
-
-
diff --git a/carma-messenger-core/traffic_incident/launch/traffic_incident.launch.py b/carma-messenger-core/traffic_incident/launch/traffic_incident.launch.py
new file mode 100644
index 000000000..b10b1488e
--- /dev/null
+++ b/carma-messenger-core/traffic_incident/launch/traffic_incident.launch.py
@@ -0,0 +1,105 @@
+# Copyright (C) 2024 LEIDOS.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+from ament_index_python import get_package_share_directory
+from launch import LaunchDescription
+from launch_ros.actions import ComposableNodeContainer
+from launch_ros.descriptions import ComposableNode
+from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction, RegisterEventHandler
+from launch.substitutions import LaunchConfiguration, FindExecutable
+from carma_ros2_utils.launch.get_current_namespace import GetCurrentNamespace
+from launch.event_handlers import OnExecutionComplete
+
+import os
+
+"""
+This file is used to launch the traffic incident node.
+"""
+
+
+def generate_launch_description():
+
+ # Declare the log_level launch argument
+ log_level = LaunchConfiguration("log_level")
+ declare_log_level_arg = DeclareLaunchArgument(
+ name="log_level", default_value="WARN"
+ )
+
+ # Declare the configuration_delay launch argument
+ configuration_delay = LaunchConfiguration('configuration_delay')
+ declare_configuration_delay_arg = DeclareLaunchArgument(
+ name ='configuration_delay', default_value='4.0')
+
+ traffic_incident_param_file = os.path.join(
+ get_package_share_directory("traffic_incident"), "config/parameters.yaml"
+ )
+
+ # Launch node(s) in a carma container to allow logging to be configured
+ container = ComposableNodeContainer(
+ package="carma_ros2_utils",
+ name="traffic_incident_container",
+ executable="carma_component_container_mt",
+ namespace=GetCurrentNamespace(),
+ composable_node_descriptions=[
+ # Launch the core node(s)
+ ComposableNode(
+ package="traffic_incident",
+ plugin="traffic::TrafficIncidentNode",
+ name="traffic_incident",
+ extra_arguments=[
+ {"use_intra_process_comms": True},
+ {"--log-level": log_level},
+ ],
+ parameters=[
+ traffic_incident_param_file,
+ ],
+ remappings=[
+ ("gps_common_fix", "/position/gps_common_fix"),
+ ]
+ ),
+ ],
+ )
+
+ ros2_cmd = FindExecutable(name='ros2')
+
+ process_configure_traffic_incident = ExecuteProcess(
+ cmd=[ros2_cmd, "lifecycle", "set", "/traffic_incident", "configure"],
+ )
+
+ configuration_trigger = TimerAction(
+ period=configuration_delay,
+ actions=[
+ process_configure_traffic_incident,
+ ]
+ )
+
+ configured_event_handler_traffic_incident = RegisterEventHandler(OnExecutionComplete(
+ target_action=process_configure_traffic_incident,
+ on_completion=[
+ ExecuteProcess(
+ cmd=[ros2_cmd, "lifecycle", "set", "/traffic_incident", "activate"],
+ )
+ ]
+ )
+ )
+
+ return LaunchDescription(
+ [
+ declare_log_level_arg,
+ declare_configuration_delay_arg,
+ container,
+ configuration_trigger,
+ configured_event_handler_traffic_incident
+ ]
+ )
\ No newline at end of file
diff --git a/carma-messenger-core/traffic_incident/package.xml b/carma-messenger-core/traffic_incident/package.xml
index e6cb06238..4d4f14ae2 100644
--- a/carma-messenger-core/traffic_incident/package.xml
+++ b/carma-messenger-core/traffic_incident/package.xml
@@ -1,31 +1,29 @@
-
-
-
traffic_incident
- 0.0.0
+ 4.0.0
The traffic_incident package
carma
- Apache 2.0
- catkin
- carma_utils
- cav_msgs
- cav_srvs
- gps_common
- roscpp
+ Apache 2.0
+ ament_cmake
carma_cmake_common
-
+ ament_auto_cmake
+
+ rclcpp
+ rclcpp_components
+
+ carma_msgs
+ carma_v2x_msgs
+ std_srvs
+ carma_ros2_utils
+ gps_msgs
+
+ ament_lint_auto
+ ament_cmake_gtest
+
+
+ ament_cmake
+
+
\ No newline at end of file
diff --git a/carma-messenger-core/traffic_incident/src/main.cpp b/carma-messenger-core/traffic_incident/src/main.cpp
index 231be8757..0b040cee3 100644
--- a/carma-messenger-core/traffic_incident/src/main.cpp
+++ b/carma-messenger-core/traffic_incident/src/main.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2020-2021 LEIDOS.
+ * Copyright (C) 2024 LEIDOS.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -14,12 +14,17 @@
* the License.
*/
-#include "traffic_incident_node.h"
+#include "traffic_incident_node.hpp"
+#include
-int main(int argc, char **argv)
+int main(int argc, char ** argv)
{
- ros::init(argc, argv, "traffic_incident");
- traffic::TrafficIncidentNode node;
- node.run();
+ rclcpp::init(argc, argv);
+ auto node{std::make_shared(rclcpp::NodeOptions{})};
+ rclcpp::executors::MultiThreadedExecutor executor;
+ executor.add_node(node->get_node_base_interface());
+ executor.spin();
+
+ rclcpp::shutdown();
return 0;
}
\ No newline at end of file
diff --git a/carma-messenger-core/traffic_incident/src/traffic_incident_node.cpp b/carma-messenger-core/traffic_incident/src/traffic_incident_node.cpp
index a49f2a0e0..aecc4eb97 100644
--- a/carma-messenger-core/traffic_incident/src/traffic_incident_node.cpp
+++ b/carma-messenger-core/traffic_incident/src/traffic_incident_node.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2020-2021 LEIDOS.
+ * Copyright (C) 2024 LEIDOS.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -14,108 +14,157 @@
* the License.
*/
- #include "traffic_incident_node.h"
-
- namespace traffic{
-
- using std::placeholders::_1;
-
- TrafficIncidentNode::TrafficIncidentNode(): pnh_("~"), traffic_worker_(std::bind(&TrafficIncidentNode::publishTrafficIncidentMobilityOperation, this, _1)){}
-
- void TrafficIncidentNode::initialize()
- {
-
- pnh_.getParam("sender_id", sender_id_);
- pnh_.getParam("down_track", down_track_);
- pnh_.getParam("up_track", up_track_);
- pnh_.getParam("min_gap", min_gap_);
- pnh_.getParam("event_reason", event_reason_);
- pnh_.getParam("event_type", event_type_);
-
- traffic_worker_.setSenderId(sender_id_);
- traffic_worker_.setDownTrack(down_track_);
- traffic_worker_.setUpTrack(up_track_);
- traffic_worker_.setMinGap(min_gap_);
- traffic_worker_.setEventReason(event_reason_);
- traffic_worker_.setEventType(event_type_);
-
- // Setup pub/sub
- pinpoint_driver_sub_=nh_.subscribe("gps_common_fix",10,&TrafficIncidentWorker::pinpointDriverCallback,&traffic_worker_);
- traffic_mobility_operation_pub_=nh_.advertise("outgoing_mobility_operation", 10);
-
- //setup services
- start_broadcast_request_service_server = nh_.advertiseService("start_broadcasting_traffic_event", &TrafficIncidentNode::startTrafficBroadcastCallback, this);
- stop_broadcast_request_service_server = nh_.advertiseService("stop_broadcasting_traffic_event", &TrafficIncidentNode::stopTrafficBroadcastCallback, this);
-
- //spin loop
- ros::CARMANodeHandle::setSpinRate(10.0);
- ros::CARMANodeHandle::setSpinCallback([this]() -> bool {
- if(traffic_worker_.getDownTrack() >0 && traffic_worker_.getUpTrack()>0 && traffic_worker_.getMinGap() > 0 && traffic_worker_.getAdvisorySpeed() > 0)
- {
- //construct local mobilityOperation msg
- cav_msgs::MobilityOperation traffic_mobility_msg = traffic_worker_.mobilityMessageGenerator(traffic_worker_.getPinPoint());
-
- //start constantly broadcasting mobilityOperation msg
- traffic_mobility_operation_pub_.publish(traffic_mobility_msg);
- }
- return true;
- });
- ROS_INFO_STREAM("Traffic Incident node is initialized...");
- ros::CARMANodeHandle::spin();
+#include "traffic_incident_node.hpp"
+
+namespace traffic
+{
+namespace std_ph = std::placeholders;
+
+TrafficIncidentNode::TrafficIncidentNode(const rclcpp::NodeOptions & options)
+: carma_ros2_utils::CarmaLifecycleNode(options),
+ traffic_worker_(
+ std::bind(&TrafficIncidentNode::publishTrafficIncidentMobilityOperation, this, std_ph::_1))
+{
+ declare_parameter("sender_id", sender_id_);
+ declare_parameter("event_reason", event_reason_);
+ declare_parameter("event_type", event_type_);
+ declare_parameter("down_track", down_track_);
+ declare_parameter("up_track", up_track_);
+ declare_parameter("min_gap", min_gap_);
+}
+
+carma_ros2_utils::CallbackReturn TrafficIncidentNode::handle_on_configure(
+ const rclcpp_lifecycle::State &)
+{
+ get_parameter("sender_id", sender_id_);
+ get_parameter("event_reason", event_reason_);
+ get_parameter("event_type", event_type_);
+ get_parameter("down_track", down_track_);
+ get_parameter("up_track", up_track_);
+ get_parameter("min_gap", min_gap_);
+
+ traffic_worker_.setSenderId(sender_id_);
+ traffic_worker_.setDownTrack(down_track_);
+ traffic_worker_.setUpTrack(up_track_);
+ traffic_worker_.setMinGap(min_gap_);
+ traffic_worker_.setEventReason(event_reason_);
+ traffic_worker_.setEventType(event_type_);
+
+ // Setup pub/sub
+ pinpoint_driver_sub_ = create_subscription(
+ "gps_common_fix",
+ 10,
+ std::bind(&TrafficIncidentWorker::pinpointDriverCallback, &traffic_worker_, std_ph::_1));
+ traffic_mobility_operation_pub_ =
+ create_publisher("outgoing_mobility_operation", 10);
+
+ // setup services
+ start_broadcast_request_service_server = create_service(
+ "start_broadcasting_traffic_event",
+ std::bind(
+ &TrafficIncidentNode::startTrafficBroadcastCallback,
+ this,
+ std_ph::_1,
+ std_ph::_2,
+ std_ph::_3));
+ stop_broadcast_request_service_server = create_service(
+ "stop_broadcasting_traffic_event",
+ std::bind(
+ &TrafficIncidentNode::stopTrafficBroadcastCallback,
+ this,
+ std_ph::_1,
+ std_ph::_2,
+ std_ph::_3));
+
+ return CallbackReturn::SUCCESS;
+}
+
+carma_ros2_utils::CallbackReturn TrafficIncidentNode::handle_on_activate(
+ const rclcpp_lifecycle::State &)
+{
+ // spin loop
+ spin_timer_ = create_timer(
+ get_clock(),
+ std::chrono::milliseconds(100),
+ std::bind(&TrafficIncidentNode::spin_callback, this));
+ RCLCPP_INFO_STREAM(get_logger(), "Traffic Incident node is initialized...");
+ return CallbackReturn::SUCCESS;
+}
+
+void TrafficIncidentNode::publishTrafficIncidentMobilityOperation(
+ const carma_v2x_msgs::msg::MobilityOperation & traffic_msg)
+{
+ traffic_mobility_operation_pub_->publish(traffic_msg);
+}
+
+
+/*****
+ * Used by UI to start broadcasting traffic event (geofence)
+ * Msg: MobilityOperation
+ * **/
+bool TrafficIncidentNode::startTrafficBroadcastCallback(
+ const std::shared_ptr,
+ const carma_msgs::srv::SetTrafficEvent::Request::SharedPtr req,
+ carma_msgs::srv::SetTrafficEvent::Response::SharedPtr resp)
+{
+ // update instance variables with incoming request params
+ traffic_worker_.setMinGap(req->minimum_gap);
+ traffic_worker_.setDownTrack(req->down_track);
+ traffic_worker_.setUpTrack(req->up_track);
+ traffic_worker_.setAdvisorySpeed(req->advisory_speed);
+
+ // return service response true
+ resp->success = true;
+ return true;
+}
+
+/*****
+ * Used by UI to stop broadcasting traffic event (geofence)
+ * Msg: MobilityOperation
+ * **/
+bool TrafficIncidentNode::stopTrafficBroadcastCallback(
+ const std::shared_ptr,
+ const std_srvs::srv::Trigger::Request::SharedPtr req,
+ std_srvs::srv::Trigger::Response::SharedPtr resp)
+{
+ try {
+ // reset instance variables
+ traffic_worker_.setMinGap(0);
+ traffic_worker_.setDownTrack(0);
+ traffic_worker_.setUpTrack(0);
+ traffic_worker_.setAdvisorySpeed(0);
+
+ resp->success = true;
+ resp->message = "stop broadcasting";
+
+ // return service response true
+ return true;
+
+ } catch (...) {
+ // in case any exception
+ resp->success = false;
+ return false;
}
-
- void TrafficIncidentNode::publishTrafficIncidentMobilityOperation(const cav_msgs::MobilityOperation& traffic_msg)
- {
- traffic_mobility_operation_pub_.publish(traffic_msg);
- }
-
-
- /*****
- * Used by UI to start broadcasting traffic event (geofence)
- * Msg: MobilityOperation
- * **/
- bool TrafficIncidentNode::startTrafficBroadcastCallback(cav_srvs::SetTrafficEventRequest& req, cav_srvs::SetTrafficEventResponse& resp)
- {
- //update instance variables with incoming request params
- traffic_worker_.setMinGap(req.minimum_gap);
- traffic_worker_.setDownTrack(req.down_track);
- traffic_worker_.setUpTrack(req.up_track);
- traffic_worker_.setAdvisorySpeed(req.advisory_speed);
-
- //return service response true
- resp.success = true;
- return true;
+}
+
+void TrafficIncidentNode::spin_callback(void)
+{
+ if (
+ traffic_worker_.getDownTrack() > 0 && traffic_worker_.getUpTrack() > 0 &&
+ traffic_worker_.getMinGap() > 0 && traffic_worker_.getAdvisorySpeed() > 0) {
+ // construct local mobilityOperation msg
+ carma_v2x_msgs::msg::MobilityOperation traffic_mobility_msg =
+ traffic_worker_.mobilityMessageGenerator(traffic_worker_.getPinPoint());
+
+ // start constantly broadcasting mobilityOperation msg
+ traffic_mobility_operation_pub_->publish(traffic_mobility_msg);
}
+}
- /*****
- * Used by UI to stop broadcasting traffic event (geofence)
- * Msg: MobilityOperation
- * **/
- bool TrafficIncidentNode::stopTrafficBroadcastCallback(std_srvs::TriggerRequest& req, std_srvs::TriggerResponse& resp){
- try{
- //reset instance variables
- traffic_worker_.setMinGap(0);
- traffic_worker_.setDownTrack(0);
- traffic_worker_.setUpTrack(0);
- traffic_worker_.setAdvisorySpeed(0);
-
- resp.success = true;
- resp.message = "stop broadcasting";
-
- //return service response true
- return true;
-
- }catch(...){
- //in case any exception
- resp.success = false;
- return false;
- }
- }
+} // namespace traffic
- void TrafficIncidentNode::run()
- {
- initialize();
- }
+#include "rclcpp_components/register_node_macro.hpp"
-}//traffic
\ No newline at end of file
+// Register the component with class_loader
+RCLCPP_COMPONENTS_REGISTER_NODE(traffic::TrafficIncidentNode)
\ No newline at end of file
diff --git a/carma-messenger-core/traffic_incident/src/traffic_incident_worker.cpp b/carma-messenger-core/traffic_incident/src/traffic_incident_worker.cpp
index 085ed9ce3..1651403fd 100644
--- a/carma-messenger-core/traffic_incident/src/traffic_incident_worker.cpp
+++ b/carma-messenger-core/traffic_incident/src/traffic_incident_worker.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2020-2021 LEIDOS.
+ * Copyright (C) 2024 LEIDOS.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -14,123 +14,92 @@
* the License.
*/
-#include "traffic_incident_worker.h"
+#include "traffic_incident_worker.hpp"
namespace traffic
{
+TrafficIncidentWorker::TrafficIncidentWorker(PublishTrafficCallback traffic_pub)
+: traffic_pub_(traffic_pub){};
- TrafficIncidentWorker::TrafficIncidentWorker(PublishTrafficCallback traffic_pub) : traffic_pub_(traffic_pub){};
-
- void TrafficIncidentWorker::pinpointDriverCallback(const gps_common::GPSFix& pinpoint_msg)
- {
-
- cav_msgs::MobilityOperation traffic_mobility_msg=mobilityMessageGenerator(pinpoint_msg);
- //comment out this for now since we are not broadcasting upon receiving GPS signal
- //traffic_pub_(traffic_mobility_msg);
- setPinPoint(pinpoint_msg);
- }
-
- cav_msgs::MobilityOperation TrafficIncidentWorker::mobilityMessageGenerator(const gps_common::GPSFix& pinpoint_msg)
- {
- cav_msgs::MobilityOperation traffic_mobility_msg;
-
- traffic_mobility_msg.m_header.timestamp=pinpoint_msg.header.stamp.sec*1000;
- traffic_mobility_msg.m_header.sender_id=sender_id_;
-
- traffic_mobility_msg.strategy=USE_CASE_NAME_;
-
- traffic_mobility_msg.strategy_params="lat:"+doubleToString(pinpoint_msg.latitude)+","+"lon:"+doubleToString(pinpoint_msg.longitude) +","+"downtrack:"+anytypeToString(down_track_)+","+"uptrack:"+anytypeToString(up_track_)+","+"min_gap:"+ anytypeToString(min_gap_)+","+"advisory_speed:"+ anytypeToString(advisory_speed_)+","+"event_reason:"+event_reason_+","+"event_type:"+event_type_;
-
- return traffic_mobility_msg;
- }
-
-
- std::string TrafficIncidentWorker::doubleToString(double value)
- {
- std::ostringstream ss;
- ss << std::setprecision(10);
- ss << value;
- return ss.str();
- }
-
- void TrafficIncidentWorker::setSenderId(std::string sender_id)
- {
- this->sender_id_= sender_id;
- }
-
- void TrafficIncidentWorker::setEventReason(std::string event_reason)
- {
- this->event_reason_= event_reason;
- }
-
- void TrafficIncidentWorker::setEventType(std::string event_type)
- {
- this->event_type_= event_type;
- }
-
- void TrafficIncidentWorker::setMinGap(double min_gap)
- {
- this->min_gap_= min_gap;
- }
-
- void TrafficIncidentWorker::setDownTrack(double down_track)
- {
- this->down_track_= down_track;
- }
-
- void TrafficIncidentWorker::setUpTrack(double up_track)
- {
- this->up_track_= up_track;
- }
-
-
- void TrafficIncidentWorker::setPinPoint(gps_common::GPSFix pinpoint_msg )
- {
- this->pinpoint_msg_ = pinpoint_msg;
- }
-
- void TrafficIncidentWorker::setAdvisorySpeed(double advisory_speed ){
- this->advisory_speed_ = advisory_speed;
- }
-
- std::string TrafficIncidentWorker::getSenderId()
- {
- return this->sender_id_;
- }
-
- std::string TrafficIncidentWorker::getEventReason()
- {
- return this->event_reason_;
- }
-
- std::string TrafficIncidentWorker::getEventType()
- {
- return this->event_type_;
- }
-
- double TrafficIncidentWorker::getDownTrack()
- {
- return this->down_track_;
- }
-
- double TrafficIncidentWorker::getUpTrack()
- {
- return this->up_track_;
- }
-
- double TrafficIncidentWorker::getMinGap()
- {
- return this->min_gap_;
- }
-
- gps_common::GPSFix TrafficIncidentWorker::getPinPoint()
- {
- return this->pinpoint_msg_;
- }
-
- double TrafficIncidentWorker::getAdvisorySpeed()
- {
- return this->advisory_speed_;
- }
-
-}//traffic
\ No newline at end of file
+void TrafficIncidentWorker::pinpointDriverCallback(gps_msgs::msg::GPSFix::UniquePtr pinpoint_msg)
+{
+ carma_v2x_msgs::msg::MobilityOperation traffic_mobility_msg =
+ mobilityMessageGenerator(*pinpoint_msg);
+ // comment out this for now since we are not broadcasting upon receiving GPS signal
+ // traffic_pub_(traffic_mobility_msg);
+ setPinPoint(*pinpoint_msg);
+}
+
+carma_v2x_msgs::msg::MobilityOperation TrafficIncidentWorker::mobilityMessageGenerator(
+ const gps_msgs::msg::GPSFix & pinpoint_msg)
+{
+ carma_v2x_msgs::msg::MobilityOperation traffic_mobility_msg;
+
+ traffic_mobility_msg.m_header.timestamp = pinpoint_msg.header.stamp.sec * 1000;
+ traffic_mobility_msg.m_header.sender_id = sender_id_;
+
+ traffic_mobility_msg.strategy = USE_CASE_NAME_;
+
+ traffic_mobility_msg.strategy_params =
+ "lat:" + doubleToString(pinpoint_msg.latitude) + "," +
+ "lon:" + doubleToString(pinpoint_msg.longitude) + "," +
+ "downtrack:" + anytypeToString(down_track_) + "," + "uptrack:" + anytypeToString(up_track_) +
+ "," + "min_gap:" + anytypeToString(min_gap_) + "," +
+ "advisory_speed:" + anytypeToString(advisory_speed_) + "," + "event_reason:" + event_reason_ +
+ "," + "event_type:" + event_type_;
+
+ return traffic_mobility_msg;
+}
+
+
+std::string TrafficIncidentWorker::doubleToString(double value)
+{
+ std::ostringstream ss;
+ ss << std::setprecision(10);
+ ss << value;
+ return ss.str();
+}
+
+void TrafficIncidentWorker::setSenderId(std::string sender_id) { this->sender_id_ = sender_id; }
+
+void TrafficIncidentWorker::setEventReason(std::string event_reason)
+{
+ this->event_reason_ = event_reason;
+}
+
+void TrafficIncidentWorker::setEventType(std::string event_type) { this->event_type_ = event_type; }
+
+void TrafficIncidentWorker::setMinGap(double min_gap) { this->min_gap_ = min_gap; }
+
+void TrafficIncidentWorker::setDownTrack(double down_track) { this->down_track_ = down_track; }
+
+void TrafficIncidentWorker::setUpTrack(double up_track) { this->up_track_ = up_track; }
+
+
+void TrafficIncidentWorker::setPinPoint(gps_msgs::msg::GPSFix pinpoint_msg)
+{
+ this->pinpoint_msg_ = pinpoint_msg;
+}
+
+void TrafficIncidentWorker::setAdvisorySpeed(double advisory_speed)
+{
+ this->advisory_speed_ = advisory_speed;
+}
+
+std::string TrafficIncidentWorker::getSenderId() { return this->sender_id_; }
+
+std::string TrafficIncidentWorker::getEventReason() { return this->event_reason_; }
+
+std::string TrafficIncidentWorker::getEventType() { return this->event_type_; }
+
+double TrafficIncidentWorker::getDownTrack() { return this->down_track_; }
+
+double TrafficIncidentWorker::getUpTrack() { return this->up_track_; }
+
+double TrafficIncidentWorker::getMinGap() { return this->min_gap_; }
+
+gps_msgs::msg::GPSFix TrafficIncidentWorker::getPinPoint() { return this->pinpoint_msg_; }
+
+double TrafficIncidentWorker::getAdvisorySpeed() { return this->advisory_speed_; }
+
+} // namespace traffic
\ No newline at end of file
diff --git a/carma-messenger-core/traffic_incident/test/main.cpp b/carma-messenger-core/traffic_incident/test/main.cpp
deleted file mode 100644
index 31c8ab5f6..000000000
--- a/carma-messenger-core/traffic_incident/test/main.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2020-2021 LEIDOS.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#include
-
-// Run all the tests
-int main(int argc, char **argv) {
- testing::InitGoogleTest(&argc, argv);
- return RUN_ALL_TESTS();
-}
\ No newline at end of file
diff --git a/carma-messenger-core/traffic_incident/test/test_traffic.cpp b/carma-messenger-core/traffic_incident/test/test_traffic.cpp
index e8048fef7..2a44ff152 100644
--- a/carma-messenger-core/traffic_incident/test/test_traffic.cpp
+++ b/carma-messenger-core/traffic_incident/test/test_traffic.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2020-2021 LEIDOS.
+ * Copyright (C) 2024 LEIDOS.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -14,153 +14,157 @@
* the License.
*/
-#include "traffic_incident_worker.h"
-#include "traffic_incident_node.h"
#include
+#include "traffic_incident_node.hpp"
+#include "traffic_incident_worker.hpp"
+
namespace traffic
{
-
TEST(TrafficIncidentWorkerTest, testTrafficMobilityOperationBroadcastStrategyParams)
{
+ TrafficIncidentWorker traffic_worker([](auto msg) {});
+
+ gps_msgs::msg::GPSFix msg;
+
+ msg.latitude = 57.1;
+ msg.longitude = 155.79;
+ msg.header.stamp.sec = 25;
+
+ // traffic_worker.setPinPoint(msg);
+
+ std::string sender_id = "USDOT-49096";
+ std::string closed_lane = "[1]";
+ double down_track = 50.1;
+ double up_track = 50.1;
+ double min_gap = 4.1;
+ double advisory_speed = 10;
+ std::string event_reason = "MOVE OVER LAW";
+ std::string event_type = "CLOSED";
+
+ traffic_worker.setSenderId(sender_id);
+ traffic_worker.setDownTrack(down_track);
+ traffic_worker.setUpTrack(up_track);
+ traffic_worker.setMinGap(min_gap);
+ traffic_worker.setAdvisorySpeed(advisory_speed);
+ traffic_worker.setEventReason(event_reason);
+ traffic_worker.setEventType(event_type);
+
+ carma_v2x_msgs::msg::MobilityOperation traffic_msg = traffic_worker.mobilityMessageGenerator(msg);
+
+ EXPECT_EQ(
+ traffic_msg.strategy_params,
+ "lat:57.1,lon:155.79,downtrack:50.1,uptrack:50.1,min_gap:4.1,advisory_speed:10,event_reason:"
+ "MOVE OVER LAW,event_type:CLOSED");
+}
- TrafficIncidentWorker traffic_worker([](auto msg){});
-
- gps_common::GPSFix msg;
-
- msg.latitude=57.1;
- msg.longitude=155.79;
- msg.header.stamp.sec=25;
-
- //traffic_worker.setPinPoint(msg);
-
- std::string sender_id="USDOT-49096";
- std::string closed_lane="[1]";
- double down_track=50.1;
- double up_track=50.1;
- double min_gap=4.1;
- double advisory_speed=10;
- std::string event_reason="MOVE OVER LAW";
- std::string event_type="CLOSED";
-
- traffic_worker.setSenderId(sender_id);
- traffic_worker.setDownTrack(down_track);
- traffic_worker.setUpTrack(up_track);
- traffic_worker.setMinGap(min_gap);
- traffic_worker.setAdvisorySpeed(advisory_speed);
- traffic_worker.setEventReason(event_reason);
- traffic_worker.setEventType(event_type);
-
- cav_msgs::MobilityOperation traffic_msg=traffic_worker.mobilityMessageGenerator(msg);
-
- EXPECT_EQ(traffic_msg.strategy_params,"lat:57.1,lon:155.79,downtrack:50.1,uptrack:50.1,min_gap:4.1,advisory_speed:10,event_reason:MOVE OVER LAW,event_type:CLOSED");
-
- }
-
- TEST(TrafficIncidentWorkerTest, testTrafficMobilityOperationBroadcastTimeStamp)
+TEST(TrafficIncidentWorkerTest, testTrafficMobilityOperationBroadcastTimeStamp)
{
+ TrafficIncidentWorker traffic_worker([](auto msg) {});
+
+ gps_msgs::msg::GPSFix msg;
+
+ msg.latitude = 57.1;
+ msg.longitude = 155.79;
+ msg.header.stamp.sec = 25;
+
+ std::string sender_id = "USDOT-49096";
+ std::string closed_lane = "[1]";
+ double down_track = 50.1;
+ double up_track = 50.1;
+ double min_gap = 4.1;
+ double advisory_speed = 10;
+ std::string event_reason = "MOVE OVER LAW";
+ std::string event_type = "CLOSED";
+
+ traffic_worker.setSenderId(sender_id);
+ traffic_worker.setMinGap(min_gap);
+ traffic_worker.setDownTrack(down_track);
+ traffic_worker.setUpTrack(up_track);
+ traffic_worker.setAdvisorySpeed(advisory_speed);
+ traffic_worker.setEventReason(event_reason);
+ traffic_worker.setEventType(event_type);
+
+ carma_v2x_msgs::msg::MobilityOperation traffic_msg = traffic_worker.mobilityMessageGenerator(msg);
+
+ EXPECT_EQ(traffic_msg.m_header.timestamp, 25000);
+}
- TrafficIncidentWorker traffic_worker([](auto msg){});
-
- gps_common::GPSFix msg;
-
- msg.latitude=57.1;
- msg.longitude=155.79;
- msg.header.stamp.sec=25;
-
- std::string sender_id="USDOT-49096";
- std::string closed_lane="[1]";
- double down_track=50.1;
- double up_track=50.1;
- double min_gap=4.1;
- double advisory_speed=10;
- std::string event_reason="MOVE OVER LAW";
- std::string event_type="CLOSED";
-
- traffic_worker.setSenderId(sender_id);
- traffic_worker.setMinGap(min_gap);
- traffic_worker.setDownTrack(down_track);
- traffic_worker.setUpTrack(up_track);
- traffic_worker.setAdvisorySpeed(advisory_speed);
- traffic_worker.setEventReason(event_reason);
- traffic_worker.setEventType(event_type);
-
- cav_msgs::MobilityOperation traffic_msg=traffic_worker.mobilityMessageGenerator(msg);
-
- EXPECT_EQ(traffic_msg.m_header.timestamp,25000);
-
- }
-
- TEST(TrafficIncidentWorkerTest, testTrafficMobilityOperationBroadcastStrategy)
+TEST(TrafficIncidentWorkerTest, testTrafficMobilityOperationBroadcastStrategy)
{
+ TrafficIncidentWorker traffic_worker([](auto msg) {});
+
+ gps_msgs::msg::GPSFix msg;
+
+ msg.latitude = 57.1;
+ msg.longitude = 155.79;
+ msg.header.stamp.sec = 25;
+
+ std::string sender_id = "USDOT-49096";
+ std::string closed_lane = "[1]";
+ double down_track = 50.1;
+ double up_track = 50.1;
+ double min_gap = 4.1;
+ double advisory_speed = 10;
+ std::string event_reason = "MOVE OVER LAW";
+ std::string event_type = "CLOSED";
+
+ traffic_worker.setSenderId(sender_id);
+ traffic_worker.setMinGap(min_gap);
+ traffic_worker.setDownTrack(down_track);
+ traffic_worker.setUpTrack(up_track);
+ traffic_worker.setAdvisorySpeed(advisory_speed);
+ traffic_worker.setEventReason(event_reason);
+ traffic_worker.setEventType(event_type);
+
+ carma_v2x_msgs::msg::MobilityOperation traffic_msg = traffic_worker.mobilityMessageGenerator(msg);
+
+ EXPECT_EQ(traffic_msg.m_header.sender_id, "USDOT-49096");
+ EXPECT_EQ(traffic_msg.strategy, "carma3/Incident_Use_Case");
+}
- TrafficIncidentWorker traffic_worker([](auto msg){});
-
- gps_common::GPSFix msg;
-
- msg.latitude=57.1;
- msg.longitude=155.79;
- msg.header.stamp.sec=25;
-
- std::string sender_id="USDOT-49096";
- std::string closed_lane="[1]";
- double down_track=50.1;
- double up_track=50.1;
- double min_gap=4.1;
- double advisory_speed=10;
- std::string event_reason="MOVE OVER LAW";
- std::string event_type="CLOSED";
-
- traffic_worker.setSenderId(sender_id);
- traffic_worker.setMinGap(min_gap);
- traffic_worker.setDownTrack(down_track);
- traffic_worker.setUpTrack(up_track);
- traffic_worker.setAdvisorySpeed(advisory_speed);
- traffic_worker.setEventReason(event_reason);
- traffic_worker.setEventType(event_type);
-
- cav_msgs::MobilityOperation traffic_msg=traffic_worker.mobilityMessageGenerator(msg);
-
- EXPECT_EQ(traffic_msg.m_header.sender_id,"USDOT-49096");
- EXPECT_EQ(traffic_msg.strategy,"carma3/Incident_Use_Case");
-
- }
-
- TEST(TrafficIncidentWorkerTest, testAnyTypeToStringFunction)
+TEST(TrafficIncidentWorkerTest, testAnyTypeToStringFunction)
{
- TrafficIncidentWorker traffic_worker([](auto msg){});
-
- EXPECT_EQ(traffic_worker.anytypeToString(55.6712),"55.6712");
+ TrafficIncidentWorker traffic_worker([](auto msg) {});
+
+ EXPECT_EQ(traffic_worker.anytypeToString(55.6712), "55.6712");
}
- TEST(TrafficIncidentWorkerTest, testGettersSetters)
+TEST(TrafficIncidentWorkerTest, testGettersSetters)
{
- TrafficIncidentWorker traffic_worker([](auto msg){});
- traffic_worker.setSenderId("USDOT-49096");
- traffic_worker.setMinGap(1.2);
- traffic_worker.setDownTrack(1.2);
- traffic_worker.setUpTrack(1.2);
-
- gps_common::GPSFix msg;
- msg.latitude=57.1;
- msg.longitude=155.79;
- msg.header.stamp.sec=25;
-
-
- traffic_worker.setPinPoint(msg);
- traffic_worker.setAdvisorySpeed(1.2);
- traffic_worker.setEventReason("MOVE OVER LAW");
- traffic_worker.setEventType("CLOSED");
-
- EXPECT_EQ(traffic_worker.getSenderId(),"USDOT-49096");
- EXPECT_EQ(traffic_worker.getMinGap(),1.2);
- EXPECT_EQ(traffic_worker.getDownTrack(),1.2);
- EXPECT_EQ(traffic_worker.getUpTrack(),1.2);
- EXPECT_EQ(traffic_worker.getPinPoint().latitude,57.1);
- EXPECT_EQ(traffic_worker.getAdvisorySpeed(),1.2);
- EXPECT_EQ(traffic_worker.getEventReason(),"MOVE OVER LAW");
- EXPECT_EQ(traffic_worker.getEventType(),"CLOSED");
+ TrafficIncidentWorker traffic_worker([](auto msg) {});
+ traffic_worker.setSenderId("USDOT-49096");
+ traffic_worker.setMinGap(1.2);
+ traffic_worker.setDownTrack(1.2);
+ traffic_worker.setUpTrack(1.2);
+
+ gps_msgs::msg::GPSFix msg;
+ msg.latitude = 57.1;
+ msg.longitude = 155.79;
+ msg.header.stamp.sec = 25;
+
+
+ traffic_worker.setPinPoint(msg);
+ traffic_worker.setAdvisorySpeed(1.2);
+ traffic_worker.setEventReason("MOVE OVER LAW");
+ traffic_worker.setEventType("CLOSED");
+
+ EXPECT_EQ(traffic_worker.getSenderId(), "USDOT-49096");
+ EXPECT_EQ(traffic_worker.getMinGap(), 1.2);
+ EXPECT_EQ(traffic_worker.getDownTrack(), 1.2);
+ EXPECT_EQ(traffic_worker.getUpTrack(), 1.2);
+ EXPECT_EQ(traffic_worker.getPinPoint().latitude, 57.1);
+ EXPECT_EQ(traffic_worker.getAdvisorySpeed(), 1.2);
+ EXPECT_EQ(traffic_worker.getEventReason(), "MOVE OVER LAW");
+ EXPECT_EQ(traffic_worker.getEventType(), "CLOSED");
}
-}//traffic
\ No newline at end of file
+} // namespace traffic
+
+// Run all the tests
+int main(int argc, char ** argv)
+{
+ testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
\ No newline at end of file
diff --git a/carma-messenger-core/truck_inspection_plugin/CMakeLists.txt b/carma-messenger-core/truck_inspection_plugin/CMakeLists.txt
deleted file mode 100644
index 37c3ad344..000000000
--- a/carma-messenger-core/truck_inspection_plugin/CMakeLists.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-
-# Copyright (C) 2022 LEIDOS.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not
-# use this file except in compliance with the License. You may obtain a copy of
-# the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations under
-# the License.
-
-cmake_minimum_required(VERSION 3.5)
-project(truck_inspection_plugin)
-
-# Declare carma package and check ROS version
-find_package(carma_cmake_common REQUIRED)
-carma_check_ros_version(2)
-carma_package()
-
-## Find dependencies using ament auto
-find_package(ament_cmake_auto REQUIRED)
-ament_auto_find_build_dependencies()
-
-# Name build targets
-set(node_exec truck_inspection_plugin_node_exec)
-set(node_lib truck_inspection_plugin_node)
-
-# Includes
-include_directories(
- include
-)
-
-# Build
-ament_auto_add_library(${node_lib} SHARED
- src/truck_inspection_plugin_node.cpp
-)
-
-ament_auto_add_executable(${node_exec}
- src/main.cpp
-)
-
-# Register component
-rclcpp_components_register_nodes(${node_lib} "truck_inspection_plugin::Node")
-
-# All locally created targets will need to be manually linked
-# ament auto will handle linking of external dependencies
-target_link_libraries(${node_exec}
- ${node_lib}
-)
-
-# Testing
-if(BUILD_TESTING)
-
- find_package(ament_lint_auto REQUIRED)
- ament_lint_auto_find_test_dependencies() # This populates the ${${PROJECT_NAME}_FOUND_TEST_DEPENDS} variable
-
- ament_add_gtest(test_truck_inspection_plugin test/node_test.cpp)
-
- ament_target_dependencies(test_truck_inspection_plugin ${${PROJECT_NAME}_FOUND_TEST_DEPENDS})
-
- target_link_libraries(test_truck_inspection_plugin ${node_lib})
-
-endif()
-
-# Install
-ament_auto_package(
- INSTALL_TO_SHARE config launch
-)
diff --git a/carma-messenger-core/truck_inspection_plugin/README.md b/carma-messenger-core/truck_inspection_plugin/README.md
deleted file mode 100644
index 6ebad980d..000000000
--- a/carma-messenger-core/truck_inspection_plugin/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# truck_inspection_plugin
-https://usdot-carma.atlassian.net/wiki/spaces/CRMPLT/pages/1319928028/Detailed+Design+-+Traffic+Incident+Node
diff --git a/carma-messenger-core/truck_inspection_plugin/config/parameters.yaml b/carma-messenger-core/truck_inspection_plugin/config/parameters.yaml
deleted file mode 100644
index cbdc61bc3..000000000
--- a/carma-messenger-core/truck_inspection_plugin/config/parameters.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-# Number of Key-Value entries in safety log
-num_of_entries: 13
diff --git a/carma-messenger-core/truck_inspection_plugin/include/truck_inspection_plugin/truck_inspection_plugin_config.hpp b/carma-messenger-core/truck_inspection_plugin/include/truck_inspection_plugin/truck_inspection_plugin_config.hpp
deleted file mode 100644
index fcd9ce2df..000000000
--- a/carma-messenger-core/truck_inspection_plugin/include/truck_inspection_plugin/truck_inspection_plugin_config.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2022 LEIDOS.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#include
-#include
-
-namespace truck_inspection_plugin
-{
-
- /**
- * \brief Stuct containing the algorithm configuration values for truck_inspection_plugin
- */
- struct Config
- {
- //! num_of_entries
- int num_of_entries = 13;
-
- // Stream operator for this config
- friend std::ostream &operator<<(std::ostream &output, const Config &c)
- {
- output << "truck_inspection_plugin::Config { " << std::endl
- << "num_of_entries: " << c.num_of_entries << std::endl
- << "}" << std::endl;
- return output;
- }
- };
-
-} // truck_inspection_plugin
diff --git a/carma-messenger-core/truck_inspection_plugin/include/truck_inspection_plugin/truck_inspection_plugin_node.hpp b/carma-messenger-core/truck_inspection_plugin/include/truck_inspection_plugin/truck_inspection_plugin_node.hpp
deleted file mode 100644
index 2623a5b45..000000000
--- a/carma-messenger-core/truck_inspection_plugin/include/truck_inspection_plugin/truck_inspection_plugin_node.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2022 LEIDOS.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#pragma once
-
-#include
-#include
-#include
-#include
-
-#include
-#include "truck_inspection_plugin/truck_inspection_plugin_config.hpp"
-#include "carma_v2x_msgs/msg/mobility_request.hpp"
-#include "carma_v2x_msgs/msg/mobility_operation.hpp"
-#include
-
-namespace truck_inspection_plugin
-{
-
- class Node : public carma_ros2_utils::CarmaLifecycleNode
- {
-
- private:
- // Subscribers
- carma_ros2_utils::SubPtr mo_sub_;
-
- // Publishers
- carma_ros2_utils::PubPtr content_pub_;
- carma_ros2_utils::PubPtr mr_pub_;
- carma_ros2_utils::PubPtr cav_detection_pub_;
-
- // Service Servers
- carma_ros2_utils::ServicePtr inspection_request_service_server_;
-
- // Node configuration
- Config config_;
-
- const std::string INSPECTION_STRATEGY = "TruckInspection";
- int number_of_entries;
- std::string safety_log_;
-
- // Timers
- rclcpp::TimerBase::SharedPtr content_pub_timer_;
-
- public:
- /**
- * \brief Node constructor
- */
- explicit Node(const rclcpp::NodeOptions &);
-
- /**
- * \brief callback for dynamic parameter updates
- */
- rcl_interfaces::msg::SetParametersResult parameter_update_callback(const std::vector ¶meters);
-
- /**
- * \brief subscription callback
- */
- void mobilityOperationCallback(carma_v2x_msgs::msg::MobilityOperation::UniquePtr msg);
-
- /**
- * \brief service callback
- */
- void inspectionRequestCallback(std::shared_ptr header,
- std::shared_ptr request,
- std::shared_ptr response);
-
- // helper function to verify safety log
- bool isSafetyLogValid(const std::string& log);
-
- // helper function to check ads_auto_status
- bool isADSAutoEngaged(const std::string& log);
-
- carma_ros2_utils::CallbackReturn handle_on_configure(const rclcpp_lifecycle::State &);
-
- void content_pub_timer_callback();
-
- };
-
-} // truck_inspection_plugin
diff --git a/carma-messenger-core/truck_inspection_plugin/launch/truck_inspection_plugin_launch.py b/carma-messenger-core/truck_inspection_plugin/launch/truck_inspection_plugin_launch.py
deleted file mode 100644
index 024d07035..000000000
--- a/carma-messenger-core/truck_inspection_plugin/launch/truck_inspection_plugin_launch.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright (C) 2022 LEIDOS.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not
-# use this file except in compliance with the License. You may obtain a copy of
-# the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations under
-# the License.
-
-from ament_index_python import get_package_share_directory
-from launch import LaunchDescription
-from launch_ros.actions import ComposableNodeContainer
-from launch_ros.descriptions import ComposableNode
-from launch.actions import DeclareLaunchArgument
-from launch.substitutions import LaunchConfiguration
-from carma_ros2_utils.launch.get_current_namespace import GetCurrentNamespace
-
-import os
-
-
-'''
-This file is can be used to launch the CARMA truck_inspection_plugin_node.
- Though in carma-messenger it may be launched directly from the base launch file.
-'''
-
-def generate_launch_description():
-
- # Declare the log_level launch argument
- log_level = LaunchConfiguration('log_level')
- declare_log_level_arg = DeclareLaunchArgument(
- name ='log_level', default_value='WARN')
-
- # Get parameter file path
- param_file_path = os.path.join(
- get_package_share_directory('truck_inspection_plugin'), 'config/parameters.yaml')
-
-
- # Launch node(s) in a carma container to allow logging to be configured
- container = ComposableNodeContainer(
- package='carma_ros2_utils',
- name='truck_inspection_plugin_container',
- namespace=GetCurrentNamespace(),
- executable='carma_component_container_mt',
- composable_node_descriptions=[
-
- # Launch the core node(s)
- ComposableNode(
- package='truck_inspection_plugin',
- plugin='truck_inspection_plugin::Node',
- name='truck_inspection_plugin_node',
- extra_arguments=[
- {'use_intra_process_comms': True},
- {'--log-level' : log_level }
- ],
- parameters=[ param_file_path ]
- ),
- ]
- )
-
- return LaunchDescription([
- declare_log_level_arg,
- container
- ])
diff --git a/carma-messenger-core/truck_inspection_plugin/package.xml b/carma-messenger-core/truck_inspection_plugin/package.xml
deleted file mode 100644
index 1ef92c7b8..000000000
--- a/carma-messenger-core/truck_inspection_plugin/package.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
- truck_inspection_plugin
- 1.0.0
- This node works with CARMA Messenger truck inspection client to send safety inspection request
-
- carma
-
- Apache 2.0
-
- ament_cmake
- carma_cmake_common
- ament_auto_cmake
-
- rclcpp
- carma_ros2_utils
- rclcpp_components
- std_srvs
-
- carma_v2x_msgs
-
- ament_lint_auto
- ament_cmake_gtest
-
- launch
- launch_ros
-
-
- ament_cmake
-
-
diff --git a/carma-messenger-core/truck_inspection_plugin/src/main.cpp b/carma-messenger-core/truck_inspection_plugin/src/main.cpp
deleted file mode 100644
index 24f62c5e6..000000000
--- a/carma-messenger-core/truck_inspection_plugin/src/main.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2022 LEIDOS.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#include
-#include "truck_inspection_plugin/truck_inspection_plugin_node.hpp"
-
-int main(int argc, char **argv)
-{
- rclcpp::init(argc, argv);
-
- auto node = std::make_shared(rclcpp::NodeOptions());
-
- rclcpp::executors::MultiThreadedExecutor executor;
- executor.add_node(node->get_node_base_interface());
- executor.spin();
-
- rclcpp::shutdown();
-
- return 0;
-}
diff --git a/carma-messenger-core/truck_inspection_plugin/src/truck_inspection_plugin_node.cpp b/carma-messenger-core/truck_inspection_plugin/src/truck_inspection_plugin_node.cpp
deleted file mode 100644
index db0d59699..000000000
--- a/carma-messenger-core/truck_inspection_plugin/src/truck_inspection_plugin_node.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2022 LEIDOS.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-#include "truck_inspection_plugin/truck_inspection_plugin_node.hpp"
-
-namespace truck_inspection_plugin
-{
- namespace std_ph = std::placeholders;
-
- Node::Node(const rclcpp::NodeOptions &options)
- : carma_ros2_utils::CarmaLifecycleNode(options)
- {
- // Create initial config
- config_ = Config();
-
- // Declare parameters
- config_.num_of_entries = declare_parameter("num_of_entries", config_.num_of_entries);
- }
-
- rcl_interfaces::msg::SetParametersResult Node::parameter_update_callback(const std::vector ¶meters)
- {
- auto error = update_params({{"num_of_entries", config_.num_of_entries}}, parameters);
-
- rcl_interfaces::msg::SetParametersResult result;
-
- result.successful = !error;
-
- return result;
- }
-
- carma_ros2_utils::CallbackReturn Node::handle_on_configure(const rclcpp_lifecycle::State &)
- {
- // Reset config
- config_ = Config();
-
- // Load parameters
- get_parameter("num_of_entries", config_.num_of_entries);
-
- // Register runtime parameter update callback
- add_on_set_parameters_callback(std::bind(&Node::parameter_update_callback, this, std_ph::_1));
-
- // Setup subscribers
- mo_sub_ = create_subscription("mobility_operation_inbound", 5,
- std::bind(&Node::mobilityOperationCallback, this, std_ph::_1));
-
- // Setup publishers
- mr_pub_ = create_publisher("mobility_request_outbound", 5);
- cav_detection_pub_ = create_publisher("cav_truck_identified", 5);
- content_pub_ = create_publisher("truck_safety_info", 5);
-
- // Setup service servers
- inspection_request_service_server_ = create_service("send_inspection_request",std::bind(&Node::inspectionRequestCallback, this, std_ph::_1, std_ph::_2, std_ph::_3));
-
-
- content_pub_timer_ = create_timer(
- get_clock(),
- std::chrono::milliseconds(50),
- std::bind(&Node::content_pub_timer_callback, this));
-
- RCLCPP_INFO_STREAM(this->get_logger(), "Truck inspection plugin is initialized...");
-
- // Return success if everthing initialized successfully
- return CallbackReturn::SUCCESS;
- }
-
- void Node::content_pub_timer_callback()
- {
- if(!this->safety_log_.empty()) {
- std_msgs::msg::String msg_content;
- msg_content.data = this->safety_log_;
- content_pub_->publish(msg_content);
- }
- }
-
- // Parameter names not shown to prevent unused compile warning. The user may add them back
- void Node::inspectionRequestCallback( std::shared_ptr header,
- std::shared_ptr request,
- std::shared_ptr response)
- {
- carma_v2x_msgs::msg::MobilityRequest msg;
- msg.strategy = Node::INSPECTION_STRATEGY;
- mr_pub_->publish(msg);
- // reset safety log
- this->safety_log_ = "";
- response->success = true;
- }
-
- void Node::mobilityOperationCallback(carma_v2x_msgs::msg::MobilityOperation::UniquePtr msg)
- {
- // if there is a truck around running CARMA
- if(msg->strategy == Node::INSPECTION_STRATEGY)
- {
- // if the incoming message contains a valid safety log
- if(isSafetyLogValid(msg->strategy_params))
- {
- safety_log_ = msg->strategy_params;
- safety_log_ += ",timestamp:" + std::to_string(msg->m_header.timestamp);
- } else {
- std_msgs::msg::String msg_out;
- std::string k_v_pair = msg->strategy_params;
- // get only VIN number, state and license plate
- msg_out.data = k_v_pair;
- // publish message to show there is a cav truck in the radio range of the ego-vehicle
- cav_detection_pub_->publish(msg_out);
- }
- }
- }
-
-
- bool Node::isSafetyLogValid(const std::string& log)
- {
- // Check 1: if number of k-v pairs matches expectation
- std::string temp;
- int count = 0;
- std::stringstream ss(log);
- while(std::getline(ss, temp, ','))
- {
- if(!temp.empty())
- {
- count++;
- }
- else
- {
- // do not allow spaces in the safety log
- return false;
- }
- }
- return count == this->number_of_entries;
- }
-
-} // truck_inspection_plugin
-
-#include "rclcpp_components/register_node_macro.hpp"
-
-// Register the component with class_loader
-RCLCPP_COMPONENTS_REGISTER_NODE(truck_inspection_plugin::Node)
diff --git a/carma-messenger-core/truck_inspection_plugin/test/node_test.cpp b/carma-messenger-core/truck_inspection_plugin/test/node_test.cpp
deleted file mode 100644
index 78bf332f3..000000000
--- a/carma-messenger-core/truck_inspection_plugin/test/node_test.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2022 LEIDOS.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-
-#include
-#include
-#include
-
-
-#include "truck_inspection_plugin/truck_inspection_plugin_node.hpp"
-
-namespace std_ph = std::placeholders;
-
-TEST(TruckInspectionTest,TestMobilityOperationInBound){
-
- std::vector remaps; // Remaps to keep topics separate from other tests
- rclcpp::NodeOptions options;
- options.use_intra_process_comms(true);
- options.arguments(remaps);
-
- auto worker_node = std::make_shared(options);
- carma_ros2_utils::PubPtr mobility_operation_inbound_pub;
- //publisher
- mobility_operation_inbound_pub = worker_node->create_publisher("mobility_operation_inbound", 5);
-
- worker_node->configure(); //Call configure state transition
- worker_node->activate(); //Call activate state transition to get not read for runtime
-
-
- // truck info
- std::string vin_number_ = "1FUJGBDV8CLBP8898";
- std::string license_plate_ ="DOT-10002";
- std::string carrier_name_ = "FMCSA Tech Division";
- std::string carrier_id_ ="DOT 1";
- std::string ads_software_version_ ="CARMA Platform v3.3.0";
- std::string date_of_last_state_inspection_ ="2020.01.20";
- std::string date_of_last_ads_calibration_="2020.02.20";
- std::string pre_trip_ads_health_check_ ="red";
- std::string ads_health_status_ ="red";
- std::string state_short_name_ = "VA";
- std::string weight_= "15654";
- std::string iss_score_ = "75";
- std::string permit_required_= "yes";
- std::string ads_health_status = "engaged"; //ads_health_status
- std::string ads_auto_status_ = "1"; //CAUTION
-
- carma_v2x_msgs::msg::MobilityOperation msg_out;
- carma_v2x_msgs::msg::MobilityHeader msg_out_header;
- msg_out.strategy = "TruckInspection";
- msg_out.strategy_params = "'vin_number:"+vin_number_
- +",carrier_name:"+carrier_name_
- +",date_of_last_state_inspection:"+date_of_last_state_inspection_
- +",date_of_last_ads_calibration:"+date_of_last_ads_calibration_
- +",license_plate:"+license_plate_
- +",weight:"+weight_
- +",carrier_id:"+carrier_id_
- +",permit_required:"+permit_required_
- +",iss_score:"+iss_score_
- +",pre_trip_ads_health_check:"+pre_trip_ads_health_check_
- +",ads_health_status:"+ads_health_status_
- +",ads_auto_status:"+ads_auto_status_
- +",ads_software_version:"+ads_software_version_
- +",state_short_name:"+state_short_name_+"'";
- msg_out_header.sender_id = "''";
- msg_out_header.recipient_id="''";
- msg_out_header.sender_bsm_id="'5055'";
- msg_out_header.plan_id= "";
- msg_out_header.timestamp= 1586291827962;
- msg_out.m_header = msg_out_header;
-
- mobility_operation_inbound_pub->publish(msg_out);
-
- rclcpp::spin_some(worker_node->get_node_base_interface()); // Spin current queue to allow for subscription callback to trigger
-
- EXPECT_EQ(1,mobility_operation_inbound_pub->get_subscription_count());
-}
-
-
-TEST(TruckInspectionTest,TestTruckIdentified){
-
- std::vector remaps; // Remaps to keep topics separate from other tests
- rclcpp::NodeOptions options;
- options.use_intra_process_comms(true);
- options.arguments(remaps);
-
- auto worker_node = std::make_shared(options);
-
- int counter = 0;
- std_msgs::msg::String::ConstSharedPtr received_msg;
-
- std::promise sub_called;
- std::shared_future sub_called_future(sub_called.get_future());
- auto callback =
- [&counter, &sub_called, &received_msg](std_msgs::msg::String::ConstSharedPtr msg) -> void
- {
- received_msg = msg;
- ++counter;
- sub_called.set_value();
- };
-
- worker_node->configure(); //Call configure state transition
- worker_node->activate(); //Call activate state transition to get not read for runtime
-
- auto cav_truck_identified_sub = worker_node->create_subscription("cav_truck_identified", 5, callback);
-
- rclcpp::spin_some(worker_node->get_node_base_interface()); // Spin current queue to allow for subscription callback to trigger
-
- if(counter > 0)
- EXPECT_EQ("vin_number:1FUJGHDV0CLBP8896,license_plate:DOT-1003,state_short_name:VA", received_msg->data);
-
- //ASSERTION
- EXPECT_EQ(1, cav_truck_identified_sub->get_publisher_count());
-
-}
-
-
-TEST(TruckInspectionTest,TestTruckSafetyInfo){
- std::vector remaps; // Remaps to keep topics separate from other tests
- rclcpp::NodeOptions options;
- options.use_intra_process_comms(true);
- options.arguments(remaps);
-
- auto worker_node = std::make_shared(options);
-
- int counter = 0;
- std_msgs::msg::String::ConstSharedPtr received_msg;
-
- std::promise sub_called;
- std::shared_future sub_called_future(sub_called.get_future());
- auto callback =
- [&counter, &sub_called, &received_msg](std_msgs::msg::String::ConstSharedPtr msg) -> void
- {
- ++counter;
- received_msg = msg;
- sub_called.set_value();
- };
-
- worker_node->configure(); //Call configure state transition
- worker_node->activate(); //Call activate state transition to get not read for runtime
-
- auto truck_safety_info_sub = worker_node->create_subscription("truck_safety_info", 5, callback);
- rclcpp::spin_some(worker_node->get_node_base_interface()); // Spin current queue to allow for subscription callback to trigger
-
- if(counter > 0)
- EXPECT_EQ("vin_number:1FUJGBDV8CLBP8898,carrier_name:FMCSA Tech Division,date_of_last_state_inspection:2020.01.20,date_of_last_ads_calibration:2020.02.20,license_plate:DOT-10002,weight:15654,carrier_id:DOT 1,permit_required:Yes,iss_score:75,pre_trip_ads_health_check:red,ads_health_status:1,ads_auto_status:engaged,ads_software_version:CARMA Platform v3.3.0,state_short_name:VA,timestamp:1586291827962",received_msg->data);
-
-
- //ASSERTION
- EXPECT_EQ(1, truck_safety_info_sub->get_publisher_count());
-}
-
-int main(int argc, char ** argv)
-{
- ::testing::InitGoogleTest(&argc, argv);
-
- //Initialize ROS
- rclcpp::init(argc, argv);
-
- bool success = RUN_ALL_TESTS();
-
- //shutdown ROS
- rclcpp::shutdown();
-
- return success;
-}
-
diff --git a/carma-messenger-ui/website/main.html b/carma-messenger-ui/website/main.html
index 1d1284cc6..93f7aa789 100755
--- a/carma-messenger-ui/website/main.html
+++ b/carma-messenger-ui/website/main.html
@@ -103,15 +103,7 @@