From c6e7c1d23003c91f8080f5eafed04f9d1af1d309 Mon Sep 17 00:00:00 2001 From: Jakub Delicat Date: Fri, 26 Jul 2024 14:14:12 +0200 Subject: [PATCH] hardware jazzy with namespaces Signed-off-by: Jakub Delicat --- rosbot/rosbot_hardware.repos | 2 +- rosbot_bringup/package.xml | 3 +- .../config/diff_drive_controller.yaml | 3 +- .../config/mecanum_drive_controller.yaml | 3 +- rosbot_controller/launch/controller.launch.py | 15 +++++-- rosbot_controller/package.xml | 4 +- .../urdf/rosbot_macro.urdf.xacro | 6 +-- rosbot_description/urdf/wheel.urdf.xacro | 28 +++++++------ tools/Dockerfile.dev | 27 ++++++------ tools/compose.dev.yaml | 41 ++++++++++++++----- 10 files changed, 81 insertions(+), 51 deletions(-) diff --git a/rosbot/rosbot_hardware.repos b/rosbot/rosbot_hardware.repos index f5dbdf86..4813fcdc 100644 --- a/rosbot/rosbot_hardware.repos +++ b/rosbot/rosbot_hardware.repos @@ -11,7 +11,7 @@ repositories: husarion_controllers: type: git url: https://github.com/husarion/husarion_controllers - version: 217b09830f5f42930098b9992eda41710702b625 + version: jazzy # Waiting for backporting to the humble version # https://github.com/ros-controls/ros2_controllers/pull/726 and # https://github.com/ros-controls/ros2_controllers/pull/831 diff --git a/rosbot_bringup/package.xml b/rosbot_bringup/package.xml index d88edc1b..9b42d34e 100644 --- a/rosbot_bringup/package.xml +++ b/rosbot_bringup/package.xml @@ -18,8 +18,7 @@ launch_ros rosbot_controller robot_localization - micro_ros_agent - micro_ros_msgs + python3-pytest launch diff --git a/rosbot_controller/config/diff_drive_controller.yaml b/rosbot_controller/config/diff_drive_controller.yaml index cd723b26..236a394d 100644 --- a/rosbot_controller/config/diff_drive_controller.yaml +++ b/rosbot_controller/config/diff_drive_controller.yaml @@ -15,7 +15,7 @@ tf_frame_prefix_enable: false use_namespace_as_sensor_name_prefix: true - sensor_name: imu + sensor_name: /imu frame_id: imu_link static_covariance_orientation: [1.9e-3, 0.0, 0.0, 0.0, 1.9e-3, 0.0, 0.0, 0.0, 1.9e-3] # Values taken from datasheet static_covariance_angular_velocity: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0e-3] # Values measured experimentally @@ -60,7 +60,6 @@ cmd_vel_timeout: 0.5 #publish_limited_velocity: true - use_stamped_vel: false # Velocity and acceleration limits # Whenever a min_* is unspecified, default to -max_* diff --git a/rosbot_controller/config/mecanum_drive_controller.yaml b/rosbot_controller/config/mecanum_drive_controller.yaml index 4dc3691b..766a80dd 100644 --- a/rosbot_controller/config/mecanum_drive_controller.yaml +++ b/rosbot_controller/config/mecanum_drive_controller.yaml @@ -15,7 +15,7 @@ tf_frame_prefix_enable: false use_namespace_as_sensor_name_prefix: true - sensor_name: imu + sensor_name: /imu frame_id: imu_link static_covariance_orientation: [1.9e-3, 0.0, 0.0, 0.0, 1.9e-3, 0.0, 0.0, 0.0, 1.9e-3] # Values taken from datasheet static_covariance_angular_velocity: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0e-3] # Values based on diff_drive @@ -59,7 +59,6 @@ cmd_vel_timeout: 0.5 #publish_limited_velocity: true - use_stamped_vel: false # Velocity and acceleration limits # Whenever a min_* is unspecified, default to -max_* diff --git a/rosbot_controller/launch/controller.launch.py b/rosbot_controller/launch/controller.launch.py index 8351d695..723de928 100644 --- a/rosbot_controller/launch/controller.launch.py +++ b/rosbot_controller/launch/controller.launch.py @@ -25,6 +25,7 @@ ) from launch_ros.actions import Node, SetParameter from launch_ros.substitutions import FindPackageShare +from nav2_common.launch import ReplaceString def generate_launch_description(): @@ -109,7 +110,7 @@ def generate_launch_description(): ) robot_description = {"robot_description": robot_description_content} - robot_controllers = PathJoinSubstitution( + robot_controllers_config = PathJoinSubstitution( [ FindPackageShare("rosbot_controller"), "config", @@ -117,18 +118,26 @@ def generate_launch_description(): ] ) + namespaced_robot_controllers_config = ReplaceString( + source_file=robot_controllers_config, + replacements={ + "": namespace, + "//": "/" + }, + ) + control_node = Node( package="controller_manager", executable="ros2_control_node", parameters=[ robot_description, - robot_controllers, + namespaced_robot_controllers_config, ], remappings=[ ("imu_sensor_node/imu", "/_imu/data_raw"), ("~/motors_cmd", "/_motors_cmd"), ("~/motors_response", "/_motors_response"), - ("rosbot_base_controller/cmd_vel_unstamped", "cmd_vel"), + ("rosbot_base_controller/cmd_vel", "cmd_vel"), ("/tf", "tf"), ("/tf_static", "tf_static"), ], diff --git a/rosbot_controller/package.xml b/rosbot_controller/package.xml index d58c7ce3..67bcb01b 100644 --- a/rosbot_controller/package.xml +++ b/rosbot_controller/package.xml @@ -17,6 +17,7 @@ launch launch_ros + nav2_common xacro controller_manager @@ -29,8 +30,7 @@ joint_state_broadcaster imu_sensor_broadcaster diff_drive_controller - - + mecanum_drive_controller python3-pytest launch diff --git a/rosbot_description/urdf/rosbot_macro.urdf.xacro b/rosbot_description/urdf/rosbot_macro.urdf.xacro index 48b30f2c..cc891462 100644 --- a/rosbot_description/urdf/rosbot_macro.urdf.xacro +++ b/rosbot_description/urdf/rosbot_macro.urdf.xacro @@ -70,7 +70,7 @@ - ign_ros2_control/IgnitionSystem + gz_ros2_control/GazeboSimSystem webots_ros2_control::Ros2ControlSystem @@ -121,7 +121,7 @@ - + $(find rosbot_controller)/config/mecanum_drive_controller.yaml @@ -134,7 +134,7 @@ ${namespace} - rosbot_base_controller/cmd_vel_unstamped:=cmd_vel + rosbot_base_controller/cmd_vel:=cmd_vel /tf:=tf diff --git a/rosbot_description/urdf/wheel.urdf.xacro b/rosbot_description/urdf/wheel.urdf.xacro index e9d5057e..6f88e481 100644 --- a/rosbot_description/urdf/wheel.urdf.xacro +++ b/rosbot_description/urdf/wheel.urdf.xacro @@ -90,19 +90,21 @@ - - - - - - 1.0 - 0.0 - ${fdir} - - - - - + + + + + + + 1.0 + 0.0 + ${fdir} + + + + + + diff --git a/tools/Dockerfile.dev b/tools/Dockerfile.dev index 76ff00e0..3667c405 100644 --- a/tools/Dockerfile.dev +++ b/tools/Dockerfile.dev @@ -1,9 +1,9 @@ -ARG ROS_DISTRO=humble +ARG ROS_DISTRO=jazzy ARG PREFIX= ARG HUSARION_ROS_BUILD_TYPE=hardware ## =========================== ROS builder =============================== -FROM husarnet/ros:${PREFIX}${ROS_DISTRO}-ros-base AS ros_builder +FROM rosbot-jazzy-rosdep ARG ROS_DISTRO ARG PREFIX @@ -12,20 +12,21 @@ ARG HUSARION_ROS_BUILD_TYPE ENV HUSARION_ROS_BUILD_TYPE=${HUSARION_ROS_BUILD_TYPE} WORKDIR /ros2_ws -RUN mkdir src - -COPY ./ src/ +RUN mkdir -p src RUN apt-get update && apt-get install -y \ python3-pip \ - stm32flash - -RUN vcs import src < src/rosbot/rosbot_hardware.repos && \ - if [ "$HUSARION_ROS_BUILD_TYPE" == "simulation" ]; then \ - vcs import src < src/rosbot/rosbot_simulation.repos; \ - else \ - rm -rf src/rosbot_gazebo; \ - fi && \ + stm32flash python3-periphery python3-ftdi + + +COPY ./ src/ +# RUN vcs import src < src/rosbot/rosbot_hardware.repos && \ +# if [ "$HUSARION_ROS_BUILD_TYPE" == "simulation" ]; then \ +# vcs import src < src/rosbot/rosbot_simulation.repos; \ +# else \ +# rm -rf src/rosbot_gazebo; \ +# fi && \ +RUN rm -rf src/rosbot_gazebo; rm -rf src/rosbot_controllers/mecanum_drive_controller \ rm -rf /etc/ros/rosdep/sources.list.d/20-default.list && \ rosdep init && \ rosdep update --rosdistro $ROS_DISTRO && \ diff --git a/tools/compose.dev.yaml b/tools/compose.dev.yaml index daf1af49..01e58b2e 100644 --- a/tools/compose.dev.yaml +++ b/tools/compose.dev.yaml @@ -10,16 +10,37 @@ services: build: context: ../ dockerfile: tools/Dockerfile.dev + network_mode: host + ipc: host # privileged: true # GPIO - devices: - - ${SERIAL_PORT:?err} - - /dev/bus/usb/ #FTDI + # devices: + # - ${SERIAL_PORT:?err} + # - /dev/bus/usb/ #FTDI volumes: - ../rosbot_utils:/ros2_ws/src/rosbot_utils - command: tail -f /dev/null - # command: > - # ros2 launch rosbot_bringup combined.launch.py - # mecanum:=${MECANUM:-False} - # serial_port:=$SERIAL_PORT - # serial_baudrate:=576000 - # namespace:=robot1 + # command: tail -f /dev/null + environment: + - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp + command: > + ros2 launch rosbot_bringup bringup.launch.py + mecanum:=${MECANUM:-False} + namespace:=rosbot + rviz: + image: husarion/rviz2:jazzy-jazzy + # build: + # context: .. + # dockerfile: Dockerfile + network_mode: host + ipc: host + runtime: nvidia + volumes: + - /tmp/.X11-unix:/tmp/.X11-unix:rw + # - ./rosbot.rviz:/root/.rviz2/default.rviz + environment: + - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp + - ROS_DOMAIN_ID + - DISPLAY + - NVIDIA_VISIBLE_DEVICES=all + - NVIDIA_DRIVER_CAPABILITIES=all + command: > + rviz2 --ros-args -r __ns:=/rosbot -r /tf:=tf -r /tf_static:=tf_static