├── .gitignore
├── .github
├── CODEOWNERS
├── ISSUE_TEMPLATE
│ ├── BUG_REPORT.md
│ └── FEATURE_REQUEST.md
├── workflows
│ └── ci.yml
└── PULL_REQUEST_TEMPLATE.md
├── irobot_create_gz
├── irobot_create_gz_plugins
│ ├── README.md
│ ├── Create3Hmi
│ │ ├── Create3Hmi.config
│ │ ├── images
│ │ │ ├── Power.png
│ │ │ ├── One Dot.png
│ │ │ └── Two Dots.png
│ │ ├── Create3Hmi.qrc
│ │ ├── CMakeLists.txt
│ │ ├── Create3Hmi.hh
│ │ ├── Create3Hmi.cc
│ │ └── Create3Hmi.qml
│ ├── CMakeLists.txt
│ ├── package.xml
│ └── CHANGELOG.rst
├── irobot_create_gz_sim
│ ├── CMakeLists.txt
│ ├── package.xml
│ └── CHANGELOG.rst
├── irobot_create_gz_toolbox
│ ├── src
│ │ ├── sensors
│ │ │ ├── sensors_main.cpp
│ │ │ ├── sensors_node.cpp
│ │ │ ├── mouse.cpp
│ │ │ ├── cliff.cpp
│ │ │ ├── wheel_drop.cpp
│ │ │ ├── ir_intensity.cpp
│ │ │ └── bumper.cpp
│ │ ├── pose_republisher
│ │ │ └── pose_republisher_main.cpp
│ │ └── interface_buttons
│ │ │ ├── interface_buttons_main.cpp
│ │ │ └── interface_buttons_node.cpp
│ ├── include
│ │ └── irobot_create_gz_toolbox
│ │ │ ├── sensors
│ │ │ ├── ir_intensity.hpp
│ │ │ ├── cliff.hpp
│ │ │ ├── mouse.hpp
│ │ │ ├── wheel_drop.hpp
│ │ │ ├── sensors_node.hpp
│ │ │ ├── bumper.hpp
│ │ │ └── ir_opcode.hpp
│ │ │ ├── interface_buttons
│ │ │ └── interface_buttons_node.hpp
│ │ │ ├── pose_republisher
│ │ │ └── pose_republisher.hpp
│ │ │ └── utils.hpp
│ ├── package.xml
│ ├── CMakeLists.txt
│ └── CHANGELOG.rst
└── irobot_create_gz_bringup
│ ├── config
│ ├── pose_republisher_params.yaml
│ └── sensors_params.yaml
│ ├── CMakeLists.txt
│ ├── README.md
│ ├── worlds
│ └── depot.sdf
│ ├── package.xml
│ ├── launch
│ ├── create3_gz_nodes.launch.py
│ ├── create3_gz.launch.py
│ └── sim.launch.py
│ └── gui
│ └── create3
│ └── gui.config
├── irobot_create_common
├── irobot_create_common_bringup
│ ├── irobot_create_common_bringup
│ │ ├── __init__.py
│ │ ├── namespace.py
│ │ └── offset.py
│ ├── rviz
│ │ └── irobot_logo.jpg
│ ├── config
│ │ ├── mock_params.yaml
│ │ ├── kidnap_estimator_params.yaml
│ │ ├── ui_mgr_params.yaml
│ │ ├── wheel_status_params.yaml
│ │ ├── ir_intensity_vector_params.yaml
│ │ ├── hazard_vector_params.yaml
│ │ └── robot_state_params.yaml
│ ├── CMakeLists.txt
│ ├── launch
│ │ ├── rviz2.launch.py
│ │ ├── robot_description.launch.py
│ │ └── dock_description.launch.py
│ └── package.xml
├── irobot_create_toolbox
│ ├── README.md
│ ├── src
│ │ └── polar_coordinates.cpp
│ ├── include
│ │ └── irobot_create_toolbox
│ │ │ ├── polar_coordinates.hpp
│ │ │ ├── sensors
│ │ │ └── bumpers.hpp
│ │ │ └── math.hpp
│ ├── package.xml
│ ├── CMakeLists.txt
│ └── CHANGELOG.rst
├── irobot_create_nodes
│ ├── README.md
│ ├── include
│ │ └── irobot_create_nodes
│ │ │ ├── mock_publisher.hpp
│ │ │ ├── hazards_vector_publisher.hpp
│ │ │ ├── kidnap_estimator_publisher.hpp
│ │ │ ├── ir_intensity_vector_publisher.hpp
│ │ │ ├── wheels_publisher.hpp
│ │ │ ├── motion_control
│ │ │ ├── behaviors_scheduler.hpp
│ │ │ └── wall_follow_behavior.hpp
│ │ │ ├── robot_state.hpp
│ │ │ └── ui_mgr.hpp
│ ├── package.xml
│ ├── src
│ │ ├── mock_publisher.cpp
│ │ ├── hazards_vector_publisher.cpp
│ │ ├── ir_intensity_vector_publisher.cpp
│ │ └── kidnap_estimator_publisher.cpp
│ └── CHANGELOG.rst
├── irobot_create_control
│ ├── CMakeLists.txt
│ ├── package.xml
│ ├── config
│ │ └── control.yaml
│ └── launch
│ │ └── include
│ │ └── control.py
└── irobot_create_description
│ ├── CMakeLists.txt
│ ├── urdf
│ ├── button.urdf.xacro
│ ├── wheel_with_wheeldrop.urdf.xacro
│ ├── sensors
│ │ ├── optical_mouse.urdf.xacro
│ │ ├── ir_intensity.urdf.xacro
│ │ ├── cliff_sensor.urdf.xacro
│ │ ├── imu.urdf.xacro
│ │ └── ir_opcode_receivers.urdf.xacro
│ ├── caster.urdf.xacro
│ ├── dock
│ │ ├── ir_emitter.urdf.xacro
│ │ └── standard_dock.urdf.xacro
│ ├── wheel.urdf.xacro
│ ├── wheel_drop.urdf.xacro
│ └── bumper.urdf.xacro
│ ├── package.xml
│ └── CHANGELOG.rst
├── LICENSE
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | .vscode
2 | __pycache__
3 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @alsora @justinIRBT
2 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_plugins/README.md:
--------------------------------------------------------------------------------
1 | # turtlebot4_gz_gui_plugins
2 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/irobot_create_common_bringup/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_plugins/Create3Hmi/Create3Hmi.config:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_toolbox/README.md:
--------------------------------------------------------------------------------
1 | # iRobot Create3 Toolbox
2 |
3 | Utilities and tools for building Create 3 nodes.
4 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_sim/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.5)
2 | project(irobot_create_gz_sim)
3 | find_package(ament_cmake REQUIRED)
4 | ament_package()
5 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/rviz/irobot_logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iRobotEducation/create3_sim/HEAD/irobot_create_common/irobot_create_common_bringup/rviz/irobot_logo.jpg
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_plugins/Create3Hmi/images/Power.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iRobotEducation/create3_sim/HEAD/irobot_create_gz/irobot_create_gz_plugins/Create3Hmi/images/Power.png
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_plugins/Create3Hmi/images/One Dot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iRobotEducation/create3_sim/HEAD/irobot_create_gz/irobot_create_gz_plugins/Create3Hmi/images/One Dot.png
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_plugins/Create3Hmi/images/Two Dots.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iRobotEducation/create3_sim/HEAD/irobot_create_gz/irobot_create_gz_plugins/Create3Hmi/images/Two Dots.png
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/config/mock_params.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | /**:
3 | mock_publisher:
4 | ros__parameters:
5 | # Mock slip status publisher topic
6 | slip_status_topic: slip_status
7 | # Publishers rate
8 | slip_status_publish_rate: 62.0
9 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_nodes/README.md:
--------------------------------------------------------------------------------
1 | # iRobot® Create® 3 Nodes
2 |
3 | This package contains a set of nodes used for simulating a iRobot® Create® 3 robot.
4 | Each node is defined in its own shared library and registered using `rclcpp_components` to allow run-time composition in applications.
5 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/config/kidnap_estimator_params.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | /**:
3 | kidnap_estimator_publisher:
4 | ros__parameters:
5 | # Kidnap status publisher topic
6 | kidnap_status_topic: kidnap_status
7 | # Subscription topics
8 | hazard_topic: hazard_detection
9 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_plugins/Create3Hmi/Create3Hmi.qrc:
--------------------------------------------------------------------------------
1 |
2 |
3 | Create3Hmi.qml
4 | images/One Dot.png
5 | images/Power.png
6 | images/Two Dots.png
7 |
8 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/config/ui_mgr_params.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | /**:
3 | ui_mgr:
4 | ros__parameters:
5 | # Buttons publisher topic
6 | button_topic: interface_buttons
7 | # Publishers rate
8 | buttons_publish_rate: 1.0
9 | # Subscription topics
10 | lightring_topic: cmd_lightring
11 | audio_topic: cmd_audio
12 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_control/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.5)
2 |
3 | project(irobot_create_control)
4 |
5 | find_package(ament_cmake REQUIRED)
6 |
7 | install(
8 | DIRECTORY
9 | launch
10 | config
11 | DESTINATION
12 | share/${PROJECT_NAME}/
13 | )
14 |
15 | if(BUILD_TESTING)
16 | find_package(ament_lint_auto REQUIRED)
17 | ament_lint_auto_find_test_dependencies()
18 | endif()
19 |
20 | ament_package()
21 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_description/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.5)
2 |
3 | project(irobot_create_description)
4 |
5 | find_package(ament_cmake REQUIRED)
6 |
7 | install(
8 | DIRECTORY
9 | meshes
10 | urdf
11 | DESTINATION
12 | share/${PROJECT_NAME}/
13 | )
14 |
15 | if(BUILD_TESTING)
16 | find_package(ament_lint_auto REQUIRED)
17 | ament_lint_auto_find_test_dependencies()
18 | endif()
19 |
20 | ament_package()
21 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_description/urdf/button.urdf.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/config/wheel_status_params.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | /**:
3 | wheel_status_publisher:
4 | ros__parameters:
5 | # Publish rate
6 | publish_rate: 62.0
7 | # Encoder resolution
8 | encoder_resolution: 508.8
9 | # Wheel radius
10 | wheel_radius: 0.03575
11 | # Wheels angular velocity topic
12 | velocity_topic: wheel_vels
13 | # Wheels' net encoder ticks topic
14 | ticks_topic: wheel_ticks
15 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_toolbox/src/sensors/sensors_main.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 Clearpath Robotics, Inc.
3 | * @author Roni Kreinin (rkreinin@clearpathrobotics.com)
4 | */
5 |
6 | #include
7 |
8 | #include "irobot_create_gz_toolbox/sensors/sensors_node.hpp"
9 |
10 | int main(int argc, char * argv[])
11 | {
12 | rclcpp::init(argc, argv);
13 | rclcpp::spin(std::make_shared());
14 | rclcpp::shutdown();
15 | return 0;
16 | }
17 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_toolbox/src/pose_republisher/pose_republisher_main.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 Clearpath Robotics, Inc.
3 | * @author Roni Kreinin (rkreinin@clearpathrobotics.com)
4 | */
5 |
6 | #include "irobot_create_gz_toolbox/pose_republisher/pose_republisher.hpp"
7 | #include
8 |
9 | int main(int argc, char * argv[])
10 | {
11 | rclcpp::init(argc, argv);
12 | rclcpp::spin(std::make_shared());
13 | rclcpp::shutdown();
14 | return 0;
15 | }
16 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_toolbox/src/interface_buttons/interface_buttons_main.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 Clearpath Robotics, Inc.
3 | * @author Roni Kreinin (rkreinin@clearpathrobotics.com)
4 | */
5 |
6 | #include "irobot_create_gz_toolbox/interface_buttons/interface_buttons_node.hpp"
7 | #include
8 |
9 | int main(int argc, char * argv[])
10 | {
11 | rclcpp::init(argc, argv);
12 | rclcpp::spin(std::make_shared());
13 | rclcpp::shutdown();
14 | return 0;
15 | }
16 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_bringup/config/pose_republisher_params.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | /**:
3 | pose_republisher_node:
4 | ros__parameters:
5 | robot_publisher_topic: sim_ground_truth_pose
6 | robot_subscriber_topic: _internal/sim_ground_truth_pose
7 | mouse_publisher_topic: _internal/sim_ground_truth_mouse_pose
8 | dock_subscriber_topic: _internal/sim_ground_truth_dock_pose
9 | dock_publisher_topic: sim_ground_truth_dock_pose
10 | ir_emitter_publisher_topic: _internal/sim_ground_truth_ir_emitter_pose
11 | ir_receiver_publisher_topic: _internal/sim_ground_truth_ir_receiver_pose
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_plugins/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.8)
2 | project(irobot_create_gz_plugins)
3 |
4 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
5 | add_compile_options(-Wall -Wextra -Wpedantic)
6 | endif()
7 |
8 | # find dependencies
9 | find_package(ament_cmake REQUIRED)
10 |
11 | set(OpenGL_GL_PREFERENCE LEGACY)
12 |
13 | # Find the Ignition gui library
14 | find_package(gz_gui_vendor REQUIRED)
15 | add_subdirectory(Create3Hmi)
16 |
17 | if(BUILD_TESTING)
18 | find_package(ament_lint_auto REQUIRED)
19 | ament_lint_auto_find_test_dependencies()
20 | endif()
21 |
22 | ament_package()
23 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/config/ir_intensity_vector_params.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | /**:
3 | ir_intensity_vector_publisher:
4 | ros__parameters:
5 | # IR intensity publisher topic
6 | publisher_topic: ir_intensity
7 | publish_rate: 62.0
8 | subscription_topics:
9 | # IR intensity topics
10 | - _internal/ir_intensity_front_center_left
11 | - _internal/ir_intensity_front_center_right
12 | - _internal/ir_intensity_front_left
13 | - _internal/ir_intensity_front_right
14 | - _internal/ir_intensity_left
15 | - _internal/ir_intensity_right
16 | - _internal/ir_intensity_side_left
17 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/BUG_REPORT.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: bug
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Additional context**
27 | Add any other context about the problem here.
28 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: enhancement
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: Testing
2 |
3 | on:
4 | pull_request:
5 | push:
6 | branches:
7 | - main
8 | workflow_dispatch:
9 |
10 | jobs:
11 | build_and_test:
12 | name: build_and_test
13 | runs-on: ubuntu-24.04
14 | steps:
15 | - name: Set Ignition Version
16 | run: |
17 | echo "GZ_VERSION=harmonic" >> $GITHUB_ENV
18 | - uses: actions/checkout@v2.3.4
19 | - uses: ros-tooling/setup-ros@0.7.15
20 | with:
21 | required-ros-distributions: jazzy
22 | - uses: ros-tooling/action-ros-ci@0.4.4
23 | id: action_ros_ci_step
24 | with:
25 | target-ros2-distro: jazzy
26 | import-token: ${{ secrets.REPO_TOKEN }}
27 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/config/hazard_vector_params.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | /**:
3 | hazards_vector_publisher:
4 | ros__parameters:
5 | # Hazard detection publisher topic
6 | publisher_topic: hazard_detection
7 | publish_rate: 62.0
8 | subscription_topics:
9 | # Bumper topic
10 | - _internal/bumper/event
11 | # Cliff topics
12 | - _internal/cliff_front_left/event
13 | - _internal/cliff_front_right/event
14 | - _internal/cliff_side_left/event
15 | - _internal/cliff_side_right/event
16 | # Wheel drop topics
17 | - _internal/wheel_drop/left_wheel/event
18 | - _internal/wheel_drop/right_wheel/event
19 | # Backup limit topic
20 | - _internal/backup_limit
21 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_toolbox/src/polar_coordinates.cpp:
--------------------------------------------------------------------------------
1 | // Copyright 2022 iRobot Corporation. All Rights Reserved.
2 | // @author Alberto Soragna (asoragna@irobot.com)
3 |
4 | #include
5 |
6 | #include "gz/math/Vector2.hh"
7 | #include "irobot_create_toolbox/polar_coordinates.hpp"
8 |
9 | namespace irobot_create_toolbox
10 | {
11 |
12 | PolarCoordinate toPolar(const gz::math::Vector2d & cartesian)
13 | {
14 | return PolarCoordinate{cartesian.Length(), atan2(cartesian.Y(), cartesian.X())};
15 | }
16 |
17 | gz::math::Vector2d fromPolar(const PolarCoordinate & polar)
18 | {
19 | gz::math::Vector2d cartesian{
20 | polar.radius * cos(polar.azimuth), polar.radius * sin(polar.azimuth)};
21 | return cartesian;
22 | }
23 |
24 | } // namespace irobot_create_toolbox
25 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_bringup/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.8)
2 | project(irobot_create_gz_bringup)
3 |
4 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
5 | add_compile_options(-Wall -Wextra -Wpedantic)
6 | endif()
7 |
8 | # find dependencies
9 | find_package(ament_cmake REQUIRED)
10 | find_package(ros_gz_interfaces QUIET)
11 |
12 | if(NOT ros_gz_interfaces_FOUND)
13 | message(WARNING "ros_gz_interfaces not found. Skipping ${PROJECT_NAME} package.")
14 | ament_package()
15 | return()
16 | endif()
17 |
18 | install(
19 | DIRECTORY gui launch worlds config
20 | DESTINATION share/${PROJECT_NAME}
21 | )
22 |
23 | if(BUILD_TESTING)
24 | find_package(ament_lint_auto REQUIRED)
25 | ament_lint_auto_find_test_dependencies()
26 | endif()
27 |
28 | ament_package()
29 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_toolbox/include/irobot_create_toolbox/polar_coordinates.hpp:
--------------------------------------------------------------------------------
1 | // Copyright 2022 iRobot Corporation. All Rights Reserved.
2 | // @author Alberto Soragna (asoragna@irobot.com)
3 |
4 | #ifndef IROBOT_CREATE_TOOLBOX__POLAR_COORDINATES_HPP_
5 | #define IROBOT_CREATE_TOOLBOX__POLAR_COORDINATES_HPP_
6 |
7 | #include "gz/math/Vector2.hh"
8 |
9 | namespace irobot_create_toolbox
10 | {
11 |
12 | // Very useful Polar Coordinates tools when working with Fields of views and distances.
13 | struct PolarCoordinate
14 | {
15 | double radius;
16 | double azimuth;
17 | };
18 |
19 | PolarCoordinate toPolar(const gz::math::Vector2d & cartesian);
20 |
21 | gz::math::Vector2d fromPolar(const PolarCoordinate & polar);
22 |
23 | } // namespace irobot_create_toolbox
24 |
25 | #endif // IROBOT_CREATE_TOOLBOX__POLAR_COORDINATES_HPP_
26 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_toolbox/src/sensors/sensors_node.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 Clearpath Robotics, Inc.
3 | * @author Roni Kreinin (rkreinin@clearpathrobotics.com)
4 | */
5 |
6 | #include
7 |
8 | #include "irobot_create_gz_toolbox/sensors/sensors_node.hpp"
9 |
10 | using irobot_create_gz_toolbox::SensorsNode;
11 |
12 | SensorsNode::SensorsNode()
13 | : rclcpp::Node("sensors_node")
14 | {
15 | // Create node handle
16 | nh_ = std::shared_ptr(this, [](rclcpp::Node *) {});
17 |
18 | // Add sensors
19 | bumper_ = std::make_unique(nh_);
20 | cliff_ = std::make_unique(nh_);
21 | ir_intensity_ = std::make_unique(nh_);
22 | mouse_ = std::make_unique(nh_);
23 | wheel_drop_ = std::make_unique(nh_);
24 | ir_opcode_ = std::make_unique(nh_);
25 | }
26 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.5)
2 |
3 | project(irobot_create_common_bringup)
4 |
5 | # Default to C++14
6 | if(NOT CMAKE_CXX_STANDARD)
7 | set(CMAKE_CXX_STANDARD 14)
8 | endif()
9 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
10 | add_compile_options(-Wall -Wextra -Wpedantic)
11 | endif()
12 |
13 | find_package(ament_cmake REQUIRED)
14 | find_package(ament_cmake_python REQUIRED)
15 |
16 | install(
17 | DIRECTORY
18 | config
19 | launch
20 | rviz
21 | DESTINATION
22 | share/${PROJECT_NAME}
23 | )
24 |
25 | # Install Python modules
26 | ament_python_install_package(${PROJECT_NAME})
27 |
28 | if(BUILD_TESTING)
29 | find_package(ament_lint_auto REQUIRED)
30 | ament_lint_auto_find_test_dependencies()
31 | endif()
32 |
33 | ament_package()
34 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_bringup/README.md:
--------------------------------------------------------------------------------
1 | # turtlebot4_gz
2 |
3 | To launch the simulation, run
4 | ```bash
5 | ros2 launch irobot_create_gz_bringup create3_gz.launch.py
6 | ```
7 |
8 | Wait for the simulation environment to load completely, then press the orange `play` button in the
9 | lower-left corner to start the simulation. The robot starts docked on its charger.
10 |
11 | ## Worlds
12 |
13 | The default simulation world is the `depot` environment. To chage worlds, use the `world`
14 | argument. Supported worlds are:
15 | - `depot` (default)
16 | - `maze`
17 |
18 | ## Robot spawn location
19 |
20 | By default the robot spawns at the origin. To change the robot's spawn location, use the
21 | `x`, `y`, `z` and `yaw` arguments. Note that changing `z` may result in the robot spawning
22 | in the air or below the ground plane, depending in the value used.
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/config/robot_state_params.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | /**:
3 | robot_state:
4 | ros__parameters:
5 | # Stop status publisher topic
6 | stop_status_topic: stop_status
7 | # Mock battery state publisher topic
8 | battery_state_topic: battery_state
9 | # Publishers rate
10 | kidnap_status_publish_rate: 1.0
11 | stop_status_publish_rate: 62.0
12 | battery_state_publish_rate: 0.1
13 | # Subscription topics
14 | dock_topic: dock_status
15 | wheel_vels_topic: odom
16 | # Stop status position difference tolerance
17 | linear_velocity_tolerance: 0.01
18 | angular_velocity_tolerance: 0.1
19 | # Battery parameters
20 | full_charge_percentage: 1.0
21 | battery_high_percentage: 0.9
22 | # Dock Parameters
23 | undocked_charge_limit: 0.03
24 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_sim/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | irobot_create_gz_sim
5 | 3.0.4
6 | Metapackage for the iRobot(R) Create(R) 3 robot Ignition simulator
7 |
8 | rkreinin
9 |
10 | BSD
11 |
12 | iRobot
13 |
14 | ament_cmake
15 |
16 | irobot_create_gz_bringup
17 | irobot_create_gz_plugins
18 | irobot_create_gz_toolbox
19 |
20 |
21 | ament_cmake
22 |
23 |
24 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ## Description
2 |
3 | Please include a summary of the change and which issue is fixed. Also include relevant motivation and context.
4 |
5 | Fixes # (issue).
6 |
7 | ## Type of change
8 |
9 | - [ ] Bug fix (non-breaking change which fixes an issue)
10 | - [ ] New feature (non-breaking change which adds functionality)
11 |
12 | ## How Has This Been Tested?
13 |
14 | Please describe the tests that you ran to verify your changes.
15 | Provide instructions so we can reproduce. Also list any relevant details for your test configuration.
16 |
17 | ```bash
18 | # Run this command
19 | ros2 launch package launch.py
20 | ```
21 |
22 | ## Checklist
23 |
24 | - [ ] I have performed a self-review of my own code
25 | - [ ] I have commented my code, particularly in hard-to-understand areas
26 | - [ ] I have made corresponding changes to the documentation
27 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_description/urdf/wheel_with_wheeldrop.urdf.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_bringup/worlds/depot.sdf:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | false
6 |
7 |
8 | 0.003
9 | 1.0
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | https://fuel.ignitionrobotics.org/1.0/OpenRobotics/models/Depot
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_description/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | irobot_create_description
5 | 3.0.4
6 | Provides the model description for the iRobot(R) Create(R) 3 Educational Robot.
7 | Ekumen
8 | BSD
9 |
10 | iRobot
11 |
12 | ament_cmake
13 |
14 | irobot_create_control
15 | urdf
16 | xacro
17 |
18 | ament_lint_auto
19 | ament_cmake_lint_cmake
20 |
21 |
22 | ament_cmake
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_plugins/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | irobot_create_gz_plugins
5 | 3.0.4
6 | Ignition plugins for simulated iRobot(R) Create(R) 3 Educational Robot.
7 | rkreinin
8 | BSD
9 |
10 | ament_cmake
11 |
12 | gz_gui_vendor
13 | ros_gz
14 |
15 | ament_lint_auto
16 | ament_cmake_cppcheck
17 | ament_cmake_cpplint
18 | ament_cmake_flake8
19 | ament_cmake_lint_cmake
20 | ament_cmake_pep257
21 | ament_cmake_xmllint
22 |
23 |
24 | ament_cmake
25 |
26 |
27 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_toolbox/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | irobot_create_toolbox
5 | 3.0.4
6 | Components and helpers for the iRobot(R) Create(R) 3 Educational Robot.
7 | Ekumen
8 | BSD
9 |
10 | ament_cmake
11 |
12 | rclcpp
13 | gz_math_vendor
14 |
15 | ament_lint_auto
16 | ament_cmake_cppcheck
17 | ament_cmake_cpplint
18 | ament_cmake_flake8
19 | ament_cmake_lint_cmake
20 | ament_cmake_pep257
21 | ament_cmake_uncrustify
22 | ament_cmake_xmllint
23 |
24 |
25 | ament_cmake
26 |
27 |
28 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_plugins/Create3Hmi/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
2 |
3 | if(POLICY CMP0100)
4 | cmake_policy(SET CMP0100 NEW)
5 | endif()
6 |
7 | set(CMAKE_AUTOMOC ON)
8 |
9 | find_package(gz_gui_vendor REQUIRED)
10 | find_package(gz-gui REQUIRED)
11 | find_package(Qt5
12 | COMPONENTS
13 | Core
14 | Quick
15 | QuickControls2
16 | REQUIRED
17 | )
18 |
19 | qt5_add_resources(resources_rcc Create3Hmi.qrc)
20 |
21 | add_library(
22 | Create3Hmi
23 | SHARED
24 | ${headers_MOC}
25 | Create3Hmi.cc
26 | ${resources_rcc}
27 | )
28 | include_directories(
29 | ${Qt5Core_INCLUDE_DIRS}
30 | ${Qt5Qml_INCLUDE_DIRS}
31 | ${Qt5Quick_INCLUDE_DIRS}
32 | ${Qt5QuickControls2_INCLUDE_DIRS}
33 | )
34 | target_link_libraries(Create3Hmi
35 | PUBLIC
36 | gz-gui::gz-gui
37 | ${Qt5Core_LIBRARIES}
38 | ${Qt5Qml_LIBRARIES}
39 | ${Qt5Quick_LIBRARIES}
40 | ${Qt5QuickControls2_LIBRARIES}
41 | )
42 | ament_target_dependencies(Create3Hmi
43 | gz_gui_vendor
44 | gz-gui
45 | )
46 |
47 | install(
48 | TARGETS Create3Hmi
49 | DESTINATION share/${PROJECT_NAME}/lib
50 | )
51 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/irobot_create_common_bringup/namespace.py:
--------------------------------------------------------------------------------
1 | from typing import Union
2 |
3 | from launch import LaunchContext, SomeSubstitutionsType, Substitution
4 |
5 |
6 | class GetNamespacedName(Substitution):
7 | def __init__(
8 | self,
9 | namespace: Union[SomeSubstitutionsType, str],
10 | name: Union[SomeSubstitutionsType, str]
11 | ) -> None:
12 | self.__namespace = namespace
13 | self.__name = name
14 |
15 | def perform(
16 | self,
17 | context: LaunchContext = None,
18 | ) -> str:
19 | if isinstance(self.__namespace, Substitution):
20 | namespace = str(self.__namespace.perform(context))
21 | else:
22 | namespace = str(self.__namespace)
23 |
24 | if isinstance(self.__name, Substitution):
25 | name = str(self.__name.perform(context))
26 | else:
27 | name = str(self.__name)
28 |
29 | if namespace == '':
30 | namespaced_name = name
31 | else:
32 | namespaced_name = namespace + '/' + name
33 | return namespaced_name
34 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_control/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | irobot_create_control
5 | 3.0.4
6 | Provides the diff-drive controller for the iRobot(R) Create(R) 3 Educational Robot.
7 | Ekumen
8 | BSD
9 |
10 | iRobot
11 |
12 | ament_cmake
13 |
14 | joint_state_broadcaster
15 | ros2launch
16 | ros2_controllers
17 | rsl
18 |
19 | ament_lint_auto
20 | ament_cmake_flake8
21 | ament_cmake_lint_cmake
22 | ament_cmake_pep257
23 | ament_cmake_xmllint
24 |
25 |
26 | ament_cmake
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_description/urdf/sensors/optical_mouse.urdf.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | ${namespace}
21 | ~/out:=${name}
22 |
23 | ${update_rate}
24 | ${name}
25 |
26 |
27 |
28 |
29 |
30 | true
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/irobot_create_common/irobot_create_common_bringup/launch/rviz2.launch.py:
--------------------------------------------------------------------------------
1 | # Copyright 2021 iRobot Corporation. All Rights Reserved.
2 | # @author Rodrigo Jose Causarano Nunez (rcausaran@irobot.com)
3 | #
4 | # Launch RViz.
5 |
6 | from ament_index_python.packages import get_package_share_directory
7 | from launch import LaunchDescription
8 | from launch.substitutions import PathJoinSubstitution
9 | from launch_ros.actions import Node
10 |
11 |
12 | def generate_launch_description():
13 | create_bringup = get_package_share_directory('irobot_create_common_bringup')
14 |
15 | # Rviz
16 | rviz_config = PathJoinSubstitution([create_bringup, 'rviz', 'irobot_create_view.rviz'])
17 | rviz_logo = PathJoinSubstitution([create_bringup, 'rviz', 'irobot_logo.jpg'])
18 |
19 | rviz = Node(
20 | package='rviz2',
21 | executable='rviz2',
22 | name='rviz2',
23 | arguments=[
24 | '--display-config', rviz_config,
25 | '--splash-screen', rviz_logo,
26 | ],
27 | remappings=[
28 | ('/tf', 'tf'),
29 | ('/tf_static', 'tf_static'),
30 | ]
31 | )
32 |
33 | # Define LaunchDescription variable
34 | ld = LaunchDescription()
35 | # Add nodes to LaunchDescription
36 | ld.add_action(rviz)
37 |
38 | return ld
39 |
--------------------------------------------------------------------------------
/irobot_create_gz/irobot_create_gz_toolbox/include/irobot_create_gz_toolbox/sensors/ir_intensity.hpp:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 Clearpath Robotics, Inc.
3 | * @author Roni Kreinin (rkreinin@clearpathrobotics.com)
4 | */
5 |
6 | #ifndef IROBOT_CREATE_GZ_TOOLBOX__SENSORS__IR_INTENSITY_HPP_
7 | #define IROBOT_CREATE_GZ_TOOLBOX__SENSORS__IR_INTENSITY_HPP_
8 |
9 | #include