From 9a37ae529dbf4cedc75a9616a1d34b92e3e3ba8f Mon Sep 17 00:00:00 2001 From: Gerardo Puga Date: Sun, 26 Jul 2026 18:02:34 -0300 Subject: [PATCH 1/6] Add a devel docker and minimal infrastructure --- .gitignore | 2 +- .pre-commit-config.yaml | 47 +++++++++++ docker/Dockerfile.jazzy | 129 ++++++++++++++++++++++++++++++ docker/docker-compose.yml | 27 +++++++ docker/files/colcon_defaults.yaml | 5 ++ docker/files/entrypoint.sh | 48 +++++++++++ docker/files/fixuid_config.yml | 4 + docker/files/fixuid_wrapper.sh | 13 +++ docker/run.sh | 122 ++++++++++++++++++++++++++++ docs/GETTING_STARTED.md | 47 +++++++++++ 10 files changed, 443 insertions(+), 1 deletion(-) create mode 100644 .pre-commit-config.yaml create mode 100644 docker/Dockerfile.jazzy create mode 100644 docker/docker-compose.yml create mode 100644 docker/files/colcon_defaults.yaml create mode 100755 docker/files/entrypoint.sh create mode 100644 docker/files/fixuid_config.yml create mode 100755 docker/files/fixuid_wrapper.sh create mode 100755 docker/run.sh create mode 100644 docs/GETTING_STARTED.md diff --git a/.gitignore b/.gitignore index 1377554..1d74e21 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -*.swp +.vscode/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..0b99a3b --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,47 @@ +# Run against all the files: pre-commit run -a +# Install the git hook scripts: pre-commit install + + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: check-ast + - id: check-docstring-first + - id: check-executables-have-shebangs + - id: check-shebang-scripts-are-executable + - id: check-yaml + args: [--unsafe] + - id: check-xml + - id: end-of-file-fixer + - id: trailing-whitespace + - id: check-json + exclude: ^\.clang-format$ + + - repo: https://github.com/pre-commit/mirrors-clang-format + rev: v16.0.3 + hooks: + - id: clang-format + + - repo: https://github.com/PyCQA/flake8 + rev: 6.0.0 + hooks: + - id: flake8 + additional_dependencies: [flake8-docstrings] + + - repo: https://github.com/psf/black + rev: 23.3.0 + hooks: + - id: black + args: [--skip-string-normalization] + + - repo: https://github.com/cheshirekow/cmake-format-precommit + rev: v0.6.13 + hooks: + - id: cmake-lint + +exclude: | + (?x)( + ((.*)\.pgm)$ + ) | ^docker/files/patches/(.*\.patch)$ + | ^documentation/.*$ diff --git a/docker/Dockerfile.jazzy b/docker/Dockerfile.jazzy new file mode 100644 index 0000000..7e5f440 --- /dev/null +++ b/docker/Dockerfile.jazzy @@ -0,0 +1,129 @@ +FROM ubuntu:noble AS package_xml_files_cacher + +WORKDIR /ws/src + +COPY . project/ + +RUN mkdir -p /tmp/ws/src \ + && find ./ -name "package.xml" | xargs cp --parents -t /tmp/ws/src \ + && find ./ -name "COLCON_IGNORE" | xargs cp --parents -t /tmp/ws/src \ + || true + +FROM ubuntu:noble AS vesc_service_image_base + +ARG USER=developer +ARG GROUP=developer + +ENV ROS_DISTRO=jazzy + +ENV DEBIAN_FRONTEND=noninteractive + +WORKDIR /root + +RUN apt update \ + && apt install --no-install-recommends -y \ + adduser \ + bash-completion \ + ccache \ + curl \ + git \ + htop \ + locate \ + mc \ + nano \ + psmisc \ + python-is-python3 \ + python3-pip \ + python3-venv \ + screen \ + sudo \ + tmux \ + vim \ + wget \ + xterm \ + && rm -rf /var/lib/apt/lists/* + +RUN apt update \ + && apt install -y \ + tzdata \ + && ln -fs /usr/share/zoneinfo/America/Argentina/Buenos_Aires /etc/localtime \ + && dpkg-reconfigure --frontend noninteractive tzdata \ + && rm -rf /var/lib/apt/lists/* + + +FROM vesc_service_image_base AS vesc_service_image_devel + +RUN apt update && sudo apt install curl -y \ + && export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F\" '{print $4}') \ + && curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" \ + && sudo dpkg -i /tmp/ros2-apt-source.deb \ + && rm -rf /var/lib/apt/lists/* + +RUN apt update \ + && apt install --no-install-recommends -y \ + ros-$ROS_DISTRO-ros-base \ + ros-dev-tools \ + && rm -rf /var/lib/apt/lists/* + +RUN userdel ubuntu \ + && addgroup --gid 1000 $GROUP \ + && adduser --uid 1000 --ingroup $GROUP --home /home/$USER --shell /bin/bash --disabled-password --gecos "" $USER \ + && adduser $USER sudo \ + && adduser $USER dialout \ + && echo "$USER ALL=NOPASSWD: ALL" >> /etc/sudoers.d/$USER + +USER $USER:$GROUP + +ENV USER_WS /home/$USER/ws +RUN mkdir -p $USER_WS/src + +WORKDIR $USER_WS + +ENV PIP_BREAK_SYSTEM_PACKAGES=1 + +RUN colcon mixin add default https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml \ + && colcon mixin update default + +COPY --chown=$USER:$GROUP docker/files/colcon_defaults.yaml /home/$USER/.colcon/defaults.yaml + +# +# Install the project's dependencies + +RUN sudo rosdep init && rosdep update + +COPY --from=package_xml_files_cacher --chown=$USER:$GROUP /tmp/ws/ $USER_WS/ +RUN /bin/bash -c '\ + sudo apt update \ + && rosdep install -i -y --from-path src \ + && sudo rm -rf /var/lib/apt/lists/*' + +# +# Fixuid setup + +COPY --chown=root:root docker/files/fixuid_config.yml /etc/fixuid/config.yml +RUN /bin/bash -c '\ + ARCH=`uname -m` && if [ "$ARCH" == "aarch64" ]; then FIXUID_ARCH="arm64"; else FIXUID_ARCH="amd64"; fi \ + && curl -SsL https://github.com/boxboat/fixuid/releases/download/v0.6.0/fixuid-0.6.0-linux-$FIXUID_ARCH.tar.gz | sudo tar -C /usr/local/bin -xzf - \ + && sudo chmod 4755 /usr/local/bin/fixuid \ + && cd /etc/fixuid \ + && sudo sed -i "s/_USER_/$USER/" config.yml \ + && sudo sed -i "s/_GROUP_/$GROUP/" config.yml \ + && echo Done installing fixuid for $FIXUID_ARCH' + +# +# Final setup of the workspace + + +RUN echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> /home/$USER/.bashrc + +RUN mkdir -p $USER_WS/persistence && chmod 777 $USER_WS/persistence + +RUN sudo updatedb && sudo apt update + +ENV WITHIN_DEV=1 + +COPY --chown=root:root docker/files/fixuid_wrapper.sh /fixuid_wrapper.sh +COPY --chown=root:root docker/files/entrypoint.sh /ros_entrypoint.sh + +CMD ["/bin/bash"] +ENTRYPOINT ["/fixuid_wrapper.sh", "fixuid", "-q", "/ros_entrypoint.sh"] diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..c244033 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,27 @@ +services: + vesc_devel_base: + build: + context: .. + dockerfile: docker/Dockerfile.${ROS_DISTRO} + target: vesc_service_image_devel + environment: + - DISPLAY + - QT_X11_NO_MITSHM=1 + - ROS_DOMAIN_ID=${ROS_DOMAIN_ID:-0} + - XAUTHORITY=/tmp/.docker.xauth + stdin_open: true + tty: true + user: ${USERID:-1000}:${GROUPID:-1000} + volumes: + - ..:/home/developer/ws/src/project + - /dev:/dev + - /tmp:/tmp:rw + - vesc_persistence:/home/developer/ws/persistence + + vesc_devel: + extends: + service: vesc_devel_base + network_mode: host + +volumes: + vesc_persistence: diff --git a/docker/files/colcon_defaults.yaml b/docker/files/colcon_defaults.yaml new file mode 100644 index 0000000..52c609b --- /dev/null +++ b/docker/files/colcon_defaults.yaml @@ -0,0 +1,5 @@ +{ + "build": { + "mixin": [ "ccache" ] + } +} diff --git a/docker/files/entrypoint.sh b/docker/files/entrypoint.sh new file mode 100755 index 0000000..e908927 --- /dev/null +++ b/docker/files/entrypoint.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +if [ $# -eq 0 ]; then + echo "Missing command line argument" + echo "Usage: $(basename $0) " + exit 1 +fi + +mkdir -p $USER_WS/persistence/$(id -u)/cache +mkdir -p $USER_WS/persistence/$(id -u)/ccache +mkdir -p $USER_WS/persistence/$(id -u)/install +mkdir -p $USER_WS/persistence/$(id -u)/build + +rm -rf $HOME/.cache +rm -rf $HOME/.ccache + +ln -s $USER_WS/persistence/$(id -u)/cache $HOME/.cache +ln -s $USER_WS/persistence/$(id -u)/ccache $HOME/.ccache +ln -s $USER_WS/persistence/$(id -u)/install $USER_WS/install +ln -s $USER_WS/persistence/$(id -u)/build $USER_WS/build + + +# if bash_history is not a symlink or if it does not exist, remove it and create a new symlink +if [ ! -h "$HOME/.bash_history" ]; then + if [ -f "$HOME/.bash_history" ]; then + rm $HOME/.bash_history + fi + touch $USER_WS/persistence/$(id -u)/.bash_history + ln -s $USER_WS/persistence/$(id -u)/.bash_history $HOME/.bash_history +fi + +if [ ! -f "$USER_WS/persistence/$(id -u)/COLCON_IGNORE" ]; then + touch $USER_WS/persistence/$(id -u)/COLCON_IGNORE +fi + +. /opt/ros/$ROS_DISTRO/setup.bash + +ros2 daemon start + +echo +echo "ROS_DISTRO : $ROS_DISTRO" +echo "ROS_DOMAIN_ID : $ROS_DOMAIN_ID" +echo + +# set the flag indicating that fixuid is done +touch fixuid_complete + +exec "$@" diff --git a/docker/files/fixuid_config.yml b/docker/files/fixuid_config.yml new file mode 100644 index 0000000..712ef8e --- /dev/null +++ b/docker/files/fixuid_config.yml @@ -0,0 +1,4 @@ +user: _USER_ +group: _GROUP_ +paths: + - /home diff --git a/docker/files/fixuid_wrapper.sh b/docker/files/fixuid_wrapper.sh new file mode 100755 index 0000000..58bd961 --- /dev/null +++ b/docker/files/fixuid_wrapper.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +if [ $# -eq 0 ]; then + echo "Missing command line argument" + echo "Usage: $(basename "$0") " + exit 1 +fi + +echo +echo "Starting docker container..." +echo + +exec "$@" diff --git a/docker/run.sh b/docker/run.sh new file mode 100755 index 0000000..ad9aaaa --- /dev/null +++ b/docker/run.sh @@ -0,0 +1,122 @@ +#!/bin/bash + +# Copyright 2026 Ekumen, Inc. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +set -o errexit + +ROS_DISTRO=jazzy + +cd "$(dirname "$(readlink -f "$0")")" + +[[ ! -z "${WITHIN_DEV}" ]] && echo "Already in the development environment!" && exit 1 + +# function to print help options +function print_help { + echo "Usage: $(basename $0) [-b|--build] [-h|--help] [-- COMMAND [ARGS...]]" + echo "" + echo "Options:" + echo " --build Build the image before starting the container." + echo " --help Display this help message." + echo " -- Pass everything after this as command and arguments to docker run." + echo "" + echo "Examples:" + echo " $(basename $0) # Run default container" + echo " $(basename $0) -- bash # Run bash in container" + echo " $(basename $0) -- ros2 topic list # Run ROS 2 command" + echo " $(basename $0) --build -- bash # Build image then run bash" +} + +set +o errexit +VALID_ARGS=$(OPTERR=1 getopt -o bh --long build,help -- "$@") +RET_CODE=$? +set -o errexit + +if [[ $RET_CODE -eq 1 ]]; then + print_help + exit 1; +fi +if [[ $RET_CODE -ne 0 ]]; then + >&2 echo "Unexpected getopt error" + exit 1; +fi + +SERVICE_NAME="vesc_devel" +DOCKER_COMMAND=() + +eval set -- "$VALID_ARGS" +while [[ "$1" != "" ]]; do + case "$1" in + -b | --build) + BUILD=true + shift + ;; + -h | --help) + print_help + exit 0 + ;; + --) # start of positional arguments + shift + # Capture remaining arguments as docker command + DOCKER_COMMAND=("$@") + break + ;; + *) + >&2 echo "Unrecognized positional argument: $1" + print_help + exit 1 + ;; + esac +done + +# if the ROS_DOMAIN_ID variable is not set, abort +if [[ -z "${ROS_DOMAIN_ID}" ]]; then + echo + echo "The ROS_DOMAIN_ID environment variable must be set." + echo + exit 1 +fi + +CONTAINER_NAME="${USER}_${SERVICE_NAME}" + +# Build compose file arguments +COMPOSE_FILES="-f docker-compose.yml" + +if [[ "$BUILD" = true ]]; then + USERID=$(id -u) GROUPID=$(id -g) ROS_DISTRO=${ROS_DISTRO} \ + docker compose ${COMPOSE_FILES} build ${SERVICE_NAME} \ + && echo "Built ${SERVICE_NAME} image." || \ + { echo "Failed to build ${SERVICE_NAME} image."; exit 1; } +fi + +USERID=$(id -u) GROUPID=$(id -g) ROS_DISTRO=${ROS_DISTRO} \ + docker compose ${COMPOSE_FILES} run \ + --name "${CONTAINER_NAME}" \ + --remove-orphans \ + --rm "${SERVICE_NAME}" \ + "${DOCKER_COMMAND[@]}" diff --git a/docs/GETTING_STARTED.md b/docs/GETTING_STARTED.md new file mode 100644 index 0000000..918ed11 --- /dev/null +++ b/docs/GETTING_STARTED.md @@ -0,0 +1,47 @@ +# Getting Started with VESC Docker Environment + +## Quick Start + +### Running the Container + +From the repository root, run the development container: + +```bash +cd docker +./run.sh +``` + +This will start an interactive bash shell inside the container with your workspace mounted at `/home/developer/ws/src/project`. + +### Building the Docker Image + +To build or rebuild the Docker image: + +```bash +./run.sh --build +``` + +### Running Commands Directly + +Execute ROS 2 commands or other tools directly: + +```bash +./run.sh -- ros2 topic list +./run.sh -- colcon build +./run.sh -- bash +``` + +## Working with the VESC + +Once inside the container, the workspace is located at `/home/developer/ws/src/project`. + +1. Build the packages: + ```bash + colcon build + source install/setup.bash + ``` + +2. Launch the VESC driver: + ```bash + ros2 launch vesc_driver vesc_driver_node.launch.py + ``` From bda051d7178f5f0a8271b04ca62330c244a1210c Mon Sep 17 00:00:00 2001 From: Gerardo Puga Date: Sun, 26 Jul 2026 18:02:50 -0300 Subject: [PATCH 2/6] Fix misisng dependency --- vesc_driver/package.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/vesc_driver/package.xml b/vesc_driver/package.xml index c40e286..3d5871d 100644 --- a/vesc_driver/package.xml +++ b/vesc_driver/package.xml @@ -17,6 +17,7 @@ ament_cmake_auto + asio_cmake_module rclcpp rclcpp_components std_msgs From bf7cbee64d8b65d666f982cd72ed7858bd0fdfb7 Mon Sep 17 00:00:00 2001 From: Gerardo Puga Date: Sun, 26 Jul 2026 18:03:05 -0300 Subject: [PATCH 3/6] Fix style issues in launch file causing colcon test to fail --- vesc_driver/launch/vesc_driver_node.launch.py | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/vesc_driver/launch/vesc_driver_node.launch.py b/vesc_driver/launch/vesc_driver_node.launch.py index b9777e7..d05772d 100644 --- a/vesc_driver/launch/vesc_driver_node.launch.py +++ b/vesc_driver/launch/vesc_driver_node.launch.py @@ -26,6 +26,8 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. +"""Launch file for VESC driver node.""" + import os from ament_index_python.packages import get_package_share_directory @@ -36,23 +38,24 @@ def generate_launch_description(): - + """Generate launch description for VESC driver node.""" vesc_config = os.path.join( get_package_share_directory('vesc_driver'), 'params', - 'vesc_config.yaml' - ) - return LaunchDescription([ - DeclareLaunchArgument( - name="config", - default_value=vesc_config, - description="VESC yaml configuration file.", + 'vesc_config.yaml', + ) + return LaunchDescription( + [ + DeclareLaunchArgument( + name='config', + default_value=vesc_config, + description='VESC yaml configuration file.', ), - Node( - package='vesc_driver', - executable='vesc_driver_node', - name='vesc_driver_node', - parameters=[LaunchConfiguration("config")] - ), - - ]) + Node( + package='vesc_driver', + executable='vesc_driver_node', + name='vesc_driver_node', + parameters=[LaunchConfiguration('config')], + ), + ] + ) From 1ad6c335fb160c124a6423b4af5a5925fe064eda Mon Sep 17 00:00:00 2001 From: Gerardo Puga Date: Sun, 26 Jul 2026 18:13:17 -0300 Subject: [PATCH 4/6] Add jazzy branches to ci runs --- .github/workflows/ros2-ci.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ros2-ci.yaml b/.github/workflows/ros2-ci.yaml index 4e27f67..e8094cc 100644 --- a/.github/workflows/ros2-ci.yaml +++ b/.github/workflows/ros2-ci.yaml @@ -4,9 +4,13 @@ on: pull_request: branches: - ros2 + - jazzy + - jazzy-dev push: branches: - ros2 + - jazzy + - jazzy-dev jobs: From b7162c518876d171dabcb7c0b4211589230a1e62 Mon Sep 17 00:00:00 2001 From: Gerardo Puga Date: Sun, 26 Jul 2026 18:18:02 -0300 Subject: [PATCH 5/6] Add job to build and test docker image --- .github/workflows/devel_docker_build.yml | 41 ++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/devel_docker_build.yml diff --git a/.github/workflows/devel_docker_build.yml b/.github/workflows/devel_docker_build.yml new file mode 100644 index 0000000..d4a1035 --- /dev/null +++ b/.github/workflows/devel_docker_build.yml @@ -0,0 +1,41 @@ +name: Unit tests run in CI + +on: + push: + branches: + - main + - jazzy + - jazzy-dev + + pull_request: + branches: + - main + - jazzy + - jazzy-dev + +concurrency: + group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}' + cancel-in-progress: true + +env: + ROS_DOMAIN_ID: 88 +jobs: + unit-tests: + runs-on: ubuntu-24.04 + + steps: + - name: Checkout repository + uses: actions/checkout@v7 + + - name: Pre-build docker image + run: | + ./docker/run.sh --build -- echo "We have a working image!" + + - name: Build code and run tests + run: | + ./docker/run.sh --build -- bash -c ' \ + rm -rf build/* install/* log/* && \ + colcon build --symlink-install && \ + . install/setup.bash && \ + colcon test && \ + echo "CI test runner completed." ' From 457c8e2bfbf64a31bdcaaab4a7289fbaad99eb86 Mon Sep 17 00:00:00 2001 From: Gerardo Puga Date: Wed, 29 Jul 2026 22:40:46 -0300 Subject: [PATCH 6/6] Minor style fixes --- .gitignore | 1 + .pre-commit-config.yaml | 7 ------- docker/Dockerfile.jazzy | 1 - docs/GETTING_STARTED.md | 15 --------------- 4 files changed, 1 insertion(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index 1d74e21..3a25c0a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ +*.swp .vscode/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0b99a3b..1dc9c5f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,6 @@ # Run against all the files: pre-commit run -a # Install the git hook scripts: pre-commit install - repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 @@ -39,9 +38,3 @@ repos: rev: v0.6.13 hooks: - id: cmake-lint - -exclude: | - (?x)( - ((.*)\.pgm)$ - ) | ^docker/files/patches/(.*\.patch)$ - | ^documentation/.*$ diff --git a/docker/Dockerfile.jazzy b/docker/Dockerfile.jazzy index 7e5f440..fb2dd3e 100644 --- a/docker/Dockerfile.jazzy +++ b/docker/Dockerfile.jazzy @@ -50,7 +50,6 @@ RUN apt update \ && dpkg-reconfigure --frontend noninteractive tzdata \ && rm -rf /var/lib/apt/lists/* - FROM vesc_service_image_base AS vesc_service_image_devel RUN apt update && sudo apt install curl -y \ diff --git a/docs/GETTING_STARTED.md b/docs/GETTING_STARTED.md index 918ed11..d847691 100644 --- a/docs/GETTING_STARTED.md +++ b/docs/GETTING_STARTED.md @@ -30,18 +30,3 @@ Execute ROS 2 commands or other tools directly: ./run.sh -- colcon build ./run.sh -- bash ``` - -## Working with the VESC - -Once inside the container, the workspace is located at `/home/developer/ws/src/project`. - -1. Build the packages: - ```bash - colcon build - source install/setup.bash - ``` - -2. Launch the VESC driver: - ```bash - ros2 launch vesc_driver vesc_driver_node.launch.py - ```