From 85a5ac41d61afba28534ead545aa95e703bf503f Mon Sep 17 00:00:00 2001 From: openhands Date: Mon, 17 Aug 2026 09:26:53 +0000 Subject: [PATCH 1/3] Refactor docker structure: split into gazebo/coppeliasim, add UR3e simulation compose - Separate docker/ into self-contained gazebo/ and coppeliasim/ subdirectories - Each subdirectory now includes its own sas_ur_control_template/Dockerfile and scripts/ - Remove shared docker/sas_ur_control_template/ and docker/scripts/ at root - Add docker/gazebo/compose_simulation.yml for UR3e-only Gazebo simulation - Add docker/gazebo/ur3e_simulation_example_py_launch.py launch file - Add .env files in docker/gazebo/ and docker/coppeliasim/ - Update all existing compose files to use local build paths - Updated teleop_demo/Dockerfile script path Co-authored-by: openhands --- docker/coppeliasim/.env | 12 +++++ .../sas_ur_control_template/Dockerfile | 0 docker/{ => coppeliasim}/scripts/countdown.sh | 0 .../scripts/fastrtps_profile.xml | 0 .../scripts/prepare_robot_demo.sh | 0 .../scripts/setup_environment.sh | 0 .../simulation_demo_v2/compose.yml | 4 +- .../simulation_demo_v2_kinematic/compose.yml | 4 +- docker/gazebo/.env | 10 ++++ docker/gazebo/compose_simulation.yml | 45 +++++++++++++++++ .../gazebo/sas_ur_control_template/Dockerfile | 10 ++++ docker/gazebo/scripts/countdown.sh | 16 +++++++ docker/gazebo/scripts/fastrtps_profile.xml | 19 ++++++++ docker/gazebo/scripts/prepare_robot_demo.sh | 9 ++++ docker/gazebo/scripts/setup_environment.sh | 13 +++++ .../ur3e_simulation_example_py_launch.py | 48 +++++++++++++++++++ docker/robot_demo/compose.yml | 6 ++- .../sas_ur_control_template/Dockerfile | 10 ++++ docker/robot_demo/scripts/countdown.sh | 16 +++++++ .../robot_demo/scripts/fastrtps_profile.xml | 19 ++++++++ .../robot_demo/scripts/prepare_robot_demo.sh | 9 ++++ .../robot_demo/scripts/setup_environment.sh | 13 +++++ docker/teleop_demo/Dockerfile | 4 +- docker/teleop_demo/compose.yml | 6 ++- .../sas_ur_control_template/Dockerfile | 10 ++++ docker/teleop_demo/scripts/countdown.sh | 16 +++++++ .../teleop_demo/scripts/fastrtps_profile.xml | 19 ++++++++ .../teleop_demo/scripts/prepare_robot_demo.sh | 9 ++++ .../teleop_demo/scripts/setup_environment.sh | 13 +++++ 29 files changed, 332 insertions(+), 8 deletions(-) create mode 100644 docker/coppeliasim/.env rename docker/{ => coppeliasim}/sas_ur_control_template/Dockerfile (100%) rename docker/{ => coppeliasim}/scripts/countdown.sh (100%) rename docker/{ => coppeliasim}/scripts/fastrtps_profile.xml (100%) rename docker/{ => coppeliasim}/scripts/prepare_robot_demo.sh (100%) rename docker/{ => coppeliasim}/scripts/setup_environment.sh (100%) create mode 100644 docker/gazebo/.env create mode 100644 docker/gazebo/compose_simulation.yml create mode 100644 docker/gazebo/sas_ur_control_template/Dockerfile create mode 100755 docker/gazebo/scripts/countdown.sh create mode 100644 docker/gazebo/scripts/fastrtps_profile.xml create mode 100644 docker/gazebo/scripts/prepare_robot_demo.sh create mode 100644 docker/gazebo/scripts/setup_environment.sh create mode 100644 docker/gazebo/ur3e_simulation_example_py_launch.py create mode 100644 docker/robot_demo/sas_ur_control_template/Dockerfile create mode 100755 docker/robot_demo/scripts/countdown.sh create mode 100644 docker/robot_demo/scripts/fastrtps_profile.xml create mode 100644 docker/robot_demo/scripts/prepare_robot_demo.sh create mode 100644 docker/robot_demo/scripts/setup_environment.sh create mode 100644 docker/teleop_demo/sas_ur_control_template/Dockerfile create mode 100755 docker/teleop_demo/scripts/countdown.sh create mode 100644 docker/teleop_demo/scripts/fastrtps_profile.xml create mode 100644 docker/teleop_demo/scripts/prepare_robot_demo.sh create mode 100644 docker/teleop_demo/scripts/setup_environment.sh diff --git a/docker/coppeliasim/.env b/docker/coppeliasim/.env new file mode 100644 index 0000000..87862b3 --- /dev/null +++ b/docker/coppeliasim/.env @@ -0,0 +1,12 @@ +# ROS 2 Domain ID (must match across all connected nodes) +ROS_DOMAIN_ID=0 + +# Display (for GUI rendering) +DISPLAY=:0 + +# CoppeliaSim scene configuration +COPPELIA_SIM_SCENE_FILE=UR3e_4100rev0_sas.ttt +COPPELIA_SIM_CONTAINER_SCENE_PATH=/root/sas_tutorial_workspace/src/sas_ur_control_template/scenes/ + +# Kinematics topic name (used by kinematic simulation demo) +XD_TOPIC_NAME=/sas_robot_driver_coppeliasim/object/xd \ No newline at end of file diff --git a/docker/sas_ur_control_template/Dockerfile b/docker/coppeliasim/sas_ur_control_template/Dockerfile similarity index 100% rename from docker/sas_ur_control_template/Dockerfile rename to docker/coppeliasim/sas_ur_control_template/Dockerfile diff --git a/docker/scripts/countdown.sh b/docker/coppeliasim/scripts/countdown.sh similarity index 100% rename from docker/scripts/countdown.sh rename to docker/coppeliasim/scripts/countdown.sh diff --git a/docker/scripts/fastrtps_profile.xml b/docker/coppeliasim/scripts/fastrtps_profile.xml similarity index 100% rename from docker/scripts/fastrtps_profile.xml rename to docker/coppeliasim/scripts/fastrtps_profile.xml diff --git a/docker/scripts/prepare_robot_demo.sh b/docker/coppeliasim/scripts/prepare_robot_demo.sh similarity index 100% rename from docker/scripts/prepare_robot_demo.sh rename to docker/coppeliasim/scripts/prepare_robot_demo.sh diff --git a/docker/scripts/setup_environment.sh b/docker/coppeliasim/scripts/setup_environment.sh similarity index 100% rename from docker/scripts/setup_environment.sh rename to docker/coppeliasim/scripts/setup_environment.sh diff --git a/docker/coppeliasim/simulation_demo_v2/compose.yml b/docker/coppeliasim/simulation_demo_v2/compose.yml index 93b645e..7668682 100644 --- a/docker/coppeliasim/simulation_demo_v2/compose.yml +++ b/docker/coppeliasim/simulation_demo_v2/compose.yml @@ -1,6 +1,8 @@ services: sas_ur_control_template: - build: https://github.com/MarinhoLab/sas_ur_control_template.git#main:docker/sas_ur_control_template + build: + context: ../../.. + dockerfile: docker/coppeliasim/sas_ur_control_template/Dockerfile stop_signal: SIGINT environment: - ROS_DOMAIN_ID diff --git a/docker/coppeliasim/simulation_demo_v2_kinematic/compose.yml b/docker/coppeliasim/simulation_demo_v2_kinematic/compose.yml index 33a3781..b6b4b30 100644 --- a/docker/coppeliasim/simulation_demo_v2_kinematic/compose.yml +++ b/docker/coppeliasim/simulation_demo_v2_kinematic/compose.yml @@ -1,6 +1,8 @@ services: sas_ur_control_template: - build: https://github.com/MarinhoLab/sas_ur_control_template.git#main:docker/sas_ur_control_template + build: + context: ../../.. + dockerfile: docker/coppeliasim/sas_ur_control_template/Dockerfile stop_signal: SIGINT environment: - ROS_DOMAIN_ID diff --git a/docker/gazebo/.env b/docker/gazebo/.env new file mode 100644 index 0000000..2993220 --- /dev/null +++ b/docker/gazebo/.env @@ -0,0 +1,10 @@ +# ROS 2 Domain ID (must match across all connected nodes) +ROS_DOMAIN_ID=0 + +# UR3e Gazebo simulation configuration +WORLD_NAME=ur3e_world +ROBOT_NAME=ur3e +ROBOT_TOPIC_NAME=ur3e_sim + +# Display (for GUI rendering) +DISPLAY=:0 \ No newline at end of file diff --git a/docker/gazebo/compose_simulation.yml b/docker/gazebo/compose_simulation.yml new file mode 100644 index 0000000..563aaa2 --- /dev/null +++ b/docker/gazebo/compose_simulation.yml @@ -0,0 +1,45 @@ +services: + sas_ur_control_template: + container_name: sas_ur_control_template_simulation + build: + context: ../../ + dockerfile: docker/gazebo/sas_ur_control_template/Dockerfile + stop_signal: SIGINT + environment: + - ROS_DOMAIN_ID + command: /bin/bash -c " + source /root/sas_tutorial_workspace/install/setup.bash + && cd /root/sas_tutorial_workspace/src/sas_ur_control_template + && python3 docker/gazebo/ur3e_simulation_example_py_launch.py \ + robot_topic_name:=ur3e_sim" + + gazebo: + container_name: sas_ur_control_template_gazebo + build: https://raw.githubusercontent.com/MarinhoLab/sas_robot_driver_gazebo/refs/heads/jazzy/docker/Dockerfile + stop_signal: SIGINT + environment: + - DISPLAY + - ROS_DOMAIN_ID + - WORLD_NAME=${WORLD_NAME} + - ROBOT_NAME=${ROBOT_NAME} + - ROBOT_TOPIC_NAME=${ROBOT_TOPIC_NAME} + privileged: true # Needed for some gpu configurations. + volumes: + - /tmp/.X11-unix:/tmp/.X11-unix # x server related + - ~/.Xauthority:/root/.Xauthority # x server related + command: /bin/bash -c " + export GZ_SIM_RESOURCE_PATH=$$GZ_SIM_RESOURCE_PATH:$$(ros2 pkg prefix sas_robot_driver_gazebo)/sdf/ + && cd $$(ros2 pkg prefix sas_robot_driver_gazebo --share)/sdf + && (gz sim "$$WORLD_NAME".sdf &) + && (ros2 launch sas_robot_driver_gazebo robot_driver_server_launch.py \ + joint_states_topic:="/world/$$WORLD_NAME/model/$$ROBOT_NAME/model/$${ROBOT_NAME}_position_controller/model/$$ROBOT_NAME/joint_state" \ + joint_names:='['shoulder_pan_joint','shoulder_lift_joint','elbow_joint','wrist_1_joint','wrist_2_joint','wrist_3_joint']' \ + robot_name:="$$ROBOT_TOPIC_NAME" + &) + && (ros2 launch sas_robot_driver_gazebo server_launch.py \ + autostart:=true \ + set_pose_service_name:=/world/"$$WORLD_NAME"/set_pose \ + get_pose_topic_name:=/world/"$$WORLD_NAME"/pose/info \ + entity_names:='['base', 'tool0']' \ + control_service_name:=/world/"$$WORLD_NAME"/control \ + )" \ No newline at end of file diff --git a/docker/gazebo/sas_ur_control_template/Dockerfile b/docker/gazebo/sas_ur_control_template/Dockerfile new file mode 100644 index 0000000..a3f66dd --- /dev/null +++ b/docker/gazebo/sas_ur_control_template/Dockerfile @@ -0,0 +1,10 @@ +FROM murilomarinho/sas:jazzy +LABEL authors="murilomarinho" +SHELL ["/bin/bash", "-c"] +ENV BASH_ENV="/etc/bash_env" + +RUN mkdir -p cd ~/sas_tutorial_workspace/src +RUN cd ~/sas_tutorial_workspace/src && git clone https://github.com/MarinhoLab/sas_ur_control_template.git +RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && chmod +x setup_environment.sh +RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && ./setup_environment.sh + diff --git a/docker/gazebo/scripts/countdown.sh b/docker/gazebo/scripts/countdown.sh new file mode 100755 index 0000000..eb2ac35 --- /dev/null +++ b/docker/gazebo/scripts/countdown.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +RED='\033[0;31m' +NC='\033[0m' # No Color + +seconds=$1 + +echo -e "${RED}CAUTION${NC}: The robot will ${RED}MOVE${NC}." +echo "You must have the emergency button at hand or you must STOP this program NOW." +while [ $seconds -gt 0 ]; do + echo -e "${RED}CAUTION${NC}: The robot will move in ${RED}$seconds${NC} seconds." + sleep 1 + : $((seconds--)) +done +echo -e "------------------------------------------------" +echo -e "${RED}CAUTION${NC}: Robot is ${RED}MOVING${NC}" diff --git a/docker/gazebo/scripts/fastrtps_profile.xml b/docker/gazebo/scripts/fastrtps_profile.xml new file mode 100644 index 0000000..a4f0105 --- /dev/null +++ b/docker/gazebo/scripts/fastrtps_profile.xml @@ -0,0 +1,19 @@ + + + + + CustomUdpTransport + UDPv4 + + + + + + + CustomUdpTransport + + + false + + + diff --git a/docker/gazebo/scripts/prepare_robot_demo.sh b/docker/gazebo/scripts/prepare_robot_demo.sh new file mode 100644 index 0000000..9cf6fb3 --- /dev/null +++ b/docker/gazebo/scripts/prepare_robot_demo.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -e + +# Set FASTRTPS profile to run over UDP when net=host. +export FASTRTPS_DEFAULT_PROFILES_FILE=/root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts/fastrtps_profile.xml + +# Show countdown +cd /root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts +./countdown.sh 10 diff --git a/docker/gazebo/scripts/setup_environment.sh b/docker/gazebo/scripts/setup_environment.sh new file mode 100644 index 0000000..ef251f2 --- /dev/null +++ b/docker/gazebo/scripts/setup_environment.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# Build template workspace +cd "$HOME"/sas_tutorial_workspace +source /opt/ros/jazzy/setup.bash +colcon build +rm -rf build +rm -rf log + +# Add sas_tutorial_workspace to bash_env +echo "source $HOME/sas_tutorial_workspace/install/setup.bash"\ +>> /etc/bash_env \ No newline at end of file diff --git a/docker/gazebo/ur3e_simulation_example_py_launch.py b/docker/gazebo/ur3e_simulation_example_py_launch.py new file mode 100644 index 0000000..f92a2c2 --- /dev/null +++ b/docker/gazebo/ur3e_simulation_example_py_launch.py @@ -0,0 +1,48 @@ +"""Launch the UR3e simulation control template for Gazebo. + +Run directly with: + python3 ur3e_simulation_example_py_launch.py [robot_topic_name:=ur3e_sim] + +Or via Docker Compose: + docker compose -f docker/gazebo/compose_simulation.yml up +""" +import sys + +from launch import LaunchDescription, LaunchService +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration +from launch_ros.actions import Node + + +def generate_launch_description(robot_topic_name='ur3e_sim'): + """Generate the launch description for UR3e Gazebo simulation.""" + # Parse command-line args like robot_topic_name:=foo + args = dict( + (k, v) + for arg in sys.argv[1:] + if ':=' in arg + for k, v in [arg.split(':=', 1)] + ) + topic = args.get('robot_topic_name', robot_topic_name) + + return LaunchDescription([ + DeclareLaunchArgument( + 'robot_topic_name', + default_value=topic, + description='Robot topic name for the UR3e Gazebo simulation driver.', + ), + Node( + package='sas_ur_control_template', + executable='joint_interface_example.py', + output='screen', + emulate_tty=True, + name='sas_ur_control_template_ur3e_simulation', + parameters=[{"robot_topic_name": topic}], + ), + ]) + + +if __name__ == '__main__': + ls = LaunchService() + ls.add_launch_description(generate_launch_description()) + ls.run() \ No newline at end of file diff --git a/docker/robot_demo/compose.yml b/docker/robot_demo/compose.yml index 6af2e80..972d1d3 100644 --- a/docker/robot_demo/compose.yml +++ b/docker/robot_demo/compose.yml @@ -1,7 +1,9 @@ services: sas_ur_control_template: container_name: sas_ur_control_template_robot_demo - build: https://github.com/MarinhoLab/sas_ur_control_template.git#main:docker/sas_ur_control_template + build: + context: ../.. + dockerfile: docker/robot_demo/sas_ur_control_template/Dockerfile stop_signal: SIGINT stop_grace_period: 1m network_mode: "host" # Reverse connection with UR robot @@ -13,7 +15,7 @@ services: rtprio: 99 # PREEMPT_RT rttime: -1 # PREEMPT_RT command: /bin/bash -c " - cd /root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts + cd /root/sas_tutorial_workspace/src/sas_ur_control_template/docker/robot_demo/scripts && chmod +x prepare_robot_demo.sh && . ./prepare_robot_demo.sh && ros2 launch sas_ur_control_template robot_example_py_launch.py" diff --git a/docker/robot_demo/sas_ur_control_template/Dockerfile b/docker/robot_demo/sas_ur_control_template/Dockerfile new file mode 100644 index 0000000..a3f66dd --- /dev/null +++ b/docker/robot_demo/sas_ur_control_template/Dockerfile @@ -0,0 +1,10 @@ +FROM murilomarinho/sas:jazzy +LABEL authors="murilomarinho" +SHELL ["/bin/bash", "-c"] +ENV BASH_ENV="/etc/bash_env" + +RUN mkdir -p cd ~/sas_tutorial_workspace/src +RUN cd ~/sas_tutorial_workspace/src && git clone https://github.com/MarinhoLab/sas_ur_control_template.git +RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && chmod +x setup_environment.sh +RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && ./setup_environment.sh + diff --git a/docker/robot_demo/scripts/countdown.sh b/docker/robot_demo/scripts/countdown.sh new file mode 100755 index 0000000..eb2ac35 --- /dev/null +++ b/docker/robot_demo/scripts/countdown.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +RED='\033[0;31m' +NC='\033[0m' # No Color + +seconds=$1 + +echo -e "${RED}CAUTION${NC}: The robot will ${RED}MOVE${NC}." +echo "You must have the emergency button at hand or you must STOP this program NOW." +while [ $seconds -gt 0 ]; do + echo -e "${RED}CAUTION${NC}: The robot will move in ${RED}$seconds${NC} seconds." + sleep 1 + : $((seconds--)) +done +echo -e "------------------------------------------------" +echo -e "${RED}CAUTION${NC}: Robot is ${RED}MOVING${NC}" diff --git a/docker/robot_demo/scripts/fastrtps_profile.xml b/docker/robot_demo/scripts/fastrtps_profile.xml new file mode 100644 index 0000000..a4f0105 --- /dev/null +++ b/docker/robot_demo/scripts/fastrtps_profile.xml @@ -0,0 +1,19 @@ + + + + + CustomUdpTransport + UDPv4 + + + + + + + CustomUdpTransport + + + false + + + diff --git a/docker/robot_demo/scripts/prepare_robot_demo.sh b/docker/robot_demo/scripts/prepare_robot_demo.sh new file mode 100644 index 0000000..9cf6fb3 --- /dev/null +++ b/docker/robot_demo/scripts/prepare_robot_demo.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -e + +# Set FASTRTPS profile to run over UDP when net=host. +export FASTRTPS_DEFAULT_PROFILES_FILE=/root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts/fastrtps_profile.xml + +# Show countdown +cd /root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts +./countdown.sh 10 diff --git a/docker/robot_demo/scripts/setup_environment.sh b/docker/robot_demo/scripts/setup_environment.sh new file mode 100644 index 0000000..ef251f2 --- /dev/null +++ b/docker/robot_demo/scripts/setup_environment.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# Build template workspace +cd "$HOME"/sas_tutorial_workspace +source /opt/ros/jazzy/setup.bash +colcon build +rm -rf build +rm -rf log + +# Add sas_tutorial_workspace to bash_env +echo "source $HOME/sas_tutorial_workspace/install/setup.bash"\ +>> /etc/bash_env \ No newline at end of file diff --git a/docker/teleop_demo/Dockerfile b/docker/teleop_demo/Dockerfile index 2b0b6e5..0deb013 100644 --- a/docker/teleop_demo/Dockerfile +++ b/docker/teleop_demo/Dockerfile @@ -5,7 +5,7 @@ ENV BASH_ENV="/etc/bash_env" RUN mkdir -p cd ~/sas_tutorial_workspace/src RUN cd ~/sas_tutorial_workspace/src && git clone https://github.com/MarinhoLab/sas_ur_control_template.git -RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/.devel/scripts && chmod +x setup_environment.sh -RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/.devel/scripts && ./setup_environment.sh +RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/teleop_demo/scripts && chmod +x setup_environment.sh +RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/teleop_demo/scripts && ./setup_environment.sh RUN sudo apt-get update && sudo apt-get install qtcreator gdb -y diff --git a/docker/teleop_demo/compose.yml b/docker/teleop_demo/compose.yml index c3f3809..eb9386b 100644 --- a/docker/teleop_demo/compose.yml +++ b/docker/teleop_demo/compose.yml @@ -1,6 +1,8 @@ services: sas_ur_control_template: - build: . + build: + context: ../.. + dockerfile: docker/teleop_demo/sas_ur_control_template/Dockerfile stop_signal: SIGINT stop_grace_period: 1m volumes: @@ -13,7 +15,7 @@ services: privileged: true environment: - ROS_DOMAIN_ID - - FASTRTPS_DEFAULT_PROFILES_FILE=/root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts/fastrtps_profile.xml + - FASTRTPS_DEFAULT_PROFILES_FILE=/root/sas_tutorial_workspace/src/sas_ur_control_template/docker/teleop_demo/scripts/fastrtps_profile.xml - DISPLAY cap_add: - SYS_NICE # PREEMPT_RT diff --git a/docker/teleop_demo/sas_ur_control_template/Dockerfile b/docker/teleop_demo/sas_ur_control_template/Dockerfile new file mode 100644 index 0000000..a3f66dd --- /dev/null +++ b/docker/teleop_demo/sas_ur_control_template/Dockerfile @@ -0,0 +1,10 @@ +FROM murilomarinho/sas:jazzy +LABEL authors="murilomarinho" +SHELL ["/bin/bash", "-c"] +ENV BASH_ENV="/etc/bash_env" + +RUN mkdir -p cd ~/sas_tutorial_workspace/src +RUN cd ~/sas_tutorial_workspace/src && git clone https://github.com/MarinhoLab/sas_ur_control_template.git +RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && chmod +x setup_environment.sh +RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && ./setup_environment.sh + diff --git a/docker/teleop_demo/scripts/countdown.sh b/docker/teleop_demo/scripts/countdown.sh new file mode 100755 index 0000000..eb2ac35 --- /dev/null +++ b/docker/teleop_demo/scripts/countdown.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +RED='\033[0;31m' +NC='\033[0m' # No Color + +seconds=$1 + +echo -e "${RED}CAUTION${NC}: The robot will ${RED}MOVE${NC}." +echo "You must have the emergency button at hand or you must STOP this program NOW." +while [ $seconds -gt 0 ]; do + echo -e "${RED}CAUTION${NC}: The robot will move in ${RED}$seconds${NC} seconds." + sleep 1 + : $((seconds--)) +done +echo -e "------------------------------------------------" +echo -e "${RED}CAUTION${NC}: Robot is ${RED}MOVING${NC}" diff --git a/docker/teleop_demo/scripts/fastrtps_profile.xml b/docker/teleop_demo/scripts/fastrtps_profile.xml new file mode 100644 index 0000000..a4f0105 --- /dev/null +++ b/docker/teleop_demo/scripts/fastrtps_profile.xml @@ -0,0 +1,19 @@ + + + + + CustomUdpTransport + UDPv4 + + + + + + + CustomUdpTransport + + + false + + + diff --git a/docker/teleop_demo/scripts/prepare_robot_demo.sh b/docker/teleop_demo/scripts/prepare_robot_demo.sh new file mode 100644 index 0000000..9cf6fb3 --- /dev/null +++ b/docker/teleop_demo/scripts/prepare_robot_demo.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -e + +# Set FASTRTPS profile to run over UDP when net=host. +export FASTRTPS_DEFAULT_PROFILES_FILE=/root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts/fastrtps_profile.xml + +# Show countdown +cd /root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts +./countdown.sh 10 diff --git a/docker/teleop_demo/scripts/setup_environment.sh b/docker/teleop_demo/scripts/setup_environment.sh new file mode 100644 index 0000000..ef251f2 --- /dev/null +++ b/docker/teleop_demo/scripts/setup_environment.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# Build template workspace +cd "$HOME"/sas_tutorial_workspace +source /opt/ros/jazzy/setup.bash +colcon build +rm -rf build +rm -rf log + +# Add sas_tutorial_workspace to bash_env +echo "source $HOME/sas_tutorial_workspace/install/setup.bash"\ +>> /etc/bash_env \ No newline at end of file From b99a0546ad41851d444e4cda97ffce68cba4e4e4 Mon Sep 17 00:00:00 2001 From: openhands Date: Mon, 17 Aug 2026 10:02:55 +0000 Subject: [PATCH 2/3] Consolidate duplicated sas_ur_control_template/ and scripts/ folders - Remove duplicate copies from gazebo/, coppeliasim/, robot_demo/, teleop_demo/ - Keep single shared copies at docker/sas_ur_control_template/ and docker/scripts/ - Update all compose files to reference docker/sas_ur_control_template/Dockerfile - Update robot_demo/compose.yml script path to docker/scripts/ - Update teleop_demo/compose.yml fastrtps_profile path to docker/scripts/ - Update teleop_demo/Dockerfile setup_environment.sh path to docker/scripts/ - Update compose_simulation.yml to use shared Dockerfile Co-authored-by: openhands --- .../simulation_demo_v2/compose.yml | 2 +- .../simulation_demo_v2_kinematic/compose.yml | 2 +- docker/gazebo/compose_simulation.yml | 4 ++-- .../gazebo/sas_ur_control_template/Dockerfile | 10 ---------- docker/gazebo/scripts/countdown.sh | 16 ---------------- docker/gazebo/scripts/fastrtps_profile.xml | 19 ------------------- docker/gazebo/scripts/prepare_robot_demo.sh | 9 --------- docker/gazebo/scripts/setup_environment.sh | 13 ------------- docker/robot_demo/compose.yml | 4 ++-- .../sas_ur_control_template/Dockerfile | 10 ---------- docker/robot_demo/scripts/countdown.sh | 16 ---------------- .../robot_demo/scripts/fastrtps_profile.xml | 19 ------------------- .../robot_demo/scripts/prepare_robot_demo.sh | 9 --------- .../robot_demo/scripts/setup_environment.sh | 13 ------------- .../sas_ur_control_template/Dockerfile | 0 docker/{coppeliasim => }/scripts/countdown.sh | 0 .../scripts/fastrtps_profile.xml | 0 .../scripts/prepare_robot_demo.sh | 0 .../scripts/setup_environment.sh | 0 docker/teleop_demo/Dockerfile | 4 ++-- docker/teleop_demo/compose.yml | 4 ++-- .../sas_ur_control_template/Dockerfile | 10 ---------- docker/teleop_demo/scripts/countdown.sh | 16 ---------------- .../teleop_demo/scripts/fastrtps_profile.xml | 19 ------------------- .../teleop_demo/scripts/prepare_robot_demo.sh | 9 --------- .../teleop_demo/scripts/setup_environment.sh | 13 ------------- 26 files changed, 10 insertions(+), 211 deletions(-) delete mode 100644 docker/gazebo/sas_ur_control_template/Dockerfile delete mode 100755 docker/gazebo/scripts/countdown.sh delete mode 100644 docker/gazebo/scripts/fastrtps_profile.xml delete mode 100644 docker/gazebo/scripts/prepare_robot_demo.sh delete mode 100644 docker/gazebo/scripts/setup_environment.sh delete mode 100644 docker/robot_demo/sas_ur_control_template/Dockerfile delete mode 100755 docker/robot_demo/scripts/countdown.sh delete mode 100644 docker/robot_demo/scripts/fastrtps_profile.xml delete mode 100644 docker/robot_demo/scripts/prepare_robot_demo.sh delete mode 100644 docker/robot_demo/scripts/setup_environment.sh rename docker/{coppeliasim => }/sas_ur_control_template/Dockerfile (100%) rename docker/{coppeliasim => }/scripts/countdown.sh (100%) rename docker/{coppeliasim => }/scripts/fastrtps_profile.xml (100%) rename docker/{coppeliasim => }/scripts/prepare_robot_demo.sh (100%) rename docker/{coppeliasim => }/scripts/setup_environment.sh (100%) delete mode 100644 docker/teleop_demo/sas_ur_control_template/Dockerfile delete mode 100755 docker/teleop_demo/scripts/countdown.sh delete mode 100644 docker/teleop_demo/scripts/fastrtps_profile.xml delete mode 100644 docker/teleop_demo/scripts/prepare_robot_demo.sh delete mode 100644 docker/teleop_demo/scripts/setup_environment.sh diff --git a/docker/coppeliasim/simulation_demo_v2/compose.yml b/docker/coppeliasim/simulation_demo_v2/compose.yml index 7668682..068b387 100644 --- a/docker/coppeliasim/simulation_demo_v2/compose.yml +++ b/docker/coppeliasim/simulation_demo_v2/compose.yml @@ -2,7 +2,7 @@ services: sas_ur_control_template: build: context: ../../.. - dockerfile: docker/coppeliasim/sas_ur_control_template/Dockerfile + dockerfile: docker/sas_ur_control_template/Dockerfile stop_signal: SIGINT environment: - ROS_DOMAIN_ID diff --git a/docker/coppeliasim/simulation_demo_v2_kinematic/compose.yml b/docker/coppeliasim/simulation_demo_v2_kinematic/compose.yml index b6b4b30..3b935e9 100644 --- a/docker/coppeliasim/simulation_demo_v2_kinematic/compose.yml +++ b/docker/coppeliasim/simulation_demo_v2_kinematic/compose.yml @@ -2,7 +2,7 @@ services: sas_ur_control_template: build: context: ../../.. - dockerfile: docker/coppeliasim/sas_ur_control_template/Dockerfile + dockerfile: docker/sas_ur_control_template/Dockerfile stop_signal: SIGINT environment: - ROS_DOMAIN_ID diff --git a/docker/gazebo/compose_simulation.yml b/docker/gazebo/compose_simulation.yml index 563aaa2..30c11bb 100644 --- a/docker/gazebo/compose_simulation.yml +++ b/docker/gazebo/compose_simulation.yml @@ -2,8 +2,8 @@ services: sas_ur_control_template: container_name: sas_ur_control_template_simulation build: - context: ../../ - dockerfile: docker/gazebo/sas_ur_control_template/Dockerfile + context: ../.. + dockerfile: docker/sas_ur_control_template/Dockerfile stop_signal: SIGINT environment: - ROS_DOMAIN_ID diff --git a/docker/gazebo/sas_ur_control_template/Dockerfile b/docker/gazebo/sas_ur_control_template/Dockerfile deleted file mode 100644 index a3f66dd..0000000 --- a/docker/gazebo/sas_ur_control_template/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM murilomarinho/sas:jazzy -LABEL authors="murilomarinho" -SHELL ["/bin/bash", "-c"] -ENV BASH_ENV="/etc/bash_env" - -RUN mkdir -p cd ~/sas_tutorial_workspace/src -RUN cd ~/sas_tutorial_workspace/src && git clone https://github.com/MarinhoLab/sas_ur_control_template.git -RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && chmod +x setup_environment.sh -RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && ./setup_environment.sh - diff --git a/docker/gazebo/scripts/countdown.sh b/docker/gazebo/scripts/countdown.sh deleted file mode 100755 index eb2ac35..0000000 --- a/docker/gazebo/scripts/countdown.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -RED='\033[0;31m' -NC='\033[0m' # No Color - -seconds=$1 - -echo -e "${RED}CAUTION${NC}: The robot will ${RED}MOVE${NC}." -echo "You must have the emergency button at hand or you must STOP this program NOW." -while [ $seconds -gt 0 ]; do - echo -e "${RED}CAUTION${NC}: The robot will move in ${RED}$seconds${NC} seconds." - sleep 1 - : $((seconds--)) -done -echo -e "------------------------------------------------" -echo -e "${RED}CAUTION${NC}: Robot is ${RED}MOVING${NC}" diff --git a/docker/gazebo/scripts/fastrtps_profile.xml b/docker/gazebo/scripts/fastrtps_profile.xml deleted file mode 100644 index a4f0105..0000000 --- a/docker/gazebo/scripts/fastrtps_profile.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - CustomUdpTransport - UDPv4 - - - - - - - CustomUdpTransport - - - false - - - diff --git a/docker/gazebo/scripts/prepare_robot_demo.sh b/docker/gazebo/scripts/prepare_robot_demo.sh deleted file mode 100644 index 9cf6fb3..0000000 --- a/docker/gazebo/scripts/prepare_robot_demo.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -e - -# Set FASTRTPS profile to run over UDP when net=host. -export FASTRTPS_DEFAULT_PROFILES_FILE=/root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts/fastrtps_profile.xml - -# Show countdown -cd /root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts -./countdown.sh 10 diff --git a/docker/gazebo/scripts/setup_environment.sh b/docker/gazebo/scripts/setup_environment.sh deleted file mode 100644 index ef251f2..0000000 --- a/docker/gazebo/scripts/setup_environment.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -set -e - -# Build template workspace -cd "$HOME"/sas_tutorial_workspace -source /opt/ros/jazzy/setup.bash -colcon build -rm -rf build -rm -rf log - -# Add sas_tutorial_workspace to bash_env -echo "source $HOME/sas_tutorial_workspace/install/setup.bash"\ ->> /etc/bash_env \ No newline at end of file diff --git a/docker/robot_demo/compose.yml b/docker/robot_demo/compose.yml index 972d1d3..df4162d 100644 --- a/docker/robot_demo/compose.yml +++ b/docker/robot_demo/compose.yml @@ -3,7 +3,7 @@ services: container_name: sas_ur_control_template_robot_demo build: context: ../.. - dockerfile: docker/robot_demo/sas_ur_control_template/Dockerfile + dockerfile: docker/sas_ur_control_template/Dockerfile stop_signal: SIGINT stop_grace_period: 1m network_mode: "host" # Reverse connection with UR robot @@ -15,7 +15,7 @@ services: rtprio: 99 # PREEMPT_RT rttime: -1 # PREEMPT_RT command: /bin/bash -c " - cd /root/sas_tutorial_workspace/src/sas_ur_control_template/docker/robot_demo/scripts + cd /root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && chmod +x prepare_robot_demo.sh && . ./prepare_robot_demo.sh && ros2 launch sas_ur_control_template robot_example_py_launch.py" diff --git a/docker/robot_demo/sas_ur_control_template/Dockerfile b/docker/robot_demo/sas_ur_control_template/Dockerfile deleted file mode 100644 index a3f66dd..0000000 --- a/docker/robot_demo/sas_ur_control_template/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM murilomarinho/sas:jazzy -LABEL authors="murilomarinho" -SHELL ["/bin/bash", "-c"] -ENV BASH_ENV="/etc/bash_env" - -RUN mkdir -p cd ~/sas_tutorial_workspace/src -RUN cd ~/sas_tutorial_workspace/src && git clone https://github.com/MarinhoLab/sas_ur_control_template.git -RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && chmod +x setup_environment.sh -RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && ./setup_environment.sh - diff --git a/docker/robot_demo/scripts/countdown.sh b/docker/robot_demo/scripts/countdown.sh deleted file mode 100755 index eb2ac35..0000000 --- a/docker/robot_demo/scripts/countdown.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -RED='\033[0;31m' -NC='\033[0m' # No Color - -seconds=$1 - -echo -e "${RED}CAUTION${NC}: The robot will ${RED}MOVE${NC}." -echo "You must have the emergency button at hand or you must STOP this program NOW." -while [ $seconds -gt 0 ]; do - echo -e "${RED}CAUTION${NC}: The robot will move in ${RED}$seconds${NC} seconds." - sleep 1 - : $((seconds--)) -done -echo -e "------------------------------------------------" -echo -e "${RED}CAUTION${NC}: Robot is ${RED}MOVING${NC}" diff --git a/docker/robot_demo/scripts/fastrtps_profile.xml b/docker/robot_demo/scripts/fastrtps_profile.xml deleted file mode 100644 index a4f0105..0000000 --- a/docker/robot_demo/scripts/fastrtps_profile.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - CustomUdpTransport - UDPv4 - - - - - - - CustomUdpTransport - - - false - - - diff --git a/docker/robot_demo/scripts/prepare_robot_demo.sh b/docker/robot_demo/scripts/prepare_robot_demo.sh deleted file mode 100644 index 9cf6fb3..0000000 --- a/docker/robot_demo/scripts/prepare_robot_demo.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -e - -# Set FASTRTPS profile to run over UDP when net=host. -export FASTRTPS_DEFAULT_PROFILES_FILE=/root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts/fastrtps_profile.xml - -# Show countdown -cd /root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts -./countdown.sh 10 diff --git a/docker/robot_demo/scripts/setup_environment.sh b/docker/robot_demo/scripts/setup_environment.sh deleted file mode 100644 index ef251f2..0000000 --- a/docker/robot_demo/scripts/setup_environment.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -set -e - -# Build template workspace -cd "$HOME"/sas_tutorial_workspace -source /opt/ros/jazzy/setup.bash -colcon build -rm -rf build -rm -rf log - -# Add sas_tutorial_workspace to bash_env -echo "source $HOME/sas_tutorial_workspace/install/setup.bash"\ ->> /etc/bash_env \ No newline at end of file diff --git a/docker/coppeliasim/sas_ur_control_template/Dockerfile b/docker/sas_ur_control_template/Dockerfile similarity index 100% rename from docker/coppeliasim/sas_ur_control_template/Dockerfile rename to docker/sas_ur_control_template/Dockerfile diff --git a/docker/coppeliasim/scripts/countdown.sh b/docker/scripts/countdown.sh similarity index 100% rename from docker/coppeliasim/scripts/countdown.sh rename to docker/scripts/countdown.sh diff --git a/docker/coppeliasim/scripts/fastrtps_profile.xml b/docker/scripts/fastrtps_profile.xml similarity index 100% rename from docker/coppeliasim/scripts/fastrtps_profile.xml rename to docker/scripts/fastrtps_profile.xml diff --git a/docker/coppeliasim/scripts/prepare_robot_demo.sh b/docker/scripts/prepare_robot_demo.sh similarity index 100% rename from docker/coppeliasim/scripts/prepare_robot_demo.sh rename to docker/scripts/prepare_robot_demo.sh diff --git a/docker/coppeliasim/scripts/setup_environment.sh b/docker/scripts/setup_environment.sh similarity index 100% rename from docker/coppeliasim/scripts/setup_environment.sh rename to docker/scripts/setup_environment.sh diff --git a/docker/teleop_demo/Dockerfile b/docker/teleop_demo/Dockerfile index 0deb013..5f9af76 100644 --- a/docker/teleop_demo/Dockerfile +++ b/docker/teleop_demo/Dockerfile @@ -5,7 +5,7 @@ ENV BASH_ENV="/etc/bash_env" RUN mkdir -p cd ~/sas_tutorial_workspace/src RUN cd ~/sas_tutorial_workspace/src && git clone https://github.com/MarinhoLab/sas_ur_control_template.git -RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/teleop_demo/scripts && chmod +x setup_environment.sh -RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/teleop_demo/scripts && ./setup_environment.sh +RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && chmod +x setup_environment.sh +RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && ./setup_environment.sh RUN sudo apt-get update && sudo apt-get install qtcreator gdb -y diff --git a/docker/teleop_demo/compose.yml b/docker/teleop_demo/compose.yml index eb9386b..24f84f8 100644 --- a/docker/teleop_demo/compose.yml +++ b/docker/teleop_demo/compose.yml @@ -2,7 +2,7 @@ services: sas_ur_control_template: build: context: ../.. - dockerfile: docker/teleop_demo/sas_ur_control_template/Dockerfile + dockerfile: docker/sas_ur_control_template/Dockerfile stop_signal: SIGINT stop_grace_period: 1m volumes: @@ -15,7 +15,7 @@ services: privileged: true environment: - ROS_DOMAIN_ID - - FASTRTPS_DEFAULT_PROFILES_FILE=/root/sas_tutorial_workspace/src/sas_ur_control_template/docker/teleop_demo/scripts/fastrtps_profile.xml + - FASTRTPS_DEFAULT_PROFILES_FILE=/root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts/fastrtps_profile.xml - DISPLAY cap_add: - SYS_NICE # PREEMPT_RT diff --git a/docker/teleop_demo/sas_ur_control_template/Dockerfile b/docker/teleop_demo/sas_ur_control_template/Dockerfile deleted file mode 100644 index a3f66dd..0000000 --- a/docker/teleop_demo/sas_ur_control_template/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM murilomarinho/sas:jazzy -LABEL authors="murilomarinho" -SHELL ["/bin/bash", "-c"] -ENV BASH_ENV="/etc/bash_env" - -RUN mkdir -p cd ~/sas_tutorial_workspace/src -RUN cd ~/sas_tutorial_workspace/src && git clone https://github.com/MarinhoLab/sas_ur_control_template.git -RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && chmod +x setup_environment.sh -RUN cd ~/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts && ./setup_environment.sh - diff --git a/docker/teleop_demo/scripts/countdown.sh b/docker/teleop_demo/scripts/countdown.sh deleted file mode 100755 index eb2ac35..0000000 --- a/docker/teleop_demo/scripts/countdown.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -RED='\033[0;31m' -NC='\033[0m' # No Color - -seconds=$1 - -echo -e "${RED}CAUTION${NC}: The robot will ${RED}MOVE${NC}." -echo "You must have the emergency button at hand or you must STOP this program NOW." -while [ $seconds -gt 0 ]; do - echo -e "${RED}CAUTION${NC}: The robot will move in ${RED}$seconds${NC} seconds." - sleep 1 - : $((seconds--)) -done -echo -e "------------------------------------------------" -echo -e "${RED}CAUTION${NC}: Robot is ${RED}MOVING${NC}" diff --git a/docker/teleop_demo/scripts/fastrtps_profile.xml b/docker/teleop_demo/scripts/fastrtps_profile.xml deleted file mode 100644 index a4f0105..0000000 --- a/docker/teleop_demo/scripts/fastrtps_profile.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - CustomUdpTransport - UDPv4 - - - - - - - CustomUdpTransport - - - false - - - diff --git a/docker/teleop_demo/scripts/prepare_robot_demo.sh b/docker/teleop_demo/scripts/prepare_robot_demo.sh deleted file mode 100644 index 9cf6fb3..0000000 --- a/docker/teleop_demo/scripts/prepare_robot_demo.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -e - -# Set FASTRTPS profile to run over UDP when net=host. -export FASTRTPS_DEFAULT_PROFILES_FILE=/root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts/fastrtps_profile.xml - -# Show countdown -cd /root/sas_tutorial_workspace/src/sas_ur_control_template/docker/scripts -./countdown.sh 10 diff --git a/docker/teleop_demo/scripts/setup_environment.sh b/docker/teleop_demo/scripts/setup_environment.sh deleted file mode 100644 index ef251f2..0000000 --- a/docker/teleop_demo/scripts/setup_environment.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -set -e - -# Build template workspace -cd "$HOME"/sas_tutorial_workspace -source /opt/ros/jazzy/setup.bash -colcon build -rm -rf build -rm -rf log - -# Add sas_tutorial_workspace to bash_env -echo "source $HOME/sas_tutorial_workspace/install/setup.bash"\ ->> /etc/bash_env \ No newline at end of file From 313bd2bc78581f6dc61f33238c05d1b17bcef77b Mon Sep 17 00:00:00 2001 From: openhands Date: Mon, 17 Aug 2026 10:53:08 +0000 Subject: [PATCH 3/3] Add CI test compose.yml and Dockerfile for automated testing Adds docker/compose.yml, docker/Dockerfile, and docker/test_ci.sh to validate the package in CI: - Builds the package with colcon - Verifies sas_ur_control_template is discoverable - Confirms Python and C++ executables are installed and executable - Validates Python syntax of all launch files Designed for GitHub Actions execution. --- docker/Dockerfile | 10 ++++++++++ docker/compose.yml | 6 ++++++ docker/test_ci.sh | 27 +++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 docker/Dockerfile create mode 100644 docker/compose.yml create mode 100644 docker/test_ci.sh diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..b745632 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,10 @@ +FROM murilomarinho/sas:jazzy +LABEL authors="murilomarinho" +SHELL ["/bin/bash", "-c"] +ENV BASH_ENV="/etc/bash_env" + +RUN sudo apt-get update && sudo apt-get upgrade -y +RUN python3 -m pip install --upgrade dqrobotics --break-system-packages +RUN mkdir -p /root/sas_ur_control_template_ci/src +COPY . /root/sas_ur_control_template_ci/src/sas_ur_control_template +RUN chmod +x /root/sas_ur_control_template_ci/src/sas_ur_control_template/scripts/joint_interface_example.py \ No newline at end of file diff --git a/docker/compose.yml b/docker/compose.yml new file mode 100644 index 0000000..843c2d7 --- /dev/null +++ b/docker/compose.yml @@ -0,0 +1,6 @@ +services: + sas_ur_control_template: + build: + context: .. + dockerfile: docker/Dockerfile + entrypoint: ["/bin/bash", "/root/sas_ur_control_template_ci/src/sas_ur_control_template/docker/test_ci.sh"] \ No newline at end of file diff --git a/docker/test_ci.sh b/docker/test_ci.sh new file mode 100644 index 0000000..3a262ea --- /dev/null +++ b/docker/test_ci.sh @@ -0,0 +1,27 @@ +#!/bin/bash +set -e + +cd /root/sas_ur_control_template_ci +source /opt/ros/jazzy/setup.bash + +echo "=== Building package ===" +colcon build +echo "=== Build complete ===" + +source install/setup.bash + +echo "=== Package available ===" +ros2 pkg list | grep sas_ur_control_template + +echo "=== Checking executables ===" +PKG_LIB=$(ros2 pkg prefix sas_ur_control_template)/lib/sas_ur_control_template +test -x "$PKG_LIB/joint_interface_example.py" && echo "Python node OK" +test -x "$PKG_LIB/joint_interface_example_cpp" && echo "C++ node OK" + +echo "=== Launch file syntax ===" +for launch in $(ros2 pkg prefix sas_ur_control_template --share)/launch/*.py; do + echo "Checking: $launch" + python3 -c "import ast; ast.parse(open('$launch').read())" && echo "OK" +done + +echo "=== All tests passed ===" \ No newline at end of file