diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index d56d6ef9a..a2609b38e 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -1,4 +1,8 @@
-FROM ros:iron
+FROM ros:jazzy
+
+ARG user=bitbots
+ARG uid=1000
+ARG gid=1000
# Basic Utilities
ENV DEBIAN_FRONTEND=noninteractive
@@ -54,41 +58,51 @@ RUN apt update -y \
RUN apt-get install -y \
python3-rosdep \
python3-vcstool \
- ros-iron-camera-calibration \
- ros-iron-desktop \
- ros-iron-joint-state-publisher-gui \
- ros-iron-plotjuggler \
- ros-iron-plotjuggler-msgs \
- ros-iron-plotjuggler-ros \
- ros-iron-rmw-cyclonedds-cpp \
- ros-iron-rqt-robot-monitor \
- ros-iron-soccer-vision-3d-rviz-markers
-
-# Update pip and install colcon-clean
-RUN pip3 install pip -U
-
-# Install colcon extensions / patches
-RUN python3 -m pip install \
- git+https://github.com/ruffsl/colcon-clean \
- git+https://github.com/timonegk/colcon-core.git@colors \
- git+https://github.com/timonegk/colcon-notification.git@colors \
- git+https://github.com/timonegk/colcon-output.git@colors
+ python3-virtualenv \
+ ros-jazzy-camera-calibration \
+ ros-jazzy-desktop \
+ ros-jazzy-joint-state-publisher-gui \
+ ros-jazzy-plotjuggler \
+ ros-jazzy-plotjuggler-msgs \
+ ros-jazzy-plotjuggler-ros \
+ ros-jazzy-rmw-cyclonedds-cpp \
+ ros-jazzy-rqt-robot-monitor \
+ ros-jazzy-soccer-vision-3d-rviz-markers
# Set zsh as default shell
SHELL ["/bin/zsh", "-c"]
-# Create home directory and colcon workspace
-RUN mkdir -p "/root/colcon_ws"
+# Remove the users group, because when it exists on the host system
+# the devcontainer will not dynamically update the containerUser GID,
+# when the host user is part of the users group.
+# Then create a bitbots user with home directory and add allow it to use sudo
+RUN groupdel users \
+ && userdel -r ubuntu \
+ && useradd -m -U -u "$uid" -G sudo -s /bin/zsh $user \
+ && groupmod -g "$gid" $user \
+ && echo "$user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
+
+USER $user
+
+# Install pip colcon extensions / patches as user
+RUN python3 -m pip install --user --break-system-packages \
+ git+https://github.com/ruffsl/colcon-clean \
+ git+https://github.com/timonegk/colcon-core.git@colors \
+ git+https://github.com/timonegk/colcon-notification.git@colors \
+ git+https://github.com/timonegk/colcon-output.git@colors
+
+# Create colcon workspace
+RUN mkdir -p /home/$user/colcon_ws/src
# Install oh-my-zsh for pretty terminal
RUN sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" && \
- git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
+ git clone https://github.com/zsh-users/zsh-autosuggestions "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions"
-# Add zshrc
-COPY zshrc "/root/.zshrc"
+# Add zshrc to bitbots home directory
+COPY --chown=$user:$user zshrc /home/$user/.zshrc
# This is required for sharing Xauthority
ENV QT_X11_NO_MITSHM=1
# Switch to the workspace directory
-WORKDIR "/root/colcon_ws"
+WORKDIR /home/$user/colcon_ws
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index d7c87f452..2b735fca2 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,5 +1,5 @@
{
- "name": "Bit-Bots Iron Dev",
+ "name": "Bit-Bots Jazzy Dev",
"build": { "dockerfile": "Dockerfile" },
@@ -14,14 +14,16 @@
"vscode": {
"settings": {
"terminal.integrated.defaultProfile.linux": "zsh",
- "terminal.integrated.profiles.linux": { "zsh": { "path": "/bin/zsh" } }
+ "terminal.integrated.profiles.linux": { "zsh": { "path": "/bin/zsh" } },
+ "dev.containers.copyGitConfig": false,
+ "dev.containers.gitCredentialHelperConfigLocation": "none"
},
"extensions": ["ms-iot.vscode-ros"]
}
},
- "workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/root/colcon_ws/src/bitbots_main",
- "workspaceFolder": "/root/colcon_ws/src/bitbots_main",
+ "workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/home/bitbots/colcon_ws/src/bitbots_main",
+ "workspaceFolder": "/home/bitbots/colcon_ws/src/bitbots_main",
"mounts": [
"type=bind,source=${localEnv:HOME},target=/srv/host_home,consistency=cached"
diff --git a/.devcontainer/zshrc b/.devcontainer/zshrc
index 27e9c7767..70e5cf296 100644
--- a/.devcontainer/zshrc
+++ b/.devcontainer/zshrc
@@ -50,12 +50,12 @@ bindkey "^[[1;5D" backward-word
# Settings for the prompt to show that we are in a docker container
-export PROMPT="%K{black} 🐋 %K{blue}%F{black}%/ %f%k%F{blue}%f " # Prefix the prompt with DOCKER
+export PROMPT="%K{black} 🐋 %K{blue}%F{black} %~ %f%k%F{blue}%f " # Prefix the prompt with DOCKER
# >>> bit-bots initialize >>>
# Ignore some deprecation warnings
-export PYTHONWARNINGS=ignore:::setuptools.command.install,ignore:::setuptools.command.easy_install,ignore:::pkg_resources
+export PYTHONWARNINGS="ignore:::setuptools.command.install,ignore:::setuptools.command.easy_install,ignore:::pkg_resources,ignore:easy_install command is deprecated,ignore:setup.py install is deprecated"
# Limit ROS 2 communication to localhost (can be overridden when needed)
export ROS_DOMAIN_ID=24
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
index d5bb2ab71..7baa3225b 100644
--- a/.git-blame-ignore-revs
+++ b/.git-blame-ignore-revs
@@ -11,3 +11,4 @@ f29fb619aef9f416cbbdc74ec77c23423dcefe07
3b9f322183bed2cb271bf6bd07d803a93c398c3e
ae9fbef74c50ba1e462d1b76da16779c76aa0d5b
476e75e3f3d17c35ac89b17f513d93078687d613
+cd3280273363807e1b5df2ade0138d48178cb06b
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 377ce3f22..e73122e8e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -4,17 +4,27 @@ on:
- cron: '0 0 * * *'
push:
+env:
+ PYTHONWARNINGS: "ignore:::setuptools.command.install,ignore:::setuptools.command.easy_install,ignore:::pkg_resources,ignore:easy_install command is deprecated,ignore:setup.py install is deprecated"
+
jobs:
build:
runs-on: ubuntu-latest
container:
- image: ubuntu:jammy
+ image: ubuntu:noble
steps:
- name: Cancel outdated jobs
uses: fkirc/skip-duplicate-actions@v5
with:
cancel_others: 'true'
+
+ # Remove comments to spawn an interactive debigging ssh shell in the ci
+ #- name: Setup tmate session
+ # uses: mxschmitt/action-tmate@v3
+ # with:
+ # detached: true
+
- name: Set up ROS ecosystem
uses: ros-tooling/setup-ros@v0.7
@@ -30,7 +40,9 @@ jobs:
echo "PATH=$PATH:/github/home/.local/bin" >> "$GITHUB_ENV"
- name: Pull source code for libraries and install dependencies
- run: make install HTTPS=true ARGS="--ci"
+ run: |
+ sudo apt-get remove -y python3-pytest-repeat #TODO remove once the upstream apt package reports the correct version on the newest pip version
+ make install HTTPS=true ARGS="--ci"
- name: Set up colcon workspace
run: |
@@ -39,14 +51,14 @@ jobs:
- name: Build packages
run: |
- . /opt/ros/iron/setup.sh
+ . /opt/ros/jazzy/setup.sh
colcon build --symlink-install
working-directory: /colcon_ws
- name: Test packages
run: |
# Source workspace
- . /opt/ros/iron/setup.sh
+ . /opt/ros/jazzy/setup.sh
. install/setup.sh
# Run tests for all packages
colcon test --event-handlers console_direct+ --return-code-on-test-failure --parallel-workers 1
diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index 88b1011ed..bb80c075f 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -7,10 +7,10 @@ on:
jobs:
pre-commit:
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
- name: Install cppcheck
run: sudo apt install cppcheck -y
- - uses: pre-commit/action@v3.0.0
+ - uses: pre-commit/action@v3.0.1
diff --git a/.gitignore b/.gitignore
index 3d75bbd0c..df3f74bd9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -97,8 +97,6 @@ qtcreator-*
# Emacs
.#*
-# Catkin custom files
-CATKIN_IGNORE
### Python template
# Byte-compiled / optimized / DLL files
__pycache__/
@@ -220,10 +218,11 @@ doku/*
# library subdirectories
/lib/
-# Path to the protocol buffer definitions, which are a diffrerent repository and managed by vcstool
+# Path to the protocol buffer definitions, which are a different repository and managed by vcstool
/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/RobocupProtocol
# Protobuf generated file
/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/robocup_extension_pb2.py
+/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/robocup_extension_pb2.pyi
# Workspace git status file from the deploy tool
**/workspace_status.json
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2c0c5e37a..8f6e20745 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.1.6
+ rev: v0.9.6
hooks:
- id: ruff
args:
@@ -16,18 +16,18 @@ repos:
- id: cppcheck
args:
- "--inline-suppr"
- - "--suppress=missingInclude"
+ - "--suppress=missingIncludeSystem"
- "--suppress=unmatchedSuppression"
- "--suppress=unusedFunction"
- "--suppress=unusedStructMember"
- "--suppress=useStlAlgorithm"
- repo: https://github.com/cheshirekow/cmake-format-precommit
- rev: v0.6.10
+ rev: v0.6.13
hooks:
- id: cmake-format
- id: cmake-lint
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.5.0
+ rev: v5.0.0
hooks:
- id: check-merge-conflict
- id: check-toml
diff --git a/.vscode/settings.json b/.vscode/settings.json
index be0dde9f6..ba732efae 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -117,6 +117,7 @@
"unpenalize",
"unpenalized",
"urdf",
+ "vcstool",
"walkready",
"wandb",
"webots",
@@ -219,13 +220,13 @@
},
// Tell the ROS extension where to find the setup.bash
// This also utilizes the COLCON_WS environment variable, which needs to be set
- "ros.distro": "iron",
+ "ros.distro": "jazzy",
"search.useIgnoreFiles": false,
"python.autoComplete.extraPaths": [
- "/opt/ros/iron/lib/python3.10/site-packages"
+ "/opt/ros/jazzy/lib/python3.12/site-packages"
],
"python.analysis.extraPaths": [
- "/opt/ros/iron/lib/python3.10/site-packages"
+ "/opt/ros/jazzy/lib/python3.12/site-packages"
],
"cmake.configureOnOpen": false,
"editor.formatOnSave": true,
@@ -237,4 +238,8 @@
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
+ "makefile.configureOnOpen": true,
+ "[jsonc]": {
+ "editor.defaultFormatter": "vscode.json-language-features"
+ },
}
diff --git a/Makefile b/Makefile
index 92abcbe43..86500334c 100644
--- a/Makefile
+++ b/Makefile
@@ -17,8 +17,8 @@ install-no-root: pull-init update-no-root
pip:
# Install and upgrade pip dependencies
- pip install --upgrade pip --user
- pip install --upgrade -r requirements/dev.txt --user -v
+ pip install --upgrade pip --user --break-system-packages -v
+ pip install --upgrade -r requirements/dev.txt --user --break-system-packages -v
pre-commit:
# Install pre-commit hooks for all submodules that have a .pre-commit-config.yaml file
@@ -91,8 +91,8 @@ rosdep:
# Initialize rosdep if not already done
[ -f /etc/ros/rosdep/sources.list.d/20-default.list ] || sudo rosdep init
# Update rosdep and install dependencies from meta directory
- rosdep update --include-eol-distros
- rosdep install --from-paths . --ignore-src --rosdistro iron -y
+ rosdep update
+ rosdep install --from-paths . --ignore-src --rosdistro jazzy -y
status:
# Show status of all repositories
diff --git a/README.md b/README.md
index c04f8132d..067943c5b 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
[](https://github.com/bit-bots/bitbots_main/actions/workflows/ci.yml)
[](https://github.com/bit-bots/bitbots_main/actions/workflows/pre-commit.yml)
-[](https://docs.ros.org/en/iron/index.html)
+[](https://docs.ros.org/en/jazzy/index.html)
This git repository contains all RoboCup-related code and documentation from the Hamburg Bit-Bots team.
All code is written as individual ROS 2 packages targeting Ubuntu.
diff --git a/bitbots_behavior/bitbots_blackboard/bitbots_blackboard/capsules/world_model_capsule.py b/bitbots_behavior/bitbots_blackboard/bitbots_blackboard/capsules/world_model_capsule.py
index d1a9f47ab..caa4589c2 100644
--- a/bitbots_behavior/bitbots_blackboard/bitbots_blackboard/capsules/world_model_capsule.py
+++ b/bitbots_behavior/bitbots_blackboard/bitbots_blackboard/capsules/world_model_capsule.py
@@ -21,16 +21,13 @@
from bitbots_blackboard.capsules import AbstractBlackboardCapsule
-class WorldModelTFError(Exception):
- ...
+class WorldModelTFError(Exception): ...
-class WorldModelPositionTFError(WorldModelTFError):
- ...
+class WorldModelPositionTFError(WorldModelTFError): ...
-class WorldModelBallTFError(WorldModelTFError):
- ...
+class WorldModelBallTFError(WorldModelTFError): ...
class WorldModelCapsule(AbstractBlackboardCapsule):
diff --git a/bitbots_behavior/bitbots_body_behavior/package.xml b/bitbots_behavior/bitbots_body_behavior/package.xml
index ed5935edf..c0256d7dc 100644
--- a/bitbots_behavior/bitbots_body_behavior/package.xml
+++ b/bitbots_behavior/bitbots_body_behavior/package.xml
@@ -32,6 +32,7 @@
tf2
ament_mypy
+ python3-pytest
diff --git a/bitbots_behavior/bitbots_body_behavior/setup.py b/bitbots_behavior/bitbots_body_behavior/setup.py
index 2b535daae..097ec5c5b 100644
--- a/bitbots_behavior/bitbots_body_behavior/setup.py
+++ b/bitbots_behavior/bitbots_body_behavior/setup.py
@@ -1,13 +1,13 @@
import glob
-from setuptools import setup
+from setuptools import find_packages, setup
package_name = "bitbots_body_behavior"
setup(
name=package_name,
- packages=[package_name],
+ packages=find_packages(exclude=["test"]),
data_files=[
("share/" + package_name, ["package.xml"]),
("share/ament_index/resource_index/packages", ["resource/" + package_name]),
diff --git a/bitbots_lowlevel/bitbots_ros_control/CMakeLists.txt b/bitbots_lowlevel/bitbots_ros_control/CMakeLists.txt
index 65939952a..b418f2b3a 100644
--- a/bitbots_lowlevel/bitbots_ros_control/CMakeLists.txt
+++ b/bitbots_lowlevel/bitbots_ros_control/CMakeLists.txt
@@ -25,7 +25,6 @@ find_package(moveit_core REQUIRED)
find_package(moveit_ros_planning REQUIRED)
find_package(pluginlib REQUIRED)
find_package(rclcpp REQUIRED)
-find_package(realtime_tools REQUIRED)
find_package(rosidl_typesupport_cpp REQUIRED)
find_package(std_msgs REQUIRED)
find_package(std_srvs REQUIRED)
@@ -71,7 +70,6 @@ ament_target_dependencies(
moveit_ros_planning
pluginlib
rclcpp
- realtime_tools
rosidl_typesupport_cpp
std_msgs
std_srvs
@@ -94,7 +92,6 @@ ament_target_dependencies(
hardware_interface
pluginlib
rclcpp
- realtime_tools
rosidl_typesupport_cpp
std_msgs
std_srvs
@@ -112,7 +109,6 @@ ament_export_dependencies(controller_manager)
ament_export_dependencies(dynamixel_workbench_toolbox)
ament_export_dependencies(hardware_interface)
ament_export_dependencies(pluginlib)
-ament_export_dependencies(realtime_tools)
ament_export_dependencies(std_msgs)
ament_export_dependencies(tf2_ros)
ament_export_dependencies(transmission_interface)
diff --git a/bitbots_lowlevel/bitbots_ros_control/include/bitbots_ros_control/hardware_interface.hpp b/bitbots_lowlevel/bitbots_ros_control/include/bitbots_ros_control/hardware_interface.hpp
index cc59c3041..499222df5 100644
--- a/bitbots_lowlevel/bitbots_ros_control/include/bitbots_ros_control/hardware_interface.hpp
+++ b/bitbots_lowlevel/bitbots_ros_control/include/bitbots_ros_control/hardware_interface.hpp
@@ -12,11 +12,11 @@ class HardwareInterface {
public:
virtual bool init() = 0;
- virtual void read(const rclcpp::Time &t, const rclcpp::Duration &dt){};
+ virtual void read(const rclcpp::Time &t, const rclcpp::Duration &dt) {};
- virtual void write(const rclcpp::Time &t, const rclcpp::Duration &dt){};
+ virtual void write(const rclcpp::Time &t, const rclcpp::Duration &dt) {};
- virtual void restoreAfterPowerCycle(){};
+ virtual void restoreAfterPowerCycle() {};
virtual ~HardwareInterface(){};
};
diff --git a/bitbots_lowlevel/bitbots_ros_control/include/bitbots_ros_control/utils.hpp b/bitbots_lowlevel/bitbots_ros_control/include/bitbots_ros_control/utils.hpp
index 68e480cd2..eab409395 100644
--- a/bitbots_lowlevel/bitbots_ros_control/include/bitbots_ros_control/utils.hpp
+++ b/bitbots_lowlevel/bitbots_ros_control/include/bitbots_ros_control/utils.hpp
@@ -1,8 +1,8 @@
#ifndef BITBOTS_ROS_CONTROL_INCLUDE_BITBOTS_ROS_CONTROL_UTILS_H_
#define BITBOTS_ROS_CONTROL_INCLUDE_BITBOTS_ROS_CONTROL_UTILS_H_
-#include "bitbots_msgs/msg/audio.hpp"
-#include "rclcpp/rclcpp.hpp"
+#include
+#include
namespace bitbots_ros_control {
@@ -13,7 +13,7 @@ void speakError(rclcpp::Publisher::SharedPtr speak_pub
uint16_t dxlMakeword(uint64_t a, uint64_t b);
uint32_t dxlMakedword(uint64_t a, uint64_t b);
-float dxlMakeFloat(uint8_t* data);
+float dxlMakeFloat(const uint8_t* data);
std::string gyroRangeToString(uint8_t range);
std::string accelRangeToString(uint8_t range);
diff --git a/bitbots_lowlevel/bitbots_ros_control/package.xml b/bitbots_lowlevel/bitbots_ros_control/package.xml
index 23abbeb60..ac969f877 100644
--- a/bitbots_lowlevel/bitbots_ros_control/package.xml
+++ b/bitbots_lowlevel/bitbots_ros_control/package.xml
@@ -31,13 +31,13 @@
bitbots_tts
pluginlib
rclcpp
- realtime_tools
std_msgs
system_monitor
transmission_interface
yaml-cpp
imu_complementary_filter
+ rviz_imu_plugin
diff --git a/bitbots_lowlevel/bitbots_ros_control/scripts/pose_check.py b/bitbots_lowlevel/bitbots_ros_control/scripts/pose_check.py
index 531cc4f23..d9a037a22 100755
--- a/bitbots_lowlevel/bitbots_ros_control/scripts/pose_check.py
+++ b/bitbots_lowlevel/bitbots_ros_control/scripts/pose_check.py
@@ -44,7 +44,7 @@
def num_to_emoji(num: int) -> str:
emoji_numbers = ["0️⃣", "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣"]
- return f'{"".join([emoji_numbers[int(digit)] for digit in str(num)])} '
+ return f"{''.join([emoji_numbers[int(digit)] for digit in str(num)])} "
def move_to_joint_position(publisher: Publisher, joint_goals: dict[str, float], offsets=True):
diff --git a/bitbots_lowlevel/bitbots_ros_control/src/dynamixel_servo_hardware_interface.cpp b/bitbots_lowlevel/bitbots_ros_control/src/dynamixel_servo_hardware_interface.cpp
index 34f24cb5d..81371b754 100644
--- a/bitbots_lowlevel/bitbots_ros_control/src/dynamixel_servo_hardware_interface.cpp
+++ b/bitbots_lowlevel/bitbots_ros_control/src/dynamixel_servo_hardware_interface.cpp
@@ -1,8 +1,7 @@
-#include
-#include
-
#include
#include
+#include
+#include
#include
namespace bitbots_ros_control {
@@ -148,7 +147,7 @@ void DynamixelServoHardwareInterface::individualTorqueCb(bitbots_msgs::msg::Join
RCLCPP_WARN(nh_->get_logger(), "Couldn't set torque for servo %s ", msg.joint_names[i].c_str());
}
}
- for (auto &bus : bus_interfaces_) {
+ for (const auto &bus : bus_interfaces_) {
bus->switch_individual_torque_ = true;
}
}
@@ -157,7 +156,7 @@ void DynamixelServoHardwareInterface::setTorqueCb(std_msgs::msg::Bool::SharedPtr
/**
* This saves the given required value, so that it can be written to the servos in the write method
*/
- for (auto &bus : bus_interfaces_) {
+ for (const auto &bus : bus_interfaces_) {
bus->goal_torque_ = enabled->data;
}
for (size_t j = 0; j < joint_names_.size(); j++) {
@@ -196,7 +195,7 @@ void DynamixelServoHardwareInterface::write(const rclcpp::Time &t, const rclcpp:
// set all values from controller to the buses
// todo improve performance
int i = 0;
- for (auto &bus : bus_interfaces_) {
+ for (const auto &bus : bus_interfaces_) {
for (int j = 0; j < bus->joint_count_; j++) {
bus->goal_position_[j] = goal_position_[i];
bus->goal_velocity_[j] = goal_velocity_[i];
diff --git a/bitbots_lowlevel/bitbots_ros_control/src/pressure_converter.cpp b/bitbots_lowlevel/bitbots_ros_control/src/pressure_converter.cpp
index 7cdc9f597..0dff0ae2e 100644
--- a/bitbots_lowlevel/bitbots_ros_control/src/pressure_converter.cpp
+++ b/bitbots_lowlevel/bitbots_ros_control/src/pressure_converter.cpp
@@ -76,8 +76,7 @@ PressureConverter::PressureConverter(rclcpp::Node::SharedPtr nh, char side) {
}
for (int i = 0; i < 4; i++) {
std::stringstream single_wrench_frame;
- single_wrench_frame << side << "_"
- << "cleat_" << wrench_topics[i];
+ single_wrench_frame << side << "_" << "cleat_" << wrench_topics[i];
wrench_frames_.push_back(single_wrench_frame.str());
}
diff --git a/bitbots_lowlevel/bitbots_ros_control/src/servo_bus_interface.cpp b/bitbots_lowlevel/bitbots_ros_control/src/servo_bus_interface.cpp
index b034a2f98..06c82fff5 100644
--- a/bitbots_lowlevel/bitbots_ros_control/src/servo_bus_interface.cpp
+++ b/bitbots_lowlevel/bitbots_ros_control/src/servo_bus_interface.cpp
@@ -202,7 +202,7 @@ bool ServoBusInterface::writeROMRAM(bool first_time) {
// Allocate memory for the values in the driver
std::vector values(joint_names_.size());
// Iterate over parameter names
- for (auto register_name : parameter_names) {
+ for (const auto ®ister_name : parameter_names) {
// Get the value for each joint
for (size_t num = 0; num < joint_names_.size(); num++) {
// Get the value from the cache
diff --git a/bitbots_lowlevel/bitbots_ros_control/src/utils.cpp b/bitbots_lowlevel/bitbots_ros_control/src/utils.cpp
index a9e0745ba..9286eba43 100644
--- a/bitbots_lowlevel/bitbots_ros_control/src/utils.cpp
+++ b/bitbots_lowlevel/bitbots_ros_control/src/utils.cpp
@@ -40,7 +40,7 @@ uint32_t dxlMakedword(uint64_t a, uint64_t b) {
return uint32_t(uint16_t(a & 0xffff) | uint32_t(uint16_t(b & 0xffff) << 16));
}
-float dxlMakeFloat(uint8_t* data) {
+float dxlMakeFloat(const uint8_t* data) {
float f;
uint32_t b = dxlMakedword(dxlMakeword(data[0], data[1]), dxlMakeword(data[2], data[3]));
memcpy(&f, &b, sizeof(f));
diff --git a/bitbots_lowlevel/bitbots_ros_control/src/wolfgang_hardware_interface.cpp b/bitbots_lowlevel/bitbots_ros_control/src/wolfgang_hardware_interface.cpp
index 929812d83..96097debd 100644
--- a/bitbots_lowlevel/bitbots_ros_control/src/wolfgang_hardware_interface.cpp
+++ b/bitbots_lowlevel/bitbots_ros_control/src/wolfgang_hardware_interface.cpp
@@ -307,7 +307,7 @@ void WolfgangHardwareInterface::write(const rclcpp::Time &t, const rclcpp::Durat
}
if (!bus_start_time_ || t > bus_start_time_.value()) {
if (bus_first_write_) {
- for (std::vector> &port_interfaces : interfaces_) {
+ for (std::vector> const &port_interfaces : interfaces_) {
for (std::shared_ptr interface : port_interfaces) {
interface->restoreAfterPowerCycle();
}
diff --git a/bitbots_misc/bitbots_basler_camera/src/basler_camera.cpp b/bitbots_misc/bitbots_basler_camera/src/basler_camera.cpp
index c1f6b2e92..eaaec5993 100644
--- a/bitbots_misc/bitbots_basler_camera/src/basler_camera.cpp
+++ b/bitbots_misc/bitbots_basler_camera/src/basler_camera.cpp
@@ -3,6 +3,7 @@
#include
#include
+#include
#include
#include
#include
@@ -18,8 +19,6 @@
#include
#include
-#include "pylon_camera_parameters.hpp"
-
using std::placeholders::_1, std::placeholders::_2;
using namespace Pylon;
@@ -271,7 +270,8 @@ class BaslerCamera {
}
// Convert to cv::Mat
- cv::Mat image(ptrGrabResult->GetHeight(), ptrGrabResult->GetWidth(), CV_8UC1, (uint8_t*)ptrGrabResult->GetBuffer());
+ cv::Mat image(ptrGrabResult->GetHeight(), ptrGrabResult->GetWidth(), CV_8UC1,
+ static_cast(ptrGrabResult->GetBuffer()));
// Create cv::Mat for color image
cv::Mat color(image.size(), CV_MAKETYPE(CV_8U, 3));
diff --git a/bitbots_misc/bitbots_containers/hlvs/Dockerfile b/bitbots_misc/bitbots_containers/hlvs/Dockerfile
index 206b10d1e..891b78832 100644
--- a/bitbots_misc/bitbots_containers/hlvs/Dockerfile
+++ b/bitbots_misc/bitbots_containers/hlvs/Dockerfile
@@ -1,81 +1,242 @@
# Use upstream ubuntu images as base
-FROM nvidia/cuda:11.8.0-devel-ubuntu22.04
-ENV DEBIAN_FRONTEND=noninteractive
+FROM nvidia/cuda:12.8.0-devel-ubuntu24.04
+
+ARG UID=150
+ARG ROS_DISTRO=jazzy
+ARG BITBOTS_MAIN_BRANCH=feature/jazzy-ubuntu2404-devcontainer
-# Install system dependencies
-ADD sources.list /etc/apt/sources.list
-RUN apt update
-RUN apt install -y wget auto-apt-proxy apt-utils
-RUN mkdir -p /usr/local/share/keyrings
-RUN wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O /usr/local/share/keyrings/ros-archive-keyring.gpg
-RUN echo "deb [arch=amd64 signed-by=/usr/local/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu jammy main" | tee /etc/apt/sources.list.d/ros2.list
-RUN apt update
+ENV DEBIAN_FRONTEND=noninteractive
-# Install a lot of apt packages. They could also be installed with rosdep, but we want them to be cached
-RUN apt install -y build-essential espeak git libjsoncpp-dev libprotobuf-dev libprotoc-dev locales protobuf-compiler python3-colcon-clean python3-colcon-common-extensions python3-colcon-core python3-construct python3-hypothesis python3-numpy python3-opencv python3-pip python3-protobuf python3-psutil python3-rosdep python3-rospkg python3-sklearn python3-sphinx-rtd-theme python3-transforms3d ros-iron-rmw-cyclonedds-cpp sudo xvfb && \
- apt clean && \
- rm -rf /var/lib/apt/lists/*
+RUN apt update \
+ && apt install -y wget auto-apt-proxy apt-utils \
+ && mkdir -p /usr/local/share/keyrings \
+ && wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O /usr/local/share/keyrings/ros-archive-keyring.gpg \
+ && echo "deb [arch=amd64 signed-by=/usr/local/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu noble main" | tee /etc/apt/sources.list.d/ros2.list \
+ && apt update
+
+# Install a lot of apt packages.
+# They could also be installed with rosdep, but we want them to be cached.
+RUN apt install -y \
+ build-essential \
+ espeak \
+ ffmpeg \
+ git \
+ ipython3 \
+ locales \
+ protobuf-compiler \
+ sudo \
+ vcstool \
+ gir1.2-gst-plugins-base-1.0 \
+ gir1.2-gstreamer-1.0 \
+ gstreamer1.0-alsa \
+ gstreamer1.0-plugins-base \
+ gstreamer1.0-plugins-good \
+ gstreamer1.0-plugins-ugly \
+ gstreamer1.0-tools \
+ libboost-all-dev \
+ libeigen3-dev \
+ libfmt-dev \
+ libfreeimage-dev\
+ libgstreamer-plugins-base1.0-0 \
+ libgstreamer-plugins-base1.0-dev \
+ libgstreamer1.0-0 \
+ libgstreamer1.0-dev \
+ libjsoncpp-dev \
+ libopencv-dev \
+ libprotobuf-dev \
+ libprotoc-dev \
+ librange-v3-dev \
+ liburdfdom-dev \
+ libyaml-cpp-dev \
+ protobuf-compiler \
+ pybind11-dev \
+ pyqt5-dev \
+ python3-breathe \
+ python3-colcon-clean \
+ python3-colcon-common-extensions \
+ python3-construct \
+ python3-coverage \
+ python3-cryptography \
+ python3-hypothesis \
+ python3-matplotlib \
+ python3-nose \
+ python3-numpy \
+ python3-opencv \
+ python3-pil \
+ python3-pip \
+ python3-protobuf \
+ python3-psutil \
+ python3-pydot \
+ python3-pyqt5 \
+ python3-pyqt5.qtsvg \
+ python3-pytest \
+ python3-rosdep \
+ python3-rospkg \
+ python3-scipy \
+ python3-sip-dev \
+ python3-sphinx-rtd-theme \
+ python3-tk \
+ python3-transforms3d \
+ python3-yaml \
+ xvfb \
+ ros-${ROS_DISTRO}-action-msgs \
+ ros-${ROS_DISTRO}-ament-cmake \
+ ros-${ROS_DISTRO}-ament-cmake-gtest \
+ ros-${ROS_DISTRO}-ament-cmake-mypy \
+ ros-${ROS_DISTRO}-ament-cmake-python \
+ ros-${ROS_DISTRO}-ament-cmake-ros \
+ ros-${ROS_DISTRO}-ament-copyright \
+ ros-${ROS_DISTRO}-ament-flake8 \
+ ros-${ROS_DISTRO}-ament-lint-auto \
+ ros-${ROS_DISTRO}-ament-lint-common \
+ ros-${ROS_DISTRO}-ament-mypy \
+ ros-${ROS_DISTRO}-ament-pep257 \
+ ros-${ROS_DISTRO}-apriltag-ros \
+ ros-${ROS_DISTRO}-backward-ros \
+ ros-${ROS_DISTRO}-builtin-interfaces \
+ ros-${ROS_DISTRO}-camera-info-manager \
+ ros-${ROS_DISTRO}-control-toolbox \
+ ros-${ROS_DISTRO}-controller-interface \
+ ros-${ROS_DISTRO}-controller-manager \
+ ros-${ROS_DISTRO}-cv-bridge \
+ ros-${ROS_DISTRO}-demo-nodes-cpp \
+ ros-${ROS_DISTRO}-diagnostic-aggregator \
+ ros-${ROS_DISTRO}-diagnostic-msgs \
+ ros-${ROS_DISTRO}-foxglove-bridge \
+ ros-${ROS_DISTRO}-gazebo-msgs \
+ ros-${ROS_DISTRO}-generate-parameter-library \
+ ros-${ROS_DISTRO}-geometry-msgs \
+ ros-${ROS_DISTRO}-hardware-interface \
+ ros-${ROS_DISTRO}-image-proc \
+ ros-${ROS_DISTRO}-image-transport \
+ ros-${ROS_DISTRO}-imu-complementary-filter \
+ ros-${ROS_DISTRO}-joint-state-publisher \
+ ros-${ROS_DISTRO}-joint-state-publisher-gui \
+ ros-${ROS_DISTRO}-launch-xml \
+ ros-${ROS_DISTRO}-message-filters \
+ ros-${ROS_DISTRO}-moveit-core \
+ ros-${ROS_DISTRO}-moveit-kinematics \
+ ros-${ROS_DISTRO}-moveit-msgs \
+ ros-${ROS_DISTRO}-moveit-planners-ompl \
+ ros-${ROS_DISTRO}-moveit-ros \
+ ros-${ROS_DISTRO}-moveit-ros-move-group \
+ ros-${ROS_DISTRO}-moveit-ros-planning \
+ ros-${ROS_DISTRO}-moveit-ros-planning-interface \
+ ros-${ROS_DISTRO}-moveit-ros-robot-interaction \
+ ros-${ROS_DISTRO}-moveit-ros-visualization \
+ ros-${ROS_DISTRO}-moveit-setup-assistant \
+ ros-${ROS_DISTRO}-moveit-simple-controller-manager \
+ ros-${ROS_DISTRO}-nav-msgs \
+ ros-${ROS_DISTRO}-plotjuggler \
+ ros-${ROS_DISTRO}-plotjuggler \
+ ros-${ROS_DISTRO}-pluginlib \
+ ros-${ROS_DISTRO}-pybind11-vendor \
+ ros-${ROS_DISTRO}-qt-dotgraph \
+ ros-${ROS_DISTRO}-rcl \
+ ros-${ROS_DISTRO}-rclcpp \
+ ros-${ROS_DISTRO}-rclcpp-components \
+ ros-${ROS_DISTRO}-rclpy \
+ ros-${ROS_DISTRO}-rmw-cyclonedds-cpp \
+ ros-${ROS_DISTRO}-robot-state-publisher \
+ ros-${ROS_DISTRO}-ros2launch \
+ ros-${ROS_DISTRO}-ros2trace \
+ ros-${ROS_DISTRO}-rosbag2 \
+ ros-${ROS_DISTRO}-rosgraph-msgs \
+ ros-${ROS_DISTRO}-rosidl-default-generators \
+ ros-${ROS_DISTRO}-rosidl-default-runtime \
+ ros-${ROS_DISTRO}-rot-conv \
+ ros-${ROS_DISTRO}-rqt-gui \
+ ros-${ROS_DISTRO}-rqt-gui-py \
+ ros-${ROS_DISTRO}-rviz-imu-plugin \
+ ros-${ROS_DISTRO}-sensor-msgs \
+ ros-${ROS_DISTRO}-sensor-msgs-py \
+ ros-${ROS_DISTRO}-shape-msgs \
+ ros-${ROS_DISTRO}-soccer-vision-2d-msgs \
+ ros-${ROS_DISTRO}-soccer-vision-3d-msgs \
+ ros-${ROS_DISTRO}-soccer-vision-3d-rviz-markers \
+ ros-${ROS_DISTRO}-soccer-vision-attribute-msgs \
+ ros-${ROS_DISTRO}-std-msgs \
+ ros-${ROS_DISTRO}-std-srvs \
+ ros-${ROS_DISTRO}-test-msgs \
+ ros-${ROS_DISTRO}-tf-transformations \
+ ros-${ROS_DISTRO}-tf2 \
+ ros-${ROS_DISTRO}-tf2-eigen \
+ ros-${ROS_DISTRO}-tf2-geometry-msgs \
+ ros-${ROS_DISTRO}-tf2-kdl \
+ ros-${ROS_DISTRO}-tf2-ros \
+ ros-${ROS_DISTRO}-tf2-sensor-msgs \
+ ros-${ROS_DISTRO}-topic-tools \
+ ros-${ROS_DISTRO}-tracetools-acceleration \
+ ros-${ROS_DISTRO}-tracetools-analysis \
+ ros-${ROS_DISTRO}-tracetools-image-pipeline \
+ ros-${ROS_DISTRO}-tracetools-test \
+ ros-${ROS_DISTRO}-trajectory-msgs \
+ ros-${ROS_DISTRO}-transmission-interface \
+ ros-${ROS_DISTRO}-urdf \
+ ros-${ROS_DISTRO}-urdfdom-py \
+ ros-${ROS_DISTRO}-vision-msgs \
+ ros-${ROS_DISTRO}-vision-opencv \
+ ros-${ROS_DISTRO}-visualization-msgs \
+ ros-${ROS_DISTRO}-xacro \
+ && apt clean \
+ && rm -rf /var/lib/apt/lists/*
# Set up locale
-RUN echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && update-locale LANG=en_US.UTF-8
-ENV LANG en_US.UTF-8
-ENV LANGUAGE en_US:en
-ENV LC_ALL en_US.UTF-8
+RUN echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=en_US.UTF-8
-# Add user
-ARG UID=150
-RUN useradd -M -d /colcon_ws -s /bin/bash -u $UID robot
+ENV LANG=en_US.UTF-8
+ENV LANGUAGE=en_US:en
+ENV LC_ALL=en_US.UTF-8
-# Install sudoers file
-ADD sudoers /etc/sudoers
+RUN mkdir -p /colcon_ws/src \
+ && useradd -M -d /colcon_ws -s /bin/bash -u $UID robot \
+ && chown -R robot:robot /colcon_ws \
+ && echo "robot ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/robot
WORKDIR /colcon_ws
-RUN chown robot:robot /colcon_ws
USER robot:robot
ENV PATH=$PATH:/colcon_ws/.local/bin
-RUN . /opt/ros/iron/setup.sh && \
- mkdir src
-
-# Initialize rosdep
-RUN sudo rosdep init
+RUN . /opt/ros/${ROS_DISTRO}/setup.sh \
+ && sudo rosdep init
-# Add some requirements already here so that they are cached
-#RUN python3 -m pip install -U pip && \
-# pip3 install -U PyYAML construct defusedxml matplotlib numpy opencv-python \
-# protobuf psutil pytorchyolo setuptools sklearn transforms3d
+RUN mkdir -p -m 700 $HOME/.ssh \
+ && ssh-keyscan github.com >> $HOME/.ssh/known_hosts
-ADD --chown=robot:robot https://raw.githubusercontent.com/bit-bots/bitbots_main/master/requirements/common.txt src/requirements_common.txt
-
-RUN pip3 install -U -r src/requirements_common.txt --no-cache-dir && \
- pip3 uninstall -y numpy
-
-RUN cd src && \
- git clone https://github.com/bit-bots/bitbots_main.git && \
- cd bitbots_main && \
- make pull-init
+RUN --mount=type=ssh,uid=$UID git clone --branch "$BITBOTS_MAIN_BRANCH" git@github.com:bit-bots/bitbots_main.git src/bitbots_main \
+ && cd src/bitbots_main \
+ && make pull-init rosdep pip
# From here on, we don't want to cache anything. That's achieved by adding the current time.
ADD https://www.timeapi.io/api/Time/current/zone?timeZone=UTC /tmp/build-time
-RUN cd src/bitbots_main && \
- make pull-all && \
- rm -rf lib/udp_bridge bitbots_misc/bitbots_containers \
- lib/dynamic_stack_decider/dynamic_stack_decider_visualization bitbots_lowlevel \
- bitbots_robot/bitbots_pybullet_sim lib/DynamixelSDK lib/dynamixel-workbench \
- bitbots_misc/bitbots_basler_camera && \
- sed -i '/plotjuggler/d' bitbots_motion/bitbots_quintic_walk/package.xml && \
- sed -i '/run_depend/d' bitbots_robot/wolfgang_moveit_config/package.xml
-
-# Install ros dependencies with rosdep
-RUN sudo apt update && rosdep update
-RUN cd src/bitbots_main && rosdep install --rosdistro=iron --from-paths . --ignore-src -r -y
-
-RUN . /opt/ros/iron/setup.sh && colcon build --cmake-args -DBUILD_TESTING=OFF
-
-# TODO execute tests
-
-RUN cp src/bitbots_main/bitbots_robot/bitbots_robocup_api/scripts/start.sh .local/bin/start
+RUN --mount=type=ssh,uid=$UID cd src/bitbots_main \
+ && make pull-all \
+ && rm -rf bitbots_lowlevel \
+ bitbots_misc/bitbots_basler_camera \
+ bitbots_misc/bitbots_ceiling_cam \
+ bitbots_misc/bitbots_containers \
+ bitbots_motion/bitbots_animation_rqt \
+ bitbots_simulation/bitbots_pybullet_sim \
+ bitbots_team_communication/bitbots_team_data_sim_rqt \
+ bitbots_wolfgang \
+ lib/dynamic_stack_decider/dynamic_stack_decider_visualization \
+ lib/dynamixel-workbench \
+ lib/pylon-ros-camera \
+ lib/soccer_field_map_generator \
+ lib/udp_bridge \
+ && sed -i '/plotjuggler/d' bitbots_motion/bitbots_quintic_walk/package.xml
+
+# Install missing ros dependencies with rosdep
+RUN sudo apt update \
+ && rosdep update \
+ && rosdep install --rosdistro=${ROS_DISTRO} --from-paths src/bitbots_main --ignore-src -r -y \
+ && . /opt/ros/${ROS_DISTRO}/setup.sh \
+ && colcon build --cmake-args -DBUILD_TESTING=OFF
+
+RUN cp src/bitbots_main/bitbots_simulation/bitbots_robocup_api/scripts/start.sh .local/bin/start
# Volume for logs
VOLUME /robocup-logs
diff --git a/bitbots_misc/bitbots_containers/hlvs/entrypoint.sh b/bitbots_misc/bitbots_containers/hlvs/entrypoint.sh
index 4db0c6165..855bbf598 100755
--- a/bitbots_misc/bitbots_containers/hlvs/entrypoint.sh
+++ b/bitbots_misc/bitbots_containers/hlvs/entrypoint.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-source /opt/ros/iron/setup.bash
+source /opt/ros/jazzy/setup.bash
source /colcon_ws/install/setup.bash
exec "$@"
diff --git a/bitbots_misc/bitbots_containers/hlvs/sources.list b/bitbots_misc/bitbots_containers/hlvs/sources.list
deleted file mode 100644
index 19a2fca7f..000000000
--- a/bitbots_misc/bitbots_containers/hlvs/sources.list
+++ /dev/null
@@ -1,4 +0,0 @@
-deb http://de.archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
-deb http://de.archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse
-deb http://de.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
-deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
diff --git a/bitbots_misc/bitbots_containers/hlvs/sudoers b/bitbots_misc/bitbots_containers/hlvs/sudoers
deleted file mode 100644
index b589f942a..000000000
--- a/bitbots_misc/bitbots_containers/hlvs/sudoers
+++ /dev/null
@@ -1,7 +0,0 @@
-##
-## User privilege specification
-##
-## Uncomment to allow any user to run sudo if they know the password
-## of the user they are running the command as (root by default).
-# Defaults targetpw # Ask for the password of the target user
-ALL ALL=(ALL) NOPASSWD: ALL
diff --git a/bitbots_misc/bitbots_docs/docs/manual/testing/testing.rst b/bitbots_misc/bitbots_docs/docs/manual/testing/testing.rst
index e3990f5f3..4f0ce8dd0 100644
--- a/bitbots_misc/bitbots_docs/docs/manual/testing/testing.rst
+++ b/bitbots_misc/bitbots_docs/docs/manual/testing/testing.rst
@@ -49,7 +49,7 @@ Compile (compiles)
------------------
The first step is to test if the package compiles.
-Obviously this should preferably be tested on the same system that is used on the robot (Ubuntu 22.04 with the iron distribution).
+Obviously this should preferably be tested on the same system that is used on the robot (Ubuntu 24.04 with the jazzy distribution).
A part of this is to check if all dependencies are correct in the package.xml.
This is important so they can be installed with rosdep.
diff --git a/bitbots_misc/bitbots_docs/docs/manual/tutorials/cl_simulation_testing_setup.rst b/bitbots_misc/bitbots_docs/docs/manual/tutorials/cl_simulation_testing_setup.rst
index 7ce7b2331..2942f71a2 100644
--- a/bitbots_misc/bitbots_docs/docs/manual/tutorials/cl_simulation_testing_setup.rst
+++ b/bitbots_misc/bitbots_docs/docs/manual/tutorials/cl_simulation_testing_setup.rst
@@ -35,7 +35,7 @@ For compilation of the whole meta repository run ``cba``, which is an alias for:
``cd $COLCON_WS; colcon build --symlink-install --continue-on-error``
After a successful run, before we are able to use any ros commands we now need to source colcon built sources
with ``sa``, which is an alias for:
-``source "/opt/ros/iron/setup.$SHELL" && source "$COLCON_WS/install/setup.$SHELL"``
+``source "/opt/ros/jazzy/setup.$SHELL" && source "$COLCON_WS/install/setup.$SHELL"``
**3. Run Webots Simulation**
diff --git a/bitbots_misc/bitbots_docs/docs/manual/tutorials/install_software_ros2.rst b/bitbots_misc/bitbots_docs/docs/manual/tutorials/install_software_ros2.rst
index caf93aab6..176854de0 100644
--- a/bitbots_misc/bitbots_docs/docs/manual/tutorials/install_software_ros2.rst
+++ b/bitbots_misc/bitbots_docs/docs/manual/tutorials/install_software_ros2.rst
@@ -1,13 +1,13 @@
Software installation with ROS2
===============================
-In this tutorial, we will learn how to install ROS2 Iron Irwini on Ubuntu 22.04 and build our software stack.
+In this tutorial, we will learn how to install ROS2 Jazzy Jalisco on Ubuntu 24.04 and build our software stack.
**TLDR**: single command setup
------------------------------
**Prerequirements**
-- You have a running Ubuntu 22.04 environment
+- You have a running Ubuntu 24.04 environment
- You have an existing Github account and added a SSH key to your account
- You have root access to your system (sudo)
@@ -23,17 +23,17 @@ If you have not previously set up any of our software stack, you can use the fol
Manual steps with in depth explanation
--------------------------------------
-**0. Use Ubuntu 22.04**
+**0. Use Ubuntu 24.04**
As ROS works best on Ubuntu, we are using this distribution.
-Currently, ROS2 Iron runs on Ubuntu 22.04.
+Currently, ROS2 Jazzy runs on Ubuntu 24.04.
-If you are not already using Ubuntu 22.04, consider installing it on your system (perhaps as a dual boot?).
+If you are not already using Ubuntu 24.04, consider installing it on your system (perhaps as a dual boot?).
Alternatively you can use a devcontainer :doc:`vscode-dev-container`, with a preconfigured environment and follow those instructions, as these docs do not apply to the devcontainer.
**1. Setup and Install ROS 2**
-- Follow this guide and when it comes to the section **Install ROS 2 packages**, install the recommended ``ros-iron-desktop-full``: https://docs.ros.org/en/iron/Installation/Ubuntu-Install-Debians.html
+- Follow this guide and when it comes to the section **Install ROS 2 packages**, install the recommended ``ros-jazzy-desktop-full``: https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debs.html
- Install additional dependencies:
.. code-block:: bash
@@ -46,29 +46,14 @@ Alternatively you can use a devcontainer :doc:`vscode-dev-container`, with a pre
python3-pip \
python3-rosdep \
python3-vcstool \
- ros-iron-plotjuggler-ros \
- ros-iron-rmw-cyclonedds-cpp \
- ros-iron-rqt-robot-monitor \
- ros-iron-rqt-runtime-monitor
+ ros-jazzy-plotjuggler-ros \
+ ros-jazzy-rmw-cyclonedds-cpp \
+ ros-jazzy-rqt-robot-monitor \
+ ros-jazzy-rqt-runtime-monitor
- Run ``sudo rosdep init`` to initialize ``rosdep``, a tool that helps you install system dependencies for ROS packages.
-- Optionally, to get nice colored output from colcon, you can install the following pip packages:
-.. code-block:: bash
-
- python3 -m pip install \
- git+https://github.com/ruffsl/colcon-clean \
- git+https://github.com/timonegk/colcon-core.git@colors \
- git+https://github.com/timonegk/colcon-notification.git@colors \
- git+https://github.com/timonegk/colcon-output.git@colors
-
-**2. Install Webots**
-
-Webots is a robot simulator, which we use to simulate our robots and test our software.
-It is not strictly necessary to install it, but it is very useful for development and testing.
-If you want to install it, you can do so by running ``make webots`` in the bitbots_main repository.
-
-**3. Download our software**
+**2. Download our software (if not already done)**
- Create a GitHub account, if not already done (see `here `_ for further information)
- Add your SSH key to GitHub to access and sync our repositories
@@ -86,9 +71,15 @@ If you want to install it, you can do so by running ``make webots`` in the bitbo
This will take a while, as it downloads all the code and other files from our repositories and additionally installs all missing dependencies (using rosdep and pip).
Finally, it will register pre-commit hooks (automatic code-formatting and warnings), which will be run every time you commit code to our repositories.
+**3. Install Webots**
+
+Webots is a robot simulator, which we use to simulate our robots and test our software.
+It is not strictly necessary to install it, but it is very useful for development and testing.
+If you want to install it, you can do so by running ``make webots`` in the bitbots_main repository.
+
**4. Setup colcon workspace**
-`Colcon `_ is the tool provided by ROS 2 to build and install our ROS packages, so that they can be launched later.
+`Colcon `_ is the tool provided by ROS 2 to build and install our ROS packages, so that they can be launched later.
The colcon workspace is where your source code gets build and where we use colcon.
- Create colcon workspace directory (typically ``~/colcon_ws/``)
@@ -108,8 +99,11 @@ In case you are not using the bash shell, replace ``~/.bashrc`` and ``bash`` wit
# >>> bit-bots initialize >>>
+ # Add python pip bins to PATH
+ export PATH="\$HOME/.local/bin:\$PATH"
+
# Ignore some deprecation warnings
- export PYTHONWARNINGS=ignore:::setuptools.command.install,ignore:::setuptools.command.easy_install,ignore:::pkg_resources
+ export PYTHONWARNINGS="ignore:::setuptools.command.install,ignore:::setuptools.command.easy_install,ignore:::pkg_resources,ignore:easy_install command is deprecated,ignore:setup.py install is deprecated"
# Limit ROS 2 communication to localhost (can be overridden when needed)
export ROS_DOMAIN_ID=24
diff --git a/bitbots_misc/bitbots_docs/docs/manual/tutorials/vscode-ros2.rst b/bitbots_misc/bitbots_docs/docs/manual/tutorials/vscode-ros2.rst
index 75d17ec0a..23030b7cf 100644
--- a/bitbots_misc/bitbots_docs/docs/manual/tutorials/vscode-ros2.rst
+++ b/bitbots_misc/bitbots_docs/docs/manual/tutorials/vscode-ros2.rst
@@ -9,14 +9,14 @@ Navigate to your colcon workspace.
Source ros
-`source /opt/ros/iron/setup.zsh`
+`source /opt/ros/jazzy/setup.zsh`
Open VSCode
`code .`
Install the ROS extension (from Microsoft).
-You should see a `ROS2.iron` in the lower left corner.
+You should see a `ROS2.jazzy` in the lower left corner.
Now you should be able to build the code with `Ctrl+Shift+B`
diff --git a/bitbots_misc/bitbots_extrinsic_calibration/src/extrinsic_calibration.cpp b/bitbots_misc/bitbots_extrinsic_calibration/src/extrinsic_calibration.cpp
index 1530622d4..ba668a025 100644
--- a/bitbots_misc/bitbots_extrinsic_calibration/src/extrinsic_calibration.cpp
+++ b/bitbots_misc/bitbots_extrinsic_calibration/src/extrinsic_calibration.cpp
@@ -1,5 +1,4 @@
#include
-#include
#include
#include
@@ -7,6 +6,7 @@
#include
#include
#include
+#include
#include
using std::placeholders::_1;
diff --git a/bitbots_misc/bitbots_robot_description/launch/move_group.py b/bitbots_misc/bitbots_robot_description/launch/move_group.py
index d36a0f5ac..1d4749014 100644
--- a/bitbots_misc/bitbots_robot_description/launch/move_group.py
+++ b/bitbots_misc/bitbots_robot_description/launch/move_group.py
@@ -62,8 +62,17 @@ def launch_setup(context, *args, **kwargs):
ompl_planning_pipeline_config = {
"move_group": {
- "planning_plugin": "ompl_interface/OMPLPlanner",
- "request_adapters": """default_planner_request_adapters/AddTimeOptimalParameterization default_planner_request_adapters/FixWorkspaceBounds default_planner_request_adapters/FixStartStateBounds default_planner_request_adapters/FixStartStateCollision default_planner_request_adapters/FixStartStatePathConstraints""",
+ "planning_plugins": ["ompl_interface/OMPLPlanner"],
+ "request_adapters": [
+ "default_planning_request_adapters/ValidateWorkspaceBounds",
+ "default_planning_request_adapters/CheckStartStateBounds",
+ "default_planning_request_adapters/CheckStartStateCollision",
+ ],
+ "response_adapters": [
+ "default_planning_response_adapters/AddTimeOptimalParameterization",
+ "default_planning_response_adapters/ValidateSolution",
+ "default_planning_response_adapters/DisplayMotionPath",
+ ],
"start_state_max_bounds_error": 0.1,
}
}
diff --git a/bitbots_misc/bitbots_teleop/package.xml b/bitbots_misc/bitbots_teleop/package.xml
index 298625eab..15aad8159 100644
--- a/bitbots_misc/bitbots_teleop/package.xml
+++ b/bitbots_misc/bitbots_teleop/package.xml
@@ -20,6 +20,8 @@
std_msgs
tf_transformations
+ python3-pytest
+
python2
diff --git a/bitbots_misc/bitbots_teleop/setup.py b/bitbots_misc/bitbots_teleop/setup.py
index 0e1db4322..148552ede 100644
--- a/bitbots_misc/bitbots_teleop/setup.py
+++ b/bitbots_misc/bitbots_teleop/setup.py
@@ -19,6 +19,7 @@
"launch",
"setuptools",
],
+ tests_require=["pytest"],
zip_safe=True,
keywords=["ROS"],
license="MIT",
diff --git a/bitbots_misc/bitbots_tts/package.xml b/bitbots_misc/bitbots_tts/package.xml
index 096597d26..f0a86a2cc 100644
--- a/bitbots_misc/bitbots_tts/package.xml
+++ b/bitbots_misc/bitbots_tts/package.xml
@@ -11,7 +11,7 @@
Hamburg Bit-Bots
MIT
-
+
Marc Bestmann
ament_cmake
@@ -21,6 +21,8 @@
espeak
std_msgs
+ python3-pytest
+
broken
diff --git a/bitbots_misc/bitbots_tts/setup.py b/bitbots_misc/bitbots_tts/setup.py
index 29cedacd8..9d702643b 100644
--- a/bitbots_misc/bitbots_tts/setup.py
+++ b/bitbots_misc/bitbots_tts/setup.py
@@ -6,7 +6,7 @@
setup(
name=package_name,
- packages=find_packages(),
+ packages=find_packages(exclude=["test"]),
data_files=[
("share/" + package_name, ["package.xml"]),
("share/ament_index/resource_index/packages", ["resource/" + package_name]),
@@ -16,6 +16,7 @@
install_requires=[
"setuptools",
],
+ tests_require=["pytest"],
scripts=glob.glob("scripts/*"),
entry_points={
"console_scripts": [
diff --git a/bitbots_misc/bitbots_utils/bitbots_utils/utils.py b/bitbots_misc/bitbots_utils/bitbots_utils/utils.py
index ac338987a..693a92ad0 100644
--- a/bitbots_misc/bitbots_utils/bitbots_utils/utils.py
+++ b/bitbots_misc/bitbots_utils/bitbots_utils/utils.py
@@ -56,7 +56,7 @@ def get_parameters_from_ros_yaml(node_name: str, parameter_file: str, use_wildca
if param_keys == []:
raise RuntimeError(
- f"Param file does not contain parameters for {node_name}, " f" only for nodes: {param_file.keys()}"
+ f"Param file does not contain parameters for {node_name}, only for nodes: {param_file.keys()}"
)
param_dict = {}
for k in param_keys:
diff --git a/bitbots_misc/bitbots_utils/scripts/motor_goals_viz_helper.py b/bitbots_misc/bitbots_utils/scripts/motor_goals_viz_helper.py
index a8221e942..49d563501 100755
--- a/bitbots_misc/bitbots_utils/scripts/motor_goals_viz_helper.py
+++ b/bitbots_misc/bitbots_utils/scripts/motor_goals_viz_helper.py
@@ -68,11 +68,11 @@ def __init__(self):
float(0),
0.7,
float(-1),
- float(-0.4),
+ -0.4,
float(0),
float(0),
float(0),
- float(-0.7),
+ -0.7,
float(1),
0.4,
float(0),
diff --git a/bitbots_misc/bitbots_utils/src/utils.cpp b/bitbots_misc/bitbots_utils/src/utils.cpp
index a0aea990a..2131dec2e 100644
--- a/bitbots_misc/bitbots_utils/src/utils.cpp
+++ b/bitbots_misc/bitbots_utils/src/utils.cpp
@@ -1,4 +1,4 @@
-#include "bitbots_utils/utils.hpp"
+#include
namespace bitbots_utils {
diff --git a/bitbots_misc/system_monitor/package.xml b/bitbots_misc/system_monitor/package.xml
index 46545bde4..4284ff58c 100644
--- a/bitbots_misc/system_monitor/package.xml
+++ b/bitbots_misc/system_monitor/package.xml
@@ -11,7 +11,7 @@
Hamburg Bit-Bots
MIT
-
+
Finn-Thorben Sell
ament_cmake
@@ -21,7 +21,10 @@
rclpy
bitbots_msgs
- ament_python
+ python3-pytest
+
+
+ ament_python
-
+
diff --git a/bitbots_misc/system_monitor/setup.py b/bitbots_misc/system_monitor/setup.py
index eb10b08e6..0de29d43a 100644
--- a/bitbots_misc/system_monitor/setup.py
+++ b/bitbots_misc/system_monitor/setup.py
@@ -6,7 +6,7 @@
setup(
name=package_name,
- packages=find_packages(),
+ packages=find_packages(exclude=["test"]),
data_files=[
("share/" + package_name, ["package.xml"]),
("share/ament_index/resource_index/packages", ["resource/" + package_name]),
@@ -18,6 +18,7 @@
install_requires=[
"setuptools",
],
+ tests_require=["pytest"],
entry_points={
"console_scripts": [
"monitor = system_monitor.monitor:main",
diff --git a/bitbots_motion/bitbots_animation_rqt/bitbots_animation_rqt/animation_recording.py b/bitbots_motion/bitbots_animation_rqt/bitbots_animation_rqt/animation_recording.py
index 075036004..24c5fe077 100644
--- a/bitbots_motion/bitbots_animation_rqt/bitbots_animation_rqt/animation_recording.py
+++ b/bitbots_motion/bitbots_animation_rqt/bitbots_animation_rqt/animation_recording.py
@@ -240,7 +240,7 @@ def save_animation(self, path: str, file_name: Optional[str] = None) -> str:
with open(path, "w") as fp:
json.dump(animation_dict, fp, sort_keys=True, indent=4)
- return "Saving to '%s'" % path + ". Done."
+ return f"Saving to '{path}'. Done."
def load_animation(self, path: str) -> Optional[str]:
"""Record command, load a animation '.json' file
@@ -298,9 +298,9 @@ def play(self, from_frame: int = 0, until_frame: int = -1) -> tuple[str, bool]:
else:
# Check if the given frame id is in bounds
assert until_frame > 0, "Upper bound must be positive"
- assert until_frame <= len(
- self.current_state.key_frames
- ), "Upper bound must be less than or equal to the number of frames"
+ assert until_frame <= len(self.current_state.key_frames), (
+ "Upper bound must be less than or equal to the number of frames"
+ )
assert from_frame >= 0, "Lower bound must be positive"
# Create name for the temporary animation that is send to the animation server
diff --git a/bitbots_motion/bitbots_animation_rqt/bitbots_animation_rqt/utils.py b/bitbots_motion/bitbots_animation_rqt/bitbots_animation_rqt/utils.py
index 6217bed78..688a2c8be 100644
--- a/bitbots_motion/bitbots_animation_rqt/bitbots_animation_rqt/utils.py
+++ b/bitbots_motion/bitbots_animation_rqt/bitbots_animation_rqt/utils.py
@@ -21,8 +21,8 @@ def dropEvent(self, e): # noqa: N802
# fmt: on
super().dropEvent(e)
items = []
- for i in range(0, self.count()):
- items.append(self.item(i).text())
+ for i in range(self.count()):
+ items.append(self.item(i).text()) # type: ignore[union-attr]
self.frame_order_callback(items)
# fmt: off
diff --git a/bitbots_motion/bitbots_animation_rqt/package.xml b/bitbots_motion/bitbots_animation_rqt/package.xml
index f8af2aefb..2801efdac 100644
--- a/bitbots_motion/bitbots_animation_rqt/package.xml
+++ b/bitbots_motion/bitbots_animation_rqt/package.xml
@@ -23,6 +23,8 @@
std_srvs
ament_mypy
+ python3-pytest
+
diff --git a/bitbots_motion/bitbots_animation_rqt/setup.py b/bitbots_motion/bitbots_animation_rqt/setup.py
index 45e680dd3..639dc194a 100644
--- a/bitbots_motion/bitbots_animation_rqt/setup.py
+++ b/bitbots_motion/bitbots_animation_rqt/setup.py
@@ -4,7 +4,7 @@
setup(
name=package_name,
- packages=find_packages(),
+ packages=find_packages(exclude=["test"]),
data_files=[
("share/" + package_name + "/resource", ["resource/RecordUI.ui"]),
("share/ament_index/resource_index/packages", ["resource/" + package_name]),
@@ -12,8 +12,8 @@
("share/" + package_name, ["plugin.xml"]),
],
install_requires=["setuptools"],
- zip_safe=True,
tests_require=["pytest"],
+ zip_safe=True,
entry_points={
"console_scripts": [
"animation_gui = " + package_name + ".record_ui:main",
diff --git a/bitbots_motion/bitbots_animation_server/bitbots_animation_server/resource_manager.py b/bitbots_motion/bitbots_animation_server/bitbots_animation_server/resource_manager.py
index 315f23466..262d5f775 100644
--- a/bitbots_motion/bitbots_animation_server/bitbots_animation_server/resource_manager.py
+++ b/bitbots_motion/bitbots_animation_server/bitbots_animation_server/resource_manager.py
@@ -71,12 +71,8 @@ def search(self, path, folders, filename=""):
path = next_path
if not folders:
- return OSError(
- "Resource '%s' not found. folders was empty, \
- only filename provided"
- % (filename)
- )
- return OSError("Resource '%s' not found" % (str(folders) + filename))
+ return OSError(f"Resource '{filename}' not found. folders was empty, only filename provided")
+ return OSError(f"Resource '{str(folders) + filename}' not found")
def find(self, name, filename=""):
"""
@@ -115,7 +111,7 @@ def find_animation(self, name):
should be given without ``.json``.
path = find_animation('walkready')
"""
- return self.find(self.animpath, "%s.json" % name)
+ return self.find(self.animpath, f"{name}.json")
def find_resource(self, name):
"""Finds a resource relative to self.basepath"""
diff --git a/bitbots_motion/bitbots_animation_server/package.xml b/bitbots_motion/bitbots_animation_server/package.xml
index a1e94693e..3b00445bf 100644
--- a/bitbots_motion/bitbots_animation_server/package.xml
+++ b/bitbots_motion/bitbots_animation_server/package.xml
@@ -23,6 +23,8 @@
std_msgs
ament_mypy
+ python3-pytest
+
tested_integration
diff --git a/bitbots_motion/bitbots_animation_server/setup.py b/bitbots_motion/bitbots_animation_server/setup.py
index 7a1b78643..c41689c5f 100644
--- a/bitbots_motion/bitbots_animation_server/setup.py
+++ b/bitbots_motion/bitbots_animation_server/setup.py
@@ -18,10 +18,10 @@
"launch",
"setuptools",
],
+ tests_require=["pytest"],
zip_safe=True,
keywords=["ROS"],
license="MIT",
- tests_require=["pytest"],
entry_points={
"console_scripts": [
"animation_node = bitbots_animation_server.animation_node:main",
diff --git a/bitbots_motion/bitbots_dynamic_kick/CMakeLists.txt b/bitbots_motion/bitbots_dynamic_kick/CMakeLists.txt
index e9ca70b50..fa4fccec7 100644
--- a/bitbots_motion/bitbots_dynamic_kick/CMakeLists.txt
+++ b/bitbots_motion/bitbots_dynamic_kick/CMakeLists.txt
@@ -17,7 +17,6 @@ find_package(biped_interfaces REQUIRED)
find_package(bitbots_docs REQUIRED)
find_package(bitbots_msgs REQUIRED)
find_package(bitbots_splines REQUIRED)
-find_package(control_msgs REQUIRED)
find_package(control_toolbox REQUIRED)
find_package(Eigen3 REQUIRED)
find_package(geometry_msgs REQUIRED)
@@ -32,7 +31,7 @@ find_package(tf2_eigen REQUIRED)
find_package(tf2_geometry_msgs REQUIRED)
find_package(tf2_ros REQUIRED)
-find_package(PythonLibs COMPONENTS Interpreter Development)
+find_package(Python3 COMPONENTS Interpreter Development)
rosidl_generate_interfaces(${PROJECT_NAME} "msg/KickDebug.msg" DEPENDENCIES
std_msgs geometry_msgs Python3)
@@ -53,7 +52,6 @@ ament_target_dependencies(
biped_interfaces
bitbots_msgs
bitbots_splines
- control_msgs
control_toolbox
geometry_msgs
moveit_ros_planning_interface
@@ -76,7 +74,7 @@ target_link_libraries(KickNode "${cpp_typesupport_target}")
# pybind11_add_module(py_dynamic_kick SHARED src/walk_pywrapper.cpp ${SOURCES})
# ament_target_dependencies(py_dynamic_kick PUBLIC ament_cmake biped_interfaces
-# bitbots_msgs bitbots_splines control_msgs control_toolbox geometry_msgs
+# bitbots_msgs bitbots_splines control_toolbox geometry_msgs
# moveit_ros_planning_interface rclcpp ros2_python_extension rot_conv
# sensor_msgs std_msgs tf2 tf2_eigen tf2_geometry_msgs tf2_ros)
# target_link_libraries(py_dynamic_kick PRIVATE "${cpp_typesupport_target}")
diff --git a/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_engine.hpp b/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_engine.hpp
index b9d9c1e50..87dd56cd4 100644
--- a/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_engine.hpp
+++ b/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_engine.hpp
@@ -2,9 +2,6 @@
#define BITBOTS_DYNAMIC_KICK_INCLUDE_BITBOTS_DYNAMIC_KICK_KICK_ENGINE_H_
#include
-#include
-#include
-#include
#include
#include
@@ -13,6 +10,9 @@
#include
#include
#include
+#include
+#include
+#include
#include
#include
diff --git a/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_ik.hpp b/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_ik.hpp
index 894a05bd9..1cd86bacc 100644
--- a/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_ik.hpp
+++ b/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_ik.hpp
@@ -1,18 +1,17 @@
#ifndef BITBOTS_DYNAMIC_KICK_INCLUDE_BITBOTS_DYNAMIC_KICK_KICK_IK_H_
#define BITBOTS_DYNAMIC_KICK_INCLUDE_BITBOTS_DYNAMIC_KICK_KICK_IK_H_
-#include
-#include
-
#include
#include
#include
+#include
+#include
namespace bitbots_dynamic_kick {
class KickIK : public bitbots_splines::AbstractIK {
public:
- KickIK() = default;
+ KickIK() : legs_joints_group_(), left_leg_joints_group_(), right_leg_joints_group_(){};
void init(moveit::core::RobotModelPtr kinematic_model) override;
bitbots_splines::JointGoals calculate(const KickPositions &positions) override;
void reset() override;
diff --git a/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.hpp b/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.hpp
index 926c23a90..70214945c 100644
--- a/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.hpp
+++ b/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.hpp
@@ -1,7 +1,6 @@
#ifndef BITBOTS_DYNAMIC_KICK_INCLUDE_BITBOTS_DYNAMIC_KICK_KICK_NODE_H_
#define BITBOTS_DYNAMIC_KICK_INCLUDE_BITBOTS_DYNAMIC_KICK_KICK_NODE_H_
-#include
#include
#include
@@ -20,6 +19,7 @@
#include
#include
#include
+#include
#include
namespace bitbots_dynamic_kick {
diff --git a/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_pywrapper.hpp b/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_pywrapper.hpp
index 5336cb7b5..1cc5083a3 100644
--- a/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_pywrapper.hpp
+++ b/bitbots_motion/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_pywrapper.hpp
@@ -2,13 +2,13 @@
#define BITBOTS_DYNAMIC_KICK_INCLUDE_BITBOTS_DYNAMIC_KICK_KICK_PYWRAPPER_H_
#include
-#include
#include
#include
#include
#include
#include