From 53838245424befc1b5d610fbec3430a355c15e3f Mon Sep 17 00:00:00 2001
From: GitHub Action Basic Aerostack2 Node, it heritages all the functionality of an rclcpp::Node. Subclassed by as2::BasicBehavior< as2_msgs::action::Takeoff >, as2::BasicBehavior< as2_msgs::action::FollowPath >, as2::BasicBehavior< as2_msgs::action::GoToWaypoint >, as2::BasicBehavior< as2_msgs::action::Land >, as2::BasicBehavior< as2_msgs::action::Takeoff >, as2::BasicBehavior< as2_msgs::action::FollowPath >, as2::BasicBehavior< as2_msgs::action::GoToWaypoint >, as2::BasicBehavior< as2_msgs::action::Land >, as2_behavior::BehaviorServer< as2_msgs::action::SetArmingState >, as2_behavior::BehaviorServer< as2_msgs::action::Takeoff >, as2_behavior::BehaviorServer< as2_msgs::action::FollowReference >, as2_behavior::BehaviorServer< as2_msgs::action::GeneratePolynomialTrajectory >, as2_behavior::BehaviorServer< as2_msgs::action::FollowPath >, as2_behavior::BehaviorServer< as2_msgs::action::SetOffboardMode >, as2_behavior::BehaviorServer< as2_msgs::action::GoToWaypoint >, as2_behavior::BehaviorServer< as2_msgs::action::PointGimbal >, as2_behavior::BehaviorServer< as2_msgs::action::DetectArucoMarkers >, as2_behavior::BehaviorServer< as2_msgs::action::Land >, AlphanumericViewer, PlatformEmulator, RealsenseInterface, UsbCameraInterface, as2::AerialPlatform, as2::BasicBehavior< MessageT >, as2::BasicBehavior< MessageT >, as2_behavior::BehaviorServer< actionT >, as2_state_estimator::StateEstimator, controller_manager::ControllerManager Subclassed by as2::BasicBehavior< as2_msgs::action::Takeoff >, as2::BasicBehavior< as2_msgs::action::FollowPath >, as2::BasicBehavior< as2_msgs::action::GoToWaypoint >, as2::BasicBehavior< as2_msgs::action::Land >, as2::BasicBehavior< as2_msgs::action::Takeoff >, as2::BasicBehavior< as2_msgs::action::FollowPath >, as2::BasicBehavior< as2_msgs::action::GoToWaypoint >, as2::BasicBehavior< as2_msgs::action::Land >, as2_behavior::BehaviorServer< as2_msgs::action::SetArmingState >, as2_behavior::BehaviorServer< as2_msgs::action::Takeoff >, as2_behavior::BehaviorServer< as2_msgs::action::FollowReference >, as2_behavior::BehaviorServer< as2_msgs::action::GeneratePolynomialTrajectory >, as2_behavior::BehaviorServer< as2_msgs::action::FollowPath >, as2_behavior::BehaviorServer< as2_msgs::action::SetOffboardMode >, as2_behavior::BehaviorServer< as2_msgs::action::GoToWaypoint >, as2_behavior::BehaviorServer< as2_msgs::action::PointGimbal >, as2_behavior::BehaviorServer< as2_msgs::action::DetectArucoMarkers >, as2_behavior::BehaviorServer< as2_msgs::action::Land >, AlphanumericViewer, PlatformEmulator, as2::AerialPlatform, as2::BasicBehavior< MessageT >, as2::BasicBehavior< MessageT >, as2_behavior::BehaviorServer< actionT >, as2_state_estimator::StateEstimator, controller_manager::ControllerManager, real_sense_interface::RealsenseInterface, usb_camera_interface::UsbCameraInterface Public Functions Public Functions Constructor of the RealsenseInterface object. Constructor of the RealsenseInterface object. Funtionality during node lifetime. This function gets the sensor measurements from realsense device and publish them. Private Functions Private Members Public Functions Construct a new UsbCameraInterface object. Construct a new UsbCameraInterface object. Destroy the UsbCameraInterface object. Destroy the UsbCameraInterface object. Private Functions Private Members Realsense camera interface header file.
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: David Perez Saura Copyright (c) 2021 Universidad Politécnica de Madrid All Rights Reserved as2_realsense_interface header file. David Perez Saura
aerostack2
#include <node.hpp>
@@ -9737,25 +9738,25 @@
+aerostack2
-
-
-
@@ -9763,206 +9764,206 @@ aerostack2
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
aerostack2
-
-
-
aerostack2namespace rclcpp
+
+
+aerostack2namespace takeoff_plugin_trajectory
+
+
aerostack2
file as2_realsense_interface.hpp
aerostack2
#include “as2_core/utils/tf_utils.hpp”
aerostack2
#include “sensor_msgs/msg/imu.hpp”
-
-
+
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Realsense camera interface implementation file.
--Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
David Perez Saura
-Copyright (c) 2021 Universidad Politécnica de Madrid All Rights Reserved
+as2_realsense_interface source file.
+David Perez Saura
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
as2_realsense_interface node file.
+David Perez Saura
+Functions
Class definition for the USB camera interface node.
+Main for the USB camera interface node.
+David Perez Saura, Miguel Fernandez Cortizas
+Alphanumeric viewer header file.
+Javier Melero Deza
+Copyright (c) 2024 Universidad Politécnica de Madrid All Rights Reserved
+Defines
Alphanumeric viewer source file.
+Javier Melero Deza
+Copyright (c) 2024 Universidad Politécnica de Madrid All Rights Reserved
+Typedefs
Alphanumeric viewer node file.
+Javier Melero Deza
+Copyright (c) 2024 Universidad Politécnica de Madrid All Rights Reserved
+Functions
PositionMotion
PrintTarget
RateBase
RealsenseInterface
RealsenseInterface
SendEvent
Sensor
SensorData
UAV_reference
UAV_state
UAV_state
UsbCameraInterface
UsbCameraInterface
WaitForAlert
WaitForEvent
as2
point_gimbal_behavior
raw_odometry
rclcpp
real_sense_interface
std
takeoff_base
takeoff_plugin_platform
takeoff_plugin_position
takeoff_plugin_speed
takeoff_plugin_trajectory
usb_camera_interface
main()
main()
targetIds2string()
Check if behavior is running.
+running or not
+BehaviorHandler.TIMEOUT
BehaviorHandler.destroy()
BehaviorHandler.feedback
BehaviorHandler.is_running()
BehaviorHandler.modify()
BehaviorHandler.pause()
BehaviorHandler.result
In order to link this ./tests/CMakeLists.txt
file into the CMakeLists.txt
file of the package, the following line must be added:
# Build tests if testing is enabled
+In order to link and run your functional tests alongside with the code style ones, your package’s CMakeLists.txt should follow the next structure:
+# Set the minimum required CMake version
+cmake_minimum_required(VERSION 3.5)
+
+# Set the project name
+set(PROJECT_NAME as2_node_template)
+project(${PROJECT_NAME})
+
+# Default to C++17 if not set
+if(NOT CMAKE_CXX_STANDARD)
+set(CMAKE_CXX_STANDARD 17)
+endif()
+
+# Set Release as default build type if not set
+if(NOT CMAKE_BUILD_TYPE)
+set(CMAKE_BUILD_TYPE Release)
+endif()
+
+# find dependencies
+set(PROJECT_DEPENDENCIES
+ament_cmake
+rclcpp
+as2_core
+as2_msgs
+std_msgs
+)
+
+foreach(DEPENDENCY ${PROJECT_DEPENDENCIES})
+find_package(${DEPENDENCY} REQUIRED)
+endforeach()
+
+# Include necessary directories
+include_directories(
+include
+include/${PROJECT_NAME}
+)
+
+# Set source files
+set(SOURCE_CPP_FILES
+src/${PROJECT_NAME}_node.cpp
+src/${PROJECT_NAME}.cpp
+)
+
+# Create the node executable
+add_executable(${PROJECT_NAME}_node ${SOURCE_CPP_FILES})
+ament_target_dependencies(${PROJECT_NAME}_node ${PROJECT_DEPENDENCIES})
+
+# Create the dynamic library
+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+add_library(${PROJECT_NAME} SHARED ${SOURCE_CPP_FILES})
+ament_target_dependencies(${PROJECT_NAME} ${PROJECT_DEPENDENCIES})
+
+# Set the public include directories for the library
+target_include_directories(${PROJECT_NAME} PUBLIC
+$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+$<INSTALL_INTERFACE:include>)
+
+# Install the headers
+install(
+DIRECTORY include/
+DESTINATION include
+)
+
+# Install the node executable
+install(TARGETS
+${PROJECT_NAME}_node
+DESTINATION lib/${PROJECT_NAME}
+)
+
+# Install the shared library
+install(
+TARGETS ${PROJECT_NAME}
+EXPORT export_${PROJECT_NAME}
+ARCHIVE DESTINATION lib
+LIBRARY DESTINATION lib
+RUNTIME DESTINATION bin
+)
+
+# Export the libraries
+ament_export_libraries(${PROJECT_NAME})
+
+# Export the targets
+ament_export_targets(export_${PROJECT_NAME})
+
+# Export the include directories
+ament_export_include_directories(include)
+
+# Install the launch directory
+install(DIRECTORY
+launch
+DESTINATION share/${PROJECT_NAME}
+)
+
+# Install the config directory
+install(DIRECTORY
+config
+DESTINATION share/${PROJECT_NAME}
+)
+
+# Build tests if testing is enabled
if(BUILD_TESTING)
- # all other tests
- add_subdirectory(tests)
+find_package(ament_lint_auto REQUIRED)
+file(GLOB_RECURSE EXCLUDE_FILES
+ build/*
+ install/*
+)
+set(AMENT_LINT_AUTO_FILE_EXCLUDE ${EXCLUDE_FILES})
+ament_lint_auto_find_test_dependencies()
+
+add_subdirectory(tests)
endif()
+
+# Create the ament package
+ament_package()
To run these tests:
@@ -709,6 +818,10 @@ · Running and Passing ‘ament_cppcheck’
+Node Template for New Packages
+An example node with the proper structure and all the templates can be found here.
diff --git a/_09_development/_develop_guide/_develop_guide/_setting_code.html b/_09_development/_develop_guide/_develop_guide/_setting_code.html
index 4321185f..fe8030dc 100644
--- a/_09_development/_develop_guide/_develop_guide/_setting_code.html
+++ b/_09_development/_develop_guide/_develop_guide/_setting_code.html
@@ -309,6 +309,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_09_development/_develop_guide/index.html b/_09_development/_develop_guide/index.html
index e254f9ed..8067f15c 100644
--- a/_09_development/_develop_guide/index.html
+++ b/_09_development/_develop_guide/index.html
@@ -309,6 +309,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
@@ -366,6 +367,7 @@
diff --git a/_09_development/_tutorials/_tutorials/aerial_platform.html b/_09_development/_tutorials/_tutorials/aerial_platform.html
index 43cca4ee..2efba98a 100644
--- a/_09_development/_tutorials/_tutorials/aerial_platform.html
+++ b/_09_development/_tutorials/_tutorials/aerial_platform.html
@@ -309,6 +309,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_09_development/_tutorials/_tutorials/behavior.html b/_09_development/_tutorials/_tutorials/behavior.html
index 8ce91a19..c361a905 100644
--- a/_09_development/_tutorials/_tutorials/behavior.html
+++ b/_09_development/_tutorials/_tutorials/behavior.html
@@ -309,6 +309,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_09_development/_tutorials/_tutorials/controller_plugin.html b/_09_development/_tutorials/_tutorials/controller_plugin.html
index 3cb9290f..7137d43d 100644
--- a/_09_development/_tutorials/_tutorials/controller_plugin.html
+++ b/_09_development/_tutorials/_tutorials/controller_plugin.html
@@ -309,6 +309,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_09_development/_tutorials/_tutorials/estimator_plugin.html b/_09_development/_tutorials/_tutorials/estimator_plugin.html
index b18f2b3d..6ac4a699 100644
--- a/_09_development/_tutorials/_tutorials/estimator_plugin.html
+++ b/_09_development/_tutorials/_tutorials/estimator_plugin.html
@@ -309,6 +309,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_09_development/_tutorials/index.html b/_09_development/_tutorials/index.html
index 870fdb15..70425df4 100644
--- a/_09_development/_tutorials/index.html
+++ b/_09_development/_tutorials/index.html
@@ -309,6 +309,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_09_development/index.html b/_09_development/index.html
index 4536ea39..e8461f41 100644
--- a/_09_development/index.html
+++ b/_09_development/index.html
@@ -309,6 +309,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
@@ -374,6 +375,7 @@
- Develop Guide
diff --git a/_10_roadmaps/index.html b/_10_roadmaps/index.html
index 72ddd569..7e4d978d 100644
--- a/_10_roadmaps/index.html
+++ b/_10_roadmaps/index.html
@@ -307,6 +307,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_11_license/index.html b/_11_license/index.html
index cca82760..56c152ca 100644
--- a/_11_license/index.html
+++ b/_11_license/index.html
@@ -309,6 +309,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_12_citations/index.html b/_12_citations/index.html
index 0b547ba6..6f9b71d7 100644
--- a/_12_citations/index.html
+++ b/_12_citations/index.html
@@ -309,6 +309,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_13_about_and_contact/index.html b/_13_about_and_contact/index.html
index 29cd5bbc..e0beedf0 100644
--- a/_13_about_and_contact/index.html
+++ b/_13_about_and_contact/index.html
@@ -308,6 +308,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/behavior_actions/behavior_handler.html b/_modules/as2_python_api/behavior_actions/behavior_handler.html
index ba982e7a..f9a521d6 100644
--- a/_modules/as2_python_api/behavior_actions/behavior_handler.html
+++ b/_modules/as2_python_api/behavior_actions/behavior_handler.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
@@ -504,6 +505,17 @@ Source code for as2_python_api.behavior_actions.behavior_handler
raise self.ResultUnknown('Result not received yet')
return self.__result.result
+
+[docs]
+ def is_running(self) -> bool:
+ """
+ Check if behavior is running.
+
+ :return: running or not
+ """
+ return self.__status == BehaviorStatus.RUNNING
+
+
[docs]
def start(self, goal_msg, wait_result: bool = True) -> bool:
@@ -530,6 +542,8 @@ Source code for as2_python_api.behavior_actions.behavior_handler
self.__goal_handle = send_goal_future.result()
if not self.__goal_handle.accepted:
raise self.GoalRejected('Goal Rejected')
+ # Modify status
+ self.__status = BehaviorStatus.RUNNING
if wait_result:
return self.wait_to_result()
@@ -557,6 +571,8 @@ Source code for as2_python_api.behavior_actions.behavior_handler
if self.status != BehaviorStatus.RUNNING:
return True
response = self.__pause_client.call(Trigger.Request())
+ if response.success:
+ self.__status = BehaviorStatus.PAUSED
return response.success
@@ -575,6 +591,8 @@ Source code for as2_python_api.behavior_actions.behavior_handler
if self.status != BehaviorStatus.PAUSED:
return True
response = self.__resume_client.call(Trigger.Request())
+ if response.success:
+ self.__status = BehaviorStatus.RUNNING
if wait_result:
return self.wait_to_result()
return response.success
@@ -592,6 +610,8 @@ Source code for as2_python_api.behavior_actions.behavior_handler
if self.status == BehaviorStatus.IDLE:
return True
response = self.__stop_client.call(Trigger.Request())
+ if response.success:
+ self.__status = BehaviorStatus.IDLE
return response.success
diff --git a/_modules/as2_python_api/behavior_actions/follow_reference_behavior.html b/_modules/as2_python_api/behavior_actions/follow_reference_behavior.html
index c62df815..4895eb13 100644
--- a/_modules/as2_python_api/behavior_actions/follow_reference_behavior.html
+++ b/_modules/as2_python_api/behavior_actions/follow_reference_behavior.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/behavior_actions/followpath_behavior.html b/_modules/as2_python_api/behavior_actions/followpath_behavior.html
index 64126f7b..973fb5b4 100644
--- a/_modules/as2_python_api/behavior_actions/followpath_behavior.html
+++ b/_modules/as2_python_api/behavior_actions/followpath_behavior.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/behavior_actions/go_to_behavior.html b/_modules/as2_python_api/behavior_actions/go_to_behavior.html
index de5db0de..b1239bef 100644
--- a/_modules/as2_python_api/behavior_actions/go_to_behavior.html
+++ b/_modules/as2_python_api/behavior_actions/go_to_behavior.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/behavior_actions/land_behavior.html b/_modules/as2_python_api/behavior_actions/land_behavior.html
index 0b0b516f..c0ef3f6e 100644
--- a/_modules/as2_python_api/behavior_actions/land_behavior.html
+++ b/_modules/as2_python_api/behavior_actions/land_behavior.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/behavior_actions/point_gimbal_behavior.html b/_modules/as2_python_api/behavior_actions/point_gimbal_behavior.html
index 867138f8..57c911d6 100644
--- a/_modules/as2_python_api/behavior_actions/point_gimbal_behavior.html
+++ b/_modules/as2_python_api/behavior_actions/point_gimbal_behavior.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/behavior_actions/takeoff_behavior.html b/_modules/as2_python_api/behavior_actions/takeoff_behavior.html
index 2fd157bf..5e995307 100644
--- a/_modules/as2_python_api/behavior_actions/takeoff_behavior.html
+++ b/_modules/as2_python_api/behavior_actions/takeoff_behavior.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/behavior_manager/behavior_manager.html b/_modules/as2_python_api/behavior_manager/behavior_manager.html
index 16e7e4f8..64ab8453 100644
--- a/_modules/as2_python_api/behavior_manager/behavior_manager.html
+++ b/_modules/as2_python_api/behavior_manager/behavior_manager.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/drone_interface.html b/_modules/as2_python_api/drone_interface.html
index d76b199f..d20b5218 100644
--- a/_modules/as2_python_api/drone_interface.html
+++ b/_modules/as2_python_api/drone_interface.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/drone_interface_base.html b/_modules/as2_python_api/drone_interface_base.html
index 2c08b141..fdc9485e 100644
--- a/_modules/as2_python_api/drone_interface_base.html
+++ b/_modules/as2_python_api/drone_interface_base.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/drone_interface_gps.html b/_modules/as2_python_api/drone_interface_gps.html
index 4be5eeb4..5228152e 100644
--- a/_modules/as2_python_api/drone_interface_gps.html
+++ b/_modules/as2_python_api/drone_interface_gps.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/drone_interface_teleop.html b/_modules/as2_python_api/drone_interface_teleop.html
index f10bb551..003056f9 100644
--- a/_modules/as2_python_api/drone_interface_teleop.html
+++ b/_modules/as2_python_api/drone_interface_teleop.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/mission_interpreter/mission.html b/_modules/as2_python_api/mission_interpreter/mission.html
index 4370bdc4..77b4d654 100644
--- a/_modules/as2_python_api/mission_interpreter/mission.html
+++ b/_modules/as2_python_api/mission_interpreter/mission.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/mission_interpreter/mission_interpreter.html b/_modules/as2_python_api/mission_interpreter/mission_interpreter.html
index 60b1163c..624f4c2f 100644
--- a/_modules/as2_python_api/mission_interpreter/mission_interpreter.html
+++ b/_modules/as2_python_api/mission_interpreter/mission_interpreter.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/mission_interpreter/mission_stack.html b/_modules/as2_python_api/mission_interpreter/mission_stack.html
index 309cea7e..1b653b3a 100644
--- a/_modules/as2_python_api/mission_interpreter/mission_stack.html
+++ b/_modules/as2_python_api/mission_interpreter/mission_stack.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/mission_interpreter/ros2_adapter.html b/_modules/as2_python_api/mission_interpreter/ros2_adapter.html
index 7e8a72bd..32cebde1 100644
--- a/_modules/as2_python_api/mission_interpreter/ros2_adapter.html
+++ b/_modules/as2_python_api/mission_interpreter/ros2_adapter.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/dummy_module.html b/_modules/as2_python_api/modules/dummy_module.html
index ef9ad9a8..13efd599 100644
--- a/_modules/as2_python_api/modules/dummy_module.html
+++ b/_modules/as2_python_api/modules/dummy_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/follow_path_gps_module.html b/_modules/as2_python_api/modules/follow_path_gps_module.html
index c10c50a3..2a086844 100644
--- a/_modules/as2_python_api/modules/follow_path_gps_module.html
+++ b/_modules/as2_python_api/modules/follow_path_gps_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/follow_path_module.html b/_modules/as2_python_api/modules/follow_path_module.html
index b3241144..83dff547 100644
--- a/_modules/as2_python_api/modules/follow_path_module.html
+++ b/_modules/as2_python_api/modules/follow_path_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/follow_reference_module.html b/_modules/as2_python_api/modules/follow_reference_module.html
index a990371e..0d9e79d9 100644
--- a/_modules/as2_python_api/modules/follow_reference_module.html
+++ b/_modules/as2_python_api/modules/follow_reference_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/go_to_gps_module.html b/_modules/as2_python_api/modules/go_to_gps_module.html
index 8490cdc5..23866826 100644
--- a/_modules/as2_python_api/modules/go_to_gps_module.html
+++ b/_modules/as2_python_api/modules/go_to_gps_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/go_to_module.html b/_modules/as2_python_api/modules/go_to_module.html
index 498b7e5b..c17aa918 100644
--- a/_modules/as2_python_api/modules/go_to_module.html
+++ b/_modules/as2_python_api/modules/go_to_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/gps_module.html b/_modules/as2_python_api/modules/gps_module.html
index 2c619ad8..6f388c1c 100644
--- a/_modules/as2_python_api/modules/gps_module.html
+++ b/_modules/as2_python_api/modules/gps_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/land_module.html b/_modules/as2_python_api/modules/land_module.html
index 08da4bfc..7b8c4cc9 100644
--- a/_modules/as2_python_api/modules/land_module.html
+++ b/_modules/as2_python_api/modules/land_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/module_base.html b/_modules/as2_python_api/modules/module_base.html
index 6aef1b14..8effb45d 100644
--- a/_modules/as2_python_api/modules/module_base.html
+++ b/_modules/as2_python_api/modules/module_base.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/motion_reference_handler_module.html b/_modules/as2_python_api/modules/motion_reference_handler_module.html
index b491816c..3a15e666 100644
--- a/_modules/as2_python_api/modules/motion_reference_handler_module.html
+++ b/_modules/as2_python_api/modules/motion_reference_handler_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/point_gimbal_module.html b/_modules/as2_python_api/modules/point_gimbal_module.html
index 6d5c73cf..434a8e34 100644
--- a/_modules/as2_python_api/modules/point_gimbal_module.html
+++ b/_modules/as2_python_api/modules/point_gimbal_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/rtl_module.html b/_modules/as2_python_api/modules/rtl_module.html
index f6f1105f..9903ea9c 100644
--- a/_modules/as2_python_api/modules/rtl_module.html
+++ b/_modules/as2_python_api/modules/rtl_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/modules/takeoff_module.html b/_modules/as2_python_api/modules/takeoff_module.html
index 9125ae53..2136d1ed 100644
--- a/_modules/as2_python_api/modules/takeoff_module.html
+++ b/_modules/as2_python_api/modules/takeoff_module.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/service_clients/arming.html b/_modules/as2_python_api/service_clients/arming.html
index 3a04c350..620f0888 100644
--- a/_modules/as2_python_api/service_clients/arming.html
+++ b/_modules/as2_python_api/service_clients/arming.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/service_clients/offboard.html b/_modules/as2_python_api/service_clients/offboard.html
index 335f6c19..79734080 100644
--- a/_modules/as2_python_api/service_clients/offboard.html
+++ b/_modules/as2_python_api/service_clients/offboard.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/service_clients/service_handler.html b/_modules/as2_python_api/service_clients/service_handler.html
index bb469f2d..6d4bf29c 100644
--- a/_modules/as2_python_api/service_clients/service_handler.html
+++ b/_modules/as2_python_api/service_clients/service_handler.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/shared_data/gps_data.html b/_modules/as2_python_api/shared_data/gps_data.html
index 140a373f..436b8ac7 100644
--- a/_modules/as2_python_api/shared_data/gps_data.html
+++ b/_modules/as2_python_api/shared_data/gps_data.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/shared_data/orientation_data.html b/_modules/as2_python_api/shared_data/orientation_data.html
index dad081b2..decb6370 100644
--- a/_modules/as2_python_api/shared_data/orientation_data.html
+++ b/_modules/as2_python_api/shared_data/orientation_data.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/shared_data/platform_info_data.html b/_modules/as2_python_api/shared_data/platform_info_data.html
index 0e7a712d..224191d3 100644
--- a/_modules/as2_python_api/shared_data/platform_info_data.html
+++ b/_modules/as2_python_api/shared_data/platform_info_data.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/shared_data/pose_data.html b/_modules/as2_python_api/shared_data/pose_data.html
index 31a1054f..f90ee30a 100644
--- a/_modules/as2_python_api/shared_data/pose_data.html
+++ b/_modules/as2_python_api/shared_data/pose_data.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/shared_data/position_data.html b/_modules/as2_python_api/shared_data/position_data.html
index e5bd514d..af947207 100644
--- a/_modules/as2_python_api/shared_data/position_data.html
+++ b/_modules/as2_python_api/shared_data/position_data.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/shared_data/twist_data.html b/_modules/as2_python_api/shared_data/twist_data.html
index 786ff558..ceb8cecf 100644
--- a/_modules/as2_python_api/shared_data/twist_data.html
+++ b/_modules/as2_python_api/shared_data/twist_data.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/as2_python_api/tools/utils.html b/_modules/as2_python_api/tools/utils.html
index 00438e04..08875559 100644
--- a/_modules/as2_python_api/tools/utils.html
+++ b/_modules/as2_python_api/tools/utils.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_modules/index.html b/_modules/index.html
index 3cd8bb25..1480c3cc 100644
--- a/_modules/index.html
+++ b/_modules/index.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/_sources/_09_development/_develop_guide/_develop_guide/_develop_new_pkg.rst.txt b/_sources/_09_development/_develop_guide/_develop_guide/_develop_new_pkg.rst.txt
index 16ab1b16..e07a0dd3 100644
--- a/_sources/_09_development/_develop_guide/_develop_guide/_develop_new_pkg.rst.txt
+++ b/_sources/_09_development/_develop_guide/_develop_guide/_develop_new_pkg.rst.txt
@@ -4,6 +4,7 @@
Developing a New Package
------------------------
+
.. _development_guide_new_pkg_architecture:
Architecture of a New Package
@@ -420,16 +421,124 @@ In order to compile this tests some lines must be added into a **NEW** ``CMakeLi
endforeach()
endif()
-In order to link this ``./tests/CMakeLists.txt`` file into the ``CMakeLists.txt`` file of the package, the following line must be added:
+In order to link and run your functional tests alongside with the code style ones, your package's CMakeLists.txt should follow the next structure:
.. code-block:: cmake
+ # Set the minimum required CMake version
+ cmake_minimum_required(VERSION 3.5)
+
+ # Set the project name
+ set(PROJECT_NAME as2_node_template)
+ project(${PROJECT_NAME})
+
+ # Default to C++17 if not set
+ if(NOT CMAKE_CXX_STANDARD)
+ set(CMAKE_CXX_STANDARD 17)
+ endif()
+
+ # Set Release as default build type if not set
+ if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+
+ # find dependencies
+ set(PROJECT_DEPENDENCIES
+ ament_cmake
+ rclcpp
+ as2_core
+ as2_msgs
+ std_msgs
+ )
+
+ foreach(DEPENDENCY ${PROJECT_DEPENDENCIES})
+ find_package(${DEPENDENCY} REQUIRED)
+ endforeach()
+
+ # Include necessary directories
+ include_directories(
+ include
+ include/${PROJECT_NAME}
+ )
+
+ # Set source files
+ set(SOURCE_CPP_FILES
+ src/${PROJECT_NAME}_node.cpp
+ src/${PROJECT_NAME}.cpp
+ )
+
+ # Create the node executable
+ add_executable(${PROJECT_NAME}_node ${SOURCE_CPP_FILES})
+ ament_target_dependencies(${PROJECT_NAME}_node ${PROJECT_DEPENDENCIES})
+
+ # Create the dynamic library
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+ add_library(${PROJECT_NAME} SHARED ${SOURCE_CPP_FILES})
+ ament_target_dependencies(${PROJECT_NAME} ${PROJECT_DEPENDENCIES})
+
+ # Set the public include directories for the library
+ target_include_directories(${PROJECT_NAME} PUBLIC
+ $
+ $)
+
+ # Install the headers
+ install(
+ DIRECTORY include/
+ DESTINATION include
+ )
+
+ # Install the node executable
+ install(TARGETS
+ ${PROJECT_NAME}_node
+ DESTINATION lib/${PROJECT_NAME}
+ )
+
+ # Install the shared library
+ install(
+ TARGETS ${PROJECT_NAME}
+ EXPORT export_${PROJECT_NAME}
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib
+ RUNTIME DESTINATION bin
+ )
+
+ # Export the libraries
+ ament_export_libraries(${PROJECT_NAME})
+
+ # Export the targets
+ ament_export_targets(export_${PROJECT_NAME})
+
+ # Export the include directories
+ ament_export_include_directories(include)
+
+ # Install the launch directory
+ install(DIRECTORY
+ launch
+ DESTINATION share/${PROJECT_NAME}
+ )
+
+ # Install the config directory
+ install(DIRECTORY
+ config
+ DESTINATION share/${PROJECT_NAME}
+ )
+
# Build tests if testing is enabled
if(BUILD_TESTING)
- # all other tests
- add_subdirectory(tests)
+ find_package(ament_lint_auto REQUIRED)
+ file(GLOB_RECURSE EXCLUDE_FILES
+ build/*
+ install/*
+ )
+ set(AMENT_LINT_AUTO_FILE_EXCLUDE ${EXCLUDE_FILES})
+ ament_lint_auto_find_test_dependencies()
+
+ add_subdirectory(tests)
endif()
+ # Create the ament package
+ ament_package()
+
To run these tests:
@@ -437,3 +546,10 @@ To run these tests:
colcon test
+
+
+------------------------------
+Node Template for New Packages
+------------------------------
+
+An example node with the proper structure and all the templates can be found `here `_.
diff --git a/genindex.html b/genindex.html
index c379a182..561a9ab4 100644
--- a/genindex.html
+++ b/genindex.html
@@ -306,6 +306,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
@@ -3763,13 +3764,15 @@ I
- ignition::gazebo (C++ type)
-
-
+
@@ -4848,95 +4851,97 @@ R
- rclcpp (C++ type)
- - RealsenseInterface (C++ class)
+
- real_sense_interface (C++ type)
+
+ - real_sense_interface::RealsenseInterface (C++ class)
- - RealsenseInterface::accel_frame_ (C++ member)
+
- real_sense_interface::RealsenseInterface::accel_frame_ (C++ member)
- - RealsenseInterface::base_link_frame_ (C++ member)
+
- real_sense_interface::RealsenseInterface::base_link_frame_ (C++ member)
- - RealsenseInterface::base_link_to_realsense_link_ (C++ member)
+
- real_sense_interface::RealsenseInterface::base_link_to_realsense_link_ (C++ member)
- - RealsenseInterface::base_link_to_realsense_pose_odom_ (C++ member)
+
- real_sense_interface::RealsenseInterface::base_link_to_realsense_pose_odom_ (C++ member)
- - RealsenseInterface::color_available_ (C++ member)
+
- real_sense_interface::RealsenseInterface::color_available_ (C++ member)
- - RealsenseInterface::color_frame_ (C++ member)
+
- real_sense_interface::RealsenseInterface::color_frame_ (C++ member)
- - RealsenseInterface::color_sensor_ (C++ member)
+
- real_sense_interface::RealsenseInterface::color_sensor_ (C++ member)
- - RealsenseInterface::color_sensor_frame_ (C++ member)
+
- real_sense_interface::RealsenseInterface::color_sensor_frame_ (C++ member)
- - RealsenseInterface::depth_available_ (C++ member)
+
- real_sense_interface::RealsenseInterface::depth_available_ (C++ member)
- - RealsenseInterface::device_not_found_ (C++ member)
+
- real_sense_interface::RealsenseInterface::device_not_found_ (C++ member)
- - RealsenseInterface::fisheye_available_ (C++ member)
+
- real_sense_interface::RealsenseInterface::fisheye_available_ (C++ member)
- - RealsenseInterface::gyro_frame_ (C++ member)
+
- real_sense_interface::RealsenseInterface::gyro_frame_ (C++ member)
- - RealsenseInterface::identifyDevice (C++ function)
+
- real_sense_interface::RealsenseInterface::identifyDevice (C++ function)
- - RealsenseInterface::identifySensors (C++ function)
+
- real_sense_interface::RealsenseInterface::identifySensors (C++ function)
- - RealsenseInterface::imu_available_ (C++ member)
+
- real_sense_interface::RealsenseInterface::imu_available_ (C++ member)
- - RealsenseInterface::imu_sensor_ (C++ member)
+
- real_sense_interface::RealsenseInterface::imu_sensor_ (C++ member)
- - RealsenseInterface::imu_sensor_frame_ (C++ member)
+
- real_sense_interface::RealsenseInterface::imu_sensor_frame_ (C++ member)
- - RealsenseInterface::odom_frame_ (C++ member)
+
- real_sense_interface::RealsenseInterface::odom_frame_ (C++ member)
- - RealsenseInterface::pipe_ (C++ member)
+
- real_sense_interface::RealsenseInterface::pipe_ (C++ member)
- - RealsenseInterface::pose_available_ (C++ member)
+
- real_sense_interface::RealsenseInterface::pose_available_ (C++ member)
- - RealsenseInterface::pose_frame_ (C++ member)
+
- real_sense_interface::RealsenseInterface::pose_frame_ (C++ member)
- - RealsenseInterface::pose_sensor_ (C++ member)
+
- real_sense_interface::RealsenseInterface::pose_sensor_ (C++ member)
- - RealsenseInterface::realsense_link_frame_ (C++ member)
+
- real_sense_interface::RealsenseInterface::realsense_link_frame_ (C++ member)
- - RealsenseInterface::realsense_link_to_realsense_pose_ (C++ member)
+
- real_sense_interface::RealsenseInterface::realsense_link_to_realsense_pose_ (C++ member)
- - RealsenseInterface::realsense_link_to_realsense_pose_odom_ (C++ member)
+
- real_sense_interface::RealsenseInterface::realsense_link_to_realsense_pose_odom_ (C++ member)
- - RealsenseInterface::realsense_name_ (C++ member)
+
- real_sense_interface::RealsenseInterface::realsense_name_ (C++ member)
- - RealsenseInterface::realsense_pose_ (C++ member)
+
- real_sense_interface::RealsenseInterface::realsense_pose_ (C++ member)
- - RealsenseInterface::RealsenseInterface (C++ function)
+
- real_sense_interface::RealsenseInterface::RealsenseInterface (C++ function)
- - RealsenseInterface::rs_odom2rs_link_tf_ (C++ member)
+
- real_sense_interface::RealsenseInterface::rs_odom2rs_link_tf_ (C++ member)
- - RealsenseInterface::run (C++ function)
+
- real_sense_interface::RealsenseInterface::run (C++ function)
- - RealsenseInterface::runColor (C++ function)
+
- real_sense_interface::RealsenseInterface::runColor (C++ function)
- - RealsenseInterface::runImu (C++ function)
+
- real_sense_interface::RealsenseInterface::runImu (C++ function)
- - RealsenseInterface::runOdom (C++ function)
+
- real_sense_interface::RealsenseInterface::runOdom (C++ function)
- - RealsenseInterface::runPose (C++ function)
+
- real_sense_interface::RealsenseInterface::runPose (C++ function)
- - RealsenseInterface::serial_ (C++ member)
+
- real_sense_interface::RealsenseInterface::serial_ (C++ member)
- - RealsenseInterface::setStaticTransform (C++ function)
+
- real_sense_interface::RealsenseInterface::setStaticTransform (C++ function)
- - RealsenseInterface::setup (C++ function)
+
- real_sense_interface::RealsenseInterface::setup (C++ function)
- - RealsenseInterface::setupCamera (C++ function)
+
- real_sense_interface::RealsenseInterface::setupCamera (C++ function)
- - RealsenseInterface::setupPoseTransforms (C++ function)
+
- real_sense_interface::RealsenseInterface::setupPoseTransforms (C++ function)
- - RealsenseInterface::stop (C++ function)
+
- real_sense_interface::RealsenseInterface::stop (C++ function)
- - RealsenseInterface::tf2_fix_transforms_ (C++ member)
+
- real_sense_interface::RealsenseInterface::tf2_fix_transforms_ (C++ member)
- - RealsenseInterface::tf_static_broadcaster_ (C++ member)
+
- real_sense_interface::RealsenseInterface::tf_static_broadcaster_ (C++ member)
- - RealsenseInterface::verbose_ (C++ member)
+
- real_sense_interface::RealsenseInterface::verbose_ (C++ member)
- REF_TRAJ_TOPIC (C macro)
@@ -5392,51 +5397,53 @@ U
- UNSET_MODE_MASK (C macro), [1]
- - UsbCameraInterface (C++ class)
+
- usb_camera_interface (C++ type)
+
+ - usb_camera_interface::UsbCameraInterface (C++ class)
- - UsbCameraInterface::camera_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::camera_ (C++ member)
- - UsbCameraInterface::camera_frame_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::camera_frame_ (C++ member)
- - UsbCameraInterface::camera_matrix_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::camera_matrix_ (C++ member)
- - UsbCameraInterface::camera_model_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::camera_model_ (C++ member)
- - UsbCameraInterface::camera_name_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::camera_name_ (C++ member)
- - UsbCameraInterface::cap_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::cap_ (C++ member)
- - UsbCameraInterface::captureImage (C++ function)
+
- usb_camera_interface::UsbCameraInterface::captureImage (C++ function)
- - UsbCameraInterface::device_port_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::device_port_ (C++ member)
- - UsbCameraInterface::dist_coeffs_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::dist_coeffs_ (C++ member)
- - UsbCameraInterface::distortion_model_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::distortion_model_ (C++ member)
- - UsbCameraInterface::encoding_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::encoding_ (C++ member)
- - UsbCameraInterface::framerate_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::framerate_ (C++ member)
- - UsbCameraInterface::image_height_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::image_height_ (C++ member)
- - UsbCameraInterface::image_width_ (C++ member)
+
- usb_camera_interface::UsbCameraInterface::image_width_ (C++ member)
- - UsbCameraInterface::loadParameters (C++ function)
+
- usb_camera_interface::UsbCameraInterface::loadParameters (C++ function)
- - UsbCameraInterface::setCameraModelTransform (C++ function)
+
- usb_camera_interface::UsbCameraInterface::setCameraModelTransform (C++ function)
- - UsbCameraInterface::setCameraParameters (C++ function)
+
- usb_camera_interface::UsbCameraInterface::setCameraParameters (C++ function)
- - UsbCameraInterface::setCameraTransform (C++ function)
+
- usb_camera_interface::UsbCameraInterface::setCameraTransform (C++ function)
- - UsbCameraInterface::setupCamera (C++ function)
+
- usb_camera_interface::UsbCameraInterface::setupCamera (C++ function)
- - UsbCameraInterface::UsbCameraInterface (C++ function)
+
- usb_camera_interface::UsbCameraInterface::UsbCameraInterface (C++ function)
- - UsbCameraInterface::~UsbCameraInterface (C++ function)
+
- usb_camera_interface::UsbCameraInterface::~UsbCameraInterface (C++ function)
diff --git a/index.html b/index.html
index fd9ba02f..17fb833e 100644
--- a/index.html
+++ b/index.html
@@ -308,6 +308,7 @@
- Test
+- Node Template for New Packages
- Setting Up Visual Studio Code
- Install required Extensions
- Modify ‘settings.json’
diff --git a/objects.inv b/objects.inv
index 389175b952cc26594239e512f8b80f8ca15a2505..732105df34410d655759337ba30dba6ca6a57544 100644
GIT binary patch
delta 95207
zcmV)%K#jkt@de-U1(17xmzzko@B4l}#Tw)I_3SOsoi|^w%iCo;J2R{6RKGAtDWs%J
z0u`W4ryu;;H^D{R0tgT>XQ0&THM*S=D1QGL_Zc%H-rlLk@1H;F@BjM!y>5K_{z3nr
zm9{rmuJb?2{}`jCu_jMs=N$IL_W!qG9xP++td8_A)3+S^f1AXAbv)l({jFyI89d|t
zZ_8ejAOGvo-|zn4)&F|)KmXtV^EOC}reJ)0d;gn$3zm>^|JRLRS-0T48e;FUX|M?9fo!|A3_Ympae*W|uNJ4+yh)dkTDST~{Z{`LbVnf4
z0!4x|>?Y`ij1T&|KRy}v-)}y@7nf3CI^+KK?f(&-&V7)~=db$rKLj?~e|)>s?;%<_
zu!P?34v(fCyzE-5e_Q04xc{>{9JJNW^t?V(GlHSW(?nT+u+!AE3XaXuUeQ$gNBO2K
z%4xDb)1NAk-|E~nk)Zk`i^_!cqDlP!?fy%MWTQC
zri{15*%RM=G4|fp8wdZTDD;^--`pR_dU^L~x@3LhyKN+D8vV7L&>Pb=_m`vg?m);I
zHAfXDN`**J_5RuN{PR>|XDWo?`$zZa`KbA-vRMM13)53i3TM&RU8P}XrYM!h%GvKt
zdu<$oT5XueAECrO**^q*8j!YWB}_Yd@AzOK;LoaQxcU7slg0uff7TdyXl0ToXylAb
z6$0t3$k5ChnjZmmT0p2I-T9V(TqAWmikeNok2;Q20kC>VPBqhM5D*q;S>nvENVFfRsj0KAfysS7~%94S>ON=y`8L>Dj
znUAg;q>bo82}(qPfs5588xs7r!gBn~s%e_|J?hg$GWNU#f5AtKZSHvuPLl%PHUCRi
z!JO^|TgF&zVye=zJ$R_Su95*@O%#^j%%?lk|7iVa?u9Zxh26{cEDNEzpU`CMkWdQx
zJWja|45xcsBuQ7Ixz5pEqc+mBB109cwLjvv3K;-a^%;NOADb&q=10)mgT4e|v;;KS
zIwYKyAWpdse+;Q5NRqBZvwh-j%%EdFxWT`jV=(&gT@sW=gmuPBm@4|6>G{FfVnwW{
zpb^Q=@-ars)iiwk=^$wnGzSe@6}8e~_sO
zogG@Yp@*I6Zya}zI>?$8DN24o^(KCT&kI=mJ?uf3Fo9@J&Pkqtj}yruRD!6aMUHD#
z)I;A9o(Fm2SOuxOO@=AB@vBS}aU#*fSB2`eC}m~?2AGxnzLwLgPgN#Z|S4QV*WYD9~&@FJbTj
z--S_Qh{YohqFemXnzplSf;YtO&W{-4wq$_Rf0vYh9nH1t(9Kgmmg{TD0I7$*3m00@
zYU8v3!2^p}DCQ-M2H@1`2JS=50O;$7Ay95OD94CXn3#Z%Q_~X15|Ue^1M!pT4v84q
z#I0+XOuT&dMJ*5=>?;p%gME+tz3IN7b-S}7MMF0hJ&4%xF3KF0$f;WlYm4BtfS@;$
zf1+)?n-v)qyMH`d{5&9&sz8gH|V(kc;e-;pUNRbRWD>78FBA$|>jG7Nc2^)FT@Q!f~
zp`R8a_mkKW9wG!j2WdOc@I`7CB^+Y?wDw2;@ttd}w?ycfhT}KIA@&0u*ed5{_N1$a&V52l$y$&iUK!VFoHJI|;fc66q?MDOJ3m)1_1KLkKf3%+r
zG;3=cHa%M4;JXGa+Blasn=K4r`V?-rx_5)Gz_UDB55sUBZsK7qQdk4q$73C}OJabEEjBGoxQ7(b?jdDp3emV?&y-@9RlgG}m%{>9GeM%-}2G_we
z4&sOGd8T=sCQtf4-@q3VNJEC=*Z#ZQ|39JK{owSrxmTG-*BC2h}lZ
z+CLa3tYdw5FYq*L^-Y*UcreKmas7|3v%m9Q%iapktke}G^~D5
zM$w0KLLnU}Yi>57f!fg<8Famho%(t}Rss7nw*<)T3?KBBtK%-HP@f!getTkER1oH+DyuRmB4}E3B!t*T%w?Hn@2~AT*7MSZ;lnL#0KM14xp>q*i
z`>k>Eh#;b?BNh*zhA_}Yyi26k^3wteAGv4!BodUD5Tl8BW$uIAF}Dy4#QJG7;UGeyd*z|}1u>ou2C}53)Lesce1)6j`x
zXk!bA&XX%ghC;YJ(eRhQjpfq&8jq4R*Q1n&Ujy~%+&l5Jf0{1`$FhA%x>kh=$FW4B
zF5({{tOQaYgsQHi-wyA3H?}8JP77(y{vE!0rda{~XRp@6&+)&!tC@Q6SASvz|_EtjvmBEh4b!tJ1}hO!8En
z<=j8I#FWH=p^jK=Eu|TL_?9G*WmzKrO5~D_5v^kcl~0a1tQ=AsC1I~4gNAv`!VeF!
z7l3n#JF_c*kDdDFh<`9$pY5l}8%R2J)9(|FXXDEj^
z;zZL%<_&UvOA-5_pxP!?~PX=+*phtNy0%W1MctJ}=U
zrv!E*t0-O6U;A4)1W3OXco_*(hdN?WR1t%3qGg)CYRfE(coTkRL~h*OackKq#0-oo
zVtOX1@G&ckavrB#1qK)a$~0ozgEvR%Z)DpH7o
z@L_BruDoZls#yZPYh7-BibFrPw?-;c*yP!G)#ivoY%tqnWs+xTAKcWeOVbRWzK+_L
zixCPI@5FY!7NVOf2x<6`bMz4aM``Mnd|}CdK@m|lyc}_di0R8go0ja
zfvowxX|Ko*Giw(KL|J1+iRD!lA5<50Zs^%5LT9vcLol;%d7|iFms}YrKUqD)m)#dbv(9uz)wrM3#
zt%{)IJq8Wb!SO^#%2uK)Y8HZrHk__t(}obWwBSK^)zI~kcMSH`BU%0Z3BXfX$-F!v
zuv|;i!dnIZQk^1AgY&k*sXJZQftF!^$|!}C)-DCAy)xQ)<{Ogh)ZYp_A`hjlOsBX7&7iv^u1{Lyc*eIbk$Z8g&ZbB3S-}wOX
z#g(v&grI>_{K5T|i0N7Vm3Ro}z*kQRs*irJ- D&RXOaOHw*q^KU^wcdkJqe7BKvoB3Bn=5KdU&~zybvh);oc>ga-*8bW
zqE+;DRlC3uNL_rjWgK?#bw)6McBO3*c4EA4bK`e+ufoj0dpBOEv2iwaRC`@|+wH)u
z6>fWn464P)$ksTe>UMk7kw-z-SlH77M?JISS>Y^F5-;YY3aDNM;AWc|2YlOo71fPz
z4{O9o8*qkc9?(rWLopG^k=T{S$ew~-iRck~{Tp5Pz?(~-5bBq*V0S%#RTr_Ib_6vl
z1mFLJAsK8ZRLz16b2}896=Y9TP3Qn?V-$-NXm?Z{DPxNigY=hd0lsl0^rxG
7ql|OO
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%0D&Zwg5Pn9bs+vaU#O-
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