diff --git a/.circleci/config.yml b/.circleci/config.yml index f008db9b..b60844a9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ jobs: build: # Setup docker docker: - - image: usdotfhwastol/carma-base:carma-system-4.1.0 + - image: usdotfhwastol/carma-base:carma-system-4.2.0 user: carma environment: TERM: xterm # use xterm to get full display output from build diff --git a/Dockerfile b/Dockerfile index b9c5f748..4eefdc4b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM usdotfhwastol/carma-base:carma-system-4.1.0 as base_image +FROM usdotfhwastol/carma-base:carma-system-4.2.0 as base_image SHELL ["/bin/bash", "-c"] ARG DEBIAN_FRONTEND="noninteractive" @@ -13,42 +13,10 @@ LABEL org.label-schema.vcs-url="https://github.com/usdot-fhwa-stol/carma-msgs" LABEL org.label-schema.vcs-ref=${VCS_REF} LABEL org.label-schema.build-date=${BUILD_DATE} -# Clone autoware repo to access messages -RUN cd /home/carma/ && git clone https://github.com/usdot-fhwa-stol/autoware.ai.git --depth 1 --branch carma-system-4.1.0 - -# ROS 1 msgs setup -RUN mkdir -p ~/.base-image/ros1_msgs_ws/src/carma_msgs +RUN mkdir -p ~/.base-image/ros1_msgs_ws/src/carma_msgs +RUN mkdir -p /home/carma/src COPY . /home/carma/.base-image/ros1_msgs_ws/src/carma_msgs/ -RUN cp -R /home/carma/autoware.ai/messages /home/carma/.base-image/ros1_msgs_ws/src/autoware.ai/ -RUN cp -R /home/carma/autoware.ai/jsk_common_msgs /home/carma/.base-image/ros1_msgs_ws/src/autoware.ai/ -RUN cp -R /home/carma/autoware.ai/jsk_recognition /home/carma/.base-image/ros1_msgs_ws/src/autoware.ai/ - - -# ROS 2 msgs setup -RUN mkdir -p ~/.base-image/ros2_msgs_ws/src/carma_msgs +RUN mkdir -p ~/.base-image/ros2_msgs_ws/src/carma_msgs COPY . /home/carma/.base-image/ros2_msgs_ws/src/carma_msgs/ -RUN mkdir -p ~/.base-image/ros2_msgs_ws/src/autoware.ai -RUN cp -R /home/carma/autoware.ai/messages /home/carma/.base-image/ros2_msgs_ws/src/autoware.ai/ -RUN cp -R /home/carma/autoware.ai/jsk_common_msgs /home/carma/.base-image/ros2_msgs_ws/src/autoware.ai/ -RUN cp -R /home/carma/autoware.ai/jsk_recognition /home/carma/.base-image/ros2_msgs_ws/src/autoware.ai/ - -# Cleanup autoware repo once messages have been moved -RUN rm -r /home/carma/autoware.ai/ - -# ROS1 message setup -RUN cd ~/.base-image/ros1_msgs_ws && source /opt/ros/noetic/setup.bash && colcon build --packages-up-to autoware_msgs cav_msgs cav_srvs j2735_msgs can_msgs carma_debug_msgs autoware_lanelet2_msgs - -# ROS2 message setup -RUN cd ~/.base-image/ros2_msgs_ws && source /opt/ros/foxy/setup.bash && colcon build --packages-up-to autoware_msgs autoware_lanelet2_msgs can_msgs carma_debug_ros2_msgs carma_driver_msgs carma_localization_msgs carma_msgs carma_perception_msgs carma_planning_msgs carma_v2x_msgs j2735_v2x_msgs +RUN /home/carma/.base-image/ros1_msgs_ws/src/carma_msgs/docker/install.sh -# Build the bridge -RUN source /opt/ros/noetic/setup.bash \ -&& source /opt/ros/foxy/setup.bash \ -&& source ~/.base-image/ros1_msgs_ws/install/local_setup.bash \ -&& source ~/.base-image/ros2_msgs_ws/install/local_setup.bash \ -&& cd ~/.base-image/workspace/src \ -&& git clone --depth 1 --branch carma-system-4.1.0 https://github.com/usdot-fhwa-stol/ros1_bridge.git \ -&& cd ../ \ -&& sudo apt-get update \ -&& colcon build --packages-select ros1_bridge --cmake-args "--debug-output" \ -&& sudo chmod -R ugo+x ~/.base-image/workspace/install diff --git a/carma_planning_msgs/CMakeLists.txt b/carma_planning_msgs/CMakeLists.txt index 3210aef2..b98121ae 100644 --- a/carma_planning_msgs/CMakeLists.txt +++ b/carma_planning_msgs/CMakeLists.txt @@ -28,6 +28,7 @@ find_package(ament_cmake REQUIRED) find_package(std_msgs REQUIRED) find_package(builtin_interfaces REQUIRED) find_package(geometry_msgs REQUIRED) +find_package(carma_v2x_msgs REQUIRED) ## Generate messages file(GLOB msg_files msg/*.msg) @@ -52,6 +53,7 @@ rosidl_generate_interfaces( std_msgs builtin_interfaces geometry_msgs + carma_v2x_msgs ) ament_export_dependencies(rosidl_default_runtime) diff --git a/carma_planning_msgs/msg/PlatooningInfo.msg b/carma_planning_msgs/msg/PlatooningInfo.msg index e5c55fb0..ae6aeb61 100644 --- a/carma_planning_msgs/msg/PlatooningInfo.msg +++ b/carma_planning_msgs/msg/PlatooningInfo.msg @@ -42,3 +42,21 @@ float32 host_cmd_speed # Desired gap with leader float32 desired_gap + +# Actual gap with leader +float32 actual_gap + +# The time headway summation of all predecessors +float32 current_predecessor_time_headway_sum + +# The speed of the preceding vehicle, in m/s. +float32 predecessor_speed + +# The position of the preceding vehicle, in m. +float32 predecessor_position + +# The status of gap creation. +bool is_create_gap + +# Ratio to increase desired gap +float32 create_gap_adjuster diff --git a/carma_planning_msgs/package.xml b/carma_planning_msgs/package.xml index 2aaf09bf..76ab7bb5 100644 --- a/carma_planning_msgs/package.xml +++ b/carma_planning_msgs/package.xml @@ -30,6 +30,7 @@ geometry_msgs std_msgs builtin_interfaces + carma_v2x_msgs rosidl_default_runtime rosidl_interface_packages diff --git a/carma_planning_msgs/srv/SetActiveRoute.srv b/carma_planning_msgs/srv/SetActiveRoute.srv index 7f45ba98..4724c68a 100644 --- a/carma_planning_msgs/srv/SetActiveRoute.srv +++ b/carma_planning_msgs/srv/SetActiveRoute.srv @@ -9,8 +9,18 @@ # # Request +# Enumeration values for the method being used to provide the route destination points +uint8 choice + +uint8 ROUTE_ID=0 +uint8 DESTINATION_POINTS_ARRAY=1 + # The id of the route to select string route_id + +# The array of destination points to be used for route generation +carma_v2x_msgs/Position3D[] destination_points + --- # Response # An enumeration representing a service execution error as defined in the route design document. diff --git a/carma_v2x_msgs/msg/MobilityReason.msg b/carma_v2x_msgs/msg/MobilityReason.msg new file mode 100644 index 00000000..a7f3cccf --- /dev/null +++ b/carma_v2x_msgs/msg/MobilityReason.msg @@ -0,0 +1,18 @@ +# MobilityReason.msg +# +# + +# Variable which can be used to store a specific reason value. +uint8 reason + +# enumeration values for mobility reason: + +uint8 UNKNOWN=0 +uint8 ACCEPTED=1 +uint8 SAFETY_VIOLATION=2 +uint8 INSUFFICIENT_TIME=3 +uint8 PLAN_CONFLICT=4 +uint8 OTHERWISE_ENGAGED=5 +uint8 INSUFFICIENT_URGENCY=6 +uint8 PLAN_UNCLEAR=7 +uint8 OTHER=8 \ No newline at end of file diff --git a/carma_v2x_msgs/msg/MobilityRepeat.msg b/carma_v2x_msgs/msg/MobilityRepeat.msg new file mode 100644 index 00000000..3fbca201 --- /dev/null +++ b/carma_v2x_msgs/msg/MobilityRepeat.msg @@ -0,0 +1,12 @@ +# MobilityRepeat.msg +# +# + +# Variable which can be used to store a specific repeat value. +uint8 repeat + +# enumeration values for mobility repeat: + +uint8 UNKNOWN=0 +uint8 REQUEST_AGAIN=1 +uint8 NEVER_REQUEST_AGAIN=2 diff --git a/carma_v2x_msgs/msg/MobilityResponse.msg b/carma_v2x_msgs/msg/MobilityResponse.msg index d034eef1..b4e15aa2 100644 --- a/carma_v2x_msgs/msg/MobilityResponse.msg +++ b/carma_v2x_msgs/msg/MobilityResponse.msg @@ -4,10 +4,19 @@ # recevied a MobilityRequest from that CAV and decide to involve in that plan # standard header for all mobility messages -carma_v2x_msgs/MobilityHeader m_header +carma_v2x_msgs/MobilityHeader m_header # urgency of the current plan from 0 to 1000 -uint16 urgency +uint16 urgency # the content of this response -bool is_accepted +bool is_accepted + +# type of the proposal being suggested to neighbors +carma_v2x_msgs/PlanType plan_type + +# +carma_v2x_msgs/MobilityReason reason # OPTIONAL + +# Whether or not to repeat the MobilityRequest +carma_v2x_msgs/MobilityRepeat repeat # OPTIONAL \ No newline at end of file diff --git a/carma_v2x_msgs/msg/PlanType.msg b/carma_v2x_msgs/msg/PlanType.msg index dfbcc574..e2f114f0 100644 --- a/carma_v2x_msgs/msg/PlanType.msg +++ b/carma_v2x_msgs/msg/PlanType.msg @@ -12,6 +12,16 @@ uint8 CHANGE_LANE_LEFT = 1 uint8 CHANGE_LANE_RIGHT = 2 uint8 JOIN_PLATOON_AT_REAR = 3 uint8 PLATOON_FOLLOWER_JOIN = 4 +uint8 JOIN_PLATOON_FROM_FRONT = 5 +uint8 PLATOON_FRONT_JOIN = 6 +uint8 CUT_IN_FROM_SIDE = 7 +uint8 PLATOON_CUT_IN_JOIN = 8 +uint8 STOP_CREATE_GAP = 9 +uint8 CUT_IN_FRONT_DONE = 10 +uint8 CUT_IN_MID_OR_REAR_DONE = 11 +uint8 PLATOON_DEPARTURE = 12 +uint8 DELETE_MEMBER = 13 + # ideas for future additions: # uint8 SEARCHING_FOR_PLATOON = 5 @@ -21,3 +31,6 @@ uint8 PLATOON_FOLLOWER_JOIN = 4 # uint8 PASSING = 9 # pulling onto shoulder, need multi-lane change # join platoon in middle, merging platoons +# MobilityPlanType.msg +# +# diff --git a/carma_v2x_msgs/msg/TrafficControlDetail.msg b/carma_v2x_msgs/msg/TrafficControlDetail.msg index 565189d2..5146656c 100644 --- a/carma_v2x_msgs/msg/TrafficControlDetail.msg +++ b/carma_v2x_msgs/msg/TrafficControlDetail.msg @@ -24,15 +24,17 @@ # lataffinity ENUMERATED {left, right}, # latperm SEQUENCE (SIZE(2)) OF ENUMERATED {none, permitted, passing-only, emergency-only}, # parking ENUMERATED {no, parallel, angled}, -# minspeed INTEGER (0..1023), -- tenths of m/s -# maxspeed INTEGER (0..1023), -- tenths of m/s -# minhdwy INTEGER (0..2047), -- tenths of meters -# maxvehmass INTEGER (0..65535), -- kg -# maxvehheight INTEGER (0..127), -- tenths of meters -# maxvehwidth INTEGER (0..127), -- tenths of meters -# maxvehlength INTEGER (0..1023), -- tenths of meters -# maxvehaxles INTEGER (2..15), -# minvehocc INTEGER (1..15), +# minspeed DOUBLE (0..1023), -- m/s +# maxspeed DOUBLE (0..1023), -- m/s +# minhdwy DOUBLE (0..2047), -- meters +# maxvehmass DOUBLE (0..65535), -- kg +# maxvehheight DOUBLE (0..127), -- meters +# maxvehwidth DOUBLE (0..127), -- meters +# maxvehlength DOUBLE (0..1023), -- meters +# maxvehaxles INTEGER (2..15), -- number of axles +# minvehocc INTEGER (1..15), -- vehicle passenger count +# maxplatoonsize INTEGER (1..63), -- vehicle count +# minplatoonhdwy DOUBLE (0..2047), -- meters # ... #} @@ -61,6 +63,8 @@ uint8 MAXVEHWIDTH_CHOICE=16 uint8 MAXVEHLENGTH_CHOICE=17 uint8 MAXVEHAXLES_CHOICE=18 uint8 MINVEHOCC_CHOICE=19 +uint8 MAXPLATOONSIZE_CHOICE=20 +uint8 MINPLATOONHDWY_CHOICE=21 # signal ::= OCTET STRING SIZE(0..63) uint8[] signal @@ -142,32 +146,35 @@ uint8 PARALLEL=1 uint8 ANGLED=2 -#minspeed ::= INTEGER (0..1023), -- tenths of m/s +#minspeed ::= INTEGER (0..1023), -- m/s float64 minspeed -#maxspeed ::= INTEGER (0..1023), -- tenths of m/s +#maxspeed ::= INTEGER (0..1023), -- m/s float64 maxspeed -#minhdwy ::= INTEGER (0..2047), -- tenths of meters +#minhdwy ::= INTEGER (0..2047), -- meters float64 minhdwy #maxvehmass ::= INTEGER (0..65535), -- kg float64 maxvehmass -#maxvehheight ::= INTEGER (0..127), -- tenths of meters +#maxvehheight ::= INTEGER (0..127), -- meters float64 maxvehheight -#maxvehwidth ::= INTEGER (0..127), -- tenths of meters +#maxvehwidth ::= INTEGER (0..127), -- meters float64 maxvehwidth -#maxvehlength ::= INTEGER (0..1023), -- tenths of meters +#maxvehlength ::= INTEGER (0..1023), -- meters float64 maxvehlength -#maxvehaxles ::= INTEGER (2..15) +#maxvehaxles ::= INTEGER (2..15), -- number of axles uint8 maxvehaxles -#minvehocc ::= INTEGER (1..15) +#minvehocc ::= INTEGER (1..15), -- vehicle passenger count uint8 minvehocc +#maxplatoonsize ::= INTEGER (1..63), -- vehicle count +uint8 maxplatoonsize - +#minplatoonhdwy ::= INTEGER (0..2047), -- meters +float64 minplatoonhdwy diff --git a/cav_msgs/msg/MobilityHeader.msg b/cav_msgs/msg/MobilityHeader.msg index 370cbd42..b60705db 100644 --- a/cav_msgs/msg/MobilityHeader.msg +++ b/cav_msgs/msg/MobilityHeader.msg @@ -24,4 +24,3 @@ string plan_id # A UNIX timestamp in milliseconds, which indicates the time elapsed since UNIX epoch # Example: "9223372036854775807" uint64 timestamp - diff --git a/cav_msgs/msg/MobilityOperation.msg b/cav_msgs/msg/MobilityOperation.msg index ec8563e2..453e130d 100644 --- a/cav_msgs/msg/MobilityOperation.msg +++ b/cav_msgs/msg/MobilityOperation.msg @@ -12,4 +12,3 @@ string strategy # strategy parameters specified by each individual plugin/component # the maximum length of this string is 100 string strategy_params - diff --git a/cav_msgs/msg/MobilityReason.msg b/cav_msgs/msg/MobilityReason.msg new file mode 100644 index 00000000..a7f3cccf --- /dev/null +++ b/cav_msgs/msg/MobilityReason.msg @@ -0,0 +1,18 @@ +# MobilityReason.msg +# +# + +# Variable which can be used to store a specific reason value. +uint8 reason + +# enumeration values for mobility reason: + +uint8 UNKNOWN=0 +uint8 ACCEPTED=1 +uint8 SAFETY_VIOLATION=2 +uint8 INSUFFICIENT_TIME=3 +uint8 PLAN_CONFLICT=4 +uint8 OTHERWISE_ENGAGED=5 +uint8 INSUFFICIENT_URGENCY=6 +uint8 PLAN_UNCLEAR=7 +uint8 OTHER=8 \ No newline at end of file diff --git a/cav_msgs/msg/MobilityRepeat.msg b/cav_msgs/msg/MobilityRepeat.msg new file mode 100644 index 00000000..3fbca201 --- /dev/null +++ b/cav_msgs/msg/MobilityRepeat.msg @@ -0,0 +1,12 @@ +# MobilityRepeat.msg +# +# + +# Variable which can be used to store a specific repeat value. +uint8 repeat + +# enumeration values for mobility repeat: + +uint8 UNKNOWN=0 +uint8 REQUEST_AGAIN=1 +uint8 NEVER_REQUEST_AGAIN=2 diff --git a/cav_msgs/msg/MobilityResponse.msg b/cav_msgs/msg/MobilityResponse.msg index d9fd3e33..ce09ad96 100644 --- a/cav_msgs/msg/MobilityResponse.msg +++ b/cav_msgs/msg/MobilityResponse.msg @@ -4,10 +4,19 @@ # recevied a MobilityRequest from that CAV and decide to involve in that plan # standard header for all mobility messages -cav_msgs/MobilityHeader m_header +cav_msgs/MobilityHeader m_header # urgency of the current plan from 0 to 1000 -uint16 urgency +uint16 urgency # the content of this response -bool is_accepted +bool is_accepted + +# type of the proposal being suggested to neighbors +cav_msgs/PlanType plan_type + +# +cav_msgs/MobilityReason reason # OPTIONAL + +# Whether or not to repeat the MobilityRequest +cav_msgs/MobilityRepeat repeat # OPTIONAL diff --git a/cav_msgs/msg/PlanType.msg b/cav_msgs/msg/PlanType.msg index dfbcc574..e2f114f0 100644 --- a/cav_msgs/msg/PlanType.msg +++ b/cav_msgs/msg/PlanType.msg @@ -12,6 +12,16 @@ uint8 CHANGE_LANE_LEFT = 1 uint8 CHANGE_LANE_RIGHT = 2 uint8 JOIN_PLATOON_AT_REAR = 3 uint8 PLATOON_FOLLOWER_JOIN = 4 +uint8 JOIN_PLATOON_FROM_FRONT = 5 +uint8 PLATOON_FRONT_JOIN = 6 +uint8 CUT_IN_FROM_SIDE = 7 +uint8 PLATOON_CUT_IN_JOIN = 8 +uint8 STOP_CREATE_GAP = 9 +uint8 CUT_IN_FRONT_DONE = 10 +uint8 CUT_IN_MID_OR_REAR_DONE = 11 +uint8 PLATOON_DEPARTURE = 12 +uint8 DELETE_MEMBER = 13 + # ideas for future additions: # uint8 SEARCHING_FOR_PLATOON = 5 @@ -21,3 +31,6 @@ uint8 PLATOON_FOLLOWER_JOIN = 4 # uint8 PASSING = 9 # pulling onto shoulder, need multi-lane change # join platoon in middle, merging platoons +# MobilityPlanType.msg +# +# diff --git a/cav_msgs/msg/PlatooningInfo.msg b/cav_msgs/msg/PlatooningInfo.msg index 8249365b..ae6aeb61 100644 --- a/cav_msgs/msg/PlatooningInfo.msg +++ b/cav_msgs/msg/PlatooningInfo.msg @@ -44,4 +44,19 @@ float32 host_cmd_speed float32 desired_gap # Actual gap with leader -float32 actual_gap \ No newline at end of file +float32 actual_gap + +# The time headway summation of all predecessors +float32 current_predecessor_time_headway_sum + +# The speed of the preceding vehicle, in m/s. +float32 predecessor_speed + +# The position of the preceding vehicle, in m. +float32 predecessor_position + +# The status of gap creation. +bool is_create_gap + +# Ratio to increase desired gap +float32 create_gap_adjuster diff --git a/cav_msgs/msg/RouteState.msg b/cav_msgs/msg/RouteState.msg index 7c9c7410..3c334853 100644 --- a/cav_msgs/msg/RouteState.msg +++ b/cav_msgs/msg/RouteState.msg @@ -13,7 +13,7 @@ Header header # The route id for which this message applies -string routeID +string route_id # Enum denoting the state of the route following uint8 state diff --git a/cav_msgs/msg/TrafficControlDetail.msg b/cav_msgs/msg/TrafficControlDetail.msg index 565189d2..5146656c 100644 --- a/cav_msgs/msg/TrafficControlDetail.msg +++ b/cav_msgs/msg/TrafficControlDetail.msg @@ -24,15 +24,17 @@ # lataffinity ENUMERATED {left, right}, # latperm SEQUENCE (SIZE(2)) OF ENUMERATED {none, permitted, passing-only, emergency-only}, # parking ENUMERATED {no, parallel, angled}, -# minspeed INTEGER (0..1023), -- tenths of m/s -# maxspeed INTEGER (0..1023), -- tenths of m/s -# minhdwy INTEGER (0..2047), -- tenths of meters -# maxvehmass INTEGER (0..65535), -- kg -# maxvehheight INTEGER (0..127), -- tenths of meters -# maxvehwidth INTEGER (0..127), -- tenths of meters -# maxvehlength INTEGER (0..1023), -- tenths of meters -# maxvehaxles INTEGER (2..15), -# minvehocc INTEGER (1..15), +# minspeed DOUBLE (0..1023), -- m/s +# maxspeed DOUBLE (0..1023), -- m/s +# minhdwy DOUBLE (0..2047), -- meters +# maxvehmass DOUBLE (0..65535), -- kg +# maxvehheight DOUBLE (0..127), -- meters +# maxvehwidth DOUBLE (0..127), -- meters +# maxvehlength DOUBLE (0..1023), -- meters +# maxvehaxles INTEGER (2..15), -- number of axles +# minvehocc INTEGER (1..15), -- vehicle passenger count +# maxplatoonsize INTEGER (1..63), -- vehicle count +# minplatoonhdwy DOUBLE (0..2047), -- meters # ... #} @@ -61,6 +63,8 @@ uint8 MAXVEHWIDTH_CHOICE=16 uint8 MAXVEHLENGTH_CHOICE=17 uint8 MAXVEHAXLES_CHOICE=18 uint8 MINVEHOCC_CHOICE=19 +uint8 MAXPLATOONSIZE_CHOICE=20 +uint8 MINPLATOONHDWY_CHOICE=21 # signal ::= OCTET STRING SIZE(0..63) uint8[] signal @@ -142,32 +146,35 @@ uint8 PARALLEL=1 uint8 ANGLED=2 -#minspeed ::= INTEGER (0..1023), -- tenths of m/s +#minspeed ::= INTEGER (0..1023), -- m/s float64 minspeed -#maxspeed ::= INTEGER (0..1023), -- tenths of m/s +#maxspeed ::= INTEGER (0..1023), -- m/s float64 maxspeed -#minhdwy ::= INTEGER (0..2047), -- tenths of meters +#minhdwy ::= INTEGER (0..2047), -- meters float64 minhdwy #maxvehmass ::= INTEGER (0..65535), -- kg float64 maxvehmass -#maxvehheight ::= INTEGER (0..127), -- tenths of meters +#maxvehheight ::= INTEGER (0..127), -- meters float64 maxvehheight -#maxvehwidth ::= INTEGER (0..127), -- tenths of meters +#maxvehwidth ::= INTEGER (0..127), -- meters float64 maxvehwidth -#maxvehlength ::= INTEGER (0..1023), -- tenths of meters +#maxvehlength ::= INTEGER (0..1023), -- meters float64 maxvehlength -#maxvehaxles ::= INTEGER (2..15) +#maxvehaxles ::= INTEGER (2..15), -- number of axles uint8 maxvehaxles -#minvehocc ::= INTEGER (1..15) +#minvehocc ::= INTEGER (1..15), -- vehicle passenger count uint8 minvehocc +#maxplatoonsize ::= INTEGER (1..63), -- vehicle count +uint8 maxplatoonsize - +#minplatoonhdwy ::= INTEGER (0..2047), -- meters +float64 minplatoonhdwy diff --git a/cav_srvs/srv/GetAvailableRoutes.srv b/cav_srvs/srv/GetAvailableRoutes.srv index a62b5a1b..f3c75243 100644 --- a/cav_srvs/srv/GetAvailableRoutes.srv +++ b/cav_srvs/srv/GetAvailableRoutes.srv @@ -14,5 +14,5 @@ # A list of available routes # For efficiency the routes provided in this list contain only an empty list segments -cav_msgs/Route[] availableRoutes +cav_msgs/Route[] available_routes diff --git a/cav_srvs/srv/SetActiveRoute.srv b/cav_srvs/srv/SetActiveRoute.srv index 41f8a665..548fb537 100644 --- a/cav_srvs/srv/SetActiveRoute.srv +++ b/cav_srvs/srv/SetActiveRoute.srv @@ -17,7 +17,7 @@ uint8 ROUTE_ID=0 uint8 DESTINATION_POINTS_ARRAY=1 # The id of the route to select -string routeID +string route_id # The array of destination points to be used for route generation cav_msgs/Position3D[] destination_points @@ -25,7 +25,7 @@ cav_msgs/Position3D[] destination_points --- # Response # An enumeration representing a service execution error as defined in the route design document. -uint8 errorStatus +uint8 error_status # enumeration values for errorStatus: uint8 NO_ERROR=0 diff --git a/docker/build-image.sh b/docker/build-image.sh index f281fc55..668acdf8 100755 --- a/docker/build-image.sh +++ b/docker/build-image.sh @@ -44,9 +44,59 @@ while [[ $# -gt 0 ]]; do COMPONENT_VERSION_STRING=develop shift ;; + --ros-1-packages|--ros1) + ROS1_PACKAGES="" + shift + ;; + --ros-2-packages|--ros2) + ROS2_PACKAGES="" + shift + ;; + *) + # Var test based on Stack Overflow question: https://stackoverflow.com/questions/5406858/difference-between-unset-and-empty-variables-in-bash + # Asker: green69 + # Answerer: geekosaur + if [ "${ROS2_PACKAGES+set}" = "set" ]; then + ROS2_PACKAGES="$ROS2_PACKAGES $arg" + elif [ "${ROS1_PACKAGES+set}" = "set" ]; then + ROS1_PACKAGES="$ROS1_PACKAGES $arg" + else + echo "Unknown argument $arg..." + exit -1 + fi + shift + ;; esac done +if [[ ! -z "$ROS1_PACKAGES$ROS2_PACKAGES" ]]; then + echo "Performing incremental build of image to rebuild packages: $ROS1_PACKAGES $ROS2_PACKAGES..." + + echo "Updating Dockerfile references to use most recent image as base image" + # Trim of docker image LS command sourced from + # https://stackoverflow.com/questions/50625619/why-doesnt-the-cut-command-work-for-a-docker-image-ls-command + # Question Asker: Chris F + # Question Answerer: Arount + MOST_RECENT_IMAGE_DATA=$(docker image ls | grep $IMAGE | tr -s ' ') + + if [[ -z "$MOST_RECENT_IMAGE_DATA" ]]; then + echo No prior image exists to use as base, an initial image must be built first before attempting incremental build. + exit -1 + fi + + MOST_RECENT_IMAGE_HASH=$(echo $MOST_RECENT_IMAGE_DATA | cut -d " " -f 3) + MOST_RECENT_IMAGE_ORG=$(echo $MOST_RECENT_IMAGE_DATA | cut -d " " -f 1 | cut -d "/" -f 1) + MOST_RECENT_IMAGE_TAG=$(echo $MOST_RECENT_IMAGE_DATA | cut -d " " -f 2) + MOST_RECENT_IMAGE_DATE=$(echo $MOST_RECENT_IMAGE_DATA | cut -d " " -f 4,5,6) + + echo Using $MOST_RECENT_IMAGE_TAG $MOST_RECENT_IMAGE_HASH $MOST_RECENT_IMAGE_DATE as base for partial build... + + sed -i "s|^FROM[[:space:]]*[^[:space:]]*|FROM $MOST_RECENT_IMAGE_HASH|I" ../Dockerfile + + COMPONENT_VERSION_STRING="SNAPSHOT" + USERNAME="local" +fi + if [[ -z "$COMPONENT_VERSION_STRING" ]]; then COMPONENT_VERSION_STRING=$("./get-component-version.sh") fi @@ -57,7 +107,14 @@ echo "Final image name: $USERNAME/$IMAGE:$COMPONENT_VERSION_STRING" cd .. if [[ $COMPONENT_VERSION_STRING = "develop" ]]; then sed "s|usdotfhwastoldev/|$USERNAME/|g; s|usdotfhwastolcandidate/|$USERNAME/|g; s|usdotfhwastol/|$USERNAME/|g; s|:[0-9]*\.[0-9]*\.[0-9]*|:$COMPONENT_VERSION_STRING|g; s|checkout.bash|checkout.bash -d|g" \ - Dockerfile | docker build -f - --no-cache -t $USERNAME/$IMAGE:$COMPONENT_VERSION_STRING \ + Dockerfile | docker build --network=host -f - --no-cache -t $USERNAME/$IMAGE:$COMPONENT_VERSION_STRING \ + --build-arg VERSION="$COMPONENT_VERSION_STRING" \ + --build-arg VCS_REF=`git rev-parse --short HEAD` \ + --build-arg BUILD_DATE=`date -u +”%Y-%m-%dT%H:%M:%SZ”` . +elif [[ $COMPONENT_VERSION_STRING = "SNAPSHOT" ]]; then + docker build --network=host --no-cache -t $USERNAME/$IMAGE:$COMPONENT_VERSION_STRING \ + --build-arg ROS1_PACKAGES="$ROS1_PACKAGES" \ + --build-arg ROS2_PACKAGES="$ROS2_PACKAGES" \ --build-arg VERSION="$COMPONENT_VERSION_STRING" \ --build-arg VCS_REF=`git rev-parse --short HEAD` \ --build-arg BUILD_DATE=`date -u +”%Y-%m-%dT%H:%M:%SZ”` . diff --git a/docker/checkout.bash b/docker/checkout.bash new file mode 100755 index 00000000..e37019ed --- /dev/null +++ b/docker/checkout.bash @@ -0,0 +1,53 @@ +#!/bin/bash + +# Copyright (C) 2018-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. + +# CARMA packages checkout script +# Optional argument to set the root checkout directory with no ending '/' default is '~' + +set -exo pipefail + +dir=~ +while [[ $# -gt 0 ]]; do + arg="$1" + case $arg in + -d|--develop) + BRANCH=develop + shift + ;; + -r|--root) + dir=$2 + shift + shift + ;; + esac +done + +cd ${dir}/src + + +# clone carma repos + +if [[ "$BRANCH" = "develop" ]]; then + cd /home/carma/ + git clone https://github.com/usdot-fhwa-stol/autoware.ai.git --depth 1 --branch carma-develop + cd ${dir}/src + git clone --depth 1 --branch develop https://github.com/usdot-fhwa-stol/ros1_bridge.git +else + cd /home/carma/ + git clone https://github.com/usdot-fhwa-stol/autoware.ai.git --depth 1 --branch carma-system-4.2.0 + cd ~/.base-image/workspace/src + git clone --depth 1 --branch carma-system-4.2.0 https://github.com/usdot-fhwa-stol/ros1_bridge.git +fi diff --git a/docker/install.sh b/docker/install.sh new file mode 100755 index 00000000..8fda6bf3 --- /dev/null +++ b/docker/install.sh @@ -0,0 +1,31 @@ +# ROS 1 msgs setup +/home/carma/.base-image/ros1_msgs_ws/src/carma_msgs/docker/checkout.bash +cp -R /home/carma/autoware.ai/messages /home/carma/.base-image/ros1_msgs_ws/src/autoware.ai/ +cp -R /home/carma/autoware.ai/jsk_common_msgs /home/carma/.base-image/ros1_msgs_ws/src/autoware.ai/ +cp -R /home/carma/autoware.ai/jsk_recognition /home/carma/.base-image/ros1_msgs_ws/src/autoware.ai/ + +# ROS 2 msgs setup +mkdir -p ~/.base-image/ros2_msgs_ws/src/autoware.ai +cp -R /home/carma/autoware.ai/messages /home/carma/.base-image/ros2_msgs_ws/src/autoware.ai/ +cp -R /home/carma/autoware.ai/jsk_common_msgs /home/carma/.base-image/ros2_msgs_ws/src/autoware.ai/ +cp -R /home/carma/autoware.ai/jsk_recognition /home/carma/.base-image/ros2_msgs_ws/src/autoware.ai/ + +# Cleanup autoware repo once messages have been moved +rm -r /home/carma/autoware.ai/ + +# ROS1 message setup +cd ~/.base-image/ros1_msgs_ws && source /opt/ros/noetic/setup.bash && colcon build --packages-up-to autoware_msgs cav_msgs cav_srvs j2735_msgs can_msgs carma_debug_msgs autoware_lanelet2_msgs + +# ROS2 message setup +cd ~/.base-image/ros2_msgs_ws && source /opt/ros/foxy/setup.bash && colcon build --packages-up-to autoware_msgs autoware_lanelet2_msgs can_msgs carma_debug_ros2_msgs carma_driver_msgs carma_localization_msgs carma_msgs carma_perception_msgs carma_planning_msgs carma_v2x_msgs j2735_v2x_msgs + +# Build the bridge +source /opt/ros/noetic/setup.bash +source /opt/ros/foxy/setup.bash +source ~/.base-image/ros1_msgs_ws/install/local_setup.bash +source ~/.base-image/ros2_msgs_ws/install/local_setup.bash +cd ~/.base-image/workspace/src +cd ../ +sudo apt-get update +colcon build --packages-select ros1_bridge --cmake-args "--debug-output" +sudo chmod -R ugo+x ~/.base-image/workspace/install diff --git a/j2735_msgs/msg/TrafficControlDetail.msg b/j2735_msgs/msg/TrafficControlDetail.msg index 714df0d4..b3ba00a3 100644 --- a/j2735_msgs/msg/TrafficControlDetail.msg +++ b/j2735_msgs/msg/TrafficControlDetail.msg @@ -31,8 +31,10 @@ # maxvehheight INTEGER (0..127), -- tenths of meters # maxvehwidth INTEGER (0..127), -- tenths of meters # maxvehlength INTEGER (0..1023), -- tenths of meters -# maxvehaxles INTEGER (2..15), -# minvehocc INTEGER (1..15), +# maxvehaxles INTEGER (2..15), -- number of axles +# minvehocc INTEGER (1..15), -- vehicle passenger count +# maxplatoonsize INTEGER (1..63), -- vehicle count +# minplatoonhdwy INTEGER (0..2047), -- tenths of meters # ... #} @@ -61,6 +63,8 @@ uint8 MAXVEHWIDTH_CHOICE =16 uint8 MAXVEHLENGTH_CHOICE =17 uint8 MAXVEHAXLES_CHOICE =18 uint8 MINVEHOCC_CHOICE =19 +uint8 MAXPLATOONSIZE_CHOICE =20 +uint8 MINPLATOONHDWY_CHOICE =21 # signal ::= OCTET STRING SIZE(0..63) uint8[] signal @@ -163,12 +167,14 @@ uint8 maxvehwidth #maxvehlength ::= INTEGER (0..1023), -- tenths of meters uint16 maxvehlength -#maxvehaxles ::= INTEGER (2..15) +#maxvehaxles ::= INTEGER (2..15), -- number of axles uint8 maxvehaxles -#minvehocc ::= INTEGER (1..15) +#minvehocc ::= INTEGER (1..15), -- vehicle passenger count uint8 minvehocc +#maxplatoonsize ::= INTEGER (1..63), -- vehicle count +uint8 maxplatoonsize - - +#minplatoonhdwy ::= INTEGER (0..2047), -- tenths of meters +uint16 minplatoonhdwy diff --git a/j2735_v2x_msgs/msg/TrafficControlDetail.msg b/j2735_v2x_msgs/msg/TrafficControlDetail.msg index 714df0d4..b3ba00a3 100644 --- a/j2735_v2x_msgs/msg/TrafficControlDetail.msg +++ b/j2735_v2x_msgs/msg/TrafficControlDetail.msg @@ -31,8 +31,10 @@ # maxvehheight INTEGER (0..127), -- tenths of meters # maxvehwidth INTEGER (0..127), -- tenths of meters # maxvehlength INTEGER (0..1023), -- tenths of meters -# maxvehaxles INTEGER (2..15), -# minvehocc INTEGER (1..15), +# maxvehaxles INTEGER (2..15), -- number of axles +# minvehocc INTEGER (1..15), -- vehicle passenger count +# maxplatoonsize INTEGER (1..63), -- vehicle count +# minplatoonhdwy INTEGER (0..2047), -- tenths of meters # ... #} @@ -61,6 +63,8 @@ uint8 MAXVEHWIDTH_CHOICE =16 uint8 MAXVEHLENGTH_CHOICE =17 uint8 MAXVEHAXLES_CHOICE =18 uint8 MINVEHOCC_CHOICE =19 +uint8 MAXPLATOONSIZE_CHOICE =20 +uint8 MINPLATOONHDWY_CHOICE =21 # signal ::= OCTET STRING SIZE(0..63) uint8[] signal @@ -163,12 +167,14 @@ uint8 maxvehwidth #maxvehlength ::= INTEGER (0..1023), -- tenths of meters uint16 maxvehlength -#maxvehaxles ::= INTEGER (2..15) +#maxvehaxles ::= INTEGER (2..15), -- number of axles uint8 maxvehaxles -#minvehocc ::= INTEGER (1..15) +#minvehocc ::= INTEGER (1..15), -- vehicle passenger count uint8 minvehocc +#maxplatoonsize ::= INTEGER (1..63), -- vehicle count +uint8 maxplatoonsize - - +#minplatoonhdwy ::= INTEGER (0..2047), -- tenths of meters +uint16 minplatoonhdwy