From 26ea2ab3d9d3a790653ad04d0a77f29ef0df95a9 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 4 Feb 2021 15:24:08 +0200 Subject: [PATCH 001/123] -Add maximize subwindow --- .../Plugins/AirSim/Source/SimHUD/SimHUD.cpp | 22 +++++++++++++++++++ Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h | 3 +++ .../AirSim/Source/SimHUD/SimHUDWidget.h | 4 +++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp index 71000329c0..b67d85060b 100644 --- a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp +++ b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp @@ -172,6 +172,24 @@ void ASimHUD::inputEventToggleAll() updateWidgetSubwindowVisibility(); } +void ASimHUD::inputEventToggleSubwindow0Fullscreen() +{ + inputEventToggleSubwindow0(); + widget_->maximizeSubWindow(0); +} + +void ASimHUD::inputEventToggleSubwindow1Fullscreen() +{ + inputEventToggleSubwindow1(); + widget_->maximizeSubWindow(1); +} + +void ASimHUD::inputEventToggleSubwindow2Fullscreen() +{ + inputEventToggleSubwindow2(); + widget_->maximizeSubWindow(2); +} + void ASimHUD::createMainWidget() { //create main widget @@ -239,6 +257,10 @@ void ASimHUD::setupInputBindings() UAirBlueprintLib::BindActionToKey("InputEventToggleSubwindow1", EKeys::Two, this, &ASimHUD::inputEventToggleSubwindow1); UAirBlueprintLib::BindActionToKey("InputEventToggleSubwindow2", EKeys::Three, this, &ASimHUD::inputEventToggleSubwindow2); UAirBlueprintLib::BindActionToKey("InputEventToggleAll", EKeys::Zero, this, &ASimHUD::inputEventToggleAll); + + UAirBlueprintLib::BindActionToKey("InputEventToggleSubwindow0Fullscreen", EKeys::One, this, &ASimHUD::inputEventToggleSubwindow0Fullscreen, false, true); + UAirBlueprintLib::BindActionToKey("InputEventToggleSubwindow1Fullscreen", EKeys::Two, this, &ASimHUD::inputEventToggleSubwindow1Fullscreen, false, true); + UAirBlueprintLib::BindActionToKey("InputEventToggleSubwindow2Fullscreen", EKeys::Three, this, &ASimHUD::inputEventToggleSubwindow2Fullscreen, false, true); } void ASimHUD::initializeSettings() diff --git a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h index 98ebaaa502..56b30c2fa2 100644 --- a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h +++ b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h @@ -33,6 +33,9 @@ class AIRSIM_API ASimHUD : public AHUD void inputEventToggleSubwindow1(); void inputEventToggleSubwindow2(); void inputEventToggleAll(); + void inputEventToggleSubwindow0Fullscreen(); + void inputEventToggleSubwindow1Fullscreen(); + void inputEventToggleSubwindow2Fullscreen(); ImageType getSubwindowCameraType(int window_index); void setSubwindowCameraType(int window_index, ImageType type); diff --git a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUDWidget.h b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUDWidget.h index bcbaff99fa..edc5abe107 100644 --- a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUDWidget.h +++ b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUDWidget.h @@ -42,8 +42,10 @@ class AIRSIM_API USimHUDWidget : public UUserWidget bool getRecordButtonVisibility(); UFUNCTION(BlueprintImplementableEvent, Category = "C++ Interface") - bool initializeForPlay(); + bool initializeForPlay(); + UFUNCTION(BlueprintImplementableEvent, Category = "C++ Interface") + bool maximizeSubWindow(int window_index); protected: UFUNCTION(BlueprintImplementableEvent, Category = "C++ Interface") bool setReportContainerVisibility(bool is_visible); From 1a3ae359611bca284901f93efbcfff2f03d285f1 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 14 Mar 2021 17:22:38 +0200 Subject: [PATCH 002/123] Fix broken docs ref to image types --- docs/settings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/settings.md b/docs/settings.md index 3a9c8fee99..f14027da64 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -301,7 +301,7 @@ This element specifies the settings used for the camera following the vehicle in The `CameraDefaults` element at root level specifies defaults used for all cameras. These defaults can be overridden for individual camera in `Cameras` element inside `Vehicles` as described later. ### Note on ImageType element -The `ImageType` element in JSON array determines which image type that settings applies to. The valid values are described in [ImageType section](image_apis.md#available-imagetype). In addition, we also support special value `ImageType: -1` to apply the settings to external camera (i.e. what you are looking at on the screen). +The `ImageType` element in JSON array determines which image type that settings applies to. The valid values are described in [ImageType section](image_apis.md#available-imagetype-values). In addition, we also support special value `ImageType: -1` to apply the settings to external camera (i.e. what you are looking at on the screen). For example, `CaptureSettings` element is json array so you can add settings for multiple image types easily. From aee0025a1e120e4df26226c35d3cac662d893f8e Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 8 Jul 2021 15:00:07 +0300 Subject: [PATCH 003/123] - fix missing cmmits after merge --- AirLib/include/common/AirSimSettings.hpp | 2 +- Unreal/Environments/Blocks/Blocks.uproject | 2 +- .../Content/Blueprints/BP_SimHUDWidget.uasset | Bin 327382 -> 436905 bytes Unreal/Plugins/AirSim/Source/PIPCamera.cpp | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/AirLib/include/common/AirSimSettings.hpp b/AirLib/include/common/AirSimSettings.hpp index a54334bc9f..0958853ff1 100644 --- a/AirLib/include/common/AirSimSettings.hpp +++ b/AirLib/include/common/AirSimSettings.hpp @@ -1065,7 +1065,7 @@ namespace airlib capture_setting.motion_blur_amount = settings_json.getFloat("MotionBlurAmount", capture_setting.motion_blur_amount); capture_setting.image_type = settings_json.getInt("ImageType", 0); capture_setting.target_gamma = settings_json.getFloat("TargetGamma", - capture_setting.image_type == 0 ? CaptureSetting::kSceneTargetGamma : Utils::nan()); + capture_setting.image_type == 0 || capture_setting.image_type == 5 ? CaptureSetting::kSceneTargetGamma : Utils::nan()); std::string projection_mode = Utils::toLower(settings_json.getString("ProjectionMode", "")); if (projection_mode == "" || projection_mode == "perspective") diff --git a/Unreal/Environments/Blocks/Blocks.uproject b/Unreal/Environments/Blocks/Blocks.uproject index cbc4c1d614..8b6c8b80f8 100644 --- a/Unreal/Environments/Blocks/Blocks.uproject +++ b/Unreal/Environments/Blocks/Blocks.uproject @@ -1,6 +1,6 @@ { "FileVersion": 3, - "EngineAssociation": "4.25", + "EngineAssociation": "4.26", "Category": "", "Description": "", "Modules": [ diff --git a/Unreal/Plugins/AirSim/Content/Blueprints/BP_SimHUDWidget.uasset b/Unreal/Plugins/AirSim/Content/Blueprints/BP_SimHUDWidget.uasset index 43adf255fd41cbe049a084ee012fa8a476c5bb35..a254cd325049a9432803aeb0877b5deed8366680 100644 GIT binary patch literal 436905 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 literal 327382 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 Date: Thu, 12 Aug 2021 11:11:05 -0700 Subject: [PATCH 004/123] - add ros2 folder and first changes --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index 85669e3f14..1aaeb80d90 100644 --- a/.gitignore +++ b/.gitignore @@ -381,6 +381,13 @@ ros/logs/ ros/.catkin_workspace ros/src/CMakeLists.txt +# ROS2 +ros2/.catkin_tools/ +ros/devel/ +ros/logs/ +ros/.catkin_workspace +ros/src/CMakeLists.txt + # docs docs/README.md build_docs/ From 4f2dc081c521dbd8dc9ea3cf516ddec1c072947a Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 12 Aug 2021 14:19:59 -0700 Subject: [PATCH 005/123] - commit everything --- .../src/airsim_ros_wrapper.cpp | 4 +- .../src/pd_position_controller_simple.cpp | 32 +- ros2/install/.colcon_install_layout | 1 + ros2/install/COLCON_IGNORE | 0 ros2/install/_local_setup_util_ps1.py | 376 +++++ ros2/install/_local_setup_util_sh.py | 376 +++++ .../include/airsim_interfaces/msg/altimeter.h | 12 + .../airsim_interfaces/msg/altimeter.hpp | 11 + .../airsim_interfaces/msg/car_controls.h | 12 + .../airsim_interfaces/msg/car_controls.hpp | 11 + .../include/airsim_interfaces/msg/car_state.h | 12 + .../airsim_interfaces/msg/car_state.hpp | 11 + .../msg/detail/altimeter__builder.hpp | 103 ++ .../msg/detail/altimeter__functions.c | 153 ++ .../msg/detail/altimeter__functions.h | 124 ++ ...altimeter__rosidl_typesupport_fastrtps_c.h | 36 + ...meter__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...eter__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/altimeter__struct.h | 47 + .../msg/detail/altimeter__struct.hpp | 175 ++ .../msg/detail/altimeter__traits.hpp | 46 + .../msg/detail/altimeter__type_support.c | 134 ++ .../msg/detail/altimeter__type_support.cpp | 152 ++ .../msg/detail/altimeter__type_support.h | 33 + .../msg/detail/car_controls__builder.hpp | 167 ++ .../msg/detail/car_controls__functions.c | 161 ++ .../msg/detail/car_controls__functions.h | 124 ++ ..._controls__rosidl_typesupport_fastrtps_c.h | 36 + ...trols__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...rols__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/car_controls__struct.h | 51 + .../msg/detail/car_controls__struct.hpp | 231 +++ .../msg/detail/car_controls__traits.hpp | 46 + .../msg/detail/car_controls__type_support.c | 194 +++ .../msg/detail/car_controls__type_support.cpp | 212 +++ .../msg/detail/car_controls__type_support.h | 33 + .../msg/detail/car_state__builder.hpp | 167 ++ .../msg/detail/car_state__functions.c | 175 ++ .../msg/detail/car_state__functions.h | 124 ++ ...car_state__rosidl_typesupport_fastrtps_c.h | 36 + ...state__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...tate__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/car_state__struct.h | 55 + .../msg/detail/car_state__struct.hpp | 235 +++ .../msg/detail/car_state__traits.hpp | 50 + .../msg/detail/car_state__type_support.c | 206 +++ .../msg/detail/car_state__type_support.cpp | 212 +++ .../msg/detail/car_state__type_support.h | 33 + .../msg/detail/environment__builder.hpp | 151 ++ .../msg/detail/environment__functions.c | 179 ++ .../msg/detail/environment__functions.h | 124 ++ ...vironment__rosidl_typesupport_fastrtps_c.h | 36 + ...nment__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...ment__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/environment__struct.h | 55 + .../msg/detail/environment__struct.hpp | 222 +++ .../msg/detail/environment__traits.hpp | 51 + .../msg/detail/environment__type_support.c | 195 +++ .../msg/detail/environment__type_support.cpp | 197 +++ .../msg/detail/environment__type_support.h | 33 + .../gimbal_angle_euler_cmd__builder.hpp | 135 ++ .../gimbal_angle_euler_cmd__functions.c | 170 ++ .../gimbal_angle_euler_cmd__functions.h | 124 ++ ...euler_cmd__rosidl_typesupport_fastrtps_c.h | 36 + ...r_cmd__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ..._cmd__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../detail/gimbal_angle_euler_cmd__struct.h | 52 + .../detail/gimbal_angle_euler_cmd__struct.hpp | 205 +++ .../detail/gimbal_angle_euler_cmd__traits.hpp | 46 + .../gimbal_angle_euler_cmd__type_support.c | 167 ++ .../gimbal_angle_euler_cmd__type_support.cpp | 182 ++ .../gimbal_angle_euler_cmd__type_support.h | 33 + .../detail/gimbal_angle_quat_cmd__builder.hpp | 103 ++ .../detail/gimbal_angle_quat_cmd__functions.c | 173 ++ .../detail/gimbal_angle_quat_cmd__functions.h | 124 ++ ..._quat_cmd__rosidl_typesupport_fastrtps_c.h | 36 + ...t_cmd__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ..._cmd__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../detail/gimbal_angle_quat_cmd__struct.h | 52 + .../detail/gimbal_angle_quat_cmd__struct.hpp | 179 ++ .../detail/gimbal_angle_quat_cmd__traits.hpp | 48 + .../gimbal_angle_quat_cmd__type_support.c | 143 ++ .../gimbal_angle_quat_cmd__type_support.cpp | 152 ++ .../gimbal_angle_quat_cmd__type_support.h | 33 + .../msg/detail/gps_yaw__builder.hpp | 103 ++ .../msg/detail/gps_yaw__functions.c | 144 ++ .../msg/detail/gps_yaw__functions.h | 124 ++ .../gps_yaw__rosidl_typesupport_fastrtps_c.h | 36 + ...s_yaw__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ..._yaw__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/gps_yaw__struct.h | 43 + .../msg/detail/gps_yaw__struct.hpp | 172 ++ .../msg/detail/gps_yaw__traits.hpp | 42 + .../msg/detail/gps_yaw__type_support.c | 126 ++ .../msg/detail/gps_yaw__type_support.cpp | 152 ++ .../msg/detail/gps_yaw__type_support.h | 33 + .../msg/detail/vel_cmd__builder.hpp | 55 + .../msg/detail/vel_cmd__functions.c | 147 ++ .../msg/detail/vel_cmd__functions.h | 124 ++ .../vel_cmd__rosidl_typesupport_fastrtps_c.h | 36 + ...l_cmd__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ..._cmd__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/vel_cmd__struct.h | 44 + .../msg/detail/vel_cmd__struct.hpp | 127 ++ .../msg/detail/vel_cmd__traits.hpp | 46 + .../msg/detail/vel_cmd__type_support.c | 89 + .../msg/detail/vel_cmd__type_support.cpp | 107 ++ .../msg/detail/vel_cmd__type_support.h | 33 + .../msg/detail/vel_cmd_group__builder.hpp | 71 + .../msg/detail/vel_cmd_group__functions.c | 156 ++ .../msg/detail/vel_cmd_group__functions.h | 124 ++ ...cmd_group__rosidl_typesupport_fastrtps_c.h | 36 + ...group__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...roup__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/vel_cmd_group__struct.h | 47 + .../msg/detail/vel_cmd_group__struct.hpp | 139 ++ .../msg/detail/vel_cmd_group__traits.hpp | 46 + .../msg/detail/vel_cmd_group__type_support.c | 106 ++ .../detail/vel_cmd_group__type_support.cpp | 149 ++ .../msg/detail/vel_cmd_group__type_support.h | 33 + .../airsim_interfaces/msg/environment.h | 12 + .../airsim_interfaces/msg/environment.hpp | 11 + .../msg/gimbal_angle_euler_cmd.h | 12 + .../msg/gimbal_angle_euler_cmd.hpp | 11 + .../msg/gimbal_angle_quat_cmd.h | 12 + .../msg/gimbal_angle_quat_cmd.hpp | 11 + .../include/airsim_interfaces/msg/gps_yaw.h | 12 + .../include/airsim_interfaces/msg/gps_yaw.hpp | 11 + .../rosidl_generator_c__visibility_control.h | 42 + ...pesupport_fastrtps_c__visibility_control.h | 43 + ...support_fastrtps_cpp__visibility_control.h | 43 + ...port_introspection_c__visibility_control.h | 43 + .../include/airsim_interfaces/msg/vel_cmd.h | 12 + .../include/airsim_interfaces/msg/vel_cmd.hpp | 11 + .../airsim_interfaces/msg/vel_cmd_group.h | 12 + .../airsim_interfaces/msg/vel_cmd_group.hpp | 11 + .../srv/detail/land__builder.hpp | 97 ++ .../srv/detail/land__functions.c | 266 +++ .../srv/detail/land__functions.h | 223 +++ .../land__rosidl_typesupport_fastrtps_c.h | 87 + .../land__rosidl_typesupport_fastrtps_cpp.hpp | 175 ++ ...land__rosidl_typesupport_introspection_c.h | 47 + ...__rosidl_typesupport_introspection_cpp.hpp | 67 + .../srv/detail/land__struct.h | 59 + .../srv/detail/land__struct.hpp | 260 +++ .../srv/detail/land__traits.hpp | 126 ++ .../srv/detail/land__type_support.c | 224 +++ .../srv/detail/land__type_support.cpp | 332 ++++ .../srv/detail/land__type_support.h | 58 + .../srv/detail/land_group__builder.hpp | 113 ++ .../srv/detail/land_group__functions.c | 277 ++++ .../srv/detail/land_group__functions.h | 223 +++ ...and_group__rosidl_typesupport_fastrtps_c.h | 87 + ...group__rosidl_typesupport_fastrtps_cpp.hpp | 175 ++ ...roup__rosidl_typesupport_introspection_c.h | 47 + ...__rosidl_typesupport_introspection_cpp.hpp | 67 + .../srv/detail/land_group__struct.h | 64 + .../srv/detail/land_group__struct.hpp | 272 +++ .../srv/detail/land_group__traits.hpp | 126 ++ .../srv/detail/land_group__type_support.c | 243 +++ .../srv/detail/land_group__type_support.cpp | 374 +++++ .../srv/detail/land_group__type_support.h | 58 + .../srv/detail/reset__builder.hpp | 97 ++ .../srv/detail/reset__functions.c | 266 +++ .../srv/detail/reset__functions.h | 223 +++ .../reset__rosidl_typesupport_fastrtps_c.h | 87 + ...reset__rosidl_typesupport_fastrtps_cpp.hpp | 175 ++ ...eset__rosidl_typesupport_introspection_c.h | 47 + ...__rosidl_typesupport_introspection_cpp.hpp | 67 + .../srv/detail/reset__struct.h | 59 + .../srv/detail/reset__struct.hpp | 260 +++ .../srv/detail/reset__traits.hpp | 126 ++ .../srv/detail/reset__type_support.c | 224 +++ .../srv/detail/reset__type_support.cpp | 332 ++++ .../srv/detail/reset__type_support.h | 58 + .../srv/detail/set_gps_position__builder.hpp | 161 ++ .../srv/detail/set_gps_position__functions.c | 283 ++++ .../srv/detail/set_gps_position__functions.h | 223 +++ ..._position__rosidl_typesupport_fastrtps_c.h | 87 + ...ition__rosidl_typesupport_fastrtps_cpp.hpp | 175 ++ ...tion__rosidl_typesupport_introspection_c.h | 47 + ...__rosidl_typesupport_introspection_cpp.hpp | 67 + .../srv/detail/set_gps_position__struct.h | 67 + .../srv/detail/set_gps_position__struct.hpp | 316 ++++ .../srv/detail/set_gps_position__traits.hpp | 126 ++ .../detail/set_gps_position__type_support.c | 288 ++++ .../detail/set_gps_position__type_support.cpp | 392 +++++ .../detail/set_gps_position__type_support.h | 58 + .../detail/set_local_position__builder.hpp | 177 ++ .../detail/set_local_position__functions.c | 295 ++++ .../detail/set_local_position__functions.h | 223 +++ ..._position__rosidl_typesupport_fastrtps_c.h | 87 + ...ition__rosidl_typesupport_fastrtps_cpp.hpp | 175 ++ ...tion__rosidl_typesupport_introspection_c.h | 47 + ...__rosidl_typesupport_introspection_cpp.hpp | 67 + .../srv/detail/set_local_position__struct.h | 73 + .../srv/detail/set_local_position__struct.hpp | 330 ++++ .../srv/detail/set_local_position__traits.hpp | 126 ++ .../detail/set_local_position__type_support.c | 308 ++++ .../set_local_position__type_support.cpp | 407 +++++ .../detail/set_local_position__type_support.h | 58 + .../srv/detail/takeoff__builder.hpp | 97 ++ .../srv/detail/takeoff__functions.c | 266 +++ .../srv/detail/takeoff__functions.h | 223 +++ .../takeoff__rosidl_typesupport_fastrtps_c.h | 87 + ...keoff__rosidl_typesupport_fastrtps_cpp.hpp | 175 ++ ...eoff__rosidl_typesupport_introspection_c.h | 47 + ...__rosidl_typesupport_introspection_cpp.hpp | 67 + .../srv/detail/takeoff__struct.h | 59 + .../srv/detail/takeoff__struct.hpp | 260 +++ .../srv/detail/takeoff__traits.hpp | 126 ++ .../srv/detail/takeoff__type_support.c | 224 +++ .../srv/detail/takeoff__type_support.cpp | 332 ++++ .../srv/detail/takeoff__type_support.h | 58 + .../srv/detail/takeoff_group__builder.hpp | 113 ++ .../srv/detail/takeoff_group__functions.c | 277 ++++ .../srv/detail/takeoff_group__functions.h | 223 +++ ...off_group__rosidl_typesupport_fastrtps_c.h | 87 + ...group__rosidl_typesupport_fastrtps_cpp.hpp | 175 ++ ...roup__rosidl_typesupport_introspection_c.h | 47 + ...__rosidl_typesupport_introspection_cpp.hpp | 67 + .../srv/detail/takeoff_group__struct.h | 64 + .../srv/detail/takeoff_group__struct.hpp | 272 +++ .../srv/detail/takeoff_group__traits.hpp | 126 ++ .../srv/detail/takeoff_group__type_support.c | 243 +++ .../detail/takeoff_group__type_support.cpp | 374 +++++ .../srv/detail/takeoff_group__type_support.h | 58 + .../include/airsim_interfaces/srv/land.h | 12 + .../include/airsim_interfaces/srv/land.hpp | 11 + .../airsim_interfaces/srv/land_group.h | 12 + .../airsim_interfaces/srv/land_group.hpp | 11 + .../include/airsim_interfaces/srv/reset.h | 12 + .../include/airsim_interfaces/srv/reset.hpp | 11 + .../airsim_interfaces/srv/set_gps_position.h | 12 + .../srv/set_gps_position.hpp | 11 + .../srv/set_local_position.h | 12 + .../srv/set_local_position.hpp | 11 + .../include/airsim_interfaces/srv/takeoff.h | 12 + .../include/airsim_interfaces/srv/takeoff.hpp | 11 + .../airsim_interfaces/srv/takeoff_group.h | 12 + .../airsim_interfaces/srv/takeoff_group.hpp | 11 + .../lib/libairsim_interfaces__python.so | Bin 0 -> 120504 bytes ...ibairsim_interfaces__rosidl_generator_c.so | Bin 0 -> 91512 bytes ...airsim_interfaces__rosidl_typesupport_c.so | Bin 0 -> 64808 bytes ...rsim_interfaces__rosidl_typesupport_cpp.so | Bin 0 -> 75624 bytes ...terfaces__rosidl_typesupport_fastrtps_c.so | Bin 0 -> 106808 bytes ...rfaces__rosidl_typesupport_fastrtps_cpp.so | Bin 0 -> 172656 bytes ...ces__rosidl_typesupport_introspection_c.so | Bin 0 -> 76928 bytes ...s__rosidl_typesupport_introspection_cpp.so | Bin 0 -> 166488 bytes .../airsim_interfaces/__init__.py | 0 ...pesupport_c.cpython-38-x86_64-linux-gnu.so | Bin 0 -> 74936 bytes ..._fastrtps_c.cpython-38-x86_64-linux-gnu.so | Bin 0 -> 74984 bytes ...ospection_c.cpython-38-x86_64-linux-gnu.so | Bin 0 -> 74960 bytes .../airsim_interfaces/msg/__init__.py | 9 + .../airsim_interfaces/msg/_altimeter.py | 185 +++ .../airsim_interfaces/msg/_altimeter_s.c | 167 ++ .../airsim_interfaces/msg/_car_controls.py | 263 +++ .../airsim_interfaces/msg/_car_controls_s.c | 247 +++ .../airsim_interfaces/msg/_car_state.py | 275 +++ .../airsim_interfaces/msg/_car_state_s.c | 265 +++ .../airsim_interfaces/msg/_environment.py | 256 +++ .../airsim_interfaces/msg/_environment_s.c | 254 +++ .../msg/_gimbal_angle_euler_cmd.py | 223 +++ .../msg/_gimbal_angle_euler_cmd_s.c | 234 +++ .../msg/_gimbal_angle_quat_cmd.py | 191 +++ .../msg/_gimbal_angle_quat_cmd_s.c | 203 +++ .../airsim_interfaces/msg/_gps_yaw.py | 179 ++ .../airsim_interfaces/msg/_gps_yaw_s.c | 158 ++ .../airsim_interfaces/msg/_vel_cmd.py | 128 ++ .../airsim_interfaces/msg/_vel_cmd_group.py | 157 ++ .../airsim_interfaces/msg/_vel_cmd_group_s.c | 181 ++ .../airsim_interfaces/msg/_vel_cmd_s.c | 107 ++ .../airsim_interfaces/srv/__init__.py | 7 + .../airsim_interfaces/srv/_land.py | 278 ++++ .../airsim_interfaces/srv/_land_group.py | 307 ++++ .../airsim_interfaces/srv/_land_group_s.c | 267 +++ .../airsim_interfaces/srv/_land_s.c | 193 +++ .../airsim_interfaces/srv/_reset.py | 278 ++++ .../airsim_interfaces/srv/_reset_s.c | 193 +++ .../srv/_set_gps_position.py | 354 ++++ .../srv/_set_gps_position_s.c | 288 ++++ .../srv/_set_local_position.py | 373 +++++ .../srv/_set_local_position_s.c | 325 ++++ .../airsim_interfaces/srv/_takeoff.py | 278 ++++ .../airsim_interfaces/srv/_takeoff_group.py | 307 ++++ .../airsim_interfaces/srv/_takeoff_group_s.c | 267 +++ .../airsim_interfaces/srv/_takeoff_s.c | 193 +++ .../airsim_interfacesConfig-version.cmake | 14 + .../cmake/airsim_interfacesConfig.cmake | 42 + ...s__rosidl_generator_cExport-noconfig.cmake | 19 + ...interfaces__rosidl_generator_cExport.cmake | 99 ++ ...terfaces__rosidl_generator_cppExport.cmake | 99 ++ ..._rosidl_typesupport_cExport-noconfig.cmake | 19 + ...terfaces__rosidl_typesupport_cExport.cmake | 99 ++ ...osidl_typesupport_cppExport-noconfig.cmake | 19 + ...rfaces__rosidl_typesupport_cppExport.cmake | 99 ++ ...pport_introspection_cExport-noconfig.cmake | 19 + ...dl_typesupport_introspection_cExport.cmake | 114 ++ ...ort_introspection_cppExport-noconfig.cmake | 19 + ..._typesupport_introspection_cppExport.cmake | 98 ++ ...ent_cmake_export_dependencies-extras.cmake | 80 + ...ke_export_include_directories-extras.cmake | 16 + .../ament_cmake_export_libraries-extras.cmake | 140 ++ .../ament_cmake_export_targets-extras.cmake | 27 + .../cmake/rosidl_cmake-extras.cmake | 4 + ..._export_typesupport_libraries-extras.cmake | 46 + ...ke_export_typesupport_targets-extras.cmake | 23 + .../environment/ament_prefix_path.dsv | 1 + .../environment/ament_prefix_path.sh | 4 + .../environment/library_path.dsv | 1 + .../environment/library_path.sh | 16 + .../airsim_interfaces/environment/path.dsv | 1 + .../airsim_interfaces/environment/path.sh | 5 + .../environment/pythonpath.dsv | 1 + .../environment/pythonpath.sh | 3 + .../hook/cmake_prefix_path.dsv | 1 + .../hook/cmake_prefix_path.ps1 | 3 + .../hook/cmake_prefix_path.sh | 3 + .../hook/ld_library_path_lib.dsv | 1 + .../hook/ld_library_path_lib.ps1 | 3 + .../hook/ld_library_path_lib.sh | 3 + .../airsim_interfaces/hook/pythonpath.dsv | 1 + .../airsim_interfaces/hook/pythonpath.ps1 | 3 + .../airsim_interfaces/hook/pythonpath.sh | 3 + .../share/airsim_interfaces/local_setup.bash | 46 + .../share/airsim_interfaces/local_setup.dsv | 4 + .../share/airsim_interfaces/local_setup.sh | 135 ++ .../share/airsim_interfaces/local_setup.zsh | 59 + .../share/airsim_interfaces/msg/Altimeter.idl | 19 + .../share/airsim_interfaces/msg/Altimeter.msg | 4 + .../airsim_interfaces/msg/CarControls.idl | 27 + .../airsim_interfaces/msg/CarControls.msg | 8 + .../share/airsim_interfaces/msg/CarState.idl | 29 + .../share/airsim_interfaces/msg/CarState.msg | 8 + .../airsim_interfaces/msg/Environment.idl | 27 + .../airsim_interfaces/msg/Environment.msg | 8 + .../share/airsim_interfaces/msg/GPSYaw.idl | 18 + .../share/airsim_interfaces/msg/GPSYaw.msg | 4 + .../msg/GimbalAngleEulerCmd.idl | 23 + .../msg/GimbalAngleEulerCmd.msg | 6 + .../msg/GimbalAngleQuatCmd.idl | 20 + .../msg/GimbalAngleQuatCmd.msg | 4 + .../share/airsim_interfaces/msg/VelCmd.idl | 13 + .../share/airsim_interfaces/msg/VelCmd.msg | 2 + .../airsim_interfaces/msg/VelCmdGroup.idl | 15 + .../airsim_interfaces/msg/VelCmdGroup.msg | 2 + .../share/airsim_interfaces/package.bash | 39 + .../share/airsim_interfaces/package.dsv | 14 + .../share/airsim_interfaces/package.ps1 | 67 + .../share/airsim_interfaces/package.sh | 89 + .../share/airsim_interfaces/package.xml | 24 + .../share/airsim_interfaces/package.zsh | 50 + .../share/airsim_interfaces/srv/Land.idl | 15 + .../share/airsim_interfaces/srv/Land.srv | 3 + .../share/airsim_interfaces/srv/LandGroup.idl | 17 + .../share/airsim_interfaces/srv/LandGroup.srv | 4 + .../srv/LandGroup_Request.msg | 2 + .../srv/LandGroup_Response.msg | 2 + .../airsim_interfaces/srv/Land_Request.msg | 1 + .../airsim_interfaces/srv/Land_Response.msg | 2 + .../share/airsim_interfaces/srv/Reset.idl | 17 + .../share/airsim_interfaces/srv/Reset.srv | 4 + .../airsim_interfaces/srv/Reset_Request.msg | 2 + .../airsim_interfaces/srv/Reset_Response.msg | 2 + .../airsim_interfaces/srv/SetGPSPosition.idl | 25 + .../airsim_interfaces/srv/SetGPSPosition.srv | 8 + .../srv/SetGPSPosition_Request.msg | 5 + .../srv/SetGPSPosition_Response.msg | 3 + .../srv/SetLocalPosition.idl | 30 + .../srv/SetLocalPosition.srv | 11 + .../srv/SetLocalPosition_Request.msg | 7 + .../srv/SetLocalPosition_Response.msg | 4 + .../share/airsim_interfaces/srv/Takeoff.idl | 15 + .../share/airsim_interfaces/srv/Takeoff.srv | 3 + .../airsim_interfaces/srv/TakeoffGroup.idl | 17 + .../airsim_interfaces/srv/TakeoffGroup.srv | 4 + .../srv/TakeoffGroup_Request.msg | 2 + .../srv/TakeoffGroup_Response.msg | 2 + .../airsim_interfaces/srv/Takeoff_Request.msg | 1 + .../srv/Takeoff_Response.msg | 2 + .../airsim_interfaces | 1 + .../parent_prefix_path/airsim_interfaces | 1 + .../rosidl_interfaces/airsim_interfaces | 46 + .../share/airsim_ros_pkgs/package.bash | 39 + .../share/airsim_ros_pkgs/package.dsv | 5 + .../share/airsim_ros_pkgs/package.ps1 | 64 + .../share/airsim_ros_pkgs/package.sh | 86 + .../share/airsim_ros_pkgs/package.zsh | 50 + ros2/install/local_setup.bash | 107 ++ ros2/install/local_setup.ps1 | 53 + ros2/install/local_setup.sh | 114 ++ ros2/install/local_setup.zsh | 120 ++ ros2/install/setup.bash | 31 + ros2/install/setup.ps1 | 29 + ros2/install/setup.sh | 45 + ros2/install/setup.zsh | 31 + ros2/log/COLCON_IGNORE | 0 ros2/log/latest | 1 + ros2/log/latest_build | 1 + ros2/src/airsim_interfaces/CMakeLists.txt | 38 + ros2/src/airsim_interfaces/example_interfaces | 1 + ros2/src/airsim_interfaces/msg/Altimeter.msg | 4 + .../src/airsim_interfaces/msg/CarControls.msg | 8 + ros2/src/airsim_interfaces/msg/CarState.msg | 8 + .../src/airsim_interfaces/msg/Environment.msg | 8 + ros2/src/airsim_interfaces/msg/GPSYaw.msg | 4 + .../msg/GimbalAngleEulerCmd.msg | 6 + .../msg/GimbalAngleQuatCmd.msg | 4 + ros2/src/airsim_interfaces/msg/VelCmd.msg | 2 + .../src/airsim_interfaces/msg/VelCmdGroup.msg | 2 + ros2/src/airsim_interfaces/package.xml | 24 + ros2/src/airsim_interfaces/srv/Land.srv | 3 + ros2/src/airsim_interfaces/srv/LandGroup.srv | 4 + ros2/src/airsim_interfaces/srv/Reset.srv | 4 + .../airsim_interfaces/srv/SetGPSPosition.srv | 8 + .../srv/SetLocalPosition.srv | 11 + ros2/src/airsim_interfaces/srv/Takeoff.srv | 3 + .../airsim_interfaces/srv/TakeoffGroup.srv | 4 + .../src/airsim_ros_pkgs/CMakeLists (copy).txt | 149 ++ ros2/src/airsim_ros_pkgs/CMakeLists.txt | 163 ++ ros2/src/airsim_ros_pkgs/README.md | 3 + .../include/airsim_ros_wrapper.h | 393 +++++ .../include/airsim_settings_parser.h | 35 + .../airsim_ros_pkgs/include/geodetic_conv.hpp | 227 +++ .../src/airsim_ros_pkgs/include/math_common.h | 45 + .../include/pd_position_controller_simple.h | 139 ++ ros2/src/airsim_ros_pkgs/include/utils.h | 14 + .../airsim_ros_pkgs/launch/airsim_all.launch | 9 + .../launch/airsim_car_with_joy_control.launch | 25 + .../airsim_car_with_joy_control_auto.launch | 27 + .../airsim_ros_pkgs/launch/airsim_node.launch | 19 + ..._with_simple_PD_position_controller.launch | 9 + .../launch/dynamic_constraints.launch | 24 + .../launch/position_controller_simple.launch | 20 + ros2/src/airsim_ros_pkgs/launch/rviz.launch | 3 + .../launch/static_transforms.launch | 3 + ros2/src/airsim_ros_pkgs/package.xml | 53 + ros2/src/airsim_ros_pkgs/rviz/default.rviz | 293 ++++ ros2/src/airsim_ros_pkgs/scripts/car_joy | 150 ++ ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 26 + .../src/airsim_ros_wrapper.cpp | 1476 +++++++++++++++++ .../src/airsim_settings_parser.cpp | 43 + .../src/pd_position_controller_simple.cpp | 342 ++++ .../pd_position_controller_simple_node.cpp | 22 + ros2/src/airsim_tutorial_pkgs/CMakeLists.txt | 29 + ros2/src/airsim_tutorial_pkgs/README.md | 3 + .../front_stereo_and_center_mono/default.rviz | 285 ++++ .../depth_to_pointcloud.launch | 18 + .../front_stereo_and_center_mono.launch | 4 + .../front_stereo_and_center_mono/rviz.launch | 3 + .../two_drones_camera_lidar_imu/default.rviz | 280 ++++ ros2/src/airsim_tutorial_pkgs/package.xml | 37 + .../scripts/multi_drone_json_creator.py | 78 + .../airsim_tutorial_pkgs/settings/car.json | 108 ++ .../front_stereo_and_center_mono.json | 98 ++ .../settings/twenty_five_drones.json | 233 +++ .../settings/two_drones_camera_lidar_imu.json | 100 ++ ros2/src/log/COLCON_IGNORE | 0 ros2/src/log/latest | 1 + ros2/src/log/latest_list | 1 + 469 files changed, 42825 insertions(+), 18 deletions(-) create mode 100644 ros2/install/.colcon_install_layout create mode 100644 ros2/install/COLCON_IGNORE create mode 100644 ros2/install/_local_setup_util_ps1.py create mode 100644 ros2/install/_local_setup_util_sh.py create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_generator_c__visibility_control.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__builder.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_cpp.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__traits.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.c create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.cpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.hpp create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.h create mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.hpp create mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__python.so create mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_generator_c.so create mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_c.so create mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_cpp.so create mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_fastrtps_c.so create mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_fastrtps_cpp.so create mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_introspection_c.so create mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_introspection_cpp.so create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/__init__.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_c.cpython-38-x86_64-linux-gnu.so create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_fastrtps_c.cpython-38-x86_64-linux-gnu.so create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_introspection_c.cpython-38-x86_64-linux-gnu.so create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/__init__.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/__init__.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group.py create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group_s.c create mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_s.c create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig-version.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport-noconfig.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cppExport.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport-noconfig.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport-noconfig.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport-noconfig.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport-noconfig.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_include_directories-extras.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_libraries-extras.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_targets-extras.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake-extras.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.dsv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.sh create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.dsv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.sh create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.dsv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.sh create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.dsv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.sh create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.dsv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.ps1 create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.sh create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.dsv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.ps1 create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.sh create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.dsv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.ps1 create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.sh create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.bash create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.dsv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.sh create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.zsh create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.bash create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.dsv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.ps1 create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.sh create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.xml create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.zsh create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.srv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.srv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Request.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Response.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Request.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Response.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.srv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Request.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Response.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.srv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Request.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Response.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.srv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Request.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Response.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.srv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.idl create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.srv create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Request.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Response.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Request.msg create mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Response.msg create mode 100644 ros2/install/airsim_interfaces/share/ament_index/resource_index/package_run_dependencies/airsim_interfaces create mode 100644 ros2/install/airsim_interfaces/share/ament_index/resource_index/parent_prefix_path/airsim_interfaces create mode 100644 ros2/install/airsim_interfaces/share/ament_index/resource_index/rosidl_interfaces/airsim_interfaces create mode 100644 ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.bash create mode 100644 ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.dsv create mode 100644 ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.ps1 create mode 100644 ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.sh create mode 100644 ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.zsh create mode 100644 ros2/install/local_setup.bash create mode 100644 ros2/install/local_setup.ps1 create mode 100644 ros2/install/local_setup.sh create mode 100644 ros2/install/local_setup.zsh create mode 100644 ros2/install/setup.bash create mode 100644 ros2/install/setup.ps1 create mode 100644 ros2/install/setup.sh create mode 100644 ros2/install/setup.zsh create mode 100644 ros2/log/COLCON_IGNORE create mode 120000 ros2/log/latest create mode 120000 ros2/log/latest_build create mode 100644 ros2/src/airsim_interfaces/CMakeLists.txt create mode 160000 ros2/src/airsim_interfaces/example_interfaces create mode 100755 ros2/src/airsim_interfaces/msg/Altimeter.msg create mode 100755 ros2/src/airsim_interfaces/msg/CarControls.msg create mode 100755 ros2/src/airsim_interfaces/msg/CarState.msg create mode 100755 ros2/src/airsim_interfaces/msg/Environment.msg create mode 100755 ros2/src/airsim_interfaces/msg/GPSYaw.msg create mode 100755 ros2/src/airsim_interfaces/msg/GimbalAngleEulerCmd.msg create mode 100755 ros2/src/airsim_interfaces/msg/GimbalAngleQuatCmd.msg create mode 100755 ros2/src/airsim_interfaces/msg/VelCmd.msg create mode 100755 ros2/src/airsim_interfaces/msg/VelCmdGroup.msg create mode 100644 ros2/src/airsim_interfaces/package.xml create mode 100755 ros2/src/airsim_interfaces/srv/Land.srv create mode 100755 ros2/src/airsim_interfaces/srv/LandGroup.srv create mode 100755 ros2/src/airsim_interfaces/srv/Reset.srv create mode 100755 ros2/src/airsim_interfaces/srv/SetGPSPosition.srv create mode 100755 ros2/src/airsim_interfaces/srv/SetLocalPosition.srv create mode 100755 ros2/src/airsim_interfaces/srv/Takeoff.srv create mode 100755 ros2/src/airsim_interfaces/srv/TakeoffGroup.srv create mode 100644 ros2/src/airsim_ros_pkgs/CMakeLists (copy).txt create mode 100644 ros2/src/airsim_ros_pkgs/CMakeLists.txt create mode 100755 ros2/src/airsim_ros_pkgs/README.md create mode 100755 ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h create mode 100755 ros2/src/airsim_ros_pkgs/include/airsim_settings_parser.h create mode 100755 ros2/src/airsim_ros_pkgs/include/geodetic_conv.hpp create mode 100755 ros2/src/airsim_ros_pkgs/include/math_common.h create mode 100755 ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h create mode 100755 ros2/src/airsim_ros_pkgs/include/utils.h create mode 100755 ros2/src/airsim_ros_pkgs/launch/airsim_all.launch create mode 100755 ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control.launch create mode 100755 ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control_auto.launch create mode 100755 ros2/src/airsim_ros_pkgs/launch/airsim_node.launch create mode 100755 ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch create mode 100755 ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch create mode 100755 ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch create mode 100755 ros2/src/airsim_ros_pkgs/launch/rviz.launch create mode 100755 ros2/src/airsim_ros_pkgs/launch/static_transforms.launch create mode 100644 ros2/src/airsim_ros_pkgs/package.xml create mode 100755 ros2/src/airsim_ros_pkgs/rviz/default.rviz create mode 100755 ros2/src/airsim_ros_pkgs/scripts/car_joy create mode 100755 ros2/src/airsim_ros_pkgs/src/airsim_node.cpp create mode 100755 ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp create mode 100755 ros2/src/airsim_ros_pkgs/src/airsim_settings_parser.cpp create mode 100755 ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp create mode 100755 ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp create mode 100755 ros2/src/airsim_tutorial_pkgs/CMakeLists.txt create mode 100755 ros2/src/airsim_tutorial_pkgs/README.md create mode 100755 ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/default.rviz create mode 100755 ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/depth_to_pointcloud.launch create mode 100755 ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/front_stereo_and_center_mono.launch create mode 100755 ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/rviz.launch create mode 100755 ros2/src/airsim_tutorial_pkgs/launch/two_drones_camera_lidar_imu/default.rviz create mode 100755 ros2/src/airsim_tutorial_pkgs/package.xml create mode 100755 ros2/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py create mode 100755 ros2/src/airsim_tutorial_pkgs/settings/car.json create mode 100755 ros2/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json create mode 100755 ros2/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json create mode 100755 ros2/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json create mode 100644 ros2/src/log/COLCON_IGNORE create mode 120000 ros2/src/log/latest create mode 120000 ros2/src/log/latest_list diff --git a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index dc8ac68294..ab03590a1c 100644 --- a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -41,11 +41,11 @@ AirsimROSWrapper::AirsimROSWrapper(const ros::NodeHandle& nh, const ros::NodeHan if (AirSimSettings::singleton().simmode_name != AirSimSettings::kSimModeTypeCar) { airsim_mode_ = AIRSIM_MODE::DRONE; - ROS_INFO("Setting ROS wrapper to DRONE mode"); + RCLCPP_INFO("Setting ROS wrapper to DRONE mode"); } else { airsim_mode_ = AIRSIM_MODE::CAR; - ROS_INFO("Setting ROS wrapper to CAR mode"); + RCLCPP_INFO("Setting ROS wrapper to CAR mode"); } initialize_ros(); diff --git a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index f03e49074d..1b93dbe9aa 100644 --- a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -59,7 +59,7 @@ void PIDPositionController::initialize_ros() while (vehicle_name == "") { nh_private_.getParam("/vehicle_name", vehicle_name); - ROS_INFO_STREAM("Waiting vehicle name"); + RCLCPP_INFO_STREAM("Waiting vehicle name"); } // ROS publishers @@ -119,7 +119,7 @@ bool PIDPositionController::local_position_goal_srv_cb(airsim_ros_pkgs::SetLocal target_position_.y = request.y; target_position_.z = request.z; target_position_.yaw = request.yaw; - ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -130,7 +130,7 @@ bool PIDPositionController::local_position_goal_srv_cb(airsim_ros_pkgs::SetLocal } // Already have goal, and have reached it - ROS_INFO_STREAM("[PIDPositionController] Already have goal and have reached it"); + RCLCPP_INFO_STREAM("[PIDPositionController] Already have goal and have reached it"); return false; } @@ -144,7 +144,7 @@ bool PIDPositionController::local_position_goal_srv_override_cb(airsim_ros_pkgs: target_position_.y = request.y; target_position_.z = request.z; target_position_.yaw = request.yaw; - ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -160,7 +160,7 @@ void PIDPositionController::home_geopoint_cb(const airsim_ros_pkgs::GPSYaw& gps_ return; gps_home_msg_ = gps_msg; has_home_geo_ = true; - ROS_INFO_STREAM("[PIDPositionController] GPS reference initializing " << gps_msg.latitude << ", " << gps_msg.longitude << ", " << gps_msg.altitude); + RCLCPP_INFO_STREAM("[PIDPositionController] GPS reference initializing " << gps_msg.latitude << ", " << gps_msg.longitude << ", " << gps_msg.altitude); geodetic_converter_.initialiseReference(gps_msg.latitude, gps_msg.longitude, gps_msg.altitude); } @@ -183,14 +183,14 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Req geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); double n, e, d; geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); - // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + // RCLCPP_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); target_position_.x = n; target_position_.y = e; target_position_.z = d; } else // use airlib::GeodeticToNedFast { - ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + RCLCPP_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; @@ -199,8 +199,8 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Req } target_position_.yaw = request.yaw; // todo - ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -211,7 +211,7 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Req } // Already have goal, this shouldn't happen - ROS_INFO_STREAM("[PIDPositionController] Goal already received, ignoring!"); + RCLCPP_INFO_STREAM("[PIDPositionController] Goal already received, ignoring!"); return false; } @@ -233,14 +233,14 @@ bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosi geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); double n, e, d; geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); - // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + // RCLCPP_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); target_position_.x = n; target_position_.y = e; target_position_.z = d; } else // use airlib::GeodeticToNedFast { - ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + RCLCPP_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; @@ -249,8 +249,8 @@ bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosi } target_position_.yaw = request.yaw; // todo - ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -272,12 +272,12 @@ void PIDPositionController::update_control_cmd_timer_cb(const ros::TimerEvent& e if (has_goal_) { check_reached_goal(); if (reached_goal_) { - ROS_INFO_STREAM("[PIDPositionController] Reached goal! Hovering at position."); + RCLCPP_INFO_STREAM("[PIDPositionController] Reached goal! Hovering at position."); has_goal_ = false; // dear future self, this function doesn't return coz we need to keep on actively hovering at last goal pose. don't act smart } else { - ROS_INFO_STREAM("[PIDPositionController] Moving to goal."); + RCLCPP_INFO_STREAM("[PIDPositionController] Moving to goal."); } } diff --git a/ros2/install/.colcon_install_layout b/ros2/install/.colcon_install_layout new file mode 100644 index 0000000000..3aad5336af --- /dev/null +++ b/ros2/install/.colcon_install_layout @@ -0,0 +1 @@ +isolated diff --git a/ros2/install/COLCON_IGNORE b/ros2/install/COLCON_IGNORE new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ros2/install/_local_setup_util_ps1.py b/ros2/install/_local_setup_util_ps1.py new file mode 100644 index 0000000000..b3e16ebe67 --- /dev/null +++ b/ros2/install/_local_setup_util_ps1.py @@ -0,0 +1,376 @@ +# Copyright 2016-2019 Dirk Thomas +# Licensed under the Apache License, Version 2.0 + +import argparse +from collections import OrderedDict +import os +from pathlib import Path +import sys + + +FORMAT_STR_COMMENT_LINE = '# {comment}' +FORMAT_STR_SET_ENV_VAR = 'Set-Item -Path "Env:{name}" -Value "{value}"' +FORMAT_STR_USE_ENV_VAR = '$env:{name}' +FORMAT_STR_INVOKE_SCRIPT = '_colcon_prefix_powershell_source_script "{script_path}"' +FORMAT_STR_REMOVE_TRAILING_SEPARATOR = '' + +DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' +DSV_TYPE_SET = 'set' +DSV_TYPE_SET_IF_UNSET = 'set-if-unset' +DSV_TYPE_SOURCE = 'source' + + +def main(argv=sys.argv[1:]): # noqa: D103 + parser = argparse.ArgumentParser( + description='Output shell commands for the packages in topological ' + 'order') + parser.add_argument( + 'primary_extension', + help='The file extension of the primary shell') + parser.add_argument( + 'additional_extension', nargs='?', + help='The additional file extension to be considered') + parser.add_argument( + '--merged-install', action='store_true', + help='All install prefixes are merged into a single location') + args = parser.parse_args(argv) + + packages = get_packages(Path(__file__).parent, args.merged_install) + + ordered_packages = order_packages(packages) + for pkg_name in ordered_packages: + if _include_comments(): + print( + FORMAT_STR_COMMENT_LINE.format_map( + {'comment': 'Package: ' + pkg_name})) + prefix = os.path.abspath(os.path.dirname(__file__)) + if not args.merged_install: + prefix = os.path.join(prefix, pkg_name) + for line in get_commands( + pkg_name, prefix, args.primary_extension, + args.additional_extension + ): + print(line) + + for line in _remove_trailing_separators(): + print(line) + + +def get_packages(prefix_path, merged_install): + """ + Find packages based on colcon-specific files created during installation. + + :param Path prefix_path: The install prefix path of all packages + :param bool merged_install: The flag if the packages are all installed + directly in the prefix or if each package is installed in a subdirectory + named after the package + :returns: A mapping from the package name to the set of runtime + dependencies + :rtype: dict + """ + packages = {} + # since importing colcon_core isn't feasible here the following constant + # must match colcon_core.location.get_relative_package_index_path() + subdirectory = 'share/colcon-core/packages' + if merged_install: + # return if workspace is empty + if not (prefix_path / subdirectory).is_dir(): + return packages + # find all files in the subdirectory + for p in (prefix_path / subdirectory).iterdir(): + if not p.is_file(): + continue + if p.name.startswith('.'): + continue + add_package_runtime_dependencies(p, packages) + else: + # for each subdirectory look for the package specific file + for p in prefix_path.iterdir(): + if not p.is_dir(): + continue + if p.name.startswith('.'): + continue + p = p / subdirectory / p.name + if p.is_file(): + add_package_runtime_dependencies(p, packages) + + # remove unknown dependencies + pkg_names = set(packages.keys()) + for k in packages.keys(): + packages[k] = {d for d in packages[k] if d in pkg_names} + + return packages + + +def add_package_runtime_dependencies(path, packages): + """ + Check the path and if it exists extract the packages runtime dependencies. + + :param Path path: The resource file containing the runtime dependencies + :param dict packages: A mapping from package names to the sets of runtime + dependencies to add to + """ + content = path.read_text() + dependencies = set(content.split(os.pathsep) if content else []) + packages[path.name] = dependencies + + +def order_packages(packages): + """ + Order packages topologically. + + :param dict packages: A mapping from package name to the set of runtime + dependencies + :returns: The package names + :rtype: list + """ + # select packages with no dependencies in alphabetical order + to_be_ordered = list(packages.keys()) + ordered = [] + while to_be_ordered: + pkg_names_without_deps = [ + name for name in to_be_ordered if not packages[name]] + if not pkg_names_without_deps: + reduce_cycle_set(packages) + raise RuntimeError( + 'Circular dependency between: ' + ', '.join(sorted(packages))) + pkg_names_without_deps.sort() + pkg_name = pkg_names_without_deps[0] + to_be_ordered.remove(pkg_name) + ordered.append(pkg_name) + # remove item from dependency lists + for k in list(packages.keys()): + if pkg_name in packages[k]: + packages[k].remove(pkg_name) + return ordered + + +def reduce_cycle_set(packages): + """ + Reduce the set of packages to the ones part of the circular dependency. + + :param dict packages: A mapping from package name to the set of runtime + dependencies which is modified in place + """ + last_depended = None + while len(packages) > 0: + # get all remaining dependencies + depended = set() + for pkg_name, dependencies in packages.items(): + depended = depended.union(dependencies) + # remove all packages which are not dependent on + for name in list(packages.keys()): + if name not in depended: + del packages[name] + if last_depended: + # if remaining packages haven't changed return them + if last_depended == depended: + return packages.keys() + # otherwise reduce again + last_depended = depended + + +def _include_comments(): + # skipping comment lines when COLCON_TRACE is not set speeds up the + # processing especially on Windows + return bool(os.environ.get('COLCON_TRACE')) + + +def get_commands(pkg_name, prefix, primary_extension, additional_extension): + commands = [] + package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') + if os.path.exists(package_dsv_path): + commands += process_dsv_file( + package_dsv_path, prefix, primary_extension, additional_extension) + return commands + + +def process_dsv_file( + dsv_path, prefix, primary_extension=None, additional_extension=None +): + commands = [] + if _include_comments(): + commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) + with open(dsv_path, 'r') as h: + content = h.read() + lines = content.splitlines() + + basenames = OrderedDict() + for i, line in enumerate(lines): + # skip over empty or whitespace-only lines + if not line.strip(): + continue + try: + type_, remainder = line.split(';', 1) + except ValueError: + raise RuntimeError( + "Line %d in '%s' doesn't contain a semicolon separating the " + 'type from the arguments' % (i + 1, dsv_path)) + if type_ != DSV_TYPE_SOURCE: + # handle non-source lines + try: + commands += handle_dsv_types_except_source( + type_, remainder, prefix) + except RuntimeError as e: + raise RuntimeError( + "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e + else: + # group remaining source lines by basename + path_without_ext, ext = os.path.splitext(remainder) + if path_without_ext not in basenames: + basenames[path_without_ext] = set() + assert ext.startswith('.') + ext = ext[1:] + if ext in (primary_extension, additional_extension): + basenames[path_without_ext].add(ext) + + # add the dsv extension to each basename if the file exists + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if os.path.exists(basename + '.dsv'): + extensions.add('dsv') + + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if 'dsv' in extensions: + # process dsv files recursively + commands += process_dsv_file( + basename + '.dsv', prefix, primary_extension=primary_extension, + additional_extension=additional_extension) + elif primary_extension in extensions and len(extensions) == 1: + # source primary-only files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + primary_extension})] + elif additional_extension in extensions: + # source non-primary files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + additional_extension})] + + return commands + + +def handle_dsv_types_except_source(type_, remainder, prefix): + commands = [] + if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): + try: + env_name, value = remainder.split(';', 1) + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the value') + try_prefixed_value = os.path.join(prefix, value) if value else prefix + if os.path.exists(try_prefixed_value): + value = try_prefixed_value + if type_ == DSV_TYPE_SET: + commands += _set(env_name, value) + elif type_ == DSV_TYPE_SET_IF_UNSET: + commands += _set_if_unset(env_name, value) + else: + assert False + elif type_ in ( + DSV_TYPE_PREPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS + ): + try: + env_name_and_values = remainder.split(';') + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the values') + env_name = env_name_and_values[0] + values = env_name_and_values[1:] + for value in values: + if not value: + value = prefix + elif not os.path.isabs(value): + value = os.path.join(prefix, value) + if ( + type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and + not os.path.exists(value) + ): + comment = 'skip extending {env_name} with not existing path: ' \ + '{value}'.format_map(locals()) + if _include_comments(): + commands.append( + FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) + else: + commands += _prepend_unique_value(env_name, value) + else: + raise RuntimeError( + 'contains an unknown environment hook type: ' + type_) + return commands + + +env_state = {} + + +def _prepend_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # prepend even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_trailing_separators() will cleanup any unintentional trailing separator + extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value + extend}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +# generate commands for removing prepended underscores +def _remove_trailing_separators(): + # do nothing if the shell extension does not implement the logic + if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: + return [] + + global env_state + commands = [] + for name in env_state: + # skip variables that already had values before this script started prepending + if name in os.environ: + continue + commands += [FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map( + {'name': name})] + return commands + + +def _set(name, value): + global env_state + env_state[name] = value + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + return [line] + + +def _set_if_unset(name, value): + global env_state + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + if env_state.get(name, os.environ.get(name)): + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +if __name__ == '__main__': # pragma: no cover + try: + rc = main() + except RuntimeError as e: + print(str(e), file=sys.stderr) + rc = 1 + sys.exit(rc) diff --git a/ros2/install/_local_setup_util_sh.py b/ros2/install/_local_setup_util_sh.py new file mode 100644 index 0000000000..07a8cbea68 --- /dev/null +++ b/ros2/install/_local_setup_util_sh.py @@ -0,0 +1,376 @@ +# Copyright 2016-2019 Dirk Thomas +# Licensed under the Apache License, Version 2.0 + +import argparse +from collections import OrderedDict +import os +from pathlib import Path +import sys + + +FORMAT_STR_COMMENT_LINE = '# {comment}' +FORMAT_STR_SET_ENV_VAR = 'export {name}="{value}"' +FORMAT_STR_USE_ENV_VAR = '${name}' +FORMAT_STR_INVOKE_SCRIPT = 'COLCON_CURRENT_PREFIX="{prefix}" _colcon_prefix_sh_source_script "{script_path}"' +FORMAT_STR_REMOVE_TRAILING_SEPARATOR = 'if [ "$(echo -n ${name} | tail -c 1)" = ":" ]; then export {name}=${{{name}%?}} ; fi' + +DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' +DSV_TYPE_SET = 'set' +DSV_TYPE_SET_IF_UNSET = 'set-if-unset' +DSV_TYPE_SOURCE = 'source' + + +def main(argv=sys.argv[1:]): # noqa: D103 + parser = argparse.ArgumentParser( + description='Output shell commands for the packages in topological ' + 'order') + parser.add_argument( + 'primary_extension', + help='The file extension of the primary shell') + parser.add_argument( + 'additional_extension', nargs='?', + help='The additional file extension to be considered') + parser.add_argument( + '--merged-install', action='store_true', + help='All install prefixes are merged into a single location') + args = parser.parse_args(argv) + + packages = get_packages(Path(__file__).parent, args.merged_install) + + ordered_packages = order_packages(packages) + for pkg_name in ordered_packages: + if _include_comments(): + print( + FORMAT_STR_COMMENT_LINE.format_map( + {'comment': 'Package: ' + pkg_name})) + prefix = os.path.abspath(os.path.dirname(__file__)) + if not args.merged_install: + prefix = os.path.join(prefix, pkg_name) + for line in get_commands( + pkg_name, prefix, args.primary_extension, + args.additional_extension + ): + print(line) + + for line in _remove_trailing_separators(): + print(line) + + +def get_packages(prefix_path, merged_install): + """ + Find packages based on colcon-specific files created during installation. + + :param Path prefix_path: The install prefix path of all packages + :param bool merged_install: The flag if the packages are all installed + directly in the prefix or if each package is installed in a subdirectory + named after the package + :returns: A mapping from the package name to the set of runtime + dependencies + :rtype: dict + """ + packages = {} + # since importing colcon_core isn't feasible here the following constant + # must match colcon_core.location.get_relative_package_index_path() + subdirectory = 'share/colcon-core/packages' + if merged_install: + # return if workspace is empty + if not (prefix_path / subdirectory).is_dir(): + return packages + # find all files in the subdirectory + for p in (prefix_path / subdirectory).iterdir(): + if not p.is_file(): + continue + if p.name.startswith('.'): + continue + add_package_runtime_dependencies(p, packages) + else: + # for each subdirectory look for the package specific file + for p in prefix_path.iterdir(): + if not p.is_dir(): + continue + if p.name.startswith('.'): + continue + p = p / subdirectory / p.name + if p.is_file(): + add_package_runtime_dependencies(p, packages) + + # remove unknown dependencies + pkg_names = set(packages.keys()) + for k in packages.keys(): + packages[k] = {d for d in packages[k] if d in pkg_names} + + return packages + + +def add_package_runtime_dependencies(path, packages): + """ + Check the path and if it exists extract the packages runtime dependencies. + + :param Path path: The resource file containing the runtime dependencies + :param dict packages: A mapping from package names to the sets of runtime + dependencies to add to + """ + content = path.read_text() + dependencies = set(content.split(os.pathsep) if content else []) + packages[path.name] = dependencies + + +def order_packages(packages): + """ + Order packages topologically. + + :param dict packages: A mapping from package name to the set of runtime + dependencies + :returns: The package names + :rtype: list + """ + # select packages with no dependencies in alphabetical order + to_be_ordered = list(packages.keys()) + ordered = [] + while to_be_ordered: + pkg_names_without_deps = [ + name for name in to_be_ordered if not packages[name]] + if not pkg_names_without_deps: + reduce_cycle_set(packages) + raise RuntimeError( + 'Circular dependency between: ' + ', '.join(sorted(packages))) + pkg_names_without_deps.sort() + pkg_name = pkg_names_without_deps[0] + to_be_ordered.remove(pkg_name) + ordered.append(pkg_name) + # remove item from dependency lists + for k in list(packages.keys()): + if pkg_name in packages[k]: + packages[k].remove(pkg_name) + return ordered + + +def reduce_cycle_set(packages): + """ + Reduce the set of packages to the ones part of the circular dependency. + + :param dict packages: A mapping from package name to the set of runtime + dependencies which is modified in place + """ + last_depended = None + while len(packages) > 0: + # get all remaining dependencies + depended = set() + for pkg_name, dependencies in packages.items(): + depended = depended.union(dependencies) + # remove all packages which are not dependent on + for name in list(packages.keys()): + if name not in depended: + del packages[name] + if last_depended: + # if remaining packages haven't changed return them + if last_depended == depended: + return packages.keys() + # otherwise reduce again + last_depended = depended + + +def _include_comments(): + # skipping comment lines when COLCON_TRACE is not set speeds up the + # processing especially on Windows + return bool(os.environ.get('COLCON_TRACE')) + + +def get_commands(pkg_name, prefix, primary_extension, additional_extension): + commands = [] + package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') + if os.path.exists(package_dsv_path): + commands += process_dsv_file( + package_dsv_path, prefix, primary_extension, additional_extension) + return commands + + +def process_dsv_file( + dsv_path, prefix, primary_extension=None, additional_extension=None +): + commands = [] + if _include_comments(): + commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) + with open(dsv_path, 'r') as h: + content = h.read() + lines = content.splitlines() + + basenames = OrderedDict() + for i, line in enumerate(lines): + # skip over empty or whitespace-only lines + if not line.strip(): + continue + try: + type_, remainder = line.split(';', 1) + except ValueError: + raise RuntimeError( + "Line %d in '%s' doesn't contain a semicolon separating the " + 'type from the arguments' % (i + 1, dsv_path)) + if type_ != DSV_TYPE_SOURCE: + # handle non-source lines + try: + commands += handle_dsv_types_except_source( + type_, remainder, prefix) + except RuntimeError as e: + raise RuntimeError( + "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e + else: + # group remaining source lines by basename + path_without_ext, ext = os.path.splitext(remainder) + if path_without_ext not in basenames: + basenames[path_without_ext] = set() + assert ext.startswith('.') + ext = ext[1:] + if ext in (primary_extension, additional_extension): + basenames[path_without_ext].add(ext) + + # add the dsv extension to each basename if the file exists + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if os.path.exists(basename + '.dsv'): + extensions.add('dsv') + + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if 'dsv' in extensions: + # process dsv files recursively + commands += process_dsv_file( + basename + '.dsv', prefix, primary_extension=primary_extension, + additional_extension=additional_extension) + elif primary_extension in extensions and len(extensions) == 1: + # source primary-only files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + primary_extension})] + elif additional_extension in extensions: + # source non-primary files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + additional_extension})] + + return commands + + +def handle_dsv_types_except_source(type_, remainder, prefix): + commands = [] + if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): + try: + env_name, value = remainder.split(';', 1) + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the value') + try_prefixed_value = os.path.join(prefix, value) if value else prefix + if os.path.exists(try_prefixed_value): + value = try_prefixed_value + if type_ == DSV_TYPE_SET: + commands += _set(env_name, value) + elif type_ == DSV_TYPE_SET_IF_UNSET: + commands += _set_if_unset(env_name, value) + else: + assert False + elif type_ in ( + DSV_TYPE_PREPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS + ): + try: + env_name_and_values = remainder.split(';') + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the values') + env_name = env_name_and_values[0] + values = env_name_and_values[1:] + for value in values: + if not value: + value = prefix + elif not os.path.isabs(value): + value = os.path.join(prefix, value) + if ( + type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and + not os.path.exists(value) + ): + comment = 'skip extending {env_name} with not existing path: ' \ + '{value}'.format_map(locals()) + if _include_comments(): + commands.append( + FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) + else: + commands += _prepend_unique_value(env_name, value) + else: + raise RuntimeError( + 'contains an unknown environment hook type: ' + type_) + return commands + + +env_state = {} + + +def _prepend_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # prepend even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_trailing_separators() will cleanup any unintentional trailing separator + extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value + extend}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +# generate commands for removing prepended underscores +def _remove_trailing_separators(): + # do nothing if the shell extension does not implement the logic + if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: + return [] + + global env_state + commands = [] + for name in env_state: + # skip variables that already had values before this script started prepending + if name in os.environ: + continue + commands += [FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map( + {'name': name})] + return commands + + +def _set(name, value): + global env_state + env_state[name] = value + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + return [line] + + +def _set_if_unset(name, value): + global env_state + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + if env_state.get(name, os.environ.get(name)): + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +if __name__ == '__main__': # pragma: no cover + try: + rc = main() + except RuntimeError as e: + print(str(e), file=sys.stderr) + rc = 1 + sys.exit(rc) diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.h new file mode 100644 index 0000000000..8a48c332a8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__ALTIMETER_H_ +#define AIRSIM_INTERFACES__MSG__ALTIMETER_H_ + +#include "airsim_interfaces/msg/detail/altimeter__struct.h" +#include "airsim_interfaces/msg/detail/altimeter__functions.h" +#include "airsim_interfaces/msg/detail/altimeter__type_support.h" + +#endif // AIRSIM_INTERFACES__MSG__ALTIMETER_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.hpp new file mode 100644 index 0000000000..4b43bca495 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__ALTIMETER_HPP_ +#define AIRSIM_INTERFACES__MSG__ALTIMETER_HPP_ + +#include "airsim_interfaces/msg/detail/altimeter__struct.hpp" +#include "airsim_interfaces/msg/detail/altimeter__builder.hpp" +#include "airsim_interfaces/msg/detail/altimeter__traits.hpp" + +#endif // AIRSIM_INTERFACES__MSG__ALTIMETER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.h new file mode 100644 index 0000000000..1536514c0e --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__CAR_CONTROLS_H_ +#define AIRSIM_INTERFACES__MSG__CAR_CONTROLS_H_ + +#include "airsim_interfaces/msg/detail/car_controls__struct.h" +#include "airsim_interfaces/msg/detail/car_controls__functions.h" +#include "airsim_interfaces/msg/detail/car_controls__type_support.h" + +#endif // AIRSIM_INTERFACES__MSG__CAR_CONTROLS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.hpp new file mode 100644 index 0000000000..e961a84fba --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__CAR_CONTROLS_HPP_ +#define AIRSIM_INTERFACES__MSG__CAR_CONTROLS_HPP_ + +#include "airsim_interfaces/msg/detail/car_controls__struct.hpp" +#include "airsim_interfaces/msg/detail/car_controls__builder.hpp" +#include "airsim_interfaces/msg/detail/car_controls__traits.hpp" + +#endif // AIRSIM_INTERFACES__MSG__CAR_CONTROLS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.h new file mode 100644 index 0000000000..a2ad9f85f4 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__CAR_STATE_H_ +#define AIRSIM_INTERFACES__MSG__CAR_STATE_H_ + +#include "airsim_interfaces/msg/detail/car_state__struct.h" +#include "airsim_interfaces/msg/detail/car_state__functions.h" +#include "airsim_interfaces/msg/detail/car_state__type_support.h" + +#endif // AIRSIM_INTERFACES__MSG__CAR_STATE_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.hpp new file mode 100644 index 0000000000..dab7cd6832 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__CAR_STATE_HPP_ +#define AIRSIM_INTERFACES__MSG__CAR_STATE_HPP_ + +#include "airsim_interfaces/msg/detail/car_state__struct.hpp" +#include "airsim_interfaces/msg/detail/car_state__builder.hpp" +#include "airsim_interfaces/msg/detail/car_state__traits.hpp" + +#endif // AIRSIM_INTERFACES__MSG__CAR_STATE_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__builder.hpp new file mode 100644 index 0000000000..cad78bd700 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__builder.hpp @@ -0,0 +1,103 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__BUILDER_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__BUILDER_HPP_ + +#include "airsim_interfaces/msg/detail/altimeter__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace builder +{ + +class Init_Altimeter_qnh +{ +public: + explicit Init_Altimeter_qnh(::airsim_interfaces::msg::Altimeter & msg) + : msg_(msg) + {} + ::airsim_interfaces::msg::Altimeter qnh(::airsim_interfaces::msg::Altimeter::_qnh_type arg) + { + msg_.qnh = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::msg::Altimeter msg_; +}; + +class Init_Altimeter_pressure +{ +public: + explicit Init_Altimeter_pressure(::airsim_interfaces::msg::Altimeter & msg) + : msg_(msg) + {} + Init_Altimeter_qnh pressure(::airsim_interfaces::msg::Altimeter::_pressure_type arg) + { + msg_.pressure = std::move(arg); + return Init_Altimeter_qnh(msg_); + } + +private: + ::airsim_interfaces::msg::Altimeter msg_; +}; + +class Init_Altimeter_altitude +{ +public: + explicit Init_Altimeter_altitude(::airsim_interfaces::msg::Altimeter & msg) + : msg_(msg) + {} + Init_Altimeter_pressure altitude(::airsim_interfaces::msg::Altimeter::_altitude_type arg) + { + msg_.altitude = std::move(arg); + return Init_Altimeter_pressure(msg_); + } + +private: + ::airsim_interfaces::msg::Altimeter msg_; +}; + +class Init_Altimeter_header +{ +public: + Init_Altimeter_header() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_Altimeter_altitude header(::airsim_interfaces::msg::Altimeter::_header_type arg) + { + msg_.header = std::move(arg); + return Init_Altimeter_altitude(msg_); + } + +private: + ::airsim_interfaces::msg::Altimeter msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::msg::Altimeter>() +{ + return airsim_interfaces::msg::builder::Init_Altimeter_header(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.c new file mode 100644 index 0000000000..34101d36db --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.c @@ -0,0 +1,153 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/msg/detail/altimeter__functions.h" + +#include +#include +#include +#include + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/detail/header__functions.h" + +bool +airsim_interfaces__msg__Altimeter__init(airsim_interfaces__msg__Altimeter * msg) +{ + if (!msg) { + return false; + } + // header + if (!std_msgs__msg__Header__init(&msg->header)) { + airsim_interfaces__msg__Altimeter__fini(msg); + return false; + } + // altitude + // pressure + // qnh + return true; +} + +void +airsim_interfaces__msg__Altimeter__fini(airsim_interfaces__msg__Altimeter * msg) +{ + if (!msg) { + return; + } + // header + std_msgs__msg__Header__fini(&msg->header); + // altitude + // pressure + // qnh +} + +airsim_interfaces__msg__Altimeter * +airsim_interfaces__msg__Altimeter__create() +{ + airsim_interfaces__msg__Altimeter * msg = (airsim_interfaces__msg__Altimeter *)malloc(sizeof(airsim_interfaces__msg__Altimeter)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__msg__Altimeter)); + bool success = airsim_interfaces__msg__Altimeter__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__msg__Altimeter__destroy(airsim_interfaces__msg__Altimeter * msg) +{ + if (msg) { + airsim_interfaces__msg__Altimeter__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__msg__Altimeter__Sequence__init(airsim_interfaces__msg__Altimeter__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__msg__Altimeter * data = NULL; + if (size) { + data = (airsim_interfaces__msg__Altimeter *)calloc(size, sizeof(airsim_interfaces__msg__Altimeter)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__msg__Altimeter__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__msg__Altimeter__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__msg__Altimeter__Sequence__fini(airsim_interfaces__msg__Altimeter__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__msg__Altimeter__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__msg__Altimeter__Sequence * +airsim_interfaces__msg__Altimeter__Sequence__create(size_t size) +{ + airsim_interfaces__msg__Altimeter__Sequence * array = (airsim_interfaces__msg__Altimeter__Sequence *)malloc(sizeof(airsim_interfaces__msg__Altimeter__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__msg__Altimeter__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__msg__Altimeter__Sequence__destroy(airsim_interfaces__msg__Altimeter__Sequence * array) +{ + if (array) { + airsim_interfaces__msg__Altimeter__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.h new file mode 100644 index 0000000000..ee2241a671 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.h @@ -0,0 +1,124 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/msg/detail/altimeter__struct.h" + +/// Initialize msg/Altimeter message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__msg__Altimeter + * )) before or use + * airsim_interfaces__msg__Altimeter__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__Altimeter__init(airsim_interfaces__msg__Altimeter * msg); + +/// Finalize msg/Altimeter message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__Altimeter__fini(airsim_interfaces__msg__Altimeter * msg); + +/// Create msg/Altimeter message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__msg__Altimeter__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__Altimeter * +airsim_interfaces__msg__Altimeter__create(); + +/// Destroy msg/Altimeter message. +/** + * It calls + * airsim_interfaces__msg__Altimeter__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__Altimeter__destroy(airsim_interfaces__msg__Altimeter * msg); + + +/// Initialize array of msg/Altimeter messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__msg__Altimeter__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__Altimeter__Sequence__init(airsim_interfaces__msg__Altimeter__Sequence * array, size_t size); + +/// Finalize array of msg/Altimeter messages. +/** + * It calls + * airsim_interfaces__msg__Altimeter__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__Altimeter__Sequence__fini(airsim_interfaces__msg__Altimeter__Sequence * array); + +/// Create array of msg/Altimeter messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__msg__Altimeter__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__Altimeter__Sequence * +airsim_interfaces__msg__Altimeter__Sequence__create(size_t size); + +/// Destroy array of msg/Altimeter messages. +/** + * It calls + * airsim_interfaces__msg__Altimeter__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__Altimeter__Sequence__destroy(airsim_interfaces__msg__Altimeter__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..053d3473f6 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__msg__Altimeter( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__msg__Altimeter( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, Altimeter)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..215807b47b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/msg/detail/altimeter__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::msg::Altimeter & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::msg::Altimeter & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::msg::Altimeter & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_Altimeter( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, Altimeter)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..b520e908e9 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, Altimeter)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..0637d050f7 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, Altimeter)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.h new file mode 100644 index 0000000000..4a829afed6 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.h @@ -0,0 +1,47 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.h" + +// Struct defined in msg/Altimeter in the package airsim_interfaces. +typedef struct airsim_interfaces__msg__Altimeter +{ + std_msgs__msg__Header header; + float altitude; + float pressure; + float qnh; +} airsim_interfaces__msg__Altimeter; + +// Struct for a sequence of airsim_interfaces__msg__Altimeter. +typedef struct airsim_interfaces__msg__Altimeter__Sequence +{ + airsim_interfaces__msg__Altimeter * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__msg__Altimeter__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.hpp new file mode 100644 index 0000000000..d236f3072f --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.hpp @@ -0,0 +1,175 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__msg__Altimeter __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__msg__Altimeter __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace msg +{ + +// message struct +template +struct Altimeter_ +{ + using Type = Altimeter_; + + explicit Altimeter_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->altitude = 0.0f; + this->pressure = 0.0f; + this->qnh = 0.0f; + } + } + + explicit Altimeter_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_alloc, _init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->altitude = 0.0f; + this->pressure = 0.0f; + this->qnh = 0.0f; + } + } + + // field types and members + using _header_type = + std_msgs::msg::Header_; + _header_type header; + using _altitude_type = + float; + _altitude_type altitude; + using _pressure_type = + float; + _pressure_type pressure; + using _qnh_type = + float; + _qnh_type qnh; + + // setters for named parameter idiom + Type & set__header( + const std_msgs::msg::Header_ & _arg) + { + this->header = _arg; + return *this; + } + Type & set__altitude( + const float & _arg) + { + this->altitude = _arg; + return *this; + } + Type & set__pressure( + const float & _arg) + { + this->pressure = _arg; + return *this; + } + Type & set__qnh( + const float & _arg) + { + this->qnh = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::msg::Altimeter_ *; + using ConstRawPtr = + const airsim_interfaces::msg::Altimeter_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__msg__Altimeter + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__msg__Altimeter + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Altimeter_ & other) const + { + if (this->header != other.header) { + return false; + } + if (this->altitude != other.altitude) { + return false; + } + if (this->pressure != other.pressure) { + return false; + } + if (this->qnh != other.qnh) { + return false; + } + return true; + } + bool operator!=(const Altimeter_ & other) const + { + return !this->operator==(other); + } +}; // struct Altimeter_ + +// alias to use template instance with default allocator +using Altimeter = + airsim_interfaces::msg::Altimeter_>; + +// constant definitions + +} // namespace msg + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__traits.hpp new file mode 100644 index 0000000000..3eac5e878c --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__traits.hpp @@ -0,0 +1,46 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TRAITS_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TRAITS_HPP_ + +#include "airsim_interfaces/msg/detail/altimeter__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::msg::Altimeter"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/msg/Altimeter"; +} + +template<> +struct has_fixed_size + : std::integral_constant::value> {}; + +template<> +struct has_bounded_size + : std::integral_constant::value> {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.c new file mode 100644 index 0000000000..a8127ee971 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.c @@ -0,0 +1,134 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/msg/detail/altimeter__functions.h" +#include "airsim_interfaces/msg/detail/altimeter__struct.h" + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/header.h" +// Member `header` +#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Altimeter__rosidl_typesupport_introspection_c__Altimeter_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__msg__Altimeter__init(message_memory); +} + +void Altimeter__rosidl_typesupport_introspection_c__Altimeter_fini_function(void * message_memory) +{ + airsim_interfaces__msg__Altimeter__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_member_array[4] = { + { + "header", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__Altimeter, header), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "altitude", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__Altimeter, altitude), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "pressure", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__Altimeter, pressure), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "qnh", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__Altimeter, qnh), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_members = { + "airsim_interfaces__msg", // message namespace + "Altimeter", // message name + 4, // number of fields + sizeof(airsim_interfaces__msg__Altimeter), + Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_member_array, // message members + Altimeter__rosidl_typesupport_introspection_c__Altimeter_init_function, // function to initialize message memory (memory has to be allocated) + Altimeter__rosidl_typesupport_introspection_c__Altimeter_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_type_support_handle = { + 0, + &Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, Altimeter)() { + Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); + if (!Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_type_support_handle.typesupport_identifier) { + Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.cpp new file mode 100644 index 0000000000..de04343948 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.cpp @@ -0,0 +1,152 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/detail/altimeter__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Altimeter_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::msg::Altimeter(_init); +} + +void Altimeter_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Altimeter(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Altimeter_message_member_array[4] = { + { + "header", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::Altimeter, header), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "altitude", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::Altimeter, altitude), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "pressure", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::Altimeter, pressure), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "qnh", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::Altimeter, qnh), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Altimeter_message_members = { + "airsim_interfaces::msg", // message namespace + "Altimeter", // message name + 4, // number of fields + sizeof(airsim_interfaces::msg::Altimeter), + Altimeter_message_member_array, // message members + Altimeter_init_function, // function to initialize message memory (memory has to be allocated) + Altimeter_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Altimeter_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Altimeter_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::Altimeter_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, Altimeter)() { + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::Altimeter_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.h new file mode 100644 index 0000000000..08b09360e9 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + msg, + Altimeter +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__builder.hpp new file mode 100644 index 0000000000..08d6d87ba8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__builder.hpp @@ -0,0 +1,167 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__BUILDER_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__BUILDER_HPP_ + +#include "airsim_interfaces/msg/detail/car_controls__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace builder +{ + +class Init_CarControls_gear_immediate +{ +public: + explicit Init_CarControls_gear_immediate(::airsim_interfaces::msg::CarControls & msg) + : msg_(msg) + {} + ::airsim_interfaces::msg::CarControls gear_immediate(::airsim_interfaces::msg::CarControls::_gear_immediate_type arg) + { + msg_.gear_immediate = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::msg::CarControls msg_; +}; + +class Init_CarControls_manual_gear +{ +public: + explicit Init_CarControls_manual_gear(::airsim_interfaces::msg::CarControls & msg) + : msg_(msg) + {} + Init_CarControls_gear_immediate manual_gear(::airsim_interfaces::msg::CarControls::_manual_gear_type arg) + { + msg_.manual_gear = std::move(arg); + return Init_CarControls_gear_immediate(msg_); + } + +private: + ::airsim_interfaces::msg::CarControls msg_; +}; + +class Init_CarControls_manual +{ +public: + explicit Init_CarControls_manual(::airsim_interfaces::msg::CarControls & msg) + : msg_(msg) + {} + Init_CarControls_manual_gear manual(::airsim_interfaces::msg::CarControls::_manual_type arg) + { + msg_.manual = std::move(arg); + return Init_CarControls_manual_gear(msg_); + } + +private: + ::airsim_interfaces::msg::CarControls msg_; +}; + +class Init_CarControls_handbrake +{ +public: + explicit Init_CarControls_handbrake(::airsim_interfaces::msg::CarControls & msg) + : msg_(msg) + {} + Init_CarControls_manual handbrake(::airsim_interfaces::msg::CarControls::_handbrake_type arg) + { + msg_.handbrake = std::move(arg); + return Init_CarControls_manual(msg_); + } + +private: + ::airsim_interfaces::msg::CarControls msg_; +}; + +class Init_CarControls_steering +{ +public: + explicit Init_CarControls_steering(::airsim_interfaces::msg::CarControls & msg) + : msg_(msg) + {} + Init_CarControls_handbrake steering(::airsim_interfaces::msg::CarControls::_steering_type arg) + { + msg_.steering = std::move(arg); + return Init_CarControls_handbrake(msg_); + } + +private: + ::airsim_interfaces::msg::CarControls msg_; +}; + +class Init_CarControls_brake +{ +public: + explicit Init_CarControls_brake(::airsim_interfaces::msg::CarControls & msg) + : msg_(msg) + {} + Init_CarControls_steering brake(::airsim_interfaces::msg::CarControls::_brake_type arg) + { + msg_.brake = std::move(arg); + return Init_CarControls_steering(msg_); + } + +private: + ::airsim_interfaces::msg::CarControls msg_; +}; + +class Init_CarControls_throttle +{ +public: + explicit Init_CarControls_throttle(::airsim_interfaces::msg::CarControls & msg) + : msg_(msg) + {} + Init_CarControls_brake throttle(::airsim_interfaces::msg::CarControls::_throttle_type arg) + { + msg_.throttle = std::move(arg); + return Init_CarControls_brake(msg_); + } + +private: + ::airsim_interfaces::msg::CarControls msg_; +}; + +class Init_CarControls_header +{ +public: + Init_CarControls_header() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_CarControls_throttle header(::airsim_interfaces::msg::CarControls::_header_type arg) + { + msg_.header = std::move(arg); + return Init_CarControls_throttle(msg_); + } + +private: + ::airsim_interfaces::msg::CarControls msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::msg::CarControls>() +{ + return airsim_interfaces::msg::builder::Init_CarControls_header(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.c new file mode 100644 index 0000000000..a17d01de21 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.c @@ -0,0 +1,161 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/msg/detail/car_controls__functions.h" + +#include +#include +#include +#include + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/detail/header__functions.h" + +bool +airsim_interfaces__msg__CarControls__init(airsim_interfaces__msg__CarControls * msg) +{ + if (!msg) { + return false; + } + // header + if (!std_msgs__msg__Header__init(&msg->header)) { + airsim_interfaces__msg__CarControls__fini(msg); + return false; + } + // throttle + // brake + // steering + // handbrake + // manual + // manual_gear + // gear_immediate + return true; +} + +void +airsim_interfaces__msg__CarControls__fini(airsim_interfaces__msg__CarControls * msg) +{ + if (!msg) { + return; + } + // header + std_msgs__msg__Header__fini(&msg->header); + // throttle + // brake + // steering + // handbrake + // manual + // manual_gear + // gear_immediate +} + +airsim_interfaces__msg__CarControls * +airsim_interfaces__msg__CarControls__create() +{ + airsim_interfaces__msg__CarControls * msg = (airsim_interfaces__msg__CarControls *)malloc(sizeof(airsim_interfaces__msg__CarControls)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__msg__CarControls)); + bool success = airsim_interfaces__msg__CarControls__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__msg__CarControls__destroy(airsim_interfaces__msg__CarControls * msg) +{ + if (msg) { + airsim_interfaces__msg__CarControls__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__msg__CarControls__Sequence__init(airsim_interfaces__msg__CarControls__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__msg__CarControls * data = NULL; + if (size) { + data = (airsim_interfaces__msg__CarControls *)calloc(size, sizeof(airsim_interfaces__msg__CarControls)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__msg__CarControls__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__msg__CarControls__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__msg__CarControls__Sequence__fini(airsim_interfaces__msg__CarControls__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__msg__CarControls__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__msg__CarControls__Sequence * +airsim_interfaces__msg__CarControls__Sequence__create(size_t size) +{ + airsim_interfaces__msg__CarControls__Sequence * array = (airsim_interfaces__msg__CarControls__Sequence *)malloc(sizeof(airsim_interfaces__msg__CarControls__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__msg__CarControls__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__msg__CarControls__Sequence__destroy(airsim_interfaces__msg__CarControls__Sequence * array) +{ + if (array) { + airsim_interfaces__msg__CarControls__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.h new file mode 100644 index 0000000000..baa152af4b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.h @@ -0,0 +1,124 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/msg/detail/car_controls__struct.h" + +/// Initialize msg/CarControls message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__msg__CarControls + * )) before or use + * airsim_interfaces__msg__CarControls__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__CarControls__init(airsim_interfaces__msg__CarControls * msg); + +/// Finalize msg/CarControls message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__CarControls__fini(airsim_interfaces__msg__CarControls * msg); + +/// Create msg/CarControls message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__msg__CarControls__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__CarControls * +airsim_interfaces__msg__CarControls__create(); + +/// Destroy msg/CarControls message. +/** + * It calls + * airsim_interfaces__msg__CarControls__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__CarControls__destroy(airsim_interfaces__msg__CarControls * msg); + + +/// Initialize array of msg/CarControls messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__msg__CarControls__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__CarControls__Sequence__init(airsim_interfaces__msg__CarControls__Sequence * array, size_t size); + +/// Finalize array of msg/CarControls messages. +/** + * It calls + * airsim_interfaces__msg__CarControls__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__CarControls__Sequence__fini(airsim_interfaces__msg__CarControls__Sequence * array); + +/// Create array of msg/CarControls messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__msg__CarControls__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__CarControls__Sequence * +airsim_interfaces__msg__CarControls__Sequence__create(size_t size); + +/// Destroy array of msg/CarControls messages. +/** + * It calls + * airsim_interfaces__msg__CarControls__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__CarControls__Sequence__destroy(airsim_interfaces__msg__CarControls__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..eef3a8ee36 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__msg__CarControls( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__msg__CarControls( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, CarControls)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..b733b3914a --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/msg/detail/car_controls__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::msg::CarControls & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::msg::CarControls & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::msg::CarControls & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_CarControls( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, CarControls)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..4276b8a410 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, CarControls)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..358c11824a --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, CarControls)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.h new file mode 100644 index 0000000000..7d211bff72 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.h @@ -0,0 +1,51 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.h" + +// Struct defined in msg/CarControls in the package airsim_interfaces. +typedef struct airsim_interfaces__msg__CarControls +{ + std_msgs__msg__Header header; + float throttle; + float brake; + float steering; + bool handbrake; + bool manual; + int8_t manual_gear; + bool gear_immediate; +} airsim_interfaces__msg__CarControls; + +// Struct for a sequence of airsim_interfaces__msg__CarControls. +typedef struct airsim_interfaces__msg__CarControls__Sequence +{ + airsim_interfaces__msg__CarControls * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__msg__CarControls__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.hpp new file mode 100644 index 0000000000..4074c5a836 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.hpp @@ -0,0 +1,231 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__msg__CarControls __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__msg__CarControls __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace msg +{ + +// message struct +template +struct CarControls_ +{ + using Type = CarControls_; + + explicit CarControls_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->throttle = 0.0f; + this->brake = 0.0f; + this->steering = 0.0f; + this->handbrake = false; + this->manual = false; + this->manual_gear = 0; + this->gear_immediate = false; + } + } + + explicit CarControls_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_alloc, _init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->throttle = 0.0f; + this->brake = 0.0f; + this->steering = 0.0f; + this->handbrake = false; + this->manual = false; + this->manual_gear = 0; + this->gear_immediate = false; + } + } + + // field types and members + using _header_type = + std_msgs::msg::Header_; + _header_type header; + using _throttle_type = + float; + _throttle_type throttle; + using _brake_type = + float; + _brake_type brake; + using _steering_type = + float; + _steering_type steering; + using _handbrake_type = + bool; + _handbrake_type handbrake; + using _manual_type = + bool; + _manual_type manual; + using _manual_gear_type = + int8_t; + _manual_gear_type manual_gear; + using _gear_immediate_type = + bool; + _gear_immediate_type gear_immediate; + + // setters for named parameter idiom + Type & set__header( + const std_msgs::msg::Header_ & _arg) + { + this->header = _arg; + return *this; + } + Type & set__throttle( + const float & _arg) + { + this->throttle = _arg; + return *this; + } + Type & set__brake( + const float & _arg) + { + this->brake = _arg; + return *this; + } + Type & set__steering( + const float & _arg) + { + this->steering = _arg; + return *this; + } + Type & set__handbrake( + const bool & _arg) + { + this->handbrake = _arg; + return *this; + } + Type & set__manual( + const bool & _arg) + { + this->manual = _arg; + return *this; + } + Type & set__manual_gear( + const int8_t & _arg) + { + this->manual_gear = _arg; + return *this; + } + Type & set__gear_immediate( + const bool & _arg) + { + this->gear_immediate = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::msg::CarControls_ *; + using ConstRawPtr = + const airsim_interfaces::msg::CarControls_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__msg__CarControls + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__msg__CarControls + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const CarControls_ & other) const + { + if (this->header != other.header) { + return false; + } + if (this->throttle != other.throttle) { + return false; + } + if (this->brake != other.brake) { + return false; + } + if (this->steering != other.steering) { + return false; + } + if (this->handbrake != other.handbrake) { + return false; + } + if (this->manual != other.manual) { + return false; + } + if (this->manual_gear != other.manual_gear) { + return false; + } + if (this->gear_immediate != other.gear_immediate) { + return false; + } + return true; + } + bool operator!=(const CarControls_ & other) const + { + return !this->operator==(other); + } +}; // struct CarControls_ + +// alias to use template instance with default allocator +using CarControls = + airsim_interfaces::msg::CarControls_>; + +// constant definitions + +} // namespace msg + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__traits.hpp new file mode 100644 index 0000000000..22a45f15b6 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__traits.hpp @@ -0,0 +1,46 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TRAITS_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TRAITS_HPP_ + +#include "airsim_interfaces/msg/detail/car_controls__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::msg::CarControls"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/msg/CarControls"; +} + +template<> +struct has_fixed_size + : std::integral_constant::value> {}; + +template<> +struct has_bounded_size + : std::integral_constant::value> {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.c new file mode 100644 index 0000000000..7cf9a0389a --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.c @@ -0,0 +1,194 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/msg/detail/car_controls__functions.h" +#include "airsim_interfaces/msg/detail/car_controls__struct.h" + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/header.h" +// Member `header` +#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void CarControls__rosidl_typesupport_introspection_c__CarControls_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__msg__CarControls__init(message_memory); +} + +void CarControls__rosidl_typesupport_introspection_c__CarControls_fini_function(void * message_memory) +{ + airsim_interfaces__msg__CarControls__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember CarControls__rosidl_typesupport_introspection_c__CarControls_message_member_array[8] = { + { + "header", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarControls, header), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "throttle", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarControls, throttle), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "brake", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarControls, brake), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "steering", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarControls, steering), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "handbrake", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarControls, handbrake), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "manual", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarControls, manual), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "manual_gear", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarControls, manual_gear), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "gear_immediate", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarControls, gear_immediate), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers CarControls__rosidl_typesupport_introspection_c__CarControls_message_members = { + "airsim_interfaces__msg", // message namespace + "CarControls", // message name + 8, // number of fields + sizeof(airsim_interfaces__msg__CarControls), + CarControls__rosidl_typesupport_introspection_c__CarControls_message_member_array, // message members + CarControls__rosidl_typesupport_introspection_c__CarControls_init_function, // function to initialize message memory (memory has to be allocated) + CarControls__rosidl_typesupport_introspection_c__CarControls_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t CarControls__rosidl_typesupport_introspection_c__CarControls_message_type_support_handle = { + 0, + &CarControls__rosidl_typesupport_introspection_c__CarControls_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, CarControls)() { + CarControls__rosidl_typesupport_introspection_c__CarControls_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); + if (!CarControls__rosidl_typesupport_introspection_c__CarControls_message_type_support_handle.typesupport_identifier) { + CarControls__rosidl_typesupport_introspection_c__CarControls_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &CarControls__rosidl_typesupport_introspection_c__CarControls_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.cpp new file mode 100644 index 0000000000..60a3c37ede --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.cpp @@ -0,0 +1,212 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/detail/car_controls__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void CarControls_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::msg::CarControls(_init); +} + +void CarControls_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~CarControls(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember CarControls_message_member_array[8] = { + { + "header", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarControls, header), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "throttle", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarControls, throttle), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "brake", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarControls, brake), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "steering", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarControls, steering), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "handbrake", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarControls, handbrake), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "manual", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarControls, manual), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "manual_gear", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarControls, manual_gear), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "gear_immediate", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarControls, gear_immediate), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers CarControls_message_members = { + "airsim_interfaces::msg", // message namespace + "CarControls", // message name + 8, // number of fields + sizeof(airsim_interfaces::msg::CarControls), + CarControls_message_member_array, // message members + CarControls_init_function, // function to initialize message memory (memory has to be allocated) + CarControls_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t CarControls_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &CarControls_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::CarControls_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, CarControls)() { + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::CarControls_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.h new file mode 100644 index 0000000000..5a51c57b44 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + msg, + CarControls +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__builder.hpp new file mode 100644 index 0000000000..fb1c1c514f --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__builder.hpp @@ -0,0 +1,167 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__BUILDER_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__BUILDER_HPP_ + +#include "airsim_interfaces/msg/detail/car_state__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace builder +{ + +class Init_CarState_handbrake +{ +public: + explicit Init_CarState_handbrake(::airsim_interfaces::msg::CarState & msg) + : msg_(msg) + {} + ::airsim_interfaces::msg::CarState handbrake(::airsim_interfaces::msg::CarState::_handbrake_type arg) + { + msg_.handbrake = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::msg::CarState msg_; +}; + +class Init_CarState_maxrpm +{ +public: + explicit Init_CarState_maxrpm(::airsim_interfaces::msg::CarState & msg) + : msg_(msg) + {} + Init_CarState_handbrake maxrpm(::airsim_interfaces::msg::CarState::_maxrpm_type arg) + { + msg_.maxrpm = std::move(arg); + return Init_CarState_handbrake(msg_); + } + +private: + ::airsim_interfaces::msg::CarState msg_; +}; + +class Init_CarState_rpm +{ +public: + explicit Init_CarState_rpm(::airsim_interfaces::msg::CarState & msg) + : msg_(msg) + {} + Init_CarState_maxrpm rpm(::airsim_interfaces::msg::CarState::_rpm_type arg) + { + msg_.rpm = std::move(arg); + return Init_CarState_maxrpm(msg_); + } + +private: + ::airsim_interfaces::msg::CarState msg_; +}; + +class Init_CarState_gear +{ +public: + explicit Init_CarState_gear(::airsim_interfaces::msg::CarState & msg) + : msg_(msg) + {} + Init_CarState_rpm gear(::airsim_interfaces::msg::CarState::_gear_type arg) + { + msg_.gear = std::move(arg); + return Init_CarState_rpm(msg_); + } + +private: + ::airsim_interfaces::msg::CarState msg_; +}; + +class Init_CarState_speed +{ +public: + explicit Init_CarState_speed(::airsim_interfaces::msg::CarState & msg) + : msg_(msg) + {} + Init_CarState_gear speed(::airsim_interfaces::msg::CarState::_speed_type arg) + { + msg_.speed = std::move(arg); + return Init_CarState_gear(msg_); + } + +private: + ::airsim_interfaces::msg::CarState msg_; +}; + +class Init_CarState_twist +{ +public: + explicit Init_CarState_twist(::airsim_interfaces::msg::CarState & msg) + : msg_(msg) + {} + Init_CarState_speed twist(::airsim_interfaces::msg::CarState::_twist_type arg) + { + msg_.twist = std::move(arg); + return Init_CarState_speed(msg_); + } + +private: + ::airsim_interfaces::msg::CarState msg_; +}; + +class Init_CarState_pose +{ +public: + explicit Init_CarState_pose(::airsim_interfaces::msg::CarState & msg) + : msg_(msg) + {} + Init_CarState_twist pose(::airsim_interfaces::msg::CarState::_pose_type arg) + { + msg_.pose = std::move(arg); + return Init_CarState_twist(msg_); + } + +private: + ::airsim_interfaces::msg::CarState msg_; +}; + +class Init_CarState_header +{ +public: + Init_CarState_header() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_CarState_pose header(::airsim_interfaces::msg::CarState::_header_type arg) + { + msg_.header = std::move(arg); + return Init_CarState_pose(msg_); + } + +private: + ::airsim_interfaces::msg::CarState msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::msg::CarState>() +{ + return airsim_interfaces::msg::builder::Init_CarState_header(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.c new file mode 100644 index 0000000000..01a4df9e1e --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.c @@ -0,0 +1,175 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/msg/detail/car_state__functions.h" + +#include +#include +#include +#include + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/detail/header__functions.h" +// Member `pose` +#include "geometry_msgs/msg/detail/pose_with_covariance__functions.h" +// Member `twist` +#include "geometry_msgs/msg/detail/twist_with_covariance__functions.h" + +bool +airsim_interfaces__msg__CarState__init(airsim_interfaces__msg__CarState * msg) +{ + if (!msg) { + return false; + } + // header + if (!std_msgs__msg__Header__init(&msg->header)) { + airsim_interfaces__msg__CarState__fini(msg); + return false; + } + // pose + if (!geometry_msgs__msg__PoseWithCovariance__init(&msg->pose)) { + airsim_interfaces__msg__CarState__fini(msg); + return false; + } + // twist + if (!geometry_msgs__msg__TwistWithCovariance__init(&msg->twist)) { + airsim_interfaces__msg__CarState__fini(msg); + return false; + } + // speed + // gear + // rpm + // maxrpm + // handbrake + return true; +} + +void +airsim_interfaces__msg__CarState__fini(airsim_interfaces__msg__CarState * msg) +{ + if (!msg) { + return; + } + // header + std_msgs__msg__Header__fini(&msg->header); + // pose + geometry_msgs__msg__PoseWithCovariance__fini(&msg->pose); + // twist + geometry_msgs__msg__TwistWithCovariance__fini(&msg->twist); + // speed + // gear + // rpm + // maxrpm + // handbrake +} + +airsim_interfaces__msg__CarState * +airsim_interfaces__msg__CarState__create() +{ + airsim_interfaces__msg__CarState * msg = (airsim_interfaces__msg__CarState *)malloc(sizeof(airsim_interfaces__msg__CarState)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__msg__CarState)); + bool success = airsim_interfaces__msg__CarState__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__msg__CarState__destroy(airsim_interfaces__msg__CarState * msg) +{ + if (msg) { + airsim_interfaces__msg__CarState__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__msg__CarState__Sequence__init(airsim_interfaces__msg__CarState__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__msg__CarState * data = NULL; + if (size) { + data = (airsim_interfaces__msg__CarState *)calloc(size, sizeof(airsim_interfaces__msg__CarState)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__msg__CarState__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__msg__CarState__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__msg__CarState__Sequence__fini(airsim_interfaces__msg__CarState__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__msg__CarState__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__msg__CarState__Sequence * +airsim_interfaces__msg__CarState__Sequence__create(size_t size) +{ + airsim_interfaces__msg__CarState__Sequence * array = (airsim_interfaces__msg__CarState__Sequence *)malloc(sizeof(airsim_interfaces__msg__CarState__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__msg__CarState__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__msg__CarState__Sequence__destroy(airsim_interfaces__msg__CarState__Sequence * array) +{ + if (array) { + airsim_interfaces__msg__CarState__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.h new file mode 100644 index 0000000000..d35b087df3 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.h @@ -0,0 +1,124 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/msg/detail/car_state__struct.h" + +/// Initialize msg/CarState message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__msg__CarState + * )) before or use + * airsim_interfaces__msg__CarState__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__CarState__init(airsim_interfaces__msg__CarState * msg); + +/// Finalize msg/CarState message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__CarState__fini(airsim_interfaces__msg__CarState * msg); + +/// Create msg/CarState message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__msg__CarState__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__CarState * +airsim_interfaces__msg__CarState__create(); + +/// Destroy msg/CarState message. +/** + * It calls + * airsim_interfaces__msg__CarState__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__CarState__destroy(airsim_interfaces__msg__CarState * msg); + + +/// Initialize array of msg/CarState messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__msg__CarState__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__CarState__Sequence__init(airsim_interfaces__msg__CarState__Sequence * array, size_t size); + +/// Finalize array of msg/CarState messages. +/** + * It calls + * airsim_interfaces__msg__CarState__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__CarState__Sequence__fini(airsim_interfaces__msg__CarState__Sequence * array); + +/// Create array of msg/CarState messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__msg__CarState__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__CarState__Sequence * +airsim_interfaces__msg__CarState__Sequence__create(size_t size); + +/// Destroy array of msg/CarState messages. +/** + * It calls + * airsim_interfaces__msg__CarState__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__CarState__Sequence__destroy(airsim_interfaces__msg__CarState__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..b422141b43 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__msg__CarState( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__msg__CarState( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, CarState)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..64e22ffa32 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/msg/detail/car_state__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::msg::CarState & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::msg::CarState & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::msg::CarState & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_CarState( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, CarState)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..7f1617ebc5 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, CarState)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..fff3f8a4e5 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, CarState)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.h new file mode 100644 index 0000000000..a265f3b35b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.h @@ -0,0 +1,55 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.h" +// Member 'pose' +#include "geometry_msgs/msg/detail/pose_with_covariance__struct.h" +// Member 'twist' +#include "geometry_msgs/msg/detail/twist_with_covariance__struct.h" + +// Struct defined in msg/CarState in the package airsim_interfaces. +typedef struct airsim_interfaces__msg__CarState +{ + std_msgs__msg__Header header; + geometry_msgs__msg__PoseWithCovariance pose; + geometry_msgs__msg__TwistWithCovariance twist; + float speed; + int8_t gear; + float rpm; + float maxrpm; + bool handbrake; +} airsim_interfaces__msg__CarState; + +// Struct for a sequence of airsim_interfaces__msg__CarState. +typedef struct airsim_interfaces__msg__CarState__Sequence +{ + airsim_interfaces__msg__CarState * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__msg__CarState__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.hpp new file mode 100644 index 0000000000..b798ecf56c --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.hpp @@ -0,0 +1,235 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.hpp" +// Member 'pose' +#include "geometry_msgs/msg/detail/pose_with_covariance__struct.hpp" +// Member 'twist' +#include "geometry_msgs/msg/detail/twist_with_covariance__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__msg__CarState __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__msg__CarState __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace msg +{ + +// message struct +template +struct CarState_ +{ + using Type = CarState_; + + explicit CarState_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_init), + pose(_init), + twist(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->speed = 0.0f; + this->gear = 0; + this->rpm = 0.0f; + this->maxrpm = 0.0f; + this->handbrake = false; + } + } + + explicit CarState_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_alloc, _init), + pose(_alloc, _init), + twist(_alloc, _init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->speed = 0.0f; + this->gear = 0; + this->rpm = 0.0f; + this->maxrpm = 0.0f; + this->handbrake = false; + } + } + + // field types and members + using _header_type = + std_msgs::msg::Header_; + _header_type header; + using _pose_type = + geometry_msgs::msg::PoseWithCovariance_; + _pose_type pose; + using _twist_type = + geometry_msgs::msg::TwistWithCovariance_; + _twist_type twist; + using _speed_type = + float; + _speed_type speed; + using _gear_type = + int8_t; + _gear_type gear; + using _rpm_type = + float; + _rpm_type rpm; + using _maxrpm_type = + float; + _maxrpm_type maxrpm; + using _handbrake_type = + bool; + _handbrake_type handbrake; + + // setters for named parameter idiom + Type & set__header( + const std_msgs::msg::Header_ & _arg) + { + this->header = _arg; + return *this; + } + Type & set__pose( + const geometry_msgs::msg::PoseWithCovariance_ & _arg) + { + this->pose = _arg; + return *this; + } + Type & set__twist( + const geometry_msgs::msg::TwistWithCovariance_ & _arg) + { + this->twist = _arg; + return *this; + } + Type & set__speed( + const float & _arg) + { + this->speed = _arg; + return *this; + } + Type & set__gear( + const int8_t & _arg) + { + this->gear = _arg; + return *this; + } + Type & set__rpm( + const float & _arg) + { + this->rpm = _arg; + return *this; + } + Type & set__maxrpm( + const float & _arg) + { + this->maxrpm = _arg; + return *this; + } + Type & set__handbrake( + const bool & _arg) + { + this->handbrake = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::msg::CarState_ *; + using ConstRawPtr = + const airsim_interfaces::msg::CarState_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__msg__CarState + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__msg__CarState + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const CarState_ & other) const + { + if (this->header != other.header) { + return false; + } + if (this->pose != other.pose) { + return false; + } + if (this->twist != other.twist) { + return false; + } + if (this->speed != other.speed) { + return false; + } + if (this->gear != other.gear) { + return false; + } + if (this->rpm != other.rpm) { + return false; + } + if (this->maxrpm != other.maxrpm) { + return false; + } + if (this->handbrake != other.handbrake) { + return false; + } + return true; + } + bool operator!=(const CarState_ & other) const + { + return !this->operator==(other); + } +}; // struct CarState_ + +// alias to use template instance with default allocator +using CarState = + airsim_interfaces::msg::CarState_>; + +// constant definitions + +} // namespace msg + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__traits.hpp new file mode 100644 index 0000000000..086a41b7db --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__traits.hpp @@ -0,0 +1,50 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TRAITS_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TRAITS_HPP_ + +#include "airsim_interfaces/msg/detail/car_state__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__traits.hpp" +// Member 'pose' +#include "geometry_msgs/msg/detail/pose_with_covariance__traits.hpp" +// Member 'twist' +#include "geometry_msgs/msg/detail/twist_with_covariance__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::msg::CarState"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/msg/CarState"; +} + +template<> +struct has_fixed_size + : std::integral_constant::value && has_fixed_size::value && has_fixed_size::value> {}; + +template<> +struct has_bounded_size + : std::integral_constant::value && has_bounded_size::value && has_bounded_size::value> {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.c new file mode 100644 index 0000000000..32f51fed86 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.c @@ -0,0 +1,206 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/msg/detail/car_state__functions.h" +#include "airsim_interfaces/msg/detail/car_state__struct.h" + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/header.h" +// Member `header` +#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" +// Member `pose` +#include "geometry_msgs/msg/pose_with_covariance.h" +// Member `pose` +#include "geometry_msgs/msg/detail/pose_with_covariance__rosidl_typesupport_introspection_c.h" +// Member `twist` +#include "geometry_msgs/msg/twist_with_covariance.h" +// Member `twist` +#include "geometry_msgs/msg/detail/twist_with_covariance__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void CarState__rosidl_typesupport_introspection_c__CarState_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__msg__CarState__init(message_memory); +} + +void CarState__rosidl_typesupport_introspection_c__CarState_fini_function(void * message_memory) +{ + airsim_interfaces__msg__CarState__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember CarState__rosidl_typesupport_introspection_c__CarState_message_member_array[8] = { + { + "header", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarState, header), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "pose", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarState, pose), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "twist", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarState, twist), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "speed", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarState, speed), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "gear", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarState, gear), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "rpm", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarState, rpm), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "maxrpm", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarState, maxrpm), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "handbrake", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__CarState, handbrake), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers CarState__rosidl_typesupport_introspection_c__CarState_message_members = { + "airsim_interfaces__msg", // message namespace + "CarState", // message name + 8, // number of fields + sizeof(airsim_interfaces__msg__CarState), + CarState__rosidl_typesupport_introspection_c__CarState_message_member_array, // message members + CarState__rosidl_typesupport_introspection_c__CarState_init_function, // function to initialize message memory (memory has to be allocated) + CarState__rosidl_typesupport_introspection_c__CarState_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t CarState__rosidl_typesupport_introspection_c__CarState_message_type_support_handle = { + 0, + &CarState__rosidl_typesupport_introspection_c__CarState_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, CarState)() { + CarState__rosidl_typesupport_introspection_c__CarState_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); + CarState__rosidl_typesupport_introspection_c__CarState_message_member_array[1].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, PoseWithCovariance)(); + CarState__rosidl_typesupport_introspection_c__CarState_message_member_array[2].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, TwistWithCovariance)(); + if (!CarState__rosidl_typesupport_introspection_c__CarState_message_type_support_handle.typesupport_identifier) { + CarState__rosidl_typesupport_introspection_c__CarState_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &CarState__rosidl_typesupport_introspection_c__CarState_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.cpp new file mode 100644 index 0000000000..8586881935 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.cpp @@ -0,0 +1,212 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/detail/car_state__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void CarState_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::msg::CarState(_init); +} + +void CarState_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~CarState(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember CarState_message_member_array[8] = { + { + "header", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarState, header), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "pose", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarState, pose), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "twist", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarState, twist), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "speed", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarState, speed), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "gear", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarState, gear), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "rpm", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarState, rpm), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "maxrpm", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarState, maxrpm), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "handbrake", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::CarState, handbrake), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers CarState_message_members = { + "airsim_interfaces::msg", // message namespace + "CarState", // message name + 8, // number of fields + sizeof(airsim_interfaces::msg::CarState), + CarState_message_member_array, // message members + CarState_init_function, // function to initialize message memory (memory has to be allocated) + CarState_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t CarState_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &CarState_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::CarState_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, CarState)() { + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::CarState_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.h new file mode 100644 index 0000000000..5ffd3d91d8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + msg, + CarState +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__builder.hpp new file mode 100644 index 0000000000..c852ff606d --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__builder.hpp @@ -0,0 +1,151 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__BUILDER_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__BUILDER_HPP_ + +#include "airsim_interfaces/msg/detail/environment__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace builder +{ + +class Init_Environment_air_density +{ +public: + explicit Init_Environment_air_density(::airsim_interfaces::msg::Environment & msg) + : msg_(msg) + {} + ::airsim_interfaces::msg::Environment air_density(::airsim_interfaces::msg::Environment::_air_density_type arg) + { + msg_.air_density = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::msg::Environment msg_; +}; + +class Init_Environment_temperature +{ +public: + explicit Init_Environment_temperature(::airsim_interfaces::msg::Environment & msg) + : msg_(msg) + {} + Init_Environment_air_density temperature(::airsim_interfaces::msg::Environment::_temperature_type arg) + { + msg_.temperature = std::move(arg); + return Init_Environment_air_density(msg_); + } + +private: + ::airsim_interfaces::msg::Environment msg_; +}; + +class Init_Environment_air_pressure +{ +public: + explicit Init_Environment_air_pressure(::airsim_interfaces::msg::Environment & msg) + : msg_(msg) + {} + Init_Environment_temperature air_pressure(::airsim_interfaces::msg::Environment::_air_pressure_type arg) + { + msg_.air_pressure = std::move(arg); + return Init_Environment_temperature(msg_); + } + +private: + ::airsim_interfaces::msg::Environment msg_; +}; + +class Init_Environment_gravity +{ +public: + explicit Init_Environment_gravity(::airsim_interfaces::msg::Environment & msg) + : msg_(msg) + {} + Init_Environment_air_pressure gravity(::airsim_interfaces::msg::Environment::_gravity_type arg) + { + msg_.gravity = std::move(arg); + return Init_Environment_air_pressure(msg_); + } + +private: + ::airsim_interfaces::msg::Environment msg_; +}; + +class Init_Environment_geo_point +{ +public: + explicit Init_Environment_geo_point(::airsim_interfaces::msg::Environment & msg) + : msg_(msg) + {} + Init_Environment_gravity geo_point(::airsim_interfaces::msg::Environment::_geo_point_type arg) + { + msg_.geo_point = std::move(arg); + return Init_Environment_gravity(msg_); + } + +private: + ::airsim_interfaces::msg::Environment msg_; +}; + +class Init_Environment_position +{ +public: + explicit Init_Environment_position(::airsim_interfaces::msg::Environment & msg) + : msg_(msg) + {} + Init_Environment_geo_point position(::airsim_interfaces::msg::Environment::_position_type arg) + { + msg_.position = std::move(arg); + return Init_Environment_geo_point(msg_); + } + +private: + ::airsim_interfaces::msg::Environment msg_; +}; + +class Init_Environment_header +{ +public: + Init_Environment_header() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_Environment_position header(::airsim_interfaces::msg::Environment::_header_type arg) + { + msg_.header = std::move(arg); + return Init_Environment_position(msg_); + } + +private: + ::airsim_interfaces::msg::Environment msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::msg::Environment>() +{ + return airsim_interfaces::msg::builder::Init_Environment_header(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.c new file mode 100644 index 0000000000..aa9bc469c7 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.c @@ -0,0 +1,179 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/msg/detail/environment__functions.h" + +#include +#include +#include +#include + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/detail/header__functions.h" +// Member `position` +// Member `gravity` +#include "geometry_msgs/msg/detail/vector3__functions.h" +// Member `geo_point` +#include "geographic_msgs/msg/detail/geo_point__functions.h" + +bool +airsim_interfaces__msg__Environment__init(airsim_interfaces__msg__Environment * msg) +{ + if (!msg) { + return false; + } + // header + if (!std_msgs__msg__Header__init(&msg->header)) { + airsim_interfaces__msg__Environment__fini(msg); + return false; + } + // position + if (!geometry_msgs__msg__Vector3__init(&msg->position)) { + airsim_interfaces__msg__Environment__fini(msg); + return false; + } + // geo_point + if (!geographic_msgs__msg__GeoPoint__init(&msg->geo_point)) { + airsim_interfaces__msg__Environment__fini(msg); + return false; + } + // gravity + if (!geometry_msgs__msg__Vector3__init(&msg->gravity)) { + airsim_interfaces__msg__Environment__fini(msg); + return false; + } + // air_pressure + // temperature + // air_density + return true; +} + +void +airsim_interfaces__msg__Environment__fini(airsim_interfaces__msg__Environment * msg) +{ + if (!msg) { + return; + } + // header + std_msgs__msg__Header__fini(&msg->header); + // position + geometry_msgs__msg__Vector3__fini(&msg->position); + // geo_point + geographic_msgs__msg__GeoPoint__fini(&msg->geo_point); + // gravity + geometry_msgs__msg__Vector3__fini(&msg->gravity); + // air_pressure + // temperature + // air_density +} + +airsim_interfaces__msg__Environment * +airsim_interfaces__msg__Environment__create() +{ + airsim_interfaces__msg__Environment * msg = (airsim_interfaces__msg__Environment *)malloc(sizeof(airsim_interfaces__msg__Environment)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__msg__Environment)); + bool success = airsim_interfaces__msg__Environment__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__msg__Environment__destroy(airsim_interfaces__msg__Environment * msg) +{ + if (msg) { + airsim_interfaces__msg__Environment__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__msg__Environment__Sequence__init(airsim_interfaces__msg__Environment__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__msg__Environment * data = NULL; + if (size) { + data = (airsim_interfaces__msg__Environment *)calloc(size, sizeof(airsim_interfaces__msg__Environment)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__msg__Environment__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__msg__Environment__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__msg__Environment__Sequence__fini(airsim_interfaces__msg__Environment__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__msg__Environment__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__msg__Environment__Sequence * +airsim_interfaces__msg__Environment__Sequence__create(size_t size) +{ + airsim_interfaces__msg__Environment__Sequence * array = (airsim_interfaces__msg__Environment__Sequence *)malloc(sizeof(airsim_interfaces__msg__Environment__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__msg__Environment__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__msg__Environment__Sequence__destroy(airsim_interfaces__msg__Environment__Sequence * array) +{ + if (array) { + airsim_interfaces__msg__Environment__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.h new file mode 100644 index 0000000000..cb32316f84 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.h @@ -0,0 +1,124 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/msg/detail/environment__struct.h" + +/// Initialize msg/Environment message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__msg__Environment + * )) before or use + * airsim_interfaces__msg__Environment__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__Environment__init(airsim_interfaces__msg__Environment * msg); + +/// Finalize msg/Environment message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__Environment__fini(airsim_interfaces__msg__Environment * msg); + +/// Create msg/Environment message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__msg__Environment__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__Environment * +airsim_interfaces__msg__Environment__create(); + +/// Destroy msg/Environment message. +/** + * It calls + * airsim_interfaces__msg__Environment__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__Environment__destroy(airsim_interfaces__msg__Environment * msg); + + +/// Initialize array of msg/Environment messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__msg__Environment__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__Environment__Sequence__init(airsim_interfaces__msg__Environment__Sequence * array, size_t size); + +/// Finalize array of msg/Environment messages. +/** + * It calls + * airsim_interfaces__msg__Environment__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__Environment__Sequence__fini(airsim_interfaces__msg__Environment__Sequence * array); + +/// Create array of msg/Environment messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__msg__Environment__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__Environment__Sequence * +airsim_interfaces__msg__Environment__Sequence__create(size_t size); + +/// Destroy array of msg/Environment messages. +/** + * It calls + * airsim_interfaces__msg__Environment__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__Environment__Sequence__destroy(airsim_interfaces__msg__Environment__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..65cd666436 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__msg__Environment( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__msg__Environment( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, Environment)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..2c542d3f98 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/msg/detail/environment__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::msg::Environment & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::msg::Environment & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::msg::Environment & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_Environment( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, Environment)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..206536edff --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, Environment)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..08a9f05fe1 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, Environment)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.h new file mode 100644 index 0000000000..9b06e89fde --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.h @@ -0,0 +1,55 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.h" +// Member 'position' +// Member 'gravity' +#include "geometry_msgs/msg/detail/vector3__struct.h" +// Member 'geo_point' +#include "geographic_msgs/msg/detail/geo_point__struct.h" + +// Struct defined in msg/Environment in the package airsim_interfaces. +typedef struct airsim_interfaces__msg__Environment +{ + std_msgs__msg__Header header; + geometry_msgs__msg__Vector3 position; + geographic_msgs__msg__GeoPoint geo_point; + geometry_msgs__msg__Vector3 gravity; + float air_pressure; + float temperature; + float air_density; +} airsim_interfaces__msg__Environment; + +// Struct for a sequence of airsim_interfaces__msg__Environment. +typedef struct airsim_interfaces__msg__Environment__Sequence +{ + airsim_interfaces__msg__Environment * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__msg__Environment__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.hpp new file mode 100644 index 0000000000..98d5aa3c9c --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.hpp @@ -0,0 +1,222 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.hpp" +// Member 'position' +// Member 'gravity' +#include "geometry_msgs/msg/detail/vector3__struct.hpp" +// Member 'geo_point' +#include "geographic_msgs/msg/detail/geo_point__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__msg__Environment __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__msg__Environment __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace msg +{ + +// message struct +template +struct Environment_ +{ + using Type = Environment_; + + explicit Environment_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_init), + position(_init), + geo_point(_init), + gravity(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->air_pressure = 0.0f; + this->temperature = 0.0f; + this->air_density = 0.0f; + } + } + + explicit Environment_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_alloc, _init), + position(_alloc, _init), + geo_point(_alloc, _init), + gravity(_alloc, _init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->air_pressure = 0.0f; + this->temperature = 0.0f; + this->air_density = 0.0f; + } + } + + // field types and members + using _header_type = + std_msgs::msg::Header_; + _header_type header; + using _position_type = + geometry_msgs::msg::Vector3_; + _position_type position; + using _geo_point_type = + geographic_msgs::msg::GeoPoint_; + _geo_point_type geo_point; + using _gravity_type = + geometry_msgs::msg::Vector3_; + _gravity_type gravity; + using _air_pressure_type = + float; + _air_pressure_type air_pressure; + using _temperature_type = + float; + _temperature_type temperature; + using _air_density_type = + float; + _air_density_type air_density; + + // setters for named parameter idiom + Type & set__header( + const std_msgs::msg::Header_ & _arg) + { + this->header = _arg; + return *this; + } + Type & set__position( + const geometry_msgs::msg::Vector3_ & _arg) + { + this->position = _arg; + return *this; + } + Type & set__geo_point( + const geographic_msgs::msg::GeoPoint_ & _arg) + { + this->geo_point = _arg; + return *this; + } + Type & set__gravity( + const geometry_msgs::msg::Vector3_ & _arg) + { + this->gravity = _arg; + return *this; + } + Type & set__air_pressure( + const float & _arg) + { + this->air_pressure = _arg; + return *this; + } + Type & set__temperature( + const float & _arg) + { + this->temperature = _arg; + return *this; + } + Type & set__air_density( + const float & _arg) + { + this->air_density = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::msg::Environment_ *; + using ConstRawPtr = + const airsim_interfaces::msg::Environment_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__msg__Environment + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__msg__Environment + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Environment_ & other) const + { + if (this->header != other.header) { + return false; + } + if (this->position != other.position) { + return false; + } + if (this->geo_point != other.geo_point) { + return false; + } + if (this->gravity != other.gravity) { + return false; + } + if (this->air_pressure != other.air_pressure) { + return false; + } + if (this->temperature != other.temperature) { + return false; + } + if (this->air_density != other.air_density) { + return false; + } + return true; + } + bool operator!=(const Environment_ & other) const + { + return !this->operator==(other); + } +}; // struct Environment_ + +// alias to use template instance with default allocator +using Environment = + airsim_interfaces::msg::Environment_>; + +// constant definitions + +} // namespace msg + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__traits.hpp new file mode 100644 index 0000000000..0283661997 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__traits.hpp @@ -0,0 +1,51 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TRAITS_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TRAITS_HPP_ + +#include "airsim_interfaces/msg/detail/environment__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__traits.hpp" +// Member 'position' +// Member 'gravity' +#include "geometry_msgs/msg/detail/vector3__traits.hpp" +// Member 'geo_point' +#include "geographic_msgs/msg/detail/geo_point__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::msg::Environment"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/msg/Environment"; +} + +template<> +struct has_fixed_size + : std::integral_constant::value && has_fixed_size::value && has_fixed_size::value> {}; + +template<> +struct has_bounded_size + : std::integral_constant::value && has_bounded_size::value && has_bounded_size::value> {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.c new file mode 100644 index 0000000000..b331f83c45 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.c @@ -0,0 +1,195 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/msg/detail/environment__functions.h" +#include "airsim_interfaces/msg/detail/environment__struct.h" + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/header.h" +// Member `header` +#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" +// Member `position` +// Member `gravity` +#include "geometry_msgs/msg/vector3.h" +// Member `position` +// Member `gravity` +#include "geometry_msgs/msg/detail/vector3__rosidl_typesupport_introspection_c.h" +// Member `geo_point` +#include "geographic_msgs/msg/geo_point.h" +// Member `geo_point` +#include "geographic_msgs/msg/detail/geo_point__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Environment__rosidl_typesupport_introspection_c__Environment_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__msg__Environment__init(message_memory); +} + +void Environment__rosidl_typesupport_introspection_c__Environment_fini_function(void * message_memory) +{ + airsim_interfaces__msg__Environment__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Environment__rosidl_typesupport_introspection_c__Environment_message_member_array[7] = { + { + "header", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__Environment, header), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "position", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__Environment, position), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "geo_point", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__Environment, geo_point), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "gravity", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__Environment, gravity), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "air_pressure", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__Environment, air_pressure), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "temperature", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__Environment, temperature), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "air_density", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__Environment, air_density), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Environment__rosidl_typesupport_introspection_c__Environment_message_members = { + "airsim_interfaces__msg", // message namespace + "Environment", // message name + 7, // number of fields + sizeof(airsim_interfaces__msg__Environment), + Environment__rosidl_typesupport_introspection_c__Environment_message_member_array, // message members + Environment__rosidl_typesupport_introspection_c__Environment_init_function, // function to initialize message memory (memory has to be allocated) + Environment__rosidl_typesupport_introspection_c__Environment_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Environment__rosidl_typesupport_introspection_c__Environment_message_type_support_handle = { + 0, + &Environment__rosidl_typesupport_introspection_c__Environment_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, Environment)() { + Environment__rosidl_typesupport_introspection_c__Environment_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); + Environment__rosidl_typesupport_introspection_c__Environment_message_member_array[1].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, Vector3)(); + Environment__rosidl_typesupport_introspection_c__Environment_message_member_array[2].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geographic_msgs, msg, GeoPoint)(); + Environment__rosidl_typesupport_introspection_c__Environment_message_member_array[3].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, Vector3)(); + if (!Environment__rosidl_typesupport_introspection_c__Environment_message_type_support_handle.typesupport_identifier) { + Environment__rosidl_typesupport_introspection_c__Environment_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Environment__rosidl_typesupport_introspection_c__Environment_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.cpp new file mode 100644 index 0000000000..9668d7a0cd --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.cpp @@ -0,0 +1,197 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/detail/environment__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Environment_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::msg::Environment(_init); +} + +void Environment_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Environment(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Environment_message_member_array[7] = { + { + "header", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::Environment, header), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "position", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::Environment, position), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "geo_point", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::Environment, geo_point), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "gravity", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::Environment, gravity), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "air_pressure", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::Environment, air_pressure), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "temperature", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::Environment, temperature), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "air_density", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::Environment, air_density), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Environment_message_members = { + "airsim_interfaces::msg", // message namespace + "Environment", // message name + 7, // number of fields + sizeof(airsim_interfaces::msg::Environment), + Environment_message_member_array, // message members + Environment_init_function, // function to initialize message memory (memory has to be allocated) + Environment_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Environment_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Environment_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::Environment_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, Environment)() { + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::Environment_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.h new file mode 100644 index 0000000000..5578b9ab45 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + msg, + Environment +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__builder.hpp new file mode 100644 index 0000000000..87e262c620 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__builder.hpp @@ -0,0 +1,135 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__BUILDER_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__BUILDER_HPP_ + +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace builder +{ + +class Init_GimbalAngleEulerCmd_yaw +{ +public: + explicit Init_GimbalAngleEulerCmd_yaw(::airsim_interfaces::msg::GimbalAngleEulerCmd & msg) + : msg_(msg) + {} + ::airsim_interfaces::msg::GimbalAngleEulerCmd yaw(::airsim_interfaces::msg::GimbalAngleEulerCmd::_yaw_type arg) + { + msg_.yaw = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; +}; + +class Init_GimbalAngleEulerCmd_pitch +{ +public: + explicit Init_GimbalAngleEulerCmd_pitch(::airsim_interfaces::msg::GimbalAngleEulerCmd & msg) + : msg_(msg) + {} + Init_GimbalAngleEulerCmd_yaw pitch(::airsim_interfaces::msg::GimbalAngleEulerCmd::_pitch_type arg) + { + msg_.pitch = std::move(arg); + return Init_GimbalAngleEulerCmd_yaw(msg_); + } + +private: + ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; +}; + +class Init_GimbalAngleEulerCmd_roll +{ +public: + explicit Init_GimbalAngleEulerCmd_roll(::airsim_interfaces::msg::GimbalAngleEulerCmd & msg) + : msg_(msg) + {} + Init_GimbalAngleEulerCmd_pitch roll(::airsim_interfaces::msg::GimbalAngleEulerCmd::_roll_type arg) + { + msg_.roll = std::move(arg); + return Init_GimbalAngleEulerCmd_pitch(msg_); + } + +private: + ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; +}; + +class Init_GimbalAngleEulerCmd_vehicle_name +{ +public: + explicit Init_GimbalAngleEulerCmd_vehicle_name(::airsim_interfaces::msg::GimbalAngleEulerCmd & msg) + : msg_(msg) + {} + Init_GimbalAngleEulerCmd_roll vehicle_name(::airsim_interfaces::msg::GimbalAngleEulerCmd::_vehicle_name_type arg) + { + msg_.vehicle_name = std::move(arg); + return Init_GimbalAngleEulerCmd_roll(msg_); + } + +private: + ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; +}; + +class Init_GimbalAngleEulerCmd_camera_name +{ +public: + explicit Init_GimbalAngleEulerCmd_camera_name(::airsim_interfaces::msg::GimbalAngleEulerCmd & msg) + : msg_(msg) + {} + Init_GimbalAngleEulerCmd_vehicle_name camera_name(::airsim_interfaces::msg::GimbalAngleEulerCmd::_camera_name_type arg) + { + msg_.camera_name = std::move(arg); + return Init_GimbalAngleEulerCmd_vehicle_name(msg_); + } + +private: + ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; +}; + +class Init_GimbalAngleEulerCmd_header +{ +public: + Init_GimbalAngleEulerCmd_header() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_GimbalAngleEulerCmd_camera_name header(::airsim_interfaces::msg::GimbalAngleEulerCmd::_header_type arg) + { + msg_.header = std::move(arg); + return Init_GimbalAngleEulerCmd_camera_name(msg_); + } + +private: + ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::msg::GimbalAngleEulerCmd>() +{ + return airsim_interfaces::msg::builder::Init_GimbalAngleEulerCmd_header(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.c new file mode 100644 index 0000000000..202efb0d81 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.c @@ -0,0 +1,170 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h" + +#include +#include +#include +#include + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/detail/header__functions.h" +// Member `camera_name` +// Member `vehicle_name` +#include "rosidl_runtime_c/string_functions.h" + +bool +airsim_interfaces__msg__GimbalAngleEulerCmd__init(airsim_interfaces__msg__GimbalAngleEulerCmd * msg) +{ + if (!msg) { + return false; + } + // header + if (!std_msgs__msg__Header__init(&msg->header)) { + airsim_interfaces__msg__GimbalAngleEulerCmd__fini(msg); + return false; + } + // camera_name + if (!rosidl_runtime_c__String__init(&msg->camera_name)) { + airsim_interfaces__msg__GimbalAngleEulerCmd__fini(msg); + return false; + } + // vehicle_name + if (!rosidl_runtime_c__String__init(&msg->vehicle_name)) { + airsim_interfaces__msg__GimbalAngleEulerCmd__fini(msg); + return false; + } + // roll + // pitch + // yaw + return true; +} + +void +airsim_interfaces__msg__GimbalAngleEulerCmd__fini(airsim_interfaces__msg__GimbalAngleEulerCmd * msg) +{ + if (!msg) { + return; + } + // header + std_msgs__msg__Header__fini(&msg->header); + // camera_name + rosidl_runtime_c__String__fini(&msg->camera_name); + // vehicle_name + rosidl_runtime_c__String__fini(&msg->vehicle_name); + // roll + // pitch + // yaw +} + +airsim_interfaces__msg__GimbalAngleEulerCmd * +airsim_interfaces__msg__GimbalAngleEulerCmd__create() +{ + airsim_interfaces__msg__GimbalAngleEulerCmd * msg = (airsim_interfaces__msg__GimbalAngleEulerCmd *)malloc(sizeof(airsim_interfaces__msg__GimbalAngleEulerCmd)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__msg__GimbalAngleEulerCmd)); + bool success = airsim_interfaces__msg__GimbalAngleEulerCmd__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__msg__GimbalAngleEulerCmd__destroy(airsim_interfaces__msg__GimbalAngleEulerCmd * msg) +{ + if (msg) { + airsim_interfaces__msg__GimbalAngleEulerCmd__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__init(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__msg__GimbalAngleEulerCmd * data = NULL; + if (size) { + data = (airsim_interfaces__msg__GimbalAngleEulerCmd *)calloc(size, sizeof(airsim_interfaces__msg__GimbalAngleEulerCmd)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__msg__GimbalAngleEulerCmd__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__msg__GimbalAngleEulerCmd__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__fini(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__msg__GimbalAngleEulerCmd__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * +airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__create(size_t size) +{ + airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array = (airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence *)malloc(sizeof(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__destroy(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array) +{ + if (array) { + airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h new file mode 100644 index 0000000000..b9db7340d5 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h @@ -0,0 +1,124 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h" + +/// Initialize msg/GimbalAngleEulerCmd message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__msg__GimbalAngleEulerCmd + * )) before or use + * airsim_interfaces__msg__GimbalAngleEulerCmd__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__GimbalAngleEulerCmd__init(airsim_interfaces__msg__GimbalAngleEulerCmd * msg); + +/// Finalize msg/GimbalAngleEulerCmd message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GimbalAngleEulerCmd__fini(airsim_interfaces__msg__GimbalAngleEulerCmd * msg); + +/// Create msg/GimbalAngleEulerCmd message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__msg__GimbalAngleEulerCmd__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__GimbalAngleEulerCmd * +airsim_interfaces__msg__GimbalAngleEulerCmd__create(); + +/// Destroy msg/GimbalAngleEulerCmd message. +/** + * It calls + * airsim_interfaces__msg__GimbalAngleEulerCmd__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GimbalAngleEulerCmd__destroy(airsim_interfaces__msg__GimbalAngleEulerCmd * msg); + + +/// Initialize array of msg/GimbalAngleEulerCmd messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__msg__GimbalAngleEulerCmd__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__init(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array, size_t size); + +/// Finalize array of msg/GimbalAngleEulerCmd messages. +/** + * It calls + * airsim_interfaces__msg__GimbalAngleEulerCmd__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__fini(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array); + +/// Create array of msg/GimbalAngleEulerCmd messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * +airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__create(size_t size); + +/// Destroy array of msg/GimbalAngleEulerCmd messages. +/** + * It calls + * airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__destroy(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..d9be60a41f --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__msg__GimbalAngleEulerCmd( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__msg__GimbalAngleEulerCmd( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, GimbalAngleEulerCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..3a66f9a9c1 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::msg::GimbalAngleEulerCmd & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::msg::GimbalAngleEulerCmd & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::msg::GimbalAngleEulerCmd & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_GimbalAngleEulerCmd( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, GimbalAngleEulerCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..6c593b2053 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GimbalAngleEulerCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..8e93ba2931 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GimbalAngleEulerCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h new file mode 100644 index 0000000000..3f6d925fc0 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h @@ -0,0 +1,52 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.h" +// Member 'camera_name' +// Member 'vehicle_name' +#include "rosidl_runtime_c/string.h" + +// Struct defined in msg/GimbalAngleEulerCmd in the package airsim_interfaces. +typedef struct airsim_interfaces__msg__GimbalAngleEulerCmd +{ + std_msgs__msg__Header header; + rosidl_runtime_c__String camera_name; + rosidl_runtime_c__String vehicle_name; + double roll; + double pitch; + double yaw; +} airsim_interfaces__msg__GimbalAngleEulerCmd; + +// Struct for a sequence of airsim_interfaces__msg__GimbalAngleEulerCmd. +typedef struct airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence +{ + airsim_interfaces__msg__GimbalAngleEulerCmd * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp new file mode 100644 index 0000000000..538f51415e --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp @@ -0,0 +1,205 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__msg__GimbalAngleEulerCmd __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__msg__GimbalAngleEulerCmd __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace msg +{ + +// message struct +template +struct GimbalAngleEulerCmd_ +{ + using Type = GimbalAngleEulerCmd_; + + explicit GimbalAngleEulerCmd_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->camera_name = ""; + this->vehicle_name = ""; + this->roll = 0.0; + this->pitch = 0.0; + this->yaw = 0.0; + } + } + + explicit GimbalAngleEulerCmd_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_alloc, _init), + camera_name(_alloc), + vehicle_name(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->camera_name = ""; + this->vehicle_name = ""; + this->roll = 0.0; + this->pitch = 0.0; + this->yaw = 0.0; + } + } + + // field types and members + using _header_type = + std_msgs::msg::Header_; + _header_type header; + using _camera_name_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _camera_name_type camera_name; + using _vehicle_name_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _vehicle_name_type vehicle_name; + using _roll_type = + double; + _roll_type roll; + using _pitch_type = + double; + _pitch_type pitch; + using _yaw_type = + double; + _yaw_type yaw; + + // setters for named parameter idiom + Type & set__header( + const std_msgs::msg::Header_ & _arg) + { + this->header = _arg; + return *this; + } + Type & set__camera_name( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->camera_name = _arg; + return *this; + } + Type & set__vehicle_name( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->vehicle_name = _arg; + return *this; + } + Type & set__roll( + const double & _arg) + { + this->roll = _arg; + return *this; + } + Type & set__pitch( + const double & _arg) + { + this->pitch = _arg; + return *this; + } + Type & set__yaw( + const double & _arg) + { + this->yaw = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::msg::GimbalAngleEulerCmd_ *; + using ConstRawPtr = + const airsim_interfaces::msg::GimbalAngleEulerCmd_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__msg__GimbalAngleEulerCmd + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__msg__GimbalAngleEulerCmd + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const GimbalAngleEulerCmd_ & other) const + { + if (this->header != other.header) { + return false; + } + if (this->camera_name != other.camera_name) { + return false; + } + if (this->vehicle_name != other.vehicle_name) { + return false; + } + if (this->roll != other.roll) { + return false; + } + if (this->pitch != other.pitch) { + return false; + } + if (this->yaw != other.yaw) { + return false; + } + return true; + } + bool operator!=(const GimbalAngleEulerCmd_ & other) const + { + return !this->operator==(other); + } +}; // struct GimbalAngleEulerCmd_ + +// alias to use template instance with default allocator +using GimbalAngleEulerCmd = + airsim_interfaces::msg::GimbalAngleEulerCmd_>; + +// constant definitions + +} // namespace msg + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__traits.hpp new file mode 100644 index 0000000000..05bc2f3f01 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__traits.hpp @@ -0,0 +1,46 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TRAITS_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TRAITS_HPP_ + +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::msg::GimbalAngleEulerCmd"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/msg/GimbalAngleEulerCmd"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.c new file mode 100644 index 0000000000..5f918a4021 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.c @@ -0,0 +1,167 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h" + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/header.h" +// Member `header` +#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" +// Member `camera_name` +// Member `vehicle_name` +#include "rosidl_runtime_c/string_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__msg__GimbalAngleEulerCmd__init(message_memory); +} + +void GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_fini_function(void * message_memory) +{ + airsim_interfaces__msg__GimbalAngleEulerCmd__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_member_array[6] = { + { + "header", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, header), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "camera_name", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, camera_name), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "vehicle_name", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, vehicle_name), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "roll", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, roll), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "pitch", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, pitch), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "yaw", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, yaw), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_members = { + "airsim_interfaces__msg", // message namespace + "GimbalAngleEulerCmd", // message name + 6, // number of fields + sizeof(airsim_interfaces__msg__GimbalAngleEulerCmd), + GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_member_array, // message members + GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_init_function, // function to initialize message memory (memory has to be allocated) + GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_type_support_handle = { + 0, + &GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GimbalAngleEulerCmd)() { + GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); + if (!GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_type_support_handle.typesupport_identifier) { + GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.cpp new file mode 100644 index 0000000000..ca0158d037 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.cpp @@ -0,0 +1,182 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void GimbalAngleEulerCmd_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::msg::GimbalAngleEulerCmd(_init); +} + +void GimbalAngleEulerCmd_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~GimbalAngleEulerCmd(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember GimbalAngleEulerCmd_message_member_array[6] = { + { + "header", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, header), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "camera_name", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, camera_name), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "vehicle_name", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, vehicle_name), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "roll", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, roll), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "pitch", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, pitch), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "yaw", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, yaw), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers GimbalAngleEulerCmd_message_members = { + "airsim_interfaces::msg", // message namespace + "GimbalAngleEulerCmd", // message name + 6, // number of fields + sizeof(airsim_interfaces::msg::GimbalAngleEulerCmd), + GimbalAngleEulerCmd_message_member_array, // message members + GimbalAngleEulerCmd_init_function, // function to initialize message memory (memory has to be allocated) + GimbalAngleEulerCmd_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t GimbalAngleEulerCmd_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &GimbalAngleEulerCmd_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GimbalAngleEulerCmd_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GimbalAngleEulerCmd)() { + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GimbalAngleEulerCmd_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.h new file mode 100644 index 0000000000..c26c41135e --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + msg, + GimbalAngleEulerCmd +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__builder.hpp new file mode 100644 index 0000000000..1756292f86 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__builder.hpp @@ -0,0 +1,103 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__BUILDER_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__BUILDER_HPP_ + +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace builder +{ + +class Init_GimbalAngleQuatCmd_orientation +{ +public: + explicit Init_GimbalAngleQuatCmd_orientation(::airsim_interfaces::msg::GimbalAngleQuatCmd & msg) + : msg_(msg) + {} + ::airsim_interfaces::msg::GimbalAngleQuatCmd orientation(::airsim_interfaces::msg::GimbalAngleQuatCmd::_orientation_type arg) + { + msg_.orientation = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::msg::GimbalAngleQuatCmd msg_; +}; + +class Init_GimbalAngleQuatCmd_vehicle_name +{ +public: + explicit Init_GimbalAngleQuatCmd_vehicle_name(::airsim_interfaces::msg::GimbalAngleQuatCmd & msg) + : msg_(msg) + {} + Init_GimbalAngleQuatCmd_orientation vehicle_name(::airsim_interfaces::msg::GimbalAngleQuatCmd::_vehicle_name_type arg) + { + msg_.vehicle_name = std::move(arg); + return Init_GimbalAngleQuatCmd_orientation(msg_); + } + +private: + ::airsim_interfaces::msg::GimbalAngleQuatCmd msg_; +}; + +class Init_GimbalAngleQuatCmd_camera_name +{ +public: + explicit Init_GimbalAngleQuatCmd_camera_name(::airsim_interfaces::msg::GimbalAngleQuatCmd & msg) + : msg_(msg) + {} + Init_GimbalAngleQuatCmd_vehicle_name camera_name(::airsim_interfaces::msg::GimbalAngleQuatCmd::_camera_name_type arg) + { + msg_.camera_name = std::move(arg); + return Init_GimbalAngleQuatCmd_vehicle_name(msg_); + } + +private: + ::airsim_interfaces::msg::GimbalAngleQuatCmd msg_; +}; + +class Init_GimbalAngleQuatCmd_header +{ +public: + Init_GimbalAngleQuatCmd_header() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_GimbalAngleQuatCmd_camera_name header(::airsim_interfaces::msg::GimbalAngleQuatCmd::_header_type arg) + { + msg_.header = std::move(arg); + return Init_GimbalAngleQuatCmd_camera_name(msg_); + } + +private: + ::airsim_interfaces::msg::GimbalAngleQuatCmd msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::msg::GimbalAngleQuatCmd>() +{ + return airsim_interfaces::msg::builder::Init_GimbalAngleQuatCmd_header(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.c new file mode 100644 index 0000000000..2a2b7d19c8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.c @@ -0,0 +1,173 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h" + +#include +#include +#include +#include + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/detail/header__functions.h" +// Member `camera_name` +// Member `vehicle_name` +#include "rosidl_runtime_c/string_functions.h" +// Member `orientation` +#include "geometry_msgs/msg/detail/quaternion__functions.h" + +bool +airsim_interfaces__msg__GimbalAngleQuatCmd__init(airsim_interfaces__msg__GimbalAngleQuatCmd * msg) +{ + if (!msg) { + return false; + } + // header + if (!std_msgs__msg__Header__init(&msg->header)) { + airsim_interfaces__msg__GimbalAngleQuatCmd__fini(msg); + return false; + } + // camera_name + if (!rosidl_runtime_c__String__init(&msg->camera_name)) { + airsim_interfaces__msg__GimbalAngleQuatCmd__fini(msg); + return false; + } + // vehicle_name + if (!rosidl_runtime_c__String__init(&msg->vehicle_name)) { + airsim_interfaces__msg__GimbalAngleQuatCmd__fini(msg); + return false; + } + // orientation + if (!geometry_msgs__msg__Quaternion__init(&msg->orientation)) { + airsim_interfaces__msg__GimbalAngleQuatCmd__fini(msg); + return false; + } + return true; +} + +void +airsim_interfaces__msg__GimbalAngleQuatCmd__fini(airsim_interfaces__msg__GimbalAngleQuatCmd * msg) +{ + if (!msg) { + return; + } + // header + std_msgs__msg__Header__fini(&msg->header); + // camera_name + rosidl_runtime_c__String__fini(&msg->camera_name); + // vehicle_name + rosidl_runtime_c__String__fini(&msg->vehicle_name); + // orientation + geometry_msgs__msg__Quaternion__fini(&msg->orientation); +} + +airsim_interfaces__msg__GimbalAngleQuatCmd * +airsim_interfaces__msg__GimbalAngleQuatCmd__create() +{ + airsim_interfaces__msg__GimbalAngleQuatCmd * msg = (airsim_interfaces__msg__GimbalAngleQuatCmd *)malloc(sizeof(airsim_interfaces__msg__GimbalAngleQuatCmd)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__msg__GimbalAngleQuatCmd)); + bool success = airsim_interfaces__msg__GimbalAngleQuatCmd__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__msg__GimbalAngleQuatCmd__destroy(airsim_interfaces__msg__GimbalAngleQuatCmd * msg) +{ + if (msg) { + airsim_interfaces__msg__GimbalAngleQuatCmd__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__init(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__msg__GimbalAngleQuatCmd * data = NULL; + if (size) { + data = (airsim_interfaces__msg__GimbalAngleQuatCmd *)calloc(size, sizeof(airsim_interfaces__msg__GimbalAngleQuatCmd)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__msg__GimbalAngleQuatCmd__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__msg__GimbalAngleQuatCmd__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__fini(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__msg__GimbalAngleQuatCmd__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * +airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__create(size_t size) +{ + airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array = (airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence *)malloc(sizeof(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__destroy(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array) +{ + if (array) { + airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h new file mode 100644 index 0000000000..950ac71c3e --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h @@ -0,0 +1,124 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h" + +/// Initialize msg/GimbalAngleQuatCmd message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__msg__GimbalAngleQuatCmd + * )) before or use + * airsim_interfaces__msg__GimbalAngleQuatCmd__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__GimbalAngleQuatCmd__init(airsim_interfaces__msg__GimbalAngleQuatCmd * msg); + +/// Finalize msg/GimbalAngleQuatCmd message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GimbalAngleQuatCmd__fini(airsim_interfaces__msg__GimbalAngleQuatCmd * msg); + +/// Create msg/GimbalAngleQuatCmd message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__msg__GimbalAngleQuatCmd__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__GimbalAngleQuatCmd * +airsim_interfaces__msg__GimbalAngleQuatCmd__create(); + +/// Destroy msg/GimbalAngleQuatCmd message. +/** + * It calls + * airsim_interfaces__msg__GimbalAngleQuatCmd__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GimbalAngleQuatCmd__destroy(airsim_interfaces__msg__GimbalAngleQuatCmd * msg); + + +/// Initialize array of msg/GimbalAngleQuatCmd messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__msg__GimbalAngleQuatCmd__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__init(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array, size_t size); + +/// Finalize array of msg/GimbalAngleQuatCmd messages. +/** + * It calls + * airsim_interfaces__msg__GimbalAngleQuatCmd__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__fini(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array); + +/// Create array of msg/GimbalAngleQuatCmd messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * +airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__create(size_t size); + +/// Destroy array of msg/GimbalAngleQuatCmd messages. +/** + * It calls + * airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__destroy(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..99c77d7a8f --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__msg__GimbalAngleQuatCmd( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__msg__GimbalAngleQuatCmd( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, GimbalAngleQuatCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..32339208da --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::msg::GimbalAngleQuatCmd & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::msg::GimbalAngleQuatCmd & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::msg::GimbalAngleQuatCmd & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_GimbalAngleQuatCmd( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, GimbalAngleQuatCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..88b20e0a4f --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GimbalAngleQuatCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..80c6ad620a --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GimbalAngleQuatCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h new file mode 100644 index 0000000000..b04526a5a1 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h @@ -0,0 +1,52 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.h" +// Member 'camera_name' +// Member 'vehicle_name' +#include "rosidl_runtime_c/string.h" +// Member 'orientation' +#include "geometry_msgs/msg/detail/quaternion__struct.h" + +// Struct defined in msg/GimbalAngleQuatCmd in the package airsim_interfaces. +typedef struct airsim_interfaces__msg__GimbalAngleQuatCmd +{ + std_msgs__msg__Header header; + rosidl_runtime_c__String camera_name; + rosidl_runtime_c__String vehicle_name; + geometry_msgs__msg__Quaternion orientation; +} airsim_interfaces__msg__GimbalAngleQuatCmd; + +// Struct for a sequence of airsim_interfaces__msg__GimbalAngleQuatCmd. +typedef struct airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence +{ + airsim_interfaces__msg__GimbalAngleQuatCmd * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp new file mode 100644 index 0000000000..8655cf4dd1 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp @@ -0,0 +1,179 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__struct.hpp" +// Member 'orientation' +#include "geometry_msgs/msg/detail/quaternion__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__msg__GimbalAngleQuatCmd __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__msg__GimbalAngleQuatCmd __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace msg +{ + +// message struct +template +struct GimbalAngleQuatCmd_ +{ + using Type = GimbalAngleQuatCmd_; + + explicit GimbalAngleQuatCmd_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_init), + orientation(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->camera_name = ""; + this->vehicle_name = ""; + } + } + + explicit GimbalAngleQuatCmd_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_alloc, _init), + camera_name(_alloc), + vehicle_name(_alloc), + orientation(_alloc, _init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->camera_name = ""; + this->vehicle_name = ""; + } + } + + // field types and members + using _header_type = + std_msgs::msg::Header_; + _header_type header; + using _camera_name_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _camera_name_type camera_name; + using _vehicle_name_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _vehicle_name_type vehicle_name; + using _orientation_type = + geometry_msgs::msg::Quaternion_; + _orientation_type orientation; + + // setters for named parameter idiom + Type & set__header( + const std_msgs::msg::Header_ & _arg) + { + this->header = _arg; + return *this; + } + Type & set__camera_name( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->camera_name = _arg; + return *this; + } + Type & set__vehicle_name( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->vehicle_name = _arg; + return *this; + } + Type & set__orientation( + const geometry_msgs::msg::Quaternion_ & _arg) + { + this->orientation = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::msg::GimbalAngleQuatCmd_ *; + using ConstRawPtr = + const airsim_interfaces::msg::GimbalAngleQuatCmd_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__msg__GimbalAngleQuatCmd + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__msg__GimbalAngleQuatCmd + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const GimbalAngleQuatCmd_ & other) const + { + if (this->header != other.header) { + return false; + } + if (this->camera_name != other.camera_name) { + return false; + } + if (this->vehicle_name != other.vehicle_name) { + return false; + } + if (this->orientation != other.orientation) { + return false; + } + return true; + } + bool operator!=(const GimbalAngleQuatCmd_ & other) const + { + return !this->operator==(other); + } +}; // struct GimbalAngleQuatCmd_ + +// alias to use template instance with default allocator +using GimbalAngleQuatCmd = + airsim_interfaces::msg::GimbalAngleQuatCmd_>; + +// constant definitions + +} // namespace msg + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__traits.hpp new file mode 100644 index 0000000000..f825d0e6d8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__traits.hpp @@ -0,0 +1,48 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TRAITS_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TRAITS_HPP_ + +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'header' +#include "std_msgs/msg/detail/header__traits.hpp" +// Member 'orientation' +#include "geometry_msgs/msg/detail/quaternion__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::msg::GimbalAngleQuatCmd"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/msg/GimbalAngleQuatCmd"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.c new file mode 100644 index 0000000000..e22b137654 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.c @@ -0,0 +1,143 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h" + + +// Include directives for member types +// Member `header` +#include "std_msgs/msg/header.h" +// Member `header` +#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" +// Member `camera_name` +// Member `vehicle_name` +#include "rosidl_runtime_c/string_functions.h" +// Member `orientation` +#include "geometry_msgs/msg/quaternion.h" +// Member `orientation` +#include "geometry_msgs/msg/detail/quaternion__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__msg__GimbalAngleQuatCmd__init(message_memory); +} + +void GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_fini_function(void * message_memory) +{ + airsim_interfaces__msg__GimbalAngleQuatCmd__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_member_array[4] = { + { + "header", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GimbalAngleQuatCmd, header), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "camera_name", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GimbalAngleQuatCmd, camera_name), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "vehicle_name", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GimbalAngleQuatCmd, vehicle_name), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "orientation", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GimbalAngleQuatCmd, orientation), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_members = { + "airsim_interfaces__msg", // message namespace + "GimbalAngleQuatCmd", // message name + 4, // number of fields + sizeof(airsim_interfaces__msg__GimbalAngleQuatCmd), + GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_member_array, // message members + GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_init_function, // function to initialize message memory (memory has to be allocated) + GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_type_support_handle = { + 0, + &GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GimbalAngleQuatCmd)() { + GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); + GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_member_array[3].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, Quaternion)(); + if (!GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_type_support_handle.typesupport_identifier) { + GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.cpp new file mode 100644 index 0000000000..5984817b0f --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.cpp @@ -0,0 +1,152 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void GimbalAngleQuatCmd_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::msg::GimbalAngleQuatCmd(_init); +} + +void GimbalAngleQuatCmd_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~GimbalAngleQuatCmd(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember GimbalAngleQuatCmd_message_member_array[4] = { + { + "header", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GimbalAngleQuatCmd, header), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "camera_name", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GimbalAngleQuatCmd, camera_name), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "vehicle_name", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GimbalAngleQuatCmd, vehicle_name), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "orientation", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GimbalAngleQuatCmd, orientation), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers GimbalAngleQuatCmd_message_members = { + "airsim_interfaces::msg", // message namespace + "GimbalAngleQuatCmd", // message name + 4, // number of fields + sizeof(airsim_interfaces::msg::GimbalAngleQuatCmd), + GimbalAngleQuatCmd_message_member_array, // message members + GimbalAngleQuatCmd_init_function, // function to initialize message memory (memory has to be allocated) + GimbalAngleQuatCmd_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t GimbalAngleQuatCmd_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &GimbalAngleQuatCmd_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GimbalAngleQuatCmd_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GimbalAngleQuatCmd)() { + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GimbalAngleQuatCmd_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.h new file mode 100644 index 0000000000..1645ed657f --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + msg, + GimbalAngleQuatCmd +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__builder.hpp new file mode 100644 index 0000000000..276b0521c5 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__builder.hpp @@ -0,0 +1,103 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__BUILDER_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__BUILDER_HPP_ + +#include "airsim_interfaces/msg/detail/gps_yaw__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace builder +{ + +class Init_GPSYaw_yaw +{ +public: + explicit Init_GPSYaw_yaw(::airsim_interfaces::msg::GPSYaw & msg) + : msg_(msg) + {} + ::airsim_interfaces::msg::GPSYaw yaw(::airsim_interfaces::msg::GPSYaw::_yaw_type arg) + { + msg_.yaw = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::msg::GPSYaw msg_; +}; + +class Init_GPSYaw_altitude +{ +public: + explicit Init_GPSYaw_altitude(::airsim_interfaces::msg::GPSYaw & msg) + : msg_(msg) + {} + Init_GPSYaw_yaw altitude(::airsim_interfaces::msg::GPSYaw::_altitude_type arg) + { + msg_.altitude = std::move(arg); + return Init_GPSYaw_yaw(msg_); + } + +private: + ::airsim_interfaces::msg::GPSYaw msg_; +}; + +class Init_GPSYaw_longitude +{ +public: + explicit Init_GPSYaw_longitude(::airsim_interfaces::msg::GPSYaw & msg) + : msg_(msg) + {} + Init_GPSYaw_altitude longitude(::airsim_interfaces::msg::GPSYaw::_longitude_type arg) + { + msg_.longitude = std::move(arg); + return Init_GPSYaw_altitude(msg_); + } + +private: + ::airsim_interfaces::msg::GPSYaw msg_; +}; + +class Init_GPSYaw_latitude +{ +public: + Init_GPSYaw_latitude() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_GPSYaw_longitude latitude(::airsim_interfaces::msg::GPSYaw::_latitude_type arg) + { + msg_.latitude = std::move(arg); + return Init_GPSYaw_longitude(msg_); + } + +private: + ::airsim_interfaces::msg::GPSYaw msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::msg::GPSYaw>() +{ + return airsim_interfaces::msg::builder::Init_GPSYaw_latitude(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.c new file mode 100644 index 0000000000..caf7bd73fd --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.c @@ -0,0 +1,144 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/msg/detail/gps_yaw__functions.h" + +#include +#include +#include +#include + + +bool +airsim_interfaces__msg__GPSYaw__init(airsim_interfaces__msg__GPSYaw * msg) +{ + if (!msg) { + return false; + } + // latitude + // longitude + // altitude + // yaw + return true; +} + +void +airsim_interfaces__msg__GPSYaw__fini(airsim_interfaces__msg__GPSYaw * msg) +{ + if (!msg) { + return; + } + // latitude + // longitude + // altitude + // yaw +} + +airsim_interfaces__msg__GPSYaw * +airsim_interfaces__msg__GPSYaw__create() +{ + airsim_interfaces__msg__GPSYaw * msg = (airsim_interfaces__msg__GPSYaw *)malloc(sizeof(airsim_interfaces__msg__GPSYaw)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__msg__GPSYaw)); + bool success = airsim_interfaces__msg__GPSYaw__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__msg__GPSYaw__destroy(airsim_interfaces__msg__GPSYaw * msg) +{ + if (msg) { + airsim_interfaces__msg__GPSYaw__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__msg__GPSYaw__Sequence__init(airsim_interfaces__msg__GPSYaw__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__msg__GPSYaw * data = NULL; + if (size) { + data = (airsim_interfaces__msg__GPSYaw *)calloc(size, sizeof(airsim_interfaces__msg__GPSYaw)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__msg__GPSYaw__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__msg__GPSYaw__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__msg__GPSYaw__Sequence__fini(airsim_interfaces__msg__GPSYaw__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__msg__GPSYaw__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__msg__GPSYaw__Sequence * +airsim_interfaces__msg__GPSYaw__Sequence__create(size_t size) +{ + airsim_interfaces__msg__GPSYaw__Sequence * array = (airsim_interfaces__msg__GPSYaw__Sequence *)malloc(sizeof(airsim_interfaces__msg__GPSYaw__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__msg__GPSYaw__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__msg__GPSYaw__Sequence__destroy(airsim_interfaces__msg__GPSYaw__Sequence * array) +{ + if (array) { + airsim_interfaces__msg__GPSYaw__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.h new file mode 100644 index 0000000000..a607f0027c --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.h @@ -0,0 +1,124 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/msg/detail/gps_yaw__struct.h" + +/// Initialize msg/GPSYaw message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__msg__GPSYaw + * )) before or use + * airsim_interfaces__msg__GPSYaw__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__GPSYaw__init(airsim_interfaces__msg__GPSYaw * msg); + +/// Finalize msg/GPSYaw message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GPSYaw__fini(airsim_interfaces__msg__GPSYaw * msg); + +/// Create msg/GPSYaw message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__msg__GPSYaw__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__GPSYaw * +airsim_interfaces__msg__GPSYaw__create(); + +/// Destroy msg/GPSYaw message. +/** + * It calls + * airsim_interfaces__msg__GPSYaw__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GPSYaw__destroy(airsim_interfaces__msg__GPSYaw * msg); + + +/// Initialize array of msg/GPSYaw messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__msg__GPSYaw__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__GPSYaw__Sequence__init(airsim_interfaces__msg__GPSYaw__Sequence * array, size_t size); + +/// Finalize array of msg/GPSYaw messages. +/** + * It calls + * airsim_interfaces__msg__GPSYaw__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GPSYaw__Sequence__fini(airsim_interfaces__msg__GPSYaw__Sequence * array); + +/// Create array of msg/GPSYaw messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__msg__GPSYaw__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__GPSYaw__Sequence * +airsim_interfaces__msg__GPSYaw__Sequence__create(size_t size); + +/// Destroy array of msg/GPSYaw messages. +/** + * It calls + * airsim_interfaces__msg__GPSYaw__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__GPSYaw__Sequence__destroy(airsim_interfaces__msg__GPSYaw__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..9d4eb445bd --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__msg__GPSYaw( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__msg__GPSYaw( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, GPSYaw)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..11b5ba132d --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/msg/detail/gps_yaw__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::msg::GPSYaw & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::msg::GPSYaw & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::msg::GPSYaw & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_GPSYaw( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, GPSYaw)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..6cb069a32b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GPSYaw)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..2da98914eb --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GPSYaw)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.h new file mode 100644 index 0000000000..d40b2b66b2 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.h @@ -0,0 +1,43 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/GPSYaw in the package airsim_interfaces. +typedef struct airsim_interfaces__msg__GPSYaw +{ + double latitude; + double longitude; + double altitude; + double yaw; +} airsim_interfaces__msg__GPSYaw; + +// Struct for a sequence of airsim_interfaces__msg__GPSYaw. +typedef struct airsim_interfaces__msg__GPSYaw__Sequence +{ + airsim_interfaces__msg__GPSYaw * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__msg__GPSYaw__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.hpp new file mode 100644 index 0000000000..66b477965d --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.hpp @@ -0,0 +1,172 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__msg__GPSYaw __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__msg__GPSYaw __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace msg +{ + +// message struct +template +struct GPSYaw_ +{ + using Type = GPSYaw_; + + explicit GPSYaw_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->latitude = 0.0; + this->longitude = 0.0; + this->altitude = 0.0; + this->yaw = 0.0; + } + } + + explicit GPSYaw_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->latitude = 0.0; + this->longitude = 0.0; + this->altitude = 0.0; + this->yaw = 0.0; + } + } + + // field types and members + using _latitude_type = + double; + _latitude_type latitude; + using _longitude_type = + double; + _longitude_type longitude; + using _altitude_type = + double; + _altitude_type altitude; + using _yaw_type = + double; + _yaw_type yaw; + + // setters for named parameter idiom + Type & set__latitude( + const double & _arg) + { + this->latitude = _arg; + return *this; + } + Type & set__longitude( + const double & _arg) + { + this->longitude = _arg; + return *this; + } + Type & set__altitude( + const double & _arg) + { + this->altitude = _arg; + return *this; + } + Type & set__yaw( + const double & _arg) + { + this->yaw = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::msg::GPSYaw_ *; + using ConstRawPtr = + const airsim_interfaces::msg::GPSYaw_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__msg__GPSYaw + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__msg__GPSYaw + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const GPSYaw_ & other) const + { + if (this->latitude != other.latitude) { + return false; + } + if (this->longitude != other.longitude) { + return false; + } + if (this->altitude != other.altitude) { + return false; + } + if (this->yaw != other.yaw) { + return false; + } + return true; + } + bool operator!=(const GPSYaw_ & other) const + { + return !this->operator==(other); + } +}; // struct GPSYaw_ + +// alias to use template instance with default allocator +using GPSYaw = + airsim_interfaces::msg::GPSYaw_>; + +// constant definitions + +} // namespace msg + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__traits.hpp new file mode 100644 index 0000000000..8891d0ca6e --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TRAITS_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TRAITS_HPP_ + +#include "airsim_interfaces/msg/detail/gps_yaw__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::msg::GPSYaw"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/msg/GPSYaw"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.c new file mode 100644 index 0000000000..2da1dfac0f --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.c @@ -0,0 +1,126 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/msg/detail/gps_yaw__functions.h" +#include "airsim_interfaces/msg/detail/gps_yaw__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__msg__GPSYaw__init(message_memory); +} + +void GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_fini_function(void * message_memory) +{ + airsim_interfaces__msg__GPSYaw__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_member_array[4] = { + { + "latitude", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GPSYaw, latitude), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "longitude", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GPSYaw, longitude), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "altitude", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GPSYaw, altitude), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "yaw", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__GPSYaw, yaw), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_members = { + "airsim_interfaces__msg", // message namespace + "GPSYaw", // message name + 4, // number of fields + sizeof(airsim_interfaces__msg__GPSYaw), + GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_member_array, // message members + GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_init_function, // function to initialize message memory (memory has to be allocated) + GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_type_support_handle = { + 0, + &GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GPSYaw)() { + if (!GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_type_support_handle.typesupport_identifier) { + GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.cpp new file mode 100644 index 0000000000..86d0dccd9c --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.cpp @@ -0,0 +1,152 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/detail/gps_yaw__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void GPSYaw_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::msg::GPSYaw(_init); +} + +void GPSYaw_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~GPSYaw(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember GPSYaw_message_member_array[4] = { + { + "latitude", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GPSYaw, latitude), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "longitude", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GPSYaw, longitude), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "altitude", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GPSYaw, altitude), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "yaw", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::GPSYaw, yaw), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers GPSYaw_message_members = { + "airsim_interfaces::msg", // message namespace + "GPSYaw", // message name + 4, // number of fields + sizeof(airsim_interfaces::msg::GPSYaw), + GPSYaw_message_member_array, // message members + GPSYaw_init_function, // function to initialize message memory (memory has to be allocated) + GPSYaw_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t GPSYaw_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &GPSYaw_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GPSYaw_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GPSYaw)() { + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GPSYaw_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.h new file mode 100644 index 0000000000..09b564ce73 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + msg, + GPSYaw +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__builder.hpp new file mode 100644 index 0000000000..c367e6050e --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__builder.hpp @@ -0,0 +1,55 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__BUILDER_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__BUILDER_HPP_ + +#include "airsim_interfaces/msg/detail/vel_cmd__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace builder +{ + +class Init_VelCmd_twist +{ +public: + Init_VelCmd_twist() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::airsim_interfaces::msg::VelCmd twist(::airsim_interfaces::msg::VelCmd::_twist_type arg) + { + msg_.twist = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::msg::VelCmd msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::msg::VelCmd>() +{ + return airsim_interfaces::msg::builder::Init_VelCmd_twist(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.c new file mode 100644 index 0000000000..0158328c68 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.c @@ -0,0 +1,147 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/msg/detail/vel_cmd__functions.h" + +#include +#include +#include +#include + + +// Include directives for member types +// Member `twist` +#include "geometry_msgs/msg/detail/twist__functions.h" + +bool +airsim_interfaces__msg__VelCmd__init(airsim_interfaces__msg__VelCmd * msg) +{ + if (!msg) { + return false; + } + // twist + if (!geometry_msgs__msg__Twist__init(&msg->twist)) { + airsim_interfaces__msg__VelCmd__fini(msg); + return false; + } + return true; +} + +void +airsim_interfaces__msg__VelCmd__fini(airsim_interfaces__msg__VelCmd * msg) +{ + if (!msg) { + return; + } + // twist + geometry_msgs__msg__Twist__fini(&msg->twist); +} + +airsim_interfaces__msg__VelCmd * +airsim_interfaces__msg__VelCmd__create() +{ + airsim_interfaces__msg__VelCmd * msg = (airsim_interfaces__msg__VelCmd *)malloc(sizeof(airsim_interfaces__msg__VelCmd)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__msg__VelCmd)); + bool success = airsim_interfaces__msg__VelCmd__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__msg__VelCmd__destroy(airsim_interfaces__msg__VelCmd * msg) +{ + if (msg) { + airsim_interfaces__msg__VelCmd__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__msg__VelCmd__Sequence__init(airsim_interfaces__msg__VelCmd__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__msg__VelCmd * data = NULL; + if (size) { + data = (airsim_interfaces__msg__VelCmd *)calloc(size, sizeof(airsim_interfaces__msg__VelCmd)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__msg__VelCmd__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__msg__VelCmd__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__msg__VelCmd__Sequence__fini(airsim_interfaces__msg__VelCmd__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__msg__VelCmd__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__msg__VelCmd__Sequence * +airsim_interfaces__msg__VelCmd__Sequence__create(size_t size) +{ + airsim_interfaces__msg__VelCmd__Sequence * array = (airsim_interfaces__msg__VelCmd__Sequence *)malloc(sizeof(airsim_interfaces__msg__VelCmd__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__msg__VelCmd__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__msg__VelCmd__Sequence__destroy(airsim_interfaces__msg__VelCmd__Sequence * array) +{ + if (array) { + airsim_interfaces__msg__VelCmd__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.h new file mode 100644 index 0000000000..b39dcc9854 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.h @@ -0,0 +1,124 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/msg/detail/vel_cmd__struct.h" + +/// Initialize msg/VelCmd message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__msg__VelCmd + * )) before or use + * airsim_interfaces__msg__VelCmd__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__VelCmd__init(airsim_interfaces__msg__VelCmd * msg); + +/// Finalize msg/VelCmd message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__VelCmd__fini(airsim_interfaces__msg__VelCmd * msg); + +/// Create msg/VelCmd message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__msg__VelCmd__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__VelCmd * +airsim_interfaces__msg__VelCmd__create(); + +/// Destroy msg/VelCmd message. +/** + * It calls + * airsim_interfaces__msg__VelCmd__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__VelCmd__destroy(airsim_interfaces__msg__VelCmd * msg); + + +/// Initialize array of msg/VelCmd messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__msg__VelCmd__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__VelCmd__Sequence__init(airsim_interfaces__msg__VelCmd__Sequence * array, size_t size); + +/// Finalize array of msg/VelCmd messages. +/** + * It calls + * airsim_interfaces__msg__VelCmd__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__VelCmd__Sequence__fini(airsim_interfaces__msg__VelCmd__Sequence * array); + +/// Create array of msg/VelCmd messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__msg__VelCmd__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__VelCmd__Sequence * +airsim_interfaces__msg__VelCmd__Sequence__create(size_t size); + +/// Destroy array of msg/VelCmd messages. +/** + * It calls + * airsim_interfaces__msg__VelCmd__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__VelCmd__Sequence__destroy(airsim_interfaces__msg__VelCmd__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..c156a7ec84 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__msg__VelCmd( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__msg__VelCmd( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, VelCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..91346836c7 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/msg/detail/vel_cmd__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::msg::VelCmd & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::msg::VelCmd & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::msg::VelCmd & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_VelCmd( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, VelCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..078a6ae8e4 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, VelCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..edaf26ba39 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, VelCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.h new file mode 100644 index 0000000000..b12d25e0ee --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.h @@ -0,0 +1,44 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'twist' +#include "geometry_msgs/msg/detail/twist__struct.h" + +// Struct defined in msg/VelCmd in the package airsim_interfaces. +typedef struct airsim_interfaces__msg__VelCmd +{ + geometry_msgs__msg__Twist twist; +} airsim_interfaces__msg__VelCmd; + +// Struct for a sequence of airsim_interfaces__msg__VelCmd. +typedef struct airsim_interfaces__msg__VelCmd__Sequence +{ + airsim_interfaces__msg__VelCmd * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__msg__VelCmd__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.hpp new file mode 100644 index 0000000000..51a93a516a --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.hpp @@ -0,0 +1,127 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'twist' +#include "geometry_msgs/msg/detail/twist__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__msg__VelCmd __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__msg__VelCmd __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace msg +{ + +// message struct +template +struct VelCmd_ +{ + using Type = VelCmd_; + + explicit VelCmd_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : twist(_init) + { + (void)_init; + } + + explicit VelCmd_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : twist(_alloc, _init) + { + (void)_init; + } + + // field types and members + using _twist_type = + geometry_msgs::msg::Twist_; + _twist_type twist; + + // setters for named parameter idiom + Type & set__twist( + const geometry_msgs::msg::Twist_ & _arg) + { + this->twist = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::msg::VelCmd_ *; + using ConstRawPtr = + const airsim_interfaces::msg::VelCmd_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__msg__VelCmd + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__msg__VelCmd + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const VelCmd_ & other) const + { + if (this->twist != other.twist) { + return false; + } + return true; + } + bool operator!=(const VelCmd_ & other) const + { + return !this->operator==(other); + } +}; // struct VelCmd_ + +// alias to use template instance with default allocator +using VelCmd = + airsim_interfaces::msg::VelCmd_>; + +// constant definitions + +} // namespace msg + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__traits.hpp new file mode 100644 index 0000000000..9401d3ea80 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__traits.hpp @@ -0,0 +1,46 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TRAITS_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TRAITS_HPP_ + +#include "airsim_interfaces/msg/detail/vel_cmd__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'twist' +#include "geometry_msgs/msg/detail/twist__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::msg::VelCmd"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/msg/VelCmd"; +} + +template<> +struct has_fixed_size + : std::integral_constant::value> {}; + +template<> +struct has_bounded_size + : std::integral_constant::value> {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.c new file mode 100644 index 0000000000..90c91f57c3 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.c @@ -0,0 +1,89 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/msg/detail/vel_cmd__functions.h" +#include "airsim_interfaces/msg/detail/vel_cmd__struct.h" + + +// Include directives for member types +// Member `twist` +#include "geometry_msgs/msg/twist.h" +// Member `twist` +#include "geometry_msgs/msg/detail/twist__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void VelCmd__rosidl_typesupport_introspection_c__VelCmd_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__msg__VelCmd__init(message_memory); +} + +void VelCmd__rosidl_typesupport_introspection_c__VelCmd_fini_function(void * message_memory) +{ + airsim_interfaces__msg__VelCmd__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_member_array[1] = { + { + "twist", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__VelCmd, twist), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_members = { + "airsim_interfaces__msg", // message namespace + "VelCmd", // message name + 1, // number of fields + sizeof(airsim_interfaces__msg__VelCmd), + VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_member_array, // message members + VelCmd__rosidl_typesupport_introspection_c__VelCmd_init_function, // function to initialize message memory (memory has to be allocated) + VelCmd__rosidl_typesupport_introspection_c__VelCmd_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_type_support_handle = { + 0, + &VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, VelCmd)() { + VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, Twist)(); + if (!VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_type_support_handle.typesupport_identifier) { + VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.cpp new file mode 100644 index 0000000000..fa4c70dfdf --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.cpp @@ -0,0 +1,107 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/detail/vel_cmd__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void VelCmd_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::msg::VelCmd(_init); +} + +void VelCmd_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~VelCmd(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember VelCmd_message_member_array[1] = { + { + "twist", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::VelCmd, twist), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers VelCmd_message_members = { + "airsim_interfaces::msg", // message namespace + "VelCmd", // message name + 1, // number of fields + sizeof(airsim_interfaces::msg::VelCmd), + VelCmd_message_member_array, // message members + VelCmd_init_function, // function to initialize message memory (memory has to be allocated) + VelCmd_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t VelCmd_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &VelCmd_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::VelCmd_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, VelCmd)() { + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::VelCmd_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.h new file mode 100644 index 0000000000..b4d0ca39d8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + msg, + VelCmd +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__builder.hpp new file mode 100644 index 0000000000..14ddb6fb2b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__builder.hpp @@ -0,0 +1,71 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__BUILDER_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__BUILDER_HPP_ + +#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace builder +{ + +class Init_VelCmdGroup_vehicle_names +{ +public: + explicit Init_VelCmdGroup_vehicle_names(::airsim_interfaces::msg::VelCmdGroup & msg) + : msg_(msg) + {} + ::airsim_interfaces::msg::VelCmdGroup vehicle_names(::airsim_interfaces::msg::VelCmdGroup::_vehicle_names_type arg) + { + msg_.vehicle_names = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::msg::VelCmdGroup msg_; +}; + +class Init_VelCmdGroup_twist +{ +public: + Init_VelCmdGroup_twist() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_VelCmdGroup_vehicle_names twist(::airsim_interfaces::msg::VelCmdGroup::_twist_type arg) + { + msg_.twist = std::move(arg); + return Init_VelCmdGroup_vehicle_names(msg_); + } + +private: + ::airsim_interfaces::msg::VelCmdGroup msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::msg::VelCmdGroup>() +{ + return airsim_interfaces::msg::builder::Init_VelCmdGroup_twist(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.c new file mode 100644 index 0000000000..51267badf5 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.c @@ -0,0 +1,156 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/msg/detail/vel_cmd_group__functions.h" + +#include +#include +#include +#include + + +// Include directives for member types +// Member `twist` +#include "geometry_msgs/msg/detail/twist__functions.h" +// Member `vehicle_names` +#include "rosidl_runtime_c/string_functions.h" + +bool +airsim_interfaces__msg__VelCmdGroup__init(airsim_interfaces__msg__VelCmdGroup * msg) +{ + if (!msg) { + return false; + } + // twist + if (!geometry_msgs__msg__Twist__init(&msg->twist)) { + airsim_interfaces__msg__VelCmdGroup__fini(msg); + return false; + } + // vehicle_names + if (!rosidl_runtime_c__String__Sequence__init(&msg->vehicle_names, 0)) { + airsim_interfaces__msg__VelCmdGroup__fini(msg); + return false; + } + return true; +} + +void +airsim_interfaces__msg__VelCmdGroup__fini(airsim_interfaces__msg__VelCmdGroup * msg) +{ + if (!msg) { + return; + } + // twist + geometry_msgs__msg__Twist__fini(&msg->twist); + // vehicle_names + rosidl_runtime_c__String__Sequence__fini(&msg->vehicle_names); +} + +airsim_interfaces__msg__VelCmdGroup * +airsim_interfaces__msg__VelCmdGroup__create() +{ + airsim_interfaces__msg__VelCmdGroup * msg = (airsim_interfaces__msg__VelCmdGroup *)malloc(sizeof(airsim_interfaces__msg__VelCmdGroup)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__msg__VelCmdGroup)); + bool success = airsim_interfaces__msg__VelCmdGroup__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__msg__VelCmdGroup__destroy(airsim_interfaces__msg__VelCmdGroup * msg) +{ + if (msg) { + airsim_interfaces__msg__VelCmdGroup__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__msg__VelCmdGroup__Sequence__init(airsim_interfaces__msg__VelCmdGroup__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__msg__VelCmdGroup * data = NULL; + if (size) { + data = (airsim_interfaces__msg__VelCmdGroup *)calloc(size, sizeof(airsim_interfaces__msg__VelCmdGroup)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__msg__VelCmdGroup__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__msg__VelCmdGroup__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__msg__VelCmdGroup__Sequence__fini(airsim_interfaces__msg__VelCmdGroup__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__msg__VelCmdGroup__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__msg__VelCmdGroup__Sequence * +airsim_interfaces__msg__VelCmdGroup__Sequence__create(size_t size) +{ + airsim_interfaces__msg__VelCmdGroup__Sequence * array = (airsim_interfaces__msg__VelCmdGroup__Sequence *)malloc(sizeof(airsim_interfaces__msg__VelCmdGroup__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__msg__VelCmdGroup__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__msg__VelCmdGroup__Sequence__destroy(airsim_interfaces__msg__VelCmdGroup__Sequence * array) +{ + if (array) { + airsim_interfaces__msg__VelCmdGroup__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.h new file mode 100644 index 0000000000..a874d3eb79 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.h @@ -0,0 +1,124 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.h" + +/// Initialize msg/VelCmdGroup message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__msg__VelCmdGroup + * )) before or use + * airsim_interfaces__msg__VelCmdGroup__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__VelCmdGroup__init(airsim_interfaces__msg__VelCmdGroup * msg); + +/// Finalize msg/VelCmdGroup message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__VelCmdGroup__fini(airsim_interfaces__msg__VelCmdGroup * msg); + +/// Create msg/VelCmdGroup message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__msg__VelCmdGroup__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__VelCmdGroup * +airsim_interfaces__msg__VelCmdGroup__create(); + +/// Destroy msg/VelCmdGroup message. +/** + * It calls + * airsim_interfaces__msg__VelCmdGroup__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__VelCmdGroup__destroy(airsim_interfaces__msg__VelCmdGroup * msg); + + +/// Initialize array of msg/VelCmdGroup messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__msg__VelCmdGroup__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__msg__VelCmdGroup__Sequence__init(airsim_interfaces__msg__VelCmdGroup__Sequence * array, size_t size); + +/// Finalize array of msg/VelCmdGroup messages. +/** + * It calls + * airsim_interfaces__msg__VelCmdGroup__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__VelCmdGroup__Sequence__fini(airsim_interfaces__msg__VelCmdGroup__Sequence * array); + +/// Create array of msg/VelCmdGroup messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__msg__VelCmdGroup__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__msg__VelCmdGroup__Sequence * +airsim_interfaces__msg__VelCmdGroup__Sequence__create(size_t size); + +/// Destroy array of msg/VelCmdGroup messages. +/** + * It calls + * airsim_interfaces__msg__VelCmdGroup__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__msg__VelCmdGroup__Sequence__destroy(airsim_interfaces__msg__VelCmdGroup__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..1660fd59ed --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__msg__VelCmdGroup( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__msg__VelCmdGroup( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, VelCmdGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..1847430802 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::msg::VelCmdGroup & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::msg::VelCmdGroup & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::msg::VelCmdGroup & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_VelCmdGroup( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, VelCmdGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..9fbe730cb6 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, VelCmdGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..5eb22a70b1 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, VelCmdGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.h new file mode 100644 index 0000000000..b332605f74 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.h @@ -0,0 +1,47 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'twist' +#include "geometry_msgs/msg/detail/twist__struct.h" +// Member 'vehicle_names' +#include "rosidl_runtime_c/string.h" + +// Struct defined in msg/VelCmdGroup in the package airsim_interfaces. +typedef struct airsim_interfaces__msg__VelCmdGroup +{ + geometry_msgs__msg__Twist twist; + rosidl_runtime_c__String__Sequence vehicle_names; +} airsim_interfaces__msg__VelCmdGroup; + +// Struct for a sequence of airsim_interfaces__msg__VelCmdGroup. +typedef struct airsim_interfaces__msg__VelCmdGroup__Sequence +{ + airsim_interfaces__msg__VelCmdGroup * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__msg__VelCmdGroup__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp new file mode 100644 index 0000000000..613a3682f4 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp @@ -0,0 +1,139 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'twist' +#include "geometry_msgs/msg/detail/twist__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__msg__VelCmdGroup __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__msg__VelCmdGroup __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace msg +{ + +// message struct +template +struct VelCmdGroup_ +{ + using Type = VelCmdGroup_; + + explicit VelCmdGroup_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : twist(_init) + { + (void)_init; + } + + explicit VelCmdGroup_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : twist(_alloc, _init) + { + (void)_init; + } + + // field types and members + using _twist_type = + geometry_msgs::msg::Twist_; + _twist_type twist; + using _vehicle_names_type = + std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other>; + _vehicle_names_type vehicle_names; + + // setters for named parameter idiom + Type & set__twist( + const geometry_msgs::msg::Twist_ & _arg) + { + this->twist = _arg; + return *this; + } + Type & set__vehicle_names( + const std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other> & _arg) + { + this->vehicle_names = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::msg::VelCmdGroup_ *; + using ConstRawPtr = + const airsim_interfaces::msg::VelCmdGroup_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__msg__VelCmdGroup + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__msg__VelCmdGroup + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const VelCmdGroup_ & other) const + { + if (this->twist != other.twist) { + return false; + } + if (this->vehicle_names != other.vehicle_names) { + return false; + } + return true; + } + bool operator!=(const VelCmdGroup_ & other) const + { + return !this->operator==(other); + } +}; // struct VelCmdGroup_ + +// alias to use template instance with default allocator +using VelCmdGroup = + airsim_interfaces::msg::VelCmdGroup_>; + +// constant definitions + +} // namespace msg + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__traits.hpp new file mode 100644 index 0000000000..48bee2e366 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__traits.hpp @@ -0,0 +1,46 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TRAITS_HPP_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TRAITS_HPP_ + +#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'twist' +#include "geometry_msgs/msg/detail/twist__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::msg::VelCmdGroup"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/msg/VelCmdGroup"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.c new file mode 100644 index 0000000000..ac34b5f27d --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.c @@ -0,0 +1,106 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/msg/detail/vel_cmd_group__functions.h" +#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.h" + + +// Include directives for member types +// Member `twist` +#include "geometry_msgs/msg/twist.h" +// Member `twist` +#include "geometry_msgs/msg/detail/twist__rosidl_typesupport_introspection_c.h" +// Member `vehicle_names` +#include "rosidl_runtime_c/string_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__msg__VelCmdGroup__init(message_memory); +} + +void VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_fini_function(void * message_memory) +{ + airsim_interfaces__msg__VelCmdGroup__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_member_array[2] = { + { + "twist", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__VelCmdGroup, twist), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "vehicle_names", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__msg__VelCmdGroup, vehicle_names), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_members = { + "airsim_interfaces__msg", // message namespace + "VelCmdGroup", // message name + 2, // number of fields + sizeof(airsim_interfaces__msg__VelCmdGroup), + VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_member_array, // message members + VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_init_function, // function to initialize message memory (memory has to be allocated) + VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_type_support_handle = { + 0, + &VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, VelCmdGroup)() { + VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, Twist)(); + if (!VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_type_support_handle.typesupport_identifier) { + VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.cpp new file mode 100644 index 0000000000..addf4009d0 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.cpp @@ -0,0 +1,149 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void VelCmdGroup_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::msg::VelCmdGroup(_init); +} + +void VelCmdGroup_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~VelCmdGroup(); +} + +size_t size_function__VelCmdGroup__vehicle_names(const void * untyped_member) +{ + const auto * member = reinterpret_cast *>(untyped_member); + return member->size(); +} + +const void * get_const_function__VelCmdGroup__vehicle_names(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__VelCmdGroup__vehicle_names(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void resize_function__VelCmdGroup__vehicle_names(void * untyped_member, size_t size) +{ + auto * member = + reinterpret_cast *>(untyped_member); + member->resize(size); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember VelCmdGroup_message_member_array[2] = { + { + "twist", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::VelCmdGroup, twist), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "vehicle_names", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::msg::VelCmdGroup, vehicle_names), // bytes offset in struct + nullptr, // default value + size_function__VelCmdGroup__vehicle_names, // size() function pointer + get_const_function__VelCmdGroup__vehicle_names, // get_const(index) function pointer + get_function__VelCmdGroup__vehicle_names, // get(index) function pointer + resize_function__VelCmdGroup__vehicle_names // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers VelCmdGroup_message_members = { + "airsim_interfaces::msg", // message namespace + "VelCmdGroup", // message name + 2, // number of fields + sizeof(airsim_interfaces::msg::VelCmdGroup), + VelCmdGroup_message_member_array, // message members + VelCmdGroup_init_function, // function to initialize message memory (memory has to be allocated) + VelCmdGroup_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t VelCmdGroup_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &VelCmdGroup_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::VelCmdGroup_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, VelCmdGroup)() { + return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::VelCmdGroup_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.h new file mode 100644 index 0000000000..01c9e2fe57 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + msg, + VelCmdGroup +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.h new file mode 100644 index 0000000000..46301a8ccb --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__ENVIRONMENT_H_ +#define AIRSIM_INTERFACES__MSG__ENVIRONMENT_H_ + +#include "airsim_interfaces/msg/detail/environment__struct.h" +#include "airsim_interfaces/msg/detail/environment__functions.h" +#include "airsim_interfaces/msg/detail/environment__type_support.h" + +#endif // AIRSIM_INTERFACES__MSG__ENVIRONMENT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.hpp new file mode 100644 index 0000000000..0c02d5ea30 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__ENVIRONMENT_HPP_ +#define AIRSIM_INTERFACES__MSG__ENVIRONMENT_HPP_ + +#include "airsim_interfaces/msg/detail/environment__struct.hpp" +#include "airsim_interfaces/msg/detail/environment__builder.hpp" +#include "airsim_interfaces/msg/detail/environment__traits.hpp" + +#endif // AIRSIM_INTERFACES__MSG__ENVIRONMENT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.h new file mode 100644 index 0000000000..cb8acc9621 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_H_ +#define AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_H_ + +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.h" + +#endif // AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.hpp new file mode 100644 index 0000000000..683a6cae19 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_HPP_ +#define AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_HPP_ + +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp" +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__builder.hpp" +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__traits.hpp" + +#endif // AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.h new file mode 100644 index 0000000000..65693ae2a8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_H_ +#define AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_H_ + +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.h" + +#endif // AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.hpp new file mode 100644 index 0000000000..e0fb47d2d1 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_HPP_ +#define AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_HPP_ + +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp" +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__builder.hpp" +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__traits.hpp" + +#endif // AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.h new file mode 100644 index 0000000000..dcd0449ca1 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__GPS_YAW_H_ +#define AIRSIM_INTERFACES__MSG__GPS_YAW_H_ + +#include "airsim_interfaces/msg/detail/gps_yaw__struct.h" +#include "airsim_interfaces/msg/detail/gps_yaw__functions.h" +#include "airsim_interfaces/msg/detail/gps_yaw__type_support.h" + +#endif // AIRSIM_INTERFACES__MSG__GPS_YAW_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.hpp new file mode 100644 index 0000000000..2499d4624c --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__GPS_YAW_HPP_ +#define AIRSIM_INTERFACES__MSG__GPS_YAW_HPP_ + +#include "airsim_interfaces/msg/detail/gps_yaw__struct.hpp" +#include "airsim_interfaces/msg/detail/gps_yaw__builder.hpp" +#include "airsim_interfaces/msg/detail/gps_yaw__traits.hpp" + +#endif // AIRSIM_INTERFACES__MSG__GPS_YAW_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_generator_c__visibility_control.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_generator_c__visibility_control.h new file mode 100644 index 0000000000..6739ec2b15 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_generator_c__visibility_control.h @@ -0,0 +1,42 @@ +// generated from rosidl_generator_c/resource/rosidl_generator_c__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ +#define AIRSIM_INTERFACES__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_GENERATOR_C_EXPORT_airsim_interfaces __attribute__ ((dllexport)) + #define ROSIDL_GENERATOR_C_IMPORT_airsim_interfaces __attribute__ ((dllimport)) + #else + #define ROSIDL_GENERATOR_C_EXPORT_airsim_interfaces __declspec(dllexport) + #define ROSIDL_GENERATOR_C_IMPORT_airsim_interfaces __declspec(dllimport) + #endif + #ifdef ROSIDL_GENERATOR_C_BUILDING_DLL_airsim_interfaces + #define ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces ROSIDL_GENERATOR_C_EXPORT_airsim_interfaces + #else + #define ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces ROSIDL_GENERATOR_C_IMPORT_airsim_interfaces + #endif +#else + #define ROSIDL_GENERATOR_C_EXPORT_airsim_interfaces __attribute__ ((visibility("default"))) + #define ROSIDL_GENERATOR_C_IMPORT_airsim_interfaces + #if __GNUC__ >= 4 + #define ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces __attribute__ ((visibility("default"))) + #else + #define ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces + #endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h new file mode 100644 index 0000000000..81a9eb4c27 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h @@ -0,0 +1,43 @@ +// generated from +// rosidl_typesupport_fastrtps_c/resource/rosidl_typesupport_fastrtps_c__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ +#define AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ + +#if __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_airsim_interfaces __attribute__ ((dllexport)) + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_airsim_interfaces __attribute__ ((dllimport)) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_airsim_interfaces __declspec(dllexport) + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_airsim_interfaces __declspec(dllimport) + #endif + #ifdef ROSIDL_TYPESUPPORT_FASTRTPS_C_BUILDING_DLL_airsim_interfaces + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_airsim_interfaces + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_airsim_interfaces + #endif +#else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_airsim_interfaces __attribute__ ((visibility("default"))) + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_airsim_interfaces + #if __GNUC__ >= 4 + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces __attribute__ ((visibility("default"))) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces + #endif +#endif + +#if __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h new file mode 100644 index 0000000000..1c4f8bf0e9 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h @@ -0,0 +1,43 @@ +// generated from +// rosidl_typesupport_fastrtps_cpp/resource/rosidl_typesupport_fastrtps_cpp__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ +#define AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ + +#if __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_airsim_interfaces __attribute__ ((dllexport)) + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_airsim_interfaces __attribute__ ((dllimport)) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_airsim_interfaces __declspec(dllexport) + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_airsim_interfaces __declspec(dllimport) + #endif + #ifdef ROSIDL_TYPESUPPORT_FASTRTPS_CPP_BUILDING_DLL_airsim_interfaces + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_airsim_interfaces + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_airsim_interfaces + #endif +#else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_airsim_interfaces __attribute__ ((visibility("default"))) + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_airsim_interfaces + #if __GNUC__ >= 4 + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces __attribute__ ((visibility("default"))) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces + #endif +#endif + +#if __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h new file mode 100644 index 0000000000..ea17b8a076 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h @@ -0,0 +1,43 @@ +// generated from +// rosidl_typesupport_introspection_c/resource/rosidl_typesupport_introspection_c__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ +#define AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces __attribute__ ((dllexport)) + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_airsim_interfaces __attribute__ ((dllimport)) + #else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces __declspec(dllexport) + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_airsim_interfaces __declspec(dllimport) + #endif + #ifdef ROSIDL_TYPESUPPORT_INTROSPECTION_C_BUILDING_DLL_airsim_interfaces + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces + #else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_airsim_interfaces + #endif +#else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces __attribute__ ((visibility("default"))) + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_airsim_interfaces + #if __GNUC__ >= 4 + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces __attribute__ ((visibility("default"))) + #else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces + #endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.h new file mode 100644 index 0000000000..2e1309d2f4 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__VEL_CMD_H_ +#define AIRSIM_INTERFACES__MSG__VEL_CMD_H_ + +#include "airsim_interfaces/msg/detail/vel_cmd__struct.h" +#include "airsim_interfaces/msg/detail/vel_cmd__functions.h" +#include "airsim_interfaces/msg/detail/vel_cmd__type_support.h" + +#endif // AIRSIM_INTERFACES__MSG__VEL_CMD_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.hpp new file mode 100644 index 0000000000..a3e0ff0748 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__VEL_CMD_HPP_ +#define AIRSIM_INTERFACES__MSG__VEL_CMD_HPP_ + +#include "airsim_interfaces/msg/detail/vel_cmd__struct.hpp" +#include "airsim_interfaces/msg/detail/vel_cmd__builder.hpp" +#include "airsim_interfaces/msg/detail/vel_cmd__traits.hpp" + +#endif // AIRSIM_INTERFACES__MSG__VEL_CMD_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.h new file mode 100644 index 0000000000..7a02a851de --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_H_ +#define AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_H_ + +#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.h" +#include "airsim_interfaces/msg/detail/vel_cmd_group__functions.h" +#include "airsim_interfaces/msg/detail/vel_cmd_group__type_support.h" + +#endif // AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.hpp new file mode 100644 index 0000000000..9a114c43c7 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_HPP_ +#define AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_HPP_ + +#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp" +#include "airsim_interfaces/msg/detail/vel_cmd_group__builder.hpp" +#include "airsim_interfaces/msg/detail/vel_cmd_group__traits.hpp" + +#endif // AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__builder.hpp new file mode 100644 index 0000000000..7e10946b10 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__builder.hpp @@ -0,0 +1,97 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__BUILDER_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__BUILDER_HPP_ + +#include "airsim_interfaces/srv/detail/land__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_Land_Request_wait_on_last_task +{ +public: + Init_Land_Request_wait_on_last_task() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::airsim_interfaces::srv::Land_Request wait_on_last_task(::airsim_interfaces::srv::Land_Request::_wait_on_last_task_type arg) + { + msg_.wait_on_last_task = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::Land_Request msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::Land_Request>() +{ + return airsim_interfaces::srv::builder::Init_Land_Request_wait_on_last_task(); +} + +} // namespace airsim_interfaces + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_Land_Response_success +{ +public: + Init_Land_Response_success() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::airsim_interfaces::srv::Land_Response success(::airsim_interfaces::srv::Land_Response::_success_type arg) + { + msg_.success = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::Land_Response msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::Land_Response>() +{ + return airsim_interfaces::srv::builder::Init_Land_Response_success(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.c new file mode 100644 index 0000000000..a6d099f567 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.c @@ -0,0 +1,266 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/srv/detail/land__functions.h" + +#include +#include +#include +#include + +bool +airsim_interfaces__srv__Land_Request__init(airsim_interfaces__srv__Land_Request * msg) +{ + if (!msg) { + return false; + } + // wait_on_last_task + return true; +} + +void +airsim_interfaces__srv__Land_Request__fini(airsim_interfaces__srv__Land_Request * msg) +{ + if (!msg) { + return; + } + // wait_on_last_task +} + +airsim_interfaces__srv__Land_Request * +airsim_interfaces__srv__Land_Request__create() +{ + airsim_interfaces__srv__Land_Request * msg = (airsim_interfaces__srv__Land_Request *)malloc(sizeof(airsim_interfaces__srv__Land_Request)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__Land_Request)); + bool success = airsim_interfaces__srv__Land_Request__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__Land_Request__destroy(airsim_interfaces__srv__Land_Request * msg) +{ + if (msg) { + airsim_interfaces__srv__Land_Request__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__Land_Request__Sequence__init(airsim_interfaces__srv__Land_Request__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__Land_Request * data = NULL; + if (size) { + data = (airsim_interfaces__srv__Land_Request *)calloc(size, sizeof(airsim_interfaces__srv__Land_Request)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__Land_Request__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__Land_Request__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__Land_Request__Sequence__fini(airsim_interfaces__srv__Land_Request__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__Land_Request__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__Land_Request__Sequence * +airsim_interfaces__srv__Land_Request__Sequence__create(size_t size) +{ + airsim_interfaces__srv__Land_Request__Sequence * array = (airsim_interfaces__srv__Land_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__Land_Request__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__Land_Request__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__Land_Request__Sequence__destroy(airsim_interfaces__srv__Land_Request__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__Land_Request__Sequence__fini(array); + } + free(array); +} + + +bool +airsim_interfaces__srv__Land_Response__init(airsim_interfaces__srv__Land_Response * msg) +{ + if (!msg) { + return false; + } + // success + return true; +} + +void +airsim_interfaces__srv__Land_Response__fini(airsim_interfaces__srv__Land_Response * msg) +{ + if (!msg) { + return; + } + // success +} + +airsim_interfaces__srv__Land_Response * +airsim_interfaces__srv__Land_Response__create() +{ + airsim_interfaces__srv__Land_Response * msg = (airsim_interfaces__srv__Land_Response *)malloc(sizeof(airsim_interfaces__srv__Land_Response)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__Land_Response)); + bool success = airsim_interfaces__srv__Land_Response__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__Land_Response__destroy(airsim_interfaces__srv__Land_Response * msg) +{ + if (msg) { + airsim_interfaces__srv__Land_Response__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__Land_Response__Sequence__init(airsim_interfaces__srv__Land_Response__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__Land_Response * data = NULL; + if (size) { + data = (airsim_interfaces__srv__Land_Response *)calloc(size, sizeof(airsim_interfaces__srv__Land_Response)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__Land_Response__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__Land_Response__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__Land_Response__Sequence__fini(airsim_interfaces__srv__Land_Response__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__Land_Response__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__Land_Response__Sequence * +airsim_interfaces__srv__Land_Response__Sequence__create(size_t size) +{ + airsim_interfaces__srv__Land_Response__Sequence * array = (airsim_interfaces__srv__Land_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__Land_Response__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__Land_Response__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__Land_Response__Sequence__destroy(airsim_interfaces__srv__Land_Response__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__Land_Response__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.h new file mode 100644 index 0000000000..d6f41984b0 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.h @@ -0,0 +1,223 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/srv/detail/land__struct.h" + +/// Initialize srv/Land message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__Land_Request + * )) before or use + * airsim_interfaces__srv__Land_Request__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Land_Request__init(airsim_interfaces__srv__Land_Request * msg); + +/// Finalize srv/Land message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Land_Request__fini(airsim_interfaces__srv__Land_Request * msg); + +/// Create srv/Land message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__Land_Request__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Land_Request * +airsim_interfaces__srv__Land_Request__create(); + +/// Destroy srv/Land message. +/** + * It calls + * airsim_interfaces__srv__Land_Request__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Land_Request__destroy(airsim_interfaces__srv__Land_Request * msg); + + +/// Initialize array of srv/Land messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__Land_Request__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Land_Request__Sequence__init(airsim_interfaces__srv__Land_Request__Sequence * array, size_t size); + +/// Finalize array of srv/Land messages. +/** + * It calls + * airsim_interfaces__srv__Land_Request__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Land_Request__Sequence__fini(airsim_interfaces__srv__Land_Request__Sequence * array); + +/// Create array of srv/Land messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__Land_Request__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Land_Request__Sequence * +airsim_interfaces__srv__Land_Request__Sequence__create(size_t size); + +/// Destroy array of srv/Land messages. +/** + * It calls + * airsim_interfaces__srv__Land_Request__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Land_Request__Sequence__destroy(airsim_interfaces__srv__Land_Request__Sequence * array); + +/// Initialize srv/Land message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__Land_Response + * )) before or use + * airsim_interfaces__srv__Land_Response__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Land_Response__init(airsim_interfaces__srv__Land_Response * msg); + +/// Finalize srv/Land message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Land_Response__fini(airsim_interfaces__srv__Land_Response * msg); + +/// Create srv/Land message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__Land_Response__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Land_Response * +airsim_interfaces__srv__Land_Response__create(); + +/// Destroy srv/Land message. +/** + * It calls + * airsim_interfaces__srv__Land_Response__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Land_Response__destroy(airsim_interfaces__srv__Land_Response * msg); + + +/// Initialize array of srv/Land messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__Land_Response__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Land_Response__Sequence__init(airsim_interfaces__srv__Land_Response__Sequence * array, size_t size); + +/// Finalize array of srv/Land messages. +/** + * It calls + * airsim_interfaces__srv__Land_Response__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Land_Response__Sequence__fini(airsim_interfaces__srv__Land_Response__Sequence * array); + +/// Create array of srv/Land messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__Land_Response__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Land_Response__Sequence * +airsim_interfaces__srv__Land_Response__Sequence__create(size_t size); + +/// Destroy array of srv/Land messages. +/** + * It calls + * airsim_interfaces__srv__Land_Response__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Land_Response__Sequence__destroy(airsim_interfaces__srv__Land_Response__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..37e18d47f0 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,87 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__Land_Request( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__Land_Request( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Land_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__Land_Response( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__Land_Response( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Land_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Land)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..82a3f552a6 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,175 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/srv/detail/land__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::Land_Request & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::Land_Request & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::Land_Request & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_Land_Request( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Land_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/land__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +// already included above +// #include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::Land_Response & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::Land_Response & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::Land_Response & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_Land_Response( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Land_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rmw/types.h" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Land)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..81d4249c0b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h @@ -0,0 +1,47 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Request)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Response)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..da6842412f --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,67 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.h new file mode 100644 index 0000000000..10885e1a32 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.h @@ -0,0 +1,59 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in srv/Land in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__Land_Request +{ + bool wait_on_last_task; +} airsim_interfaces__srv__Land_Request; + +// Struct for a sequence of airsim_interfaces__srv__Land_Request. +typedef struct airsim_interfaces__srv__Land_Request__Sequence +{ + airsim_interfaces__srv__Land_Request * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__Land_Request__Sequence; + + +// Constants defined in the message + +// Struct defined in srv/Land in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__Land_Response +{ + bool success; +} airsim_interfaces__srv__Land_Response; + +// Struct for a sequence of airsim_interfaces__srv__Land_Response. +typedef struct airsim_interfaces__srv__Land_Response__Sequence +{ + airsim_interfaces__srv__Land_Response * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__Land_Response__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.hpp new file mode 100644 index 0000000000..29c5235cd2 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.hpp @@ -0,0 +1,260 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__Land_Request __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__Land_Request __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct Land_Request_ +{ + using Type = Land_Request_; + + explicit Land_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->wait_on_last_task = false; + } + } + + explicit Land_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->wait_on_last_task = false; + } + } + + // field types and members + using _wait_on_last_task_type = + bool; + _wait_on_last_task_type wait_on_last_task; + + // setters for named parameter idiom + Type & set__wait_on_last_task( + const bool & _arg) + { + this->wait_on_last_task = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::Land_Request_ *; + using ConstRawPtr = + const airsim_interfaces::srv::Land_Request_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__Land_Request + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__Land_Request + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Land_Request_ & other) const + { + if (this->wait_on_last_task != other.wait_on_last_task) { + return false; + } + return true; + } + bool operator!=(const Land_Request_ & other) const + { + return !this->operator==(other); + } +}; // struct Land_Request_ + +// alias to use template instance with default allocator +using Land_Request = + airsim_interfaces::srv::Land_Request_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__Land_Response __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__Land_Response __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct Land_Response_ +{ + using Type = Land_Response_; + + explicit Land_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + explicit Land_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + // field types and members + using _success_type = + bool; + _success_type success; + + // setters for named parameter idiom + Type & set__success( + const bool & _arg) + { + this->success = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::Land_Response_ *; + using ConstRawPtr = + const airsim_interfaces::srv::Land_Response_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__Land_Response + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__Land_Response + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Land_Response_ & other) const + { + if (this->success != other.success) { + return false; + } + return true; + } + bool operator!=(const Land_Response_ & other) const + { + return !this->operator==(other); + } +}; // struct Land_Response_ + +// alias to use template instance with default allocator +using Land_Response = + airsim_interfaces::srv::Land_Response_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + +namespace airsim_interfaces +{ + +namespace srv +{ + +struct Land +{ + using Request = airsim_interfaces::srv::Land_Request; + using Response = airsim_interfaces::srv::Land_Response; +}; + +} // namespace srv + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__traits.hpp new file mode 100644 index 0000000000..0da3e5830d --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__traits.hpp @@ -0,0 +1,126 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__TRAITS_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__TRAITS_HPP_ + +#include "airsim_interfaces/srv/detail/land__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::Land_Request"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/Land_Request"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::Land_Response"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/Land_Response"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::Land"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/Land"; +} + +template<> +struct has_fixed_size + : std::integral_constant< + bool, + has_fixed_size::value && + has_fixed_size::value + > +{ +}; + +template<> +struct has_bounded_size + : std::integral_constant< + bool, + has_bounded_size::value && + has_bounded_size::value + > +{ +}; + +template<> +struct is_service + : std::true_type +{ +}; + +template<> +struct is_service_request + : std::true_type +{ +}; + +template<> +struct is_service_response + : std::true_type +{ +}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.c new file mode 100644 index 0000000000..a1e7a5d068 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.c @@ -0,0 +1,224 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/srv/detail/land__functions.h" +#include "airsim_interfaces/srv/detail/land__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Land_Request__rosidl_typesupport_introspection_c__Land_Request_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__Land_Request__init(message_memory); +} + +void Land_Request__rosidl_typesupport_introspection_c__Land_Request_fini_function(void * message_memory) +{ + airsim_interfaces__srv__Land_Request__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_member_array[1] = { + { + "wait_on_last_task", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__Land_Request, wait_on_last_task), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_members = { + "airsim_interfaces__srv", // message namespace + "Land_Request", // message name + 1, // number of fields + sizeof(airsim_interfaces__srv__Land_Request), + Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_member_array, // message members + Land_Request__rosidl_typesupport_introspection_c__Land_Request_init_function, // function to initialize message memory (memory has to be allocated) + Land_Request__rosidl_typesupport_introspection_c__Land_Request_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_type_support_handle = { + 0, + &Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Request)() { + if (!Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_type_support_handle.typesupport_identifier) { + Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "rosidl_typesupport_introspection_c/field_types.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +// already included above +// #include "rosidl_typesupport_introspection_c/message_introspection.h" +// already included above +// #include "airsim_interfaces/srv/detail/land__functions.h" +// already included above +// #include "airsim_interfaces/srv/detail/land__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Land_Response__rosidl_typesupport_introspection_c__Land_Response_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__Land_Response__init(message_memory); +} + +void Land_Response__rosidl_typesupport_introspection_c__Land_Response_fini_function(void * message_memory) +{ + airsim_interfaces__srv__Land_Response__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_member_array[1] = { + { + "success", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__Land_Response, success), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_members = { + "airsim_interfaces__srv", // message namespace + "Land_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces__srv__Land_Response), + Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_member_array, // message members + Land_Response__rosidl_typesupport_introspection_c__Land_Response_init_function, // function to initialize message memory (memory has to be allocated) + Land_Response__rosidl_typesupport_introspection_c__Land_Response_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_type_support_handle = { + 0, + &Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Response)() { + if (!Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_type_support_handle.typesupport_identifier) { + Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/service_introspection.h" + +// this is intentionally not const to allow initialization later to prevent an initialization race +static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_members = { + "airsim_interfaces__srv", // service namespace + "Land", // service name + // these two fields are initialized below on the first access + NULL, // request message + // airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_Request_message_type_support_handle, + NULL // response message + // airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_Response_message_type_support_handle +}; + +static rosidl_service_type_support_t airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_type_support_handle = { + 0, + &airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_members, + get_service_typesupport_handle_function, +}; + +// Forward declaration of request/response type support functions +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Request)(); + +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Response)(); + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land)() { + if (!airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_type_support_handle.typesupport_identifier) { + airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + rosidl_typesupport_introspection_c__ServiceMembers * service_members = + (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_type_support_handle.data; + + if (!service_members->request_members_) { + service_members->request_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Request)()->data; + } + if (!service_members->response_members_) { + service_members->response_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Response)()->data; + } + + return &airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_type_support_handle; +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.cpp new file mode 100644 index 0000000000..ecc6adc5fa --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.cpp @@ -0,0 +1,332 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/srv/detail/land__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Land_Request_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::Land_Request(_init); +} + +void Land_Request_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Land_Request(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Land_Request_message_member_array[1] = { + { + "wait_on_last_task", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::Land_Request, wait_on_last_task), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Land_Request_message_members = { + "airsim_interfaces::srv", // message namespace + "Land_Request", // message name + 1, // number of fields + sizeof(airsim_interfaces::srv::Land_Request), + Land_Request_message_member_array, // message members + Land_Request_init_function, // function to initialize message memory (memory has to be allocated) + Land_Request_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Land_Request_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Land_Request_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Land_Request_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land_Request)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Land_Request_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "array" +// already included above +// #include "cstddef" +// already included above +// #include "string" +// already included above +// #include "vector" +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/srv/detail/land__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Land_Response_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::Land_Response(_init); +} + +void Land_Response_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Land_Response(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Land_Response_message_member_array[1] = { + { + "success", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::Land_Response, success), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Land_Response_message_members = { + "airsim_interfaces::srv", // message namespace + "Land_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces::srv::Land_Response), + Land_Response_message_member_array, // message members + Land_Response_init_function, // function to initialize message memory (memory has to be allocated) + Land_Response_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Land_Response_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Land_Response_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Land_Response_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land_Response)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Land_Response_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/land__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +// this is intentionally not const to allow initialization later to prevent an initialization race +static ::rosidl_typesupport_introspection_cpp::ServiceMembers Land_service_members = { + "airsim_interfaces::srv", // service namespace + "Land", // service name + // these two fields are initialized below on the first access + // see get_service_type_support_handle() + nullptr, // request message + nullptr // response message +}; + +static const rosidl_service_type_support_t Land_service_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Land_service_members, + get_service_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +get_service_type_support_handle() +{ + // get a handle to the value to be returned + auto service_type_support = + &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Land_service_type_support_handle; + // get a non-const and properly typed version of the data void * + auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( + static_cast( + service_type_support->data)); + // make sure that both the request_members_ and the response_members_ are initialized + // if they are not, initialize them + if ( + service_members->request_members_ == nullptr || + service_members->response_members_ == nullptr) + { + // initialize the request_members_ with the static function from the external library + service_members->request_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::Land_Request + >()->data + ); + // initialize the response_members_ with the static function from the external library + service_members->response_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::Land_Response + >()->data + ); + } + // finally return the properly initialized service_type_support handle + return service_type_support; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land)() { + return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.h new file mode 100644 index 0000000000..d66e9b65d2 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.h @@ -0,0 +1,58 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + Land_Request +)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + Land_Response +)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + Land +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__builder.hpp new file mode 100644 index 0000000000..0a2e432b87 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__builder.hpp @@ -0,0 +1,113 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__BUILDER_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__BUILDER_HPP_ + +#include "airsim_interfaces/srv/detail/land_group__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_LandGroup_Request_wait_on_last_task +{ +public: + explicit Init_LandGroup_Request_wait_on_last_task(::airsim_interfaces::srv::LandGroup_Request & msg) + : msg_(msg) + {} + ::airsim_interfaces::srv::LandGroup_Request wait_on_last_task(::airsim_interfaces::srv::LandGroup_Request::_wait_on_last_task_type arg) + { + msg_.wait_on_last_task = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::LandGroup_Request msg_; +}; + +class Init_LandGroup_Request_vehicle_names +{ +public: + Init_LandGroup_Request_vehicle_names() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_LandGroup_Request_wait_on_last_task vehicle_names(::airsim_interfaces::srv::LandGroup_Request::_vehicle_names_type arg) + { + msg_.vehicle_names = std::move(arg); + return Init_LandGroup_Request_wait_on_last_task(msg_); + } + +private: + ::airsim_interfaces::srv::LandGroup_Request msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::LandGroup_Request>() +{ + return airsim_interfaces::srv::builder::Init_LandGroup_Request_vehicle_names(); +} + +} // namespace airsim_interfaces + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_LandGroup_Response_success +{ +public: + Init_LandGroup_Response_success() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::airsim_interfaces::srv::LandGroup_Response success(::airsim_interfaces::srv::LandGroup_Response::_success_type arg) + { + msg_.success = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::LandGroup_Response msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::LandGroup_Response>() +{ + return airsim_interfaces::srv::builder::Init_LandGroup_Response_success(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.c new file mode 100644 index 0000000000..0ff04cf468 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.c @@ -0,0 +1,277 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/srv/detail/land_group__functions.h" + +#include +#include +#include +#include + +// Include directives for member types +// Member `vehicle_names` +#include "rosidl_runtime_c/string_functions.h" + +bool +airsim_interfaces__srv__LandGroup_Request__init(airsim_interfaces__srv__LandGroup_Request * msg) +{ + if (!msg) { + return false; + } + // vehicle_names + if (!rosidl_runtime_c__String__Sequence__init(&msg->vehicle_names, 0)) { + airsim_interfaces__srv__LandGroup_Request__fini(msg); + return false; + } + // wait_on_last_task + return true; +} + +void +airsim_interfaces__srv__LandGroup_Request__fini(airsim_interfaces__srv__LandGroup_Request * msg) +{ + if (!msg) { + return; + } + // vehicle_names + rosidl_runtime_c__String__Sequence__fini(&msg->vehicle_names); + // wait_on_last_task +} + +airsim_interfaces__srv__LandGroup_Request * +airsim_interfaces__srv__LandGroup_Request__create() +{ + airsim_interfaces__srv__LandGroup_Request * msg = (airsim_interfaces__srv__LandGroup_Request *)malloc(sizeof(airsim_interfaces__srv__LandGroup_Request)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__LandGroup_Request)); + bool success = airsim_interfaces__srv__LandGroup_Request__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__LandGroup_Request__destroy(airsim_interfaces__srv__LandGroup_Request * msg) +{ + if (msg) { + airsim_interfaces__srv__LandGroup_Request__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__LandGroup_Request__Sequence__init(airsim_interfaces__srv__LandGroup_Request__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__LandGroup_Request * data = NULL; + if (size) { + data = (airsim_interfaces__srv__LandGroup_Request *)calloc(size, sizeof(airsim_interfaces__srv__LandGroup_Request)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__LandGroup_Request__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__LandGroup_Request__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__LandGroup_Request__Sequence__fini(airsim_interfaces__srv__LandGroup_Request__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__LandGroup_Request__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__LandGroup_Request__Sequence * +airsim_interfaces__srv__LandGroup_Request__Sequence__create(size_t size) +{ + airsim_interfaces__srv__LandGroup_Request__Sequence * array = (airsim_interfaces__srv__LandGroup_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__LandGroup_Request__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__LandGroup_Request__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__LandGroup_Request__Sequence__destroy(airsim_interfaces__srv__LandGroup_Request__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__LandGroup_Request__Sequence__fini(array); + } + free(array); +} + + +bool +airsim_interfaces__srv__LandGroup_Response__init(airsim_interfaces__srv__LandGroup_Response * msg) +{ + if (!msg) { + return false; + } + // success + return true; +} + +void +airsim_interfaces__srv__LandGroup_Response__fini(airsim_interfaces__srv__LandGroup_Response * msg) +{ + if (!msg) { + return; + } + // success +} + +airsim_interfaces__srv__LandGroup_Response * +airsim_interfaces__srv__LandGroup_Response__create() +{ + airsim_interfaces__srv__LandGroup_Response * msg = (airsim_interfaces__srv__LandGroup_Response *)malloc(sizeof(airsim_interfaces__srv__LandGroup_Response)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__LandGroup_Response)); + bool success = airsim_interfaces__srv__LandGroup_Response__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__LandGroup_Response__destroy(airsim_interfaces__srv__LandGroup_Response * msg) +{ + if (msg) { + airsim_interfaces__srv__LandGroup_Response__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__LandGroup_Response__Sequence__init(airsim_interfaces__srv__LandGroup_Response__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__LandGroup_Response * data = NULL; + if (size) { + data = (airsim_interfaces__srv__LandGroup_Response *)calloc(size, sizeof(airsim_interfaces__srv__LandGroup_Response)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__LandGroup_Response__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__LandGroup_Response__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__LandGroup_Response__Sequence__fini(airsim_interfaces__srv__LandGroup_Response__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__LandGroup_Response__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__LandGroup_Response__Sequence * +airsim_interfaces__srv__LandGroup_Response__Sequence__create(size_t size) +{ + airsim_interfaces__srv__LandGroup_Response__Sequence * array = (airsim_interfaces__srv__LandGroup_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__LandGroup_Response__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__LandGroup_Response__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__LandGroup_Response__Sequence__destroy(airsim_interfaces__srv__LandGroup_Response__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__LandGroup_Response__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.h new file mode 100644 index 0000000000..d8f4b2c917 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.h @@ -0,0 +1,223 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/srv/detail/land_group__struct.h" + +/// Initialize srv/LandGroup message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__LandGroup_Request + * )) before or use + * airsim_interfaces__srv__LandGroup_Request__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__LandGroup_Request__init(airsim_interfaces__srv__LandGroup_Request * msg); + +/// Finalize srv/LandGroup message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__LandGroup_Request__fini(airsim_interfaces__srv__LandGroup_Request * msg); + +/// Create srv/LandGroup message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__LandGroup_Request__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__LandGroup_Request * +airsim_interfaces__srv__LandGroup_Request__create(); + +/// Destroy srv/LandGroup message. +/** + * It calls + * airsim_interfaces__srv__LandGroup_Request__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__LandGroup_Request__destroy(airsim_interfaces__srv__LandGroup_Request * msg); + + +/// Initialize array of srv/LandGroup messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__LandGroup_Request__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__LandGroup_Request__Sequence__init(airsim_interfaces__srv__LandGroup_Request__Sequence * array, size_t size); + +/// Finalize array of srv/LandGroup messages. +/** + * It calls + * airsim_interfaces__srv__LandGroup_Request__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__LandGroup_Request__Sequence__fini(airsim_interfaces__srv__LandGroup_Request__Sequence * array); + +/// Create array of srv/LandGroup messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__LandGroup_Request__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__LandGroup_Request__Sequence * +airsim_interfaces__srv__LandGroup_Request__Sequence__create(size_t size); + +/// Destroy array of srv/LandGroup messages. +/** + * It calls + * airsim_interfaces__srv__LandGroup_Request__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__LandGroup_Request__Sequence__destroy(airsim_interfaces__srv__LandGroup_Request__Sequence * array); + +/// Initialize srv/LandGroup message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__LandGroup_Response + * )) before or use + * airsim_interfaces__srv__LandGroup_Response__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__LandGroup_Response__init(airsim_interfaces__srv__LandGroup_Response * msg); + +/// Finalize srv/LandGroup message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__LandGroup_Response__fini(airsim_interfaces__srv__LandGroup_Response * msg); + +/// Create srv/LandGroup message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__LandGroup_Response__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__LandGroup_Response * +airsim_interfaces__srv__LandGroup_Response__create(); + +/// Destroy srv/LandGroup message. +/** + * It calls + * airsim_interfaces__srv__LandGroup_Response__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__LandGroup_Response__destroy(airsim_interfaces__srv__LandGroup_Response * msg); + + +/// Initialize array of srv/LandGroup messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__LandGroup_Response__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__LandGroup_Response__Sequence__init(airsim_interfaces__srv__LandGroup_Response__Sequence * array, size_t size); + +/// Finalize array of srv/LandGroup messages. +/** + * It calls + * airsim_interfaces__srv__LandGroup_Response__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__LandGroup_Response__Sequence__fini(airsim_interfaces__srv__LandGroup_Response__Sequence * array); + +/// Create array of srv/LandGroup messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__LandGroup_Response__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__LandGroup_Response__Sequence * +airsim_interfaces__srv__LandGroup_Response__Sequence__create(size_t size); + +/// Destroy array of srv/LandGroup messages. +/** + * It calls + * airsim_interfaces__srv__LandGroup_Response__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__LandGroup_Response__Sequence__destroy(airsim_interfaces__srv__LandGroup_Response__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..fbf7c6d7f8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,87 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__LandGroup_Request( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__LandGroup_Request( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, LandGroup_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__LandGroup_Response( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__LandGroup_Response( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, LandGroup_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, LandGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..e8b3c8d5e1 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,175 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/srv/detail/land_group__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::LandGroup_Request & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::LandGroup_Request & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::LandGroup_Request & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_LandGroup_Request( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, LandGroup_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/land_group__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +// already included above +// #include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::LandGroup_Response & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::LandGroup_Response & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::LandGroup_Response & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_LandGroup_Response( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, LandGroup_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rmw/types.h" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, LandGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..66b4949eda --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h @@ -0,0 +1,47 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Request)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Response)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..272fa09ea1 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,67 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.h new file mode 100644 index 0000000000..03f3b634db --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.h @@ -0,0 +1,64 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'vehicle_names' +#include "rosidl_runtime_c/string.h" + +// Struct defined in srv/LandGroup in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__LandGroup_Request +{ + rosidl_runtime_c__String__Sequence vehicle_names; + bool wait_on_last_task; +} airsim_interfaces__srv__LandGroup_Request; + +// Struct for a sequence of airsim_interfaces__srv__LandGroup_Request. +typedef struct airsim_interfaces__srv__LandGroup_Request__Sequence +{ + airsim_interfaces__srv__LandGroup_Request * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__LandGroup_Request__Sequence; + + +// Constants defined in the message + +// Struct defined in srv/LandGroup in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__LandGroup_Response +{ + bool success; +} airsim_interfaces__srv__LandGroup_Response; + +// Struct for a sequence of airsim_interfaces__srv__LandGroup_Response. +typedef struct airsim_interfaces__srv__LandGroup_Response__Sequence +{ + airsim_interfaces__srv__LandGroup_Response * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__LandGroup_Response__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.hpp new file mode 100644 index 0000000000..a87062cd8b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.hpp @@ -0,0 +1,272 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__LandGroup_Request __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__LandGroup_Request __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct LandGroup_Request_ +{ + using Type = LandGroup_Request_; + + explicit LandGroup_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->wait_on_last_task = false; + } + } + + explicit LandGroup_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->wait_on_last_task = false; + } + } + + // field types and members + using _vehicle_names_type = + std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other>; + _vehicle_names_type vehicle_names; + using _wait_on_last_task_type = + bool; + _wait_on_last_task_type wait_on_last_task; + + // setters for named parameter idiom + Type & set__vehicle_names( + const std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other> & _arg) + { + this->vehicle_names = _arg; + return *this; + } + Type & set__wait_on_last_task( + const bool & _arg) + { + this->wait_on_last_task = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::LandGroup_Request_ *; + using ConstRawPtr = + const airsim_interfaces::srv::LandGroup_Request_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__LandGroup_Request + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__LandGroup_Request + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const LandGroup_Request_ & other) const + { + if (this->vehicle_names != other.vehicle_names) { + return false; + } + if (this->wait_on_last_task != other.wait_on_last_task) { + return false; + } + return true; + } + bool operator!=(const LandGroup_Request_ & other) const + { + return !this->operator==(other); + } +}; // struct LandGroup_Request_ + +// alias to use template instance with default allocator +using LandGroup_Request = + airsim_interfaces::srv::LandGroup_Request_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__LandGroup_Response __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__LandGroup_Response __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct LandGroup_Response_ +{ + using Type = LandGroup_Response_; + + explicit LandGroup_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + explicit LandGroup_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + // field types and members + using _success_type = + bool; + _success_type success; + + // setters for named parameter idiom + Type & set__success( + const bool & _arg) + { + this->success = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::LandGroup_Response_ *; + using ConstRawPtr = + const airsim_interfaces::srv::LandGroup_Response_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__LandGroup_Response + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__LandGroup_Response + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const LandGroup_Response_ & other) const + { + if (this->success != other.success) { + return false; + } + return true; + } + bool operator!=(const LandGroup_Response_ & other) const + { + return !this->operator==(other); + } +}; // struct LandGroup_Response_ + +// alias to use template instance with default allocator +using LandGroup_Response = + airsim_interfaces::srv::LandGroup_Response_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + +namespace airsim_interfaces +{ + +namespace srv +{ + +struct LandGroup +{ + using Request = airsim_interfaces::srv::LandGroup_Request; + using Response = airsim_interfaces::srv::LandGroup_Response; +}; + +} // namespace srv + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__traits.hpp new file mode 100644 index 0000000000..93d742835b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__traits.hpp @@ -0,0 +1,126 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TRAITS_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TRAITS_HPP_ + +#include "airsim_interfaces/srv/detail/land_group__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::LandGroup_Request"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/LandGroup_Request"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::LandGroup_Response"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/LandGroup_Response"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::LandGroup"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/LandGroup"; +} + +template<> +struct has_fixed_size + : std::integral_constant< + bool, + has_fixed_size::value && + has_fixed_size::value + > +{ +}; + +template<> +struct has_bounded_size + : std::integral_constant< + bool, + has_bounded_size::value && + has_bounded_size::value + > +{ +}; + +template<> +struct is_service + : std::true_type +{ +}; + +template<> +struct is_service_request + : std::true_type +{ +}; + +template<> +struct is_service_response + : std::true_type +{ +}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.c new file mode 100644 index 0000000000..c0b28dfd84 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.c @@ -0,0 +1,243 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/srv/detail/land_group__functions.h" +#include "airsim_interfaces/srv/detail/land_group__struct.h" + + +// Include directives for member types +// Member `vehicle_names` +#include "rosidl_runtime_c/string_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__LandGroup_Request__init(message_memory); +} + +void LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_fini_function(void * message_memory) +{ + airsim_interfaces__srv__LandGroup_Request__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_member_array[2] = { + { + "vehicle_names", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__LandGroup_Request, vehicle_names), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "wait_on_last_task", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__LandGroup_Request, wait_on_last_task), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_members = { + "airsim_interfaces__srv", // message namespace + "LandGroup_Request", // message name + 2, // number of fields + sizeof(airsim_interfaces__srv__LandGroup_Request), + LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_member_array, // message members + LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_init_function, // function to initialize message memory (memory has to be allocated) + LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_type_support_handle = { + 0, + &LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Request)() { + if (!LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_type_support_handle.typesupport_identifier) { + LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "rosidl_typesupport_introspection_c/field_types.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +// already included above +// #include "rosidl_typesupport_introspection_c/message_introspection.h" +// already included above +// #include "airsim_interfaces/srv/detail/land_group__functions.h" +// already included above +// #include "airsim_interfaces/srv/detail/land_group__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__LandGroup_Response__init(message_memory); +} + +void LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_fini_function(void * message_memory) +{ + airsim_interfaces__srv__LandGroup_Response__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_member_array[1] = { + { + "success", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__LandGroup_Response, success), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_members = { + "airsim_interfaces__srv", // message namespace + "LandGroup_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces__srv__LandGroup_Response), + LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_member_array, // message members + LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_init_function, // function to initialize message memory (memory has to be allocated) + LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_type_support_handle = { + 0, + &LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Response)() { + if (!LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_type_support_handle.typesupport_identifier) { + LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/service_introspection.h" + +// this is intentionally not const to allow initialization later to prevent an initialization race +static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_members = { + "airsim_interfaces__srv", // service namespace + "LandGroup", // service name + // these two fields are initialized below on the first access + NULL, // request message + // airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_Request_message_type_support_handle, + NULL // response message + // airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_Response_message_type_support_handle +}; + +static rosidl_service_type_support_t airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_type_support_handle = { + 0, + &airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_members, + get_service_typesupport_handle_function, +}; + +// Forward declaration of request/response type support functions +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Request)(); + +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Response)(); + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup)() { + if (!airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_type_support_handle.typesupport_identifier) { + airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + rosidl_typesupport_introspection_c__ServiceMembers * service_members = + (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_type_support_handle.data; + + if (!service_members->request_members_) { + service_members->request_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Request)()->data; + } + if (!service_members->response_members_) { + service_members->response_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Response)()->data; + } + + return &airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_type_support_handle; +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.cpp new file mode 100644 index 0000000000..43c306b527 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.cpp @@ -0,0 +1,374 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/srv/detail/land_group__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void LandGroup_Request_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::LandGroup_Request(_init); +} + +void LandGroup_Request_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~LandGroup_Request(); +} + +size_t size_function__LandGroup_Request__vehicle_names(const void * untyped_member) +{ + const auto * member = reinterpret_cast *>(untyped_member); + return member->size(); +} + +const void * get_const_function__LandGroup_Request__vehicle_names(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LandGroup_Request__vehicle_names(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void resize_function__LandGroup_Request__vehicle_names(void * untyped_member, size_t size) +{ + auto * member = + reinterpret_cast *>(untyped_member); + member->resize(size); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember LandGroup_Request_message_member_array[2] = { + { + "vehicle_names", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::LandGroup_Request, vehicle_names), // bytes offset in struct + nullptr, // default value + size_function__LandGroup_Request__vehicle_names, // size() function pointer + get_const_function__LandGroup_Request__vehicle_names, // get_const(index) function pointer + get_function__LandGroup_Request__vehicle_names, // get(index) function pointer + resize_function__LandGroup_Request__vehicle_names // resize(index) function pointer + }, + { + "wait_on_last_task", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::LandGroup_Request, wait_on_last_task), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers LandGroup_Request_message_members = { + "airsim_interfaces::srv", // message namespace + "LandGroup_Request", // message name + 2, // number of fields + sizeof(airsim_interfaces::srv::LandGroup_Request), + LandGroup_Request_message_member_array, // message members + LandGroup_Request_init_function, // function to initialize message memory (memory has to be allocated) + LandGroup_Request_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t LandGroup_Request_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &LandGroup_Request_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::LandGroup_Request_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup_Request)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::LandGroup_Request_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "array" +// already included above +// #include "cstddef" +// already included above +// #include "string" +// already included above +// #include "vector" +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/srv/detail/land_group__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void LandGroup_Response_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::LandGroup_Response(_init); +} + +void LandGroup_Response_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~LandGroup_Response(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember LandGroup_Response_message_member_array[1] = { + { + "success", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::LandGroup_Response, success), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers LandGroup_Response_message_members = { + "airsim_interfaces::srv", // message namespace + "LandGroup_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces::srv::LandGroup_Response), + LandGroup_Response_message_member_array, // message members + LandGroup_Response_init_function, // function to initialize message memory (memory has to be allocated) + LandGroup_Response_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t LandGroup_Response_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &LandGroup_Response_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::LandGroup_Response_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup_Response)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::LandGroup_Response_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/land_group__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +// this is intentionally not const to allow initialization later to prevent an initialization race +static ::rosidl_typesupport_introspection_cpp::ServiceMembers LandGroup_service_members = { + "airsim_interfaces::srv", // service namespace + "LandGroup", // service name + // these two fields are initialized below on the first access + // see get_service_type_support_handle() + nullptr, // request message + nullptr // response message +}; + +static const rosidl_service_type_support_t LandGroup_service_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &LandGroup_service_members, + get_service_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +get_service_type_support_handle() +{ + // get a handle to the value to be returned + auto service_type_support = + &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::LandGroup_service_type_support_handle; + // get a non-const and properly typed version of the data void * + auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( + static_cast( + service_type_support->data)); + // make sure that both the request_members_ and the response_members_ are initialized + // if they are not, initialize them + if ( + service_members->request_members_ == nullptr || + service_members->response_members_ == nullptr) + { + // initialize the request_members_ with the static function from the external library + service_members->request_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::LandGroup_Request + >()->data + ); + // initialize the response_members_ with the static function from the external library + service_members->response_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::LandGroup_Response + >()->data + ); + } + // finally return the properly initialized service_type_support handle + return service_type_support; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup)() { + return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.h new file mode 100644 index 0000000000..8ea9305e94 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.h @@ -0,0 +1,58 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + LandGroup_Request +)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + LandGroup_Response +)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + LandGroup +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__builder.hpp new file mode 100644 index 0000000000..0f38b37d68 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__builder.hpp @@ -0,0 +1,97 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__BUILDER_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__BUILDER_HPP_ + +#include "airsim_interfaces/srv/detail/reset__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_Reset_Request_wait_on_last_task +{ +public: + Init_Reset_Request_wait_on_last_task() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::airsim_interfaces::srv::Reset_Request wait_on_last_task(::airsim_interfaces::srv::Reset_Request::_wait_on_last_task_type arg) + { + msg_.wait_on_last_task = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::Reset_Request msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::Reset_Request>() +{ + return airsim_interfaces::srv::builder::Init_Reset_Request_wait_on_last_task(); +} + +} // namespace airsim_interfaces + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_Reset_Response_success +{ +public: + Init_Reset_Response_success() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::airsim_interfaces::srv::Reset_Response success(::airsim_interfaces::srv::Reset_Response::_success_type arg) + { + msg_.success = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::Reset_Response msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::Reset_Response>() +{ + return airsim_interfaces::srv::builder::Init_Reset_Response_success(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.c new file mode 100644 index 0000000000..01cd47116e --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.c @@ -0,0 +1,266 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/srv/detail/reset__functions.h" + +#include +#include +#include +#include + +bool +airsim_interfaces__srv__Reset_Request__init(airsim_interfaces__srv__Reset_Request * msg) +{ + if (!msg) { + return false; + } + // wait_on_last_task + return true; +} + +void +airsim_interfaces__srv__Reset_Request__fini(airsim_interfaces__srv__Reset_Request * msg) +{ + if (!msg) { + return; + } + // wait_on_last_task +} + +airsim_interfaces__srv__Reset_Request * +airsim_interfaces__srv__Reset_Request__create() +{ + airsim_interfaces__srv__Reset_Request * msg = (airsim_interfaces__srv__Reset_Request *)malloc(sizeof(airsim_interfaces__srv__Reset_Request)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__Reset_Request)); + bool success = airsim_interfaces__srv__Reset_Request__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__Reset_Request__destroy(airsim_interfaces__srv__Reset_Request * msg) +{ + if (msg) { + airsim_interfaces__srv__Reset_Request__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__Reset_Request__Sequence__init(airsim_interfaces__srv__Reset_Request__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__Reset_Request * data = NULL; + if (size) { + data = (airsim_interfaces__srv__Reset_Request *)calloc(size, sizeof(airsim_interfaces__srv__Reset_Request)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__Reset_Request__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__Reset_Request__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__Reset_Request__Sequence__fini(airsim_interfaces__srv__Reset_Request__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__Reset_Request__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__Reset_Request__Sequence * +airsim_interfaces__srv__Reset_Request__Sequence__create(size_t size) +{ + airsim_interfaces__srv__Reset_Request__Sequence * array = (airsim_interfaces__srv__Reset_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__Reset_Request__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__Reset_Request__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__Reset_Request__Sequence__destroy(airsim_interfaces__srv__Reset_Request__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__Reset_Request__Sequence__fini(array); + } + free(array); +} + + +bool +airsim_interfaces__srv__Reset_Response__init(airsim_interfaces__srv__Reset_Response * msg) +{ + if (!msg) { + return false; + } + // success + return true; +} + +void +airsim_interfaces__srv__Reset_Response__fini(airsim_interfaces__srv__Reset_Response * msg) +{ + if (!msg) { + return; + } + // success +} + +airsim_interfaces__srv__Reset_Response * +airsim_interfaces__srv__Reset_Response__create() +{ + airsim_interfaces__srv__Reset_Response * msg = (airsim_interfaces__srv__Reset_Response *)malloc(sizeof(airsim_interfaces__srv__Reset_Response)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__Reset_Response)); + bool success = airsim_interfaces__srv__Reset_Response__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__Reset_Response__destroy(airsim_interfaces__srv__Reset_Response * msg) +{ + if (msg) { + airsim_interfaces__srv__Reset_Response__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__Reset_Response__Sequence__init(airsim_interfaces__srv__Reset_Response__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__Reset_Response * data = NULL; + if (size) { + data = (airsim_interfaces__srv__Reset_Response *)calloc(size, sizeof(airsim_interfaces__srv__Reset_Response)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__Reset_Response__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__Reset_Response__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__Reset_Response__Sequence__fini(airsim_interfaces__srv__Reset_Response__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__Reset_Response__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__Reset_Response__Sequence * +airsim_interfaces__srv__Reset_Response__Sequence__create(size_t size) +{ + airsim_interfaces__srv__Reset_Response__Sequence * array = (airsim_interfaces__srv__Reset_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__Reset_Response__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__Reset_Response__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__Reset_Response__Sequence__destroy(airsim_interfaces__srv__Reset_Response__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__Reset_Response__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.h new file mode 100644 index 0000000000..21318019d8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.h @@ -0,0 +1,223 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/srv/detail/reset__struct.h" + +/// Initialize srv/Reset message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__Reset_Request + * )) before or use + * airsim_interfaces__srv__Reset_Request__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Reset_Request__init(airsim_interfaces__srv__Reset_Request * msg); + +/// Finalize srv/Reset message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Reset_Request__fini(airsim_interfaces__srv__Reset_Request * msg); + +/// Create srv/Reset message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__Reset_Request__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Reset_Request * +airsim_interfaces__srv__Reset_Request__create(); + +/// Destroy srv/Reset message. +/** + * It calls + * airsim_interfaces__srv__Reset_Request__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Reset_Request__destroy(airsim_interfaces__srv__Reset_Request * msg); + + +/// Initialize array of srv/Reset messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__Reset_Request__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Reset_Request__Sequence__init(airsim_interfaces__srv__Reset_Request__Sequence * array, size_t size); + +/// Finalize array of srv/Reset messages. +/** + * It calls + * airsim_interfaces__srv__Reset_Request__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Reset_Request__Sequence__fini(airsim_interfaces__srv__Reset_Request__Sequence * array); + +/// Create array of srv/Reset messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__Reset_Request__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Reset_Request__Sequence * +airsim_interfaces__srv__Reset_Request__Sequence__create(size_t size); + +/// Destroy array of srv/Reset messages. +/** + * It calls + * airsim_interfaces__srv__Reset_Request__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Reset_Request__Sequence__destroy(airsim_interfaces__srv__Reset_Request__Sequence * array); + +/// Initialize srv/Reset message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__Reset_Response + * )) before or use + * airsim_interfaces__srv__Reset_Response__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Reset_Response__init(airsim_interfaces__srv__Reset_Response * msg); + +/// Finalize srv/Reset message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Reset_Response__fini(airsim_interfaces__srv__Reset_Response * msg); + +/// Create srv/Reset message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__Reset_Response__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Reset_Response * +airsim_interfaces__srv__Reset_Response__create(); + +/// Destroy srv/Reset message. +/** + * It calls + * airsim_interfaces__srv__Reset_Response__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Reset_Response__destroy(airsim_interfaces__srv__Reset_Response * msg); + + +/// Initialize array of srv/Reset messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__Reset_Response__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Reset_Response__Sequence__init(airsim_interfaces__srv__Reset_Response__Sequence * array, size_t size); + +/// Finalize array of srv/Reset messages. +/** + * It calls + * airsim_interfaces__srv__Reset_Response__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Reset_Response__Sequence__fini(airsim_interfaces__srv__Reset_Response__Sequence * array); + +/// Create array of srv/Reset messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__Reset_Response__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Reset_Response__Sequence * +airsim_interfaces__srv__Reset_Response__Sequence__create(size_t size); + +/// Destroy array of srv/Reset messages. +/** + * It calls + * airsim_interfaces__srv__Reset_Response__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Reset_Response__Sequence__destroy(airsim_interfaces__srv__Reset_Response__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..69ce4fd27a --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,87 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__Reset_Request( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__Reset_Request( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Reset_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__Reset_Response( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__Reset_Response( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Reset_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Reset)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..dd557643af --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,175 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/srv/detail/reset__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::Reset_Request & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::Reset_Request & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::Reset_Request & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_Reset_Request( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Reset_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/reset__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +// already included above +// #include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::Reset_Response & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::Reset_Response & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::Reset_Response & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_Reset_Response( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Reset_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rmw/types.h" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Reset)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..8157d9f5a3 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h @@ -0,0 +1,47 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Request)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Response)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..2a2532b931 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,67 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.h new file mode 100644 index 0000000000..bef979b8fd --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.h @@ -0,0 +1,59 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in srv/Reset in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__Reset_Request +{ + bool wait_on_last_task; +} airsim_interfaces__srv__Reset_Request; + +// Struct for a sequence of airsim_interfaces__srv__Reset_Request. +typedef struct airsim_interfaces__srv__Reset_Request__Sequence +{ + airsim_interfaces__srv__Reset_Request * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__Reset_Request__Sequence; + + +// Constants defined in the message + +// Struct defined in srv/Reset in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__Reset_Response +{ + bool success; +} airsim_interfaces__srv__Reset_Response; + +// Struct for a sequence of airsim_interfaces__srv__Reset_Response. +typedef struct airsim_interfaces__srv__Reset_Response__Sequence +{ + airsim_interfaces__srv__Reset_Response * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__Reset_Response__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.hpp new file mode 100644 index 0000000000..d245379fa6 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.hpp @@ -0,0 +1,260 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__Reset_Request __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__Reset_Request __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct Reset_Request_ +{ + using Type = Reset_Request_; + + explicit Reset_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->wait_on_last_task = false; + } + } + + explicit Reset_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->wait_on_last_task = false; + } + } + + // field types and members + using _wait_on_last_task_type = + bool; + _wait_on_last_task_type wait_on_last_task; + + // setters for named parameter idiom + Type & set__wait_on_last_task( + const bool & _arg) + { + this->wait_on_last_task = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::Reset_Request_ *; + using ConstRawPtr = + const airsim_interfaces::srv::Reset_Request_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__Reset_Request + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__Reset_Request + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Reset_Request_ & other) const + { + if (this->wait_on_last_task != other.wait_on_last_task) { + return false; + } + return true; + } + bool operator!=(const Reset_Request_ & other) const + { + return !this->operator==(other); + } +}; // struct Reset_Request_ + +// alias to use template instance with default allocator +using Reset_Request = + airsim_interfaces::srv::Reset_Request_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__Reset_Response __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__Reset_Response __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct Reset_Response_ +{ + using Type = Reset_Response_; + + explicit Reset_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + explicit Reset_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + // field types and members + using _success_type = + bool; + _success_type success; + + // setters for named parameter idiom + Type & set__success( + const bool & _arg) + { + this->success = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::Reset_Response_ *; + using ConstRawPtr = + const airsim_interfaces::srv::Reset_Response_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__Reset_Response + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__Reset_Response + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Reset_Response_ & other) const + { + if (this->success != other.success) { + return false; + } + return true; + } + bool operator!=(const Reset_Response_ & other) const + { + return !this->operator==(other); + } +}; // struct Reset_Response_ + +// alias to use template instance with default allocator +using Reset_Response = + airsim_interfaces::srv::Reset_Response_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + +namespace airsim_interfaces +{ + +namespace srv +{ + +struct Reset +{ + using Request = airsim_interfaces::srv::Reset_Request; + using Response = airsim_interfaces::srv::Reset_Response; +}; + +} // namespace srv + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__traits.hpp new file mode 100644 index 0000000000..810c7a6a1b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__traits.hpp @@ -0,0 +1,126 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__TRAITS_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__TRAITS_HPP_ + +#include "airsim_interfaces/srv/detail/reset__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::Reset_Request"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/Reset_Request"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::Reset_Response"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/Reset_Response"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::Reset"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/Reset"; +} + +template<> +struct has_fixed_size + : std::integral_constant< + bool, + has_fixed_size::value && + has_fixed_size::value + > +{ +}; + +template<> +struct has_bounded_size + : std::integral_constant< + bool, + has_bounded_size::value && + has_bounded_size::value + > +{ +}; + +template<> +struct is_service + : std::true_type +{ +}; + +template<> +struct is_service_request + : std::true_type +{ +}; + +template<> +struct is_service_response + : std::true_type +{ +}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.c new file mode 100644 index 0000000000..7944bf2f75 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.c @@ -0,0 +1,224 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/srv/detail/reset__functions.h" +#include "airsim_interfaces/srv/detail/reset__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__Reset_Request__init(message_memory); +} + +void Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_fini_function(void * message_memory) +{ + airsim_interfaces__srv__Reset_Request__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_member_array[1] = { + { + "wait_on_last_task", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__Reset_Request, wait_on_last_task), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_members = { + "airsim_interfaces__srv", // message namespace + "Reset_Request", // message name + 1, // number of fields + sizeof(airsim_interfaces__srv__Reset_Request), + Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_member_array, // message members + Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_init_function, // function to initialize message memory (memory has to be allocated) + Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_type_support_handle = { + 0, + &Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Request)() { + if (!Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_type_support_handle.typesupport_identifier) { + Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "rosidl_typesupport_introspection_c/field_types.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +// already included above +// #include "rosidl_typesupport_introspection_c/message_introspection.h" +// already included above +// #include "airsim_interfaces/srv/detail/reset__functions.h" +// already included above +// #include "airsim_interfaces/srv/detail/reset__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__Reset_Response__init(message_memory); +} + +void Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_fini_function(void * message_memory) +{ + airsim_interfaces__srv__Reset_Response__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_member_array[1] = { + { + "success", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__Reset_Response, success), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_members = { + "airsim_interfaces__srv", // message namespace + "Reset_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces__srv__Reset_Response), + Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_member_array, // message members + Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_init_function, // function to initialize message memory (memory has to be allocated) + Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_type_support_handle = { + 0, + &Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Response)() { + if (!Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_type_support_handle.typesupport_identifier) { + Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/service_introspection.h" + +// this is intentionally not const to allow initialization later to prevent an initialization race +static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_members = { + "airsim_interfaces__srv", // service namespace + "Reset", // service name + // these two fields are initialized below on the first access + NULL, // request message + // airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_Request_message_type_support_handle, + NULL // response message + // airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_Response_message_type_support_handle +}; + +static rosidl_service_type_support_t airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_type_support_handle = { + 0, + &airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_members, + get_service_typesupport_handle_function, +}; + +// Forward declaration of request/response type support functions +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Request)(); + +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Response)(); + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset)() { + if (!airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_type_support_handle.typesupport_identifier) { + airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + rosidl_typesupport_introspection_c__ServiceMembers * service_members = + (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_type_support_handle.data; + + if (!service_members->request_members_) { + service_members->request_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Request)()->data; + } + if (!service_members->response_members_) { + service_members->response_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Response)()->data; + } + + return &airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_type_support_handle; +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.cpp new file mode 100644 index 0000000000..8743ab2bf4 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.cpp @@ -0,0 +1,332 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/srv/detail/reset__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Reset_Request_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::Reset_Request(_init); +} + +void Reset_Request_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Reset_Request(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Reset_Request_message_member_array[1] = { + { + "wait_on_last_task", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::Reset_Request, wait_on_last_task), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Reset_Request_message_members = { + "airsim_interfaces::srv", // message namespace + "Reset_Request", // message name + 1, // number of fields + sizeof(airsim_interfaces::srv::Reset_Request), + Reset_Request_message_member_array, // message members + Reset_Request_init_function, // function to initialize message memory (memory has to be allocated) + Reset_Request_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Reset_Request_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Reset_Request_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Reset_Request_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset_Request)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Reset_Request_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "array" +// already included above +// #include "cstddef" +// already included above +// #include "string" +// already included above +// #include "vector" +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/srv/detail/reset__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Reset_Response_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::Reset_Response(_init); +} + +void Reset_Response_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Reset_Response(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Reset_Response_message_member_array[1] = { + { + "success", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::Reset_Response, success), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Reset_Response_message_members = { + "airsim_interfaces::srv", // message namespace + "Reset_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces::srv::Reset_Response), + Reset_Response_message_member_array, // message members + Reset_Response_init_function, // function to initialize message memory (memory has to be allocated) + Reset_Response_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Reset_Response_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Reset_Response_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Reset_Response_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset_Response)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Reset_Response_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/reset__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +// this is intentionally not const to allow initialization later to prevent an initialization race +static ::rosidl_typesupport_introspection_cpp::ServiceMembers Reset_service_members = { + "airsim_interfaces::srv", // service namespace + "Reset", // service name + // these two fields are initialized below on the first access + // see get_service_type_support_handle() + nullptr, // request message + nullptr // response message +}; + +static const rosidl_service_type_support_t Reset_service_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Reset_service_members, + get_service_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +get_service_type_support_handle() +{ + // get a handle to the value to be returned + auto service_type_support = + &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Reset_service_type_support_handle; + // get a non-const and properly typed version of the data void * + auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( + static_cast( + service_type_support->data)); + // make sure that both the request_members_ and the response_members_ are initialized + // if they are not, initialize them + if ( + service_members->request_members_ == nullptr || + service_members->response_members_ == nullptr) + { + // initialize the request_members_ with the static function from the external library + service_members->request_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::Reset_Request + >()->data + ); + // initialize the response_members_ with the static function from the external library + service_members->response_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::Reset_Response + >()->data + ); + } + // finally return the properly initialized service_type_support handle + return service_type_support; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset)() { + return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.h new file mode 100644 index 0000000000..7ded9ec07c --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.h @@ -0,0 +1,58 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + Reset_Request +)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + Reset_Response +)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + Reset +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__builder.hpp new file mode 100644 index 0000000000..2a8e5d74ef --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__builder.hpp @@ -0,0 +1,161 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__BUILDER_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__BUILDER_HPP_ + +#include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_SetGPSPosition_Request_vehicle_name +{ +public: + explicit Init_SetGPSPosition_Request_vehicle_name(::airsim_interfaces::srv::SetGPSPosition_Request & msg) + : msg_(msg) + {} + ::airsim_interfaces::srv::SetGPSPosition_Request vehicle_name(::airsim_interfaces::srv::SetGPSPosition_Request::_vehicle_name_type arg) + { + msg_.vehicle_name = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::SetGPSPosition_Request msg_; +}; + +class Init_SetGPSPosition_Request_yaw +{ +public: + explicit Init_SetGPSPosition_Request_yaw(::airsim_interfaces::srv::SetGPSPosition_Request & msg) + : msg_(msg) + {} + Init_SetGPSPosition_Request_vehicle_name yaw(::airsim_interfaces::srv::SetGPSPosition_Request::_yaw_type arg) + { + msg_.yaw = std::move(arg); + return Init_SetGPSPosition_Request_vehicle_name(msg_); + } + +private: + ::airsim_interfaces::srv::SetGPSPosition_Request msg_; +}; + +class Init_SetGPSPosition_Request_altitude +{ +public: + explicit Init_SetGPSPosition_Request_altitude(::airsim_interfaces::srv::SetGPSPosition_Request & msg) + : msg_(msg) + {} + Init_SetGPSPosition_Request_yaw altitude(::airsim_interfaces::srv::SetGPSPosition_Request::_altitude_type arg) + { + msg_.altitude = std::move(arg); + return Init_SetGPSPosition_Request_yaw(msg_); + } + +private: + ::airsim_interfaces::srv::SetGPSPosition_Request msg_; +}; + +class Init_SetGPSPosition_Request_longitude +{ +public: + explicit Init_SetGPSPosition_Request_longitude(::airsim_interfaces::srv::SetGPSPosition_Request & msg) + : msg_(msg) + {} + Init_SetGPSPosition_Request_altitude longitude(::airsim_interfaces::srv::SetGPSPosition_Request::_longitude_type arg) + { + msg_.longitude = std::move(arg); + return Init_SetGPSPosition_Request_altitude(msg_); + } + +private: + ::airsim_interfaces::srv::SetGPSPosition_Request msg_; +}; + +class Init_SetGPSPosition_Request_latitude +{ +public: + Init_SetGPSPosition_Request_latitude() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_SetGPSPosition_Request_longitude latitude(::airsim_interfaces::srv::SetGPSPosition_Request::_latitude_type arg) + { + msg_.latitude = std::move(arg); + return Init_SetGPSPosition_Request_longitude(msg_); + } + +private: + ::airsim_interfaces::srv::SetGPSPosition_Request msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::SetGPSPosition_Request>() +{ + return airsim_interfaces::srv::builder::Init_SetGPSPosition_Request_latitude(); +} + +} // namespace airsim_interfaces + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_SetGPSPosition_Response_success +{ +public: + Init_SetGPSPosition_Response_success() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::airsim_interfaces::srv::SetGPSPosition_Response success(::airsim_interfaces::srv::SetGPSPosition_Response::_success_type arg) + { + msg_.success = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::SetGPSPosition_Response msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::SetGPSPosition_Response>() +{ + return airsim_interfaces::srv::builder::Init_SetGPSPosition_Response_success(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.c new file mode 100644 index 0000000000..7a372fc766 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.c @@ -0,0 +1,283 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/srv/detail/set_gps_position__functions.h" + +#include +#include +#include +#include + +// Include directives for member types +// Member `vehicle_name` +#include "rosidl_runtime_c/string_functions.h" + +bool +airsim_interfaces__srv__SetGPSPosition_Request__init(airsim_interfaces__srv__SetGPSPosition_Request * msg) +{ + if (!msg) { + return false; + } + // latitude + // longitude + // altitude + // yaw + // vehicle_name + if (!rosidl_runtime_c__String__init(&msg->vehicle_name)) { + airsim_interfaces__srv__SetGPSPosition_Request__fini(msg); + return false; + } + return true; +} + +void +airsim_interfaces__srv__SetGPSPosition_Request__fini(airsim_interfaces__srv__SetGPSPosition_Request * msg) +{ + if (!msg) { + return; + } + // latitude + // longitude + // altitude + // yaw + // vehicle_name + rosidl_runtime_c__String__fini(&msg->vehicle_name); +} + +airsim_interfaces__srv__SetGPSPosition_Request * +airsim_interfaces__srv__SetGPSPosition_Request__create() +{ + airsim_interfaces__srv__SetGPSPosition_Request * msg = (airsim_interfaces__srv__SetGPSPosition_Request *)malloc(sizeof(airsim_interfaces__srv__SetGPSPosition_Request)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__SetGPSPosition_Request)); + bool success = airsim_interfaces__srv__SetGPSPosition_Request__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__SetGPSPosition_Request__destroy(airsim_interfaces__srv__SetGPSPosition_Request * msg) +{ + if (msg) { + airsim_interfaces__srv__SetGPSPosition_Request__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__SetGPSPosition_Request__Sequence__init(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__SetGPSPosition_Request * data = NULL; + if (size) { + data = (airsim_interfaces__srv__SetGPSPosition_Request *)calloc(size, sizeof(airsim_interfaces__srv__SetGPSPosition_Request)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__SetGPSPosition_Request__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__SetGPSPosition_Request__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__SetGPSPosition_Request__Sequence__fini(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__SetGPSPosition_Request__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__SetGPSPosition_Request__Sequence * +airsim_interfaces__srv__SetGPSPosition_Request__Sequence__create(size_t size) +{ + airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array = (airsim_interfaces__srv__SetGPSPosition_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__SetGPSPosition_Request__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__SetGPSPosition_Request__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__SetGPSPosition_Request__Sequence__destroy(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__SetGPSPosition_Request__Sequence__fini(array); + } + free(array); +} + + +bool +airsim_interfaces__srv__SetGPSPosition_Response__init(airsim_interfaces__srv__SetGPSPosition_Response * msg) +{ + if (!msg) { + return false; + } + // success + return true; +} + +void +airsim_interfaces__srv__SetGPSPosition_Response__fini(airsim_interfaces__srv__SetGPSPosition_Response * msg) +{ + if (!msg) { + return; + } + // success +} + +airsim_interfaces__srv__SetGPSPosition_Response * +airsim_interfaces__srv__SetGPSPosition_Response__create() +{ + airsim_interfaces__srv__SetGPSPosition_Response * msg = (airsim_interfaces__srv__SetGPSPosition_Response *)malloc(sizeof(airsim_interfaces__srv__SetGPSPosition_Response)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__SetGPSPosition_Response)); + bool success = airsim_interfaces__srv__SetGPSPosition_Response__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__SetGPSPosition_Response__destroy(airsim_interfaces__srv__SetGPSPosition_Response * msg) +{ + if (msg) { + airsim_interfaces__srv__SetGPSPosition_Response__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__SetGPSPosition_Response__Sequence__init(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__SetGPSPosition_Response * data = NULL; + if (size) { + data = (airsim_interfaces__srv__SetGPSPosition_Response *)calloc(size, sizeof(airsim_interfaces__srv__SetGPSPosition_Response)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__SetGPSPosition_Response__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__SetGPSPosition_Response__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__SetGPSPosition_Response__Sequence__fini(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__SetGPSPosition_Response__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__SetGPSPosition_Response__Sequence * +airsim_interfaces__srv__SetGPSPosition_Response__Sequence__create(size_t size) +{ + airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array = (airsim_interfaces__srv__SetGPSPosition_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__SetGPSPosition_Response__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__SetGPSPosition_Response__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__SetGPSPosition_Response__Sequence__destroy(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__SetGPSPosition_Response__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.h new file mode 100644 index 0000000000..6ab75616f8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.h @@ -0,0 +1,223 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/srv/detail/set_gps_position__struct.h" + +/// Initialize srv/SetGPSPosition message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__SetGPSPosition_Request + * )) before or use + * airsim_interfaces__srv__SetGPSPosition_Request__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__SetGPSPosition_Request__init(airsim_interfaces__srv__SetGPSPosition_Request * msg); + +/// Finalize srv/SetGPSPosition message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetGPSPosition_Request__fini(airsim_interfaces__srv__SetGPSPosition_Request * msg); + +/// Create srv/SetGPSPosition message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__SetGPSPosition_Request__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__SetGPSPosition_Request * +airsim_interfaces__srv__SetGPSPosition_Request__create(); + +/// Destroy srv/SetGPSPosition message. +/** + * It calls + * airsim_interfaces__srv__SetGPSPosition_Request__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetGPSPosition_Request__destroy(airsim_interfaces__srv__SetGPSPosition_Request * msg); + + +/// Initialize array of srv/SetGPSPosition messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__SetGPSPosition_Request__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__SetGPSPosition_Request__Sequence__init(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array, size_t size); + +/// Finalize array of srv/SetGPSPosition messages. +/** + * It calls + * airsim_interfaces__srv__SetGPSPosition_Request__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetGPSPosition_Request__Sequence__fini(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array); + +/// Create array of srv/SetGPSPosition messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__SetGPSPosition_Request__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__SetGPSPosition_Request__Sequence * +airsim_interfaces__srv__SetGPSPosition_Request__Sequence__create(size_t size); + +/// Destroy array of srv/SetGPSPosition messages. +/** + * It calls + * airsim_interfaces__srv__SetGPSPosition_Request__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetGPSPosition_Request__Sequence__destroy(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array); + +/// Initialize srv/SetGPSPosition message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__SetGPSPosition_Response + * )) before or use + * airsim_interfaces__srv__SetGPSPosition_Response__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__SetGPSPosition_Response__init(airsim_interfaces__srv__SetGPSPosition_Response * msg); + +/// Finalize srv/SetGPSPosition message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetGPSPosition_Response__fini(airsim_interfaces__srv__SetGPSPosition_Response * msg); + +/// Create srv/SetGPSPosition message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__SetGPSPosition_Response__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__SetGPSPosition_Response * +airsim_interfaces__srv__SetGPSPosition_Response__create(); + +/// Destroy srv/SetGPSPosition message. +/** + * It calls + * airsim_interfaces__srv__SetGPSPosition_Response__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetGPSPosition_Response__destroy(airsim_interfaces__srv__SetGPSPosition_Response * msg); + + +/// Initialize array of srv/SetGPSPosition messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__SetGPSPosition_Response__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__SetGPSPosition_Response__Sequence__init(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array, size_t size); + +/// Finalize array of srv/SetGPSPosition messages. +/** + * It calls + * airsim_interfaces__srv__SetGPSPosition_Response__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetGPSPosition_Response__Sequence__fini(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array); + +/// Create array of srv/SetGPSPosition messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__SetGPSPosition_Response__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__SetGPSPosition_Response__Sequence * +airsim_interfaces__srv__SetGPSPosition_Response__Sequence__create(size_t size); + +/// Destroy array of srv/SetGPSPosition messages. +/** + * It calls + * airsim_interfaces__srv__SetGPSPosition_Response__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetGPSPosition_Response__Sequence__destroy(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..992d94d38c --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,87 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__SetGPSPosition_Request( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__SetGPSPosition_Request( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetGPSPosition_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__SetGPSPosition_Response( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__SetGPSPosition_Response( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetGPSPosition_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetGPSPosition)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..213f47382c --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,175 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::SetGPSPosition_Request & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::SetGPSPosition_Request & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::SetGPSPosition_Request & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_SetGPSPosition_Request( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetGPSPosition_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +// already included above +// #include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::SetGPSPosition_Response & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::SetGPSPosition_Response & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::SetGPSPosition_Response & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_SetGPSPosition_Response( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetGPSPosition_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rmw/types.h" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetGPSPosition)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..08dc3b75bd --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h @@ -0,0 +1,47 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Request)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Response)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..4c4caeb547 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,67 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.h new file mode 100644 index 0000000000..96191de128 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.h @@ -0,0 +1,67 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'vehicle_name' +#include "rosidl_runtime_c/string.h" + +// Struct defined in srv/SetGPSPosition in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__SetGPSPosition_Request +{ + double latitude; + double longitude; + double altitude; + double yaw; + rosidl_runtime_c__String vehicle_name; +} airsim_interfaces__srv__SetGPSPosition_Request; + +// Struct for a sequence of airsim_interfaces__srv__SetGPSPosition_Request. +typedef struct airsim_interfaces__srv__SetGPSPosition_Request__Sequence +{ + airsim_interfaces__srv__SetGPSPosition_Request * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__SetGPSPosition_Request__Sequence; + + +// Constants defined in the message + +// Struct defined in srv/SetGPSPosition in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__SetGPSPosition_Response +{ + bool success; +} airsim_interfaces__srv__SetGPSPosition_Response; + +// Struct for a sequence of airsim_interfaces__srv__SetGPSPosition_Response. +typedef struct airsim_interfaces__srv__SetGPSPosition_Response__Sequence +{ + airsim_interfaces__srv__SetGPSPosition_Response * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__SetGPSPosition_Response__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.hpp new file mode 100644 index 0000000000..3694c0d7c5 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.hpp @@ -0,0 +1,316 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Request __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Request __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct SetGPSPosition_Request_ +{ + using Type = SetGPSPosition_Request_; + + explicit SetGPSPosition_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->latitude = 0.0; + this->longitude = 0.0; + this->altitude = 0.0; + this->yaw = 0.0; + this->vehicle_name = ""; + } + } + + explicit SetGPSPosition_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : vehicle_name(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->latitude = 0.0; + this->longitude = 0.0; + this->altitude = 0.0; + this->yaw = 0.0; + this->vehicle_name = ""; + } + } + + // field types and members + using _latitude_type = + double; + _latitude_type latitude; + using _longitude_type = + double; + _longitude_type longitude; + using _altitude_type = + double; + _altitude_type altitude; + using _yaw_type = + double; + _yaw_type yaw; + using _vehicle_name_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _vehicle_name_type vehicle_name; + + // setters for named parameter idiom + Type & set__latitude( + const double & _arg) + { + this->latitude = _arg; + return *this; + } + Type & set__longitude( + const double & _arg) + { + this->longitude = _arg; + return *this; + } + Type & set__altitude( + const double & _arg) + { + this->altitude = _arg; + return *this; + } + Type & set__yaw( + const double & _arg) + { + this->yaw = _arg; + return *this; + } + Type & set__vehicle_name( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->vehicle_name = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::SetGPSPosition_Request_ *; + using ConstRawPtr = + const airsim_interfaces::srv::SetGPSPosition_Request_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Request + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Request + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const SetGPSPosition_Request_ & other) const + { + if (this->latitude != other.latitude) { + return false; + } + if (this->longitude != other.longitude) { + return false; + } + if (this->altitude != other.altitude) { + return false; + } + if (this->yaw != other.yaw) { + return false; + } + if (this->vehicle_name != other.vehicle_name) { + return false; + } + return true; + } + bool operator!=(const SetGPSPosition_Request_ & other) const + { + return !this->operator==(other); + } +}; // struct SetGPSPosition_Request_ + +// alias to use template instance with default allocator +using SetGPSPosition_Request = + airsim_interfaces::srv::SetGPSPosition_Request_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Response __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Response __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct SetGPSPosition_Response_ +{ + using Type = SetGPSPosition_Response_; + + explicit SetGPSPosition_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + explicit SetGPSPosition_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + // field types and members + using _success_type = + bool; + _success_type success; + + // setters for named parameter idiom + Type & set__success( + const bool & _arg) + { + this->success = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::SetGPSPosition_Response_ *; + using ConstRawPtr = + const airsim_interfaces::srv::SetGPSPosition_Response_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Response + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Response + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const SetGPSPosition_Response_ & other) const + { + if (this->success != other.success) { + return false; + } + return true; + } + bool operator!=(const SetGPSPosition_Response_ & other) const + { + return !this->operator==(other); + } +}; // struct SetGPSPosition_Response_ + +// alias to use template instance with default allocator +using SetGPSPosition_Response = + airsim_interfaces::srv::SetGPSPosition_Response_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + +namespace airsim_interfaces +{ + +namespace srv +{ + +struct SetGPSPosition +{ + using Request = airsim_interfaces::srv::SetGPSPosition_Request; + using Response = airsim_interfaces::srv::SetGPSPosition_Response; +}; + +} // namespace srv + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__traits.hpp new file mode 100644 index 0000000000..25642111a4 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__traits.hpp @@ -0,0 +1,126 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TRAITS_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TRAITS_HPP_ + +#include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::SetGPSPosition_Request"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/SetGPSPosition_Request"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::SetGPSPosition_Response"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/SetGPSPosition_Response"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::SetGPSPosition"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/SetGPSPosition"; +} + +template<> +struct has_fixed_size + : std::integral_constant< + bool, + has_fixed_size::value && + has_fixed_size::value + > +{ +}; + +template<> +struct has_bounded_size + : std::integral_constant< + bool, + has_bounded_size::value && + has_bounded_size::value + > +{ +}; + +template<> +struct is_service + : std::true_type +{ +}; + +template<> +struct is_service_request + : std::true_type +{ +}; + +template<> +struct is_service_response + : std::true_type +{ +}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.c new file mode 100644 index 0000000000..cf6463d3e6 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.c @@ -0,0 +1,288 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/srv/detail/set_gps_position__functions.h" +#include "airsim_interfaces/srv/detail/set_gps_position__struct.h" + + +// Include directives for member types +// Member `vehicle_name` +#include "rosidl_runtime_c/string_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__SetGPSPosition_Request__init(message_memory); +} + +void SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_fini_function(void * message_memory) +{ + airsim_interfaces__srv__SetGPSPosition_Request__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_member_array[5] = { + { + "latitude", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetGPSPosition_Request, latitude), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "longitude", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetGPSPosition_Request, longitude), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "altitude", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetGPSPosition_Request, altitude), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "yaw", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetGPSPosition_Request, yaw), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "vehicle_name", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetGPSPosition_Request, vehicle_name), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_members = { + "airsim_interfaces__srv", // message namespace + "SetGPSPosition_Request", // message name + 5, // number of fields + sizeof(airsim_interfaces__srv__SetGPSPosition_Request), + SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_member_array, // message members + SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_init_function, // function to initialize message memory (memory has to be allocated) + SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_type_support_handle = { + 0, + &SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Request)() { + if (!SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_type_support_handle.typesupport_identifier) { + SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "rosidl_typesupport_introspection_c/field_types.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +// already included above +// #include "rosidl_typesupport_introspection_c/message_introspection.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_gps_position__functions.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_gps_position__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__SetGPSPosition_Response__init(message_memory); +} + +void SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_fini_function(void * message_memory) +{ + airsim_interfaces__srv__SetGPSPosition_Response__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_member_array[1] = { + { + "success", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetGPSPosition_Response, success), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_members = { + "airsim_interfaces__srv", // message namespace + "SetGPSPosition_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces__srv__SetGPSPosition_Response), + SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_member_array, // message members + SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_init_function, // function to initialize message memory (memory has to be allocated) + SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_type_support_handle = { + 0, + &SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Response)() { + if (!SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_type_support_handle.typesupport_identifier) { + SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/service_introspection.h" + +// this is intentionally not const to allow initialization later to prevent an initialization race +static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_members = { + "airsim_interfaces__srv", // service namespace + "SetGPSPosition", // service name + // these two fields are initialized below on the first access + NULL, // request message + // airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_type_support_handle, + NULL // response message + // airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_type_support_handle +}; + +static rosidl_service_type_support_t airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_type_support_handle = { + 0, + &airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_members, + get_service_typesupport_handle_function, +}; + +// Forward declaration of request/response type support functions +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Request)(); + +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Response)(); + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition)() { + if (!airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_type_support_handle.typesupport_identifier) { + airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + rosidl_typesupport_introspection_c__ServiceMembers * service_members = + (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_type_support_handle.data; + + if (!service_members->request_members_) { + service_members->request_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Request)()->data; + } + if (!service_members->response_members_) { + service_members->response_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Response)()->data; + } + + return &airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_type_support_handle; +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.cpp new file mode 100644 index 0000000000..428062dad2 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.cpp @@ -0,0 +1,392 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void SetGPSPosition_Request_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::SetGPSPosition_Request(_init); +} + +void SetGPSPosition_Request_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~SetGPSPosition_Request(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember SetGPSPosition_Request_message_member_array[5] = { + { + "latitude", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetGPSPosition_Request, latitude), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "longitude", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetGPSPosition_Request, longitude), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "altitude", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetGPSPosition_Request, altitude), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "yaw", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetGPSPosition_Request, yaw), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "vehicle_name", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetGPSPosition_Request, vehicle_name), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers SetGPSPosition_Request_message_members = { + "airsim_interfaces::srv", // message namespace + "SetGPSPosition_Request", // message name + 5, // number of fields + sizeof(airsim_interfaces::srv::SetGPSPosition_Request), + SetGPSPosition_Request_message_member_array, // message members + SetGPSPosition_Request_init_function, // function to initialize message memory (memory has to be allocated) + SetGPSPosition_Request_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t SetGPSPosition_Request_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &SetGPSPosition_Request_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetGPSPosition_Request_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition_Request)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetGPSPosition_Request_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "array" +// already included above +// #include "cstddef" +// already included above +// #include "string" +// already included above +// #include "vector" +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void SetGPSPosition_Response_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::SetGPSPosition_Response(_init); +} + +void SetGPSPosition_Response_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~SetGPSPosition_Response(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember SetGPSPosition_Response_message_member_array[1] = { + { + "success", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetGPSPosition_Response, success), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers SetGPSPosition_Response_message_members = { + "airsim_interfaces::srv", // message namespace + "SetGPSPosition_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces::srv::SetGPSPosition_Response), + SetGPSPosition_Response_message_member_array, // message members + SetGPSPosition_Response_init_function, // function to initialize message memory (memory has to be allocated) + SetGPSPosition_Response_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t SetGPSPosition_Response_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &SetGPSPosition_Response_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetGPSPosition_Response_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition_Response)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetGPSPosition_Response_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +// this is intentionally not const to allow initialization later to prevent an initialization race +static ::rosidl_typesupport_introspection_cpp::ServiceMembers SetGPSPosition_service_members = { + "airsim_interfaces::srv", // service namespace + "SetGPSPosition", // service name + // these two fields are initialized below on the first access + // see get_service_type_support_handle() + nullptr, // request message + nullptr // response message +}; + +static const rosidl_service_type_support_t SetGPSPosition_service_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &SetGPSPosition_service_members, + get_service_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +get_service_type_support_handle() +{ + // get a handle to the value to be returned + auto service_type_support = + &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetGPSPosition_service_type_support_handle; + // get a non-const and properly typed version of the data void * + auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( + static_cast( + service_type_support->data)); + // make sure that both the request_members_ and the response_members_ are initialized + // if they are not, initialize them + if ( + service_members->request_members_ == nullptr || + service_members->response_members_ == nullptr) + { + // initialize the request_members_ with the static function from the external library + service_members->request_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::SetGPSPosition_Request + >()->data + ); + // initialize the response_members_ with the static function from the external library + service_members->response_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::SetGPSPosition_Response + >()->data + ); + } + // finally return the properly initialized service_type_support handle + return service_type_support; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition)() { + return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.h new file mode 100644 index 0000000000..355ad80c08 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.h @@ -0,0 +1,58 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + SetGPSPosition_Request +)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + SetGPSPosition_Response +)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + SetGPSPosition +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__builder.hpp new file mode 100644 index 0000000000..d6b406ad41 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__builder.hpp @@ -0,0 +1,177 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__BUILDER_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__BUILDER_HPP_ + +#include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_SetLocalPosition_Request_vehicle_name +{ +public: + explicit Init_SetLocalPosition_Request_vehicle_name(::airsim_interfaces::srv::SetLocalPosition_Request & msg) + : msg_(msg) + {} + ::airsim_interfaces::srv::SetLocalPosition_Request vehicle_name(::airsim_interfaces::srv::SetLocalPosition_Request::_vehicle_name_type arg) + { + msg_.vehicle_name = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::SetLocalPosition_Request msg_; +}; + +class Init_SetLocalPosition_Request_yaw +{ +public: + explicit Init_SetLocalPosition_Request_yaw(::airsim_interfaces::srv::SetLocalPosition_Request & msg) + : msg_(msg) + {} + Init_SetLocalPosition_Request_vehicle_name yaw(::airsim_interfaces::srv::SetLocalPosition_Request::_yaw_type arg) + { + msg_.yaw = std::move(arg); + return Init_SetLocalPosition_Request_vehicle_name(msg_); + } + +private: + ::airsim_interfaces::srv::SetLocalPosition_Request msg_; +}; + +class Init_SetLocalPosition_Request_z +{ +public: + explicit Init_SetLocalPosition_Request_z(::airsim_interfaces::srv::SetLocalPosition_Request & msg) + : msg_(msg) + {} + Init_SetLocalPosition_Request_yaw z(::airsim_interfaces::srv::SetLocalPosition_Request::_z_type arg) + { + msg_.z = std::move(arg); + return Init_SetLocalPosition_Request_yaw(msg_); + } + +private: + ::airsim_interfaces::srv::SetLocalPosition_Request msg_; +}; + +class Init_SetLocalPosition_Request_y +{ +public: + explicit Init_SetLocalPosition_Request_y(::airsim_interfaces::srv::SetLocalPosition_Request & msg) + : msg_(msg) + {} + Init_SetLocalPosition_Request_z y(::airsim_interfaces::srv::SetLocalPosition_Request::_y_type arg) + { + msg_.y = std::move(arg); + return Init_SetLocalPosition_Request_z(msg_); + } + +private: + ::airsim_interfaces::srv::SetLocalPosition_Request msg_; +}; + +class Init_SetLocalPosition_Request_x +{ +public: + Init_SetLocalPosition_Request_x() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_SetLocalPosition_Request_y x(::airsim_interfaces::srv::SetLocalPosition_Request::_x_type arg) + { + msg_.x = std::move(arg); + return Init_SetLocalPosition_Request_y(msg_); + } + +private: + ::airsim_interfaces::srv::SetLocalPosition_Request msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::SetLocalPosition_Request>() +{ + return airsim_interfaces::srv::builder::Init_SetLocalPosition_Request_x(); +} + +} // namespace airsim_interfaces + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_SetLocalPosition_Response_message +{ +public: + explicit Init_SetLocalPosition_Response_message(::airsim_interfaces::srv::SetLocalPosition_Response & msg) + : msg_(msg) + {} + ::airsim_interfaces::srv::SetLocalPosition_Response message(::airsim_interfaces::srv::SetLocalPosition_Response::_message_type arg) + { + msg_.message = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::SetLocalPosition_Response msg_; +}; + +class Init_SetLocalPosition_Response_success +{ +public: + Init_SetLocalPosition_Response_success() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_SetLocalPosition_Response_message success(::airsim_interfaces::srv::SetLocalPosition_Response::_success_type arg) + { + msg_.success = std::move(arg); + return Init_SetLocalPosition_Response_message(msg_); + } + +private: + ::airsim_interfaces::srv::SetLocalPosition_Response msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::SetLocalPosition_Response>() +{ + return airsim_interfaces::srv::builder::Init_SetLocalPosition_Response_success(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.c new file mode 100644 index 0000000000..b8a3bd411b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.c @@ -0,0 +1,295 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/srv/detail/set_local_position__functions.h" + +#include +#include +#include +#include + +// Include directives for member types +// Member `vehicle_name` +#include "rosidl_runtime_c/string_functions.h" + +bool +airsim_interfaces__srv__SetLocalPosition_Request__init(airsim_interfaces__srv__SetLocalPosition_Request * msg) +{ + if (!msg) { + return false; + } + // x + // y + // z + // yaw + // vehicle_name + if (!rosidl_runtime_c__String__init(&msg->vehicle_name)) { + airsim_interfaces__srv__SetLocalPosition_Request__fini(msg); + return false; + } + return true; +} + +void +airsim_interfaces__srv__SetLocalPosition_Request__fini(airsim_interfaces__srv__SetLocalPosition_Request * msg) +{ + if (!msg) { + return; + } + // x + // y + // z + // yaw + // vehicle_name + rosidl_runtime_c__String__fini(&msg->vehicle_name); +} + +airsim_interfaces__srv__SetLocalPosition_Request * +airsim_interfaces__srv__SetLocalPosition_Request__create() +{ + airsim_interfaces__srv__SetLocalPosition_Request * msg = (airsim_interfaces__srv__SetLocalPosition_Request *)malloc(sizeof(airsim_interfaces__srv__SetLocalPosition_Request)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__SetLocalPosition_Request)); + bool success = airsim_interfaces__srv__SetLocalPosition_Request__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__SetLocalPosition_Request__destroy(airsim_interfaces__srv__SetLocalPosition_Request * msg) +{ + if (msg) { + airsim_interfaces__srv__SetLocalPosition_Request__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__SetLocalPosition_Request__Sequence__init(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__SetLocalPosition_Request * data = NULL; + if (size) { + data = (airsim_interfaces__srv__SetLocalPosition_Request *)calloc(size, sizeof(airsim_interfaces__srv__SetLocalPosition_Request)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__SetLocalPosition_Request__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__SetLocalPosition_Request__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__SetLocalPosition_Request__Sequence__fini(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__SetLocalPosition_Request__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__SetLocalPosition_Request__Sequence * +airsim_interfaces__srv__SetLocalPosition_Request__Sequence__create(size_t size) +{ + airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array = (airsim_interfaces__srv__SetLocalPosition_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__SetLocalPosition_Request__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__SetLocalPosition_Request__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__SetLocalPosition_Request__Sequence__destroy(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__SetLocalPosition_Request__Sequence__fini(array); + } + free(array); +} + + +// Include directives for member types +// Member `message` +// already included above +// #include "rosidl_runtime_c/string_functions.h" + +bool +airsim_interfaces__srv__SetLocalPosition_Response__init(airsim_interfaces__srv__SetLocalPosition_Response * msg) +{ + if (!msg) { + return false; + } + // success + // message + if (!rosidl_runtime_c__String__init(&msg->message)) { + airsim_interfaces__srv__SetLocalPosition_Response__fini(msg); + return false; + } + return true; +} + +void +airsim_interfaces__srv__SetLocalPosition_Response__fini(airsim_interfaces__srv__SetLocalPosition_Response * msg) +{ + if (!msg) { + return; + } + // success + // message + rosidl_runtime_c__String__fini(&msg->message); +} + +airsim_interfaces__srv__SetLocalPosition_Response * +airsim_interfaces__srv__SetLocalPosition_Response__create() +{ + airsim_interfaces__srv__SetLocalPosition_Response * msg = (airsim_interfaces__srv__SetLocalPosition_Response *)malloc(sizeof(airsim_interfaces__srv__SetLocalPosition_Response)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__SetLocalPosition_Response)); + bool success = airsim_interfaces__srv__SetLocalPosition_Response__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__SetLocalPosition_Response__destroy(airsim_interfaces__srv__SetLocalPosition_Response * msg) +{ + if (msg) { + airsim_interfaces__srv__SetLocalPosition_Response__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__SetLocalPosition_Response__Sequence__init(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__SetLocalPosition_Response * data = NULL; + if (size) { + data = (airsim_interfaces__srv__SetLocalPosition_Response *)calloc(size, sizeof(airsim_interfaces__srv__SetLocalPosition_Response)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__SetLocalPosition_Response__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__SetLocalPosition_Response__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__SetLocalPosition_Response__Sequence__fini(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__SetLocalPosition_Response__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__SetLocalPosition_Response__Sequence * +airsim_interfaces__srv__SetLocalPosition_Response__Sequence__create(size_t size) +{ + airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array = (airsim_interfaces__srv__SetLocalPosition_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__SetLocalPosition_Response__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__SetLocalPosition_Response__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__SetLocalPosition_Response__Sequence__destroy(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__SetLocalPosition_Response__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.h new file mode 100644 index 0000000000..2c2c819ac3 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.h @@ -0,0 +1,223 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/srv/detail/set_local_position__struct.h" + +/// Initialize srv/SetLocalPosition message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__SetLocalPosition_Request + * )) before or use + * airsim_interfaces__srv__SetLocalPosition_Request__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__SetLocalPosition_Request__init(airsim_interfaces__srv__SetLocalPosition_Request * msg); + +/// Finalize srv/SetLocalPosition message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetLocalPosition_Request__fini(airsim_interfaces__srv__SetLocalPosition_Request * msg); + +/// Create srv/SetLocalPosition message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__SetLocalPosition_Request__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__SetLocalPosition_Request * +airsim_interfaces__srv__SetLocalPosition_Request__create(); + +/// Destroy srv/SetLocalPosition message. +/** + * It calls + * airsim_interfaces__srv__SetLocalPosition_Request__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetLocalPosition_Request__destroy(airsim_interfaces__srv__SetLocalPosition_Request * msg); + + +/// Initialize array of srv/SetLocalPosition messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__SetLocalPosition_Request__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__SetLocalPosition_Request__Sequence__init(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array, size_t size); + +/// Finalize array of srv/SetLocalPosition messages. +/** + * It calls + * airsim_interfaces__srv__SetLocalPosition_Request__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetLocalPosition_Request__Sequence__fini(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array); + +/// Create array of srv/SetLocalPosition messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__SetLocalPosition_Request__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__SetLocalPosition_Request__Sequence * +airsim_interfaces__srv__SetLocalPosition_Request__Sequence__create(size_t size); + +/// Destroy array of srv/SetLocalPosition messages. +/** + * It calls + * airsim_interfaces__srv__SetLocalPosition_Request__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetLocalPosition_Request__Sequence__destroy(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array); + +/// Initialize srv/SetLocalPosition message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__SetLocalPosition_Response + * )) before or use + * airsim_interfaces__srv__SetLocalPosition_Response__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__SetLocalPosition_Response__init(airsim_interfaces__srv__SetLocalPosition_Response * msg); + +/// Finalize srv/SetLocalPosition message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetLocalPosition_Response__fini(airsim_interfaces__srv__SetLocalPosition_Response * msg); + +/// Create srv/SetLocalPosition message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__SetLocalPosition_Response__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__SetLocalPosition_Response * +airsim_interfaces__srv__SetLocalPosition_Response__create(); + +/// Destroy srv/SetLocalPosition message. +/** + * It calls + * airsim_interfaces__srv__SetLocalPosition_Response__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetLocalPosition_Response__destroy(airsim_interfaces__srv__SetLocalPosition_Response * msg); + + +/// Initialize array of srv/SetLocalPosition messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__SetLocalPosition_Response__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__SetLocalPosition_Response__Sequence__init(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array, size_t size); + +/// Finalize array of srv/SetLocalPosition messages. +/** + * It calls + * airsim_interfaces__srv__SetLocalPosition_Response__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetLocalPosition_Response__Sequence__fini(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array); + +/// Create array of srv/SetLocalPosition messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__SetLocalPosition_Response__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__SetLocalPosition_Response__Sequence * +airsim_interfaces__srv__SetLocalPosition_Response__Sequence__create(size_t size); + +/// Destroy array of srv/SetLocalPosition messages. +/** + * It calls + * airsim_interfaces__srv__SetLocalPosition_Response__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__SetLocalPosition_Response__Sequence__destroy(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..5f3532c5dd --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,87 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__SetLocalPosition_Request( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__SetLocalPosition_Request( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetLocalPosition_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__SetLocalPosition_Response( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__SetLocalPosition_Response( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetLocalPosition_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetLocalPosition)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..ecb78ae203 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,175 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::SetLocalPosition_Request & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::SetLocalPosition_Request & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::SetLocalPosition_Request & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_SetLocalPosition_Request( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetLocalPosition_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +// already included above +// #include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::SetLocalPosition_Response & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::SetLocalPosition_Response & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::SetLocalPosition_Response & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_SetLocalPosition_Response( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetLocalPosition_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rmw/types.h" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetLocalPosition)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..e7f9511330 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h @@ -0,0 +1,47 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Request)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Response)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..316e06d4d8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,67 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.h new file mode 100644 index 0000000000..cccfbc2d30 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.h @@ -0,0 +1,73 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'vehicle_name' +#include "rosidl_runtime_c/string.h" + +// Struct defined in srv/SetLocalPosition in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__SetLocalPosition_Request +{ + double x; + double y; + double z; + double yaw; + rosidl_runtime_c__String vehicle_name; +} airsim_interfaces__srv__SetLocalPosition_Request; + +// Struct for a sequence of airsim_interfaces__srv__SetLocalPosition_Request. +typedef struct airsim_interfaces__srv__SetLocalPosition_Request__Sequence +{ + airsim_interfaces__srv__SetLocalPosition_Request * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__SetLocalPosition_Request__Sequence; + + +// Constants defined in the message + +// Include directives for member types +// Member 'message' +// already included above +// #include "rosidl_runtime_c/string.h" + +// Struct defined in srv/SetLocalPosition in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__SetLocalPosition_Response +{ + bool success; + rosidl_runtime_c__String message; +} airsim_interfaces__srv__SetLocalPosition_Response; + +// Struct for a sequence of airsim_interfaces__srv__SetLocalPosition_Response. +typedef struct airsim_interfaces__srv__SetLocalPosition_Response__Sequence +{ + airsim_interfaces__srv__SetLocalPosition_Response * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__SetLocalPosition_Response__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.hpp new file mode 100644 index 0000000000..39dd92b3a8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.hpp @@ -0,0 +1,330 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Request __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Request __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct SetLocalPosition_Request_ +{ + using Type = SetLocalPosition_Request_; + + explicit SetLocalPosition_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->x = 0.0; + this->y = 0.0; + this->z = 0.0; + this->yaw = 0.0; + this->vehicle_name = ""; + } + } + + explicit SetLocalPosition_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : vehicle_name(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->x = 0.0; + this->y = 0.0; + this->z = 0.0; + this->yaw = 0.0; + this->vehicle_name = ""; + } + } + + // field types and members + using _x_type = + double; + _x_type x; + using _y_type = + double; + _y_type y; + using _z_type = + double; + _z_type z; + using _yaw_type = + double; + _yaw_type yaw; + using _vehicle_name_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _vehicle_name_type vehicle_name; + + // setters for named parameter idiom + Type & set__x( + const double & _arg) + { + this->x = _arg; + return *this; + } + Type & set__y( + const double & _arg) + { + this->y = _arg; + return *this; + } + Type & set__z( + const double & _arg) + { + this->z = _arg; + return *this; + } + Type & set__yaw( + const double & _arg) + { + this->yaw = _arg; + return *this; + } + Type & set__vehicle_name( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->vehicle_name = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::SetLocalPosition_Request_ *; + using ConstRawPtr = + const airsim_interfaces::srv::SetLocalPosition_Request_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Request + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Request + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const SetLocalPosition_Request_ & other) const + { + if (this->x != other.x) { + return false; + } + if (this->y != other.y) { + return false; + } + if (this->z != other.z) { + return false; + } + if (this->yaw != other.yaw) { + return false; + } + if (this->vehicle_name != other.vehicle_name) { + return false; + } + return true; + } + bool operator!=(const SetLocalPosition_Request_ & other) const + { + return !this->operator==(other); + } +}; // struct SetLocalPosition_Request_ + +// alias to use template instance with default allocator +using SetLocalPosition_Request = + airsim_interfaces::srv::SetLocalPosition_Request_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Response __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Response __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct SetLocalPosition_Response_ +{ + using Type = SetLocalPosition_Response_; + + explicit SetLocalPosition_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + this->message = ""; + } + } + + explicit SetLocalPosition_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : message(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + this->message = ""; + } + } + + // field types and members + using _success_type = + bool; + _success_type success; + using _message_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _message_type message; + + // setters for named parameter idiom + Type & set__success( + const bool & _arg) + { + this->success = _arg; + return *this; + } + Type & set__message( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->message = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::SetLocalPosition_Response_ *; + using ConstRawPtr = + const airsim_interfaces::srv::SetLocalPosition_Response_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Response + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Response + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const SetLocalPosition_Response_ & other) const + { + if (this->success != other.success) { + return false; + } + if (this->message != other.message) { + return false; + } + return true; + } + bool operator!=(const SetLocalPosition_Response_ & other) const + { + return !this->operator==(other); + } +}; // struct SetLocalPosition_Response_ + +// alias to use template instance with default allocator +using SetLocalPosition_Response = + airsim_interfaces::srv::SetLocalPosition_Response_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + +namespace airsim_interfaces +{ + +namespace srv +{ + +struct SetLocalPosition +{ + using Request = airsim_interfaces::srv::SetLocalPosition_Request; + using Response = airsim_interfaces::srv::SetLocalPosition_Response; +}; + +} // namespace srv + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__traits.hpp new file mode 100644 index 0000000000..859cc53082 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__traits.hpp @@ -0,0 +1,126 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TRAITS_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TRAITS_HPP_ + +#include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::SetLocalPosition_Request"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/SetLocalPosition_Request"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::SetLocalPosition_Response"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/SetLocalPosition_Response"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::SetLocalPosition"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/SetLocalPosition"; +} + +template<> +struct has_fixed_size + : std::integral_constant< + bool, + has_fixed_size::value && + has_fixed_size::value + > +{ +}; + +template<> +struct has_bounded_size + : std::integral_constant< + bool, + has_bounded_size::value && + has_bounded_size::value + > +{ +}; + +template<> +struct is_service + : std::true_type +{ +}; + +template<> +struct is_service_request + : std::true_type +{ +}; + +template<> +struct is_service_response + : std::true_type +{ +}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.c new file mode 100644 index 0000000000..2b9754a148 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.c @@ -0,0 +1,308 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/srv/detail/set_local_position__functions.h" +#include "airsim_interfaces/srv/detail/set_local_position__struct.h" + + +// Include directives for member types +// Member `vehicle_name` +#include "rosidl_runtime_c/string_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__SetLocalPosition_Request__init(message_memory); +} + +void SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_fini_function(void * message_memory) +{ + airsim_interfaces__srv__SetLocalPosition_Request__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_member_array[5] = { + { + "x", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetLocalPosition_Request, x), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "y", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetLocalPosition_Request, y), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "z", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetLocalPosition_Request, z), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "yaw", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetLocalPosition_Request, yaw), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "vehicle_name", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetLocalPosition_Request, vehicle_name), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_members = { + "airsim_interfaces__srv", // message namespace + "SetLocalPosition_Request", // message name + 5, // number of fields + sizeof(airsim_interfaces__srv__SetLocalPosition_Request), + SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_member_array, // message members + SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_init_function, // function to initialize message memory (memory has to be allocated) + SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_type_support_handle = { + 0, + &SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Request)() { + if (!SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_type_support_handle.typesupport_identifier) { + SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "rosidl_typesupport_introspection_c/field_types.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +// already included above +// #include "rosidl_typesupport_introspection_c/message_introspection.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_local_position__functions.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_local_position__struct.h" + + +// Include directives for member types +// Member `message` +// already included above +// #include "rosidl_runtime_c/string_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__SetLocalPosition_Response__init(message_memory); +} + +void SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_fini_function(void * message_memory) +{ + airsim_interfaces__srv__SetLocalPosition_Response__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_member_array[2] = { + { + "success", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetLocalPosition_Response, success), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "message", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__SetLocalPosition_Response, message), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_members = { + "airsim_interfaces__srv", // message namespace + "SetLocalPosition_Response", // message name + 2, // number of fields + sizeof(airsim_interfaces__srv__SetLocalPosition_Response), + SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_member_array, // message members + SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_init_function, // function to initialize message memory (memory has to be allocated) + SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_type_support_handle = { + 0, + &SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Response)() { + if (!SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_type_support_handle.typesupport_identifier) { + SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/service_introspection.h" + +// this is intentionally not const to allow initialization later to prevent an initialization race +static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_members = { + "airsim_interfaces__srv", // service namespace + "SetLocalPosition", // service name + // these two fields are initialized below on the first access + NULL, // request message + // airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_type_support_handle, + NULL // response message + // airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_type_support_handle +}; + +static rosidl_service_type_support_t airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_type_support_handle = { + 0, + &airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_members, + get_service_typesupport_handle_function, +}; + +// Forward declaration of request/response type support functions +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Request)(); + +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Response)(); + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition)() { + if (!airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_type_support_handle.typesupport_identifier) { + airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + rosidl_typesupport_introspection_c__ServiceMembers * service_members = + (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_type_support_handle.data; + + if (!service_members->request_members_) { + service_members->request_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Request)()->data; + } + if (!service_members->response_members_) { + service_members->response_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Response)()->data; + } + + return &airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_type_support_handle; +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.cpp new file mode 100644 index 0000000000..1c8e9eb6eb --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.cpp @@ -0,0 +1,407 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void SetLocalPosition_Request_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::SetLocalPosition_Request(_init); +} + +void SetLocalPosition_Request_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~SetLocalPosition_Request(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember SetLocalPosition_Request_message_member_array[5] = { + { + "x", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetLocalPosition_Request, x), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "y", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetLocalPosition_Request, y), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "z", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetLocalPosition_Request, z), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "yaw", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetLocalPosition_Request, yaw), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "vehicle_name", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetLocalPosition_Request, vehicle_name), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers SetLocalPosition_Request_message_members = { + "airsim_interfaces::srv", // message namespace + "SetLocalPosition_Request", // message name + 5, // number of fields + sizeof(airsim_interfaces::srv::SetLocalPosition_Request), + SetLocalPosition_Request_message_member_array, // message members + SetLocalPosition_Request_init_function, // function to initialize message memory (memory has to be allocated) + SetLocalPosition_Request_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t SetLocalPosition_Request_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &SetLocalPosition_Request_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetLocalPosition_Request_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition_Request)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetLocalPosition_Request_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "array" +// already included above +// #include "cstddef" +// already included above +// #include "string" +// already included above +// #include "vector" +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void SetLocalPosition_Response_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::SetLocalPosition_Response(_init); +} + +void SetLocalPosition_Response_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~SetLocalPosition_Response(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember SetLocalPosition_Response_message_member_array[2] = { + { + "success", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetLocalPosition_Response, success), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "message", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::SetLocalPosition_Response, message), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers SetLocalPosition_Response_message_members = { + "airsim_interfaces::srv", // message namespace + "SetLocalPosition_Response", // message name + 2, // number of fields + sizeof(airsim_interfaces::srv::SetLocalPosition_Response), + SetLocalPosition_Response_message_member_array, // message members + SetLocalPosition_Response_init_function, // function to initialize message memory (memory has to be allocated) + SetLocalPosition_Response_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t SetLocalPosition_Response_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &SetLocalPosition_Response_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetLocalPosition_Response_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition_Response)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetLocalPosition_Response_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +// this is intentionally not const to allow initialization later to prevent an initialization race +static ::rosidl_typesupport_introspection_cpp::ServiceMembers SetLocalPosition_service_members = { + "airsim_interfaces::srv", // service namespace + "SetLocalPosition", // service name + // these two fields are initialized below on the first access + // see get_service_type_support_handle() + nullptr, // request message + nullptr // response message +}; + +static const rosidl_service_type_support_t SetLocalPosition_service_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &SetLocalPosition_service_members, + get_service_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +get_service_type_support_handle() +{ + // get a handle to the value to be returned + auto service_type_support = + &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetLocalPosition_service_type_support_handle; + // get a non-const and properly typed version of the data void * + auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( + static_cast( + service_type_support->data)); + // make sure that both the request_members_ and the response_members_ are initialized + // if they are not, initialize them + if ( + service_members->request_members_ == nullptr || + service_members->response_members_ == nullptr) + { + // initialize the request_members_ with the static function from the external library + service_members->request_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::SetLocalPosition_Request + >()->data + ); + // initialize the response_members_ with the static function from the external library + service_members->response_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::SetLocalPosition_Response + >()->data + ); + } + // finally return the properly initialized service_type_support handle + return service_type_support; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition)() { + return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.h new file mode 100644 index 0000000000..52ba7ad877 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.h @@ -0,0 +1,58 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + SetLocalPosition_Request +)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + SetLocalPosition_Response +)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + SetLocalPosition +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__builder.hpp new file mode 100644 index 0000000000..c5cde9429b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__builder.hpp @@ -0,0 +1,97 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__BUILDER_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__BUILDER_HPP_ + +#include "airsim_interfaces/srv/detail/takeoff__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_Takeoff_Request_wait_on_last_task +{ +public: + Init_Takeoff_Request_wait_on_last_task() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::airsim_interfaces::srv::Takeoff_Request wait_on_last_task(::airsim_interfaces::srv::Takeoff_Request::_wait_on_last_task_type arg) + { + msg_.wait_on_last_task = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::Takeoff_Request msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::Takeoff_Request>() +{ + return airsim_interfaces::srv::builder::Init_Takeoff_Request_wait_on_last_task(); +} + +} // namespace airsim_interfaces + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_Takeoff_Response_success +{ +public: + Init_Takeoff_Response_success() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::airsim_interfaces::srv::Takeoff_Response success(::airsim_interfaces::srv::Takeoff_Response::_success_type arg) + { + msg_.success = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::Takeoff_Response msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::Takeoff_Response>() +{ + return airsim_interfaces::srv::builder::Init_Takeoff_Response_success(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.c new file mode 100644 index 0000000000..29989a0bca --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.c @@ -0,0 +1,266 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/srv/detail/takeoff__functions.h" + +#include +#include +#include +#include + +bool +airsim_interfaces__srv__Takeoff_Request__init(airsim_interfaces__srv__Takeoff_Request * msg) +{ + if (!msg) { + return false; + } + // wait_on_last_task + return true; +} + +void +airsim_interfaces__srv__Takeoff_Request__fini(airsim_interfaces__srv__Takeoff_Request * msg) +{ + if (!msg) { + return; + } + // wait_on_last_task +} + +airsim_interfaces__srv__Takeoff_Request * +airsim_interfaces__srv__Takeoff_Request__create() +{ + airsim_interfaces__srv__Takeoff_Request * msg = (airsim_interfaces__srv__Takeoff_Request *)malloc(sizeof(airsim_interfaces__srv__Takeoff_Request)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__Takeoff_Request)); + bool success = airsim_interfaces__srv__Takeoff_Request__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__Takeoff_Request__destroy(airsim_interfaces__srv__Takeoff_Request * msg) +{ + if (msg) { + airsim_interfaces__srv__Takeoff_Request__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__Takeoff_Request__Sequence__init(airsim_interfaces__srv__Takeoff_Request__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__Takeoff_Request * data = NULL; + if (size) { + data = (airsim_interfaces__srv__Takeoff_Request *)calloc(size, sizeof(airsim_interfaces__srv__Takeoff_Request)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__Takeoff_Request__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__Takeoff_Request__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__Takeoff_Request__Sequence__fini(airsim_interfaces__srv__Takeoff_Request__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__Takeoff_Request__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__Takeoff_Request__Sequence * +airsim_interfaces__srv__Takeoff_Request__Sequence__create(size_t size) +{ + airsim_interfaces__srv__Takeoff_Request__Sequence * array = (airsim_interfaces__srv__Takeoff_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__Takeoff_Request__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__Takeoff_Request__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__Takeoff_Request__Sequence__destroy(airsim_interfaces__srv__Takeoff_Request__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__Takeoff_Request__Sequence__fini(array); + } + free(array); +} + + +bool +airsim_interfaces__srv__Takeoff_Response__init(airsim_interfaces__srv__Takeoff_Response * msg) +{ + if (!msg) { + return false; + } + // success + return true; +} + +void +airsim_interfaces__srv__Takeoff_Response__fini(airsim_interfaces__srv__Takeoff_Response * msg) +{ + if (!msg) { + return; + } + // success +} + +airsim_interfaces__srv__Takeoff_Response * +airsim_interfaces__srv__Takeoff_Response__create() +{ + airsim_interfaces__srv__Takeoff_Response * msg = (airsim_interfaces__srv__Takeoff_Response *)malloc(sizeof(airsim_interfaces__srv__Takeoff_Response)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__Takeoff_Response)); + bool success = airsim_interfaces__srv__Takeoff_Response__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__Takeoff_Response__destroy(airsim_interfaces__srv__Takeoff_Response * msg) +{ + if (msg) { + airsim_interfaces__srv__Takeoff_Response__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__Takeoff_Response__Sequence__init(airsim_interfaces__srv__Takeoff_Response__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__Takeoff_Response * data = NULL; + if (size) { + data = (airsim_interfaces__srv__Takeoff_Response *)calloc(size, sizeof(airsim_interfaces__srv__Takeoff_Response)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__Takeoff_Response__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__Takeoff_Response__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__Takeoff_Response__Sequence__fini(airsim_interfaces__srv__Takeoff_Response__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__Takeoff_Response__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__Takeoff_Response__Sequence * +airsim_interfaces__srv__Takeoff_Response__Sequence__create(size_t size) +{ + airsim_interfaces__srv__Takeoff_Response__Sequence * array = (airsim_interfaces__srv__Takeoff_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__Takeoff_Response__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__Takeoff_Response__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__Takeoff_Response__Sequence__destroy(airsim_interfaces__srv__Takeoff_Response__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__Takeoff_Response__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.h new file mode 100644 index 0000000000..bbf93424db --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.h @@ -0,0 +1,223 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/srv/detail/takeoff__struct.h" + +/// Initialize srv/Takeoff message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__Takeoff_Request + * )) before or use + * airsim_interfaces__srv__Takeoff_Request__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Takeoff_Request__init(airsim_interfaces__srv__Takeoff_Request * msg); + +/// Finalize srv/Takeoff message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Takeoff_Request__fini(airsim_interfaces__srv__Takeoff_Request * msg); + +/// Create srv/Takeoff message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__Takeoff_Request__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Takeoff_Request * +airsim_interfaces__srv__Takeoff_Request__create(); + +/// Destroy srv/Takeoff message. +/** + * It calls + * airsim_interfaces__srv__Takeoff_Request__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Takeoff_Request__destroy(airsim_interfaces__srv__Takeoff_Request * msg); + + +/// Initialize array of srv/Takeoff messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__Takeoff_Request__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Takeoff_Request__Sequence__init(airsim_interfaces__srv__Takeoff_Request__Sequence * array, size_t size); + +/// Finalize array of srv/Takeoff messages. +/** + * It calls + * airsim_interfaces__srv__Takeoff_Request__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Takeoff_Request__Sequence__fini(airsim_interfaces__srv__Takeoff_Request__Sequence * array); + +/// Create array of srv/Takeoff messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__Takeoff_Request__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Takeoff_Request__Sequence * +airsim_interfaces__srv__Takeoff_Request__Sequence__create(size_t size); + +/// Destroy array of srv/Takeoff messages. +/** + * It calls + * airsim_interfaces__srv__Takeoff_Request__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Takeoff_Request__Sequence__destroy(airsim_interfaces__srv__Takeoff_Request__Sequence * array); + +/// Initialize srv/Takeoff message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__Takeoff_Response + * )) before or use + * airsim_interfaces__srv__Takeoff_Response__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Takeoff_Response__init(airsim_interfaces__srv__Takeoff_Response * msg); + +/// Finalize srv/Takeoff message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Takeoff_Response__fini(airsim_interfaces__srv__Takeoff_Response * msg); + +/// Create srv/Takeoff message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__Takeoff_Response__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Takeoff_Response * +airsim_interfaces__srv__Takeoff_Response__create(); + +/// Destroy srv/Takeoff message. +/** + * It calls + * airsim_interfaces__srv__Takeoff_Response__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Takeoff_Response__destroy(airsim_interfaces__srv__Takeoff_Response * msg); + + +/// Initialize array of srv/Takeoff messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__Takeoff_Response__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__Takeoff_Response__Sequence__init(airsim_interfaces__srv__Takeoff_Response__Sequence * array, size_t size); + +/// Finalize array of srv/Takeoff messages. +/** + * It calls + * airsim_interfaces__srv__Takeoff_Response__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Takeoff_Response__Sequence__fini(airsim_interfaces__srv__Takeoff_Response__Sequence * array); + +/// Create array of srv/Takeoff messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__Takeoff_Response__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__Takeoff_Response__Sequence * +airsim_interfaces__srv__Takeoff_Response__Sequence__create(size_t size); + +/// Destroy array of srv/Takeoff messages. +/** + * It calls + * airsim_interfaces__srv__Takeoff_Response__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__Takeoff_Response__Sequence__destroy(airsim_interfaces__srv__Takeoff_Response__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..0b4cd5975d --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,87 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__Takeoff_Request( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__Takeoff_Request( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Takeoff_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__Takeoff_Response( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__Takeoff_Response( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Takeoff_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Takeoff)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..6fa39198e4 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,175 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/srv/detail/takeoff__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::Takeoff_Request & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::Takeoff_Request & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::Takeoff_Request & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_Takeoff_Request( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Takeoff_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +// already included above +// #include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::Takeoff_Response & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::Takeoff_Response & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::Takeoff_Response & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_Takeoff_Response( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Takeoff_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rmw/types.h" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Takeoff)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..8de7eea702 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h @@ -0,0 +1,47 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Request)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Response)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..85bf07ff31 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,67 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.h new file mode 100644 index 0000000000..8458a577a9 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.h @@ -0,0 +1,59 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in srv/Takeoff in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__Takeoff_Request +{ + bool wait_on_last_task; +} airsim_interfaces__srv__Takeoff_Request; + +// Struct for a sequence of airsim_interfaces__srv__Takeoff_Request. +typedef struct airsim_interfaces__srv__Takeoff_Request__Sequence +{ + airsim_interfaces__srv__Takeoff_Request * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__Takeoff_Request__Sequence; + + +// Constants defined in the message + +// Struct defined in srv/Takeoff in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__Takeoff_Response +{ + bool success; +} airsim_interfaces__srv__Takeoff_Response; + +// Struct for a sequence of airsim_interfaces__srv__Takeoff_Response. +typedef struct airsim_interfaces__srv__Takeoff_Response__Sequence +{ + airsim_interfaces__srv__Takeoff_Response * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__Takeoff_Response__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.hpp new file mode 100644 index 0000000000..031b366cad --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.hpp @@ -0,0 +1,260 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__Takeoff_Request __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__Takeoff_Request __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct Takeoff_Request_ +{ + using Type = Takeoff_Request_; + + explicit Takeoff_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->wait_on_last_task = false; + } + } + + explicit Takeoff_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->wait_on_last_task = false; + } + } + + // field types and members + using _wait_on_last_task_type = + bool; + _wait_on_last_task_type wait_on_last_task; + + // setters for named parameter idiom + Type & set__wait_on_last_task( + const bool & _arg) + { + this->wait_on_last_task = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::Takeoff_Request_ *; + using ConstRawPtr = + const airsim_interfaces::srv::Takeoff_Request_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__Takeoff_Request + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__Takeoff_Request + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Takeoff_Request_ & other) const + { + if (this->wait_on_last_task != other.wait_on_last_task) { + return false; + } + return true; + } + bool operator!=(const Takeoff_Request_ & other) const + { + return !this->operator==(other); + } +}; // struct Takeoff_Request_ + +// alias to use template instance with default allocator +using Takeoff_Request = + airsim_interfaces::srv::Takeoff_Request_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__Takeoff_Response __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__Takeoff_Response __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct Takeoff_Response_ +{ + using Type = Takeoff_Response_; + + explicit Takeoff_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + explicit Takeoff_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + // field types and members + using _success_type = + bool; + _success_type success; + + // setters for named parameter idiom + Type & set__success( + const bool & _arg) + { + this->success = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::Takeoff_Response_ *; + using ConstRawPtr = + const airsim_interfaces::srv::Takeoff_Response_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__Takeoff_Response + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__Takeoff_Response + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Takeoff_Response_ & other) const + { + if (this->success != other.success) { + return false; + } + return true; + } + bool operator!=(const Takeoff_Response_ & other) const + { + return !this->operator==(other); + } +}; // struct Takeoff_Response_ + +// alias to use template instance with default allocator +using Takeoff_Response = + airsim_interfaces::srv::Takeoff_Response_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + +namespace airsim_interfaces +{ + +namespace srv +{ + +struct Takeoff +{ + using Request = airsim_interfaces::srv::Takeoff_Request; + using Response = airsim_interfaces::srv::Takeoff_Response; +}; + +} // namespace srv + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__traits.hpp new file mode 100644 index 0000000000..9bb81d7d83 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__traits.hpp @@ -0,0 +1,126 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TRAITS_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TRAITS_HPP_ + +#include "airsim_interfaces/srv/detail/takeoff__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::Takeoff_Request"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/Takeoff_Request"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::Takeoff_Response"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/Takeoff_Response"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::Takeoff"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/Takeoff"; +} + +template<> +struct has_fixed_size + : std::integral_constant< + bool, + has_fixed_size::value && + has_fixed_size::value + > +{ +}; + +template<> +struct has_bounded_size + : std::integral_constant< + bool, + has_bounded_size::value && + has_bounded_size::value + > +{ +}; + +template<> +struct is_service + : std::true_type +{ +}; + +template<> +struct is_service_request + : std::true_type +{ +}; + +template<> +struct is_service_response + : std::true_type +{ +}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.c new file mode 100644 index 0000000000..a96e079729 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.c @@ -0,0 +1,224 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/srv/detail/takeoff__functions.h" +#include "airsim_interfaces/srv/detail/takeoff__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__Takeoff_Request__init(message_memory); +} + +void Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_fini_function(void * message_memory) +{ + airsim_interfaces__srv__Takeoff_Request__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_member_array[1] = { + { + "wait_on_last_task", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__Takeoff_Request, wait_on_last_task), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_members = { + "airsim_interfaces__srv", // message namespace + "Takeoff_Request", // message name + 1, // number of fields + sizeof(airsim_interfaces__srv__Takeoff_Request), + Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_member_array, // message members + Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_init_function, // function to initialize message memory (memory has to be allocated) + Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_type_support_handle = { + 0, + &Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Request)() { + if (!Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_type_support_handle.typesupport_identifier) { + Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "rosidl_typesupport_introspection_c/field_types.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +// already included above +// #include "rosidl_typesupport_introspection_c/message_introspection.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff__functions.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__Takeoff_Response__init(message_memory); +} + +void Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_fini_function(void * message_memory) +{ + airsim_interfaces__srv__Takeoff_Response__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_member_array[1] = { + { + "success", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__Takeoff_Response, success), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_members = { + "airsim_interfaces__srv", // message namespace + "Takeoff_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces__srv__Takeoff_Response), + Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_member_array, // message members + Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_init_function, // function to initialize message memory (memory has to be allocated) + Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_type_support_handle = { + 0, + &Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Response)() { + if (!Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_type_support_handle.typesupport_identifier) { + Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/service_introspection.h" + +// this is intentionally not const to allow initialization later to prevent an initialization race +static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_members = { + "airsim_interfaces__srv", // service namespace + "Takeoff", // service name + // these two fields are initialized below on the first access + NULL, // request message + // airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_Request_message_type_support_handle, + NULL // response message + // airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_Response_message_type_support_handle +}; + +static rosidl_service_type_support_t airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_type_support_handle = { + 0, + &airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_members, + get_service_typesupport_handle_function, +}; + +// Forward declaration of request/response type support functions +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Request)(); + +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Response)(); + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff)() { + if (!airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_type_support_handle.typesupport_identifier) { + airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + rosidl_typesupport_introspection_c__ServiceMembers * service_members = + (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_type_support_handle.data; + + if (!service_members->request_members_) { + service_members->request_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Request)()->data; + } + if (!service_members->response_members_) { + service_members->response_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Response)()->data; + } + + return &airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_type_support_handle; +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.cpp new file mode 100644 index 0000000000..34118400bd --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.cpp @@ -0,0 +1,332 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/srv/detail/takeoff__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Takeoff_Request_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::Takeoff_Request(_init); +} + +void Takeoff_Request_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Takeoff_Request(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Takeoff_Request_message_member_array[1] = { + { + "wait_on_last_task", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::Takeoff_Request, wait_on_last_task), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Takeoff_Request_message_members = { + "airsim_interfaces::srv", // message namespace + "Takeoff_Request", // message name + 1, // number of fields + sizeof(airsim_interfaces::srv::Takeoff_Request), + Takeoff_Request_message_member_array, // message members + Takeoff_Request_init_function, // function to initialize message memory (memory has to be allocated) + Takeoff_Request_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Takeoff_Request_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Takeoff_Request_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Takeoff_Request_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff_Request)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Takeoff_Request_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "array" +// already included above +// #include "cstddef" +// already included above +// #include "string" +// already included above +// #include "vector" +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Takeoff_Response_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::Takeoff_Response(_init); +} + +void Takeoff_Response_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Takeoff_Response(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Takeoff_Response_message_member_array[1] = { + { + "success", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::Takeoff_Response, success), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Takeoff_Response_message_members = { + "airsim_interfaces::srv", // message namespace + "Takeoff_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces::srv::Takeoff_Response), + Takeoff_Response_message_member_array, // message members + Takeoff_Response_init_function, // function to initialize message memory (memory has to be allocated) + Takeoff_Response_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Takeoff_Response_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Takeoff_Response_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Takeoff_Response_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff_Response)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Takeoff_Response_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +// this is intentionally not const to allow initialization later to prevent an initialization race +static ::rosidl_typesupport_introspection_cpp::ServiceMembers Takeoff_service_members = { + "airsim_interfaces::srv", // service namespace + "Takeoff", // service name + // these two fields are initialized below on the first access + // see get_service_type_support_handle() + nullptr, // request message + nullptr // response message +}; + +static const rosidl_service_type_support_t Takeoff_service_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Takeoff_service_members, + get_service_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +get_service_type_support_handle() +{ + // get a handle to the value to be returned + auto service_type_support = + &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Takeoff_service_type_support_handle; + // get a non-const and properly typed version of the data void * + auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( + static_cast( + service_type_support->data)); + // make sure that both the request_members_ and the response_members_ are initialized + // if they are not, initialize them + if ( + service_members->request_members_ == nullptr || + service_members->response_members_ == nullptr) + { + // initialize the request_members_ with the static function from the external library + service_members->request_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::Takeoff_Request + >()->data + ); + // initialize the response_members_ with the static function from the external library + service_members->response_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::Takeoff_Response + >()->data + ); + } + // finally return the properly initialized service_type_support handle + return service_type_support; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff)() { + return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.h new file mode 100644 index 0000000000..87ffda7736 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.h @@ -0,0 +1,58 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + Takeoff_Request +)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + Takeoff_Response +)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + Takeoff +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__builder.hpp new file mode 100644 index 0000000000..5b7f0c8e6f --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__builder.hpp @@ -0,0 +1,113 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__BUILDER_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__BUILDER_HPP_ + +#include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" +#include +#include +#include + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_TakeoffGroup_Request_wait_on_last_task +{ +public: + explicit Init_TakeoffGroup_Request_wait_on_last_task(::airsim_interfaces::srv::TakeoffGroup_Request & msg) + : msg_(msg) + {} + ::airsim_interfaces::srv::TakeoffGroup_Request wait_on_last_task(::airsim_interfaces::srv::TakeoffGroup_Request::_wait_on_last_task_type arg) + { + msg_.wait_on_last_task = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::TakeoffGroup_Request msg_; +}; + +class Init_TakeoffGroup_Request_vehicle_names +{ +public: + Init_TakeoffGroup_Request_vehicle_names() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_TakeoffGroup_Request_wait_on_last_task vehicle_names(::airsim_interfaces::srv::TakeoffGroup_Request::_vehicle_names_type arg) + { + msg_.vehicle_names = std::move(arg); + return Init_TakeoffGroup_Request_wait_on_last_task(msg_); + } + +private: + ::airsim_interfaces::srv::TakeoffGroup_Request msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::TakeoffGroup_Request>() +{ + return airsim_interfaces::srv::builder::Init_TakeoffGroup_Request_vehicle_names(); +} + +} // namespace airsim_interfaces + + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace builder +{ + +class Init_TakeoffGroup_Response_success +{ +public: + Init_TakeoffGroup_Response_success() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::airsim_interfaces::srv::TakeoffGroup_Response success(::airsim_interfaces::srv::TakeoffGroup_Response::_success_type arg) + { + msg_.success = std::move(arg); + return std::move(msg_); + } + +private: + ::airsim_interfaces::srv::TakeoffGroup_Response msg_; +}; + +} // namespace builder + +} // namespace srv + +template +auto build(); + +template<> +inline +auto build<::airsim_interfaces::srv::TakeoffGroup_Response>() +{ + return airsim_interfaces::srv::builder::Init_TakeoffGroup_Response_success(); +} + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.c new file mode 100644 index 0000000000..24da8c21e6 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.c @@ -0,0 +1,277 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice +#include "airsim_interfaces/srv/detail/takeoff_group__functions.h" + +#include +#include +#include +#include + +// Include directives for member types +// Member `vehicle_names` +#include "rosidl_runtime_c/string_functions.h" + +bool +airsim_interfaces__srv__TakeoffGroup_Request__init(airsim_interfaces__srv__TakeoffGroup_Request * msg) +{ + if (!msg) { + return false; + } + // vehicle_names + if (!rosidl_runtime_c__String__Sequence__init(&msg->vehicle_names, 0)) { + airsim_interfaces__srv__TakeoffGroup_Request__fini(msg); + return false; + } + // wait_on_last_task + return true; +} + +void +airsim_interfaces__srv__TakeoffGroup_Request__fini(airsim_interfaces__srv__TakeoffGroup_Request * msg) +{ + if (!msg) { + return; + } + // vehicle_names + rosidl_runtime_c__String__Sequence__fini(&msg->vehicle_names); + // wait_on_last_task +} + +airsim_interfaces__srv__TakeoffGroup_Request * +airsim_interfaces__srv__TakeoffGroup_Request__create() +{ + airsim_interfaces__srv__TakeoffGroup_Request * msg = (airsim_interfaces__srv__TakeoffGroup_Request *)malloc(sizeof(airsim_interfaces__srv__TakeoffGroup_Request)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__TakeoffGroup_Request)); + bool success = airsim_interfaces__srv__TakeoffGroup_Request__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__TakeoffGroup_Request__destroy(airsim_interfaces__srv__TakeoffGroup_Request * msg) +{ + if (msg) { + airsim_interfaces__srv__TakeoffGroup_Request__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__TakeoffGroup_Request__Sequence__init(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__TakeoffGroup_Request * data = NULL; + if (size) { + data = (airsim_interfaces__srv__TakeoffGroup_Request *)calloc(size, sizeof(airsim_interfaces__srv__TakeoffGroup_Request)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__TakeoffGroup_Request__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__TakeoffGroup_Request__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__TakeoffGroup_Request__Sequence__fini(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__TakeoffGroup_Request__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__TakeoffGroup_Request__Sequence * +airsim_interfaces__srv__TakeoffGroup_Request__Sequence__create(size_t size) +{ + airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array = (airsim_interfaces__srv__TakeoffGroup_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__TakeoffGroup_Request__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__TakeoffGroup_Request__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__TakeoffGroup_Request__Sequence__destroy(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__TakeoffGroup_Request__Sequence__fini(array); + } + free(array); +} + + +bool +airsim_interfaces__srv__TakeoffGroup_Response__init(airsim_interfaces__srv__TakeoffGroup_Response * msg) +{ + if (!msg) { + return false; + } + // success + return true; +} + +void +airsim_interfaces__srv__TakeoffGroup_Response__fini(airsim_interfaces__srv__TakeoffGroup_Response * msg) +{ + if (!msg) { + return; + } + // success +} + +airsim_interfaces__srv__TakeoffGroup_Response * +airsim_interfaces__srv__TakeoffGroup_Response__create() +{ + airsim_interfaces__srv__TakeoffGroup_Response * msg = (airsim_interfaces__srv__TakeoffGroup_Response *)malloc(sizeof(airsim_interfaces__srv__TakeoffGroup_Response)); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(airsim_interfaces__srv__TakeoffGroup_Response)); + bool success = airsim_interfaces__srv__TakeoffGroup_Response__init(msg); + if (!success) { + free(msg); + return NULL; + } + return msg; +} + +void +airsim_interfaces__srv__TakeoffGroup_Response__destroy(airsim_interfaces__srv__TakeoffGroup_Response * msg) +{ + if (msg) { + airsim_interfaces__srv__TakeoffGroup_Response__fini(msg); + } + free(msg); +} + + +bool +airsim_interfaces__srv__TakeoffGroup_Response__Sequence__init(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + airsim_interfaces__srv__TakeoffGroup_Response * data = NULL; + if (size) { + data = (airsim_interfaces__srv__TakeoffGroup_Response *)calloc(size, sizeof(airsim_interfaces__srv__TakeoffGroup_Response)); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = airsim_interfaces__srv__TakeoffGroup_Response__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + airsim_interfaces__srv__TakeoffGroup_Response__fini(&data[i - 1]); + } + free(data); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +airsim_interfaces__srv__TakeoffGroup_Response__Sequence__fini(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array) +{ + if (!array) { + return; + } + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + airsim_interfaces__srv__TakeoffGroup_Response__fini(&array->data[i]); + } + free(array->data); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +airsim_interfaces__srv__TakeoffGroup_Response__Sequence * +airsim_interfaces__srv__TakeoffGroup_Response__Sequence__create(size_t size) +{ + airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array = (airsim_interfaces__srv__TakeoffGroup_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__TakeoffGroup_Response__Sequence)); + if (!array) { + return NULL; + } + bool success = airsim_interfaces__srv__TakeoffGroup_Response__Sequence__init(array, size); + if (!success) { + free(array); + return NULL; + } + return array; +} + +void +airsim_interfaces__srv__TakeoffGroup_Response__Sequence__destroy(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array) +{ + if (array) { + airsim_interfaces__srv__TakeoffGroup_Response__Sequence__fini(array); + } + free(array); +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.h new file mode 100644 index 0000000000..8348d8c6d8 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.h @@ -0,0 +1,223 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__FUNCTIONS_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#include "airsim_interfaces/srv/detail/takeoff_group__struct.h" + +/// Initialize srv/TakeoffGroup message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__TakeoffGroup_Request + * )) before or use + * airsim_interfaces__srv__TakeoffGroup_Request__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__TakeoffGroup_Request__init(airsim_interfaces__srv__TakeoffGroup_Request * msg); + +/// Finalize srv/TakeoffGroup message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__TakeoffGroup_Request__fini(airsim_interfaces__srv__TakeoffGroup_Request * msg); + +/// Create srv/TakeoffGroup message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__TakeoffGroup_Request__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__TakeoffGroup_Request * +airsim_interfaces__srv__TakeoffGroup_Request__create(); + +/// Destroy srv/TakeoffGroup message. +/** + * It calls + * airsim_interfaces__srv__TakeoffGroup_Request__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__TakeoffGroup_Request__destroy(airsim_interfaces__srv__TakeoffGroup_Request * msg); + + +/// Initialize array of srv/TakeoffGroup messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__TakeoffGroup_Request__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__TakeoffGroup_Request__Sequence__init(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array, size_t size); + +/// Finalize array of srv/TakeoffGroup messages. +/** + * It calls + * airsim_interfaces__srv__TakeoffGroup_Request__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__TakeoffGroup_Request__Sequence__fini(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array); + +/// Create array of srv/TakeoffGroup messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__TakeoffGroup_Request__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__TakeoffGroup_Request__Sequence * +airsim_interfaces__srv__TakeoffGroup_Request__Sequence__create(size_t size); + +/// Destroy array of srv/TakeoffGroup messages. +/** + * It calls + * airsim_interfaces__srv__TakeoffGroup_Request__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__TakeoffGroup_Request__Sequence__destroy(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array); + +/// Initialize srv/TakeoffGroup message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * airsim_interfaces__srv__TakeoffGroup_Response + * )) before or use + * airsim_interfaces__srv__TakeoffGroup_Response__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__TakeoffGroup_Response__init(airsim_interfaces__srv__TakeoffGroup_Response * msg); + +/// Finalize srv/TakeoffGroup message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__TakeoffGroup_Response__fini(airsim_interfaces__srv__TakeoffGroup_Response * msg); + +/// Create srv/TakeoffGroup message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * airsim_interfaces__srv__TakeoffGroup_Response__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__TakeoffGroup_Response * +airsim_interfaces__srv__TakeoffGroup_Response__create(); + +/// Destroy srv/TakeoffGroup message. +/** + * It calls + * airsim_interfaces__srv__TakeoffGroup_Response__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__TakeoffGroup_Response__destroy(airsim_interfaces__srv__TakeoffGroup_Response * msg); + + +/// Initialize array of srv/TakeoffGroup messages. +/** + * It allocates the memory for the number of elements and calls + * airsim_interfaces__srv__TakeoffGroup_Response__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +bool +airsim_interfaces__srv__TakeoffGroup_Response__Sequence__init(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array, size_t size); + +/// Finalize array of srv/TakeoffGroup messages. +/** + * It calls + * airsim_interfaces__srv__TakeoffGroup_Response__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__TakeoffGroup_Response__Sequence__fini(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array); + +/// Create array of srv/TakeoffGroup messages. +/** + * It allocates the memory for the array and calls + * airsim_interfaces__srv__TakeoffGroup_Response__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +airsim_interfaces__srv__TakeoffGroup_Response__Sequence * +airsim_interfaces__srv__TakeoffGroup_Response__Sequence__create(size_t size); + +/// Destroy array of srv/TakeoffGroup messages. +/** + * It calls + * airsim_interfaces__srv__TakeoffGroup_Response__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +void +airsim_interfaces__srv__TakeoffGroup_Response__Sequence__destroy(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000000..68a25ab46b --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,87 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__TakeoffGroup_Request( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__TakeoffGroup_Request( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, TakeoffGroup_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t get_serialized_size_airsim_interfaces__srv__TakeoffGroup_Response( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +size_t max_serialized_size_airsim_interfaces__srv__TakeoffGroup_Response( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, TakeoffGroup_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, TakeoffGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000000..ea245d7331 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,175 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::TakeoffGroup_Request & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::TakeoffGroup_Request & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::TakeoffGroup_Request & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_TakeoffGroup_Request( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, TakeoffGroup_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +// already included above +// #include "fastcdr/Cdr.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_serialize( + const airsim_interfaces::srv::TakeoffGroup_Response & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + airsim_interfaces::srv::TakeoffGroup_Response & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +get_serialized_size( + const airsim_interfaces::srv::TakeoffGroup_Response & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +max_serialized_size_TakeoffGroup_Response( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace srv + +} // namespace airsim_interfaces + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, TakeoffGroup_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rmw/types.h" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, TakeoffGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000000..48d4986db4 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h @@ -0,0 +1,47 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Request)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Response)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000000..933594ff3a --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,67 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup_Request)(); + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup_Response)(); + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.h new file mode 100644 index 0000000000..2ea65c4902 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.h @@ -0,0 +1,64 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'vehicle_names' +#include "rosidl_runtime_c/string.h" + +// Struct defined in srv/TakeoffGroup in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__TakeoffGroup_Request +{ + rosidl_runtime_c__String__Sequence vehicle_names; + bool wait_on_last_task; +} airsim_interfaces__srv__TakeoffGroup_Request; + +// Struct for a sequence of airsim_interfaces__srv__TakeoffGroup_Request. +typedef struct airsim_interfaces__srv__TakeoffGroup_Request__Sequence +{ + airsim_interfaces__srv__TakeoffGroup_Request * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__TakeoffGroup_Request__Sequence; + + +// Constants defined in the message + +// Struct defined in srv/TakeoffGroup in the package airsim_interfaces. +typedef struct airsim_interfaces__srv__TakeoffGroup_Response +{ + bool success; +} airsim_interfaces__srv__TakeoffGroup_Response; + +// Struct for a sequence of airsim_interfaces__srv__TakeoffGroup_Response. +typedef struct airsim_interfaces__srv__TakeoffGroup_Response__Sequence +{ + airsim_interfaces__srv__TakeoffGroup_Response * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} airsim_interfaces__srv__TakeoffGroup_Response__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.hpp new file mode 100644 index 0000000000..bc5ce40d38 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.hpp @@ -0,0 +1,272 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Request __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Request __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct TakeoffGroup_Request_ +{ + using Type = TakeoffGroup_Request_; + + explicit TakeoffGroup_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->wait_on_last_task = false; + } + } + + explicit TakeoffGroup_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->wait_on_last_task = false; + } + } + + // field types and members + using _vehicle_names_type = + std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other>; + _vehicle_names_type vehicle_names; + using _wait_on_last_task_type = + bool; + _wait_on_last_task_type wait_on_last_task; + + // setters for named parameter idiom + Type & set__vehicle_names( + const std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other> & _arg) + { + this->vehicle_names = _arg; + return *this; + } + Type & set__wait_on_last_task( + const bool & _arg) + { + this->wait_on_last_task = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::TakeoffGroup_Request_ *; + using ConstRawPtr = + const airsim_interfaces::srv::TakeoffGroup_Request_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Request + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Request + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const TakeoffGroup_Request_ & other) const + { + if (this->vehicle_names != other.vehicle_names) { + return false; + } + if (this->wait_on_last_task != other.wait_on_last_task) { + return false; + } + return true; + } + bool operator!=(const TakeoffGroup_Request_ & other) const + { + return !this->operator==(other); + } +}; // struct TakeoffGroup_Request_ + +// alias to use template instance with default allocator +using TakeoffGroup_Request = + airsim_interfaces::srv::TakeoffGroup_Request_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + + +#ifndef _WIN32 +# define DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Response __attribute__((deprecated)) +#else +# define DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Response __declspec(deprecated) +#endif + +namespace airsim_interfaces +{ + +namespace srv +{ + +// message struct +template +struct TakeoffGroup_Response_ +{ + using Type = TakeoffGroup_Response_; + + explicit TakeoffGroup_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + explicit TakeoffGroup_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->success = false; + } + } + + // field types and members + using _success_type = + bool; + _success_type success; + + // setters for named parameter idiom + Type & set__success( + const bool & _arg) + { + this->success = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + airsim_interfaces::srv::TakeoffGroup_Response_ *; + using ConstRawPtr = + const airsim_interfaces::srv::TakeoffGroup_Response_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Response + std::shared_ptr> + Ptr; + typedef DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Response + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const TakeoffGroup_Response_ & other) const + { + if (this->success != other.success) { + return false; + } + return true; + } + bool operator!=(const TakeoffGroup_Response_ & other) const + { + return !this->operator==(other); + } +}; // struct TakeoffGroup_Response_ + +// alias to use template instance with default allocator +using TakeoffGroup_Response = + airsim_interfaces::srv::TakeoffGroup_Response_>; + +// constant definitions + +} // namespace srv + +} // namespace airsim_interfaces + +namespace airsim_interfaces +{ + +namespace srv +{ + +struct TakeoffGroup +{ + using Request = airsim_interfaces::srv::TakeoffGroup_Request; + using Response = airsim_interfaces::srv::TakeoffGroup_Response; +}; + +} // namespace srv + +} // namespace airsim_interfaces + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__traits.hpp new file mode 100644 index 0000000000..b24cc6e623 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__traits.hpp @@ -0,0 +1,126 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TRAITS_HPP_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TRAITS_HPP_ + +#include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::TakeoffGroup_Request"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/TakeoffGroup_Request"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::TakeoffGroup_Response"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/TakeoffGroup_Response"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "airsim_interfaces::srv::TakeoffGroup"; +} + +template<> +inline const char * name() +{ + return "airsim_interfaces/srv/TakeoffGroup"; +} + +template<> +struct has_fixed_size + : std::integral_constant< + bool, + has_fixed_size::value && + has_fixed_size::value + > +{ +}; + +template<> +struct has_bounded_size + : std::integral_constant< + bool, + has_bounded_size::value && + has_bounded_size::value + > +{ +}; + +template<> +struct is_service + : std::true_type +{ +}; + +template<> +struct is_service_request + : std::true_type +{ +}; + +template<> +struct is_service_response + : std::true_type +{ +}; + +} // namespace rosidl_generator_traits + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.c new file mode 100644 index 0000000000..5e9c21b55e --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.c @@ -0,0 +1,243 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#include +#include "airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h" +#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "airsim_interfaces/srv/detail/takeoff_group__functions.h" +#include "airsim_interfaces/srv/detail/takeoff_group__struct.h" + + +// Include directives for member types +// Member `vehicle_names` +#include "rosidl_runtime_c/string_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__TakeoffGroup_Request__init(message_memory); +} + +void TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_fini_function(void * message_memory) +{ + airsim_interfaces__srv__TakeoffGroup_Request__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_member_array[2] = { + { + "vehicle_names", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__TakeoffGroup_Request, vehicle_names), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "wait_on_last_task", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__TakeoffGroup_Request, wait_on_last_task), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_members = { + "airsim_interfaces__srv", // message namespace + "TakeoffGroup_Request", // message name + 2, // number of fields + sizeof(airsim_interfaces__srv__TakeoffGroup_Request), + TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_member_array, // message members + TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_init_function, // function to initialize message memory (memory has to be allocated) + TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_type_support_handle = { + 0, + &TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Request)() { + if (!TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_type_support_handle.typesupport_identifier) { + TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +// already included above +// #include +// already included above +// #include "airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "rosidl_typesupport_introspection_c/field_types.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +// already included above +// #include "rosidl_typesupport_introspection_c/message_introspection.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff_group__functions.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff_group__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + airsim_interfaces__srv__TakeoffGroup_Response__init(message_memory); +} + +void TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_fini_function(void * message_memory) +{ + airsim_interfaces__srv__TakeoffGroup_Response__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_member_array[1] = { + { + "success", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces__srv__TakeoffGroup_Response, success), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_members = { + "airsim_interfaces__srv", // message namespace + "TakeoffGroup_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces__srv__TakeoffGroup_Response), + TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_member_array, // message members + TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_init_function, // function to initialize message memory (memory has to be allocated) + TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_type_support_handle = { + 0, + &TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Response)() { + if (!TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_type_support_handle.typesupport_identifier) { + TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h" +// already included above +// #include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/service_introspection.h" + +// this is intentionally not const to allow initialization later to prevent an initialization race +static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_members = { + "airsim_interfaces__srv", // service namespace + "TakeoffGroup", // service name + // these two fields are initialized below on the first access + NULL, // request message + // airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_type_support_handle, + NULL // response message + // airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_type_support_handle +}; + +static rosidl_service_type_support_t airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_type_support_handle = { + 0, + &airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_members, + get_service_typesupport_handle_function, +}; + +// Forward declaration of request/response type support functions +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Request)(); + +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Response)(); + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup)() { + if (!airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_type_support_handle.typesupport_identifier) { + airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + rosidl_typesupport_introspection_c__ServiceMembers * service_members = + (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_type_support_handle.data; + + if (!service_members->request_members_) { + service_members->request_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Request)()->data; + } + if (!service_members->response_members_) { + service_members->response_members_ = + (const rosidl_typesupport_introspection_c__MessageMembers *) + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Response)()->data; + } + + return &airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_type_support_handle; +} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.cpp new file mode 100644 index 0000000000..c6e19e1488 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.cpp @@ -0,0 +1,374 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void TakeoffGroup_Request_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::TakeoffGroup_Request(_init); +} + +void TakeoffGroup_Request_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~TakeoffGroup_Request(); +} + +size_t size_function__TakeoffGroup_Request__vehicle_names(const void * untyped_member) +{ + const auto * member = reinterpret_cast *>(untyped_member); + return member->size(); +} + +const void * get_const_function__TakeoffGroup_Request__vehicle_names(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__TakeoffGroup_Request__vehicle_names(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void resize_function__TakeoffGroup_Request__vehicle_names(void * untyped_member, size_t size) +{ + auto * member = + reinterpret_cast *>(untyped_member); + member->resize(size); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember TakeoffGroup_Request_message_member_array[2] = { + { + "vehicle_names", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::TakeoffGroup_Request, vehicle_names), // bytes offset in struct + nullptr, // default value + size_function__TakeoffGroup_Request__vehicle_names, // size() function pointer + get_const_function__TakeoffGroup_Request__vehicle_names, // get_const(index) function pointer + get_function__TakeoffGroup_Request__vehicle_names, // get(index) function pointer + resize_function__TakeoffGroup_Request__vehicle_names // resize(index) function pointer + }, + { + "wait_on_last_task", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::TakeoffGroup_Request, wait_on_last_task), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers TakeoffGroup_Request_message_members = { + "airsim_interfaces::srv", // message namespace + "TakeoffGroup_Request", // message name + 2, // number of fields + sizeof(airsim_interfaces::srv::TakeoffGroup_Request), + TakeoffGroup_Request_message_member_array, // message members + TakeoffGroup_Request_init_function, // function to initialize message memory (memory has to be allocated) + TakeoffGroup_Request_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t TakeoffGroup_Request_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &TakeoffGroup_Request_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::TakeoffGroup_Request_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup_Request)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::TakeoffGroup_Request_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +// already included above +// #include "array" +// already included above +// #include "cstddef" +// already included above +// #include "string" +// already included above +// #include "vector" +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void TakeoffGroup_Response_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) airsim_interfaces::srv::TakeoffGroup_Response(_init); +} + +void TakeoffGroup_Response_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~TakeoffGroup_Response(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember TakeoffGroup_Response_message_member_array[1] = { + { + "success", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(airsim_interfaces::srv::TakeoffGroup_Response, success), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers TakeoffGroup_Response_message_members = { + "airsim_interfaces::srv", // message namespace + "TakeoffGroup_Response", // message name + 1, // number of fields + sizeof(airsim_interfaces::srv::TakeoffGroup_Response), + TakeoffGroup_Response_message_member_array, // message members + TakeoffGroup_Response_init_function, // function to initialize message memory (memory has to be allocated) + TakeoffGroup_Response_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t TakeoffGroup_Response_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &TakeoffGroup_Response_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::TakeoffGroup_Response_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup_Response)() { + return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::TakeoffGroup_Response_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif + +#include "rosidl_runtime_c/service_type_support_struct.h" +// already included above +// #include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +// already included above +// #include "rosidl_typesupport_interface/macros.h" +// already included above +// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" +// already included above +// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" + +namespace airsim_interfaces +{ + +namespace srv +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +// this is intentionally not const to allow initialization later to prevent an initialization race +static ::rosidl_typesupport_introspection_cpp::ServiceMembers TakeoffGroup_service_members = { + "airsim_interfaces::srv", // service namespace + "TakeoffGroup", // service name + // these two fields are initialized below on the first access + // see get_service_type_support_handle() + nullptr, // request message + nullptr // response message +}; + +static const rosidl_service_type_support_t TakeoffGroup_service_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &TakeoffGroup_service_members, + get_service_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace srv + +} // namespace airsim_interfaces + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +get_service_type_support_handle() +{ + // get a handle to the value to be returned + auto service_type_support = + &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::TakeoffGroup_service_type_support_handle; + // get a non-const and properly typed version of the data void * + auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( + static_cast( + service_type_support->data)); + // make sure that both the request_members_ and the response_members_ are initialized + // if they are not, initialize them + if ( + service_members->request_members_ == nullptr || + service_members->response_members_ == nullptr) + { + // initialize the request_members_ with the static function from the external library + service_members->request_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::TakeoffGroup_Request + >()->data + ); + // initialize the response_members_ with the static function from the external library + service_members->response_members_ = static_cast< + const ::rosidl_typesupport_introspection_cpp::MessageMembers * + >( + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< + ::airsim_interfaces::srv::TakeoffGroup_Response + >()->data + ); + } + // finally return the properly initialized service_type_support handle + return service_type_support; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup)() { + return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); +} + +#ifdef __cplusplus +} +#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.h new file mode 100644 index 0000000000..00daad0cdc --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.h @@ -0,0 +1,58 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TYPE_SUPPORT_H_ +#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + TakeoffGroup_Request +)(); + +// already included above +// #include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + TakeoffGroup_Response +)(); + +#include "rosidl_runtime_c/service_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces +const rosidl_service_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( + rosidl_typesupport_c, + airsim_interfaces, + srv, + TakeoffGroup +)(); + +#ifdef __cplusplus +} +#endif + +#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.h new file mode 100644 index 0000000000..6fbbdc0d1e --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__LAND_H_ +#define AIRSIM_INTERFACES__SRV__LAND_H_ + +#include "airsim_interfaces/srv/detail/land__struct.h" +#include "airsim_interfaces/srv/detail/land__functions.h" +#include "airsim_interfaces/srv/detail/land__type_support.h" + +#endif // AIRSIM_INTERFACES__SRV__LAND_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.hpp new file mode 100644 index 0000000000..f736ea8a6a --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__LAND_HPP_ +#define AIRSIM_INTERFACES__SRV__LAND_HPP_ + +#include "airsim_interfaces/srv/detail/land__struct.hpp" +#include "airsim_interfaces/srv/detail/land__builder.hpp" +#include "airsim_interfaces/srv/detail/land__traits.hpp" + +#endif // AIRSIM_INTERFACES__SRV__LAND_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.h new file mode 100644 index 0000000000..7f13b69051 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__LAND_GROUP_H_ +#define AIRSIM_INTERFACES__SRV__LAND_GROUP_H_ + +#include "airsim_interfaces/srv/detail/land_group__struct.h" +#include "airsim_interfaces/srv/detail/land_group__functions.h" +#include "airsim_interfaces/srv/detail/land_group__type_support.h" + +#endif // AIRSIM_INTERFACES__SRV__LAND_GROUP_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.hpp new file mode 100644 index 0000000000..e38781b91f --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__LAND_GROUP_HPP_ +#define AIRSIM_INTERFACES__SRV__LAND_GROUP_HPP_ + +#include "airsim_interfaces/srv/detail/land_group__struct.hpp" +#include "airsim_interfaces/srv/detail/land_group__builder.hpp" +#include "airsim_interfaces/srv/detail/land_group__traits.hpp" + +#endif // AIRSIM_INTERFACES__SRV__LAND_GROUP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.h new file mode 100644 index 0000000000..e8bfc59e6d --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__RESET_H_ +#define AIRSIM_INTERFACES__SRV__RESET_H_ + +#include "airsim_interfaces/srv/detail/reset__struct.h" +#include "airsim_interfaces/srv/detail/reset__functions.h" +#include "airsim_interfaces/srv/detail/reset__type_support.h" + +#endif // AIRSIM_INTERFACES__SRV__RESET_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.hpp new file mode 100644 index 0000000000..fc1396833a --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__RESET_HPP_ +#define AIRSIM_INTERFACES__SRV__RESET_HPP_ + +#include "airsim_interfaces/srv/detail/reset__struct.hpp" +#include "airsim_interfaces/srv/detail/reset__builder.hpp" +#include "airsim_interfaces/srv/detail/reset__traits.hpp" + +#endif // AIRSIM_INTERFACES__SRV__RESET_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.h new file mode 100644 index 0000000000..f60d1f27a7 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_H_ +#define AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_H_ + +#include "airsim_interfaces/srv/detail/set_gps_position__struct.h" +#include "airsim_interfaces/srv/detail/set_gps_position__functions.h" +#include "airsim_interfaces/srv/detail/set_gps_position__type_support.h" + +#endif // AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.hpp new file mode 100644 index 0000000000..645d68c8ca --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_HPP_ +#define AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_HPP_ + +#include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" +#include "airsim_interfaces/srv/detail/set_gps_position__builder.hpp" +#include "airsim_interfaces/srv/detail/set_gps_position__traits.hpp" + +#endif // AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.h new file mode 100644 index 0000000000..4e188fa721 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_H_ +#define AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_H_ + +#include "airsim_interfaces/srv/detail/set_local_position__struct.h" +#include "airsim_interfaces/srv/detail/set_local_position__functions.h" +#include "airsim_interfaces/srv/detail/set_local_position__type_support.h" + +#endif // AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.hpp new file mode 100644 index 0000000000..091dabbd2c --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_HPP_ +#define AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_HPP_ + +#include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" +#include "airsim_interfaces/srv/detail/set_local_position__builder.hpp" +#include "airsim_interfaces/srv/detail/set_local_position__traits.hpp" + +#endif // AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.h new file mode 100644 index 0000000000..164d8cdf02 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__TAKEOFF_H_ +#define AIRSIM_INTERFACES__SRV__TAKEOFF_H_ + +#include "airsim_interfaces/srv/detail/takeoff__struct.h" +#include "airsim_interfaces/srv/detail/takeoff__functions.h" +#include "airsim_interfaces/srv/detail/takeoff__type_support.h" + +#endif // AIRSIM_INTERFACES__SRV__TAKEOFF_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.hpp new file mode 100644 index 0000000000..4afa2fcdef --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__TAKEOFF_HPP_ +#define AIRSIM_INTERFACES__SRV__TAKEOFF_HPP_ + +#include "airsim_interfaces/srv/detail/takeoff__struct.hpp" +#include "airsim_interfaces/srv/detail/takeoff__builder.hpp" +#include "airsim_interfaces/srv/detail/takeoff__traits.hpp" + +#endif // AIRSIM_INTERFACES__SRV__TAKEOFF_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.h new file mode 100644 index 0000000000..8dff46f2c5 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_H_ +#define AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_H_ + +#include "airsim_interfaces/srv/detail/takeoff_group__struct.h" +#include "airsim_interfaces/srv/detail/takeoff_group__functions.h" +#include "airsim_interfaces/srv/detail/takeoff_group__type_support.h" + +#endif // AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.hpp new file mode 100644 index 0000000000..e8836e8e45 --- /dev/null +++ b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.hpp @@ -0,0 +1,11 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_HPP_ +#define AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_HPP_ + +#include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" +#include "airsim_interfaces/srv/detail/takeoff_group__builder.hpp" +#include "airsim_interfaces/srv/detail/takeoff_group__traits.hpp" + +#endif // AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_HPP_ diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__python.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__python.so new file mode 100644 index 0000000000000000000000000000000000000000..ab166d89ab5f3bebc969862b41bcbc5a3d844d2b GIT binary patch literal 120504 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 literal 0 HcmV?d00001 diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_generator_c.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_generator_c.so new file mode 100644 index 0000000000000000000000000000000000000000..aa01904c4ef8a3edee65de6874c8e5e8aa7ef53c GIT binary patch literal 91512 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 literal 0 HcmV?d00001 diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_c.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_c.so new file mode 100644 index 0000000000000000000000000000000000000000..60136a09e40dbf4e008e29a5993db6c316c5bc3c GIT binary patch literal 64808 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 OP1WPysUuoG{(k@%fB(z? literal 0 HcmV?d00001 diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_cpp.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_cpp.so new file mode 100644 index 0000000000000000000000000000000000000000..af85d5adeef8dab06f7bfccd81bd9ab1ef9a7fe9 GIT binary patch literal 75624 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

LD~jNd^cnvDhdo=I&9F`+{Y-gOntPBt@fkXlAxn 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 Nrl8c#2=bEr{|C^uQ11W$ literal 0 HcmV?d00001 diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_fastrtps_cpp.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_fastrtps_cpp.so new file mode 100644 index 0000000000000000000000000000000000000000..f582fab7d093065080b7bae665e2fabad8af8c21 GIT binary patch literal 172656 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 literal 0 HcmV?d00001 diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_introspection_cpp.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_introspection_cpp.so new file mode 100644 index 0000000000000000000000000000000000000000..5329012330331f7b73e5378be0472fe6a3916da3 GIT binary patch literal 166488 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 literal 0 HcmV?d00001 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/__init__.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_c.cpython-38-x86_64-linux-gnu.so b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_c.cpython-38-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..8215ac5d5f23340b412b93b5dd3b9d40a97cbe12 GIT binary patch literal 74936 zcmeHw33yaR*7k*fEVd98w^1~>qGF5#C@yF)2BLyQ2oCD6O_MYb&1TX;q9RdTa8L&n z9UM29aT`Azam008;B&)m21ZoegNg=04TvM^X#TgVPF2^fzUOv#M!x6&o}c?X$?5af zsXBE|y;XPVdvDJu9yz>or%s;Ua=ha`shz8kLMnK?Z_=jF8{%#66?%JldrI3bx^jSQ z9ic!iy*1C$1rAl|@$)_n?OS_)*w}9$7^7;J~uBBaXI}|m)rplY&_sjdbDc$Q% zlKR;hs;D=I>dm2gTDDMHwA9r_AI0B&qJaRJCsEJS(yh0g>bY`%s;8y!A-1t=6BQlt zS4#C(J*wJqk|=Z%&`Iej|##9q~64f1<9)d9#u;wj1$xv;5?F^C54e z&v!yD#NU?cT^_q@$mcUozx<+Oj(+fp{6&A=waYF`nxAOB;?nCsdZRYy-R(JNDQ=oORgrOV8W=ju}rSo_gW=mACw}_{7;&dq4BQW8V+@uOG%8dUW53 zKXzL>X8pwNE;{#x&u)A5jBiH2(QVPV>>pgYn;EfP?yZHi!{~w=nhxMuP3n zVB%^3xr5q&8pH|0kLn$aUkXwN+0WiP7=L}AVEmrG!T4uP`-krrZ2tn&&u=g>g8Dfe z9LWpd$(COQ+mFDc3To$hCf-TA1luRjNKiW~b`8dFLLYI2vZ+BtVw?bwe_>^h?T4r6XVDi?)@MJq?TrOt% zIRN8}Dk)och9`|M4$9}d%zTOW3$~xnjAJimeZGgu!>i~_P=9V>*0GD3_2DRnCp$9Z zSjWuYTbR6wV-utDYL(x#H=R| zGyK_?iR%TXKWmtFCNaF-#H{C+GjYvj_;4CCPxoimne7<J*! z+`ne{mc!)X24;U(!W_TVG3#U-Gfy`#e&;j$>-(5>1It_BI#!q`){Thw(~U5|wlCrl z+YWLaj(7()DSd_#Uanj}Bi{4kLc{^e z^APdoRQvG(a$Smet+V}jt2`cvcq?ZqT=%n^9LI=vO1O}_a{fL0}=0%`O047-^y`}cn@CXZ)dIK zZNzJuq*4xN#m~Za>@UQ_iW7H&a;x|5pS;wKfa6PXT*DJiXR^CDo?V@actfJTw#kd? zp2_wTO?7edG+BCz#)PYAT=6;DK~;|&e5$#Gc} z)n!v+H5KT6G>dez9khn#^u|~s%aJivvKyES;7N`P7lAMB+PZ^TPp!VSlTKOTb6z_3 z%-DtLX8@U{&uv{pv?+EW>u<6u&mw)tlXJc+@zwn`4InAsp;Gd6);dL{`Z!;G?r!SUM)o~mwrA?V-nKoxJ-74$XSY)2FfGS%hXC_d#^Tjn&E9+}( zs^c{{hD|e7eYR;67f-g#dbeycPhMc9t&%<~;Ghs1>ZeAdW8;YtrDIER%$caf*}$0i z1&uhY4$Ea|wXn3xiVZl96^9^o+9QtMrAxMlY>kXk9_}>R#4kMnAz5N0O&N=Zy4sqC z&?Pk3jjq?B(NLAyP6iE!_Lsql5IY`j8~-x{Lcu0aAw~bxDP&+zL(a|`;`LK2%QHVa z3m7^!>1DC=BCp&)xPLdKD7 zSXamQ+uL#l+4c>e(+nd1xTgjjTM_&vxoKl`(=*D%GER#))3!OYBVcJJlQ;4m-)$>iUh0dm}v!5}O zfF12IadA?b>7@(DI_((O%huEGXZ&WFPb040RvA%W>}m69C>lOl; zZQWtSZ73(#R3-xM;=ossK__m>`&No1VSepZRZa{T!@8!#l-ip7hFVdsl!5s}pywZv zU%=D}@<%NMcp&S^@tSyjEK!RuIE8JhArnY`x$4zn1BV#Yu+w?NsoIry=Jd!PE-nLv8ohYH7S zWnL%sQU0H1;dD!*#G5UgZW)vKEDOgib7q@k;kXshZ1XJ~x2l?LfraB%J+s|s;kc#E zY>O=%x2~D(aSO+-dS+W{;kfnDY|AYiw@R9Ag@x~JP|sU!;dvI`V&VH*c&mlu);qJc zS@;14#j|l1exQYWA1OtQSAPrdZsCVoc&>%#Tlnr4ez=9_S$Khk_qXtY7G7ZCM_Kp~ z3qQ`n3oX3R!b>dtL<=vq@L~%eZ{ep}_yh|dY2i~We3XUPS@>uRpJw5u7T#>(V=R1@ zg_l|Q91B0w!slD~Sr)#)!q2tv`z)Mp6_urnEj(`7KW^c4tEenpYT@>3x!l6*taesd zINb^?OIKU?RLj1_!lzkytA$@|;cXUvsfBN`@XIZH_ZFpyH73Wx^DO*o3-52?xFy(Z z1r{#mlHP{2s86E(8#D-6*rF7H>or;+B`xB==Lwu{rImVVixd*4TYe=l-oj@p6ZwCF zh2z$1vrVz^UIz8NIt%Y@;nOS}x9FR#*}`uzsOQbHaNI&{wmBA#Tcgc3-@ciZrPWmr4~NKvLA2Zvn_mrh5ydNr&##W7G7uJ z$5{9@3qRJvn=Sk{3!i1-LoIxcg&%L>^DX=Y3twR2*IM{}7Cz6y7hCu+3xC|ge{bPS zExgFWms|Kr7QVv5hgavW2%<_?;HM#llaqaPMQK2>#Ep@a`6V zm4)Y8_-`$IcMCtw!t*TrbPMlq;bSelz{1B__z(*}!@>(K{5KX}V&UU0ywt+aw(#*5 z{(mfdf`y-B;ZrO;YT>@ctHlp@kP%c$0+>vG9v5ywJk0 zwD1xOzr?~zEquC#kGJr-7CynkXIS_Y3%|p{>nyz4!lzmIWftCS;kR1&wvXE~uq^}I zGO#TJ+cK~%1KTp7Gw@CCy?-c~xuJW>?5^u@K3a0+(nRO>6(uvD@BW-LX&?MC;7#oZ zd;-yXA5YlJ>uj6Wt!Zy>pCk27Fx|9nrO`V}eVNg7r2df6yGVVZ(Ys20uF=JXs!i)I zGrBmK+_dfjql*huo7TmQ-b3oA8@;F0hZ$X5Xxg;y2%|@&-p}YeNPS16iwjVj)^##^ zZ>ewmS;s3bI3a$c?DHmzG`ba7#6)4GR@-bd;SjlPT2=NesHSVH_p-%aWl z7=3rC$BZs6ENxnMy3xf2rA_OG8GTQwA7ONHVQJI4en#&r^&O4Ax70fseIKcB{7J{3 zC-pT(?m50&~6Mi&>F5WmsI1*T2wb~Jjv)H@mdaH((nw~oI+>T8UCgw$6WU0i^|_#1to z)E_dsxDd5z-9n=emik15WmsIg(8f<(ZvNK@Zadi zNxh%Zhe~}%ql*hc;J?vNkov|Sb^L`=Ut{!PQeSEG6Q#b)=tWY0$ml0YeWB5dr9Ri_ z!=-+i(ML%A0;88mJ!W)q!3Oag{S>JWGy17gKf>rErQXlzqols0(ZvN9#BcP`Qs4N4 zj=xmuYm9!n)K?mPjMSGIU0jgC{5N`;)E63koYdzUU0jgC_#0hZh{5`2ba4R&<8Smc zrGC26&yxBuql*hO7=NRS3o_up(a(|kjz&LM>Ya=(F34dTB?F7=0uULo~`MvqH6vS`z$x^?-=wb(i_>C?ulwkagE-sLO|3()VMi9Tz z#RU<>Z}e)Z@2GX`?e4x>?Cro)v44a9d^urwe07viZ=({-j4vyZ{ z(SLHr`&&o<($UvC`Uj5wrlY^^=r1_>(~ka#qd(y2Em2<`N1yKKjgDUJ z=y69s$I-_*`Y1;)cJ!f+KG@L@bMyloy|1J1;^;d#dRIsP=_>#H{?^gIbo8~3{(+;v z>FBRJ`U{T!w4*=b=npvh-Hv{{qu=D{*E#x?jy~Pd8y&sc(c_MOj-!ur^ihsp?C3)s zeXye+=I94FdS6H1#nE?g^sbKn)0NKnJNlQ7zShw{aP&7F{dGrw!O@>~^hX^10Y|^v z(QkM3n;iW*N54|*CD#q@hg_6g*Y#II9K9v63r+>kxJ;c2_GoYEy-zdtj^1-5VZRY| zORgLIg%Ah-TyjlY$+E9bC|R~8r=-)1B`beU^g#n_QAwOjc5iQ)B=@7bzSy5O4;A5i zjfajanK|?rSb8PbtW88pW)JNJytQdddwXjIPQG63D#Ge?4(b~JqW-!IQ8*5DaN?R* za?SKD*EDV}xn^8z$?RhMp>L(_^5ZqR8o6?5BbrC)H7~WECk|_0evazriuxrpr*H8R zyTf8j$uo&M)Ek(~tt|?xP?yUA2dp-`VeccD0U@&{!YP7l> zS--1LWb38Yc{n(mRs44I^tU}RVyFbLKPvQowD|3H_lZg`6}O1ieSS)WpH>{$!cPnQ zv=~2)%1;aVNsylbj-M9cXDQAMrJq9Or`7Q@yX*8zRX3+ASFLc>YFzbHu0+B_NW;k0 zGGx^bNsiVy?dnbVKuB#Vu3o{{E}~OADOYW9)n;7XDQe9g*G8^-k*hN-S39AsO*HTY z&i6!A>#N~si}0gH`+FE$NrdISND30Dc+=QT4%GUi;75$T20+n@0!Vl>6 zQtRc~PgmJ~k|E07dEaG1t^}+sUZyA4H;5t~xkgjBkFvUL$n`4NnE|mhRW z{lAh?8FF1mu3U0O&@Vr^PEoFSay5~kxsD%6t^>56U~=7#l%-#}e)CP1pL)lSB-eJ@4@<6@_?B37^EqS}A%&8wmRxmn zTuE}>id2V_OT0r=xEilqg_3Ikxw>t0GJA$x1?0*l*GCvfKe@g{PZ1SQu1|4oNc3rt z<42NfIjAW@S|3cVHpG#hT&HZzl3YitK8NlWM^U$@BVv0+k-NnmsoQCGiz^W_auZ6f z9mvlvjvq;`KZBie#94A}H%(=Cl5!PFu2*o?PK?C;oBSb3aviT-u`AcbxC=s5{}DY! zRH5X$np~Y=xiaK>1EVSj-PtYHBL+XY<|tP@xlSNIZ-WAQl+14NeC;QgTn%uSo?O%0 zvLx602pQ=KCD(n&s8r@z-8L)N60lPadiXI{Liq_LR~`9z96{*xnBC$??T01T6OF2y zJ(R0Zat$U|qa0U~Tx*bO84^pb8r;Go$aM!Yl8#)PaCKVPe*ASZDnqWRwKO{-6E3_+?To=?U zSHqO6(3Pv2TwQ6oGUVEWT)E^D^UF`Jw~!P>#gpqW^3&JxBgyp;cp=wWOA`^0b zf|j!)*S@OHp)1!N_~uBA+N2Hsk&wH^ACQI&$n_*ThTMdb>s<2l^LoD@Nv<2TAC_GA z)~RleR<1(HwI{i{(Qzfob&z(&lI!2(>QiI{QH7FgHNJ-v+3Rn)GUR#+?39D<>=u87 zv7cN`$`wzp`Q&FQh@#hhvs*0Feu7u7<1!-GTdi4=>jgxC^n{YD2X(uL)ortK-41qU zK(2F?pHOnWJXj6G!ga~?nBC%F?T01TPPm;_jN&GA6Cs6?>nd_}q~l7G>lLt5hQyL< z2D!Rgxe6s$5xII5Lt_uRyc7{7SMJJnS_--LQm%M%<&d9p$B$gOz5_KSiG#^C?}& zQs7^?o&|!acye7zeztS`NOJuF)C?ilKM_azW3I?2S*~2$t3HRWTwmh`4UwMFYyBf3 zcZ;8ZHFD6y59t4dkdd2Eay?6aKL6D3r$sowSo>kg)t^Ruh;kLWa$QTVE^%B*a^-4Q zEV-`3SLmWsuOlOfDwJGjlB*ppSB6}7V^rm!JG;gGF^+z6O;oOUave;5{*0=6zL?$O zQ0*spKe@UpS3J2k6sSIpbo|Jbs|D1QBzDPVzUuLPK``q>*ZoyU6p|Y3z7<~( z+)eIZ2Lopnf7d+yJ1=3l9aHYVW6mdfpv&pGJrU`p#Xf_?UccpIcD!c7``*c4@ zn*q1aQ+`6Z{UPqS6LaVhepqh*9yc6`>h0)eI&S}oTopO4B)8uNjl#Ko z8}4NiuI4FMq1>KAu2y4c>;+98@>P*5m)obJVL!JIR<44{CBA(sAU}1EAIa@5+KB%)5UC4@Djc7I5iWk z;e0LFDgChIIuCcZ3ClksyXnZ4Pp&?D-yf1B*G1YDyKr_RS4SyVq2&4oH?fLtU2M5B z3ukX~<&x|8cU^M5hNK`Wo?L$;KRY{qB)RSdFGTiIR<7WMv;7^{{irbaV&SYJ_w(Kp z8Fd!U{>nYKa4toi^xQrRImwFKw;&Vgxc%k;H98-laXs}7w=V!`GvM|S%19}1_u6jDIB)9JXV`WGzx6dY5XDe5s+&+O^-3h+v>=|wk zBv&rCH?4Nb)rOvia=RP(Im+=Px&11r8OUw5a1O-iq$gMPTUnCpIMwIXVfTbIs!(!$afs^HiIyuvuD8HWIq1&m%-}a&a^0w0@eAi)$ zfF31t$XBENxO?T`g>yTk(0@?SC(ONAILpcX+0wnUaDEMzAxv)Jd<>1J=l0xexjg|H z$LNG|dljDT5Tv;a3D;RO+#aI3o$h|8E$CP}Zr?_Jj&uA-Zm&SP!?}IsnW~%DDOaJ~ zj*+XCtNbBJZpXDNmfL5Mt9_NLP;T!{t|nQo47Y#4s0MNSoqxLIdJIWH0(owK*k6VJ z^Bc*K47YF4eq3&=h4U1!AU(P6T9M_#nWOp~O0Ln=?GaYD4Y}S!zvQ5YUkADssZB?& z-N?^J$gE9bNv;O%hg~>VpP{l_pj?HL>-~e2ZNhOS$<^F!20&+YNqa{D0F=TL4p9H@wJJ{q?G?O;*{+&f&8KayO>Xg@5u9vq{pe}`@&q)>7_ zOs`k z@gq-X{tfm>61(IIUO2lTEq-qQ5eSkR>|QLK8~3C6hMuRKs!vz$xrOshG@hQ@AHgcC zQ}wTqiFDkaNZtOm?6z}_^F@$018!fX{DgA*5c2cND@hg@ZlA0Du-qOvT4i@n;c+`sH7_T7e)co?PGMsqhbX{77;=2WpCtGQ7rl@e8i|$}sn0;k=XFFMd&k z=^SyMq}+20=YZ!k;r6a*IV)~If=s02b`R?I_lQ`Jj^XxoAZ-TR9;N(*a(m4_YINp0 zek8XK(0*8Mk2ytE{}?$)$L&YS)q##H$?Ye>*l=!NeX??Op>h?UNrIoNeen{DhKg5&0S9_>tsV4tB~BXUX;E2-VFim8;N&^D=Vv@_+k7lH@u^ zyJC+xKOU}J{YtqCCD&=>>Rii}A=f5QMh?1jjkD9UF1a2=QjkENTziwBe=SRfB>YHn z{Z{*N_sYRXoR_D#F9>rl7S6Z((tMNdorQCI?>pFLZ0Y&tYOsDd*s|NoBHY?M&yChAoz$odp+?Y-?ri(1oGnWRKjxwf~S*Di; zneJ;$&#+9(gZla%dZqe$sAXCb)aq--)U!;hp9$#eLSy=-$R;K0M2u%j2BsR*`z_Po z2brE~OlMf8k)W{hjA@x=x+bXAZ!yLy0|#5CyIKS?qxFh0{kd~8tW%!~2{_bx9rr*Go%D_RE>8c>p<;L{iostd z(U|^#yCpQW4+IEYqigTCFptcUh*LtX6l{u8Otk`b#wQ&J)S}8@s;7u1wo? zvNCGyzJ(JR`}zUe?&P5MUN?4Kgx$-}p`+rVcr2dXlW&UyxNZAim4U+>8|n|QtSPT* ztcV|OehBIC+KK1I%MqylVvL^jnSJoAsU);*f89eHG@;A0JsFi4{i$@z& z1~M@BGS9;Wjj@DDgO^1fd=+&(^sDn+7fl^)9~!^0_Pk8ux6ISTU)K?=K4T-=({?Fwkrfw*ZX|TvrpBxENQIA6(opv&wckmbuzqVRrr)|aJl|wRKS(Ov zrOA70g|u-{DdTkKb0?xpDce z*m>fbg^!o8Zb-xu@pR*qG}QeIj)NLQhO}K!97(ItIBc`r*e^cY~+iE*EF25BUmutqx z)lfe*8Wlh6I2kKnU2Q{UqO!Io`SbDo`jDog?!Pb2G<8Hqbv-NY3~B}CA){*9=Y@VG zlO1=~Emb7m=r}XWPqMDAmq~t-wX({OUCqD0SFr^#COnUc*!l6=Ns}yErQua-1s!*4 zzEW+&cob~S<|oCR+YiaqSk^j;;XFyLkWrkv@sRnF+Oi^E>i(ANd4PR#{Hb}&SLQh1 z*Q)t__6r*04QlDkEH9}Q)8{9(P9}VCYo*DPYo28uk^`7!9!$k7@?h#@l?SSoX&$r_ zpM45n(jU*sDpj$X3VX3Y$HViKT7l1x-&WhX>#5(0T_0Sta2{xDove)GN>>D?ErtTXFGV@s_M_0HO^}HOdVM-gYgZlsN-Yuky1z72j(Ni zI(*y%%(IDKr#|cW?TR{{bn)vt+CDsfZJlBKNptRaAvy9g+B7_=kBcKx{0@1h`-{{H zI?mL*q}qxuX?r&>uC;FlBolIOf|5GdI{)WVtY&?_r$U0qoL1xK?K=xCP zaOgUa`a|;m!A1+=`AFXYpP%r$x}M8}@LKFVNmnhLC&9ISrkUKnp`uHNWALIbY63CH| z=RJt}ke5PU3wbx>BFL8>LVd{hAU8mE{wwO^tK|Kcpg!af$dQmy$STOo9z}h~n;;iK zJ_Y$26xdHN9 zd=C}r=6OBvz0Ls00?3h&WAL?E7350DYa!P{E`p5U3&qzU^YP{K2FMd3Bi%i(5^@0K zY}~If60+xV)Q8*~@>k&wTEtb)80 z@><9RxDj#@5t2FOPsBino4%a8*g+aO0m?u18*svr-9ycTj4ObVXj7bVt-Pzfy-;AodgWf#xoC&&E{0>MqI@3yHliF4D<{he?a-Zn0Kar&K{kGh49}8@&EfCzWqTcZ$mlPei_QY zLpj%e0_ERhK6Cw_hw?8`&b7Y;<(pB?wZ97G|GJ-Ve>2LzKsncbALL~t%DMIjq5PXg zeEVf6{~YC9`w5hPg>tU_c_?rD3*Y_{lz)nHuKiUgUypLG{mm%f5Xx7hoNK=fo$3gsW-CXgBS z{O>$fE&yVFZ$|l0?2kDAeXu_}0_B|lK`0-Ba?XDl%8z-PZ$E+Ze3WzT&qMiOlymJb zLHSYGUvlxSLix=o=i=Lp^53GI^WO*S^<0#5{s*D_M%>TAwO@wvt5MFipFsKbDCgRr zhw?etzjN^|LHXAx=lrii`6npn{BK727bxfa_vz+&8*m)KwLb{uEhy*OFGKm~DCgQw zpnM&UPq_Hzp}b@{?|%u(k3;!EHovX?+bWb7p`7!-8Rf;V@a^}(j`(PlbL|g8c_GTV z_RCOyB95cD_!1~zh;lB!^H6>h$~pf_P<|WAIsdCreg_`8;M(7e@*7ajwciKFbGM+J zYkv^RZ(YI1SBCN*P|o>Jp!_S8bN=U{{9BZB{+FQqI~-SX?XN=ldX#hRZ$|khlymL( z!SU$kReXGdP(BvNug7B@Ngh89?y8Qk1Sz*|+cK~%1KTpNEd$#!uq^}IGVs4A1B=g9 zeXS#jOC@q!xu23+7Y~z*P3v9v_v-^m@1jA zb|*<@IN?zMHS3j9MR^R0qHbir8_D_jeIT)EeEbll>wXqe$8abrH|_8HcGZ8~Pb%If z{y)jU9OAVbZUN1gLXxE3`nB-EDD@eAGY$GYZBtjQ*#g|3c@<at_G_Bo~uhN^%9s7Lsiwy)yDo zGLK{d$wHE)BqxxpBiT%H4#@>17n58{as|m2l5Hftapa$59?1fdg(OQ!P9RxFvYF%@ zk_$*KCb^X43X&}(+emtN;g#5ON#>C(AX!MVl;i}GbtIcf&LO#giw!8?`rnHetbJm z?-%`eH&5?B{W$iXdY!Tga=ad1ULfAn%MBRM9B+FsFA&Gk2_5%X&3ifC4xTBTlHuVp6k^;5rpsP>Ej){G{@V?)5ke}d}l9cKaqoPBkMl2E!F27Zx?g? zVwdK4yLv%<&hd8h3IlkU(f{uWm*3F> z6KNOy)blqFy4b$QUnk^wDXkk*B zYy16iye{%tmGIl2M|d;g+WsNJU!Ll>-$M8Yglqdk9Po?w?-oSGrsJJX_!ER{`@a$1 z`4YeV_k{0CxV9hCO|}2wrGER13ExDxwttrJV=wdD=U@pI{TxlWwl5)kw=4YimlJ*{ z;oAOb!V_2d?Y9sE?b!c=*1fZ&ed_+DT;jWW{Xex^zm4@;f24^f+U`k--nf zjxDJD@eDp&;t}r>u>-;;zbk}%jIsZS?5EPa)BVitE&N72@!Q2>)A%tGSD5{O8rlCu zeAD(1F!moZ_^!FZ@t(!tzhm&n7<`uhcWm}iATJ>D*S%$V(kCU;NABQ z_FE|Nh<8f8zx_DyJS!gkaR%8pP4e3>VA_9}><6Cjw||GR-+Q0nexAzUS2FlA2H!6) zxc%QU__GZDwZtP{mkT|)X<`>8*zXJmU&7#@F?iqogWGRp@XHwdzZm>o2H*XF zV83TF_+t$IIfIuR7~K9$2LDjv5%0(OYFOmGL-^Pm2k=4bNg;zbG5FOC{uzV!>o5F9 zyrGw<{%9VKBz$7jk6%LgflUgZp@esj#7VKl8V2umu=4xX6lJXa4wksp0DTqG82dLEyvu;#_Qx~$LlTd8J+D`O z^*D+j#0uhJr^ABr6C@t-`pxzCe+py&I|hG=!GC7(L-K?BBYs3q@cDU)OY>?jWB(F^ zf5qVY9Io0gy3wDv<0Y;z`~NLuAHCFX|0HAI%HTx>%I~u=)sBv<9(bPZP=7A3Pc$SN zCr!#P$1{8N@yV49c+X2TQ5`L>s;!APc+qG@ZFF)~t$5*AMWVL8AsTC(hQ}?d>#FcZ zn2P)%1xFSH8$~Bo)>KAg_4To)DBieI-{eiIk5$K`6^+%^O{ijNQCKE?ra|v5%a7OP zl-So(K=$96f2K6;00#!#FW~K z1}~_nwgT@m3oH?@J_~;9Su~pZsASen1UvSgFqJ;BPob}3W$>00?uJEI=k{f~R2o5`j-*86MZO8~O!L~7*@y4F3< zY&Of`uzc&<9dYh|w?v1ccboW+x}js~KqgE-bQ{@pM8DM}dlEP`JK|J#IE$dQS6wx0 zwdI8J?mfq4~1R+B!o zo&UT;IP1gF^R!{3PA#y^NiZ+Xk8OqGx=^Cd+40XLFXMfCBPAYem%194HqiHXuw%aRQ7gkJTbDi zJXTez-`F@Nt}^T4tvPfKCf-gX8&y^G$|R#>gF(Y1O2?)&i?cYqxvjo7O%~u>53qhg zNV@Ee6z}@dy$^LG-?rmB*wQ}aOGvE9MT)G*Q<)ePzHA<`pBcL_*$p=dtwup7kfEoE#3(md$4_dohLvp8;@zKk4>J}VhqVEH)b#VSgr-b7k_30orHqO& zz_%PC=X6PTIlR&t@v5R~yi-nhke`kX@%pKi<#ELyeTg80>1gF6D9oViKtd_Ea(J||}m1L>Id`&vZQnp)|^X_7zmq7V;M~}}|hZZl)cC342=!qv=p{Z{J}oBpaj~k(ivq7V$png(H4CcA z$yF4qA1hust&cs};8{+pdB~5+f06=!G$FL?(7;ok*^qrZ(2UkfnbHyR#}0;x-#RE3 zKXu?+hXTkiE3wxK(=X7nesS_m)oF)P$K}p1en%r+h)YQ772p9uNCF10_IhdY?al(4 zkWPl_H-{%@SAePXW*F%>(91+}krXXkhX*MOjcg!@2C_@m)g^Zw=2_n%LdtcL?T3#d z$*ZusPg`Xk(!pAIf-J(Hj^DJ9d{^fUY%KoEk^T?@##@eqxa>B-cEQc58M^d`OdZOpppvtmb3p~KBW`3N zsgbd%LqO#+gX6#s2W1ZISa#5kMn_L1(RmKYg6zLpZ&PjgsHWMu$~YjFvxY#n-X-LP1G0<5DFqy`=tHM(V`m=CbebEM($y$#;?% z;6~Pz(|@u&+eD&FCEtEEGxkAzGqeca zd9xi8i$c;t2n%dNCpi|rCr`Pg!><*l|EaX5{RSJgpJ41^q4dBVpQq`V-vxDO>ycI; zN~$#{c}I(H)d`qy!DFP4N%;PD=)^!UM;<){aZC2ZT0N7D(Y*=iz8oRbY?77ye!&+o ztugw*T|45#&h~gidMl!f6Y6fAc&rM9Wiz0S)9<3>X%<2@>!aE;aajr?Wac?;2>H%` zE3M0NZ2dt7Wi7xgnY&+ZB!ij8b|{hj=^!&c&NYx4=2kT%TjIw!;N4; zZrL!B`x6sIILkufRtsinQ&Ft00T+~_r^PS)rT4MP?uM`F0mp?pKD|F<_Z=w_@&{(V zOC53Zd!fmu1*xnP4R?~U!{VRIbY!kqvG5%%)|Vo4=T%s+sS9QDptMMm;MZ*bbdJn1 zoYO_U&~j^)p7pv~IOme1?hYc?zP-oLb@*L|Z-t>Q>C6SqrjC6-D)X&Q_CuychxWUa zpzvLhqNJ^FaZkODotE_`Q?hG8iIP;e=Wa#^d$M!t+EG|~rJ0!X`leW4UXydxVVmsr zFU@i*?L5zkm~5iN^h-?;KgT;XAFYeAR!>DPtt*0o%)tFVldJI)rARmK&B0Sc`3+6g ziP%KQM7@$z^rxEIL_B|TO=EsteQh0XQeF`-f-s^A{bIc$`(fE3h-w*Y9J} zGS6wZyQAZ=6<>Y*-X<;an4E9x;?wXmBhdeacMod+`u&MUlD)3y`ac!r+v88y*YAPS zvY@wWpesZt{OS65oLO#T@jnNDy1ss2qn7&pjLKTIp+5_GHvUB4bbb9^DJ}K;7Tx}9 z|8c5+BBa>#`=_+j?|T&W@#uO=|7(GXxVFQe+)DjYjIX`verW7Ge6Z{5_gQHve}hIF zL*lgwa?`RAnq6PN_sU4J*Fx9RQaq+)*VpgI($fA78_|ZYr{&d7ee)izbA>hDr(Y+$y%kRi!`;<8`!jwR{$4Vv6bd`n_SZGOYh9 z>I&}a`uhE1bEtlcNDekJf5oQ#>Twj0g$fg0U%!W}?(f1Hzh^=9m6oip+gXJIyS~># zmMfH;r5h$#*VFO?;C6leKAHt@P<^VWMV|gZ@)JnWmUg4xf7V}g3|pc6pZu4X{3t)Q z;=k};;NZGG9uM_xIvuujC?@U4lmAw{S3+#!{kLLD>A3a!)dQIBJ3gANaD)1InbR@t WR~zDWD1r5t?WHU?YD1E4{r?N~((QEs literal 0 HcmV?d00001 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_fastrtps_c.cpython-38-x86_64-linux-gnu.so b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_fastrtps_c.cpython-38-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..d9aebd7dbe0614f7a8d364f92cbd9d6f574c4818 GIT binary patch literal 74984 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 S>F zu6(&Ym0WGZ(C7;qKjbSTS0=YFM#FAy_YtnV$;IwIWs{#u!w=_nYw5@2_G)&=tKm7M zAu+jzqYEjKs|L*`BG)oJcF9ut%!je`sD*PBW>ga7I#l@aC08l=8DsdVXU=zko!pO= zTvy@gHfH$;WH%AHvdGmxK5&P`$#t!CWnDPik*hO>D_?Sbi-%ZQx31G%sfF_}a%Gb1 z-1kg!ZA4NKm7QGwO@59r{BUwT0$#A}#jRZ43up7Yru$KT?%BdwM(!8C&oXK(oV|s6 z+rqg9brN%X0&qF5^;NLUoko#qH#I(6}P8>v`KKgzwqPB?T5%ujp2uLyMy#& z<@Uot(arV9R3dIyk*kh|E6(i)z*ruVmD^X4t1E;nUv8gAu6_@`$m}U@46OSH4G_-N@Br@3=$aXrmA}U{UeQ}ED*7=$%MXtBOPCn?y>CB+5Cb{kquIvlvljP?;P(Y57I^?U6 ze$2hH_rlp0DRdtcbn$b~7S1Aae+74MES%qfWeC%@aQ+pIC+7B|RJlC~8OP}Oa(fHD z+rdclAQCRKrno&=bUV@WPJ7X@MBKiQ{0uStaBgoxy8XF5`*P9E1;Ujtw?pJ=^A>kV zoZDgP%F68tS$yJHwN^yH1M%9bk@BZB+*I$toB+$<7k9v#ne|{?#lH&Gn zr5}^qV&S|9EJ#eQ2REg-aHfks`;u!kb$f)?ZAGs4(Jwye{?~!-MQRg~>nQT`F*2)@ zn3Jno`mrvY+b$K^%@(eF$@M`mVH-7EadNenuB_yGlU%JsMi7-Rxt5Wu4w@@PuKU4G zFLLd|IJ#G^3Br|~Tp{waY;!Doid=)FACp|(3+GR8=63%+dT-@6TR7X3`xCf(W8r)n zEJK*Kh4UlSNzCobQss6p(Pv+7SD!41a5Wm&Ik%0irp;hd65M_f-A}~rT=J7{_~G2X zTl%qbdk?-F#d=gIT={Z4gIq27n>!@V?Y`2LmD_6zg{z(DX(DcK?I~>gX|5Ev*MdY| z+@6Gn-Q=1jT-mvOKlxerKe3P$w=b7|Om2&Xb2A!GOs=aprnqpvj*yWaUvhP&ZgSHKTsh=ts^N#9&io7P z;UqT6<-KsWMq1q5{sRys)!RK=ICq~&^9?_U3A(kGsaF&A3Nsz0L@Z(Fa$H-5);fF7r zY0{6CTz8EW-FyMrMM%Ensv=jd3|E|7cY&S$wa`e?Y`?bQHH2fV4?)dzA3w%kAyQi_uwR_~G2{Dg9Wv zJ@z6|{S)LM5x1WvS0@{;IJch#WBs{(+l9i_HNurIw{Ip_|BV5Z*;5PWXmVw8d*aI` zxdOtKo!jHc&p5*m=l18IrYE<>!Z|uAa{UR(N{L*Tp+X{ZZRsvjc^@K{=~3j$rfw&= z#@UGO!;deyR*;{8h96F@4PYl9aVxpDju73PEnN97oHvrI*Isgm#L0D~bY(r_{A9Rr z^$X$3mt2>StBIN`MXn}Lh7Y=NjWg{I&4HYr)>V?5(BFkP8Gs+r#HWqPqPy+Jb# zc!iazOba#B?Ov^ZhcOlz=%bl-)d-|U>vd)NbE{Zb7eD6_*6)?+Tbk)oue?T;>2l4q zr&m}PD$|*oX~*Y1I?!F2j@3+m^WPq(-@=v1KrhX7i(T1{%5<}4 z+R3Z0Rm${X%{1N1bc8a!PBR_sMZ)8hX@O?i&C7H*Mq6Z{r)JvZMVIx;bRV9Ukkszw zHL&+8)4yq^&v~_4sZ1Z#Ow+VhkC3kNr0JK}OX%HaV)<8g-IQISv`f=6s_edl6CV4Q zeWl%nUhTc9>{>Is*Iq_P*_Yz6c(#wdEe_zp?SEAUPOGV|I<2&#sH~7Mv!*&;KfP2_SsAH{dKDE%iYWRb{;NyuH=2Uw;p*zplyI=TdP-3In^Ian89#&; zs+dw14u)&W!uV07@?u_-eyuCzipDQ)CFcwtWj+2ITS?T4)>ejt)gl8)m^;bmVOmWn zs?y-3kOx;q84vyHyse9>j75m&uXxAE%h1>`#2ZV>W*MmR6R2%VPh0lNJ3SDRY+~@9`B9#zBos zJ2U@gi~jM%dg?nKMIkI8k&0+lqzqqE{=t*mjGX4bf>tELBo?1vqv zVCAcfRF_6eBNefqkGHQ62`b9|yW&hxhh>OPA)Xq|S|-t-C-D`Mic>c3GhgCc7Q~C+-`aZaVILcRY98~|a-8pKRsBBuw3=|W zSUQu-OMJz|`H8QS3?Ix|3G!r`r0H&A+RWXG;s5&X-fodh22kFFRAIF!($8)?& zS*W5|Uo6mZ|2)N4u;<5ZEA7nn)NN&5A51fU9!P7Mtfb?LRgnFSUk5!JNBh#=7N2a{ zHE#S&-8B+q=CX>7E_2Puh0S+8;9ZQHI=o&IE6R8h#V_kfd;j>Qb&~PN%x%XDv61J|Cg4d`m>rSgcgU07U&L3CamME*-j;Pq z+M9VXtz9!9Hcw15e;z37SmONoA74TC*C)PMzO?8uVtMliK_YY#Jjd@Tw9VSy#X0-JdgaH%X-P>Ddy3_FMns? zgR5SQaPjqEn|5saIZJRa3y)+vBkyT$UWLy?mNqwk067wJ59E$VnwtZ-RtC8laz5k^$Q6(Q+)&&InT4CnyCBbp477KgQpmoL^YFaFNXU*GP#>~8 zxqLh7L-zUv^&z`}lWa@7cC3>&BO~qDK)dz}ao6!AV8`Ka;a$zmjTj%N zQ^xR4M_+W(v>{soYi-QV1t!2sG=yZF+ZQvkf4)u)ZM$@>PJFQO`OD7Up=i1P1IZfie^@*gmtZT(-2 z@~=>CYkw8W_n_R?{uY$~^HF>IdrDW zZ78?3Ux@OLQEqELit_E)U)b7TjPk80x3#|tX+Tz=S z^1D!Oi*FCge~ogR|1Mas7optde;~^5!1Elo_6t#d8_I3%M^Sz|%5Cj0M)^YQ-)-@& zLisl+xB1_K@=sB2^S=k>U!dIPze_vE*@fc>Tl)i1UXOBH`-Ld~9Obt5qbT2r;}cta zi&37x!R~(*%7>u5m(Fi(|F#9?xhS{!--GhJ*X`|h!H)PWl-t@Li1Hki+uAQg`T01G zvc(rg`7)H-^1B%2ccR?pe-+B_L%GfW7L-4LuUy#L--GhsqTJSg7aY&sgK}H@15tkO zCVPB^DBp*2oBt@vzec&u|6-JXhjN?$RVe=+$CbABx1jt>l-t_hgYqVn+uHAf?hB!3-SC!2g~MtehzNT1gU@ zO8EBPi9$+!pP_d;$z48#^iBeHrjm|JZelAC;!skDJRm+CLwel@;={3| z%GvoW+hqB7KQ~91-iT`)Y-5LLY|A)8NSylctsd6^*oH$nzK!oGBrYZL?P!u@h7%qE zP_s?}RpiH@C~8OcN0D5P-v?rw#HS7xy6k5Tbqt51e3SluXcqmK{iNc9;{Qkn780+` zaIS=s#t)Nt+eK0BieRa{ubav3Hg0m{ySPbZ{~~@s3W0$9ShZhd7y@IF4TExJYZ>Np}u) z~4-B;uAX#Y~{q~lN~QIJln`~ z55nbfsb~fF0q`MB>yMm&!#N(GpK@wP9_Pw-YPo%Uo|gdk>i;Hc=Nal}4s^D?k3ZJ` z9|-67aDjb}Kh{qB8^hgiHGf z;d`%gx4)e5z|{hm_MZ?wo((8A+5XY3Mf;_MOZ(A;KgrJyV)nBMUr)HSe~$3Os@(0f zduJ?fClW60`{8(=;bl>`eKp~AgiHHp34d+6+dd5k{;Zu3377U468;b)DmEGKt%N^A zxU_$T@K)Em?OU}I?ROzq+dd5^OsxGmgiHIOgcrOZeM_OZ%4yKmIPa{UKOV zSvvy=m-bi&JlC=DuupR`oHZ|tcJ%*V>s}GJkKezrXKdIy*84NP1;?2|xVayh4ZIaQ zYd7}G^ME@Z`^N{kef)m*LEe7+{_9!bhr7GNwLKQRKQ2Ug+5e8?0cR}nlixE!OKUCm z`z-kB*s*!FAF|+!IUaDXXFDKl{9YpD8jF1c*-xi=C;NHKVa#v9VZUw6Hi_qQTwwbD z8_E7B;+wR8+G78?1wTH+JKiD-zQlsBvEbc1d$&K{g5S>ZfV1Rg5v|PUQ-uFWdFJ=@ zVDgQno!%HkuW_7h!Pi^xlaKIj=a&}zufQ|)fuhgrE%y5?_=(tYc=dmR1%J_kcg2+R zYG;%MzsZ8XWWm3-;3suuegn?Ja*+VZ&k-DtPtdO|_)`}AD{B83B8Y6i+fm-}7Fh6y zEchoD{9GJ5d*ySQ1%JqbziYvV9pl~pbPN8h1^>Z<_rrx*um1nWf^W6pt#HBDtDT?) zzte(m;CR4!oQ@OZI5t}BFU5sq#;eV91c&7M5GDMph?{SBb3C4JUs>=mcomjcT(?;8 z^&Ag4#}&K%er~bv+}*qVi!J!g91l1bRk_<=4m>kHEaxS%uPt%ge`;y}pJYGaYPbDy z$9wlPWWjH@;2SJ>YjoZ#&m|W8O$*+thj%-tb3EX*zQ!F_iN$`g1%KIsH&Oc&?sB)^ z`vlgXfHRMdV5$$%21x!TX%#-TovC zzS@GnV!^+*;N5z9`@O<~-)F)1S@2U%_HKWk1z&H$d*A@xEB|9H_&f`Kj|Jar!3Xqa zegn?X>)rgBNciNS8^4|KlWPTjgAmSYj+3H^Z!LIcAK~}yslr(Dd<4g}2I%8u7JP{X zUvI(pTJTd(@y`DQ3%=5V2Tt{F=X?u3o8tlJk*GTlt1b3BEO^(x-hQvL;4gDL;B>rQ z_?6@MxyAm7e%|em;dsF5vB=&3Yc2N6Ecm+?JR{57?+^=q9mfOCD-@UH)gLYP?^z+(SjWFMU6w%=&6-)F(cXS4nUoEJmxJl_I5Q$X(jMOD%2XiZ5; zRuR6_R~4R8T8;O>1f%7_qOwRuxY`K@izC4)WfAs5u;OT>syY~|nSrlkmRFYHjWNYp zXP$LtwzpBRq_m^vtt_y(7*0^=QFh{C6r-Zo=d1g2}ZZ-|5xzUc_2RsT1ObT&cO0 zby9I8Urd!smQ|gWIHGTlr!c6}9o0<5DSJT_zOu>Rkd;y{-4#=H$zKtbvOlVoiZk^d zr<9y&wNi1Wy<90JcdmL#Iuu`ZwY{GyS@(%r`FA@bzTf+A_eM68N_Vsu-SD>sq|}M{ z$}My)d!F2E=EI@+mbF{r-2D=Y7DaD1@o#lQ#?pdJsD8*cQt60%{YmO1Flx5MsqAnH zK})Z)YRYa^wptjmS-<5SkRhZRz3PE%AeAntS7M|dzFDC1JeurdeDWt`_N3tQWE(L?b#||5n7tFilf?&`IUU2y(!$w`0i$ngxQMnQf z7FS1tQ}JRV9BA{ye-w|nWPC6$pDO2HFxKIx5KeH!$kFEy8yOrueE7J$!eHUB^GD_d zy$*}bbz4#|QZYST6~zfhq&!$zYpof3364H=MrDr^kRqHC;0QpzN7?l%3=v__<8&s- zdpj;19T_PKl@-WWJB|&D%sP0z4xNm#*VynzMHRU+@#w6OTlFCeckZa^0*GRq!0eK5-oC;A}#WGCVGX>n@8-Ihpvfr!Q9atrJH2Wd-&6Bd-%k-_t~5lo_nyCq7ukN^8{YC82m>GZq|!wH|$x^mDU>rc5G| zcz4dEjEK;~HyR7GkkljA(E7Po_uG0V9XW2wP>NjlC_r=a#ie!V2_q6RK&cqAltfy5dRRts|( zl8YyQfu!Tn?7y?@VV%H=IhI}^=D`r2FIUuz{U*U=-t4_=DGOZLu%?Z8AOlH;mMz*# z#QeyeL$GK@i0vIiWu@18Ua8^s7|YOFOTh7ke3Y!l9IL zne)rOi{dWW#V7HWagQK40loJVa%pkx2tAtMPKL>slgDP4hbi}_7-=|=%S3E>Wi4w5 z7I6y=Z@`NNyi3}3DRTw4v%W=yHM)bQBE!J}}Q#1UkRgHnftR(8;iMn+F0 zk$LvW0`I?CZ{v48)}>AIP~^&IhuNZNF)g&?WqBN=ojfs0Y6~svjaJH{5~VyowXW{R zZt{l3+2DR`mCrPbikbSLC z{g0n1ybf1rqYBt77`+mU{Fs(82z+F1Bhn?#22KSar7bnDXKH*Rq z2y4xNG)}yW;-^^%S*?#^&t%Jz7a^0+akbCW0taYa=40y)(kp8oX0hDuzmfE2nzcjG z*sl|*@iDG}?7zNomTCKDYp-Iv2h}Nm()ffS*1v+<+)!mTt`7w-3173ncbT#7`Y+KQ zhj}tSxqGti3gRNPA7{C)T!hsxjK-Q~9MR4j%sFEn7WdSo18un|`R^~WT;!@pu>69J zU-x3in7Nz;r(63cbEFQ*j4sM`)3)@;Ni3`Rb1pXO<{;YI*LMK2j(rc{S}>?fGIRTR zPKtAPpJ~ye-6$oi(OZQ67W3H)J<>{TP1%qM@*{(UBZa?Pi@&7a7V5M zu7d~L1dls+lC`bwc%od3qrGd~*0s3DUzSeDdX*{OHLpZ*s_Sz%sbe?ZIdLh-FTLE1 z&3XBBtShgvxoWVD_j-S`TuZy1=R^f-qS*9{Pmq0%w`e|UGfC?y%cXXK&yyK=@MlUn ze$*7{#zQ*z9#K|xZFw{_84}O+b2(Lhs)$6xSyL)%vMQ@0m3XG7*2z-PPF7X8EW|+iREgJfWU=oaI9d3ZH6=nHs>4N2Rx~^VD*F-x ztRuytXvoP5Po=LdOf5!hQWI^6?=OfN@-tk8%1hB0nr1H06W-3`>S`woU!u@|s@DCz zj1)C|jg`M!uocyl?`M)S(`c`~q2ucsJ+RVe+-_bn<( z_OhPo|6-IMf&y2{Nh#mYX!c+F4^#c~A=xJ1MJWKLU)!)fRtzD{xCTzWOHn zA+f9QL9Z|0ZzU!F%^GP8iPtFbP0AW*dVTpGEG5Za3RzD|_O&IwzIh9v)v_WvvJ6lko*LUj4a+8pAWWxl@dQyG}T(2+RPqXwbs!#Q#$dn&QehSIjl5XVt z(0a3uVawtFWB)Q^ANi*S{Ad2N4P4eAW#BR$x-=-pYs?`34S3H4+t~YZ*_4uT%k`@R nFxhu}RNJIo;^Q4g$E06rh}WZd*8i5hxD4BF{y+B5tpEQ2PK^qB literal 0 HcmV?d00001 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_introspection_c.cpython-38-x86_64-linux-gnu.so b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_introspection_c.cpython-38-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..967b8ec0495e014faea3cc66c60c3ce82dae1a81 GIT binary patch literal 74960 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

*xzFWg@(C|YWg~HaD3=PlH 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 literal 0 HcmV?d00001 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/__init__.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/__init__.py new file mode 100644 index 0000000000..993c6fb783 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/__init__.py @@ -0,0 +1,9 @@ +from airsim_interfaces.msg._altimeter import Altimeter # noqa: F401 +from airsim_interfaces.msg._car_controls import CarControls # noqa: F401 +from airsim_interfaces.msg._car_state import CarState # noqa: F401 +from airsim_interfaces.msg._environment import Environment # noqa: F401 +from airsim_interfaces.msg._gps_yaw import GPSYaw # noqa: F401 +from airsim_interfaces.msg._gimbal_angle_euler_cmd import GimbalAngleEulerCmd # noqa: F401 +from airsim_interfaces.msg._gimbal_angle_quat_cmd import GimbalAngleQuatCmd # noqa: F401 +from airsim_interfaces.msg._vel_cmd import VelCmd # noqa: F401 +from airsim_interfaces.msg._vel_cmd_group import VelCmdGroup # noqa: F401 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter.py new file mode 100644 index 0000000000..2783cefbcd --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter.py @@ -0,0 +1,185 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:msg/Altimeter.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_Altimeter(type): + """Metaclass of message 'Altimeter'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.msg.Altimeter') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__altimeter + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__altimeter + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__altimeter + cls._TYPE_SUPPORT = module.type_support_msg__msg__altimeter + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__altimeter + + from std_msgs.msg import Header + if Header.__class__._TYPE_SUPPORT is None: + Header.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Altimeter(metaclass=Metaclass_Altimeter): + """Message class 'Altimeter'.""" + + __slots__ = [ + '_header', + '_altitude', + '_pressure', + '_qnh', + ] + + _fields_and_field_types = { + 'header': 'std_msgs/Header', + 'altitude': 'float', + 'pressure': 'float', + 'qnh': 'float', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from std_msgs.msg import Header + self.header = kwargs.get('header', Header()) + self.altitude = kwargs.get('altitude', float()) + self.pressure = kwargs.get('pressure', float()) + self.qnh = kwargs.get('qnh', float()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.header != other.header: + return False + if self.altitude != other.altitude: + return False + if self.pressure != other.pressure: + return False + if self.qnh != other.qnh: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def header(self): + """Message field 'header'.""" + return self._header + + @header.setter + def header(self, value): + if __debug__: + from std_msgs.msg import Header + assert \ + isinstance(value, Header), \ + "The 'header' field must be a sub message of type 'Header'" + self._header = value + + @property + def altitude(self): + """Message field 'altitude'.""" + return self._altitude + + @altitude.setter + def altitude(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'altitude' field must be of type 'float'" + self._altitude = value + + @property + def pressure(self): + """Message field 'pressure'.""" + return self._pressure + + @pressure.setter + def pressure(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'pressure' field must be of type 'float'" + self._pressure = value + + @property + def qnh(self): + """Message field 'qnh'.""" + return self._qnh + + @qnh.setter + def qnh(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'qnh' field must be of type 'float'" + self._qnh = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter_s.c new file mode 100644 index 0000000000..39fc0e8a14 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter_s.c @@ -0,0 +1,167 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:msg/Altimeter.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/detail/altimeter__struct.h" +#include "airsim_interfaces/msg/detail/altimeter__functions.h" + +ROSIDL_GENERATOR_C_IMPORT +bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__msg__altimeter__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[43]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.msg._altimeter.Altimeter", full_classname_dest, 42) == 0); + } + airsim_interfaces__msg__Altimeter * ros_message = _ros_message; + { // header + PyObject * field = PyObject_GetAttrString(_pymsg, "header"); + if (!field) { + return false; + } + if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // altitude + PyObject * field = PyObject_GetAttrString(_pymsg, "altitude"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->altitude = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // pressure + PyObject * field = PyObject_GetAttrString(_pymsg, "pressure"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->pressure = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // qnh + PyObject * field = PyObject_GetAttrString(_pymsg, "qnh"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->qnh = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__msg__altimeter__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Altimeter */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._altimeter"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Altimeter"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__msg__Altimeter * ros_message = (airsim_interfaces__msg__Altimeter *)raw_ros_message; + { // header + PyObject * field = NULL; + field = std_msgs__msg__header__convert_to_py(&ros_message->header); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "header", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // altitude + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->altitude); + { + int rc = PyObject_SetAttrString(_pymessage, "altitude", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // pressure + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->pressure); + { + int rc = PyObject_SetAttrString(_pymessage, "pressure", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // qnh + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->qnh); + { + int rc = PyObject_SetAttrString(_pymessage, "qnh", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls.py new file mode 100644 index 0000000000..d7eea1913a --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls.py @@ -0,0 +1,263 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:msg/CarControls.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_CarControls(type): + """Metaclass of message 'CarControls'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.msg.CarControls') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__car_controls + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__car_controls + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__car_controls + cls._TYPE_SUPPORT = module.type_support_msg__msg__car_controls + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__car_controls + + from std_msgs.msg import Header + if Header.__class__._TYPE_SUPPORT is None: + Header.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class CarControls(metaclass=Metaclass_CarControls): + """Message class 'CarControls'.""" + + __slots__ = [ + '_header', + '_throttle', + '_brake', + '_steering', + '_handbrake', + '_manual', + '_manual_gear', + '_gear_immediate', + ] + + _fields_and_field_types = { + 'header': 'std_msgs/Header', + 'throttle': 'float', + 'brake': 'float', + 'steering': 'float', + 'handbrake': 'boolean', + 'manual': 'boolean', + 'manual_gear': 'int8', + 'gear_immediate': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + rosidl_parser.definition.BasicType('int8'), # noqa: E501 + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from std_msgs.msg import Header + self.header = kwargs.get('header', Header()) + self.throttle = kwargs.get('throttle', float()) + self.brake = kwargs.get('brake', float()) + self.steering = kwargs.get('steering', float()) + self.handbrake = kwargs.get('handbrake', bool()) + self.manual = kwargs.get('manual', bool()) + self.manual_gear = kwargs.get('manual_gear', int()) + self.gear_immediate = kwargs.get('gear_immediate', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.header != other.header: + return False + if self.throttle != other.throttle: + return False + if self.brake != other.brake: + return False + if self.steering != other.steering: + return False + if self.handbrake != other.handbrake: + return False + if self.manual != other.manual: + return False + if self.manual_gear != other.manual_gear: + return False + if self.gear_immediate != other.gear_immediate: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def header(self): + """Message field 'header'.""" + return self._header + + @header.setter + def header(self, value): + if __debug__: + from std_msgs.msg import Header + assert \ + isinstance(value, Header), \ + "The 'header' field must be a sub message of type 'Header'" + self._header = value + + @property + def throttle(self): + """Message field 'throttle'.""" + return self._throttle + + @throttle.setter + def throttle(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'throttle' field must be of type 'float'" + self._throttle = value + + @property + def brake(self): + """Message field 'brake'.""" + return self._brake + + @brake.setter + def brake(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'brake' field must be of type 'float'" + self._brake = value + + @property + def steering(self): + """Message field 'steering'.""" + return self._steering + + @steering.setter + def steering(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'steering' field must be of type 'float'" + self._steering = value + + @property + def handbrake(self): + """Message field 'handbrake'.""" + return self._handbrake + + @handbrake.setter + def handbrake(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'handbrake' field must be of type 'bool'" + self._handbrake = value + + @property + def manual(self): + """Message field 'manual'.""" + return self._manual + + @manual.setter + def manual(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'manual' field must be of type 'bool'" + self._manual = value + + @property + def manual_gear(self): + """Message field 'manual_gear'.""" + return self._manual_gear + + @manual_gear.setter + def manual_gear(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'manual_gear' field must be of type 'int'" + assert value >= -128 and value < 128, \ + "The 'manual_gear' field must be an integer in [-128, 127]" + self._manual_gear = value + + @property + def gear_immediate(self): + """Message field 'gear_immediate'.""" + return self._gear_immediate + + @gear_immediate.setter + def gear_immediate(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'gear_immediate' field must be of type 'bool'" + self._gear_immediate = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls_s.c new file mode 100644 index 0000000000..54b12d4b34 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls_s.c @@ -0,0 +1,247 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:msg/CarControls.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/detail/car_controls__struct.h" +#include "airsim_interfaces/msg/detail/car_controls__functions.h" + +ROSIDL_GENERATOR_C_IMPORT +bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__msg__car_controls__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[48]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.msg._car_controls.CarControls", full_classname_dest, 47) == 0); + } + airsim_interfaces__msg__CarControls * ros_message = _ros_message; + { // header + PyObject * field = PyObject_GetAttrString(_pymsg, "header"); + if (!field) { + return false; + } + if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // throttle + PyObject * field = PyObject_GetAttrString(_pymsg, "throttle"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->throttle = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // brake + PyObject * field = PyObject_GetAttrString(_pymsg, "brake"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->brake = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // steering + PyObject * field = PyObject_GetAttrString(_pymsg, "steering"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->steering = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // handbrake + PyObject * field = PyObject_GetAttrString(_pymsg, "handbrake"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->handbrake = (Py_True == field); + Py_DECREF(field); + } + { // manual + PyObject * field = PyObject_GetAttrString(_pymsg, "manual"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->manual = (Py_True == field); + Py_DECREF(field); + } + { // manual_gear + PyObject * field = PyObject_GetAttrString(_pymsg, "manual_gear"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->manual_gear = (int8_t)PyLong_AsLong(field); + Py_DECREF(field); + } + { // gear_immediate + PyObject * field = PyObject_GetAttrString(_pymsg, "gear_immediate"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->gear_immediate = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__msg__car_controls__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of CarControls */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._car_controls"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "CarControls"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__msg__CarControls * ros_message = (airsim_interfaces__msg__CarControls *)raw_ros_message; + { // header + PyObject * field = NULL; + field = std_msgs__msg__header__convert_to_py(&ros_message->header); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "header", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // throttle + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->throttle); + { + int rc = PyObject_SetAttrString(_pymessage, "throttle", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // brake + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->brake); + { + int rc = PyObject_SetAttrString(_pymessage, "brake", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // steering + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->steering); + { + int rc = PyObject_SetAttrString(_pymessage, "steering", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // handbrake + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->handbrake ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "handbrake", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // manual + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->manual ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "manual", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // manual_gear + PyObject * field = NULL; + field = PyLong_FromLong(ros_message->manual_gear); + { + int rc = PyObject_SetAttrString(_pymessage, "manual_gear", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // gear_immediate + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->gear_immediate ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "gear_immediate", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state.py new file mode 100644 index 0000000000..65414a3721 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state.py @@ -0,0 +1,275 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:msg/CarState.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_CarState(type): + """Metaclass of message 'CarState'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.msg.CarState') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__car_state + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__car_state + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__car_state + cls._TYPE_SUPPORT = module.type_support_msg__msg__car_state + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__car_state + + from geometry_msgs.msg import PoseWithCovariance + if PoseWithCovariance.__class__._TYPE_SUPPORT is None: + PoseWithCovariance.__class__.__import_type_support__() + + from geometry_msgs.msg import TwistWithCovariance + if TwistWithCovariance.__class__._TYPE_SUPPORT is None: + TwistWithCovariance.__class__.__import_type_support__() + + from std_msgs.msg import Header + if Header.__class__._TYPE_SUPPORT is None: + Header.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class CarState(metaclass=Metaclass_CarState): + """Message class 'CarState'.""" + + __slots__ = [ + '_header', + '_pose', + '_twist', + '_speed', + '_gear', + '_rpm', + '_maxrpm', + '_handbrake', + ] + + _fields_and_field_types = { + 'header': 'std_msgs/Header', + 'pose': 'geometry_msgs/PoseWithCovariance', + 'twist': 'geometry_msgs/TwistWithCovariance', + 'speed': 'float', + 'gear': 'int8', + 'rpm': 'float', + 'maxrpm': 'float', + 'handbrake': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 + rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'PoseWithCovariance'), # noqa: E501 + rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'TwistWithCovariance'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('int8'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from std_msgs.msg import Header + self.header = kwargs.get('header', Header()) + from geometry_msgs.msg import PoseWithCovariance + self.pose = kwargs.get('pose', PoseWithCovariance()) + from geometry_msgs.msg import TwistWithCovariance + self.twist = kwargs.get('twist', TwistWithCovariance()) + self.speed = kwargs.get('speed', float()) + self.gear = kwargs.get('gear', int()) + self.rpm = kwargs.get('rpm', float()) + self.maxrpm = kwargs.get('maxrpm', float()) + self.handbrake = kwargs.get('handbrake', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.header != other.header: + return False + if self.pose != other.pose: + return False + if self.twist != other.twist: + return False + if self.speed != other.speed: + return False + if self.gear != other.gear: + return False + if self.rpm != other.rpm: + return False + if self.maxrpm != other.maxrpm: + return False + if self.handbrake != other.handbrake: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def header(self): + """Message field 'header'.""" + return self._header + + @header.setter + def header(self, value): + if __debug__: + from std_msgs.msg import Header + assert \ + isinstance(value, Header), \ + "The 'header' field must be a sub message of type 'Header'" + self._header = value + + @property + def pose(self): + """Message field 'pose'.""" + return self._pose + + @pose.setter + def pose(self, value): + if __debug__: + from geometry_msgs.msg import PoseWithCovariance + assert \ + isinstance(value, PoseWithCovariance), \ + "The 'pose' field must be a sub message of type 'PoseWithCovariance'" + self._pose = value + + @property + def twist(self): + """Message field 'twist'.""" + return self._twist + + @twist.setter + def twist(self, value): + if __debug__: + from geometry_msgs.msg import TwistWithCovariance + assert \ + isinstance(value, TwistWithCovariance), \ + "The 'twist' field must be a sub message of type 'TwistWithCovariance'" + self._twist = value + + @property + def speed(self): + """Message field 'speed'.""" + return self._speed + + @speed.setter + def speed(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'speed' field must be of type 'float'" + self._speed = value + + @property + def gear(self): + """Message field 'gear'.""" + return self._gear + + @gear.setter + def gear(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'gear' field must be of type 'int'" + assert value >= -128 and value < 128, \ + "The 'gear' field must be an integer in [-128, 127]" + self._gear = value + + @property + def rpm(self): + """Message field 'rpm'.""" + return self._rpm + + @rpm.setter + def rpm(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'rpm' field must be of type 'float'" + self._rpm = value + + @property + def maxrpm(self): + """Message field 'maxrpm'.""" + return self._maxrpm + + @maxrpm.setter + def maxrpm(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'maxrpm' field must be of type 'float'" + self._maxrpm = value + + @property + def handbrake(self): + """Message field 'handbrake'.""" + return self._handbrake + + @handbrake.setter + def handbrake(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'handbrake' field must be of type 'bool'" + self._handbrake = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state_s.c new file mode 100644 index 0000000000..8346491ea0 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state_s.c @@ -0,0 +1,265 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:msg/CarState.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/detail/car_state__struct.h" +#include "airsim_interfaces/msg/detail/car_state__functions.h" + +ROSIDL_GENERATOR_C_IMPORT +bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); +ROSIDL_GENERATOR_C_IMPORT +bool geometry_msgs__msg__pose_with_covariance__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * geometry_msgs__msg__pose_with_covariance__convert_to_py(void * raw_ros_message); +ROSIDL_GENERATOR_C_IMPORT +bool geometry_msgs__msg__twist_with_covariance__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * geometry_msgs__msg__twist_with_covariance__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__msg__car_state__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[42]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.msg._car_state.CarState", full_classname_dest, 41) == 0); + } + airsim_interfaces__msg__CarState * ros_message = _ros_message; + { // header + PyObject * field = PyObject_GetAttrString(_pymsg, "header"); + if (!field) { + return false; + } + if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // pose + PyObject * field = PyObject_GetAttrString(_pymsg, "pose"); + if (!field) { + return false; + } + if (!geometry_msgs__msg__pose_with_covariance__convert_from_py(field, &ros_message->pose)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // twist + PyObject * field = PyObject_GetAttrString(_pymsg, "twist"); + if (!field) { + return false; + } + if (!geometry_msgs__msg__twist_with_covariance__convert_from_py(field, &ros_message->twist)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // speed + PyObject * field = PyObject_GetAttrString(_pymsg, "speed"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->speed = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // gear + PyObject * field = PyObject_GetAttrString(_pymsg, "gear"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->gear = (int8_t)PyLong_AsLong(field); + Py_DECREF(field); + } + { // rpm + PyObject * field = PyObject_GetAttrString(_pymsg, "rpm"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->rpm = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // maxrpm + PyObject * field = PyObject_GetAttrString(_pymsg, "maxrpm"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->maxrpm = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // handbrake + PyObject * field = PyObject_GetAttrString(_pymsg, "handbrake"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->handbrake = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__msg__car_state__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of CarState */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._car_state"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "CarState"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__msg__CarState * ros_message = (airsim_interfaces__msg__CarState *)raw_ros_message; + { // header + PyObject * field = NULL; + field = std_msgs__msg__header__convert_to_py(&ros_message->header); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "header", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // pose + PyObject * field = NULL; + field = geometry_msgs__msg__pose_with_covariance__convert_to_py(&ros_message->pose); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "pose", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // twist + PyObject * field = NULL; + field = geometry_msgs__msg__twist_with_covariance__convert_to_py(&ros_message->twist); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "twist", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // speed + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->speed); + { + int rc = PyObject_SetAttrString(_pymessage, "speed", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // gear + PyObject * field = NULL; + field = PyLong_FromLong(ros_message->gear); + { + int rc = PyObject_SetAttrString(_pymessage, "gear", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // rpm + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->rpm); + { + int rc = PyObject_SetAttrString(_pymessage, "rpm", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // maxrpm + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->maxrpm); + { + int rc = PyObject_SetAttrString(_pymessage, "maxrpm", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // handbrake + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->handbrake ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "handbrake", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment.py new file mode 100644 index 0000000000..e2d3ab1101 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment.py @@ -0,0 +1,256 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:msg/Environment.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_Environment(type): + """Metaclass of message 'Environment'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.msg.Environment') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__environment + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__environment + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__environment + cls._TYPE_SUPPORT = module.type_support_msg__msg__environment + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__environment + + from geographic_msgs.msg import GeoPoint + if GeoPoint.__class__._TYPE_SUPPORT is None: + GeoPoint.__class__.__import_type_support__() + + from geometry_msgs.msg import Vector3 + if Vector3.__class__._TYPE_SUPPORT is None: + Vector3.__class__.__import_type_support__() + + from std_msgs.msg import Header + if Header.__class__._TYPE_SUPPORT is None: + Header.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Environment(metaclass=Metaclass_Environment): + """Message class 'Environment'.""" + + __slots__ = [ + '_header', + '_position', + '_geo_point', + '_gravity', + '_air_pressure', + '_temperature', + '_air_density', + ] + + _fields_and_field_types = { + 'header': 'std_msgs/Header', + 'position': 'geometry_msgs/Vector3', + 'geo_point': 'geographic_msgs/GeoPoint', + 'gravity': 'geometry_msgs/Vector3', + 'air_pressure': 'float', + 'temperature': 'float', + 'air_density': 'float', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 + rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'Vector3'), # noqa: E501 + rosidl_parser.definition.NamespacedType(['geographic_msgs', 'msg'], 'GeoPoint'), # noqa: E501 + rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'Vector3'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from std_msgs.msg import Header + self.header = kwargs.get('header', Header()) + from geometry_msgs.msg import Vector3 + self.position = kwargs.get('position', Vector3()) + from geographic_msgs.msg import GeoPoint + self.geo_point = kwargs.get('geo_point', GeoPoint()) + from geometry_msgs.msg import Vector3 + self.gravity = kwargs.get('gravity', Vector3()) + self.air_pressure = kwargs.get('air_pressure', float()) + self.temperature = kwargs.get('temperature', float()) + self.air_density = kwargs.get('air_density', float()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.header != other.header: + return False + if self.position != other.position: + return False + if self.geo_point != other.geo_point: + return False + if self.gravity != other.gravity: + return False + if self.air_pressure != other.air_pressure: + return False + if self.temperature != other.temperature: + return False + if self.air_density != other.air_density: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def header(self): + """Message field 'header'.""" + return self._header + + @header.setter + def header(self, value): + if __debug__: + from std_msgs.msg import Header + assert \ + isinstance(value, Header), \ + "The 'header' field must be a sub message of type 'Header'" + self._header = value + + @property + def position(self): + """Message field 'position'.""" + return self._position + + @position.setter + def position(self, value): + if __debug__: + from geometry_msgs.msg import Vector3 + assert \ + isinstance(value, Vector3), \ + "The 'position' field must be a sub message of type 'Vector3'" + self._position = value + + @property + def geo_point(self): + """Message field 'geo_point'.""" + return self._geo_point + + @geo_point.setter + def geo_point(self, value): + if __debug__: + from geographic_msgs.msg import GeoPoint + assert \ + isinstance(value, GeoPoint), \ + "The 'geo_point' field must be a sub message of type 'GeoPoint'" + self._geo_point = value + + @property + def gravity(self): + """Message field 'gravity'.""" + return self._gravity + + @gravity.setter + def gravity(self, value): + if __debug__: + from geometry_msgs.msg import Vector3 + assert \ + isinstance(value, Vector3), \ + "The 'gravity' field must be a sub message of type 'Vector3'" + self._gravity = value + + @property + def air_pressure(self): + """Message field 'air_pressure'.""" + return self._air_pressure + + @air_pressure.setter + def air_pressure(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'air_pressure' field must be of type 'float'" + self._air_pressure = value + + @property + def temperature(self): + """Message field 'temperature'.""" + return self._temperature + + @temperature.setter + def temperature(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'temperature' field must be of type 'float'" + self._temperature = value + + @property + def air_density(self): + """Message field 'air_density'.""" + return self._air_density + + @air_density.setter + def air_density(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'air_density' field must be of type 'float'" + self._air_density = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment_s.c new file mode 100644 index 0000000000..45195e7dfe --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment_s.c @@ -0,0 +1,254 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:msg/Environment.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/detail/environment__struct.h" +#include "airsim_interfaces/msg/detail/environment__functions.h" + +ROSIDL_GENERATOR_C_IMPORT +bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); +ROSIDL_GENERATOR_C_IMPORT +bool geometry_msgs__msg__vector3__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * geometry_msgs__msg__vector3__convert_to_py(void * raw_ros_message); +ROSIDL_GENERATOR_C_IMPORT +bool geographic_msgs__msg__geo_point__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * geographic_msgs__msg__geo_point__convert_to_py(void * raw_ros_message); +ROSIDL_GENERATOR_C_IMPORT +bool geometry_msgs__msg__vector3__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * geometry_msgs__msg__vector3__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__msg__environment__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[47]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.msg._environment.Environment", full_classname_dest, 46) == 0); + } + airsim_interfaces__msg__Environment * ros_message = _ros_message; + { // header + PyObject * field = PyObject_GetAttrString(_pymsg, "header"); + if (!field) { + return false; + } + if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // position + PyObject * field = PyObject_GetAttrString(_pymsg, "position"); + if (!field) { + return false; + } + if (!geometry_msgs__msg__vector3__convert_from_py(field, &ros_message->position)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // geo_point + PyObject * field = PyObject_GetAttrString(_pymsg, "geo_point"); + if (!field) { + return false; + } + if (!geographic_msgs__msg__geo_point__convert_from_py(field, &ros_message->geo_point)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // gravity + PyObject * field = PyObject_GetAttrString(_pymsg, "gravity"); + if (!field) { + return false; + } + if (!geometry_msgs__msg__vector3__convert_from_py(field, &ros_message->gravity)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // air_pressure + PyObject * field = PyObject_GetAttrString(_pymsg, "air_pressure"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->air_pressure = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // temperature + PyObject * field = PyObject_GetAttrString(_pymsg, "temperature"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->temperature = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // air_density + PyObject * field = PyObject_GetAttrString(_pymsg, "air_density"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->air_density = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__msg__environment__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Environment */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._environment"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Environment"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__msg__Environment * ros_message = (airsim_interfaces__msg__Environment *)raw_ros_message; + { // header + PyObject * field = NULL; + field = std_msgs__msg__header__convert_to_py(&ros_message->header); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "header", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // position + PyObject * field = NULL; + field = geometry_msgs__msg__vector3__convert_to_py(&ros_message->position); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "position", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // geo_point + PyObject * field = NULL; + field = geographic_msgs__msg__geo_point__convert_to_py(&ros_message->geo_point); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "geo_point", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // gravity + PyObject * field = NULL; + field = geometry_msgs__msg__vector3__convert_to_py(&ros_message->gravity); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "gravity", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // air_pressure + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->air_pressure); + { + int rc = PyObject_SetAttrString(_pymessage, "air_pressure", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // temperature + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->temperature); + { + int rc = PyObject_SetAttrString(_pymessage, "temperature", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // air_density + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->air_density); + { + int rc = PyObject_SetAttrString(_pymessage, "air_density", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd.py new file mode 100644 index 0000000000..66074d532c --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd.py @@ -0,0 +1,223 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_GimbalAngleEulerCmd(type): + """Metaclass of message 'GimbalAngleEulerCmd'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.msg.GimbalAngleEulerCmd') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__gimbal_angle_euler_cmd + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__gimbal_angle_euler_cmd + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__gimbal_angle_euler_cmd + cls._TYPE_SUPPORT = module.type_support_msg__msg__gimbal_angle_euler_cmd + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__gimbal_angle_euler_cmd + + from std_msgs.msg import Header + if Header.__class__._TYPE_SUPPORT is None: + Header.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class GimbalAngleEulerCmd(metaclass=Metaclass_GimbalAngleEulerCmd): + """Message class 'GimbalAngleEulerCmd'.""" + + __slots__ = [ + '_header', + '_camera_name', + '_vehicle_name', + '_roll', + '_pitch', + '_yaw', + ] + + _fields_and_field_types = { + 'header': 'std_msgs/Header', + 'camera_name': 'string', + 'vehicle_name': 'string', + 'roll': 'double', + 'pitch': 'double', + 'yaw': 'double', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from std_msgs.msg import Header + self.header = kwargs.get('header', Header()) + self.camera_name = kwargs.get('camera_name', str()) + self.vehicle_name = kwargs.get('vehicle_name', str()) + self.roll = kwargs.get('roll', float()) + self.pitch = kwargs.get('pitch', float()) + self.yaw = kwargs.get('yaw', float()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.header != other.header: + return False + if self.camera_name != other.camera_name: + return False + if self.vehicle_name != other.vehicle_name: + return False + if self.roll != other.roll: + return False + if self.pitch != other.pitch: + return False + if self.yaw != other.yaw: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def header(self): + """Message field 'header'.""" + return self._header + + @header.setter + def header(self, value): + if __debug__: + from std_msgs.msg import Header + assert \ + isinstance(value, Header), \ + "The 'header' field must be a sub message of type 'Header'" + self._header = value + + @property + def camera_name(self): + """Message field 'camera_name'.""" + return self._camera_name + + @camera_name.setter + def camera_name(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'camera_name' field must be of type 'str'" + self._camera_name = value + + @property + def vehicle_name(self): + """Message field 'vehicle_name'.""" + return self._vehicle_name + + @vehicle_name.setter + def vehicle_name(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'vehicle_name' field must be of type 'str'" + self._vehicle_name = value + + @property + def roll(self): + """Message field 'roll'.""" + return self._roll + + @roll.setter + def roll(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'roll' field must be of type 'float'" + self._roll = value + + @property + def pitch(self): + """Message field 'pitch'.""" + return self._pitch + + @pitch.setter + def pitch(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'pitch' field must be of type 'float'" + self._pitch = value + + @property + def yaw(self): + """Message field 'yaw'.""" + return self._yaw + + @yaw.setter + def yaw(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'yaw' field must be of type 'float'" + self._yaw = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd_s.c new file mode 100644 index 0000000000..bb9d215bf0 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd_s.c @@ -0,0 +1,234 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h" + +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + +ROSIDL_GENERATOR_C_IMPORT +bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__msg__gimbal_angle_euler_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[66]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.msg._gimbal_angle_euler_cmd.GimbalAngleEulerCmd", full_classname_dest, 65) == 0); + } + airsim_interfaces__msg__GimbalAngleEulerCmd * ros_message = _ros_message; + { // header + PyObject * field = PyObject_GetAttrString(_pymsg, "header"); + if (!field) { + return false; + } + if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // camera_name + PyObject * field = PyObject_GetAttrString(_pymsg, "camera_name"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->camera_name, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // vehicle_name + PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_name"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->vehicle_name, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // roll + PyObject * field = PyObject_GetAttrString(_pymsg, "roll"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->roll = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // pitch + PyObject * field = PyObject_GetAttrString(_pymsg, "pitch"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->pitch = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // yaw + PyObject * field = PyObject_GetAttrString(_pymsg, "yaw"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->yaw = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__msg__gimbal_angle_euler_cmd__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of GimbalAngleEulerCmd */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._gimbal_angle_euler_cmd"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "GimbalAngleEulerCmd"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__msg__GimbalAngleEulerCmd * ros_message = (airsim_interfaces__msg__GimbalAngleEulerCmd *)raw_ros_message; + { // header + PyObject * field = NULL; + field = std_msgs__msg__header__convert_to_py(&ros_message->header); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "header", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // camera_name + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->camera_name.data, + strlen(ros_message->camera_name.data), + "strict"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "camera_name", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // vehicle_name + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->vehicle_name.data, + strlen(ros_message->vehicle_name.data), + "strict"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "vehicle_name", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // roll + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->roll); + { + int rc = PyObject_SetAttrString(_pymessage, "roll", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // pitch + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->pitch); + { + int rc = PyObject_SetAttrString(_pymessage, "pitch", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // yaw + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->yaw); + { + int rc = PyObject_SetAttrString(_pymessage, "yaw", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd.py new file mode 100644 index 0000000000..a097e3da59 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd.py @@ -0,0 +1,191 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_GimbalAngleQuatCmd(type): + """Metaclass of message 'GimbalAngleQuatCmd'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.msg.GimbalAngleQuatCmd') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__gimbal_angle_quat_cmd + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__gimbal_angle_quat_cmd + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__gimbal_angle_quat_cmd + cls._TYPE_SUPPORT = module.type_support_msg__msg__gimbal_angle_quat_cmd + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__gimbal_angle_quat_cmd + + from geometry_msgs.msg import Quaternion + if Quaternion.__class__._TYPE_SUPPORT is None: + Quaternion.__class__.__import_type_support__() + + from std_msgs.msg import Header + if Header.__class__._TYPE_SUPPORT is None: + Header.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class GimbalAngleQuatCmd(metaclass=Metaclass_GimbalAngleQuatCmd): + """Message class 'GimbalAngleQuatCmd'.""" + + __slots__ = [ + '_header', + '_camera_name', + '_vehicle_name', + '_orientation', + ] + + _fields_and_field_types = { + 'header': 'std_msgs/Header', + 'camera_name': 'string', + 'vehicle_name': 'string', + 'orientation': 'geometry_msgs/Quaternion', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'Quaternion'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from std_msgs.msg import Header + self.header = kwargs.get('header', Header()) + self.camera_name = kwargs.get('camera_name', str()) + self.vehicle_name = kwargs.get('vehicle_name', str()) + from geometry_msgs.msg import Quaternion + self.orientation = kwargs.get('orientation', Quaternion()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.header != other.header: + return False + if self.camera_name != other.camera_name: + return False + if self.vehicle_name != other.vehicle_name: + return False + if self.orientation != other.orientation: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def header(self): + """Message field 'header'.""" + return self._header + + @header.setter + def header(self, value): + if __debug__: + from std_msgs.msg import Header + assert \ + isinstance(value, Header), \ + "The 'header' field must be a sub message of type 'Header'" + self._header = value + + @property + def camera_name(self): + """Message field 'camera_name'.""" + return self._camera_name + + @camera_name.setter + def camera_name(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'camera_name' field must be of type 'str'" + self._camera_name = value + + @property + def vehicle_name(self): + """Message field 'vehicle_name'.""" + return self._vehicle_name + + @vehicle_name.setter + def vehicle_name(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'vehicle_name' field must be of type 'str'" + self._vehicle_name = value + + @property + def orientation(self): + """Message field 'orientation'.""" + return self._orientation + + @orientation.setter + def orientation(self, value): + if __debug__: + from geometry_msgs.msg import Quaternion + assert \ + isinstance(value, Quaternion), \ + "The 'orientation' field must be a sub message of type 'Quaternion'" + self._orientation = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd_s.c new file mode 100644 index 0000000000..5430186a29 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd_s.c @@ -0,0 +1,203 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h" +#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h" + +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + +ROSIDL_GENERATOR_C_IMPORT +bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); +ROSIDL_GENERATOR_C_IMPORT +bool geometry_msgs__msg__quaternion__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * geometry_msgs__msg__quaternion__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__msg__gimbal_angle_quat_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[64]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.msg._gimbal_angle_quat_cmd.GimbalAngleQuatCmd", full_classname_dest, 63) == 0); + } + airsim_interfaces__msg__GimbalAngleQuatCmd * ros_message = _ros_message; + { // header + PyObject * field = PyObject_GetAttrString(_pymsg, "header"); + if (!field) { + return false; + } + if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // camera_name + PyObject * field = PyObject_GetAttrString(_pymsg, "camera_name"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->camera_name, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // vehicle_name + PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_name"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->vehicle_name, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // orientation + PyObject * field = PyObject_GetAttrString(_pymsg, "orientation"); + if (!field) { + return false; + } + if (!geometry_msgs__msg__quaternion__convert_from_py(field, &ros_message->orientation)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__msg__gimbal_angle_quat_cmd__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of GimbalAngleQuatCmd */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._gimbal_angle_quat_cmd"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "GimbalAngleQuatCmd"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__msg__GimbalAngleQuatCmd * ros_message = (airsim_interfaces__msg__GimbalAngleQuatCmd *)raw_ros_message; + { // header + PyObject * field = NULL; + field = std_msgs__msg__header__convert_to_py(&ros_message->header); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "header", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // camera_name + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->camera_name.data, + strlen(ros_message->camera_name.data), + "strict"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "camera_name", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // vehicle_name + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->vehicle_name.data, + strlen(ros_message->vehicle_name.data), + "strict"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "vehicle_name", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // orientation + PyObject * field = NULL; + field = geometry_msgs__msg__quaternion__convert_to_py(&ros_message->orientation); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "orientation", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw.py new file mode 100644 index 0000000000..03feaf34b5 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw.py @@ -0,0 +1,179 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:msg/GPSYaw.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_GPSYaw(type): + """Metaclass of message 'GPSYaw'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.msg.GPSYaw') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__gps_yaw + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__gps_yaw + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__gps_yaw + cls._TYPE_SUPPORT = module.type_support_msg__msg__gps_yaw + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__gps_yaw + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class GPSYaw(metaclass=Metaclass_GPSYaw): + """Message class 'GPSYaw'.""" + + __slots__ = [ + '_latitude', + '_longitude', + '_altitude', + '_yaw', + ] + + _fields_and_field_types = { + 'latitude': 'double', + 'longitude': 'double', + 'altitude': 'double', + 'yaw': 'double', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.latitude = kwargs.get('latitude', float()) + self.longitude = kwargs.get('longitude', float()) + self.altitude = kwargs.get('altitude', float()) + self.yaw = kwargs.get('yaw', float()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.latitude != other.latitude: + return False + if self.longitude != other.longitude: + return False + if self.altitude != other.altitude: + return False + if self.yaw != other.yaw: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def latitude(self): + """Message field 'latitude'.""" + return self._latitude + + @latitude.setter + def latitude(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'latitude' field must be of type 'float'" + self._latitude = value + + @property + def longitude(self): + """Message field 'longitude'.""" + return self._longitude + + @longitude.setter + def longitude(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'longitude' field must be of type 'float'" + self._longitude = value + + @property + def altitude(self): + """Message field 'altitude'.""" + return self._altitude + + @altitude.setter + def altitude(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'altitude' field must be of type 'float'" + self._altitude = value + + @property + def yaw(self): + """Message field 'yaw'.""" + return self._yaw + + @yaw.setter + def yaw(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'yaw' field must be of type 'float'" + self._yaw = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw_s.c new file mode 100644 index 0000000000..82705670e6 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw_s.c @@ -0,0 +1,158 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:msg/GPSYaw.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/detail/gps_yaw__struct.h" +#include "airsim_interfaces/msg/detail/gps_yaw__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__msg__gps_yaw__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[38]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.msg._gps_yaw.GPSYaw", full_classname_dest, 37) == 0); + } + airsim_interfaces__msg__GPSYaw * ros_message = _ros_message; + { // latitude + PyObject * field = PyObject_GetAttrString(_pymsg, "latitude"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->latitude = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // longitude + PyObject * field = PyObject_GetAttrString(_pymsg, "longitude"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->longitude = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // altitude + PyObject * field = PyObject_GetAttrString(_pymsg, "altitude"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->altitude = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // yaw + PyObject * field = PyObject_GetAttrString(_pymsg, "yaw"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->yaw = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__msg__gps_yaw__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of GPSYaw */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._gps_yaw"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "GPSYaw"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__msg__GPSYaw * ros_message = (airsim_interfaces__msg__GPSYaw *)raw_ros_message; + { // latitude + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->latitude); + { + int rc = PyObject_SetAttrString(_pymessage, "latitude", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // longitude + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->longitude); + { + int rc = PyObject_SetAttrString(_pymessage, "longitude", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // altitude + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->altitude); + { + int rc = PyObject_SetAttrString(_pymessage, "altitude", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // yaw + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->yaw); + { + int rc = PyObject_SetAttrString(_pymessage, "yaw", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd.py new file mode 100644 index 0000000000..238c7d4589 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd.py @@ -0,0 +1,128 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:msg/VelCmd.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_VelCmd(type): + """Metaclass of message 'VelCmd'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.msg.VelCmd') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__vel_cmd + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__vel_cmd + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__vel_cmd + cls._TYPE_SUPPORT = module.type_support_msg__msg__vel_cmd + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__vel_cmd + + from geometry_msgs.msg import Twist + if Twist.__class__._TYPE_SUPPORT is None: + Twist.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class VelCmd(metaclass=Metaclass_VelCmd): + """Message class 'VelCmd'.""" + + __slots__ = [ + '_twist', + ] + + _fields_and_field_types = { + 'twist': 'geometry_msgs/Twist', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'Twist'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from geometry_msgs.msg import Twist + self.twist = kwargs.get('twist', Twist()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.twist != other.twist: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def twist(self): + """Message field 'twist'.""" + return self._twist + + @twist.setter + def twist(self, value): + if __debug__: + from geometry_msgs.msg import Twist + assert \ + isinstance(value, Twist), \ + "The 'twist' field must be a sub message of type 'Twist'" + self._twist = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group.py new file mode 100644 index 0000000000..4369d27eb9 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group.py @@ -0,0 +1,157 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:msg/VelCmdGroup.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_VelCmdGroup(type): + """Metaclass of message 'VelCmdGroup'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.msg.VelCmdGroup') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__vel_cmd_group + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__vel_cmd_group + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__vel_cmd_group + cls._TYPE_SUPPORT = module.type_support_msg__msg__vel_cmd_group + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__vel_cmd_group + + from geometry_msgs.msg import Twist + if Twist.__class__._TYPE_SUPPORT is None: + Twist.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class VelCmdGroup(metaclass=Metaclass_VelCmdGroup): + """Message class 'VelCmdGroup'.""" + + __slots__ = [ + '_twist', + '_vehicle_names', + ] + + _fields_and_field_types = { + 'twist': 'geometry_msgs/Twist', + 'vehicle_names': 'sequence', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'Twist'), # noqa: E501 + rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.UnboundedString()), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from geometry_msgs.msg import Twist + self.twist = kwargs.get('twist', Twist()) + self.vehicle_names = kwargs.get('vehicle_names', []) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.twist != other.twist: + return False + if self.vehicle_names != other.vehicle_names: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def twist(self): + """Message field 'twist'.""" + return self._twist + + @twist.setter + def twist(self, value): + if __debug__: + from geometry_msgs.msg import Twist + assert \ + isinstance(value, Twist), \ + "The 'twist' field must be a sub message of type 'Twist'" + self._twist = value + + @property + def vehicle_names(self): + """Message field 'vehicle_names'.""" + return self._vehicle_names + + @vehicle_names.setter + def vehicle_names(self, value): + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + all(isinstance(v, str) for v in value) and + True), \ + "The 'vehicle_names' field must be a set or sequence and each value of type 'str'" + self._vehicle_names = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group_s.c new file mode 100644 index 0000000000..100f51b6e9 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group_s.c @@ -0,0 +1,181 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:msg/VelCmdGroup.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.h" +#include "airsim_interfaces/msg/detail/vel_cmd_group__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + +ROSIDL_GENERATOR_C_IMPORT +bool geometry_msgs__msg__twist__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * geometry_msgs__msg__twist__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__msg__vel_cmd_group__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[49]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.msg._vel_cmd_group.VelCmdGroup", full_classname_dest, 48) == 0); + } + airsim_interfaces__msg__VelCmdGroup * ros_message = _ros_message; + { // twist + PyObject * field = PyObject_GetAttrString(_pymsg, "twist"); + if (!field) { + return false; + } + if (!geometry_msgs__msg__twist__convert_from_py(field, &ros_message->twist)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // vehicle_names + PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_names"); + if (!field) { + return false; + } + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'vehicle_names'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = PySequence_Size(field); + if (-1 == size) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + if (!rosidl_runtime_c__String__Sequence__init(&(ros_message->vehicle_names), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create String__Sequence ros_message"); + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String * dest = ros_message->vehicle_names.data; + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); + if (!item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + assert(PyUnicode_Check(item)); + PyObject * encoded_item = PyUnicode_AsUTF8String(item); + if (!encoded_item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&dest[i], PyBytes_AS_STRING(encoded_item)); + Py_DECREF(encoded_item); + } + Py_DECREF(seq_field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__msg__vel_cmd_group__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of VelCmdGroup */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._vel_cmd_group"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "VelCmdGroup"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__msg__VelCmdGroup * ros_message = (airsim_interfaces__msg__VelCmdGroup *)raw_ros_message; + { // twist + PyObject * field = NULL; + field = geometry_msgs__msg__twist__convert_to_py(&ros_message->twist); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "twist", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // vehicle_names + PyObject * field = NULL; + size_t size = ros_message->vehicle_names.size; + rosidl_runtime_c__String * src = ros_message->vehicle_names.data; + field = PyList_New(size); + if (!field) { + return NULL; + } + for (size_t i = 0; i < size; ++i) { + PyObject * decoded_item = PyUnicode_DecodeUTF8(src[i].data, strlen(src[i].data), "strict"); + if (!decoded_item) { + return NULL; + } + int rc = PyList_SetItem(field, i, decoded_item); + (void)rc; + assert(rc == 0); + } + assert(PySequence_Check(field)); + { + int rc = PyObject_SetAttrString(_pymessage, "vehicle_names", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_s.c new file mode 100644 index 0000000000..4ff9b5fa50 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_s.c @@ -0,0 +1,107 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:msg/VelCmd.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/msg/detail/vel_cmd__struct.h" +#include "airsim_interfaces/msg/detail/vel_cmd__functions.h" + +ROSIDL_GENERATOR_C_IMPORT +bool geometry_msgs__msg__twist__convert_from_py(PyObject * _pymsg, void * _ros_message); +ROSIDL_GENERATOR_C_IMPORT +PyObject * geometry_msgs__msg__twist__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__msg__vel_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[38]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.msg._vel_cmd.VelCmd", full_classname_dest, 37) == 0); + } + airsim_interfaces__msg__VelCmd * ros_message = _ros_message; + { // twist + PyObject * field = PyObject_GetAttrString(_pymsg, "twist"); + if (!field) { + return false; + } + if (!geometry_msgs__msg__twist__convert_from_py(field, &ros_message->twist)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__msg__vel_cmd__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of VelCmd */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._vel_cmd"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "VelCmd"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__msg__VelCmd * ros_message = (airsim_interfaces__msg__VelCmd *)raw_ros_message; + { // twist + PyObject * field = NULL; + field = geometry_msgs__msg__twist__convert_to_py(&ros_message->twist); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "twist", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/__init__.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/__init__.py new file mode 100644 index 0000000000..114256927c --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/__init__.py @@ -0,0 +1,7 @@ +from airsim_interfaces.srv._land import Land # noqa: F401 +from airsim_interfaces.srv._land_group import LandGroup # noqa: F401 +from airsim_interfaces.srv._reset import Reset # noqa: F401 +from airsim_interfaces.srv._set_gps_position import SetGPSPosition # noqa: F401 +from airsim_interfaces.srv._set_local_position import SetLocalPosition # noqa: F401 +from airsim_interfaces.srv._takeoff import Takeoff # noqa: F401 +from airsim_interfaces.srv._takeoff_group import TakeoffGroup # noqa: F401 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land.py new file mode 100644 index 0000000000..8566c571f2 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land.py @@ -0,0 +1,278 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:srv/Land.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_Land_Request(type): + """Metaclass of message 'Land_Request'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.Land_Request') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__land__request + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__land__request + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__land__request + cls._TYPE_SUPPORT = module.type_support_msg__srv__land__request + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__land__request + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Land_Request(metaclass=Metaclass_Land_Request): + """Message class 'Land_Request'.""" + + __slots__ = [ + '_wait_on_last_task', + ] + + _fields_and_field_types = { + 'wait_on_last_task': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.wait_on_last_task = kwargs.get('wait_on_last_task', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.wait_on_last_task != other.wait_on_last_task: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def wait_on_last_task(self): + """Message field 'wait_on_last_task'.""" + return self._wait_on_last_task + + @wait_on_last_task.setter + def wait_on_last_task(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'wait_on_last_task' field must be of type 'bool'" + self._wait_on_last_task = value + + +# Import statements for member types + +# already imported above +# import rosidl_parser.definition + + +class Metaclass_Land_Response(type): + """Metaclass of message 'Land_Response'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.Land_Response') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__land__response + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__land__response + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__land__response + cls._TYPE_SUPPORT = module.type_support_msg__srv__land__response + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__land__response + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Land_Response(metaclass=Metaclass_Land_Response): + """Message class 'Land_Response'.""" + + __slots__ = [ + '_success', + ] + + _fields_and_field_types = { + 'success': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.success = kwargs.get('success', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.success != other.success: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def success(self): + """Message field 'success'.""" + return self._success + + @success.setter + def success(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'success' field must be of type 'bool'" + self._success = value + + +class Metaclass_Land(type): + """Metaclass of service 'Land'.""" + + _TYPE_SUPPORT = None + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.Land') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._TYPE_SUPPORT = module.type_support_srv__srv__land + + from airsim_interfaces.srv import _land + if _land.Metaclass_Land_Request._TYPE_SUPPORT is None: + _land.Metaclass_Land_Request.__import_type_support__() + if _land.Metaclass_Land_Response._TYPE_SUPPORT is None: + _land.Metaclass_Land_Response.__import_type_support__() + + +class Land(metaclass=Metaclass_Land): + from airsim_interfaces.srv._land import Land_Request as Request + from airsim_interfaces.srv._land import Land_Response as Response + + def __init__(self): + raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group.py new file mode 100644 index 0000000000..deafc93151 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group.py @@ -0,0 +1,307 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:srv/LandGroup.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_LandGroup_Request(type): + """Metaclass of message 'LandGroup_Request'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.LandGroup_Request') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__land_group__request + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__land_group__request + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__land_group__request + cls._TYPE_SUPPORT = module.type_support_msg__srv__land_group__request + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__land_group__request + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class LandGroup_Request(metaclass=Metaclass_LandGroup_Request): + """Message class 'LandGroup_Request'.""" + + __slots__ = [ + '_vehicle_names', + '_wait_on_last_task', + ] + + _fields_and_field_types = { + 'vehicle_names': 'sequence', + 'wait_on_last_task': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.UnboundedString()), # noqa: E501 + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.vehicle_names = kwargs.get('vehicle_names', []) + self.wait_on_last_task = kwargs.get('wait_on_last_task', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.vehicle_names != other.vehicle_names: + return False + if self.wait_on_last_task != other.wait_on_last_task: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def vehicle_names(self): + """Message field 'vehicle_names'.""" + return self._vehicle_names + + @vehicle_names.setter + def vehicle_names(self, value): + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + all(isinstance(v, str) for v in value) and + True), \ + "The 'vehicle_names' field must be a set or sequence and each value of type 'str'" + self._vehicle_names = value + + @property + def wait_on_last_task(self): + """Message field 'wait_on_last_task'.""" + return self._wait_on_last_task + + @wait_on_last_task.setter + def wait_on_last_task(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'wait_on_last_task' field must be of type 'bool'" + self._wait_on_last_task = value + + +# Import statements for member types + +# already imported above +# import rosidl_parser.definition + + +class Metaclass_LandGroup_Response(type): + """Metaclass of message 'LandGroup_Response'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.LandGroup_Response') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__land_group__response + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__land_group__response + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__land_group__response + cls._TYPE_SUPPORT = module.type_support_msg__srv__land_group__response + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__land_group__response + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class LandGroup_Response(metaclass=Metaclass_LandGroup_Response): + """Message class 'LandGroup_Response'.""" + + __slots__ = [ + '_success', + ] + + _fields_and_field_types = { + 'success': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.success = kwargs.get('success', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.success != other.success: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def success(self): + """Message field 'success'.""" + return self._success + + @success.setter + def success(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'success' field must be of type 'bool'" + self._success = value + + +class Metaclass_LandGroup(type): + """Metaclass of service 'LandGroup'.""" + + _TYPE_SUPPORT = None + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.LandGroup') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._TYPE_SUPPORT = module.type_support_srv__srv__land_group + + from airsim_interfaces.srv import _land_group + if _land_group.Metaclass_LandGroup_Request._TYPE_SUPPORT is None: + _land_group.Metaclass_LandGroup_Request.__import_type_support__() + if _land_group.Metaclass_LandGroup_Response._TYPE_SUPPORT is None: + _land_group.Metaclass_LandGroup_Response.__import_type_support__() + + +class LandGroup(metaclass=Metaclass_LandGroup): + from airsim_interfaces.srv._land_group import LandGroup_Request as Request + from airsim_interfaces.srv._land_group import LandGroup_Response as Response + + def __init__(self): + raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group_s.c new file mode 100644 index 0000000000..2762e924e2 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group_s.c @@ -0,0 +1,267 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:srv/LandGroup.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/srv/detail/land_group__struct.h" +#include "airsim_interfaces/srv/detail/land_group__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__land_group__request__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[52]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._land_group.LandGroup_Request", full_classname_dest, 51) == 0); + } + airsim_interfaces__srv__LandGroup_Request * ros_message = _ros_message; + { // vehicle_names + PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_names"); + if (!field) { + return false; + } + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'vehicle_names'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = PySequence_Size(field); + if (-1 == size) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + if (!rosidl_runtime_c__String__Sequence__init(&(ros_message->vehicle_names), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create String__Sequence ros_message"); + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String * dest = ros_message->vehicle_names.data; + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); + if (!item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + assert(PyUnicode_Check(item)); + PyObject * encoded_item = PyUnicode_AsUTF8String(item); + if (!encoded_item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&dest[i], PyBytes_AS_STRING(encoded_item)); + Py_DECREF(encoded_item); + } + Py_DECREF(seq_field); + Py_DECREF(field); + } + { // wait_on_last_task + PyObject * field = PyObject_GetAttrString(_pymsg, "wait_on_last_task"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->wait_on_last_task = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__land_group__request__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of LandGroup_Request */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._land_group"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "LandGroup_Request"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__LandGroup_Request * ros_message = (airsim_interfaces__srv__LandGroup_Request *)raw_ros_message; + { // vehicle_names + PyObject * field = NULL; + size_t size = ros_message->vehicle_names.size; + rosidl_runtime_c__String * src = ros_message->vehicle_names.data; + field = PyList_New(size); + if (!field) { + return NULL; + } + for (size_t i = 0; i < size; ++i) { + PyObject * decoded_item = PyUnicode_DecodeUTF8(src[i].data, strlen(src[i].data), "strict"); + if (!decoded_item) { + return NULL; + } + int rc = PyList_SetItem(field, i, decoded_item); + (void)rc; + assert(rc == 0); + } + assert(PySequence_Check(field)); + { + int rc = PyObject_SetAttrString(_pymessage, "vehicle_names", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // wait_on_last_task + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->wait_on_last_task ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "wait_on_last_task", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} + +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +// already included above +// #include +// already included above +// #include +// already included above +// #include "numpy/ndarrayobject.h" +// already included above +// #include "rosidl_runtime_c/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/land_group__struct.h" +// already included above +// #include "airsim_interfaces/srv/detail/land_group__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__land_group__response__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[53]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._land_group.LandGroup_Response", full_classname_dest, 52) == 0); + } + airsim_interfaces__srv__LandGroup_Response * ros_message = _ros_message; + { // success + PyObject * field = PyObject_GetAttrString(_pymsg, "success"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->success = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__land_group__response__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of LandGroup_Response */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._land_group"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "LandGroup_Response"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__LandGroup_Response * ros_message = (airsim_interfaces__srv__LandGroup_Response *)raw_ros_message; + { // success + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->success ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "success", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_s.c new file mode 100644 index 0000000000..d7b5166405 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_s.c @@ -0,0 +1,193 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:srv/Land.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/srv/detail/land__struct.h" +#include "airsim_interfaces/srv/detail/land__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__land__request__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[41]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._land.Land_Request", full_classname_dest, 40) == 0); + } + airsim_interfaces__srv__Land_Request * ros_message = _ros_message; + { // wait_on_last_task + PyObject * field = PyObject_GetAttrString(_pymsg, "wait_on_last_task"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->wait_on_last_task = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__land__request__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Land_Request */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._land"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Land_Request"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__Land_Request * ros_message = (airsim_interfaces__srv__Land_Request *)raw_ros_message; + { // wait_on_last_task + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->wait_on_last_task ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "wait_on_last_task", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} + +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +// already included above +// #include +// already included above +// #include +// already included above +// #include "numpy/ndarrayobject.h" +// already included above +// #include "rosidl_runtime_c/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/land__struct.h" +// already included above +// #include "airsim_interfaces/srv/detail/land__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__land__response__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[42]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._land.Land_Response", full_classname_dest, 41) == 0); + } + airsim_interfaces__srv__Land_Response * ros_message = _ros_message; + { // success + PyObject * field = PyObject_GetAttrString(_pymsg, "success"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->success = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__land__response__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Land_Response */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._land"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Land_Response"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__Land_Response * ros_message = (airsim_interfaces__srv__Land_Response *)raw_ros_message; + { // success + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->success ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "success", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset.py new file mode 100644 index 0000000000..cdfec1c9d9 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset.py @@ -0,0 +1,278 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:srv/Reset.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_Reset_Request(type): + """Metaclass of message 'Reset_Request'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.Reset_Request') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__reset__request + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__reset__request + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__reset__request + cls._TYPE_SUPPORT = module.type_support_msg__srv__reset__request + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__reset__request + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Reset_Request(metaclass=Metaclass_Reset_Request): + """Message class 'Reset_Request'.""" + + __slots__ = [ + '_wait_on_last_task', + ] + + _fields_and_field_types = { + 'wait_on_last_task': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.wait_on_last_task = kwargs.get('wait_on_last_task', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.wait_on_last_task != other.wait_on_last_task: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def wait_on_last_task(self): + """Message field 'wait_on_last_task'.""" + return self._wait_on_last_task + + @wait_on_last_task.setter + def wait_on_last_task(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'wait_on_last_task' field must be of type 'bool'" + self._wait_on_last_task = value + + +# Import statements for member types + +# already imported above +# import rosidl_parser.definition + + +class Metaclass_Reset_Response(type): + """Metaclass of message 'Reset_Response'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.Reset_Response') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__reset__response + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__reset__response + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__reset__response + cls._TYPE_SUPPORT = module.type_support_msg__srv__reset__response + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__reset__response + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Reset_Response(metaclass=Metaclass_Reset_Response): + """Message class 'Reset_Response'.""" + + __slots__ = [ + '_success', + ] + + _fields_and_field_types = { + 'success': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.success = kwargs.get('success', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.success != other.success: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def success(self): + """Message field 'success'.""" + return self._success + + @success.setter + def success(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'success' field must be of type 'bool'" + self._success = value + + +class Metaclass_Reset(type): + """Metaclass of service 'Reset'.""" + + _TYPE_SUPPORT = None + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.Reset') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._TYPE_SUPPORT = module.type_support_srv__srv__reset + + from airsim_interfaces.srv import _reset + if _reset.Metaclass_Reset_Request._TYPE_SUPPORT is None: + _reset.Metaclass_Reset_Request.__import_type_support__() + if _reset.Metaclass_Reset_Response._TYPE_SUPPORT is None: + _reset.Metaclass_Reset_Response.__import_type_support__() + + +class Reset(metaclass=Metaclass_Reset): + from airsim_interfaces.srv._reset import Reset_Request as Request + from airsim_interfaces.srv._reset import Reset_Response as Response + + def __init__(self): + raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset_s.c new file mode 100644 index 0000000000..1855a65712 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset_s.c @@ -0,0 +1,193 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:srv/Reset.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/srv/detail/reset__struct.h" +#include "airsim_interfaces/srv/detail/reset__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__reset__request__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[43]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._reset.Reset_Request", full_classname_dest, 42) == 0); + } + airsim_interfaces__srv__Reset_Request * ros_message = _ros_message; + { // wait_on_last_task + PyObject * field = PyObject_GetAttrString(_pymsg, "wait_on_last_task"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->wait_on_last_task = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__reset__request__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Reset_Request */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._reset"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Reset_Request"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__Reset_Request * ros_message = (airsim_interfaces__srv__Reset_Request *)raw_ros_message; + { // wait_on_last_task + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->wait_on_last_task ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "wait_on_last_task", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} + +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +// already included above +// #include +// already included above +// #include +// already included above +// #include "numpy/ndarrayobject.h" +// already included above +// #include "rosidl_runtime_c/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/reset__struct.h" +// already included above +// #include "airsim_interfaces/srv/detail/reset__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__reset__response__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[44]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._reset.Reset_Response", full_classname_dest, 43) == 0); + } + airsim_interfaces__srv__Reset_Response * ros_message = _ros_message; + { // success + PyObject * field = PyObject_GetAttrString(_pymsg, "success"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->success = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__reset__response__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Reset_Response */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._reset"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Reset_Response"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__Reset_Response * ros_message = (airsim_interfaces__srv__Reset_Response *)raw_ros_message; + { // success + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->success ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "success", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position.py new file mode 100644 index 0000000000..0ef5d6cf5b --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position.py @@ -0,0 +1,354 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:srv/SetGPSPosition.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_SetGPSPosition_Request(type): + """Metaclass of message 'SetGPSPosition_Request'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.SetGPSPosition_Request') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__set_gps_position__request + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__set_gps_position__request + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__set_gps_position__request + cls._TYPE_SUPPORT = module.type_support_msg__srv__set_gps_position__request + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__set_gps_position__request + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class SetGPSPosition_Request(metaclass=Metaclass_SetGPSPosition_Request): + """Message class 'SetGPSPosition_Request'.""" + + __slots__ = [ + '_latitude', + '_longitude', + '_altitude', + '_yaw', + '_vehicle_name', + ] + + _fields_and_field_types = { + 'latitude': 'double', + 'longitude': 'double', + 'altitude': 'double', + 'yaw': 'double', + 'vehicle_name': 'string', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.latitude = kwargs.get('latitude', float()) + self.longitude = kwargs.get('longitude', float()) + self.altitude = kwargs.get('altitude', float()) + self.yaw = kwargs.get('yaw', float()) + self.vehicle_name = kwargs.get('vehicle_name', str()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.latitude != other.latitude: + return False + if self.longitude != other.longitude: + return False + if self.altitude != other.altitude: + return False + if self.yaw != other.yaw: + return False + if self.vehicle_name != other.vehicle_name: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def latitude(self): + """Message field 'latitude'.""" + return self._latitude + + @latitude.setter + def latitude(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'latitude' field must be of type 'float'" + self._latitude = value + + @property + def longitude(self): + """Message field 'longitude'.""" + return self._longitude + + @longitude.setter + def longitude(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'longitude' field must be of type 'float'" + self._longitude = value + + @property + def altitude(self): + """Message field 'altitude'.""" + return self._altitude + + @altitude.setter + def altitude(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'altitude' field must be of type 'float'" + self._altitude = value + + @property + def yaw(self): + """Message field 'yaw'.""" + return self._yaw + + @yaw.setter + def yaw(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'yaw' field must be of type 'float'" + self._yaw = value + + @property + def vehicle_name(self): + """Message field 'vehicle_name'.""" + return self._vehicle_name + + @vehicle_name.setter + def vehicle_name(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'vehicle_name' field must be of type 'str'" + self._vehicle_name = value + + +# Import statements for member types + +# already imported above +# import rosidl_parser.definition + + +class Metaclass_SetGPSPosition_Response(type): + """Metaclass of message 'SetGPSPosition_Response'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.SetGPSPosition_Response') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__set_gps_position__response + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__set_gps_position__response + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__set_gps_position__response + cls._TYPE_SUPPORT = module.type_support_msg__srv__set_gps_position__response + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__set_gps_position__response + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class SetGPSPosition_Response(metaclass=Metaclass_SetGPSPosition_Response): + """Message class 'SetGPSPosition_Response'.""" + + __slots__ = [ + '_success', + ] + + _fields_and_field_types = { + 'success': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.success = kwargs.get('success', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.success != other.success: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def success(self): + """Message field 'success'.""" + return self._success + + @success.setter + def success(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'success' field must be of type 'bool'" + self._success = value + + +class Metaclass_SetGPSPosition(type): + """Metaclass of service 'SetGPSPosition'.""" + + _TYPE_SUPPORT = None + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.SetGPSPosition') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._TYPE_SUPPORT = module.type_support_srv__srv__set_gps_position + + from airsim_interfaces.srv import _set_gps_position + if _set_gps_position.Metaclass_SetGPSPosition_Request._TYPE_SUPPORT is None: + _set_gps_position.Metaclass_SetGPSPosition_Request.__import_type_support__() + if _set_gps_position.Metaclass_SetGPSPosition_Response._TYPE_SUPPORT is None: + _set_gps_position.Metaclass_SetGPSPosition_Response.__import_type_support__() + + +class SetGPSPosition(metaclass=Metaclass_SetGPSPosition): + from airsim_interfaces.srv._set_gps_position import SetGPSPosition_Request as Request + from airsim_interfaces.srv._set_gps_position import SetGPSPosition_Response as Response + + def __init__(self): + raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position_s.c new file mode 100644 index 0000000000..108470a216 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position_s.c @@ -0,0 +1,288 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:srv/SetGPSPosition.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/srv/detail/set_gps_position__struct.h" +#include "airsim_interfaces/srv/detail/set_gps_position__functions.h" + +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__set_gps_position__request__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[63]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._set_gps_position.SetGPSPosition_Request", full_classname_dest, 62) == 0); + } + airsim_interfaces__srv__SetGPSPosition_Request * ros_message = _ros_message; + { // latitude + PyObject * field = PyObject_GetAttrString(_pymsg, "latitude"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->latitude = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // longitude + PyObject * field = PyObject_GetAttrString(_pymsg, "longitude"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->longitude = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // altitude + PyObject * field = PyObject_GetAttrString(_pymsg, "altitude"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->altitude = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // yaw + PyObject * field = PyObject_GetAttrString(_pymsg, "yaw"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->yaw = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // vehicle_name + PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_name"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->vehicle_name, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__set_gps_position__request__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of SetGPSPosition_Request */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._set_gps_position"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "SetGPSPosition_Request"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__SetGPSPosition_Request * ros_message = (airsim_interfaces__srv__SetGPSPosition_Request *)raw_ros_message; + { // latitude + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->latitude); + { + int rc = PyObject_SetAttrString(_pymessage, "latitude", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // longitude + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->longitude); + { + int rc = PyObject_SetAttrString(_pymessage, "longitude", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // altitude + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->altitude); + { + int rc = PyObject_SetAttrString(_pymessage, "altitude", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // yaw + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->yaw); + { + int rc = PyObject_SetAttrString(_pymessage, "yaw", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // vehicle_name + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->vehicle_name.data, + strlen(ros_message->vehicle_name.data), + "strict"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "vehicle_name", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} + +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +// already included above +// #include +// already included above +// #include +// already included above +// #include "numpy/ndarrayobject.h" +// already included above +// #include "rosidl_runtime_c/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_gps_position__struct.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_gps_position__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__set_gps_position__response__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[64]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._set_gps_position.SetGPSPosition_Response", full_classname_dest, 63) == 0); + } + airsim_interfaces__srv__SetGPSPosition_Response * ros_message = _ros_message; + { // success + PyObject * field = PyObject_GetAttrString(_pymsg, "success"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->success = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__set_gps_position__response__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of SetGPSPosition_Response */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._set_gps_position"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "SetGPSPosition_Response"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__SetGPSPosition_Response * ros_message = (airsim_interfaces__srv__SetGPSPosition_Response *)raw_ros_message; + { // success + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->success ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "success", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position.py new file mode 100644 index 0000000000..d79c7cb50f --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position.py @@ -0,0 +1,373 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:srv/SetLocalPosition.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_SetLocalPosition_Request(type): + """Metaclass of message 'SetLocalPosition_Request'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.SetLocalPosition_Request') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__set_local_position__request + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__set_local_position__request + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__set_local_position__request + cls._TYPE_SUPPORT = module.type_support_msg__srv__set_local_position__request + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__set_local_position__request + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class SetLocalPosition_Request(metaclass=Metaclass_SetLocalPosition_Request): + """Message class 'SetLocalPosition_Request'.""" + + __slots__ = [ + '_x', + '_y', + '_z', + '_yaw', + '_vehicle_name', + ] + + _fields_and_field_types = { + 'x': 'double', + 'y': 'double', + 'z': 'double', + 'yaw': 'double', + 'vehicle_name': 'string', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.x = kwargs.get('x', float()) + self.y = kwargs.get('y', float()) + self.z = kwargs.get('z', float()) + self.yaw = kwargs.get('yaw', float()) + self.vehicle_name = kwargs.get('vehicle_name', str()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.x != other.x: + return False + if self.y != other.y: + return False + if self.z != other.z: + return False + if self.yaw != other.yaw: + return False + if self.vehicle_name != other.vehicle_name: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def x(self): + """Message field 'x'.""" + return self._x + + @x.setter + def x(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'x' field must be of type 'float'" + self._x = value + + @property + def y(self): + """Message field 'y'.""" + return self._y + + @y.setter + def y(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'y' field must be of type 'float'" + self._y = value + + @property + def z(self): + """Message field 'z'.""" + return self._z + + @z.setter + def z(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'z' field must be of type 'float'" + self._z = value + + @property + def yaw(self): + """Message field 'yaw'.""" + return self._yaw + + @yaw.setter + def yaw(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'yaw' field must be of type 'float'" + self._yaw = value + + @property + def vehicle_name(self): + """Message field 'vehicle_name'.""" + return self._vehicle_name + + @vehicle_name.setter + def vehicle_name(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'vehicle_name' field must be of type 'str'" + self._vehicle_name = value + + +# Import statements for member types + +# already imported above +# import rosidl_parser.definition + + +class Metaclass_SetLocalPosition_Response(type): + """Metaclass of message 'SetLocalPosition_Response'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.SetLocalPosition_Response') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__set_local_position__response + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__set_local_position__response + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__set_local_position__response + cls._TYPE_SUPPORT = module.type_support_msg__srv__set_local_position__response + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__set_local_position__response + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class SetLocalPosition_Response(metaclass=Metaclass_SetLocalPosition_Response): + """Message class 'SetLocalPosition_Response'.""" + + __slots__ = [ + '_success', + '_message', + ] + + _fields_and_field_types = { + 'success': 'boolean', + 'message': 'string', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.success = kwargs.get('success', bool()) + self.message = kwargs.get('message', str()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.success != other.success: + return False + if self.message != other.message: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def success(self): + """Message field 'success'.""" + return self._success + + @success.setter + def success(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'success' field must be of type 'bool'" + self._success = value + + @property + def message(self): + """Message field 'message'.""" + return self._message + + @message.setter + def message(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'message' field must be of type 'str'" + self._message = value + + +class Metaclass_SetLocalPosition(type): + """Metaclass of service 'SetLocalPosition'.""" + + _TYPE_SUPPORT = None + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.SetLocalPosition') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._TYPE_SUPPORT = module.type_support_srv__srv__set_local_position + + from airsim_interfaces.srv import _set_local_position + if _set_local_position.Metaclass_SetLocalPosition_Request._TYPE_SUPPORT is None: + _set_local_position.Metaclass_SetLocalPosition_Request.__import_type_support__() + if _set_local_position.Metaclass_SetLocalPosition_Response._TYPE_SUPPORT is None: + _set_local_position.Metaclass_SetLocalPosition_Response.__import_type_support__() + + +class SetLocalPosition(metaclass=Metaclass_SetLocalPosition): + from airsim_interfaces.srv._set_local_position import SetLocalPosition_Request as Request + from airsim_interfaces.srv._set_local_position import SetLocalPosition_Response as Response + + def __init__(self): + raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position_s.c new file mode 100644 index 0000000000..4222657983 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position_s.c @@ -0,0 +1,325 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:srv/SetLocalPosition.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/srv/detail/set_local_position__struct.h" +#include "airsim_interfaces/srv/detail/set_local_position__functions.h" + +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__set_local_position__request__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[67]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._set_local_position.SetLocalPosition_Request", full_classname_dest, 66) == 0); + } + airsim_interfaces__srv__SetLocalPosition_Request * ros_message = _ros_message; + { // x + PyObject * field = PyObject_GetAttrString(_pymsg, "x"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->x = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // y + PyObject * field = PyObject_GetAttrString(_pymsg, "y"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->y = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // z + PyObject * field = PyObject_GetAttrString(_pymsg, "z"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->z = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // yaw + PyObject * field = PyObject_GetAttrString(_pymsg, "yaw"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->yaw = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // vehicle_name + PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_name"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->vehicle_name, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__set_local_position__request__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of SetLocalPosition_Request */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._set_local_position"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "SetLocalPosition_Request"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__SetLocalPosition_Request * ros_message = (airsim_interfaces__srv__SetLocalPosition_Request *)raw_ros_message; + { // x + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->x); + { + int rc = PyObject_SetAttrString(_pymessage, "x", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // y + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->y); + { + int rc = PyObject_SetAttrString(_pymessage, "y", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // z + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->z); + { + int rc = PyObject_SetAttrString(_pymessage, "z", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // yaw + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->yaw); + { + int rc = PyObject_SetAttrString(_pymessage, "yaw", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // vehicle_name + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->vehicle_name.data, + strlen(ros_message->vehicle_name.data), + "strict"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "vehicle_name", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} + +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +// already included above +// #include +// already included above +// #include +// already included above +// #include "numpy/ndarrayobject.h" +// already included above +// #include "rosidl_runtime_c/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_local_position__struct.h" +// already included above +// #include "airsim_interfaces/srv/detail/set_local_position__functions.h" + +// already included above +// #include "rosidl_runtime_c/string.h" +// already included above +// #include "rosidl_runtime_c/string_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__set_local_position__response__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[68]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._set_local_position.SetLocalPosition_Response", full_classname_dest, 67) == 0); + } + airsim_interfaces__srv__SetLocalPosition_Response * ros_message = _ros_message; + { // success + PyObject * field = PyObject_GetAttrString(_pymsg, "success"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->success = (Py_True == field); + Py_DECREF(field); + } + { // message + PyObject * field = PyObject_GetAttrString(_pymsg, "message"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->message, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__set_local_position__response__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of SetLocalPosition_Response */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._set_local_position"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "SetLocalPosition_Response"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__SetLocalPosition_Response * ros_message = (airsim_interfaces__srv__SetLocalPosition_Response *)raw_ros_message; + { // success + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->success ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "success", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // message + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->message.data, + strlen(ros_message->message.data), + "strict"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "message", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff.py new file mode 100644 index 0000000000..acb79b9633 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff.py @@ -0,0 +1,278 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:srv/Takeoff.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_Takeoff_Request(type): + """Metaclass of message 'Takeoff_Request'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.Takeoff_Request') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__takeoff__request + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__takeoff__request + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__takeoff__request + cls._TYPE_SUPPORT = module.type_support_msg__srv__takeoff__request + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__takeoff__request + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Takeoff_Request(metaclass=Metaclass_Takeoff_Request): + """Message class 'Takeoff_Request'.""" + + __slots__ = [ + '_wait_on_last_task', + ] + + _fields_and_field_types = { + 'wait_on_last_task': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.wait_on_last_task = kwargs.get('wait_on_last_task', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.wait_on_last_task != other.wait_on_last_task: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def wait_on_last_task(self): + """Message field 'wait_on_last_task'.""" + return self._wait_on_last_task + + @wait_on_last_task.setter + def wait_on_last_task(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'wait_on_last_task' field must be of type 'bool'" + self._wait_on_last_task = value + + +# Import statements for member types + +# already imported above +# import rosidl_parser.definition + + +class Metaclass_Takeoff_Response(type): + """Metaclass of message 'Takeoff_Response'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.Takeoff_Response') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__takeoff__response + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__takeoff__response + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__takeoff__response + cls._TYPE_SUPPORT = module.type_support_msg__srv__takeoff__response + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__takeoff__response + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Takeoff_Response(metaclass=Metaclass_Takeoff_Response): + """Message class 'Takeoff_Response'.""" + + __slots__ = [ + '_success', + ] + + _fields_and_field_types = { + 'success': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.success = kwargs.get('success', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.success != other.success: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def success(self): + """Message field 'success'.""" + return self._success + + @success.setter + def success(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'success' field must be of type 'bool'" + self._success = value + + +class Metaclass_Takeoff(type): + """Metaclass of service 'Takeoff'.""" + + _TYPE_SUPPORT = None + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.Takeoff') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._TYPE_SUPPORT = module.type_support_srv__srv__takeoff + + from airsim_interfaces.srv import _takeoff + if _takeoff.Metaclass_Takeoff_Request._TYPE_SUPPORT is None: + _takeoff.Metaclass_Takeoff_Request.__import_type_support__() + if _takeoff.Metaclass_Takeoff_Response._TYPE_SUPPORT is None: + _takeoff.Metaclass_Takeoff_Response.__import_type_support__() + + +class Takeoff(metaclass=Metaclass_Takeoff): + from airsim_interfaces.srv._takeoff import Takeoff_Request as Request + from airsim_interfaces.srv._takeoff import Takeoff_Response as Response + + def __init__(self): + raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group.py new file mode 100644 index 0000000000..5784f25228 --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group.py @@ -0,0 +1,307 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from airsim_interfaces:srv/TakeoffGroup.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_TakeoffGroup_Request(type): + """Metaclass of message 'TakeoffGroup_Request'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.TakeoffGroup_Request') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__takeoff_group__request + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__takeoff_group__request + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__takeoff_group__request + cls._TYPE_SUPPORT = module.type_support_msg__srv__takeoff_group__request + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__takeoff_group__request + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class TakeoffGroup_Request(metaclass=Metaclass_TakeoffGroup_Request): + """Message class 'TakeoffGroup_Request'.""" + + __slots__ = [ + '_vehicle_names', + '_wait_on_last_task', + ] + + _fields_and_field_types = { + 'vehicle_names': 'sequence', + 'wait_on_last_task': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.UnboundedString()), # noqa: E501 + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.vehicle_names = kwargs.get('vehicle_names', []) + self.wait_on_last_task = kwargs.get('wait_on_last_task', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.vehicle_names != other.vehicle_names: + return False + if self.wait_on_last_task != other.wait_on_last_task: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def vehicle_names(self): + """Message field 'vehicle_names'.""" + return self._vehicle_names + + @vehicle_names.setter + def vehicle_names(self, value): + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + all(isinstance(v, str) for v in value) and + True), \ + "The 'vehicle_names' field must be a set or sequence and each value of type 'str'" + self._vehicle_names = value + + @property + def wait_on_last_task(self): + """Message field 'wait_on_last_task'.""" + return self._wait_on_last_task + + @wait_on_last_task.setter + def wait_on_last_task(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'wait_on_last_task' field must be of type 'bool'" + self._wait_on_last_task = value + + +# Import statements for member types + +# already imported above +# import rosidl_parser.definition + + +class Metaclass_TakeoffGroup_Response(type): + """Metaclass of message 'TakeoffGroup_Response'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.TakeoffGroup_Response') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__takeoff_group__response + cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__takeoff_group__response + cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__takeoff_group__response + cls._TYPE_SUPPORT = module.type_support_msg__srv__takeoff_group__response + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__takeoff_group__response + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class TakeoffGroup_Response(metaclass=Metaclass_TakeoffGroup_Response): + """Message class 'TakeoffGroup_Response'.""" + + __slots__ = [ + '_success', + ] + + _fields_and_field_types = { + 'success': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.success = kwargs.get('success', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.success != other.success: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def success(self): + """Message field 'success'.""" + return self._success + + @success.setter + def success(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'success' field must be of type 'bool'" + self._success = value + + +class Metaclass_TakeoffGroup(type): + """Metaclass of service 'TakeoffGroup'.""" + + _TYPE_SUPPORT = None + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('airsim_interfaces') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'airsim_interfaces.srv.TakeoffGroup') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._TYPE_SUPPORT = module.type_support_srv__srv__takeoff_group + + from airsim_interfaces.srv import _takeoff_group + if _takeoff_group.Metaclass_TakeoffGroup_Request._TYPE_SUPPORT is None: + _takeoff_group.Metaclass_TakeoffGroup_Request.__import_type_support__() + if _takeoff_group.Metaclass_TakeoffGroup_Response._TYPE_SUPPORT is None: + _takeoff_group.Metaclass_TakeoffGroup_Response.__import_type_support__() + + +class TakeoffGroup(metaclass=Metaclass_TakeoffGroup): + from airsim_interfaces.srv._takeoff_group import TakeoffGroup_Request as Request + from airsim_interfaces.srv._takeoff_group import TakeoffGroup_Response as Response + + def __init__(self): + raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group_s.c new file mode 100644 index 0000000000..414283d5de --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group_s.c @@ -0,0 +1,267 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:srv/TakeoffGroup.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/srv/detail/takeoff_group__struct.h" +#include "airsim_interfaces/srv/detail/takeoff_group__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__takeoff_group__request__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[58]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._takeoff_group.TakeoffGroup_Request", full_classname_dest, 57) == 0); + } + airsim_interfaces__srv__TakeoffGroup_Request * ros_message = _ros_message; + { // vehicle_names + PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_names"); + if (!field) { + return false; + } + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'vehicle_names'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = PySequence_Size(field); + if (-1 == size) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + if (!rosidl_runtime_c__String__Sequence__init(&(ros_message->vehicle_names), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create String__Sequence ros_message"); + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String * dest = ros_message->vehicle_names.data; + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); + if (!item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + assert(PyUnicode_Check(item)); + PyObject * encoded_item = PyUnicode_AsUTF8String(item); + if (!encoded_item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&dest[i], PyBytes_AS_STRING(encoded_item)); + Py_DECREF(encoded_item); + } + Py_DECREF(seq_field); + Py_DECREF(field); + } + { // wait_on_last_task + PyObject * field = PyObject_GetAttrString(_pymsg, "wait_on_last_task"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->wait_on_last_task = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__takeoff_group__request__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of TakeoffGroup_Request */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._takeoff_group"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "TakeoffGroup_Request"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__TakeoffGroup_Request * ros_message = (airsim_interfaces__srv__TakeoffGroup_Request *)raw_ros_message; + { // vehicle_names + PyObject * field = NULL; + size_t size = ros_message->vehicle_names.size; + rosidl_runtime_c__String * src = ros_message->vehicle_names.data; + field = PyList_New(size); + if (!field) { + return NULL; + } + for (size_t i = 0; i < size; ++i) { + PyObject * decoded_item = PyUnicode_DecodeUTF8(src[i].data, strlen(src[i].data), "strict"); + if (!decoded_item) { + return NULL; + } + int rc = PyList_SetItem(field, i, decoded_item); + (void)rc; + assert(rc == 0); + } + assert(PySequence_Check(field)); + { + int rc = PyObject_SetAttrString(_pymessage, "vehicle_names", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // wait_on_last_task + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->wait_on_last_task ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "wait_on_last_task", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} + +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +// already included above +// #include +// already included above +// #include +// already included above +// #include "numpy/ndarrayobject.h" +// already included above +// #include "rosidl_runtime_c/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff_group__struct.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff_group__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__takeoff_group__response__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[59]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._takeoff_group.TakeoffGroup_Response", full_classname_dest, 58) == 0); + } + airsim_interfaces__srv__TakeoffGroup_Response * ros_message = _ros_message; + { // success + PyObject * field = PyObject_GetAttrString(_pymsg, "success"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->success = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__takeoff_group__response__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of TakeoffGroup_Response */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._takeoff_group"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "TakeoffGroup_Response"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__TakeoffGroup_Response * ros_message = (airsim_interfaces__srv__TakeoffGroup_Response *)raw_ros_message; + { // success + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->success ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "success", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_s.c new file mode 100644 index 0000000000..8058a8b69c --- /dev/null +++ b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_s.c @@ -0,0 +1,193 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from airsim_interfaces:srv/Takeoff.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "airsim_interfaces/srv/detail/takeoff__struct.h" +#include "airsim_interfaces/srv/detail/takeoff__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__takeoff__request__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[47]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._takeoff.Takeoff_Request", full_classname_dest, 46) == 0); + } + airsim_interfaces__srv__Takeoff_Request * ros_message = _ros_message; + { // wait_on_last_task + PyObject * field = PyObject_GetAttrString(_pymsg, "wait_on_last_task"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->wait_on_last_task = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__takeoff__request__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Takeoff_Request */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._takeoff"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Takeoff_Request"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__Takeoff_Request * ros_message = (airsim_interfaces__srv__Takeoff_Request *)raw_ros_message; + { // wait_on_last_task + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->wait_on_last_task ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "wait_on_last_task", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} + +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +// already included above +// #include +// already included above +// #include +// already included above +// #include "numpy/ndarrayobject.h" +// already included above +// #include "rosidl_runtime_c/visibility_control.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff__struct.h" +// already included above +// #include "airsim_interfaces/srv/detail/takeoff__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool airsim_interfaces__srv__takeoff__response__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[48]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("airsim_interfaces.srv._takeoff.Takeoff_Response", full_classname_dest, 47) == 0); + } + airsim_interfaces__srv__Takeoff_Response * ros_message = _ros_message; + { // success + PyObject * field = PyObject_GetAttrString(_pymsg, "success"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->success = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * airsim_interfaces__srv__takeoff__response__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Takeoff_Response */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._takeoff"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Takeoff_Response"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + airsim_interfaces__srv__Takeoff_Response * ros_message = (airsim_interfaces__srv__Takeoff_Response *)raw_ros_message; + { // success + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->success ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "success", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig-version.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig-version.cmake new file mode 100644 index 0000000000..dfe07300c3 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig-version.cmake @@ -0,0 +1,14 @@ +# generated from ament/cmake/core/templates/nameConfig-version.cmake.in +set(PACKAGE_VERSION "0.1.0") + +set(PACKAGE_VERSION_EXACT False) +set(PACKAGE_VERSION_COMPATIBLE False) + +if("${PACKAGE_FIND_VERSION}" VERSION_EQUAL "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_EXACT True) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() + +if("${PACKAGE_FIND_VERSION}" VERSION_LESS "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE True) +endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig.cmake new file mode 100644 index 0000000000..15b7f1a82c --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig.cmake @@ -0,0 +1,42 @@ +# generated from ament/cmake/core/templates/nameConfig.cmake.in + +# prevent multiple inclusion +if(_airsim_interfaces_CONFIG_INCLUDED) + # ensure to keep the found flag the same + if(NOT DEFINED airsim_interfaces_FOUND) + # explicitly set it to FALSE, otherwise CMake will set it to TRUE + set(airsim_interfaces_FOUND FALSE) + elseif(NOT airsim_interfaces_FOUND) + # use separate condition to avoid uninitialized variable warning + set(airsim_interfaces_FOUND FALSE) + endif() + return() +endif() +set(_airsim_interfaces_CONFIG_INCLUDED TRUE) + +# output package information +if(NOT airsim_interfaces_FIND_QUIETLY) + message(STATUS "Found airsim_interfaces: 0.1.0 (${airsim_interfaces_DIR})") +endif() + +# warn when using a deprecated package +if(NOT "" STREQUAL "") + set(_msg "Package 'airsim_interfaces' is deprecated") + # append custom deprecation text if available + if(NOT "" STREQUAL "TRUE") + set(_msg "${_msg} ()") + endif() + # optionally quiet the deprecation message + if(NOT ${airsim_interfaces_DEPRECATED_QUIET}) + message(DEPRECATION "${_msg}") + endif() +endif() + +# flag package as ament-based to distinguish it after being find_package()-ed +set(airsim_interfaces_FOUND_AMENT_PACKAGE TRUE) + +# include all config extra files +set(_extras "rosidl_cmake-extras.cmake;ament_cmake_export_dependencies-extras.cmake;ament_cmake_export_libraries-extras.cmake;ament_cmake_export_targets-extras.cmake;ament_cmake_export_include_directories-extras.cmake;rosidl_cmake_export_typesupport_libraries-extras.cmake;rosidl_cmake_export_typesupport_targets-extras.cmake") +foreach(_extra ${_extras}) + include("${airsim_interfaces_DIR}/${_extra}") +endforeach() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport-noconfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport-noconfig.cmake new file mode 100644 index 0000000000..cabcb32647 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "airsim_interfaces::airsim_interfaces__rosidl_generator_c" for configuration "" +set_property(TARGET airsim_interfaces::airsim_interfaces__rosidl_generator_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_generator_c PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_generator_c.so" + IMPORTED_SONAME_NOCONFIG "libairsim_interfaces__rosidl_generator_c.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS airsim_interfaces::airsim_interfaces__rosidl_generator_c ) +list(APPEND _IMPORT_CHECK_FILES_FOR_airsim_interfaces::airsim_interfaces__rosidl_generator_c "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_generator_c.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport.cmake new file mode 100644 index 0000000000..e45c7c0526 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_generator_c) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target airsim_interfaces::airsim_interfaces__rosidl_generator_c +add_library(airsim_interfaces::airsim_interfaces__rosidl_generator_c SHARED IMPORTED) + +set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_generator_c PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_interface::rosidl_typesupport_interface" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_generator_cExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cppExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cppExport.cmake new file mode 100644 index 0000000000..6d4d3241f6 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cppExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_generator_cpp) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target airsim_interfaces::airsim_interfaces__rosidl_generator_cpp +add_library(airsim_interfaces::airsim_interfaces__rosidl_generator_cpp INTERFACE IMPORTED) + +set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_generator_cpp PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "rosidl_runtime_cpp::rosidl_runtime_cpp" +) + +if(CMAKE_VERSION VERSION_LESS 3.0.0) + message(FATAL_ERROR "This file relies on consumers using CMake 3.0.0 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_generator_cppExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport-noconfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport-noconfig.cmake new file mode 100644 index 0000000000..9cd49237c7 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "airsim_interfaces::airsim_interfaces__rosidl_typesupport_c" for configuration "" +set_property(TARGET airsim_interfaces::airsim_interfaces__rosidl_typesupport_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_c PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_c.so" + IMPORTED_SONAME_NOCONFIG "libairsim_interfaces__rosidl_typesupport_c.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS airsim_interfaces::airsim_interfaces__rosidl_typesupport_c ) +list(APPEND _IMPORT_CHECK_FILES_FOR_airsim_interfaces::airsim_interfaces__rosidl_typesupport_c "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_c.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport.cmake new file mode 100644 index 0000000000..c14887633f --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_typesupport_c) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target airsim_interfaces::airsim_interfaces__rosidl_typesupport_c +add_library(airsim_interfaces::airsim_interfaces__rosidl_typesupport_c SHARED IMPORTED) + +set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_c PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_c::rosidl_typesupport_c;rosidl_typesupport_interface::rosidl_typesupport_interface" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_typesupport_cExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport-noconfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport-noconfig.cmake new file mode 100644 index 0000000000..9bae46e97f --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp" for configuration "" +set_property(TARGET airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_cpp.so" + IMPORTED_SONAME_NOCONFIG "libairsim_interfaces__rosidl_typesupport_cpp.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp ) +list(APPEND _IMPORT_CHECK_FILES_FOR_airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_cpp.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport.cmake new file mode 100644 index 0000000000..bf01b3aae4 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp +add_library(airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp SHARED IMPORTED) + +set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_runtime_cpp::rosidl_runtime_cpp;rosidl_typesupport_cpp::rosidl_typesupport_cpp;rosidl_typesupport_interface::rosidl_typesupport_interface" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_typesupport_cppExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport-noconfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport-noconfig.cmake new file mode 100644 index 0000000000..3e765c0dd8 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c" for configuration "" +set_property(TARGET airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_introspection_c.so" + IMPORTED_SONAME_NOCONFIG "libairsim_interfaces__rosidl_typesupport_introspection_c.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c ) +list(APPEND _IMPORT_CHECK_FILES_FOR_airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_introspection_c.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport.cmake new file mode 100644 index 0000000000..5ee2665245 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport.cmake @@ -0,0 +1,114 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c +add_library(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c SHARED IMPORTED) + +set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c PROPERTIES + INTERFACE_LINK_LIBRARIES "airsim_interfaces::airsim_interfaces__rosidl_generator_c;rosidl_typesupport_introspection_c::rosidl_typesupport_introspection_c" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_typesupport_introspection_cExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# Make sure the targets which have been exported in some other +# export set exist. +unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) +foreach(_target "airsim_interfaces::airsim_interfaces__rosidl_generator_c" ) + if(NOT TARGET "${_target}" ) + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}") + endif() +endforeach() + +if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) + if(CMAKE_FIND_PACKAGE_NAME) + set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}") + else() + message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}") + endif() +endif() +unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport-noconfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport-noconfig.cmake new file mode 100644 index 0000000000..8424f4c202 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp" for configuration "" +set_property(TARGET airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_introspection_cpp.so" + IMPORTED_SONAME_NOCONFIG "libairsim_interfaces__rosidl_typesupport_introspection_cpp.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp ) +list(APPEND _IMPORT_CHECK_FILES_FOR_airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_introspection_cpp.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport.cmake new file mode 100644 index 0000000000..64a6c051c2 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport.cmake @@ -0,0 +1,98 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp +add_library(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp SHARED IMPORTED) + +set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp PROPERTIES + INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_interface::rosidl_typesupport_interface;rosidl_typesupport_introspection_cpp::rosidl_typesupport_introspection_cpp" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_typesupport_introspection_cppExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake new file mode 100644 index 0000000000..37530a86af --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake @@ -0,0 +1,80 @@ +# generated from ament_cmake_export_dependencies/cmake/ament_cmake_export_dependencies-extras.cmake.in + +set(_exported_dependencies "rosidl_runtime_c;rosidl_typesupport_interface;rosidl_default_runtime") + +find_package(ament_cmake_libraries QUIET REQUIRED) + +# find_package() all dependencies +# and append their DEFINITIONS INCLUDE_DIRS, LIBRARIES, and LINK_FLAGS +# variables to airsim_interfaces_DEFINITIONS, airsim_interfaces_INCLUDE_DIRS, +# airsim_interfaces_LIBRARIES, and airsim_interfaces_LINK_FLAGS. +# Additionally collect the direct dependency names in +# airsim_interfaces_DEPENDENCIES as well as the recursive dependency names +# in airsim_interfaces_RECURSIVE_DEPENDENCIES. +if(NOT _exported_dependencies STREQUAL "") + find_package(ament_cmake_core QUIET REQUIRED) + set(airsim_interfaces_DEPENDENCIES ${_exported_dependencies}) + set(airsim_interfaces_RECURSIVE_DEPENDENCIES ${_exported_dependencies}) + set(_libraries) + foreach(_dep ${_exported_dependencies}) + if(NOT ${_dep}_FOUND) + find_package("${_dep}" QUIET REQUIRED) + endif() + # if a package provides modern CMake interface targets use them + # exclusively assuming the classic CMake variables only exist for + # backward compatibility + set(use_modern_cmake FALSE) + if(NOT "${${_dep}_TARGETS}" STREQUAL "") + foreach(_target ${${_dep}_TARGETS}) + # only use actual targets + # in case a package uses this variable for other content + if(TARGET "${_target}") + get_target_property(_include_dirs ${_target} INTERFACE_INCLUDE_DIRECTORIES) + if(_include_dirs) + list_append_unique(airsim_interfaces_INCLUDE_DIRS "${_include_dirs}") + endif() + + get_target_property(_imported_configurations ${_target} IMPORTED_CONFIGURATIONS) + if(_imported_configurations) + get_target_property(_imported_implib ${_target} IMPORTED_IMPLIB_${_imported_configurations}) + if(_imported_implib) + list(APPEND _libraries "${_imported_implib}") + else() + get_target_property(_imported_location ${_target} IMPORTED_LOCATION_${_imported_configurations}) + if(_imported_location) + list(APPEND _libraries "${_imported_location}") + endif() + endif() + endif() + + get_target_property(_link_libraries ${_target} INTERFACE_LINK_LIBRARIES) + if(_link_libraries) + list(APPEND _libraries "${_link_libraries}") + endif() + set(use_modern_cmake TRUE) + endif() + endforeach() + endif() + if(NOT use_modern_cmake) + if(${_dep}_DEFINITIONS) + list_append_unique(airsim_interfaces_DEFINITIONS "${${_dep}_DEFINITIONS}") + endif() + if(${_dep}_INCLUDE_DIRS) + list_append_unique(airsim_interfaces_INCLUDE_DIRS "${${_dep}_INCLUDE_DIRS}") + endif() + if(${_dep}_LIBRARIES) + list(APPEND _libraries "${${_dep}_LIBRARIES}") + endif() + if(${_dep}_LINK_FLAGS) + list_append_unique(airsim_interfaces_LINK_FLAGS "${${_dep}_LINK_FLAGS}") + endif() + if(${_dep}_RECURSIVE_DEPENDENCIES) + list_append_unique(airsim_interfaces_RECURSIVE_DEPENDENCIES "${${_dep}_RECURSIVE_DEPENDENCIES}") + endif() + endif() + if(_libraries) + ament_libraries_deduplicate(_libraries "${_libraries}") + list(APPEND airsim_interfaces_LIBRARIES "${_libraries}") + endif() + endforeach() +endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_include_directories-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_include_directories-extras.cmake new file mode 100644 index 0000000000..2f41c26c92 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_include_directories-extras.cmake @@ -0,0 +1,16 @@ +# generated from ament_cmake_export_include_directories/cmake/ament_cmake_export_include_directories-extras.cmake.in + +set(_exported_include_dirs "${airsim_interfaces_DIR}/../../../include") + +# append include directories to airsim_interfaces_INCLUDE_DIRS +# warn about not existing paths +if(NOT _exported_include_dirs STREQUAL "") + find_package(ament_cmake_core QUIET REQUIRED) + foreach(_exported_include_dir ${_exported_include_dirs}) + if(NOT IS_DIRECTORY "${_exported_include_dir}") + message(WARNING "Package 'airsim_interfaces' exports the include directory '${_exported_include_dir}' which doesn't exist") + endif() + normalize_path(_exported_include_dir "${_exported_include_dir}") + list(APPEND airsim_interfaces_INCLUDE_DIRS "${_exported_include_dir}") + endforeach() +endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_libraries-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_libraries-extras.cmake new file mode 100644 index 0000000000..541801295b --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_libraries-extras.cmake @@ -0,0 +1,140 @@ +# generated from ament_cmake_export_libraries/cmake/template/ament_cmake_export_libraries.cmake.in + +set(_exported_libraries "airsim_interfaces__rosidl_generator_c;airsim_interfaces__rosidl_typesupport_c;airsim_interfaces__rosidl_typesupport_cpp") +set(_exported_library_names "") + +# populate airsim_interfaces_LIBRARIES +if(NOT _exported_libraries STREQUAL "") + # loop over libraries, either target names or absolute paths + list(LENGTH _exported_libraries _length) + set(_i 0) + while(_i LESS _length) + list(GET _exported_libraries ${_i} _arg) + + # pass linker flags along + if("${_arg}" MATCHES "^-" AND NOT "${_arg}" MATCHES "^-[l|framework]") + list(APPEND airsim_interfaces_LIBRARIES "${_arg}") + math(EXPR _i "${_i} + 1") + continue() + endif() + + if("${_arg}" MATCHES "^(debug|optimized|general)$") + # remember build configuration keyword + # and get following library + set(_cfg "${_arg}") + math(EXPR _i "${_i} + 1") + if(_i EQUAL _length) + message(FATAL_ERROR "Package 'airsim_interfaces' passes the build configuration keyword '${_cfg}' as the last exported library") + endif() + list(GET _exported_libraries ${_i} _library) + else() + # the value is a library without a build configuration keyword + set(_cfg "") + set(_library "${_arg}") + endif() + math(EXPR _i "${_i} + 1") + + if(NOT IS_ABSOLUTE "${_library}") + # search for library target relative to this CMake file + set(_lib "NOTFOUND") + find_library( + _lib NAMES "${_library}" + PATHS "${airsim_interfaces_DIR}/../../../lib" + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + if(NOT _lib) + # warn about not existing library and ignore it + message(FATAL_ERROR "Package 'airsim_interfaces' exports the library '${_library}' which couldn't be found") + elseif(NOT IS_ABSOLUTE "${_lib}") + # the found library must be an absolute path + message(FATAL_ERROR "Package 'airsim_interfaces' found the library '${_library}' at '${_lib}' which is not an absolute path") + elseif(NOT EXISTS "${_lib}") + # the found library must exist + message(FATAL_ERROR "Package 'airsim_interfaces' found the library '${_lib}' which doesn't exist") + else() + list(APPEND airsim_interfaces_LIBRARIES ${_cfg} "${_lib}") + endif() + + else() + if(NOT EXISTS "${_library}") + # the found library must exist + message(WARNING "Package 'airsim_interfaces' exports the library '${_library}' which doesn't exist") + else() + list(APPEND airsim_interfaces_LIBRARIES ${_cfg} "${_library}") + endif() + endif() + endwhile() +endif() + +# find_library() library names with optional LIBRARY_DIRS +# and add the libraries to airsim_interfaces_LIBRARIES +if(NOT _exported_library_names STREQUAL "") + # loop over library names + # but remember related build configuration keyword if available + list(LENGTH _exported_library_names _length) + set(_i 0) + while(_i LESS _length) + list(GET _exported_library_names ${_i} _arg) + # pass linker flags along + if("${_arg}" MATCHES "^-" AND NOT "${_arg}" MATCHES "^-[l|framework]") + list(APPEND airsim_interfaces_LIBRARIES "${_arg}") + math(EXPR _i "${_i} + 1") + continue() + endif() + + if("${_arg}" MATCHES "^(debug|optimized|general)$") + # remember build configuration keyword + # and get following library name + set(_cfg "${_arg}") + math(EXPR _i "${_i} + 1") + if(_i EQUAL _length) + message(FATAL_ERROR "Package 'airsim_interfaces' passes the build configuration keyword '${_cfg}' as the last exported target") + endif() + list(GET _exported_library_names ${_i} _library) + else() + # the value is a library target without a build configuration keyword + set(_cfg "") + set(_library "${_arg}") + endif() + math(EXPR _i "${_i} + 1") + + # extract optional LIBRARY_DIRS from library name + string(REPLACE ":" ";" _library_dirs "${_library}") + list(GET _library_dirs 0 _library_name) + list(REMOVE_AT _library_dirs 0) + + set(_lib "NOTFOUND") + if(NOT _library_dirs) + # search for library in the common locations + find_library( + _lib + NAMES "${_library_name}" + ) + if(NOT _lib) + # warn about not existing library and later ignore it + message(WARNING "Package 'airsim_interfaces' exports library '${_library_name}' which couldn't be found") + endif() + else() + # search for library in the specified directories + find_library( + _lib + NAMES "${_library_name}" + PATHS ${_library_dirs} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + if(NOT _lib) + # warn about not existing library and later ignore it + message(WARNING "Package 'airsim_interfaces' exports library '${_library_name}' with LIBRARY_DIRS '${_library_dirs}' which couldn't be found") + endif() + endif() + if(_lib) + list(APPEND airsim_interfaces_LIBRARIES ${_cfg} "${_lib}") + endif() + endwhile() +endif() + +# TODO(dirk-thomas) deduplicate airsim_interfaces_LIBRARIES +# while maintaining library order +# as well as build configuration keywords +# as well as linker flags diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_targets-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_targets-extras.cmake new file mode 100644 index 0000000000..ac5f558419 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_targets-extras.cmake @@ -0,0 +1,27 @@ +# generated from ament_cmake_export_targets/cmake/ament_cmake_export_targets-extras.cmake.in + +set(_exported_targets "airsim_interfaces__rosidl_generator_c;airsim_interfaces__rosidl_typesupport_introspection_c;airsim_interfaces__rosidl_typesupport_c;airsim_interfaces__rosidl_generator_cpp;airsim_interfaces__rosidl_typesupport_introspection_cpp;airsim_interfaces__rosidl_typesupport_cpp") + +# include all exported targets +if(NOT _exported_targets STREQUAL "") + foreach(_target ${_exported_targets}) + set(_export_file "${airsim_interfaces_DIR}/${_target}Export.cmake") + include("${_export_file}") + + # extract the target names associated with the export + set(_regex "foreach\\(_expectedTarget (.+)\\)") + file( + STRINGS "${_export_file}" _foreach_targets + REGEX "${_regex}") + list(LENGTH _foreach_targets _matches) + if(NOT _matches EQUAL 1) + message(FATAL_ERROR + "Failed to find exported target names in '${_export_file}'") + endif() + string(REGEX REPLACE "${_regex}" "\\1" _targets "${_foreach_targets}") + string(REPLACE " " ";" _targets "${_targets}") + list(LENGTH _targets _length) + + list(APPEND airsim_interfaces_TARGETS ${_targets}) + endforeach() +endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake-extras.cmake new file mode 100644 index 0000000000..4c9131d939 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake-extras.cmake @@ -0,0 +1,4 @@ +# generated from rosidl_cmake/cmake/rosidl_cmake-extras.cmake.in + +set(airsim_interfaces_IDL_FILES "msg/GimbalAngleEulerCmd.idl;msg/GimbalAngleQuatCmd.idl;msg/GPSYaw.idl;msg/VelCmd.idl;msg/VelCmdGroup.idl;msg/CarControls.idl;msg/CarState.idl;msg/Altimeter.idl;msg/Environment.idl;srv/SetGPSPosition.idl;srv/Takeoff.idl;srv/TakeoffGroup.idl;srv/Land.idl;srv/LandGroup.idl;srv/Reset.idl;srv/SetLocalPosition.idl") +set(airsim_interfaces_INTERFACE_FILES "msg/GimbalAngleEulerCmd.msg;msg/GimbalAngleQuatCmd.msg;msg/GPSYaw.msg;msg/VelCmd.msg;msg/VelCmdGroup.msg;msg/CarControls.msg;msg/CarState.msg;msg/Altimeter.msg;msg/Environment.msg;srv/SetGPSPosition.srv;srv/SetGPSPosition_Request.msg;srv/SetGPSPosition_Response.msg;srv/Takeoff.srv;srv/Takeoff_Request.msg;srv/Takeoff_Response.msg;srv/TakeoffGroup.srv;srv/TakeoffGroup_Request.msg;srv/TakeoffGroup_Response.msg;srv/Land.srv;srv/Land_Request.msg;srv/Land_Response.msg;srv/LandGroup.srv;srv/LandGroup_Request.msg;srv/LandGroup_Response.msg;srv/Reset.srv;srv/Reset_Request.msg;srv/Reset_Response.msg;srv/SetLocalPosition.srv;srv/SetLocalPosition_Request.msg;srv/SetLocalPosition_Response.msg") diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake new file mode 100644 index 0000000000..141ba7d08e --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake @@ -0,0 +1,46 @@ +# generated from +# rosidl_cmake/cmake/template/rosidl_cmake_export_typesupport_libraries.cmake.in + +set(_exported_typesupport_libraries + "__rosidl_typesupport_fastrtps_c:airsim_interfaces__rosidl_typesupport_fastrtps_c;__rosidl_typesupport_fastrtps_cpp:airsim_interfaces__rosidl_typesupport_fastrtps_cpp") + +# populate airsim_interfaces_LIBRARIES_ +if(NOT _exported_typesupport_libraries STREQUAL "") + # loop over typesupport libraries + foreach(_tuple ${_exported_typesupport_libraries}) + string(REPLACE ":" ";" _tuple "${_tuple}") + list(GET _tuple 0 _suffix) + list(GET _tuple 1 _library) + + if(NOT IS_ABSOLUTE "${_library}") + # search for library target relative to this CMake file + set(_lib "NOTFOUND") + find_library( + _lib NAMES "${_library}" + PATHS "${airsim_interfaces_DIR}/../../../lib" + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + if(NOT _lib) + # the library wasn't found + message(FATAL_ERROR "Package 'airsim_interfaces' exports the typesupport library '${_library}' which couldn't be found") + elseif(NOT IS_ABSOLUTE "${_lib}") + # the found library must be an absolute path + message(FATAL_ERROR "Package 'airsim_interfaces' found the typesupport library '${_library}' at '${_lib}' which is not an absolute path") + elseif(NOT EXISTS "${_lib}") + # the found library must exist + message(FATAL_ERROR "Package 'airsim_interfaces' found the typesupport library '${_lib}' which doesn't exist") + else() + list(APPEND airsim_interfaces_LIBRARIES${_suffix} ${_cfg} "${_lib}") + endif() + + else() + if(NOT EXISTS "${_library}") + # the found library must exist + message(WARNING "Package 'airsim_interfaces' exports the typesupport library '${_library}' which doesn't exist") + else() + list(APPEND airsim_interfaces_LIBRARIES${_suffix} "${_library}") + endif() + endif() + endforeach() +endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake new file mode 100644 index 0000000000..1555273a4f --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake @@ -0,0 +1,23 @@ +# generated from +# rosidl_cmake/cmake/template/rosidl_cmake_export_typesupport_targets.cmake.in + +set(_exported_typesupport_targets + "__rosidl_typesupport_introspection_c:airsim_interfaces__rosidl_typesupport_introspection_c;__rosidl_typesupport_introspection_cpp:airsim_interfaces__rosidl_typesupport_introspection_cpp") + +# populate airsim_interfaces_TARGETS_ +if(NOT _exported_typesupport_targets STREQUAL "") + # loop over typesupport targets + foreach(_tuple ${_exported_typesupport_targets}) + string(REPLACE ":" ";" _tuple "${_tuple}") + list(GET _tuple 0 _suffix) + list(GET _tuple 1 _target) + + set(_target "airsim_interfaces::${_target}") + if(NOT TARGET "${_target}") + # the exported target must exist + message(WARNING "Package 'airsim_interfaces' exports the typesupport target '${_target}' which doesn't exist") + else() + list(APPEND airsim_interfaces_TARGETS${_suffix} "${_target}") + endif() + endforeach() +endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.dsv new file mode 100644 index 0000000000..79d4c95b55 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;AMENT_PREFIX_PATH; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.sh new file mode 100644 index 0000000000..02e441b753 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.sh @@ -0,0 +1,4 @@ +# copied from +# ament_cmake_core/cmake/environment_hooks/environment/ament_prefix_path.sh + +ament_prepend_unique_value AMENT_PREFIX_PATH "$AMENT_CURRENT_PREFIX" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.dsv new file mode 100644 index 0000000000..89bec935bf --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;LD_LIBRARY_PATH;lib diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.sh new file mode 100644 index 0000000000..292e518f11 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.sh @@ -0,0 +1,16 @@ +# copied from ament_package/template/environment_hook/library_path.sh + +# detect if running on Darwin platform +_UNAME=`uname -s` +_IS_DARWIN=0 +if [ "$_UNAME" = "Darwin" ]; then + _IS_DARWIN=1 +fi +unset _UNAME + +if [ $_IS_DARWIN -eq 0 ]; then + ament_prepend_unique_value LD_LIBRARY_PATH "$AMENT_CURRENT_PREFIX/lib" +else + ament_prepend_unique_value DYLD_LIBRARY_PATH "$AMENT_CURRENT_PREFIX/lib" +fi +unset _IS_DARWIN diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.dsv new file mode 100644 index 0000000000..b94426af08 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate-if-exists;PATH;bin diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.sh new file mode 100644 index 0000000000..e59b749a89 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.sh @@ -0,0 +1,5 @@ +# copied from ament_cmake_core/cmake/environment_hooks/environment/path.sh + +if [ -d "$AMENT_CURRENT_PREFIX/bin" ]; then + ament_prepend_unique_value PATH "$AMENT_CURRENT_PREFIX/bin" +fi diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.dsv new file mode 100644 index 0000000000..84dbc4c7b0 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;PYTHONPATH;lib/python3.8/site-packages diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.sh new file mode 100644 index 0000000000..7fe2b2f6f6 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.sh @@ -0,0 +1,3 @@ +# generated from ament_package/template/environment_hook/pythonpath.sh.in + +ament_prepend_unique_value PYTHONPATH "$AMENT_CURRENT_PREFIX/lib/python3.8/site-packages" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.dsv new file mode 100644 index 0000000000..e119f32cba --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;CMAKE_PREFIX_PATH; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.ps1 b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.ps1 new file mode 100644 index 0000000000..d03facc1a4 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value CMAKE_PREFIX_PATH "$env:COLCON_CURRENT_PREFIX" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.sh new file mode 100644 index 0000000000..a948e685ba --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value CMAKE_PREFIX_PATH "$COLCON_CURRENT_PREFIX" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.dsv new file mode 100644 index 0000000000..89bec935bf --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;LD_LIBRARY_PATH;lib diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.ps1 b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.ps1 new file mode 100644 index 0000000000..f6df601d0c --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value LD_LIBRARY_PATH "$env:COLCON_CURRENT_PREFIX\lib" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.sh new file mode 100644 index 0000000000..ca3c1020bb --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value LD_LIBRARY_PATH "$COLCON_CURRENT_PREFIX/lib" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.dsv new file mode 100644 index 0000000000..84dbc4c7b0 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;PYTHONPATH;lib/python3.8/site-packages diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.ps1 b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.ps1 new file mode 100644 index 0000000000..12877ef654 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value PYTHONPATH "$env:COLCON_CURRENT_PREFIX\lib/python3.8/site-packages" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.sh new file mode 100644 index 0000000000..ed8efd9c7b --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value PYTHONPATH "$COLCON_CURRENT_PREFIX/lib/python3.8/site-packages" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.bash b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.bash new file mode 100644 index 0000000000..49782f2461 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.bash @@ -0,0 +1,46 @@ +# generated from ament_package/template/package_level/local_setup.bash.in + +# source local_setup.sh from same directory as this file +_this_path=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" && pwd) +# provide AMENT_CURRENT_PREFIX to shell script +AMENT_CURRENT_PREFIX=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." && pwd) +# store AMENT_CURRENT_PREFIX to restore it before each environment hook +_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX + +# trace output +if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_this_path/local_setup.sh\"" +fi +. "$_this_path/local_setup.sh" +unset _this_path + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks +AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX +# list all environment hooks of this package + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + # restore AMENT_CURRENT_PREFIX for each environment hook + AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + . "$_hook" + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +unset _package_local_setup_AMENT_CURRENT_PREFIX +unset AMENT_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.dsv new file mode 100644 index 0000000000..0aee8afe2e --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.dsv @@ -0,0 +1,4 @@ +source;share/airsim_interfaces/environment/ament_prefix_path.sh +source;share/airsim_interfaces/environment/library_path.sh +source;share/airsim_interfaces/environment/path.sh +source;share/airsim_interfaces/environment/pythonpath.sh diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.sh new file mode 100644 index 0000000000..84e7333065 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.sh @@ -0,0 +1,135 @@ +# generated from ament_package/template/package_level/local_setup.sh.in + +# since this file is sourced use either the provided AMENT_CURRENT_PREFIX +# or fall back to the destination set at configure time +: ${AMENT_CURRENT_PREFIX:="/home/alon/AirSimRos/ros/install/airsim_interfaces"} +if [ ! -d "$AMENT_CURRENT_PREFIX" ]; then + if [ -z "$COLCON_CURRENT_PREFIX" ]; then + echo "The compile time prefix path '$AMENT_CURRENT_PREFIX' doesn't " \ + "exist. Consider sourcing a different extension than '.sh'." 1>&2 + else + AMENT_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" + fi +fi + +# function to append values to environment variables +# using colons as separators and avoiding leading separators +ament_append_value() { + # arguments + _listname="$1" + _value="$2" + #echo "listname $_listname" + #eval echo "list value \$$_listname" + #echo "value $_value" + + # avoid leading separator + eval _values=\"\$$_listname\" + if [ -z "$_values" ]; then + eval export $_listname=\"$_value\" + #eval echo "set list \$$_listname" + else + # field separator must not be a colon + _ament_append_value_IFS=$IFS + unset IFS + eval export $_listname=\"\$$_listname:$_value\" + #eval echo "append list \$$_listname" + IFS=$_ament_append_value_IFS + unset _ament_append_value_IFS + fi + unset _values + + unset _value + unset _listname +} + +# function to prepend non-duplicate values to environment variables +# using colons as separators and avoiding trailing separators +ament_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + #echo "listname $_listname" + #eval echo "list value \$$_listname" + #echo "value $_value" + + # check if the list contains the value + eval _values=\"\$$_listname\" + _duplicate= + _ament_prepend_unique_value_IFS=$IFS + IFS=":" + if [ "$AMENT_SHELL" = "zsh" ]; then + ament_zsh_to_array _values + fi + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + if [ "$_item" = "$_value" ]; then + _duplicate=1 + fi + done + unset _item + + # prepend only non-duplicates + if [ -z "$_duplicate" ]; then + # avoid trailing separator + if [ -z "$_values" ]; then + eval export $_listname=\"$_value\" + #eval echo "set list \$$_listname" + else + # field separator must not be a colon + unset IFS + eval export $_listname=\"$_value:\$$_listname\" + #eval echo "prepend list \$$_listname" + fi + fi + IFS=$_ament_prepend_unique_value_IFS + unset _ament_prepend_unique_value_IFS + unset _duplicate + unset _values + + unset _value + unset _listname +} + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# list all environment hooks of this package +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/airsim_interfaces/environment/ament_prefix_path.sh" +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/airsim_interfaces/environment/library_path.sh" +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/airsim_interfaces/environment/path.sh" +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/airsim_interfaces/environment/pythonpath.sh" + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + if [ "$AMENT_SHELL" = "zsh" ]; then + ament_zsh_to_array AMENT_ENVIRONMENT_HOOKS + fi + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + if [ -f "$_hook" ]; then + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + # trace output + if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_hook\"" + fi + . "$_hook" + fi + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +# reset AMENT_CURRENT_PREFIX after each package +# allowing to source multiple package-level setup files +unset AMENT_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.zsh b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.zsh new file mode 100644 index 0000000000..fe161be53d --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.zsh @@ -0,0 +1,59 @@ +# generated from ament_package/template/package_level/local_setup.zsh.in + +AMENT_SHELL=zsh + +# source local_setup.sh from same directory as this file +_this_path=$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd) +# provide AMENT_CURRENT_PREFIX to shell script +AMENT_CURRENT_PREFIX=$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd) +# store AMENT_CURRENT_PREFIX to restore it before each environment hook +_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX + +# function to convert array-like strings into arrays +# to wordaround SH_WORD_SPLIT not being set +ament_zsh_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# trace output +if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_this_path/local_setup.sh\"" +fi +# the package-level local_setup file unsets AMENT_CURRENT_PREFIX +. "$_this_path/local_setup.sh" +unset _this_path + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks +AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX +# list all environment hooks of this package + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + # restore AMENT_CURRENT_PREFIX for each environment hook + AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + . "$_hook" + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +unset _package_local_setup_AMENT_CURRENT_PREFIX +unset AMENT_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.idl new file mode 100644 index 0000000000..7ef5e810cb --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.idl @@ -0,0 +1,19 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from airsim_interfaces/msg/Altimeter.msg +// generated code does not contain a copyright notice + +#include "std_msgs/msg/Header.idl" + +module airsim_interfaces { + module msg { + struct Altimeter { + std_msgs::msg::Header header; + + float altitude; + + float pressure; + + float qnh; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.msg new file mode 100644 index 0000000000..34e3dc1d70 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.msg @@ -0,0 +1,4 @@ +std_msgs/Header header +float32 altitude +float32 pressure +float32 qnh \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.idl new file mode 100644 index 0000000000..2844ec0965 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.idl @@ -0,0 +1,27 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from airsim_interfaces/msg/CarControls.msg +// generated code does not contain a copyright notice + +#include "std_msgs/msg/Header.idl" + +module airsim_interfaces { + module msg { + struct CarControls { + std_msgs::msg::Header header; + + float throttle; + + float brake; + + float steering; + + boolean handbrake; + + boolean manual; + + int8 manual_gear; + + boolean gear_immediate; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.msg new file mode 100644 index 0000000000..a6a2fd23c6 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.msg @@ -0,0 +1,8 @@ +std_msgs/Header header +float32 throttle +float32 brake +float32 steering +bool handbrake +bool manual +int8 manual_gear +bool gear_immediate \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.idl new file mode 100644 index 0000000000..fbdc455124 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.idl @@ -0,0 +1,29 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from airsim_interfaces/msg/CarState.msg +// generated code does not contain a copyright notice + +#include "geometry_msgs/msg/PoseWithCovariance.idl" +#include "geometry_msgs/msg/TwistWithCovariance.idl" +#include "std_msgs/msg/Header.idl" + +module airsim_interfaces { + module msg { + struct CarState { + std_msgs::msg::Header header; + + geometry_msgs::msg::PoseWithCovariance pose; + + geometry_msgs::msg::TwistWithCovariance twist; + + float speed; + + int8 gear; + + float rpm; + + float maxrpm; + + boolean handbrake; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.msg new file mode 100644 index 0000000000..e5bde5a59d --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.msg @@ -0,0 +1,8 @@ +std_msgs/Header header +geometry_msgs/PoseWithCovariance pose +geometry_msgs/TwistWithCovariance twist +float32 speed +int8 gear +float32 rpm +float32 maxrpm +bool handbrake \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.idl new file mode 100644 index 0000000000..14b191bc85 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.idl @@ -0,0 +1,27 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from airsim_interfaces/msg/Environment.msg +// generated code does not contain a copyright notice + +#include "geographic_msgs/msg/GeoPoint.idl" +#include "geometry_msgs/msg/Vector3.idl" +#include "std_msgs/msg/Header.idl" + +module airsim_interfaces { + module msg { + struct Environment { + std_msgs::msg::Header header; + + geometry_msgs::msg::Vector3 position; + + geographic_msgs::msg::GeoPoint geo_point; + + geometry_msgs::msg::Vector3 gravity; + + float air_pressure; + + float temperature; + + float air_density; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.msg new file mode 100644 index 0000000000..fdeed971cc --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.msg @@ -0,0 +1,8 @@ +std_msgs/Header header +geometry_msgs/Vector3 position +geographic_msgs/GeoPoint geo_point +geometry_msgs/Vector3 gravity +float32 air_pressure +float32 temperature +float32 air_density + diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.idl new file mode 100644 index 0000000000..b2bd1e9537 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.idl @@ -0,0 +1,18 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from airsim_interfaces/msg/GPSYaw.msg +// generated code does not contain a copyright notice + + +module airsim_interfaces { + module msg { + struct GPSYaw { + double latitude; + + double longitude; + + double altitude; + + double yaw; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.msg new file mode 100644 index 0000000000..1e03ea33a4 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.msg @@ -0,0 +1,4 @@ +float64 latitude +float64 longitude +float64 altitude +float64 yaw \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.idl new file mode 100644 index 0000000000..ec0fd794f1 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.idl @@ -0,0 +1,23 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from airsim_interfaces/msg/GimbalAngleEulerCmd.msg +// generated code does not contain a copyright notice + +#include "std_msgs/msg/Header.idl" + +module airsim_interfaces { + module msg { + struct GimbalAngleEulerCmd { + std_msgs::msg::Header header; + + string camera_name; + + string vehicle_name; + + double roll; + + double pitch; + + double yaw; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.msg new file mode 100644 index 0000000000..cf3cdf4bc8 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.msg @@ -0,0 +1,6 @@ +std_msgs/Header header +string camera_name +string vehicle_name +float64 roll +float64 pitch +float64 yaw \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.idl new file mode 100644 index 0000000000..90ec46c028 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.idl @@ -0,0 +1,20 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from airsim_interfaces/msg/GimbalAngleQuatCmd.msg +// generated code does not contain a copyright notice + +#include "geometry_msgs/msg/Quaternion.idl" +#include "std_msgs/msg/Header.idl" + +module airsim_interfaces { + module msg { + struct GimbalAngleQuatCmd { + std_msgs::msg::Header header; + + string camera_name; + + string vehicle_name; + + geometry_msgs::msg::Quaternion orientation; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.msg new file mode 100644 index 0000000000..819dd53c52 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.msg @@ -0,0 +1,4 @@ +std_msgs/Header header +string camera_name +string vehicle_name +geometry_msgs/Quaternion orientation \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.idl new file mode 100644 index 0000000000..da0ef1ad95 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.idl @@ -0,0 +1,13 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from airsim_interfaces/msg/VelCmd.msg +// generated code does not contain a copyright notice + +#include "geometry_msgs/msg/Twist.idl" + +module airsim_interfaces { + module msg { + struct VelCmd { + geometry_msgs::msg::Twist twist; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.msg new file mode 100644 index 0000000000..6a63100193 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.msg @@ -0,0 +1,2 @@ +geometry_msgs/Twist twist +# string vehicle_name \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.idl new file mode 100644 index 0000000000..106e91262c --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.idl @@ -0,0 +1,15 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from airsim_interfaces/msg/VelCmdGroup.msg +// generated code does not contain a copyright notice + +#include "geometry_msgs/msg/Twist.idl" + +module airsim_interfaces { + module msg { + struct VelCmdGroup { + geometry_msgs::msg::Twist twist; + + sequence vehicle_names; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.msg new file mode 100644 index 0000000000..70abdce4ca --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.msg @@ -0,0 +1,2 @@ +geometry_msgs/Twist twist +string[] vehicle_names \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.bash b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.bash new file mode 100644 index 0000000000..c4c7a3a25a --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.bash @@ -0,0 +1,39 @@ +# generated from colcon_bash/shell/template/package.bash.em + +# This script extends the environment for this package. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." > /dev/null && pwd)" +else + _colcon_package_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh script of this package +_colcon_package_bash_source_script "$_colcon_package_bash_COLCON_CURRENT_PREFIX/share/airsim_interfaces/package.sh" + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_bash_COLCON_CURRENT_PREFIX" + +# source bash hooks +_colcon_package_bash_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/local_setup.bash" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_bash_source_script +unset _colcon_package_bash_COLCON_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.dsv new file mode 100644 index 0000000000..efe7fb5d60 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.dsv @@ -0,0 +1,14 @@ +source;share/airsim_interfaces/hook/cmake_prefix_path.ps1 +source;share/airsim_interfaces/hook/cmake_prefix_path.dsv +source;share/airsim_interfaces/hook/cmake_prefix_path.sh +source;share/airsim_interfaces/hook/ld_library_path_lib.ps1 +source;share/airsim_interfaces/hook/ld_library_path_lib.dsv +source;share/airsim_interfaces/hook/ld_library_path_lib.sh +source;share/airsim_interfaces/hook/pythonpath.ps1 +source;share/airsim_interfaces/hook/pythonpath.dsv +source;share/airsim_interfaces/hook/pythonpath.sh +source;share/airsim_interfaces/local_setup.bash +source;share/airsim_interfaces/local_setup.dsv +source;share/airsim_interfaces/local_setup.ps1 +source;share/airsim_interfaces/local_setup.sh +source;share/airsim_interfaces/local_setup.zsh diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.ps1 b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.ps1 new file mode 100644 index 0000000000..6e2fddacca --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.ps1 @@ -0,0 +1,67 @@ +# generated from colcon_powershell/shell/template/package.ps1.em + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_prepend_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + # start with the new value + $_all_values="$_value" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -ne $_value) { + # keep non-duplicate values + $_all_values="${_all_values};$_" + } + } + } + } + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +function colcon_package_source_powershell_script { + param ( + $_colcon_package_source_powershell_script + ) + # source script with conditional trace output + if (Test-Path $_colcon_package_source_powershell_script) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_package_source_powershell_script'" + } + . "$_colcon_package_source_powershell_script" + } else { + Write-Error "not found: '$_colcon_package_source_powershell_script'" + } +} + + +# a powershell script is able to determine its own path +# the prefix is two levels up from the package specific share directory +$env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.FullName + +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/airsim_interfaces/hook/cmake_prefix_path.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/airsim_interfaces/hook/ld_library_path_lib.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/airsim_interfaces/hook/pythonpath.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/airsim_interfaces/local_setup.ps1" + +Remove-Item Env:\COLCON_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.sh new file mode 100644 index 0000000000..7678837200 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.sh @@ -0,0 +1,89 @@ +# generated from colcon_core/shell/template/package.sh.em + +# This script extends the environment for this package. + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prepend_unique_value_IFS=$IFS + IFS=":" + # start with the new value + _all_values="$_value" + # workaround SH_WORD_SPLIT not being set in zsh + if [ "$(command -v colcon_zsh_convert_to_array)" ]; then + colcon_zsh_convert_to_array _values + fi + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS=$_colcon_prepend_unique_value_IFS + unset _colcon_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_package_sh_COLCON_CURRENT_PREFIX="/home/alon/AirSimRos/ros/install/airsim_interfaces" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_package_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_package_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_package_sh_COLCON_CURRENT_PREFIX + return 1 + fi + COLCON_CURRENT_PREFIX="$_colcon_package_sh_COLCON_CURRENT_PREFIX" +fi +unset _colcon_package_sh_COLCON_CURRENT_PREFIX + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh hooks +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/hook/cmake_prefix_path.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/hook/ld_library_path_lib.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/hook/pythonpath.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/local_setup.sh" + +unset _colcon_package_sh_source_script +unset COLCON_CURRENT_PREFIX + +# do not unset _colcon_prepend_unique_value since it might be used by non-primary shell hooks diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.xml b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.xml new file mode 100644 index 0000000000..3771ad7403 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.xml @@ -0,0 +1,24 @@ + + + airsim_interfaces + 0.1.0 + Contains message and service definitions used by the examples. + AAA + Apache License 2.0 + + AAA + + ament_cmake + + rosidl_default_generators + + action_msgs + + rosidl_default_runtime + + rosidl_interface_packages + + + ament_cmake + + diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.zsh b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.zsh new file mode 100644 index 0000000000..8cf5d0c0b5 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.zsh @@ -0,0 +1,50 @@ +# generated from colcon_zsh/shell/template/package.zsh.em + +# This script extends the environment for this package. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)" +else + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +colcon_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# source sh script of this package +_colcon_package_zsh_source_script "$_colcon_package_zsh_COLCON_CURRENT_PREFIX/share/airsim_interfaces/package.sh" +unset convert_zsh_to_array + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_zsh_COLCON_CURRENT_PREFIX" + +# source zsh hooks +_colcon_package_zsh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/local_setup.zsh" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_zsh_source_script +unset _colcon_package_zsh_COLCON_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.idl new file mode 100644 index 0000000000..8b01f542ca --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.idl @@ -0,0 +1,15 @@ +// generated from rosidl_adapter/resource/srv.idl.em +// with input from airsim_interfaces/srv/Land.srv +// generated code does not contain a copyright notice + + +module airsim_interfaces { + module srv { + struct Land_Request { + boolean wait_on_last_task; + }; + struct Land_Response { + boolean success; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.srv new file mode 100644 index 0000000000..2100b641c0 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.srv @@ -0,0 +1,3 @@ +bool wait_on_last_task +--- +bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.idl new file mode 100644 index 0000000000..7bcfe2d3c5 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.idl @@ -0,0 +1,17 @@ +// generated from rosidl_adapter/resource/srv.idl.em +// with input from airsim_interfaces/srv/LandGroup.srv +// generated code does not contain a copyright notice + + +module airsim_interfaces { + module srv { + struct LandGroup_Request { + sequence vehicle_names; + + boolean wait_on_last_task; + }; + struct LandGroup_Response { + boolean success; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.srv new file mode 100644 index 0000000000..1c900c14b8 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.srv @@ -0,0 +1,4 @@ +string[] vehicle_names +bool wait_on_last_task +--- +bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Request.msg new file mode 100644 index 0000000000..bc7259465e --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Request.msg @@ -0,0 +1,2 @@ +string[] vehicle_names +bool wait_on_last_task diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Response.msg new file mode 100644 index 0000000000..162f08df15 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Response.msg @@ -0,0 +1,2 @@ + +bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Request.msg new file mode 100644 index 0000000000..0fa8cd3fb8 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Request.msg @@ -0,0 +1 @@ +bool wait_on_last_task diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Response.msg new file mode 100644 index 0000000000..162f08df15 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Response.msg @@ -0,0 +1,2 @@ + +bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.idl new file mode 100644 index 0000000000..b5daa07900 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.idl @@ -0,0 +1,17 @@ +// generated from rosidl_adapter/resource/srv.idl.em +// with input from airsim_interfaces/srv/Reset.srv +// generated code does not contain a copyright notice + + +module airsim_interfaces { + module srv { + @verbatim (language="comment", text= + " string vehicle_name") + struct Reset_Request { + boolean wait_on_last_task; + }; + struct Reset_Response { + boolean success; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.srv new file mode 100644 index 0000000000..3e754478e9 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.srv @@ -0,0 +1,4 @@ +# string vehicle_name +bool wait_on_last_task +--- +bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Request.msg new file mode 100644 index 0000000000..c564a8e290 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Request.msg @@ -0,0 +1,2 @@ +# string vehicle_name +bool wait_on_last_task diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Response.msg new file mode 100644 index 0000000000..162f08df15 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Response.msg @@ -0,0 +1,2 @@ + +bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.idl new file mode 100644 index 0000000000..6be26b8104 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.idl @@ -0,0 +1,25 @@ +// generated from rosidl_adapter/resource/srv.idl.em +// with input from airsim_interfaces/srv/SetGPSPosition.srv +// generated code does not contain a copyright notice + + +module airsim_interfaces { + module srv { + struct SetGPSPosition_Request { + double latitude; + + double longitude; + + double altitude; + + double yaw; + + string vehicle_name; + }; + @verbatim (language="comment", text= + "Response : return success=true, (if async=false && if setpoint reached before timeout = 30sec) || (if async=true && command sent to autopilot)") + struct SetGPSPosition_Response { + boolean success; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.srv new file mode 100644 index 0000000000..76cc2c081b --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.srv @@ -0,0 +1,8 @@ +float64 latitude +float64 longitude +float64 altitude +float64 yaw +string vehicle_name +--- +#Response : return success=true, (if async=false && if setpoint reached before timeout = 30sec) || (if async=true && command sent to autopilot) +bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Request.msg new file mode 100644 index 0000000000..0126c68115 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Request.msg @@ -0,0 +1,5 @@ +float64 latitude +float64 longitude +float64 altitude +float64 yaw +string vehicle_name diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Response.msg new file mode 100644 index 0000000000..50358a928a --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Response.msg @@ -0,0 +1,3 @@ + +#Response : return success=true, (if async=false && if setpoint reached before timeout = 30sec) || (if async=true && command sent to autopilot) +bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.idl new file mode 100644 index 0000000000..373b8638cd --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.idl @@ -0,0 +1,30 @@ +// generated from rosidl_adapter/resource/srv.idl.em +// with input from airsim_interfaces/srv/SetLocalPosition.srv +// generated code does not contain a copyright notice + + +module airsim_interfaces { + module srv { + @verbatim (language="comment", text= + "Request : expects position setpoint via x, y, z" "\n" + "Request : expects yaw setpoint via yaw (send yaw_valid=true)") + struct SetLocalPosition_Request { + double x; + + double y; + + double z; + + double yaw; + + string vehicle_name; + }; + @verbatim (language="comment", text= + "Response : success=true - (if async=false && if setpoint reached before timeout = 30sec) || (if async=true)") + struct SetLocalPosition_Response { + boolean success; + + string message; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.srv new file mode 100644 index 0000000000..f6293fc6e6 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.srv @@ -0,0 +1,11 @@ +#Request : expects position setpoint via x, y, z +#Request : expects yaw setpoint via yaw (send yaw_valid=true) +float64 x +float64 y +float64 z +float64 yaw +string vehicle_name +--- +#Response : success=true - (if async=false && if setpoint reached before timeout = 30sec) || (if async=true) +bool success +string message \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Request.msg new file mode 100644 index 0000000000..a7e001a620 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Request.msg @@ -0,0 +1,7 @@ +#Request : expects position setpoint via x, y, z +#Request : expects yaw setpoint via yaw (send yaw_valid=true) +float64 x +float64 y +float64 z +float64 yaw +string vehicle_name diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Response.msg new file mode 100644 index 0000000000..81c099d25d --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Response.msg @@ -0,0 +1,4 @@ + +#Response : success=true - (if async=false && if setpoint reached before timeout = 30sec) || (if async=true) +bool success +string message \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.idl new file mode 100644 index 0000000000..28453017aa --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.idl @@ -0,0 +1,15 @@ +// generated from rosidl_adapter/resource/srv.idl.em +// with input from airsim_interfaces/srv/Takeoff.srv +// generated code does not contain a copyright notice + + +module airsim_interfaces { + module srv { + struct Takeoff_Request { + boolean wait_on_last_task; + }; + struct Takeoff_Response { + boolean success; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.srv new file mode 100644 index 0000000000..55472170ea --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.srv @@ -0,0 +1,3 @@ +bool wait_on_last_task +--- +bool success diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.idl new file mode 100644 index 0000000000..449fc56bab --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.idl @@ -0,0 +1,17 @@ +// generated from rosidl_adapter/resource/srv.idl.em +// with input from airsim_interfaces/srv/TakeoffGroup.srv +// generated code does not contain a copyright notice + + +module airsim_interfaces { + module srv { + struct TakeoffGroup_Request { + sequence vehicle_names; + + boolean wait_on_last_task; + }; + struct TakeoffGroup_Response { + boolean success; + }; + }; +}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.srv new file mode 100644 index 0000000000..1c900c14b8 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.srv @@ -0,0 +1,4 @@ +string[] vehicle_names +bool wait_on_last_task +--- +bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Request.msg new file mode 100644 index 0000000000..bc7259465e --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Request.msg @@ -0,0 +1,2 @@ +string[] vehicle_names +bool wait_on_last_task diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Response.msg new file mode 100644 index 0000000000..162f08df15 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Response.msg @@ -0,0 +1,2 @@ + +bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Request.msg new file mode 100644 index 0000000000..0fa8cd3fb8 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Request.msg @@ -0,0 +1 @@ +bool wait_on_last_task diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Response.msg new file mode 100644 index 0000000000..afff92900e --- /dev/null +++ b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Response.msg @@ -0,0 +1,2 @@ + +bool success diff --git a/ros2/install/airsim_interfaces/share/ament_index/resource_index/package_run_dependencies/airsim_interfaces b/ros2/install/airsim_interfaces/share/ament_index/resource_index/package_run_dependencies/airsim_interfaces new file mode 100644 index 0000000000..56d0687991 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/ament_index/resource_index/package_run_dependencies/airsim_interfaces @@ -0,0 +1 @@ +action_msgs;rosidl_default_runtime \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/ament_index/resource_index/parent_prefix_path/airsim_interfaces b/ros2/install/airsim_interfaces/share/ament_index/resource_index/parent_prefix_path/airsim_interfaces new file mode 100644 index 0000000000..dae8bb1730 --- /dev/null +++ b/ros2/install/airsim_interfaces/share/ament_index/resource_index/parent_prefix_path/airsim_interfaces @@ -0,0 +1 @@ +/home/alon/AirSimRos/ros/install/airsim_interfaces:/opt/ros/foxy \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/ament_index/resource_index/rosidl_interfaces/airsim_interfaces b/ros2/install/airsim_interfaces/share/ament_index/resource_index/rosidl_interfaces/airsim_interfaces new file mode 100644 index 0000000000..814e20a43c --- /dev/null +++ b/ros2/install/airsim_interfaces/share/ament_index/resource_index/rosidl_interfaces/airsim_interfaces @@ -0,0 +1,46 @@ +msg/Altimeter.idl +msg/Altimeter.msg +msg/CarControls.idl +msg/CarControls.msg +msg/CarState.idl +msg/CarState.msg +msg/Environment.idl +msg/Environment.msg +msg/GPSYaw.idl +msg/GPSYaw.msg +msg/GimbalAngleEulerCmd.idl +msg/GimbalAngleEulerCmd.msg +msg/GimbalAngleQuatCmd.idl +msg/GimbalAngleQuatCmd.msg +msg/VelCmd.idl +msg/VelCmd.msg +msg/VelCmdGroup.idl +msg/VelCmdGroup.msg +srv/Land.idl +srv/Land.srv +srv/LandGroup.idl +srv/LandGroup.srv +srv/LandGroup_Request.msg +srv/LandGroup_Response.msg +srv/Land_Request.msg +srv/Land_Response.msg +srv/Reset.idl +srv/Reset.srv +srv/Reset_Request.msg +srv/Reset_Response.msg +srv/SetGPSPosition.idl +srv/SetGPSPosition.srv +srv/SetGPSPosition_Request.msg +srv/SetGPSPosition_Response.msg +srv/SetLocalPosition.idl +srv/SetLocalPosition.srv +srv/SetLocalPosition_Request.msg +srv/SetLocalPosition_Response.msg +srv/Takeoff.idl +srv/Takeoff.srv +srv/TakeoffGroup.idl +srv/TakeoffGroup.srv +srv/TakeoffGroup_Request.msg +srv/TakeoffGroup_Response.msg +srv/Takeoff_Request.msg +srv/Takeoff_Response.msg \ No newline at end of file diff --git a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.bash b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.bash new file mode 100644 index 0000000000..abf3e56507 --- /dev/null +++ b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.bash @@ -0,0 +1,39 @@ +# generated from colcon_bash/shell/template/package.bash.em + +# This script extends the environment for this package. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." > /dev/null && pwd)" +else + _colcon_package_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh script of this package +_colcon_package_bash_source_script "$_colcon_package_bash_COLCON_CURRENT_PREFIX/share/airsim_ros_pkgs/package.sh" + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_bash_COLCON_CURRENT_PREFIX" + +# source bash hooks +_colcon_package_bash_source_script "$COLCON_CURRENT_PREFIX/share/airsim_ros_pkgs/local_setup.bash" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_bash_source_script +unset _colcon_package_bash_COLCON_CURRENT_PREFIX diff --git a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.dsv b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.dsv new file mode 100644 index 0000000000..ce5073f4ee --- /dev/null +++ b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.dsv @@ -0,0 +1,5 @@ +source;share/airsim_ros_pkgs/local_setup.bash +source;share/airsim_ros_pkgs/local_setup.dsv +source;share/airsim_ros_pkgs/local_setup.ps1 +source;share/airsim_ros_pkgs/local_setup.sh +source;share/airsim_ros_pkgs/local_setup.zsh diff --git a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.ps1 b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.ps1 new file mode 100644 index 0000000000..1c91e27b7a --- /dev/null +++ b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.ps1 @@ -0,0 +1,64 @@ +# generated from colcon_powershell/shell/template/package.ps1.em + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_prepend_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + # start with the new value + $_all_values="$_value" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -ne $_value) { + # keep non-duplicate values + $_all_values="${_all_values};$_" + } + } + } + } + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +function colcon_package_source_powershell_script { + param ( + $_colcon_package_source_powershell_script + ) + # source script with conditional trace output + if (Test-Path $_colcon_package_source_powershell_script) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_package_source_powershell_script'" + } + . "$_colcon_package_source_powershell_script" + } else { + Write-Error "not found: '$_colcon_package_source_powershell_script'" + } +} + + +# a powershell script is able to determine its own path +# the prefix is two levels up from the package specific share directory +$env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.FullName + +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/airsim_ros_pkgs/local_setup.ps1" + +Remove-Item Env:\COLCON_CURRENT_PREFIX diff --git a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.sh b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.sh new file mode 100644 index 0000000000..1d51db8d23 --- /dev/null +++ b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.sh @@ -0,0 +1,86 @@ +# generated from colcon_core/shell/template/package.sh.em + +# This script extends the environment for this package. + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prepend_unique_value_IFS=$IFS + IFS=":" + # start with the new value + _all_values="$_value" + # workaround SH_WORD_SPLIT not being set in zsh + if [ "$(command -v colcon_zsh_convert_to_array)" ]; then + colcon_zsh_convert_to_array _values + fi + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS=$_colcon_prepend_unique_value_IFS + unset _colcon_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_package_sh_COLCON_CURRENT_PREFIX="/home/alon/AirSimRos/ros/install/airsim_ros_pkgs" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_package_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_package_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_package_sh_COLCON_CURRENT_PREFIX + return 1 + fi + COLCON_CURRENT_PREFIX="$_colcon_package_sh_COLCON_CURRENT_PREFIX" +fi +unset _colcon_package_sh_COLCON_CURRENT_PREFIX + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh hooks +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_ros_pkgs/local_setup.sh" + +unset _colcon_package_sh_source_script +unset COLCON_CURRENT_PREFIX + +# do not unset _colcon_prepend_unique_value since it might be used by non-primary shell hooks diff --git a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.zsh b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.zsh new file mode 100644 index 0000000000..b95d7cc5a6 --- /dev/null +++ b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.zsh @@ -0,0 +1,50 @@ +# generated from colcon_zsh/shell/template/package.zsh.em + +# This script extends the environment for this package. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)" +else + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +colcon_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# source sh script of this package +_colcon_package_zsh_source_script "$_colcon_package_zsh_COLCON_CURRENT_PREFIX/share/airsim_ros_pkgs/package.sh" +unset convert_zsh_to_array + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_zsh_COLCON_CURRENT_PREFIX" + +# source zsh hooks +_colcon_package_zsh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_ros_pkgs/local_setup.zsh" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_zsh_source_script +unset _colcon_package_zsh_COLCON_CURRENT_PREFIX diff --git a/ros2/install/local_setup.bash b/ros2/install/local_setup.bash new file mode 100644 index 0000000000..efd5f8c9e2 --- /dev/null +++ b/ros2/install/local_setup.bash @@ -0,0 +1,107 @@ +# generated from colcon_bash/shell/template/prefix.bash.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" +else + _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_bash_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_bash_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS="$_colcon_prefix_bash_prepend_unique_value_IFS" + unset _colcon_prefix_bash_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_bash_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_bash_prepend_unique_value + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh bash)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "Execute generated script:" + echo "<<<" + echo "${_colcon_ordered_commands}" + echo ">>>" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_bash_COLCON_CURRENT_PREFIX diff --git a/ros2/install/local_setup.ps1 b/ros2/install/local_setup.ps1 new file mode 100644 index 0000000000..229ea75370 --- /dev/null +++ b/ros2/install/local_setup.ps1 @@ -0,0 +1,53 @@ +# generated from colcon_powershell/shell/template/prefix.ps1.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# check environment variable for custom Python executable +if ($env:COLCON_PYTHON_EXECUTABLE) { + if (!(Test-Path "$env:COLCON_PYTHON_EXECUTABLE" -PathType Leaf)) { + echo "error: COLCON_PYTHON_EXECUTABLE '$env:COLCON_PYTHON_EXECUTABLE' doesn't exist" + exit 1 + } + $_colcon_python_executable="$env:COLCON_PYTHON_EXECUTABLE" +} else { + # use the Python executable known at configure time + $_colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if (!(Test-Path "$_colcon_python_executable" -PathType Leaf)) { + if (!(Get-Command "python3" -ErrorAction SilentlyContinue)) { + echo "error: unable to find python3 executable" + exit 1 + } + $_colcon_python_executable="python3" + } +} + +# function to source another script with conditional trace output +# first argument: the path of the script +function _colcon_prefix_powershell_source_script { + param ( + $_colcon_prefix_powershell_source_script_param + ) + # source script with conditional trace output + if (Test-Path $_colcon_prefix_powershell_source_script_param) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_prefix_powershell_source_script_param'" + } + . "$_colcon_prefix_powershell_source_script_param" + } else { + Write-Error "not found: '$_colcon_prefix_powershell_source_script_param'" + } +} + +# get all commands in topological order +$_colcon_ordered_commands = & "$_colcon_python_executable" "$(Split-Path $PSCommandPath -Parent)/_local_setup_util_ps1.py" ps1 + +# execute all commands in topological order +if ($env:COLCON_TRACE) { + echo "Execute generated script:" + echo "<<<" + $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Write-Output + echo ">>>" +} +$_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Invoke-Expression diff --git a/ros2/install/local_setup.sh b/ros2/install/local_setup.sh new file mode 100644 index 0000000000..635c25a2a4 --- /dev/null +++ b/ros2/install/local_setup.sh @@ -0,0 +1,114 @@ +# generated from colcon_core/shell/template/prefix.sh.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_prefix_sh_COLCON_CURRENT_PREFIX="/home/alon/AirSimRos/ros/install" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_prefix_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX + return 1 + fi +else + _colcon_prefix_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_sh_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_sh_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS="$_colcon_prefix_sh_prepend_unique_value_IFS" + unset _colcon_prefix_sh_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_sh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_sh_prepend_unique_value + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "Execute generated script:" + echo "<<<" + echo "${_colcon_ordered_commands}" + echo ">>>" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX diff --git a/ros2/install/local_setup.zsh b/ros2/install/local_setup.zsh new file mode 100644 index 0000000000..f7a8d904f2 --- /dev/null +++ b/ros2/install/local_setup.zsh @@ -0,0 +1,120 @@ +# generated from colcon_zsh/shell/template/prefix.zsh.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" +else + _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +_colcon_prefix_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_zsh_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_zsh_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + # workaround SH_WORD_SPLIT not being set + _colcon_prefix_zsh_convert_to_array _values + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS="$_colcon_prefix_zsh_prepend_unique_value_IFS" + unset _colcon_prefix_zsh_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_zsh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_zsh_prepend_unique_value +unset _colcon_prefix_zsh_convert_to_array + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh zsh)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "Execute generated script:" + echo "<<<" + echo "${_colcon_ordered_commands}" + echo ">>>" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_zsh_COLCON_CURRENT_PREFIX diff --git a/ros2/install/setup.bash b/ros2/install/setup.bash new file mode 100644 index 0000000000..b19cab0c50 --- /dev/null +++ b/ros2/install/setup.bash @@ -0,0 +1,31 @@ +# generated from colcon_bash/shell/template/prefix_chain.bash.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/foxy" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" + +unset COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_bash_source_script diff --git a/ros2/install/setup.ps1 b/ros2/install/setup.ps1 new file mode 100644 index 0000000000..412726f37d --- /dev/null +++ b/ros2/install/setup.ps1 @@ -0,0 +1,29 @@ +# generated from colcon_powershell/shell/template/prefix_chain.ps1.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +function _colcon_prefix_chain_powershell_source_script { + param ( + $_colcon_prefix_chain_powershell_source_script_param + ) + # source script with conditional trace output + if (Test-Path $_colcon_prefix_chain_powershell_source_script_param) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_prefix_chain_powershell_source_script_param'" + } + . "$_colcon_prefix_chain_powershell_source_script_param" + } else { + Write-Error "not found: '$_colcon_prefix_chain_powershell_source_script_param'" + } +} + +# source chained prefixes +_colcon_prefix_chain_powershell_source_script "/opt/ros/foxy\local_setup.ps1" + +# source this prefix +$env:COLCON_CURRENT_PREFIX=(Split-Path $PSCommandPath -Parent) +_colcon_prefix_chain_powershell_source_script "$env:COLCON_CURRENT_PREFIX\local_setup.ps1" diff --git a/ros2/install/setup.sh b/ros2/install/setup.sh new file mode 100644 index 0000000000..fbde867030 --- /dev/null +++ b/ros2/install/setup.sh @@ -0,0 +1,45 @@ +# generated from colcon_core/shell/template/prefix_chain.sh.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX=/home/alon/AirSimRos/ros/install +if [ ! -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +elif [ ! -d "$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX + return 1 +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/foxy" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + +unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_sh_source_script +unset COLCON_CURRENT_PREFIX diff --git a/ros2/install/setup.zsh b/ros2/install/setup.zsh new file mode 100644 index 0000000000..a98672a90b --- /dev/null +++ b/ros2/install/setup.zsh @@ -0,0 +1,31 @@ +# generated from colcon_zsh/shell/template/prefix_chain.zsh.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/foxy" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" + +unset COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_zsh_source_script diff --git a/ros2/log/COLCON_IGNORE b/ros2/log/COLCON_IGNORE new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ros2/log/latest b/ros2/log/latest new file mode 120000 index 0000000000..b57d247c77 --- /dev/null +++ b/ros2/log/latest @@ -0,0 +1 @@ +latest_build \ No newline at end of file diff --git a/ros2/log/latest_build b/ros2/log/latest_build new file mode 120000 index 0000000000..8680d25e83 --- /dev/null +++ b/ros2/log/latest_build @@ -0,0 +1 @@ +build_2021-08-12_08-31-56 \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/CMakeLists.txt b/ros2/src/airsim_interfaces/CMakeLists.txt new file mode 100644 index 0000000000..281ebab5df --- /dev/null +++ b/ros2/src/airsim_interfaces/CMakeLists.txt @@ -0,0 +1,38 @@ +cmake_minimum_required(VERSION 3.5) + +project(airsim_interfaces) + +# Default to C++14 +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 14) +endif() +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +find_package(ament_cmake REQUIRED) +find_package(rosidl_default_generators REQUIRED) + +rosidl_generate_interfaces(${PROJECT_NAME} + "msg/GimbalAngleEulerCmd.msg" + "msg/GimbalAngleQuatCmd.msg" + "msg/GPSYaw.msg" + "msg/VelCmd.msg" + "msg/VelCmdGroup.msg" + "msg/CarControls.msg" + "msg/CarState.msg" + "msg/Altimeter.msg" + "msg/Environment.msg" + "srv/SetGPSPosition.srv" + "srv/Takeoff.srv" + "srv/TakeoffGroup.srv" + "srv/Land.srv" + "srv/LandGroup.srv" + "srv/Reset.srv" + "srv/SetLocalPosition.srv" +) + +#install(FILES mapping_rules.yaml DESTINATION share/${PROJECT_NAME}) + +ament_export_dependencies(rosidl_default_runtime) +ament_package() diff --git a/ros2/src/airsim_interfaces/example_interfaces b/ros2/src/airsim_interfaces/example_interfaces new file mode 160000 index 0000000000..ae3df08ac1 --- /dev/null +++ b/ros2/src/airsim_interfaces/example_interfaces @@ -0,0 +1 @@ +Subproject commit ae3df08ac12cea293f53520c7c7dc67cb0cf5355 diff --git a/ros2/src/airsim_interfaces/msg/Altimeter.msg b/ros2/src/airsim_interfaces/msg/Altimeter.msg new file mode 100755 index 0000000000..34e3dc1d70 --- /dev/null +++ b/ros2/src/airsim_interfaces/msg/Altimeter.msg @@ -0,0 +1,4 @@ +std_msgs/Header header +float32 altitude +float32 pressure +float32 qnh \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/msg/CarControls.msg b/ros2/src/airsim_interfaces/msg/CarControls.msg new file mode 100755 index 0000000000..a6a2fd23c6 --- /dev/null +++ b/ros2/src/airsim_interfaces/msg/CarControls.msg @@ -0,0 +1,8 @@ +std_msgs/Header header +float32 throttle +float32 brake +float32 steering +bool handbrake +bool manual +int8 manual_gear +bool gear_immediate \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/msg/CarState.msg b/ros2/src/airsim_interfaces/msg/CarState.msg new file mode 100755 index 0000000000..e5bde5a59d --- /dev/null +++ b/ros2/src/airsim_interfaces/msg/CarState.msg @@ -0,0 +1,8 @@ +std_msgs/Header header +geometry_msgs/PoseWithCovariance pose +geometry_msgs/TwistWithCovariance twist +float32 speed +int8 gear +float32 rpm +float32 maxrpm +bool handbrake \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/msg/Environment.msg b/ros2/src/airsim_interfaces/msg/Environment.msg new file mode 100755 index 0000000000..fdeed971cc --- /dev/null +++ b/ros2/src/airsim_interfaces/msg/Environment.msg @@ -0,0 +1,8 @@ +std_msgs/Header header +geometry_msgs/Vector3 position +geographic_msgs/GeoPoint geo_point +geometry_msgs/Vector3 gravity +float32 air_pressure +float32 temperature +float32 air_density + diff --git a/ros2/src/airsim_interfaces/msg/GPSYaw.msg b/ros2/src/airsim_interfaces/msg/GPSYaw.msg new file mode 100755 index 0000000000..1e03ea33a4 --- /dev/null +++ b/ros2/src/airsim_interfaces/msg/GPSYaw.msg @@ -0,0 +1,4 @@ +float64 latitude +float64 longitude +float64 altitude +float64 yaw \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/msg/GimbalAngleEulerCmd.msg b/ros2/src/airsim_interfaces/msg/GimbalAngleEulerCmd.msg new file mode 100755 index 0000000000..cf3cdf4bc8 --- /dev/null +++ b/ros2/src/airsim_interfaces/msg/GimbalAngleEulerCmd.msg @@ -0,0 +1,6 @@ +std_msgs/Header header +string camera_name +string vehicle_name +float64 roll +float64 pitch +float64 yaw \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/msg/GimbalAngleQuatCmd.msg b/ros2/src/airsim_interfaces/msg/GimbalAngleQuatCmd.msg new file mode 100755 index 0000000000..819dd53c52 --- /dev/null +++ b/ros2/src/airsim_interfaces/msg/GimbalAngleQuatCmd.msg @@ -0,0 +1,4 @@ +std_msgs/Header header +string camera_name +string vehicle_name +geometry_msgs/Quaternion orientation \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/msg/VelCmd.msg b/ros2/src/airsim_interfaces/msg/VelCmd.msg new file mode 100755 index 0000000000..6a63100193 --- /dev/null +++ b/ros2/src/airsim_interfaces/msg/VelCmd.msg @@ -0,0 +1,2 @@ +geometry_msgs/Twist twist +# string vehicle_name \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/msg/VelCmdGroup.msg b/ros2/src/airsim_interfaces/msg/VelCmdGroup.msg new file mode 100755 index 0000000000..70abdce4ca --- /dev/null +++ b/ros2/src/airsim_interfaces/msg/VelCmdGroup.msg @@ -0,0 +1,2 @@ +geometry_msgs/Twist twist +string[] vehicle_names \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/package.xml b/ros2/src/airsim_interfaces/package.xml new file mode 100644 index 0000000000..3771ad7403 --- /dev/null +++ b/ros2/src/airsim_interfaces/package.xml @@ -0,0 +1,24 @@ + + + airsim_interfaces + 0.1.0 + Contains message and service definitions used by the examples. + AAA + Apache License 2.0 + + AAA + + ament_cmake + + rosidl_default_generators + + action_msgs + + rosidl_default_runtime + + rosidl_interface_packages + + + ament_cmake + + diff --git a/ros2/src/airsim_interfaces/srv/Land.srv b/ros2/src/airsim_interfaces/srv/Land.srv new file mode 100755 index 0000000000..2100b641c0 --- /dev/null +++ b/ros2/src/airsim_interfaces/srv/Land.srv @@ -0,0 +1,3 @@ +bool wait_on_last_task +--- +bool success \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/srv/LandGroup.srv b/ros2/src/airsim_interfaces/srv/LandGroup.srv new file mode 100755 index 0000000000..1c900c14b8 --- /dev/null +++ b/ros2/src/airsim_interfaces/srv/LandGroup.srv @@ -0,0 +1,4 @@ +string[] vehicle_names +bool wait_on_last_task +--- +bool success \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/srv/Reset.srv b/ros2/src/airsim_interfaces/srv/Reset.srv new file mode 100755 index 0000000000..3e754478e9 --- /dev/null +++ b/ros2/src/airsim_interfaces/srv/Reset.srv @@ -0,0 +1,4 @@ +# string vehicle_name +bool wait_on_last_task +--- +bool success \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/srv/SetGPSPosition.srv b/ros2/src/airsim_interfaces/srv/SetGPSPosition.srv new file mode 100755 index 0000000000..76cc2c081b --- /dev/null +++ b/ros2/src/airsim_interfaces/srv/SetGPSPosition.srv @@ -0,0 +1,8 @@ +float64 latitude +float64 longitude +float64 altitude +float64 yaw +string vehicle_name +--- +#Response : return success=true, (if async=false && if setpoint reached before timeout = 30sec) || (if async=true && command sent to autopilot) +bool success \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/srv/SetLocalPosition.srv b/ros2/src/airsim_interfaces/srv/SetLocalPosition.srv new file mode 100755 index 0000000000..f6293fc6e6 --- /dev/null +++ b/ros2/src/airsim_interfaces/srv/SetLocalPosition.srv @@ -0,0 +1,11 @@ +#Request : expects position setpoint via x, y, z +#Request : expects yaw setpoint via yaw (send yaw_valid=true) +float64 x +float64 y +float64 z +float64 yaw +string vehicle_name +--- +#Response : success=true - (if async=false && if setpoint reached before timeout = 30sec) || (if async=true) +bool success +string message \ No newline at end of file diff --git a/ros2/src/airsim_interfaces/srv/Takeoff.srv b/ros2/src/airsim_interfaces/srv/Takeoff.srv new file mode 100755 index 0000000000..55472170ea --- /dev/null +++ b/ros2/src/airsim_interfaces/srv/Takeoff.srv @@ -0,0 +1,3 @@ +bool wait_on_last_task +--- +bool success diff --git a/ros2/src/airsim_interfaces/srv/TakeoffGroup.srv b/ros2/src/airsim_interfaces/srv/TakeoffGroup.srv new file mode 100755 index 0000000000..1c900c14b8 --- /dev/null +++ b/ros2/src/airsim_interfaces/srv/TakeoffGroup.srv @@ -0,0 +1,4 @@ +string[] vehicle_names +bool wait_on_last_task +--- +bool success \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/CMakeLists (copy).txt b/ros2/src/airsim_ros_pkgs/CMakeLists (copy).txt new file mode 100644 index 0000000000..06c2f3d003 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/CMakeLists (copy).txt @@ -0,0 +1,149 @@ +cmake_minimum_required(VERSION 3.5) +project(airsim_ros_pkgs) + +# Add support for C++11 +#if(NOT CMAKE_CXX_STANDARD) +#set(CMAKE_CXX_STANDARD 11) +#endif() + +find_package(rclcpp REQUIRED) +find_package(nav_msgs REQUIRED) +find_package(geographic_msgs REQUIRED) +find_package(std_srvs REQUIRED) +find_package(tf2_ros REQUIRED) +find_package(tf2_sensor_msgs REQUIRED) +find_package(rclpy REQUIRED) +find_package(tf2 REQUIRED) +find_package(image_transport REQUIRED) +find_package(geometry_msgs REQUIRED) +find_package(cv_bridge REQUIRED) +find_package(tf2_geometry_msgs REQUIRED) +find_package(sensor_msgs REQUIRED) +find_package(mavros_msgs REQUIRED) +find_package(rosidl_default_generators REQUIRED) +find_package(ament_cmake REQUIRED) +find_package(std_msgs REQUIRED) +find_package(rosidl_typesupport_cpp REQUIRED) + +rosidl_generate_interfaces(${PROJECT_NAME} "msg/GimbalAngleEulerCmd.msg" + "msg/GimbalAngleQuatCmd.msg" "msg/GPSYaw.msg" "msg/VelCmd.msg" + "msg/VelCmdGroup.msg" "msg/CarControls.msg" "msg/CarState.msg" + "msg/Altimeter.msg" "msg/Environment.msg" "srv/SetGPSPosition.srv" + "srv/Takeoff.srv" "srv/TakeoffGroup.srv" "srv/Land.srv" "srv/LandGroup.srv" + "srv/Reset.srv" "srv/SetLocalPosition.srv" + DEPENDENCIES builtin_interfaces nav_msgs geographic_msgs std_srvs + tf2_sensor_msgs geometry_msgs tf2_geometry_msgs sensor_msgs mavros_msgs std_msgs "rosidl_typesupport_cpp") + + + +set(AIRSIM_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../) + +add_subdirectory("${AIRSIM_ROOT}/cmake/rpclib_wrapper" rpclib_wrapper) +add_subdirectory("${AIRSIM_ROOT}/cmake/AirLib" AirLib) +add_subdirectory("${AIRSIM_ROOT}/cmake/MavLinkCom" MavLinkCom) + +set(CMAKE_CXX_STANDARD 11) +set(CXX_EXP_LIB + "-nostdinc++ -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -nodefaultlibs +-l/usr/lib/x86_64-linux-gnu/libc++.so -l/usr/lib/x86_64-linux-gnu/libc++abi.so +-lm -lc -lgcc_s -lgcc +-lstdc++fs -fmax-errors=10 -Wnoexcept -Wstrict-null-sentinel") +set(RPC_LIB_INCLUDES " ${AIRSIM_ROOT}/external/rpclib/rpclib-2.3.0/include") +set(RPC_LIB rpc) +message(STATUS "found RPC_LIB_INCLUDES=${RPC_LIB_INCLUDES}") + +set(INCLUDE_DIRS include ${rclcpp_INCLUDE_DIRS} ${nav_msgs_INCLUDE_DIRS} + ${geographic_msgs_INCLUDE_DIRS} ${std_srvs_INCLUDE_DIRS} ${tf2_ros_INCLUDE_DIRS} + ${tf2_sensor_msgs_INCLUDE_DIRS} ${rclpy_INCLUDE_DIRS} ${tf2_INCLUDE_DIRS} + ${image_transport_INCLUDE_DIRS} ${geometry_msgs_INCLUDE_DIRS} + ${cv_bridge_INCLUDE_DIRS} ${tf2_geometry_msgs_INCLUDE_DIRS} + ${sensor_msgs_INCLUDE_DIRS} ${mavros_msgs_INCLUDE_DIRS} + ${rosidl_default_generators_INCLUDE_DIRS} ${ament_cmake_INCLUDE_DIRS} + ${std_msgs_INCLUDE_DIRS} + ${AIRSIM_ROOT}/AirLib/deps/eigen3 + ${AIRSIM_ROOT}/AirLib/include + ${RPC_LIB_INCLUDES} + ${AIRSIM_ROOT}/MavLinkCom/include + ${AIRSIM_ROOT}/MavLinkCom/common_utils + ${OpenCV_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS}) +include_directories(${INCLUDE_DIRS}) + +set(LIBRARY_DIRS ${rclcpp_LIBRARY_DIRS} ${nav_msgs_LIBRARY_DIRS} + ${geographic_msgs_LIBRARY_DIRS} ${std_srvs_LIBRARY_DIRS} ${tf2_ros_LIBRARY_DIRS} + ${tf2_sensor_msgs_LIBRARY_DIRS} ${rclpy_LIBRARY_DIRS} ${tf2_LIBRARY_DIRS} + ${image_transport_LIBRARY_DIRS} ${geometry_msgs_LIBRARY_DIRS} + ${cv_bridge_LIBRARY_DIRS} ${tf2_geometry_msgs_LIBRARY_DIRS} + ${sensor_msgs_LIBRARY_DIRS} ${mavros_msgs_LIBRARY_DIRS} + ${rosidl_default_generators_LIBRARY_DIRS} ${ament_cmake_LIBRARY_DIRS} + ${std_msgs_LIBRARY_DIRS}) + +link_directories(${LIBRARY_DIRS}) + +set(LIBS ${rclcpp_LIBRARIES} ${nav_msgs_LIBRARIES} ${geographic_msgs_LIBRARIES} + ${std_srvs_LIBRARIES} ${tf2_ros_LIBRARIES} ${tf2_sensor_msgs_LIBRARIES} + ${rclpy_LIBRARIES} ${tf2_LIBRARIES} ${image_transport_LIBRARIES} + ${geometry_msgs_LIBRARIES} ${cv_bridge_LIBRARIES} ${tf2_geometry_msgs_LIBRARIES} + ${sensor_msgs_LIBRARIES} ${mavros_msgs_LIBRARIES} + ${rosidl_default_generators_LIBRARIES} ${ament_cmake_LIBRARIES} + ${std_msgs_LIBRARIES}) + + + + +find_package(Boost REQUIRED) +find_package(OpenCV REQUIRED) + +add_library(airsim_settings_parser src/airsim_settings_parser.cpp) +target_link_libraries(airsim_settings_parser ${LIBS} AirLib) + +add_library(pd_position_controller_simple src/pd_position_controller_simple.cpp) +target_link_libraries(pd_position_controller_simple ${LIBS} AirLib) + +add_library(airsim_ros src/airsim_ros_wrapper.cpp) +target_link_libraries(airsim_ros ${LIBS} ${OpenCV_LIBS} yaml-cpp AirLib + airsim_settings_parser) + +add_executable(airsim_node src/airsim_node.cpp) +target_link_libraries(airsim_node airsim_ros ${LIBS} AirLib) + +add_executable(pd_position_controller_simple_node + src/pd_position_controller_simple_node.cpp) +target_link_libraries(pd_position_controller_simple_node + pd_position_controller_simple airsim_ros ${LIBS} AirLib) + +install(TARGETS airsim_node pd_position_controller_simple_node + DESTINATION lib/${PROJECT_NAME}) + +install(TARGETS airsim_ros pd_position_controller_simple + ARCHIVE + DESTINATION lib + LIBRARY + DESTINATION lib) + +install(FILES README.md DESTINATION share/${PROJECT_NAME}) + +install(DIRECTORY launch rviz DESTINATION share/${PROJECT_NAME}) + +ament_export_dependencies(rclcpp) +ament_export_dependencies(nav_msgs) +ament_export_dependencies(geographic_msgs) +ament_export_dependencies(std_srvs) +ament_export_dependencies(tf2_ros) +ament_export_dependencies(tf2_sensor_msgs) +ament_export_dependencies(rclpy) +ament_export_dependencies(tf2) +ament_export_dependencies(image_transport) +ament_export_dependencies(geometry_msgs) +ament_export_dependencies(cv_bridge) +ament_export_dependencies(tf2_geometry_msgs) +ament_export_dependencies(sensor_msgs) +ament_export_dependencies(mavros_msgs) +ament_export_dependencies(rosidl_default_generators) +ament_export_dependencies(ament_cmake) +ament_export_dependencies(std_msgs) +ament_export_include_directories(${INCLUDE_DIRS}) +ament_export_libraries(airsim_settings_parser pd_position_controller_simple + airsim_ros)# ${LIBS}) + +ament_package() diff --git a/ros2/src/airsim_ros_pkgs/CMakeLists.txt b/ros2/src/airsim_ros_pkgs/CMakeLists.txt new file mode 100644 index 0000000000..ca87374825 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/CMakeLists.txt @@ -0,0 +1,163 @@ +cmake_minimum_required(VERSION 3.5) +project(airsim_ros_pkgs) + +# Add support for C++11 +#if(NOT CMAKE_CXX_STANDARD) +#set(CMAKE_CXX_STANDARD 11) +#endif() + +find_package(rclcpp REQUIRED) +find_package(nav_msgs REQUIRED) +find_package(geographic_msgs REQUIRED) +find_package(std_srvs REQUIRED) +find_package(tf2_ros REQUIRED) +find_package(tf2_sensor_msgs REQUIRED) +find_package(rclpy REQUIRED) +find_package(tf2 REQUIRED) +find_package(image_transport REQUIRED) +find_package(geometry_msgs REQUIRED) +find_package(cv_bridge REQUIRED) +find_package(tf2_geometry_msgs REQUIRED) +find_package(sensor_msgs REQUIRED) +find_package(mavros_msgs REQUIRED) +find_package(rosidl_default_generators REQUIRED) +find_package(ament_cmake REQUIRED) +find_package(std_msgs REQUIRED) +find_package(rosidl_typesupport_cpp REQUIRED) +find_package(rosidl_default_runtime REQUIRED) +find_package(airsim_interfaces REQUIRED) + +# rosidl_generate_interfaces(${PROJECT_NAME} "msg/GimbalAngleEulerCmd.msg" +# "msg/GimbalAngleQuatCmd.msg" "msg/GPSYaw.msg" "msg/VelCmd.msg" +# "msg/VelCmdGroup.msg" "msg/CarControls.msg" "msg/CarState.msg" +# "msg/Altimeter.msg" "msg/Environment.msg" "srv/SetGPSPosition.srv" +# "srv/Takeoff.srv" "srv/TakeoffGroup.srv" "srv/Land.srv" "srv/LandGroup.srv" +# "srv/Reset.srv" "srv/SetLocalPosition.srv" +# DEPENDENCIES builtin_interfaces nav_msgs geographic_msgs std_srvs +# tf2_sensor_msgs geometry_msgs tf2_geometry_msgs sensor_msgs mavros_msgs std_msgs) + + + +set(AIRSIM_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../) + +add_subdirectory("${AIRSIM_ROOT}/cmake/rpclib_wrapper" rpclib_wrapper) +add_subdirectory("${AIRSIM_ROOT}/cmake/AirLib" AirLib) +add_subdirectory("${AIRSIM_ROOT}/cmake/MavLinkCom" MavLinkCom) + +set(CMAKE_CXX_STANDARD 14) +set(CXX_EXP_LIB + "-nostdinc++ -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -nodefaultlibs +-l/usr/lib/x86_64-linux-gnu/libc++.so -l/usr/lib/x86_64-linux-gnu/libc++abi.so +-lm -lc -lgcc_s -lgcc +-lstdc++fs -fmax-errors=10 -Wnoexcept -Wstrict-null-sentinel") +set(RPC_LIB_INCLUDES " ${AIRSIM_ROOT}/external/rpclib/rpclib-2.3.0/include") +set(RPC_LIB rpc) +message(STATUS "found RPC_LIB_INCLUDES=${RPC_LIB_INCLUDES}") + +set(INCLUDE_DIRS include ${rclcpp_INCLUDE_DIRS} ${nav_msgs_INCLUDE_DIRS} + ${geographic_msgs_INCLUDE_DIRS} ${std_srvs_INCLUDE_DIRS} ${tf2_ros_INCLUDE_DIRS} + ${tf2_sensor_msgs_INCLUDE_DIRS} ${rclpy_INCLUDE_DIRS} ${tf2_INCLUDE_DIRS} + ${image_transport_INCLUDE_DIRS} ${geometry_msgs_INCLUDE_DIRS} + ${cv_bridge_INCLUDE_DIRS} ${tf2_geometry_msgs_INCLUDE_DIRS} + ${sensor_msgs_INCLUDE_DIRS} ${mavros_msgs_INCLUDE_DIRS} + ${rosidl_default_generators_INCLUDE_DIRS} ${ament_cmake_INCLUDE_DIRS} + ${std_msgs_INCLUDE_DIRS} + ${AIRSIM_ROOT}/AirLib/deps/eigen3 + ${AIRSIM_ROOT}/AirLib/include + ${RPC_LIB_INCLUDES} + ${AIRSIM_ROOT}/MavLinkCom/include + ${AIRSIM_ROOT}/MavLinkCom/common_utils + ${OpenCV_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + ${airsim_interfaces_INCLUDE_DIRS}) +include_directories(${INCLUDE_DIRS}) + +set(LIBRARY_DIRS ${rclcpp_LIBRARY_DIRS} ${nav_msgs_LIBRARY_DIRS} + ${geographic_msgs_LIBRARY_DIRS} ${std_srvs_LIBRARY_DIRS} ${tf2_ros_LIBRARY_DIRS} + ${tf2_sensor_msgs_LIBRARY_DIRS} ${rclpy_LIBRARY_DIRS} ${tf2_LIBRARY_DIRS} + ${image_transport_LIBRARY_DIRS} ${geometry_msgs_LIBRARY_DIRS} + ${cv_bridge_LIBRARY_DIRS} ${tf2_geometry_msgs_LIBRARY_DIRS} + ${sensor_msgs_LIBRARY_DIRS} ${mavros_msgs_LIBRARY_DIRS} + ${rosidl_default_generators_LIBRARY_DIRS} ${ament_cmake_LIBRARY_DIRS} + ${std_msgs_LIBRARY_DIRS} + ${airsim_interfaces_LIBRARY_DIRS}) + +link_directories(${LIBRARY_DIRS}) + +set(LIBS ${rclcpp_LIBRARIES} ${nav_msgs_LIBRARIES} ${geographic_msgs_LIBRARIES} + ${std_srvs_LIBRARIES} ${tf2_ros_LIBRARIES} ${tf2_sensor_msgs_LIBRARIES} + ${rclpy_LIBRARIES} ${tf2_LIBRARIES} ${image_transport_LIBRARIES} + ${geometry_msgs_LIBRARIES} ${cv_bridge_LIBRARIES} ${tf2_geometry_msgs_LIBRARIES} + ${sensor_msgs_LIBRARIES} ${mavros_msgs_LIBRARIES} + ${rosidl_default_generators_LIBRARIES} ${ament_cmake_LIBRARIES} + ${std_msgs_LIBRARIES} + ${airsim_interfaces_LIBRARIES}) + +find_package(Boost REQUIRED) +find_package(OpenCV REQUIRED) + +add_library(airsim_settings_parser src/airsim_settings_parser.cpp) +target_link_libraries(airsim_settings_parser ${LIBS} AirLib) + +add_library(pd_position_controller_simple src/pd_position_controller_simple.cpp) +target_link_libraries(pd_position_controller_simple ${LIBS} AirLib) + + +add_library(airsim_ros src/airsim_ros_wrapper.cpp) +target_link_libraries(airsim_ros ${LIBS} ${OpenCV_LIBS} yaml-cpp AirLib + airsim_settings_parser) + +add_executable(airsim_node src/airsim_node.cpp) +target_link_libraries(airsim_node airsim_ros ${LIBS} AirLib) + +add_executable(pd_position_controller_simple_node + src/pd_position_controller_simple_node.cpp) +target_link_libraries(pd_position_controller_simple_node + pd_position_controller_simple airsim_ros ${LIBS} AirLib) + +# rosidl_target_interfaces(airsim_node +# ${PROJECT_NAME} "rosidl_typesupport_cpp") + +# rosidl_target_interfaces(pd_position_controller_simple_node +# ${PROJECT_NAME} "rosidl_typesupport_cpp") + +install(TARGETS airsim_node pd_position_controller_simple_node + DESTINATION lib/${PROJECT_NAME}) + +install(TARGETS airsim_ros pd_position_controller_simple + ARCHIVE + DESTINATION lib + LIBRARY + DESTINATION lib) + +install(FILES README.md DESTINATION share/${PROJECT_NAME}) + +install(DIRECTORY launch rviz DESTINATION share/${PROJECT_NAME}) + + + +ament_export_dependencies(rclcpp) +ament_export_dependencies(nav_msgs) +ament_export_dependencies(geographic_msgs) +ament_export_dependencies(std_srvs) +ament_export_dependencies(tf2_ros) +ament_export_dependencies(tf2_sensor_msgs) +ament_export_dependencies(rclpy) +ament_export_dependencies(tf2) +ament_export_dependencies(image_transport) +ament_export_dependencies(geometry_msgs) +ament_export_dependencies(cv_bridge) +ament_export_dependencies(tf2_geometry_msgs) +ament_export_dependencies(sensor_msgs) +ament_export_dependencies(mavros_msgs) +ament_export_dependencies(rosidl_default_generators) +ament_export_dependencies(ament_cmake) +ament_export_dependencies(std_msgs) +ament_export_dependencies(rosidl_default_runtime) +ament_export_dependencies(airsim_interfaces) + +ament_export_include_directories(${INCLUDE_DIRS}) +ament_export_libraries(airsim_settings_parser pd_position_controller_simple + airsim_ros)# ${LIBS}) + +ament_package() diff --git a/ros2/src/airsim_ros_pkgs/README.md b/ros2/src/airsim_ros_pkgs/README.md new file mode 100755 index 0000000000..3f32237f5a --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/README.md @@ -0,0 +1,3 @@ +# airsim_ros_pkgs + +This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/airsim_ros_pkgs.md). \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h new file mode 100755 index 0000000000..abe8003048 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -0,0 +1,393 @@ +#include "common/common_utils/StrictMode.hpp" +STRICT_MODE_OFF //todo what does this do? +#ifndef RPCLIB_MSGPACK +#define RPCLIB_MSGPACK clmdep_msgpack +#endif // !RPCLIB_MSGPACK +#include "rpc/rpc_error.h" + STRICT_MODE_ON + +#include "airsim_settings_parser.h" +#include "common/AirSimSettings.hpp" +#include "common/common_utils/FileSystem.hpp" +#include "sensors/lidar/LidarSimpleParams.hpp" +#include "rclcpp/rclcpp.hpp" +#include "sensors/imu/ImuBase.hpp" +#include "vehicles/multirotor/api/MultirotorRpcLibClient.hpp" +#include "vehicles/car/api/CarRpcLibClient.hpp" +#include "yaml-cpp/yaml.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include //hector_uav_msgs defunct? +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + // #include "nodelet/nodelet.h" + + // todo move airlib typedefs to separate header file? + typedef msr::airlib::ImageCaptureBase::ImageRequest ImageRequest; +typedef msr::airlib::ImageCaptureBase::ImageResponse ImageResponse; +typedef msr::airlib::ImageCaptureBase::ImageType ImageType; +typedef msr::airlib::AirSimSettings::CaptureSetting CaptureSetting; +typedef msr::airlib::AirSimSettings::VehicleSetting VehicleSetting; +typedef msr::airlib::AirSimSettings::CameraSetting CameraSetting; +typedef msr::airlib::AirSimSettings::LidarSetting LidarSetting; + +struct SimpleMatrix +{ + int rows; + int cols; + double* data; + + SimpleMatrix(int rows, int cols, double* data) + : rows(rows), cols(cols), data(data) + { + } +}; + +struct VelCmd +{ + double x; + double y; + double z; + msr::airlib::DrivetrainType drivetrain; + msr::airlib::YawMode yaw_mode; + std::string vehicle_name; + + // VelCmd() : + // x(0), y(0), z(0), + // vehicle_name("") {drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + // yaw_mode = msr::airlib::YawMode();}; + + // VelCmd(const double& x, const double& y, const double& z, + // msr::airlib::DrivetrainType drivetrain, + // const msr::airlib::YawMode& yaw_mode, + // const std::string& vehicle_name) : + // x(x), y(y), z(z), + // drivetrain(drivetrain), + // yaw_mode(yaw_mode), + // vehicle_name(vehicle_name) {}; +}; + +struct GimbalCmd +{ + std::string vehicle_name; + std::string camera_name; + msr::airlib::Quaternionr target_quat; + + // GimbalCmd() : vehicle_name(vehicle_name), camera_name(camera_name), target_quat(msr::airlib::Quaternionr(1,0,0,0)) {} + + // GimbalCmd(const std::string& vehicle_name, + // const std::string& camera_name, + // const msr::airlib::Quaternionr& target_quat) : + // vehicle_name(vehicle_name), camera_name(camera_name), target_quat(target_quat) {}; +}; + +class AirsimROSWrapper +{ +public: + enum class AIRSIM_MODE : unsigned + { + DRONE, + CAR + }; + + AirsimROSWrapper(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private, const std::string& host_ip); + ~AirsimROSWrapper(){}; + + void initialize_airsim(); + void initialize_ros(); + + // std::vector callback_queues_; + ros::AsyncSpinner img_async_spinner_; + ros::AsyncSpinner lidar_async_spinner_; + bool is_used_lidar_timer_cb_queue_; + bool is_used_img_timer_cb_queue_; + +private: + struct SensorPublisher + { + SensorBase::SensorType sensor_type; + std::string sensor_name; + ros::Publisher publisher; + }; + + // utility struct for a SINGLE robot + class VehicleROS + { + public: + virtual ~VehicleROS() {} + std::string vehicle_name; + + /// All things ROS + ros::Publisher odom_local_pub; + ros::Publisher global_gps_pub; + ros::Publisher env_pub; + airsim_interfaces::Environment env_msg; + std::vector sensor_pubs; + // handle lidar seperately for max performance as data is collected on its own thread/callback + std::vector lidar_pubs; + + nav_msgs::Odometry curr_odom; + sensor_msgs::NavSatFix gps_sensor_msg; + + std::vector static_tf_msg_vec; + + ros::Time stamp; + + std::string odom_frame_id; + /// Status + // bool is_armed_; + // std::string mode_; + }; + + class CarROS : public VehicleROS + { + public: + msr::airlib::CarApiBase::CarState curr_car_state; + + ros::Subscriber car_cmd_sub; + ros::Publisher car_state_pub; + airsim_interfaces::CarState car_state_msg; + + bool has_car_cmd; + msr::airlib::CarApiBase::CarControls car_cmd; + }; + + class MultiRotorROS : public VehicleROS + { + public: + /// State + msr::airlib::MultirotorState curr_drone_state; + // bool in_air_; // todo change to "status" and keep track of this + + ros::Subscriber vel_cmd_body_frame_sub; + ros::Subscriber vel_cmd_world_frame_sub; + + ros::ServiceServer takeoff_srvr; + ros::ServiceServer land_srvr; + + bool has_vel_cmd; + VelCmd vel_cmd; + + /// Status + // bool in_air_; // todo change to "status" and keep track of this + }; + + /// ROS timer callbacks + void img_response_timer_cb(const ros::TimerEvent& event); // update images from airsim_client_ every nth sec + void drone_state_timer_cb(const ros::TimerEvent& event); // update drone state from airsim_client_ every nth sec + void lidar_timer_cb(const ros::TimerEvent& event); + + /// ROS subscriber callbacks + void vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelCmd::ConstPtr& msg, const std::string& vehicle_name); + void vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd::ConstPtr& msg, const std::string& vehicle_name); + + void vel_cmd_group_body_frame_cb(const airsim_interfaces::msg::VelCmdGroup& msg); + void vel_cmd_group_world_frame_cb(const airsim_interfaces::msg::VelCmdGroup& msg); + + void vel_cmd_all_world_frame_cb(const airsim_interfaces::msg::VelCmd& msg); + void vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd& msg); + + // void vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd& msg, const std::string& vehicle_name); + void gimbal_angle_quat_cmd_cb(const airsim_interfaces::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg); + void gimbal_angle_euler_cmd_cb(const airsim_interfaces::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg); + + // commands + void car_cmd_cb(const airsim_interfaces::CarControls::ConstPtr& msg, const std::string& vehicle_name); + void update_commands(); + + // state, returns the simulation timestamp best guess based on drone state timestamp, airsim needs to return timestap for environment + ros::Time update_state(); + void update_and_publish_static_transforms(VehicleROS* vehicle_ros); + void publish_vehicle_state(); + + /// ROS service callbacks + bool takeoff_srv_cb(airsim_interfaces::Takeoff::Request& request, airsim_interfaces::Takeoff::Response& response, const std::string& vehicle_name); + bool takeoff_group_srv_cb(airsim_interfaces::TakeoffGroup::Request& request, airsim_interfaces::TakeoffGroup::Response& response); + bool takeoff_all_srv_cb(airsim_interfaces::Takeoff::Request& request, airsim_interfaces::Takeoff::Response& response); + bool land_srv_cb(airsim_interfaces::Land::Request& request, airsim_interfaces::Land::Response& response, const std::string& vehicle_name); + bool land_group_srv_cb(airsim_interfaces::LandGroup::Request& request, airsim_interfaces::LandGroup::Response& response); + bool land_all_srv_cb(airsim_interfaces::Land::Request& request, airsim_interfaces::Land::Response& response); + bool reset_srv_cb(airsim_interfaces::Reset::Request& request, airsim_interfaces::Reset::Response& response); + + /// ROS tf broadcasters + void publish_camera_tf(const ImageResponse& img_response, const ros::Time& ros_time, const std::string& frame_id, const std::string& child_frame_id); + void publish_odom_tf(const nav_msgs::Odometry& odom_msg); + + /// camera helper methods + sensor_msgs::CameraInfo generate_cam_info(const std::string& camera_name, const CameraSetting& camera_setting, const CaptureSetting& capture_setting) const; + cv::Mat manual_decode_depth(const ImageResponse& img_response) const; + + sensor_msgs::ImagePtr get_img_msg_from_response(const ImageResponse& img_response, const ros::Time curr_ros_time, const std::string frame_id); + sensor_msgs::ImagePtr get_depth_img_msg_from_response(const ImageResponse& img_response, const ros::Time curr_ros_time, const std::string frame_id); + + void process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name); + + // methods which parse setting json ang generate ros pubsubsrv + void create_ros_pubs_from_settings_json(); + void append_static_camera_tf(VehicleROS* vehicle_ros, const std::string& camera_name, const CameraSetting& camera_setting); + void append_static_lidar_tf(VehicleROS* vehicle_ros, const std::string& lidar_name, const msr::airlib::LidarSimpleParams& lidar_setting); + void append_static_vehicle_tf(VehicleROS* vehicle_ros, const VehicleSetting& vehicle_setting); + void set_nans_to_zeros_in_pose(VehicleSetting& vehicle_setting) const; + void set_nans_to_zeros_in_pose(const VehicleSetting& vehicle_setting, CameraSetting& camera_setting) const; + void set_nans_to_zeros_in_pose(const VehicleSetting& vehicle_setting, LidarSetting& lidar_setting) const; + + /// utils. todo parse into an Airlib<->ROS conversion class + tf2::Quaternion get_tf2_quat(const msr::airlib::Quaternionr& airlib_quat) const; + msr::airlib::Quaternionr get_airlib_quat(const geometry_msgs::Quaternion& geometry_msgs_quat) const; + msr::airlib::Quaternionr get_airlib_quat(const tf2::Quaternion& tf2_quat) const; + nav_msgs::Odometry get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const; + nav_msgs::Odometry get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const; + airsim_interfaces::CarState get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const; + msr::airlib::Pose get_airlib_pose(const float& x, const float& y, const float& z, const msr::airlib::Quaternionr& airlib_quat) const; + airsim_interfaces::msg::GPSYaw get_gps_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const; + sensor_msgs::NavSatFix get_gps_sensor_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const; + sensor_msgs::Imu get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const; + airsim_interfaces::Altimeter get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const; + sensor_msgs::Range get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const; + sensor_msgs::PointCloud2 get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const; + sensor_msgs::NavSatFix get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const; + sensor_msgs::MagneticField get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const; + airsim_interfaces::Environment get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const; + + // not used anymore, but can be useful in future with an unreal camera calibration environment + void read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::CameraInfo& cam_info) const; + void convert_yaml_to_simple_mat(const YAML::Node& node, SimpleMatrix& m) const; // todo ugly + + // simulation time utility + ros::Time airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const; + ros::Time chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const; + +private: + // subscriber / services for ALL robots + ros::Subscriber vel_cmd_all_body_frame_sub_; + ros::Subscriber vel_cmd_all_world_frame_sub_; + ros::ServiceServer takeoff_all_srvr_; + ros::ServiceServer land_all_srvr_; + + // todo - subscriber / services for a GROUP of robots, which is defined by a list of `vehicle_name`s passed in the ros msg / srv request + ros::Subscriber vel_cmd_group_body_frame_sub_; + ros::Subscriber vel_cmd_group_world_frame_sub_; + ros::ServiceServer takeoff_group_srvr_; + ros::ServiceServer land_group_srvr_; + + AIRSIM_MODE airsim_mode_ = AIRSIM_MODE::DRONE; + + ros::ServiceServer reset_srvr_; + ros::Publisher origin_geo_point_pub_; // home geo coord of drones + msr::airlib::GeoPoint origin_geo_point_; // gps coord of unreal origin + airsim_interfaces::msg::GPSYaw origin_geo_point_msg_; // todo duplicate + + AirSimSettingsParser airsim_settings_parser_; + std::unordered_map> vehicle_name_ptr_map_; + static const std::unordered_map image_type_int_to_string_map_; + + bool is_vulkan_; // rosparam obtained from launch file. If vulkan is being used, we BGR encoding instead of RGB + + std::string host_ip_; + std::unique_ptr airsim_client_ = nullptr; + // seperate busy connections to airsim, update in their own thread + msr::airlib::RpcLibClientBase airsim_client_images_; + msr::airlib::RpcLibClientBase airsim_client_lidar_; + + ros::NodeHandle nh_; + ros::NodeHandle nh_private_; + + // todo not sure if async spinners shuold be inside this class, or should be instantiated in airsim_node.cpp, and cb queues should be public + // todo for multiple drones with multiple sensors, this won't scale. make it a part of VehicleROS? + ros::CallbackQueue img_timer_cb_queue_; + ros::CallbackQueue lidar_timer_cb_queue_; + + std::mutex drone_control_mutex_; + + // gimbal control + bool has_gimbal_cmd_; + GimbalCmd gimbal_cmd_; + + /// ROS tf + const std::string AIRSIM_FRAME_ID = "world_ned"; + std::string world_frame_id_ = AIRSIM_FRAME_ID; + const std::string AIRSIM_ODOM_FRAME_ID = "odom_local_ned"; + const std::string ENU_ODOM_FRAME_ID = "odom_local_enu"; + std::string odom_frame_id_ = AIRSIM_ODOM_FRAME_ID; + tf2_ros::TransformBroadcaster tf_broadcaster_; + tf2_ros::StaticTransformBroadcaster static_tf_pub_; + + bool isENU_ = false; + tf2_ros::Buffer tf_buffer_; + tf2_ros::TransformListener tf_listener_; + + /// ROS params + double vel_cmd_duration_; + + /// ROS Timers. + ros::Timer airsim_img_response_timer_; + ros::Timer airsim_control_update_timer_; + ros::Timer airsim_lidar_update_timer_; + + typedef std::pair, std::string> airsim_img_request_vehicle_name_pair; + std::vector airsim_img_request_vehicle_name_pair_vec_; + std::vector image_pub_vec_; + std::vector cam_info_pub_vec_; + + std::vector camera_info_msg_vec_; + + /// ROS other publishers + ros::Publisher clock_pub_; + rosgraph_msgs::Clock ros_clock_; + bool publish_clock_ = false; + + ros::Subscriber gimbal_angle_quat_cmd_sub_; + ros::Subscriber gimbal_angle_euler_cmd_sub_; + + static constexpr char CAM_YML_NAME[] = "camera_name"; + static constexpr char WIDTH_YML_NAME[] = "image_width"; + static constexpr char HEIGHT_YML_NAME[] = "image_height"; + static constexpr char K_YML_NAME[] = "camera_matrix"; + static constexpr char D_YML_NAME[] = "distortion_coefficients"; + static constexpr char R_YML_NAME[] = "rectification_matrix"; + static constexpr char P_YML_NAME[] = "projection_matrix"; + static constexpr char DMODEL_YML_NAME[] = "distortion_model"; +}; \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_settings_parser.h b/ros2/src/airsim_ros_pkgs/include/airsim_settings_parser.h new file mode 100755 index 0000000000..e035beaee0 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/include/airsim_settings_parser.h @@ -0,0 +1,35 @@ +#include "common/common_utils/StrictMode.hpp" +STRICT_MODE_OFF +#ifndef RPCLIB_MSGPACK +#define RPCLIB_MSGPACK clmdep_msgpack +#endif // !RPCLIB_MSGPACK +#include "rpc/rpc_error.h" +STRICT_MODE_ON + +#include "vehicles/multirotor/api/MultirotorRpcLibClient.hpp" +#include "common/common_utils/FileSystem.hpp" +#include +#include +#include "common/AirSimSettings.hpp" + +// a minimal airsim settings parser, adapted from Unreal/Plugins/AirSim/SimHUD/SimHUD.h +class AirSimSettingsParser +{ +public: + typedef msr::airlib::AirSimSettings AirSimSettings; + +public: + AirSimSettingsParser(const std::string& host_ip); + ~AirSimSettingsParser(){}; + + bool success(); + +private: + std::string getSimMode(); + bool getSettingsText(std::string& settings_text) const; + bool initializeSettings(); + + bool success_; + std::string settings_text_; + std::string host_ip_; +}; \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/include/geodetic_conv.hpp b/ros2/src/airsim_ros_pkgs/include/geodetic_conv.hpp new file mode 100755 index 0000000000..33e5342fd8 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/include/geodetic_conv.hpp @@ -0,0 +1,227 @@ +// full credits to https://github.com/ethz-asl/geodetic_utils +// todo add as external lib +#ifndef GEODETIC_CONVERTER_H_ +#define GEODETIC_CONVERTER_H_ + +#include "math.h" +#include + +namespace geodetic_converter +{ +// Geodetic system parameters +static double kSemimajorAxis = 6378137; +static double kSemiminorAxis = 6356752.3142; +static double kFirstEccentricitySquared = 6.69437999014 * 0.001; +static double kSecondEccentricitySquared = 6.73949674228 * 0.001; +static double kFlattening = 1 / 298.257223563; + +class GeodeticConverter +{ +public: + GeodeticConverter() + { + haveReference_ = false; + } + + ~GeodeticConverter() + { + } + + // Default copy constructor and assignment operator are OK. + + bool isInitialised() + { + return haveReference_; + } + + void getReference(double* latitude, double* longitude, double* altitude) + { + *latitude = initial_latitude_; + *longitude = initial_longitude_; + *altitude = initial_altitude_; + } + + void initialiseReference(const double latitude, const double longitude, const double altitude) + { + // Save NED origin + initial_latitude_ = deg2Rad(latitude); + initial_longitude_ = deg2Rad(longitude); + initial_altitude_ = altitude; + + // Compute ECEF of NED origin + geodetic2Ecef(latitude, longitude, altitude, &initial_ecef_x_, &initial_ecef_y_, &initial_ecef_z_); + + // Compute ECEF to NED and NED to ECEF matrices + double phiP = atan2(initial_ecef_z_, sqrt(pow(initial_ecef_x_, 2) + pow(initial_ecef_y_, 2))); + + ecef_to_ned_matrix_ = nRe(phiP, initial_longitude_); + ned_to_ecef_matrix_ = nRe(initial_latitude_, initial_longitude_).transpose(); + + haveReference_ = true; + } + + void geodetic2Ecef(const double latitude, const double longitude, const double altitude, double* x, + double* y, double* z) + { + // Convert geodetic coordinates to ECEF. + // http://code.google.com/p/pysatel/source/browse/trunk/coord.py?r=22 + double lat_rad = deg2Rad(latitude); + double lon_rad = deg2Rad(longitude); + double xi = sqrt(1 - kFirstEccentricitySquared * sin(lat_rad) * sin(lat_rad)); + *x = (kSemimajorAxis / xi + altitude) * cos(lat_rad) * cos(lon_rad); + *y = (kSemimajorAxis / xi + altitude) * cos(lat_rad) * sin(lon_rad); + *z = (kSemimajorAxis / xi * (1 - kFirstEccentricitySquared) + altitude) * sin(lat_rad); + } + + void ecef2Geodetic(const double x, const double y, const double z, double* latitude, + double* longitude, double* altitude) + { + // Convert ECEF coordinates to geodetic coordinates. + // J. Zhu, "Conversion of Earth-centered Earth-fixed coordinates + // to geodetic coordinates," IEEE Transactions on Aerospace and + // Electronic Systems, vol. 30, pp. 957-961, 1994. + + double r = sqrt(x * x + y * y); + double Esq = kSemimajorAxis * kSemimajorAxis - kSemiminorAxis * kSemiminorAxis; + double F = 54 * kSemiminorAxis * kSemiminorAxis * z * z; + double G = r * r + (1 - kFirstEccentricitySquared) * z * z - kFirstEccentricitySquared * Esq; + double C = (kFirstEccentricitySquared * kFirstEccentricitySquared * F * r * r) / pow(G, 3); + double S = cbrt(1 + C + sqrt(C * C + 2 * C)); + double P = F / (3 * pow((S + 1 / S + 1), 2) * G * G); + double Q = sqrt(1 + 2 * kFirstEccentricitySquared * kFirstEccentricitySquared * P); + double r_0 = -(P * kFirstEccentricitySquared * r) / (1 + Q) + sqrt( + 0.5 * kSemimajorAxis * kSemimajorAxis * (1 + 1.0 / Q) - P * (1 - kFirstEccentricitySquared) * z * z / (Q * (1 + Q)) - 0.5 * P * r * r); + double U = sqrt(pow((r - kFirstEccentricitySquared * r_0), 2) + z * z); + double V = sqrt( + pow((r - kFirstEccentricitySquared * r_0), 2) + (1 - kFirstEccentricitySquared) * z * z); + double Z_0 = kSemiminorAxis * kSemiminorAxis * z / (kSemimajorAxis * V); + *altitude = U * (1 - kSemiminorAxis * kSemiminorAxis / (kSemimajorAxis * V)); + *latitude = rad2Deg(atan((z + kSecondEccentricitySquared * Z_0) / r)); + *longitude = rad2Deg(atan2(y, x)); + } + + void ecef2Ned(const double x, const double y, const double z, double* north, double* east, + double* down) + { + // Converts ECEF coordinate position into local-tangent-plane NED. + // Coordinates relative to given ECEF coordinate frame. + + Eigen::Vector3d vect, ret; + vect(0) = x - initial_ecef_x_; + vect(1) = y - initial_ecef_y_; + vect(2) = z - initial_ecef_z_; + ret = ecef_to_ned_matrix_ * vect; + *north = ret(0); + *east = ret(1); + *down = -ret(2); + } + + void ned2Ecef(const double north, const double east, const double down, double* x, double* y, + double* z) + { + // NED (north/east/down) to ECEF coordinates + Eigen::Vector3d ned, ret; + ned(0) = north; + ned(1) = east; + ned(2) = -down; + ret = ned_to_ecef_matrix_ * ned; + *x = ret(0) + initial_ecef_x_; + *y = ret(1) + initial_ecef_y_; + *z = ret(2) + initial_ecef_z_; + } + + void geodetic2Ned(const double latitude, const double longitude, const double altitude, + double* north, double* east, double* down) + { + // Geodetic position to local NED frame + double x, y, z; + geodetic2Ecef(latitude, longitude, altitude, &x, &y, &z); + ecef2Ned(x, y, z, north, east, down); + } + + void ned2Geodetic(const double north, const double east, const double down, double* latitude, + double* longitude, double* altitude) + { + // Local NED position to geodetic coordinates + double x, y, z; + ned2Ecef(north, east, down, &x, &y, &z); + ecef2Geodetic(x, y, z, latitude, longitude, altitude); + } + + void geodetic2Enu(const double latitude, const double longitude, const double altitude, + double* east, double* north, double* up) + { + // Geodetic position to local ENU frame + double x, y, z; + geodetic2Ecef(latitude, longitude, altitude, &x, &y, &z); + + double aux_north, aux_east, aux_down; + ecef2Ned(x, y, z, &aux_north, &aux_east, &aux_down); + + *east = aux_east; + *north = aux_north; + *up = -aux_down; + } + + void enu2Geodetic(const double east, const double north, const double up, double* latitude, + double* longitude, double* altitude) + { + // Local ENU position to geodetic coordinates + + const double aux_north = north; + const double aux_east = east; + const double aux_down = -up; + double x, y, z; + ned2Ecef(aux_north, aux_east, aux_down, &x, &y, &z); + ecef2Geodetic(x, y, z, latitude, longitude, altitude); + } + +private: + inline Eigen::Matrix3d nRe(const double lat_radians, const double lon_radians) + { + const double sLat = sin(lat_radians); + const double sLon = sin(lon_radians); + const double cLat = cos(lat_radians); + const double cLon = cos(lon_radians); + + Eigen::Matrix3d ret; + ret(0, 0) = -sLat * cLon; + ret(0, 1) = -sLat * sLon; + ret(0, 2) = cLat; + ret(1, 0) = -sLon; + ret(1, 1) = cLon; + ret(1, 2) = 0.0; + ret(2, 0) = cLat * cLon; + ret(2, 1) = cLat * sLon; + ret(2, 2) = sLat; + + return ret; + } + + inline double rad2Deg(const double radians) + { + return (radians / M_PI) * 180.0; + } + + inline double deg2Rad(const double degrees) + { + return (degrees / 180.0) * M_PI; + } + + double initial_latitude_; + double initial_longitude_; + double initial_altitude_; + + double initial_ecef_x_; + double initial_ecef_y_; + double initial_ecef_z_; + + Eigen::Matrix3d ecef_to_ned_matrix_; + Eigen::Matrix3d ned_to_ecef_matrix_; + + bool haveReference_; + +}; // class GeodeticConverter +}; // namespace geodetic_conv + +#endif // GEODETIC_CONVERTER_H_ diff --git a/ros2/src/airsim_ros_pkgs/include/math_common.h b/ros2/src/airsim_ros_pkgs/include/math_common.h new file mode 100755 index 0000000000..375a035aa7 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/include/math_common.h @@ -0,0 +1,45 @@ +namespace math_common +{ +template +inline T rad2deg(const T radians) +{ + return (radians / M_PI) * 180.0; +} + +template +inline T deg2rad(const T degrees) +{ + return (degrees / 180.0) * M_PI; +} + +template +inline T wrap_to_pi(T radians) +{ + int m = (int)(radians / (2 * M_PI)); + radians = radians - m * 2 * M_PI; + if (radians > M_PI) + radians -= 2.0 * M_PI; + else if (radians < -M_PI) + radians += 2.0 * M_PI; + return radians; +} + +template +inline void wrap_to_pi_inplace(T& a) +{ + a = wrap_to_pi(a); +} + +template +inline T angular_dist(T from, T to) +{ + wrap_to_pi_inplace(from); + wrap_to_pi_inplace(to); + T d = to - from; + if (d > M_PI) + d -= 2. * M_PI; + else if (d < -M_PI) + d += 2. * M_PI; + return d; +} +} \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h new file mode 100755 index 0000000000..82f565d813 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -0,0 +1,139 @@ +#ifndef _PID_POSITION_CONTROLLER_SIMPLE_H_ +#define _PID_POSITION_CONTROLLER_SIMPLE_H_ + +#include "common/common_utils/StrictMode.hpp" +STRICT_MODE_OFF //todo what does this do? +#ifndef RPCLIB_MSGPACK +#define RPCLIB_MSGPACK clmdep_msgpack +#endif // !RPCLIB_MSGPACK +#include "rpc/rpc_error.h" + STRICT_MODE_ON + +#include "common/common_utils/FileSystem.hpp" +#include "vehicles/multirotor/api/MultirotorRpcLibClient.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + // todo nicer api + class PIDParams +{ +public: + double kp_x; + double kp_y; + double kp_z; + double kp_yaw; + double kd_x; + double kd_y; + double kd_z; + double kd_yaw; + + double reached_thresh_xyz; + double reached_yaw_degrees; + + PIDParams() + : kp_x(0.5), kp_y(0.5), kp_z(0.5), kp_yaw(0.5), kd_x(0.1), kd_y(0.1), kd_z(0.1), kd_yaw(0.1), reached_thresh_xyz(0.5), reached_yaw_degrees(5.0) + { + } + + bool load_from_rosparams(const ros::NodeHandle& nh); +}; + +// todo should be a common representation +struct XYZYaw +{ + double x; + double y; + double z; + double yaw; +}; + +// todo should be a common representation +class DynamicConstraints +{ +public: + double max_vel_horz_abs; // meters/sec + double max_vel_vert_abs; + double max_yaw_rate_degree; + + DynamicConstraints() + : max_vel_horz_abs(1.0), max_vel_vert_abs(0.5), max_yaw_rate_degree(10.0) + { + } + + bool load_from_rosparams(const ros::NodeHandle& nh); +}; + +class PIDPositionController +{ +public: + PIDPositionController(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private); + + // ROS service callbacks + bool local_position_goal_srv_cb(airsim_interfaces::srv::SetLocalPosition::Request& request, airsim_interfaces::srv::SetLocalPosition::Response& response); + bool local_position_goal_srv_override_cb(airsim_interfaces::srv::SetLocalPosition::Request& request, airsim_interfaces::srv::SetLocalPosition::Response& response); + bool gps_goal_srv_cb(airsim_interfaces::srv::SetGPSPosition::Request& request, airsim_interfaces::srv::SetGPSPosition::Response& response); + bool gps_goal_srv_override_cb(airsim_interfaces::srv::SetGPSPosition::Request& request, airsim_interfaces::srv::SetGPSPosition::Response& response); + + // ROS subscriber callbacks + void airsim_odom_cb(const nav_msgs::msg::Odometry& odom_msg); + void home_geopoint_cb(const airsim_interfaces::msg::GPSYaw& gps_msg); + + void update_control_cmd_timer_cb(const ros::TimerEvent& event); + + void reset_errors(); + + void initialize_ros(); + void compute_control_cmd(); + void enforce_dynamic_constraints(); + void publish_control_cmd(); + void check_reached_goal(); + +private: + geodetic_converter::GeodeticConverter geodetic_converter_; + bool use_eth_lib_for_geodetic_conv_; + + ros::NodeHandle nh_; + ros::NodeHandle nh_private_; + + DynamicConstraints constraints_; + PIDParams params_; + XYZYaw target_position_; + XYZYaw curr_position_; + XYZYaw prev_error_; + XYZYaw curr_error_; + + bool has_home_geo_; + airsim_interfaces::msg::GPSYaw gps_home_msg_; + + nav_msgs::Odometry curr_odom_; + airsim_interfaces::msg::VelCmd vel_cmd_; + bool reached_goal_; + bool has_goal_; + bool has_odom_; + bool got_goal_once_; + // todo check for odom msg being older than n sec + + ros::Publisher airsim_vel_cmd_world_frame_pub_; + ros::Subscriber airsim_odom_sub_; + ros::Subscriber home_geopoint_sub_; + ros::ServiceServer local_position_goal_srvr_; + ros::ServiceServer local_position_goal_override_srvr_; + ros::ServiceServer gps_goal_srvr_; + ros::ServiceServer gps_goal_override_srvr_; + + ros::Timer update_control_cmd_timer_; +}; + +#endif /* _PID_POSITION_CONTROLLER_SIMPLE_ */ \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/include/utils.h b/ros2/src/airsim_ros_pkgs/include/utils.h new file mode 100755 index 0000000000..9c62731921 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/include/utils.h @@ -0,0 +1,14 @@ +#include +namespace utils +{ +double get_yaw_from_quat_msg(const geometry_msgs::msg::Quaternion& quat_msg) +{ + tf2::Quaternion quat_tf; + double roll, pitch, yaw; + tf2::fromMsg(quat_msg, quat_tf); + tf2::Matrix3x3(quat_tf).getRPY(roll, pitch, yaw); + return yaw; +} + +// OdometryEuler get_eigen_odom_from_rosmsg(const nav::msgs &odom_msg); +} \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_all.launch b/ros2/src/airsim_ros_pkgs/launch/airsim_all.launch new file mode 100755 index 0000000000..2345de5b74 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/airsim_all.launch @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control.launch b/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control.launch new file mode 100755 index 0000000000..1b5a58a348 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control.launch @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control_auto.launch b/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control_auto.launch new file mode 100755 index 0000000000..385159fcaf --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control_auto.launch @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch b/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch new file mode 100755 index 0000000000..9a6b3493e3 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch b/ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch new file mode 100755 index 0000000000..5146c0c6f7 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch b/ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch new file mode 100755 index 0000000000..6dff530228 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch b/ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch new file mode 100755 index 0000000000..41db9894f9 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/rviz.launch b/ros2/src/airsim_ros_pkgs/launch/rviz.launch new file mode 100755 index 0000000000..6a39c5e639 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/rviz.launch @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch b/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch new file mode 100755 index 0000000000..1f09bbadf3 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/package.xml b/ros2/src/airsim_ros_pkgs/package.xml new file mode 100644 index 0000000000..74d1f44f20 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/package.xml @@ -0,0 +1,53 @@ + + + airsim_ros_pkgs + 0.0.1 + ROS Wrapper over AirSim's C++ client library + + Ratnesh Madaan + + MIT + + ament_cmake + + rosidl_interface_packages + + geometry_msgs + image_transport + message_runtime + mavros_msgs + nav_msgs + rclcpp + rclpy + sensor_msgs + std_msgs + geographic_msgs + geometry_msgs + tf2_sensor_msgs + + airsim_interfaces + + builtin_interfaces + builtin_interfaces + rosidl_default_generators + + geometry_msgs + image_transport + message_generation + message_runtime + nav_msgs + rclcpp + rclpy + sensor_msgs + std_msgs + joy + + rosidl_default_generators + rosidl_default_runtime + + + ament_cmake + + + ament_cmake + diff --git a/ros2/src/airsim_ros_pkgs/rviz/default.rviz b/ros2/src/airsim_ros_pkgs/rviz/default.rviz new file mode 100755 index 0000000000..fc81576ade --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/rviz/default.rviz @@ -0,0 +1,293 @@ +Panels: + - Class: rviz/Displays + Help Height: 78 + Name: Displays + Property Tree Widget: + Expanded: + - /TF1 + - /TF1/Frames1 + - /Odometry1/Shape1 + - /PointCloud21 + Splitter Ratio: 0.5051546096801758 + Tree Height: 847 + - Class: rviz/Selection + Name: Selection + - Class: rviz/Tool Properties + Expanded: + - /2D Pose Estimate1 + - /2D Nav Goal1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.5886790156364441 + - Class: rviz/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 + - Class: rviz/Time + Experimental: false + Name: Time + SyncMode: 0 + SyncSource: PointCloud2 +Preferences: + PromptSaveOnExit: true +Toolbars: + toolButtonStyle: 2 +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.029999999329447746 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Class: rviz/TF + Enabled: true + Frame Timeout: 15 + Frames: + All Enabled: false + drone_1: + Value: true + drone_1/LidarCustom: + Value: true + drone_1/odom_local_enu: + Value: true + front_center_custom_body: + Value: false + front_center_custom_body/static: + Value: true + front_center_custom_optical: + Value: true + front_center_custom_optical/static: + Value: true + front_left_custom_body: + Value: false + front_left_custom_body/static: + Value: true + front_left_custom_optical: + Value: true + front_left_custom_optical/static: + Value: true + front_right_custom_body: + Value: false + front_right_custom_body/static: + Value: true + front_right_custom_optical: + Value: true + front_right_custom_optical/static: + Value: true + world_enu: + Value: false + world_ned: + Value: true + Marker Scale: 1 + Name: TF + Show Arrows: true + Show Axes: true + Show Names: true + Tree: + world_ned: + world_enu: + drone_1: + drone_1/odom_local_enu: + drone_1/LidarCustom: + {} + front_center_custom_body/static: + {} + front_center_custom_optical/static: + {} + front_left_custom_body/static: + {} + front_left_custom_optical/static: + {} + front_right_custom_body/static: + {} + front_right_custom_optical/static: + {} + front_center_custom_body: + {} + front_center_custom_optical: + {} + front_left_custom_body: + {} + front_left_custom_optical: + {} + front_right_custom_body: + {} + front_right_custom_optical: + {} + Update Interval: 0 + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz/PointCloud2 + Color: 255; 255; 255 + Color Transformer: RGB8 + Decay Time: 0 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Max Intensity: 4096 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: front_left_depth_planar_registered_point_cloud + Position Transformer: XYZ + Queue Size: 10 + Selectable: true + Size (Pixels): 3 + Size (m): 0.10000000149011612 + Style: Flat Squares + Topic: /airsim_node/front_left_custom/DepthPlanar/registered/points + Unreliable: false + Use Fixed Frame: true + Use rainbow: true + Value: true + - Angle Tolerance: 0.10000000149011612 + Class: rviz/Odometry + Covariance: + Orientation: + Alpha: 0.5 + Color: 255; 255; 127 + Color Style: Unique + Frame: Local + Offset: 1 + Scale: 1 + Value: true + Position: + Alpha: 0.30000001192092896 + Color: 204; 51; 204 + Scale: 1 + Value: true + Value: true + Enabled: true + Keep: 25 + Name: Odometry + Position Tolerance: 0.10000000149011612 + Shape: + Alpha: 1 + Axes Length: 1 + Axes Radius: 0.10000000149011612 + Color: 255; 25; 0 + Head Length: 0.20000000298023224 + Head Radius: 0.05000000074505806 + Shaft Length: 0.20000000298023224 + Shaft Radius: 0.019999999552965164 + Value: Arrow + Topic: /airsim_node/MyQuad/odom_local_ned + Unreliable: false + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz/PointCloud2 + Color: 255; 255; 255 + Color Transformer: Intensity + Decay Time: 0 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Max Intensity: 4096 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: PointCloud2 + Position Transformer: XYZ + Queue Size: 10 + Selectable: true + Size (Pixels): 3 + Size (m): 0.009999999776482582 + Style: Flat Squares + Topic: /airsim_node/drone_1/lidar/LidarCustom + Unreliable: false + Use Fixed Frame: true + Use rainbow: true + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Default Light: true + Fixed Frame: world_enu + Frame Rate: 30 + Name: root + Tools: + - Class: rviz/Interact + Hide Inactive Objects: true + - Class: rviz/MoveCamera + - Class: rviz/Select + - Class: rviz/FocusCamera + - Class: rviz/Measure + - Class: rviz/SetInitialPose + Theta std deviation: 0.2617993950843811 + Topic: /initialpose + X std deviation: 0.5 + Y std deviation: 0.5 + - Class: rviz/SetGoal + Topic: /move_base_simple/goal + - Class: rviz/PublishPoint + Single click: true + Topic: /clicked_point + Value: true + Views: + Current: + Class: rviz/Orbit + Distance: 34.531036376953125 + Enable Stereo Rendering: + Stereo Eye Separation: 0.05999999865889549 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: 0.08613172918558121 + Y: 0.2811238765716553 + Z: -0.7929707169532776 + Focal Shape Fixed Size: false + Focal Shape Size: 0.05000000074505806 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.009999999776482582 + Pitch: 0.34479764103889465 + Target Frame: world_view + Value: Orbit (rviz) + Yaw: 3.170380115509033 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1138 + Hide Left Dock: false + Hide Right Dock: false + QMainWindow State: 000000ff00000000fd000000040000000000000255000003d8fc020000000cfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afc0000003b000003d8000000c700fffffffa000000010100000002fb0000002000630061006d005f00660072006f006e0074005f00630065006e0074006500720000000000ffffffff0000000000000000fb000000100044006900730070006c0061007900730100000000000001a60000015600fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d006500720061010000038f000000160000000000000000fb0000003600630061006d005f00660072006f006e0074005f006c006500660074005f00640065007000740068005f0070006c0061006e006100720200000af40000014e0000031c00000231fb0000001c00630061006d005f00660072006f006e0074005f006c0065006600740200000ac00000010f000002d700000196fb0000001e00630061006d005f00660072006f006e0074005f007200690067006800740200000b400000017000000286000001a7000000010000010f000003d8fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003b000003d8000000a000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000077e0000003efc0100000002fb0000000800540069006d006501000000000000077e0000024400fffffffb0000000800540069006d006501000000000000045000000000000000000000040e000003d800000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Time: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: false + Width: 1918 + X: 1050 + Y: 278 diff --git a/ros2/src/airsim_ros_pkgs/scripts/car_joy b/ros2/src/airsim_ros_pkgs/scripts/car_joy new file mode 100755 index 0000000000..e7b3f42c79 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/scripts/car_joy @@ -0,0 +1,150 @@ +#!/usr/bin/env python + +#capture joystick events using ROS and convert to AirSim Car API commands +#to enable: +# rosrun joy joy_node + +import rospy +import threading +import sensor_msgs +import sensor_msgs.msg +import airsim_ros_pkgs as air +import airsim_ros_pkgs.msg + +class CarCommandTranslator(object): + def __init__(self): + self.lock = threading.Lock() + + self.last_forward_btn = 0 + self.last_reverse_btn = 0 + self.last_nuetral_btn = 0 + self.last_park_btn = 0 + self.last_shift_down_btn = 0 + self.last_shift_up_btn = 0 + self.parked = True + self.last_gear = 0 + self.shift_mode_manual = True + + update_rate_hz = rospy.get_param('~update_rate_hz', 20.0) + self.max_curvature = rospy.get_param('~max_curvature', 0.75) + self.steer_sign = rospy.get_param('~steer_sign', -1) + self.throttle_brake_sign = rospy.get_param('~throttle_brake_sign', 1) + self.auto_gear_max = rospy.get_param('~auto_gear_max', 5) + self.manual_transmission = rospy.get_param('~manual_transmission', True) + self.forward_btn_index = rospy.get_param('~forward_button_index', 0) + self.reverse_btn_index = rospy.get_param('~reverse_button_index', 1) + self.nuetral_btn_index = rospy.get_param('~nuetral_button_index', 2) + self.park_btn_index = rospy.get_param('~park_button_index', 3) + self.shift_down_btn_index = rospy.get_param('~shift_down_index', 4) + self.shift_up_btn_index = rospy.get_param('~shift_up_index', 5) + car_control_topic = rospy.get_param('~car_control_topic', '/airsim_node/drone_1/car_cmd') + + self.joy_msg = None + + self.joy_sub = rospy.Subscriber( + 'joy', + sensor_msgs.msg.Joy, + self.handle_joy) + + self.command_pub = rospy.Publisher( + car_control_topic, + air.msg.CarControls, + queue_size=0 + ) + + self.update_time = rospy.Timer( + rospy.Duration(1.0/update_rate_hz), + self.handle_update_timer + ) + + def handle_joy(self, msg): + with self.lock: + self.joy_msg = msg + + def handle_update_timer(self, ignored): + joy = None + with self.lock: + joy = self.joy_msg + + if joy is None: + return + + controls = airsim_ros_pkgs.msg.CarControls() + + controls.steering = self.steer_sign * self.max_curvature * joy.axes[2] + u = joy.axes[1] * self.throttle_brake_sign + if u > 0.0: + controls.throttle = abs(u) + controls.brake = 0.0 + else: + controls.throttle = 0.0 + controls.brake = abs(u) + + forward_btn = joy.buttons[self.forward_btn_index] + reverse_btn = joy.buttons[self.reverse_btn_index] + nuetral_btn = joy.buttons[self.nuetral_btn_index] + park_btn = joy.buttons[self.park_btn_index] + shift_up_btn = joy.buttons[self.shift_up_btn_index] + shift_down_btn = joy.buttons[self.shift_down_btn_index] + + + # gearing: -1 reverse, 0 N, >= 1 drive + controls.manual = True #set to False for automatic transmission along with manual_gear > 1 + if not self.last_nuetral_btn and nuetral_btn: + self.last_gear = 0 + self.parked = False + controls.manual = True + elif not self.last_forward_btn and forward_btn: + if self.manual_transmission: + self.last_gear = 1 + self.shift_mode_manual = True + else: + self.shift_mode_manual = False + self.last_gear = self.auto_gear_max + + self.parked = False + elif not self.last_reverse_btn and reverse_btn: + self.last_gear = -1 + self.parked = False + self.shift_mode_manual = True + elif not self.last_park_btn and park_btn: + self.parked = True + elif not self.last_shift_down_btn and shift_down_btn and self.last_gear > 1 and self.manual_transmission: + self.last_gear-=1 + self.parked = False + self.shift_mode_manual = True + elif not self.last_shift_up_btn and shift_up_btn and self.last_gear >= 1 and self.manual_transmission: + self.last_gear+=1 + self.parked = False + self.shift_mode_manual = True + + if self.parked: + self.last_gear = 0 + self.shift_mode_manual = True + controls.handbrake = True + else: + controls.handbrake = False + + controls.manual_gear = self.last_gear + controls.manual = self.shift_mode_manual + + now = rospy.Time.now() + controls.header.stamp = now + controls.gear_immediate = True + + self.last_nuetral_btn = nuetral_btn + self.last_forward_btn = forward_btn + self.last_reverse_btn = reverse_btn + self.last_park_btn = park_btn + self.last_shift_down_btn = shift_down_btn + self.last_shift_up_btn = shift_up_btn + + self.command_pub.publish(controls) + + def run(self): + rospy.spin() + +if __name__ == '__main__': + rospy.init_node('car_joy') + node = CarCommandTranslator() + node.run() \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp new file mode 100755 index 0000000000..308086d950 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -0,0 +1,26 @@ +#include "rclcpp/rclcpp.hpp" +#include "airsim_ros_wrapper.h" +#include + +int main(int argc, char** argv) +{ + ros::init(argc, argv, "airsim_node"); + ros::NodeHandle nh; + ros::NodeHandle nh_private("~"); + + std::string host_ip = "localhost"; + nh_private.getParam("host_ip", host_ip); + AirsimROSWrapper airsim_ros_wrapper(nh, nh_private, host_ip); + + if (airsim_ros_wrapper.is_used_img_timer_cb_queue_) { + airsim_ros_wrapper.img_async_spinner_.start(); + } + + if (airsim_ros_wrapper.is_used_lidar_timer_cb_queue_) { + airsim_ros_wrapper.lidar_async_spinner_.start(); + } + + ros::spin(); + + return 0; +} \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp new file mode 100755 index 0000000000..679ee4a657 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -0,0 +1,1476 @@ +#include +#include +// #include +// PLUGINLIB_EXPORT_CLASS(AirsimROSWrapper, nodelet::Nodelet) +#include "common/AirSimSettings.hpp" +#include + +constexpr char AirsimROSWrapper::CAM_YML_NAME[]; +constexpr char AirsimROSWrapper::WIDTH_YML_NAME[]; +constexpr char AirsimROSWrapper::HEIGHT_YML_NAME[]; +constexpr char AirsimROSWrapper::K_YML_NAME[]; +constexpr char AirsimROSWrapper::D_YML_NAME[]; +constexpr char AirsimROSWrapper::R_YML_NAME[]; +constexpr char AirsimROSWrapper::P_YML_NAME[]; +constexpr char AirsimROSWrapper::DMODEL_YML_NAME[]; + +const std::unordered_map AirsimROSWrapper::image_type_int_to_string_map_ = { + { 0, "Scene" }, + { 1, "DepthPlanar" }, + { 2, "DepthPerspective" }, + { 3, "DepthVis" }, + { 4, "DisparityNormalized" }, + { 5, "Segmentation" }, + { 6, "SurfaceNormals" }, + { 7, "Infrared" } +}; + +AirsimROSWrapper::AirsimROSWrapper(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private, const std::string& host_ip) + : nh_(nh), nh_private_(nh_private), img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ + lidar_async_spinner_(1, &lidar_timer_cb_queue_) + , // same as above, but for lidar + host_ip_(host_ip) + , airsim_client_images_(host_ip) + , airsim_client_lidar_(host_ip) + , airsim_settings_parser_(host_ip) + , tf_listener_(tf_buffer_) +{ + ros_clock_.clock.fromSec(0); + is_used_lidar_timer_cb_queue_ = false; + is_used_img_timer_cb_queue_ = false; + + if (AirSimSettings::singleton().simmode_name != AirSimSettings::kSimModeTypeCar) { + airsim_mode_ = AIRSIM_MODE::DRONE; + RCLCPP_INFO("Setting ROS wrapper to DRONE mode"); + } + else { + airsim_mode_ = AIRSIM_MODE::CAR; + RCLCPP_INFO("Setting ROS wrapper to CAR mode"); + } + + initialize_ros(); + + std::cout << "AirsimROSWrapper Initialized!\n"; +} + +void AirsimROSWrapper::initialize_airsim() +{ + // todo do not reset if already in air? + try { + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + airsim_client_ = std::unique_ptr(new msr::airlib::MultirotorRpcLibClient(host_ip_)); + } + else { + airsim_client_ = std::unique_ptr(new msr::airlib::CarRpcLibClient(host_ip_)); + } + airsim_client_->confirmConnection(); + airsim_client_images_.confirmConnection(); + airsim_client_lidar_.confirmConnection(); + + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + airsim_client_->enableApiControl(true, vehicle_name_ptr_pair.first); // todo expose as rosservice? + airsim_client_->armDisarm(true, vehicle_name_ptr_pair.first); // todo exposes as rosservice? + } + + origin_geo_point_ = airsim_client_->getHomeGeoPoint(""); + // todo there's only one global origin geopoint for environment. but airsim API accept a parameter vehicle_name? inside carsimpawnapi.cpp, there's a geopoint being assigned in the constructor. by? + origin_geo_point_msg_ = get_gps_msg_from_airsim_geo_point(origin_geo_point_); + } + catch (rpc::rpc_error& e) { + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API, something went wrong." << std::endl + << msg << std::endl; + } +} + +void AirsimROSWrapper::initialize_ros() +{ + + // ros params + double update_airsim_control_every_n_sec; + nh_private_.getParam("is_vulkan", is_vulkan_); + nh_private_.getParam("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); + nh_private_.getParam("publish_clock", publish_clock_); + nh_private_.param("world_frame_id", world_frame_id_, world_frame_id_); + odom_frame_id_ = world_frame_id_ == AIRSIM_FRAME_ID ? AIRSIM_ODOM_FRAME_ID : ENU_ODOM_FRAME_ID; + nh_private_.param("odom_frame_id", odom_frame_id_, odom_frame_id_); + isENU_ = !(odom_frame_id_ == AIRSIM_ODOM_FRAME_ID); + nh_private_.param("coordinate_system_enu", isENU_, isENU_); + vel_cmd_duration_ = 0.05; // todo rosparam + // todo enforce dynamics constraints in this node as well? + // nh_.getParam("max_vert_vel_", max_vert_vel_); + // nh_.getParam("max_horz_vel", max_horz_vel_) + + create_ros_pubs_from_settings_json(); + airsim_control_update_timer_ = nh_private_.createTimer(ros::Duration(update_airsim_control_every_n_sec), &AirsimROSWrapper::drone_state_timer_cb, this); +} + +// XmlRpc::XmlRpcValue can't be const in this case +void AirsimROSWrapper::create_ros_pubs_from_settings_json() +{ + // subscribe to control commands on global nodehandle + gimbal_angle_quat_cmd_sub_ = nh_private_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); + gimbal_angle_euler_cmd_sub_ = nh_private_.subscribe("gimbal_angle_euler_cmd", 50, &AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this); + origin_geo_point_pub_ = nh_private_.advertise("origin_geo_point", 10); + + airsim_img_request_vehicle_name_pair_vec_.clear(); + image_pub_vec_.clear(); + cam_info_pub_vec_.clear(); + camera_info_msg_vec_.clear(); + vehicle_name_ptr_map_.clear(); + size_t lidar_cnt = 0; + + image_transport::ImageTransport image_transporter(nh_private_); + + // iterate over std::map> vehicles; + for (const auto& curr_vehicle_elem : AirSimSettings::singleton().vehicles) { + auto& vehicle_setting = curr_vehicle_elem.second; + auto curr_vehicle_name = curr_vehicle_elem.first; + + nh_.setParam("/vehicle_name", curr_vehicle_name); + + set_nans_to_zeros_in_pose(*vehicle_setting); + + std::unique_ptr vehicle_ros = nullptr; + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + vehicle_ros = std::unique_ptr(new MultiRotorROS()); + } + else { + vehicle_ros = std::unique_ptr(new CarROS()); + } + + vehicle_ros->odom_frame_id = curr_vehicle_name + "/" + odom_frame_id_; + vehicle_ros->vehicle_name = curr_vehicle_name; + + append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); + + vehicle_ros->odom_local_pub = nh_private_.advertise(curr_vehicle_name + "/" + odom_frame_id_, 10); + + vehicle_ros->env_pub = nh_private_.advertise(curr_vehicle_name + "/environment", 10); + + vehicle_ros->global_gps_pub = nh_private_.advertise(curr_vehicle_name + "/global_gps", 10); + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + auto drone = static_cast(vehicle_ros.get()); + + // bind to a single callback. todo optimal subs queue length + // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument + drone->vel_cmd_body_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_body_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name)); // todo ros::TransportHints().tcpNoDelay(); + drone->vel_cmd_world_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_world_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name)); + + drone->takeoff_srvr = nh_private_.advertiseService(curr_vehicle_name + "/takeoff", + boost::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); + drone->land_srvr = nh_private_.advertiseService(curr_vehicle_name + "/land", + boost::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); + // vehicle_ros.reset_srvr = nh_private_.advertiseService(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); + } + else { + auto car = static_cast(vehicle_ros.get()); + car->car_cmd_sub = nh_private_.subscribe(curr_vehicle_name + "/car_cmd", 1, boost::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name)); + car->car_state_pub = nh_private_.advertise(curr_vehicle_name + "/car_state", 10); + } + + // iterate over camera map std::map .cameras; + for (auto& curr_camera_elem : vehicle_setting->cameras) { + auto& camera_setting = curr_camera_elem.second; + auto& curr_camera_name = curr_camera_elem.first; + + set_nans_to_zeros_in_pose(*vehicle_setting, camera_setting); + append_static_camera_tf(vehicle_ros.get(), curr_camera_name, camera_setting); + // camera_setting.gimbal + std::vector current_image_request_vec; + current_image_request_vec.clear(); + + // iterate over capture_setting std::map capture_settings + for (const auto& curr_capture_elem : camera_setting.capture_settings) { + auto& capture_setting = curr_capture_elem.second; + + // todo why does AirSimSettings::loadCaptureSettings calls AirSimSettings::initializeCaptureSettings() + // which initializes default capture settings for _all_ NINE msr::airlib::ImageCaptureBase::ImageType + if (!(std::isnan(capture_setting.fov_degrees))) { + ImageType curr_image_type = msr::airlib::Utils::toEnum(capture_setting.image_type); + // if scene / segmentation / surface normals / infrared, get uncompressed image with pixels_as_floats = false + if (capture_setting.image_type == 0 || capture_setting.image_type == 5 || capture_setting.image_type == 6 || capture_setting.image_type == 7) { + current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, false, false)); + } + // if {DepthPlanar, DepthPerspective,DepthVis, DisparityNormalized}, get float image + else { + current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, true)); + } + + image_pub_vec_.push_back(image_transporter.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type), 1)); + cam_info_pub_vec_.push_back(nh_private_.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); + camera_info_msg_vec_.push_back(generate_cam_info(curr_camera_name, camera_setting, capture_setting)); + } + } + // push back pair (vector of image captures, current vehicle name) + airsim_img_request_vehicle_name_pair_vec_.push_back(std::make_pair(current_image_request_vec, curr_vehicle_name)); + } + + // iterate over sensors + std::vector sensors; + for (auto& curr_sensor_map : vehicle_setting->sensors) { + auto& sensor_name = curr_sensor_map.first; + auto& sensor_setting = curr_sensor_map.second; + + if (sensor_setting->enabled) { + SensorPublisher sensor_publisher; + sensor_publisher.sensor_name = sensor_setting->sensor_name; + sensor_publisher.sensor_type = sensor_setting->sensor_type; + switch (sensor_setting->sensor_type) { + case SensorBase::SensorType::Barometer: { + std::cout << "Barometer" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/altimeter/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Imu: { + std::cout << "Imu" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/imu/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Gps: { + std::cout << "Gps" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/gps/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Magnetometer: { + std::cout << "Magnetometer" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/magnetometer/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Distance: { + std::cout << "Distance" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/distance/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Lidar: { + std::cout << "Lidar" << std::endl; + auto lidar_setting = *static_cast(sensor_setting.get()); + msr::airlib::LidarSimpleParams params; + params.initializeFromSettings(lidar_setting); + append_static_lidar_tf(vehicle_ros.get(), sensor_name, params); + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/lidar/" + sensor_name, 10); + break; + } + default: { + throw std::invalid_argument("Unexpected sensor type"); + } + } + sensors.emplace_back(sensor_publisher); + } + } + + // we want fast access to the lidar sensors for callback handling, sort them out now + auto isLidar = std::function([](const SensorPublisher& pub) { + return pub.sensor_type == SensorBase::SensorType::Lidar; + }); + size_t cnt = std::count_if(sensors.begin(), sensors.end(), isLidar); + lidar_cnt += cnt; + vehicle_ros->lidar_pubs.resize(cnt); + vehicle_ros->sensor_pubs.resize(sensors.size() - cnt); + std::partition_copy(sensors.begin(), sensors.end(), vehicle_ros->lidar_pubs.begin(), vehicle_ros->sensor_pubs.begin(), isLidar); + + vehicle_name_ptr_map_.emplace(curr_vehicle_name, std::move(vehicle_ros)); // allows fast lookup in command callbacks in case of a lot of drones + } + + // add takeoff and land all services if more than 2 drones + if (vehicle_name_ptr_map_.size() > 1 && airsim_mode_ == AIRSIM_MODE::DRONE) { + takeoff_all_srvr_ = nh_private_.advertiseService("all_robots/takeoff", &AirsimROSWrapper::takeoff_all_srv_cb, this); + land_all_srvr_ = nh_private_.advertiseService("all_robots/land", &AirsimROSWrapper::land_all_srv_cb, this); + + // gimbal_angle_quat_cmd_sub_ = nh_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); + + vel_cmd_all_body_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_all_body_frame_cb, this); + vel_cmd_all_world_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_all_world_frame_cb, this); + + vel_cmd_group_body_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_group_body_frame_cb, this); + vel_cmd_group_world_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_group_world_frame_cb, this); + + takeoff_group_srvr_ = nh_private_.advertiseService("group_of_robots/takeoff", &AirsimROSWrapper::takeoff_group_srv_cb, this); + land_group_srvr_ = nh_private_.advertiseService("group_of_robots/land", &AirsimROSWrapper::land_group_srv_cb, this); + } + + // todo add per vehicle reset in AirLib API + reset_srvr_ = nh_private_.advertiseService("reset", &AirsimROSWrapper::reset_srv_cb, this); + + if (publish_clock_) { + clock_pub_ = nh_private_.advertise("clock", 1); + } + + // if >0 cameras, add one more thread for img_request_timer_cb + if (!airsim_img_request_vehicle_name_pair_vec_.empty()) { + double update_airsim_img_response_every_n_sec; + nh_private_.getParam("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); + + ros::TimerOptions timer_options(ros::Duration(update_airsim_img_response_every_n_sec), boost::bind(&AirsimROSWrapper::img_response_timer_cb, this, _1), &img_timer_cb_queue_); + airsim_img_response_timer_ = nh_private_.createTimer(timer_options); + is_used_img_timer_cb_queue_ = true; + } + + // lidars update on their own callback/thread at a given rate + if (lidar_cnt > 0) { + double update_lidar_every_n_sec; + nh_private_.getParam("update_lidar_every_n_sec", update_lidar_every_n_sec); + // nh_private_.setCallbackQueue(&lidar_timer_cb_queue_); + ros::TimerOptions timer_options(ros::Duration(update_lidar_every_n_sec), boost::bind(&AirsimROSWrapper::lidar_timer_cb, this, _1), &lidar_timer_cb_queue_); + airsim_lidar_update_timer_ = nh_private_.createTimer(timer_options); + is_used_lidar_timer_cb_queue_ = true; + } + + initialize_airsim(); +} + +// todo: error check. if state is not landed, return error. +bool AirsimROSWrapper::takeoff_srv_cb(airsim_interfaces::Takeoff::Request& request, airsim_interfaces::Takeoff::Response& response, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? + // response.success = + else + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); + // response.success = + + return true; +} + +bool AirsimROSWrapper::takeoff_group_srv_cb(airsim_interfaces::TakeoffGroup::Request& request, airsim_interfaces::TakeoffGroup::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? + // response.success = + else + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); + // response.success = + + return true; +} + +bool AirsimROSWrapper::takeoff_all_srv_cb(airsim_interfaces::Takeoff::Request& request, airsim_interfaces::Takeoff::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first)->waitOnLastTask(); // todo value for timeout_sec? + // response.success = + else + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first); + // response.success = + + return true; +} + +bool AirsimROSWrapper::land_srv_cb(airsim_interfaces::Land::Request& request, airsim_interfaces::Land::Response& response, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); + else + static_cast(airsim_client_.get())->landAsync(60, vehicle_name); + + return true; //todo +} + +bool AirsimROSWrapper::land_group_srv_cb(airsim_interfaces::LandGroup::Request& request, airsim_interfaces::LandGroup::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); + else + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name); + + return true; //todo +} + +bool AirsimROSWrapper::land_all_srv_cb(airsim_interfaces::Land::Request& request, airsim_interfaces::Land::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name_ptr_pair.first)->waitOnLastTask(); + else + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name_ptr_pair.first); + + return true; //todo +} + +// todo add reset by vehicle_name API to airlib +// todo not async remove waitonlasttask +bool AirsimROSWrapper::reset_srv_cb(airsim_interfaces::Reset::Request& request, airsim_interfaces::Reset::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + airsim_client_.reset(); + return true; //todo +} + +tf2::Quaternion AirsimROSWrapper::get_tf2_quat(const msr::airlib::Quaternionr& airlib_quat) const +{ + return tf2::Quaternion(airlib_quat.x(), airlib_quat.y(), airlib_quat.z(), airlib_quat.w()); +} + +msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const geometry_msgs::Quaternion& geometry_msgs_quat) const +{ + return msr::airlib::Quaternionr(geometry_msgs_quat.w, geometry_msgs_quat.x, geometry_msgs_quat.y, geometry_msgs_quat.z); +} + +msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const tf2::Quaternion& tf2_quat) const +{ + return msr::airlib::Quaternionr(tf2_quat.w(), tf2_quat.x(), tf2_quat.y(), tf2_quat.z()); +} + +void AirsimROSWrapper::car_cmd_cb(const airsim_interfaces::CarControls::ConstPtr& msg, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + auto car = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + car->car_cmd.throttle = msg->throttle; + car->car_cmd.steering = msg->steering; + car->car_cmd.brake = msg->brake; + car->car_cmd.handbrake = msg->handbrake; + car->car_cmd.is_manual_gear = msg->manual; + car->car_cmd.manual_gear = msg->manual_gear; + car->car_cmd.gear_immediate = msg->gear_immediate; + + car->has_car_cmd = true; +} + +msr::airlib::Pose AirsimROSWrapper::get_airlib_pose(const float& x, const float& y, const float& z, const msr::airlib::Quaternionr& airlib_quat) const +{ + return msr::airlib::Pose(msr::airlib::Vector3r(x, y, z), airlib_quat); +} + +// void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd& msg, const std::string& vehicle_name) +void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd::ConstPtr& msg, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + double roll, pitch, yaw; + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + + // todo do actual body frame? + drone->vel_cmd.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd.z = msg->twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + // airsim uses degrees + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd = true; +} + +void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg::VelCmdGroup& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + for (const auto& vehicle_name : msg.vehicle_names) { + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + double roll, pitch, yaw; + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + + // todo do actual body frame? + drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + // airsim uses degrees + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +// void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd::ConstPtr& msg) +void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + // todo expose waitOnLastTask or nah? + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto drone = static_cast(vehicle_name_ptr_pair.second.get()); + + double roll, pitch, yaw; + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + + // todo do actual body frame? + drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + // airsim uses degrees + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelCmd::ConstPtr& msg, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + drone->vel_cmd.x = msg->twist.linear.x; + drone->vel_cmd.y = msg->twist.linear.y; + drone->vel_cmd.z = msg->twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd = true; +} + +// this is kinda unnecessary but maybe it makes life easier for the end user. +void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_interfaces::msg::VelCmdGroup& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + for (const auto& vehicle_name : msg.vehicle_names) { + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + drone->vel_cmd.x = msg.twist.linear.x; + drone->vel_cmd.y = msg.twist.linear.y; + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_interfaces::msg::VelCmd& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + // todo expose waitOnLastTask or nah? + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto drone = static_cast(vehicle_name_ptr_pair.second.get()); + + drone->vel_cmd.x = msg.twist.linear.x; + drone->vel_cmd.y = msg.twist.linear.y; + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +// todo support multiple gimbal commands +void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_interfaces::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg) +{ + tf2::Quaternion quat_control_cmd; + try { + tf2::convert(gimbal_angle_quat_cmd_msg.orientation, quat_control_cmd); + quat_control_cmd.normalize(); + gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); // airsim uses wxyz + gimbal_cmd_.camera_name = gimbal_angle_quat_cmd_msg.camera_name; + gimbal_cmd_.vehicle_name = gimbal_angle_quat_cmd_msg.vehicle_name; + has_gimbal_cmd_ = true; + } + catch (tf2::TransformException& ex) { + ROS_WARN("%s", ex.what()); + } +} + +// todo support multiple gimbal commands +// 1. find quaternion of default gimbal pose +// 2. forward multiply with quaternion equivalent to desired euler commands (in degrees) +// 3. call airsim client's setCameraPose which sets camera pose wrt world (or takeoff?) ned frame. todo +void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_interfaces::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg) +{ + try { + tf2::Quaternion quat_control_cmd; + quat_control_cmd.setRPY(math_common::deg2rad(gimbal_angle_euler_cmd_msg.roll), math_common::deg2rad(gimbal_angle_euler_cmd_msg.pitch), math_common::deg2rad(gimbal_angle_euler_cmd_msg.yaw)); + quat_control_cmd.normalize(); + gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); + gimbal_cmd_.camera_name = gimbal_angle_euler_cmd_msg.camera_name; + gimbal_cmd_.vehicle_name = gimbal_angle_euler_cmd_msg.vehicle_name; + has_gimbal_cmd_ = true; + } + catch (tf2::TransformException& ex) { + ROS_WARN("%s", ex.what()); + } +} + +airsim_interfaces::CarState AirsimROSWrapper::get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const +{ + airsim_interfaces::CarState state_msg; + const auto odo = get_odom_msg_from_car_state(car_state); + + state_msg.pose = odo.pose; + state_msg.twist = odo.twist; + state_msg.speed = car_state.speed; + state_msg.gear = car_state.gear; + state_msg.rpm = car_state.rpm; + state_msg.maxrpm = car_state.maxrpm; + state_msg.handbrake = car_state.handbrake; + state_msg.header.stamp = airsim_timestamp_to_ros(car_state.timestamp); + + return state_msg; +} + +nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const +{ + nav_msgs::Odometry odom_msg; + + odom_msg.pose.pose.position.x = car_state.getPosition().x(); + odom_msg.pose.pose.position.y = car_state.getPosition().y(); + odom_msg.pose.pose.position.z = car_state.getPosition().z(); + odom_msg.pose.pose.orientation.x = car_state.getOrientation().x(); + odom_msg.pose.pose.orientation.y = car_state.getOrientation().y(); + odom_msg.pose.pose.orientation.z = car_state.getOrientation().z(); + odom_msg.pose.pose.orientation.w = car_state.getOrientation().w(); + + odom_msg.twist.twist.linear.x = car_state.kinematics_estimated.twist.linear.x(); + odom_msg.twist.twist.linear.y = car_state.kinematics_estimated.twist.linear.y(); + odom_msg.twist.twist.linear.z = car_state.kinematics_estimated.twist.linear.z(); + odom_msg.twist.twist.angular.x = car_state.kinematics_estimated.twist.angular.x(); + odom_msg.twist.twist.angular.y = car_state.kinematics_estimated.twist.angular.y(); + odom_msg.twist.twist.angular.z = car_state.kinematics_estimated.twist.angular.z(); + + if (isENU_) { + std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); + odom_msg.pose.pose.position.z = -odom_msg.pose.pose.position.z; + std::swap(odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y); + odom_msg.pose.pose.orientation.z = -odom_msg.pose.pose.orientation.z; + std::swap(odom_msg.twist.twist.linear.x, odom_msg.twist.twist.linear.y); + odom_msg.twist.twist.linear.z = -odom_msg.twist.twist.linear.z; + std::swap(odom_msg.twist.twist.angular.x, odom_msg.twist.twist.angular.y); + odom_msg.twist.twist.angular.z = -odom_msg.twist.twist.angular.z; + } + + return odom_msg; +} + +nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const +{ + nav_msgs::Odometry odom_msg; + + odom_msg.pose.pose.position.x = drone_state.getPosition().x(); + odom_msg.pose.pose.position.y = drone_state.getPosition().y(); + odom_msg.pose.pose.position.z = drone_state.getPosition().z(); + odom_msg.pose.pose.orientation.x = drone_state.getOrientation().x(); + odom_msg.pose.pose.orientation.y = drone_state.getOrientation().y(); + odom_msg.pose.pose.orientation.z = drone_state.getOrientation().z(); + odom_msg.pose.pose.orientation.w = drone_state.getOrientation().w(); + + odom_msg.twist.twist.linear.x = drone_state.kinematics_estimated.twist.linear.x(); + odom_msg.twist.twist.linear.y = drone_state.kinematics_estimated.twist.linear.y(); + odom_msg.twist.twist.linear.z = drone_state.kinematics_estimated.twist.linear.z(); + odom_msg.twist.twist.angular.x = drone_state.kinematics_estimated.twist.angular.x(); + odom_msg.twist.twist.angular.y = drone_state.kinematics_estimated.twist.angular.y(); + odom_msg.twist.twist.angular.z = drone_state.kinematics_estimated.twist.angular.z(); + + if (isENU_) { + std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); + odom_msg.pose.pose.position.z = -odom_msg.pose.pose.position.z; + std::swap(odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y); + odom_msg.pose.pose.orientation.z = -odom_msg.pose.pose.orientation.z; + std::swap(odom_msg.twist.twist.linear.x, odom_msg.twist.twist.linear.y); + odom_msg.twist.twist.linear.z = -odom_msg.twist.twist.linear.z; + std::swap(odom_msg.twist.twist.angular.x, odom_msg.twist.twist.angular.y); + odom_msg.twist.twist.angular.z = -odom_msg.twist.twist.angular.z; + } + + return odom_msg; +} + +// https://docs.ros.org/jade/api/sensor_msgs/html/point__cloud__conversion_8h_source.html#l00066 +// look at UnrealLidarSensor.cpp UnrealLidarSensor::getPointCloud() for math +// read this carefully https://docs.ros.org/kinetic/api/sensor_msgs/html/msg/PointCloud2.html +sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const +{ + sensor_msgs::PointCloud2 lidar_msg; + lidar_msg.header.stamp = ros::Time::now(); + lidar_msg.header.frame_id = vehicle_name; + + if (lidar_data.point_cloud.size() > 3) { + lidar_msg.height = 1; + lidar_msg.width = lidar_data.point_cloud.size() / 3; + + lidar_msg.fields.resize(3); + lidar_msg.fields[0].name = "x"; + lidar_msg.fields[1].name = "y"; + lidar_msg.fields[2].name = "z"; + + int offset = 0; + + for (size_t d = 0; d < lidar_msg.fields.size(); ++d, offset += 4) { + lidar_msg.fields[d].offset = offset; + lidar_msg.fields[d].datatype = sensor_msgs::PointField::FLOAT32; + lidar_msg.fields[d].count = 1; + } + + lidar_msg.is_bigendian = false; + lidar_msg.point_step = offset; // 4 * num fields + lidar_msg.row_step = lidar_msg.point_step * lidar_msg.width; + + lidar_msg.is_dense = true; // todo + std::vector data_std = lidar_data.point_cloud; + + const unsigned char* bytes = reinterpret_cast(data_std.data()); + vector lidar_msg_data(bytes, bytes + sizeof(float) * data_std.size()); + lidar_msg.data = std::move(lidar_msg_data); + } + else { + // msg = [] + } + + if (isENU_) { + try { + sensor_msgs::PointCloud2 lidar_msg_enu; + auto transformStampedENU = tf_buffer_.lookupTransform(AIRSIM_FRAME_ID, vehicle_name, ros::Time(0), ros::Duration(1)); + tf2::doTransform(lidar_msg, lidar_msg_enu, transformStampedENU); + + lidar_msg_enu.header.stamp = lidar_msg.header.stamp; + lidar_msg_enu.header.frame_id = lidar_msg.header.frame_id; + + lidar_msg = std::move(lidar_msg_enu); + } + catch (tf2::TransformException& ex) { + ROS_WARN("%s", ex.what()); + ros::Duration(1.0).sleep(); + } + } + + return lidar_msg; +} + +airsim_interfaces::Environment AirsimROSWrapper::get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const +{ + airsim_interfaces::Environment env_msg; + env_msg.position.x = env_data.position.x(); + env_msg.position.y = env_data.position.y(); + env_msg.position.z = env_data.position.z(); + env_msg.geo_point.latitude = env_data.geo_point.latitude; + env_msg.geo_point.longitude = env_data.geo_point.longitude; + env_msg.geo_point.altitude = env_data.geo_point.altitude; + env_msg.gravity.x = env_data.gravity.x(); + env_msg.gravity.y = env_data.gravity.y(); + env_msg.gravity.z = env_data.gravity.z(); + env_msg.air_pressure = env_data.air_pressure; + env_msg.temperature = env_data.temperature; + env_msg.air_density = env_data.temperature; + + return env_msg; +} + +sensor_msgs::MagneticField AirsimROSWrapper::get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const +{ + sensor_msgs::MagneticField mag_msg; + mag_msg.magnetic_field.x = mag_data.magnetic_field_body.x(); + mag_msg.magnetic_field.y = mag_data.magnetic_field_body.y(); + mag_msg.magnetic_field.z = mag_data.magnetic_field_body.z(); + std::copy(std::begin(mag_data.magnetic_field_covariance), + std::end(mag_data.magnetic_field_covariance), + std::begin(mag_msg.magnetic_field_covariance)); + mag_msg.header.stamp = airsim_timestamp_to_ros(mag_data.time_stamp); + + return mag_msg; +} + +// todo covariances +sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const +{ + sensor_msgs::NavSatFix gps_msg; + gps_msg.header.stamp = airsim_timestamp_to_ros(gps_data.time_stamp); + gps_msg.latitude = gps_data.gnss.geo_point.latitude; + gps_msg.longitude = gps_data.gnss.geo_point.longitude; + gps_msg.altitude = gps_data.gnss.geo_point.altitude; + gps_msg.status.service = sensor_msgs::NavSatStatus::SERVICE_GLONASS; + gps_msg.status.status = gps_data.gnss.fix_type; + // gps_msg.position_covariance_type = + // gps_msg.position_covariance = + + return gps_msg; +} + +sensor_msgs::Range AirsimROSWrapper::get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const +{ + sensor_msgs::Range dist_msg; + dist_msg.header.stamp = airsim_timestamp_to_ros(dist_data.time_stamp); + dist_msg.range = dist_data.distance; + dist_msg.min_range = dist_data.min_distance; + dist_msg.max_range = dist_data.min_distance; + + return dist_msg; +} + +airsim_interfaces::Altimeter AirsimROSWrapper::get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const +{ + airsim_interfaces::Altimeter alt_msg; + alt_msg.header.stamp = airsim_timestamp_to_ros(alt_data.time_stamp); + alt_msg.altitude = alt_data.altitude; + alt_msg.pressure = alt_data.pressure; + alt_msg.qnh = alt_data.qnh; + + return alt_msg; +} + +// todo covariances +sensor_msgs::Imu AirsimROSWrapper::get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const +{ + sensor_msgs::Imu imu_msg; + // imu_msg.header.frame_id = "/airsim/odom_local_ned";// todo multiple drones + imu_msg.header.stamp = airsim_timestamp_to_ros(imu_data.time_stamp); + imu_msg.orientation.x = imu_data.orientation.x(); + imu_msg.orientation.y = imu_data.orientation.y(); + imu_msg.orientation.z = imu_data.orientation.z(); + imu_msg.orientation.w = imu_data.orientation.w(); + + // todo radians per second + imu_msg.angular_velocity.x = imu_data.angular_velocity.x(); + imu_msg.angular_velocity.y = imu_data.angular_velocity.y(); + imu_msg.angular_velocity.z = imu_data.angular_velocity.z(); + + // meters/s2^m + imu_msg.linear_acceleration.x = imu_data.linear_acceleration.x(); + imu_msg.linear_acceleration.y = imu_data.linear_acceleration.y(); + imu_msg.linear_acceleration.z = imu_data.linear_acceleration.z(); + + // imu_msg.orientation_covariance = ; + // imu_msg.angular_velocity_covariance = ; + // imu_msg.linear_acceleration_covariance = ; + + return imu_msg; +} + +void AirsimROSWrapper::publish_odom_tf(const nav_msgs::Odometry& odom_msg) +{ + geometry_msgs::TransformStamped odom_tf; + odom_tf.header = odom_msg.header; + odom_tf.child_frame_id = odom_msg.child_frame_id; + odom_tf.transform.translation.x = odom_msg.pose.pose.position.x; + odom_tf.transform.translation.y = odom_msg.pose.pose.position.y; + odom_tf.transform.translation.z = odom_msg.pose.pose.position.z; + odom_tf.transform.rotation.x = odom_msg.pose.pose.orientation.x; + odom_tf.transform.rotation.y = odom_msg.pose.pose.orientation.y; + odom_tf.transform.rotation.z = odom_msg.pose.pose.orientation.z; + odom_tf.transform.rotation.w = odom_msg.pose.pose.orientation.w; + tf_broadcaster_.sendTransform(odom_tf); +} + +airsim_interfaces::msg::GPSYaw AirsimROSWrapper::get_gps_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const +{ + airsim_interfaces::msg::GPSYaw gps_msg; + gps_msg.latitude = geo_point.latitude; + gps_msg.longitude = geo_point.longitude; + gps_msg.altitude = geo_point.altitude; + return gps_msg; +} + +sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const +{ + sensor_msgs::NavSatFix gps_msg; + gps_msg.latitude = geo_point.latitude; + gps_msg.longitude = geo_point.longitude; + gps_msg.altitude = geo_point.altitude; + return gps_msg; +} + +ros::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const +{ + auto dur = std::chrono::duration(stamp.time_since_epoch()); + ros::Time cur_time; + cur_time.fromSec(dur.count()); + return cur_time; +} + +ros::Time AirsimROSWrapper::airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const +{ + // airsim appears to use chrono::system_clock with nanosecond precision + std::chrono::nanoseconds dur(stamp); + std::chrono::time_point tp(dur); + ros::Time cur_time = chrono_timestamp_to_ros(tp); + return cur_time; +} + +void AirsimROSWrapper::drone_state_timer_cb(const ros::TimerEvent& event) +{ + try { + // todo this is global origin + origin_geo_point_pub_.publish(origin_geo_point_msg_); + + // get the basic vehicle pose and environmental state + const auto now = update_state(); + + // on init, will publish 0 to /clock as expected for use_sim_time compatibility + if (!airsim_client_->simIsPaused()) { + // airsim_client needs to provide the simulation time in a future version of the API + ros_clock_.clock = now; + } + // publish the simulation clock + if (publish_clock_) { + clock_pub_.publish(ros_clock_); + } + + // publish vehicle state, odom, and all basic sensor types + publish_vehicle_state(); + + // send any commands out to the vehicles + update_commands(); + } + catch (rpc::rpc_error& e) { + std::cout << "error" << std::endl; + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API:" << std::endl + << msg << std::endl; + } +} + +void AirsimROSWrapper::update_and_publish_static_transforms(VehicleROS* vehicle_ros) +{ + if (vehicle_ros && !vehicle_ros->static_tf_msg_vec.empty()) { + for (auto& static_tf_msg : vehicle_ros->static_tf_msg_vec) { + static_tf_msg.header.stamp = vehicle_ros->stamp; + static_tf_pub_.sendTransform(static_tf_msg); + } + } +} + +ros::Time AirsimROSWrapper::update_state() +{ + bool got_sim_time = false; + ros::Time curr_ros_time = ros::Time::now(); + + //should be easier way to get the sim time through API, something like: + //msr::airlib::Environment::State env = airsim_client_->simGetGroundTruthEnvironment(""); + //curr_ros_time = airsim_timestamp_to_ros(env.clock().nowNanos()); + + // iterate over drones + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + ros::Time vehicle_time; + // get drone state from airsim + auto& vehicle_ros = vehicle_name_ptr_pair.second; + + // vehicle environment, we can get ambient temperature here and other truths + auto env_data = airsim_client_->simGetGroundTruthEnvironment(vehicle_ros->vehicle_name); + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + auto drone = static_cast(vehicle_ros.get()); + auto rpc = static_cast(airsim_client_.get()); + drone->curr_drone_state = rpc->getMultirotorState(vehicle_ros->vehicle_name); + + vehicle_time = airsim_timestamp_to_ros(drone->curr_drone_state.timestamp); + if (!got_sim_time) { + curr_ros_time = vehicle_time; + got_sim_time = true; + } + + vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(drone->curr_drone_state.gps_location); + vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; + + vehicle_ros->curr_odom = get_odom_msg_from_multirotor_state(drone->curr_drone_state); + } + else { + auto car = static_cast(vehicle_ros.get()); + auto rpc = static_cast(airsim_client_.get()); + car->curr_car_state = rpc->getCarState(vehicle_ros->vehicle_name); + + vehicle_time = airsim_timestamp_to_ros(car->curr_car_state.timestamp); + if (!got_sim_time) { + curr_ros_time = vehicle_time; + got_sim_time = true; + } + + vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(env_data.geo_point); + vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; + + vehicle_ros->curr_odom = get_odom_msg_from_car_state(car->curr_car_state); + + airsim_interfaces::CarState state_msg = get_roscarstate_msg_from_car_state(car->curr_car_state); + state_msg.header.frame_id = vehicle_ros->vehicle_name; + car->car_state_msg = state_msg; + } + + vehicle_ros->stamp = vehicle_time; + + airsim_interfaces::Environment env_msg = get_environment_msg_from_airsim(env_data); + env_msg.header.frame_id = vehicle_ros->vehicle_name; + env_msg.header.stamp = vehicle_time; + vehicle_ros->env_msg = env_msg; + + // convert airsim drone state to ROS msgs + vehicle_ros->curr_odom.header.frame_id = vehicle_ros->vehicle_name; + vehicle_ros->curr_odom.child_frame_id = vehicle_ros->odom_frame_id; + vehicle_ros->curr_odom.header.stamp = vehicle_time; + } + + return curr_ros_time; +} + +void AirsimROSWrapper::publish_vehicle_state() +{ + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto& vehicle_ros = vehicle_name_ptr_pair.second; + + // simulation environment truth + vehicle_ros->env_pub.publish(vehicle_ros->env_msg); + + if (airsim_mode_ == AIRSIM_MODE::CAR) { + // dashboard reading from car, RPM, gear, etc + auto car = static_cast(vehicle_ros.get()); + car->car_state_pub.publish(car->car_state_msg); + } + + // odom and transforms + vehicle_ros->odom_local_pub.publish(vehicle_ros->curr_odom); + publish_odom_tf(vehicle_ros->curr_odom); + + // ground truth GPS position from sim/HITL + vehicle_ros->global_gps_pub.publish(vehicle_ros->gps_sensor_msg); + + for (auto& sensor_publisher : vehicle_ros->sensor_pubs) { + switch (sensor_publisher.sensor_type) { + case SensorBase::SensorType::Barometer: { + auto baro_data = airsim_client_->getBarometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + airsim_interfaces::Altimeter alt_msg = get_altimeter_msg_from_airsim(baro_data); + alt_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(alt_msg); + break; + } + case SensorBase::SensorType::Imu: { + auto imu_data = airsim_client_->getImuData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::Imu imu_msg = get_imu_msg_from_airsim(imu_data); + imu_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(imu_msg); + break; + } + case SensorBase::SensorType::Distance: { + auto distance_data = airsim_client_->getDistanceSensorData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::Range dist_msg = get_range_from_airsim(distance_data); + dist_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(dist_msg); + break; + } + case SensorBase::SensorType::Gps: { + auto gps_data = airsim_client_->getGpsData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::NavSatFix gps_msg = get_gps_msg_from_airsim(gps_data); + gps_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(gps_msg); + break; + } + case SensorBase::SensorType::Lidar: { + // handled via callback + break; + } + case SensorBase::SensorType::Magnetometer: { + auto mag_data = airsim_client_->getMagnetometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::MagneticField mag_msg = get_mag_msg_from_airsim(mag_data); + mag_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(mag_msg); + break; + } + } + } + + update_and_publish_static_transforms(vehicle_ros.get()); + } +} + +void AirsimROSWrapper::update_commands() +{ + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto& vehicle_ros = vehicle_name_ptr_pair.second; + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + auto drone = static_cast(vehicle_ros.get()); + + // send control commands from the last callback to airsim + if (drone->has_vel_cmd) { + std::lock_guard guard(drone_control_mutex_); + static_cast(airsim_client_.get())->moveByVelocityAsync(drone->vel_cmd.x, drone->vel_cmd.y, drone->vel_cmd.z, vel_cmd_duration_, msr::airlib::DrivetrainType::MaxDegreeOfFreedom, drone->vel_cmd.yaw_mode, drone->vehicle_name); + } + drone->has_vel_cmd = false; + } + else { + // send control commands from the last callback to airsim + auto car = static_cast(vehicle_ros.get()); + if (car->has_car_cmd) { + std::lock_guard guard(drone_control_mutex_); + static_cast(airsim_client_.get())->setCarControls(car->car_cmd, vehicle_ros->vehicle_name); + } + car->has_car_cmd = false; + } + } + + // Only camera rotation, no translation movement of camera + if (has_gimbal_cmd_) { + std::lock_guard guard(drone_control_mutex_); + airsim_client_->simSetCameraPose(gimbal_cmd_.camera_name, get_airlib_pose(0, 0, 0, gimbal_cmd_.target_quat), gimbal_cmd_.vehicle_name); + } + + has_gimbal_cmd_ = false; +} + +// airsim uses nans for zeros in settings.json. we set them to zeros here for handling tfs in ROS +void AirsimROSWrapper::set_nans_to_zeros_in_pose(VehicleSetting& vehicle_setting) const +{ + if (std::isnan(vehicle_setting.position.x())) + vehicle_setting.position.x() = 0.0; + + if (std::isnan(vehicle_setting.position.y())) + vehicle_setting.position.y() = 0.0; + + if (std::isnan(vehicle_setting.position.z())) + vehicle_setting.position.z() = 0.0; + + if (std::isnan(vehicle_setting.rotation.yaw)) + vehicle_setting.rotation.yaw = 0.0; + + if (std::isnan(vehicle_setting.rotation.pitch)) + vehicle_setting.rotation.pitch = 0.0; + + if (std::isnan(vehicle_setting.rotation.roll)) + vehicle_setting.rotation.roll = 0.0; +} + +// if any nan's in camera pose, set them to match vehicle pose (which has already converted any potential nans to zeros) +void AirsimROSWrapper::set_nans_to_zeros_in_pose(const VehicleSetting& vehicle_setting, CameraSetting& camera_setting) const +{ + if (std::isnan(camera_setting.position.x())) + camera_setting.position.x() = vehicle_setting.position.x(); + + if (std::isnan(camera_setting.position.y())) + camera_setting.position.y() = vehicle_setting.position.y(); + + if (std::isnan(camera_setting.position.z())) + camera_setting.position.z() = vehicle_setting.position.z(); + + if (std::isnan(camera_setting.rotation.yaw)) + camera_setting.rotation.yaw = vehicle_setting.rotation.yaw; + + if (std::isnan(camera_setting.rotation.pitch)) + camera_setting.rotation.pitch = vehicle_setting.rotation.pitch; + + if (std::isnan(camera_setting.rotation.roll)) + camera_setting.rotation.roll = vehicle_setting.rotation.roll; +} + +void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const VehicleSetting& vehicle_setting) +{ + geometry_msgs::TransformStamped vehicle_tf_msg; + vehicle_tf_msg.header.frame_id = world_frame_id_; + vehicle_tf_msg.header.stamp = ros::Time::now(); + vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name; + vehicle_tf_msg.transform.translation.x = vehicle_setting.position.x(); + vehicle_tf_msg.transform.translation.y = vehicle_setting.position.y(); + vehicle_tf_msg.transform.translation.z = vehicle_setting.position.z(); + tf2::Quaternion quat; + quat.setRPY(vehicle_setting.rotation.roll, vehicle_setting.rotation.pitch, vehicle_setting.rotation.yaw); + vehicle_tf_msg.transform.rotation.x = quat.x(); + vehicle_tf_msg.transform.rotation.y = quat.y(); + vehicle_tf_msg.transform.rotation.z = quat.z(); + vehicle_tf_msg.transform.rotation.w = quat.w(); + + if (isENU_) { + std::swap(vehicle_tf_msg.transform.translation.x, vehicle_tf_msg.transform.translation.y); + std::swap(vehicle_tf_msg.transform.rotation.x, vehicle_tf_msg.transform.rotation.y); + vehicle_tf_msg.transform.translation.z = -vehicle_tf_msg.transform.translation.z; + vehicle_tf_msg.transform.rotation.z = -vehicle_tf_msg.transform.rotation.z; + } + + vehicle_ros->static_tf_msg_vec.emplace_back(vehicle_tf_msg); +} + +void AirsimROSWrapper::append_static_lidar_tf(VehicleROS* vehicle_ros, const std::string& lidar_name, const msr::airlib::LidarSimpleParams& lidar_setting) +{ + geometry_msgs::TransformStamped lidar_tf_msg; + lidar_tf_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; + lidar_tf_msg.child_frame_id = vehicle_ros->vehicle_name + "/" + lidar_name; + lidar_tf_msg.transform.translation.x = lidar_setting.relative_pose.position.x(); + lidar_tf_msg.transform.translation.y = lidar_setting.relative_pose.position.y(); + lidar_tf_msg.transform.translation.z = lidar_setting.relative_pose.position.z(); + lidar_tf_msg.transform.rotation.x = lidar_setting.relative_pose.orientation.x(); + lidar_tf_msg.transform.rotation.y = lidar_setting.relative_pose.orientation.y(); + lidar_tf_msg.transform.rotation.z = lidar_setting.relative_pose.orientation.z(); + lidar_tf_msg.transform.rotation.w = lidar_setting.relative_pose.orientation.w(); + + if (isENU_) { + std::swap(lidar_tf_msg.transform.translation.x, lidar_tf_msg.transform.translation.y); + std::swap(lidar_tf_msg.transform.rotation.x, lidar_tf_msg.transform.rotation.y); + lidar_tf_msg.transform.translation.z = -lidar_tf_msg.transform.translation.z; + lidar_tf_msg.transform.rotation.z = -lidar_tf_msg.transform.rotation.z; + } + + vehicle_ros->static_tf_msg_vec.emplace_back(lidar_tf_msg); +} + +void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const std::string& camera_name, const CameraSetting& camera_setting) +{ + geometry_msgs::TransformStamped static_cam_tf_body_msg; + static_cam_tf_body_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; + static_cam_tf_body_msg.child_frame_id = camera_name + "_body/static"; + static_cam_tf_body_msg.transform.translation.x = camera_setting.position.x(); + static_cam_tf_body_msg.transform.translation.y = camera_setting.position.y(); + static_cam_tf_body_msg.transform.translation.z = camera_setting.position.z(); + tf2::Quaternion quat; + quat.setRPY(camera_setting.rotation.roll, camera_setting.rotation.pitch, camera_setting.rotation.yaw); + static_cam_tf_body_msg.transform.rotation.x = quat.x(); + static_cam_tf_body_msg.transform.rotation.y = quat.y(); + static_cam_tf_body_msg.transform.rotation.z = quat.z(); + static_cam_tf_body_msg.transform.rotation.w = quat.w(); + + if (isENU_) { + std::swap(static_cam_tf_body_msg.transform.translation.x, static_cam_tf_body_msg.transform.translation.y); + std::swap(static_cam_tf_body_msg.transform.rotation.x, static_cam_tf_body_msg.transform.rotation.y); + static_cam_tf_body_msg.transform.translation.z = -static_cam_tf_body_msg.transform.translation.z; + static_cam_tf_body_msg.transform.rotation.z = -static_cam_tf_body_msg.transform.rotation.z; + } + + geometry_msgs::TransformStamped static_cam_tf_optical_msg = static_cam_tf_body_msg; + static_cam_tf_optical_msg.child_frame_id = camera_name + "_optical/static"; + + tf2::Quaternion quat_cam_body; + tf2::Quaternion quat_cam_optical; + tf2::convert(static_cam_tf_body_msg.transform.rotation, quat_cam_body); + tf2::Matrix3x3 mat_cam_body(quat_cam_body); + tf2::Matrix3x3 mat_cam_optical; + mat_cam_optical.setValue(mat_cam_body.getColumn(1).getX(), mat_cam_body.getColumn(2).getX(), mat_cam_body.getColumn(0).getX(), mat_cam_body.getColumn(1).getY(), mat_cam_body.getColumn(2).getY(), mat_cam_body.getColumn(0).getY(), mat_cam_body.getColumn(1).getZ(), mat_cam_body.getColumn(2).getZ(), mat_cam_body.getColumn(0).getZ()); + mat_cam_optical.getRotation(quat_cam_optical); + quat_cam_optical.normalize(); + tf2::convert(quat_cam_optical, static_cam_tf_optical_msg.transform.rotation); + + vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_body_msg); + vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_optical_msg); +} + +void AirsimROSWrapper::img_response_timer_cb(const ros::TimerEvent& event) +{ + try { + int image_response_idx = 0; + for (const auto& airsim_img_request_vehicle_name_pair : airsim_img_request_vehicle_name_pair_vec_) { + const std::vector& img_response = airsim_client_images_.simGetImages(airsim_img_request_vehicle_name_pair.first, airsim_img_request_vehicle_name_pair.second); + + if (img_response.size() == airsim_img_request_vehicle_name_pair.first.size()) { + process_and_publish_img_response(img_response, image_response_idx, airsim_img_request_vehicle_name_pair.second); + image_response_idx += img_response.size(); + } + } + } + + catch (rpc::rpc_error& e) { + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API, didn't get image response." << std::endl + << msg << std::endl; + } +} + +void AirsimROSWrapper::lidar_timer_cb(const ros::TimerEvent& event) +{ + try { + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + if (!vehicle_name_ptr_pair.second->lidar_pubs.empty()) { + for (auto& lidar_publisher : vehicle_name_ptr_pair.second->lidar_pubs) { + auto lidar_data = airsim_client_lidar_.getLidarData(lidar_publisher.sensor_name, vehicle_name_ptr_pair.first); + sensor_msgs::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first); + lidar_publisher.publisher.publish(lidar_msg); + } + } + } + } + catch (rpc::rpc_error& e) { + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API, didn't get image response." << std::endl + << msg << std::endl; + } +} + +cv::Mat AirsimROSWrapper::manual_decode_depth(const ImageResponse& img_response) const +{ + cv::Mat mat(img_response.height, img_response.width, CV_32FC1, cv::Scalar(0)); + int img_width = img_response.width; + + for (int row = 0; row < img_response.height; row++) + for (int col = 0; col < img_width; col++) + mat.at(row, col) = img_response.image_data_float[row * img_width + col]; + return mat; +} + +sensor_msgs::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, + const ros::Time curr_ros_time, + const std::string frame_id) +{ + sensor_msgs::ImagePtr img_msg_ptr = boost::make_shared(); + img_msg_ptr->data = img_response.image_data_uint8; + img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes + img_msg_ptr->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + img_msg_ptr->header.frame_id = frame_id; + img_msg_ptr->height = img_response.height; + img_msg_ptr->width = img_response.width; + img_msg_ptr->encoding = "bgr8"; + if (is_vulkan_) + img_msg_ptr->encoding = "rgb8"; + img_msg_ptr->is_bigendian = 0; + return img_msg_ptr; +} + +sensor_msgs::ImagePtr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, + const ros::Time curr_ros_time, + const std::string frame_id) +{ + // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, + // hence the dependency on opencv and cv_bridge. however, this is an extremely fast op, so no big deal. + cv::Mat depth_img = manual_decode_depth(img_response); + sensor_msgs::ImagePtr depth_img_msg = cv_bridge::CvImage(std_msgs::Header(), "32FC1", depth_img).toImageMsg(); + depth_img_msg->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + depth_img_msg->header.frame_id = frame_id; + return depth_img_msg; +} + +// todo have a special stereo pair mode and get projection matrix by calculating offset wrt drone body frame? +sensor_msgs::CameraInfo AirsimROSWrapper::generate_cam_info(const std::string& camera_name, + const CameraSetting& camera_setting, + const CaptureSetting& capture_setting) const +{ + sensor_msgs::CameraInfo cam_info_msg; + cam_info_msg.header.frame_id = camera_name + "_optical"; + cam_info_msg.height = capture_setting.height; + cam_info_msg.width = capture_setting.width; + float f_x = (capture_setting.width / 2.0) / tan(math_common::deg2rad(capture_setting.fov_degrees / 2.0)); + // todo focal length in Y direction should be same as X it seems. this can change in future a scene capture component which exactly correponds to a cine camera + // float f_y = (capture_setting.height / 2.0) / tan(math_common::deg2rad(fov_degrees / 2.0)); + cam_info_msg.K = { f_x, 0.0, capture_setting.width / 2.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 1.0 }; + cam_info_msg.P = { f_x, 0.0, capture_setting.width / 2.0, 0.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 0.0, 1.0, 0.0 }; + return cam_info_msg; +} + +void AirsimROSWrapper::process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name) +{ + // todo add option to use airsim time (image_response.TTimePoint) like Gazebo /use_sim_time param + ros::Time curr_ros_time = ros::Time::now(); + int img_response_idx_internal = img_response_idx; + + for (const auto& curr_img_response : img_response_vec) { + // todo publishing a tf for each capture type seems stupid. but it foolproofs us against render thread's async stuff, I hope. + // Ideally, we should loop over cameras and then captures, and publish only one tf. + publish_camera_tf(curr_img_response, curr_ros_time, vehicle_name, curr_img_response.camera_name); + + // todo simGetCameraInfo is wrong + also it's only for image type -1. + // msr::airlib::CameraInfo camera_info = airsim_client_.simGetCameraInfo(curr_img_response.camera_name); + + // update timestamp of saved cam info msgs + + camera_info_msg_vec_[img_response_idx_internal].header.stamp = airsim_timestamp_to_ros(curr_img_response.time_stamp); + cam_info_pub_vec_[img_response_idx_internal].publish(camera_info_msg_vec_[img_response_idx_internal]); + + // DepthPlanar / DepthPerspective / DepthVis / DisparityNormalized + if (curr_img_response.pixels_as_float) { + image_pub_vec_[img_response_idx_internal].publish(get_depth_img_msg_from_response(curr_img_response, + curr_ros_time, + curr_img_response.camera_name + "_optical")); + } + // Scene / Segmentation / SurfaceNormals / Infrared + else { + image_pub_vec_[img_response_idx_internal].publish(get_img_msg_from_response(curr_img_response, + curr_ros_time, + curr_img_response.camera_name + "_optical")); + } + img_response_idx_internal++; + } +} + +// publish camera transforms +// camera poses are obtained from airsim's client API which are in (local) NED frame. +// We first do a change of basis to camera optical frame (Z forward, X right, Y down) +void AirsimROSWrapper::publish_camera_tf(const ImageResponse& img_response, const ros::Time& ros_time, const std::string& frame_id, const std::string& child_frame_id) +{ + geometry_msgs::TransformStamped cam_tf_body_msg; + cam_tf_body_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + cam_tf_body_msg.header.frame_id = frame_id; + cam_tf_body_msg.child_frame_id = child_frame_id + "_body"; + cam_tf_body_msg.transform.translation.x = img_response.camera_position.x(); + cam_tf_body_msg.transform.translation.y = img_response.camera_position.y(); + cam_tf_body_msg.transform.translation.z = img_response.camera_position.z(); + cam_tf_body_msg.transform.rotation.x = img_response.camera_orientation.x(); + cam_tf_body_msg.transform.rotation.y = img_response.camera_orientation.y(); + cam_tf_body_msg.transform.rotation.z = img_response.camera_orientation.z(); + cam_tf_body_msg.transform.rotation.w = img_response.camera_orientation.w(); + + if (isENU_) { + std::swap(cam_tf_body_msg.transform.translation.x, cam_tf_body_msg.transform.translation.y); + std::swap(cam_tf_body_msg.transform.rotation.x, cam_tf_body_msg.transform.rotation.y); + cam_tf_body_msg.transform.translation.z = -cam_tf_body_msg.transform.translation.z; + cam_tf_body_msg.transform.rotation.z = -cam_tf_body_msg.transform.rotation.z; + } + + geometry_msgs::TransformStamped cam_tf_optical_msg; + cam_tf_optical_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + cam_tf_optical_msg.header.frame_id = frame_id; + cam_tf_optical_msg.child_frame_id = child_frame_id + "_optical"; + cam_tf_optical_msg.transform.translation.x = cam_tf_body_msg.transform.translation.x; + cam_tf_optical_msg.transform.translation.y = cam_tf_body_msg.transform.translation.y; + cam_tf_optical_msg.transform.translation.z = cam_tf_body_msg.transform.translation.z; + + tf2::Quaternion quat_cam_body; + tf2::Quaternion quat_cam_optical; + tf2::convert(cam_tf_body_msg.transform.rotation, quat_cam_body); + tf2::Matrix3x3 mat_cam_body(quat_cam_body); + // tf2::Matrix3x3 mat_cam_optical = matrix_cam_body_to_optical_ * mat_cam_body * matrix_cam_body_to_optical_inverse_; + // tf2::Matrix3x3 mat_cam_optical = matrix_cam_body_to_optical_ * mat_cam_body; + tf2::Matrix3x3 mat_cam_optical; + mat_cam_optical.setValue(mat_cam_body.getColumn(1).getX(), mat_cam_body.getColumn(2).getX(), mat_cam_body.getColumn(0).getX(), mat_cam_body.getColumn(1).getY(), mat_cam_body.getColumn(2).getY(), mat_cam_body.getColumn(0).getY(), mat_cam_body.getColumn(1).getZ(), mat_cam_body.getColumn(2).getZ(), mat_cam_body.getColumn(0).getZ()); + mat_cam_optical.getRotation(quat_cam_optical); + quat_cam_optical.normalize(); + tf2::convert(quat_cam_optical, cam_tf_optical_msg.transform.rotation); + + tf_broadcaster_.sendTransform(cam_tf_body_msg); + tf_broadcaster_.sendTransform(cam_tf_optical_msg); +} + +void AirsimROSWrapper::convert_yaml_to_simple_mat(const YAML::Node& node, SimpleMatrix& m) const +{ + int rows, cols; + rows = node["rows"].as(); + cols = node["cols"].as(); + const YAML::Node& data = node["data"]; + for (int i = 0; i < rows * cols; ++i) { + m.data[i] = data[i].as(); + } +} + +void AirsimROSWrapper::read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::CameraInfo& cam_info) const +{ + std::ifstream fin(file_name.c_str()); + YAML::Node doc = YAML::Load(fin); + + cam_info.width = doc[WIDTH_YML_NAME].as(); + cam_info.height = doc[HEIGHT_YML_NAME].as(); + + SimpleMatrix K_(3, 3, &cam_info.K[0]); + convert_yaml_to_simple_mat(doc[K_YML_NAME], K_); + SimpleMatrix R_(3, 3, &cam_info.R[0]); + convert_yaml_to_simple_mat(doc[R_YML_NAME], R_); + SimpleMatrix P_(3, 4, &cam_info.P[0]); + convert_yaml_to_simple_mat(doc[P_YML_NAME], P_); + + cam_info.distortion_model = doc[DMODEL_YML_NAME].as(); + + const YAML::Node& D_node = doc[D_YML_NAME]; + int D_rows, D_cols; + D_rows = D_node["rows"].as(); + D_cols = D_node["cols"].as(); + const YAML::Node& D_data = D_node["data"]; + cam_info.D.resize(D_rows * D_cols); + for (int i = 0; i < D_rows * D_cols; ++i) { + cam_info.D[i] = D_data[i].as(); + } +} \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_settings_parser.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_settings_parser.cpp new file mode 100755 index 0000000000..f907e0c9e1 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/src/airsim_settings_parser.cpp @@ -0,0 +1,43 @@ +#include "airsim_settings_parser.h" + +AirSimSettingsParser::AirSimSettingsParser(const std::string& host_ip) + : host_ip_(host_ip) +{ + success_ = initializeSettings(); +} + +bool AirSimSettingsParser::success() +{ + return success_; +} + +bool AirSimSettingsParser::getSettingsText(std::string& settings_text) const +{ + msr::airlib::RpcLibClientBase airsim_client(host_ip_); + airsim_client.confirmConnection(); + + settings_text = airsim_client.getSettingsString(); + + return !settings_text.empty(); +} + +std::string AirSimSettingsParser::getSimMode() +{ + Settings& settings_json = Settings::loadJSonString(settings_text_); + return settings_json.getString("SimMode", ""); +} + +// mimics void ASimHUD::initializeSettings() +bool AirSimSettingsParser::initializeSettings() +{ + if (getSettingsText(settings_text_)) { + AirSimSettings::initializeSettings(settings_text_); + + AirSimSettings::singleton().load(std::bind(&AirSimSettingsParser::getSimMode, this)); + std::cout << "SimMode: " << AirSimSettings::singleton().simmode_name << std::endl; + + return true; + } + + return false; +} \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp new file mode 100755 index 0000000000..0340d62204 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -0,0 +1,342 @@ +#include "pd_position_controller_simple.h" + +bool PIDParams::load_from_rosparams(const ros::NodeHandle& nh) +{ + bool found = true; + + found = found && nh.getParam("kp_x", kp_x); + found = found && nh.getParam("kp_y", kp_y); + found = found && nh.getParam("kp_z", kp_z); + found = found && nh.getParam("kp_yaw", kp_yaw); + + found = found && nh.getParam("kd_x", kd_x); + found = found && nh.getParam("kd_y", kd_y); + found = found && nh.getParam("kd_z", kd_z); + found = found && nh.getParam("kd_yaw", kd_yaw); + + found = found && nh.getParam("reached_thresh_xyz", reached_thresh_xyz); + found = found && nh.getParam("reached_yaw_degrees", reached_yaw_degrees); + + return found; +} + +bool DynamicConstraints::load_from_rosparams(const ros::NodeHandle& nh) +{ + bool found = true; + + found = found && nh.getParam("max_vel_horz_abs", max_vel_horz_abs); + found = found && nh.getParam("max_vel_vert_abs", max_vel_vert_abs); + found = found && nh.getParam("max_yaw_rate_degree", max_yaw_rate_degree); + + return found; +} + +PIDPositionController::PIDPositionController(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private) + : nh_(nh), nh_private_(nh_private), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) +{ + params_.load_from_rosparams(nh_private_); + constraints_.load_from_rosparams(nh_); + initialize_ros(); + reset_errors(); +} + +void PIDPositionController::reset_errors() +{ + prev_error_.x = 0.0; + prev_error_.y = 0.0; + prev_error_.z = 0.0; + prev_error_.yaw = 0.0; +} + +void PIDPositionController::initialize_ros() +{ + vel_cmd_ = airsim_interfaces::msg::VelCmd(); + // ROS params + double update_control_every_n_sec; + nh_private_.getParam("update_control_every_n_sec", update_control_every_n_sec); + + std::string vehicle_name; + + while (vehicle_name == "") { + nh_private_.getParam("/vehicle_name", vehicle_name); + RCLCPP_INFO_STREAM(nh_.get_logger() ,"Waiting vehicle name"); + } + + // ROS publishers + airsim_vel_cmd_world_frame_pub_ = nh_private_.advertise("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); + + // ROS subscribers + airsim_odom_sub_ = nh_.subscribe("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, &PIDPositionController::airsim_odom_cb, this); + home_geopoint_sub_ = nh_.subscribe("/airsim_node/home_geo_point", 50, &PIDPositionController::home_geopoint_cb, this); + // todo publish this under global nodehandle / "airsim node" and hide it from user + local_position_goal_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal", &PIDPositionController::local_position_goal_srv_cb, this); + local_position_goal_override_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal/override", &PIDPositionController::local_position_goal_srv_override_cb, this); + gps_goal_srvr_ = nh_.advertiseService("/airsim_node/gps_goal", &PIDPositionController::gps_goal_srv_cb, this); + gps_goal_override_srvr_ = nh_.advertiseService("/airsim_node/gps_goal/override", &PIDPositionController::gps_goal_srv_override_cb, this); + + // ROS timers + update_control_cmd_timer_ = nh_private_.createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); +} + +void PIDPositionController::airsim_odom_cb(const nav_msgs::Odometry& odom_msg) +{ + has_odom_ = true; + curr_odom_ = odom_msg; + curr_position_.x = odom_msg.pose.pose.position.x; + curr_position_.y = odom_msg.pose.pose.position.y; + curr_position_.z = odom_msg.pose.pose.position.z; + curr_position_.yaw = utils::get_yaw_from_quat_msg(odom_msg.pose.pose.orientation); +} + +// todo maintain internal representation as eigen vec? +// todo check if low velocity if within thresh? +// todo maintain separate errors for XY and Z +void PIDPositionController::check_reached_goal() +{ + double diff_xyz = sqrt((target_position_.x - curr_position_.x) * (target_position_.x - curr_position_.x) + (target_position_.y - curr_position_.y) * (target_position_.y - curr_position_.y) + (target_position_.z - curr_position_.z) * (target_position_.z - curr_position_.z)); + + double diff_yaw = math_common::angular_dist(target_position_.yaw, curr_position_.yaw); + + // todo save this in degrees somewhere to avoid repeated conversion + if (diff_xyz < params_.reached_thresh_xyz && diff_yaw < math_common::deg2rad(params_.reached_yaw_degrees)) + reached_goal_ = true; +} + +bool PIDPositionController::local_position_goal_srv_cb(airsim_interfaces::srv::SetLocalPosition::Request& request, airsim_interfaces::srv::SetLocalPosition::Response& response) +{ + // this tells the update timer callback to not do active hovering + if (!got_goal_once_) + got_goal_once_ = true; + + if (has_goal_ && !reached_goal_) { + // todo maintain array of position goals + RCLCPP_ERROR_STREAM("[PIDPositionController] denying position goal request. I am still following the previous goal"); + return false; + } + + if (!has_goal_) { + target_position_.x = request.x; + target_position_.y = request.y; + target_position_.z = request.z; + target_position_.yaw = request.yaw; + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; + } + + // Already have goal, and have reached it + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] Already have goal and have reached it"); + return false; +} + +bool PIDPositionController::local_position_goal_srv_override_cb(airsim_interfaces::srv::SetLocalPosition::Request& request, airsim_interfaces::srv::SetLocalPosition::Response& response) +{ + // this tells the update timer callback to not do active hovering + if (!got_goal_once_) + got_goal_once_ = true; + + target_position_.x = request.x; + target_position_.y = request.y; + target_position_.z = request.z; + target_position_.yaw = request.yaw; + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; +} + +void PIDPositionController::home_geopoint_cb(const airsim_interfaces::msg::GPSYaw& gps_msg) +{ + if (has_home_geo_) + return; + gps_home_msg_ = gps_msg; + has_home_geo_ = true; + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] GPS reference initializing " << gps_msg.latitude << ", " << gps_msg.longitude << ", " << gps_msg.altitude); + geodetic_converter_.initialiseReference(gps_msg.latitude, gps_msg.longitude, gps_msg.altitude); +} + +// todo do relative altitude, or add an option for the same? +bool PIDPositionController::gps_goal_srv_cb(airsim_interfaces::srv::SetGPSPosition::Request& request, airsim_interfaces::srv::SetGPSPosition::Response& response) +{ + if (!has_home_geo_) { + RCLCPP_ERROR_STREAM(nh_.get_logger(), "[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + response.success = false; + } + + // convert GPS goal to NED goal + + if (!has_goal_) { + msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); + msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); + bool use_eth_lib = true; + if (use_eth_lib_for_geodetic_conv_) { + double initial_latitude, initial_longitude, initial_altitude; + geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); + double n, e, d; + geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); + // RCLCPP_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + target_position_.x = n; + target_position_.y = e; + target_position_.z = d; + } + else // use airlib::GeodeticToNedFast + { + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + << "todo"); + msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); + target_position_.x = ned_goal[0]; + target_position_.y = ned_goal[1]; + target_position_.z = ned_goal[2]; + } + + target_position_.yaw = request.yaw; // todo + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; + } + + // Already have goal, this shouldn't happen + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] Goal already received, ignoring!"); + return false; +} + +// todo do relative altitude, or add an option for the same? +bool PIDPositionController::gps_goal_srv_override_cb(airsim_interfaces::srv::SetGPSPosition::Request& request, airsim_interfaces::srv::SetGPSPosition::Response& response) +{ + if (!has_home_geo_) { + RCLCPP_ERROR_STREAM(nh_.get_logger(), "[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + response.success = false; + } + + // convert GPS goal to NED goal + + msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); + msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); + bool use_eth_lib = true; + if (use_eth_lib_for_geodetic_conv_) { + double initial_latitude, initial_longitude, initial_altitude; + geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); + double n, e, d; + geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); + // RCLCPP_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + target_position_.x = n; + target_position_.y = e; + target_position_.z = d; + } + else // use airlib::GeodeticToNedFast + { + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + << "todo"); + msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); + target_position_.x = ned_goal[0]; + target_position_.y = ned_goal[1]; + target_position_.z = ned_goal[2]; + } + + target_position_.yaw = request.yaw; // todo + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; +} + +void PIDPositionController::update_control_cmd_timer_cb(const ros::TimerEvent& event) +{ + // todo check if odometry is too old!! + // if no odom, don't do anything. + if (!has_odom_) { + RCLCPP_ERROR_STREAM("[PIDPositionController] Waiting for odometry!"); + return; + } + + if (has_goal_) { + check_reached_goal(); + if (reached_goal_) { + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] Reached goal! Hovering at position."); + has_goal_ = false; + // dear future self, this function doesn't return coz we need to keep on actively hovering at last goal pose. don't act smart + } + else { + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] Moving to goal."); + } + } + + // only compute and send control commands for hovering / moving to pose, if we received a goal at least once in the past + if (got_goal_once_) { + compute_control_cmd(); + enforce_dynamic_constraints(); + publish_control_cmd(); + } +} + +void PIDPositionController::compute_control_cmd() +{ + curr_error_.x = target_position_.x - curr_position_.x; + curr_error_.y = target_position_.y - curr_position_.y; + curr_error_.z = target_position_.z - curr_position_.z; + curr_error_.yaw = math_common::angular_dist(curr_position_.yaw, target_position_.yaw); + + double p_term_x = params_.kp_x * curr_error_.x; + double p_term_y = params_.kp_y * curr_error_.y; + double p_term_z = params_.kp_z * curr_error_.z; + double p_term_yaw = params_.kp_yaw * curr_error_.yaw; + + double d_term_x = params_.kd_x * prev_error_.x; + double d_term_y = params_.kd_y * prev_error_.y; + double d_term_z = params_.kd_z * prev_error_.z; + double d_term_yaw = params_.kp_yaw * prev_error_.yaw; + + prev_error_ = curr_error_; + + vel_cmd_.twist.linear.x = p_term_x + d_term_x; + vel_cmd_.twist.linear.y = p_term_y + d_term_y; + vel_cmd_.twist.linear.z = p_term_z + d_term_z; + vel_cmd_.twist.angular.z = p_term_yaw + d_term_yaw; // todo +} + +void PIDPositionController::enforce_dynamic_constraints() +{ + double vel_norm_horz = sqrt((vel_cmd_.twist.linear.x * vel_cmd_.twist.linear.x) + (vel_cmd_.twist.linear.y * vel_cmd_.twist.linear.y)); + + if (vel_norm_horz > constraints_.max_vel_horz_abs) { + vel_cmd_.twist.linear.x = (vel_cmd_.twist.linear.x / vel_norm_horz) * constraints_.max_vel_horz_abs; + vel_cmd_.twist.linear.y = (vel_cmd_.twist.linear.y / vel_norm_horz) * constraints_.max_vel_horz_abs; + } + + if (std::fabs(vel_cmd_.twist.linear.z) > constraints_.max_vel_vert_abs) { + // todo just add a sgn funciton in common utils? return double to be safe. + // template double sgn(T val) { return (T(0) < val) - (val < T(0)); } + vel_cmd_.twist.linear.z = (vel_cmd_.twist.linear.z / std::fabs(vel_cmd_.twist.linear.z)) * constraints_.max_vel_vert_abs; + } + // todo yaw limits + if (std::fabs(vel_cmd_.twist.linear.z) > constraints_.max_yaw_rate_degree) { + // todo just add a sgn funciton in common utils? return double to be safe. + // template double sgn(T val) { return (T(0) < val) - (val < T(0)); } + vel_cmd_.twist.linear.z = (vel_cmd_.twist.linear.z / std::fabs(vel_cmd_.twist.linear.z)) * constraints_.max_yaw_rate_degree; + } +} + +void PIDPositionController::publish_control_cmd() +{ + airsim_vel_cmd_world_frame_pub_.publish(vel_cmd_); +} \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp new file mode 100755 index 0000000000..eddb6ec9e7 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp @@ -0,0 +1,22 @@ +#include "rclcpp/rclcpp.hpp" +#include "pd_position_controller_simple.h" + +int main(int argc, char** argv) +{ + ros::init(argc, argv, "pid_position_controller_simple_node"); + ros::NodeHandle nh; + ros::NodeHandle nh_private("~"); + + PIDPositionController controller(nh, nh_private); + + // int num_threads = 1; + // ros::MultiThreadedSpinner multi_thread(num_threads); + // multi_thread.spin(); + + // ros::AsyncSpinner async_spinner(num_threads); + // async_spinner.start(); + + // single threaded spinner + ros::spin(); + return 0; +} \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/CMakeLists.txt b/ros2/src/airsim_tutorial_pkgs/CMakeLists.txt new file mode 100755 index 0000000000..db27f90aa6 --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/CMakeLists.txt @@ -0,0 +1,29 @@ +cmake_minimum_required(VERSION 3.10.0) +project(airsim_tutorial_pkgs) + +# todo eigen3 in AirLib already +find_package(catkin REQUIRED COMPONENTS + cv_bridge + image_transport + mavros_msgs + message_generation + nav_msgs + # nodelet + roscpp + rospy + sensor_msgs + std_msgs + std_srvs + tf2 + tf2_ros +) + +catkin_package( + INCLUDE_DIRS + CATKIN_DEPENDS message_runtime roscpp std_msgs airsim_ros_pkgs +) + +include_directories( + ${catkin_INCLUDE_DIRS} + ${airsim_ros_pkgs_INCLUDE_DIRS} +) \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/README.md b/ros2/src/airsim_tutorial_pkgs/README.md new file mode 100755 index 0000000000..1022deb2a7 --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/README.md @@ -0,0 +1,3 @@ +# AirSim ROS Tutorials + +This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/airsim_tutorial_pkgs.md). \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/default.rviz b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/default.rviz new file mode 100755 index 0000000000..04c25b6925 --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/default.rviz @@ -0,0 +1,285 @@ +Panels: + - Class: rviz/Displays + Help Height: 78 + Name: Displays + Property Tree Widget: + Expanded: + - /TF1/Frames1 + - /Odometry1/Shape1 + Splitter Ratio: 0.87308532 + Tree Height: 775 + - Class: rviz/Selection + Name: Selection + - Class: rviz/Tool Properties + Expanded: + - /2D Pose Estimate1 + - /2D Nav Goal1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.588679016 + - Class: rviz/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 + - Class: rviz/Time + Experimental: false + Name: Time + SyncMode: 0 + SyncSource: front_left_depth_planar_registered_point_cloud +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.0299999993 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Class: rviz/TF + Enabled: true + Frame Timeout: 15 + Frames: + All Enabled: false + LidarCustom: + Value: true + drone_1: + Value: true + drone_1/odom_local_ned: + Value: true + front_center_custom_body: + Value: false + front_center_custom_body/static: + Value: false + front_center_custom_optical: + Value: true + front_center_custom_optical/static: + Value: true + front_left_custom_body: + Value: false + front_left_custom_body/static: + Value: false + front_left_custom_optical: + Value: true + front_left_custom_optical/static: + Value: true + front_right_custom_body: + Value: false + front_right_custom_body/static: + Value: false + front_right_custom_optical: + Value: true + front_right_custom_optical/static: + Value: true + world_enu: + Value: false + world_ned: + Value: true + Marker Scale: 1 + Name: TF + Show Arrows: true + Show Axes: true + Show Names: true + Tree: + world_ned: + drone_1: + drone_1/odom_local_ned: + LidarCustom: + {} + front_center_custom_body/static: + {} + front_center_custom_optical/static: + {} + front_left_custom_body/static: + {} + front_left_custom_optical/static: + {} + front_right_custom_body/static: + {} + front_right_custom_optical/static: + {} + front_center_custom_body: + {} + front_center_custom_optical: + {} + front_left_custom_body: + {} + front_left_custom_optical: + {} + front_right_custom_body: + {} + front_right_custom_optical: + {} + world_enu: + {} + Update Interval: 0 + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz/PointCloud2 + Color: 255; 255; 255 + Color Transformer: RGB8 + Decay Time: 0 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Max Intensity: 4096 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: front_left_depth_planar_registered_point_cloud + Position Transformer: XYZ + Queue Size: 10 + Selectable: true + Size (Pixels): 3 + Size (m): 0.100000001 + Style: Flat Squares + Topic: /airsim_node/drone_1/front_left_custom/DepthPlanar/registered/points + Unreliable: false + Use Fixed Frame: true + Use rainbow: true + Value: true + - Angle Tolerance: 0.100000001 + Class: rviz/Odometry + Covariance: + Orientation: + Alpha: 0.5 + Color: 255; 255; 127 + Color Style: Unique + Frame: Local + Offset: 1 + Scale: 1 + Value: true + Position: + Alpha: 0.300000012 + Color: 204; 51; 204 + Scale: 1 + Value: true + Value: true + Enabled: true + Keep: 25 + Name: Odometry + Position Tolerance: 0.100000001 + Shape: + Alpha: 1 + Axes Length: 1 + Axes Radius: 0.100000001 + Color: 255; 25; 0 + Head Length: 0.200000003 + Head Radius: 0.0500000007 + Shaft Length: 0.200000003 + Shaft Radius: 0.0199999996 + Value: Arrow + Topic: /airsim_node/MyQuad/odom_local_ned + Unreliable: false + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz/PointCloud2 + Color: 255; 255; 255 + Color Transformer: Intensity + Decay Time: 0 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Max Intensity: 4096 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: PointCloud2 + Position Transformer: XYZ + Queue Size: 10 + Selectable: true + Size (Pixels): 3 + Size (m): 0.100000001 + Style: Points + Topic: /airsim_node/drone_1/lidar/LidarCustom + Unreliable: false + Use Fixed Frame: true + Use rainbow: true + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Default Light: true + Fixed Frame: world_enu + Frame Rate: 30 + Name: root + Tools: + - Class: rviz/Interact + Hide Inactive Objects: true + - Class: rviz/MoveCamera + - Class: rviz/Select + - Class: rviz/FocusCamera + - Class: rviz/Measure + - Class: rviz/SetInitialPose + Topic: /initialpose + - Class: rviz/SetGoal + Topic: /move_base_simple/goal + - Class: rviz/PublishPoint + Single click: true + Topic: /clicked_point + Value: true + Views: + Current: + Class: rviz/Orbit + Distance: 30.6555023 + Enable Stereo Rendering: + Stereo Eye Separation: 0.0599999987 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: -0.525829852 + Y: 2.05633426 + Z: -0.726522326 + Focal Shape Fixed Size: false + Focal Shape Size: 0.0500000007 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.00999999978 + Pitch: 0.309797317 + Target Frame: world_view + Value: Orbit (rviz) + Yaw: 4.59035587 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1056 + Hide Left Dock: false + Hide Right Dock: false + QMainWindow State: 000000ff00000000fd0000000400000000000001cb00000396fc020000000cfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006100fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afc0000002800000396000000d700fffffffa000000010100000002fb0000002000630061006d005f00660072006f006e0074005f00630065006e0074006500720000000000ffffffff0000000000000000fb000000100044006900730070006c0061007900730100000000000001a60000016a00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d006500720061010000038f000000160000000000000000fb0000003600630061006d005f00660072006f006e0074005f006c006500660074005f00640065007000740068005f0070006c0061006e006100720200000af40000014e0000031c00000231fb0000001c00630061006d005f00660072006f006e0074005f006c0065006600740200000ac00000010f000002d700000196fb0000001e00630061006d005f00660072006f006e0074005f007200690067006800740200000b400000017000000286000001a7000000010000010f00000396fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000002800000396000000ad00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007530000003efc0100000002fb0000000800540069006d00650100000000000007530000030000fffffffb0000000800540069006d006501000000000000045000000000000000000000046d0000039600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Time: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: false + Width: 1875 + X: 1965 + Y: 24 diff --git a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/depth_to_pointcloud.launch b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/depth_to_pointcloud.launch new file mode 100755 index 0000000000..28b8fae8b2 --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/depth_to_pointcloud.launch @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/front_stereo_and_center_mono.launch b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/front_stereo_and_center_mono.launch new file mode 100755 index 0000000000..3aefe7b043 --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/front_stereo_and_center_mono.launch @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/rviz.launch b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/rviz.launch new file mode 100755 index 0000000000..b5e8d324a2 --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/rviz.launch @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/launch/two_drones_camera_lidar_imu/default.rviz b/ros2/src/airsim_tutorial_pkgs/launch/two_drones_camera_lidar_imu/default.rviz new file mode 100755 index 0000000000..e8539e65c0 --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/launch/two_drones_camera_lidar_imu/default.rviz @@ -0,0 +1,280 @@ +Panels: + - Class: rviz/Displays + Help Height: 78 + Name: Displays + Property Tree Widget: + Expanded: + - /TF1 + - /TF1/Frames1 + - /Odometry1/Shape1 + Splitter Ratio: 0.50515461 + Tree Height: 775 + - Class: rviz/Selection + Name: Selection + - Class: rviz/Tool Properties + Expanded: + - /2D Pose Estimate1 + - /2D Nav Goal1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.588679016 + - Class: rviz/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 + - Class: rviz/Time + Experimental: false + Name: Time + SyncMode: 0 + SyncSource: "" +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.0299999993 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Class: rviz/TF + Enabled: true + Frame Timeout: 15 + Frames: + All Enabled: false + Drone_1: + Value: true + Drone_1/odom_local_ned: + Value: true + Drone_2: + Value: true + Drone_2/odom_local_ned: + Value: true + camera_1_body: + Value: false + camera_1_body/static: + Value: false + camera_1_optical: + Value: true + camera_1_optical/static: + Value: true + camera_2_body: + Value: false + camera_2_body/static: + Value: false + camera_2_optical: + Value: true + camera_2_optical/static: + Value: true + lidar_1: + Value: true + lidar_2: + Value: true + world_enu: + Value: false + world_ned: + Value: true + Marker Scale: 1 + Name: TF + Show Arrows: true + Show Axes: true + Show Names: true + Tree: + world_ned: + Drone_1: + Drone_1/odom_local_ned: + camera_1_body/static: + {} + camera_1_optical/static: + {} + lidar_1: + {} + camera_1_body: + {} + camera_1_optical: + {} + Drone_2: + Drone_2/odom_local_ned: + camera_2_body/static: + {} + camera_2_optical/static: + {} + lidar_2: + {} + camera_2_body: + {} + camera_2_optical: + {} + world_enu: + {} + Update Interval: 0 + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz/PointCloud2 + Color: 255; 255; 255 + Color Transformer: RGB8 + Decay Time: 0 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Max Intensity: 4096 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: front_left_depth_planar_registered_point_cloud + Position Transformer: XYZ + Queue Size: 10 + Selectable: true + Size (Pixels): 3 + Size (m): 0.100000001 + Style: Flat Squares + Topic: /airsim_node/front_left_custom/DepthPlanar/registered/points + Unreliable: false + Use Fixed Frame: true + Use rainbow: true + Value: true + - Angle Tolerance: 0.100000001 + Class: rviz/Odometry + Covariance: + Orientation: + Alpha: 0.5 + Color: 255; 255; 127 + Color Style: Unique + Frame: Local + Offset: 1 + Scale: 1 + Value: true + Position: + Alpha: 0.300000012 + Color: 204; 51; 204 + Scale: 1 + Value: true + Value: true + Enabled: true + Keep: 25 + Name: Odometry + Position Tolerance: 0.100000001 + Shape: + Alpha: 1 + Axes Length: 1 + Axes Radius: 0.100000001 + Color: 255; 25; 0 + Head Length: 0.200000003 + Head Radius: 0.0500000007 + Shaft Length: 0.200000003 + Shaft Radius: 0.0199999996 + Value: Arrow + Topic: /airsim_node/MyQuad/odom_local_ned + Unreliable: false + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz/PointCloud2 + Color: 255; 255; 255 + Color Transformer: Intensity + Decay Time: 0 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Max Intensity: 4096 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: PointCloud2 + Position Transformer: XYZ + Queue Size: 10 + Selectable: true + Size (Pixels): 3 + Size (m): 0.00999999978 + Style: Flat Squares + Topic: /airsim_node/MyQuad/lidar/LidarCustom + Unreliable: false + Use Fixed Frame: true + Use rainbow: true + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Default Light: true + Fixed Frame: world_enu + Frame Rate: 30 + Name: root + Tools: + - Class: rviz/Interact + Hide Inactive Objects: true + - Class: rviz/MoveCamera + - Class: rviz/Select + - Class: rviz/FocusCamera + - Class: rviz/Measure + - Class: rviz/SetInitialPose + Topic: /initialpose + - Class: rviz/SetGoal + Topic: /move_base_simple/goal + - Class: rviz/PublishPoint + Single click: true + Topic: /clicked_point + Value: true + Views: + Current: + Class: rviz/Orbit + Distance: 2.11027455 + Enable Stereo Rendering: + Stereo Eye Separation: 0.0599999987 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: -2.6707468 + Y: -2.57372952 + Z: 3.92538261 + Focal Shape Fixed Size: false + Focal Shape Size: 0.0500000007 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.00999999978 + Pitch: 0.435398638 + Target Frame: world_view + Value: Orbit (rviz) + Yaw: 4.2285943 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1056 + Hide Left Dock: false + Hide Right Dock: false + QMainWindow State: 000000ff00000000fd00000004000000000000025500000396fc020000000cfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006100fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afc0000002800000396000000d700fffffffa000000010100000002fb0000002000630061006d005f00660072006f006e0074005f00630065006e0074006500720000000000ffffffff0000000000000000fb000000100044006900730070006c0061007900730100000000000001a60000016a00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d006500720061010000038f000000160000000000000000fb0000003600630061006d005f00660072006f006e0074005f006c006500660074005f00640065007000740068005f0070006c0061006e006100720200000af40000014e0000031c00000231fb0000001c00630061006d005f00660072006f006e0074005f006c0065006600740200000ac00000010f000002d700000196fb0000001e00630061006d005f00660072006f006e0074005f007200690067006800740200000b400000017000000286000001a7000000010000010f00000396fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000002800000396000000ad00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007530000003efc0100000002fb0000000800540069006d00650100000000000007530000030000fffffffb0000000800540069006d00650100000000000004500000000000000000000003e30000039600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Time: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: false + Width: 1875 + X: 1965 + Y: 24 diff --git a/ros2/src/airsim_tutorial_pkgs/package.xml b/ros2/src/airsim_tutorial_pkgs/package.xml new file mode 100755 index 0000000000..b5d7009e7d --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/package.xml @@ -0,0 +1,37 @@ + + + airsim_tutorial_pkgs + 0.0.1 + AirSim ROS tutorials + + Ratnesh Madaan + + MIT + + catkin + + + geometry_msgs + image_transport + message_generation + message_runtime + nav_msgs + roscpp + rospy + sensor_msgs + std_msgs + airsim_ros_pkgs + + + geometry_msgs + image_transport + message_generation + message_runtime + nav_msgs + roscpp + rospy + sensor_msgs + std_msgs + airsim_ros_pkgs + + \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py b/ros2/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py new file mode 100755 index 0000000000..dc1a89805e --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py @@ -0,0 +1,78 @@ +# import airsim +import json +import numpy as np +import pdb + +# todo expose airsimsettings.hpp via pybind11? this should be done for the full API *some*day +class Position(): + def __init__(self, x, y, z): + self.x = x + self.y = y + self.z = z + +class Rotation(): + def __init__(self, yaw, pitch, roll): + self.yaw = yaw + self.pitch = pitch + self.roll = roll + +class Pose(): + def __init__(self, position, rotation): + self.position = position + self.rotation = rotation + +class JSONSettingsCreator(object): + def __init__(self, sim_mode="Multirotor"): + # self.args = args + self.sim_mode = sim_mode + self.data = {} + + def add_minimal(self): + self.data["SeeDocsAt"] = "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md" + self.data["SettingsVersion"] = 1.2 + self.data["SimMode"] = self.sim_mode #"Multirotor" + self.data["ClockSpeed"] = 1 + + def set_pose(self, setting_key, pose): + setting_key["X"] = pose.position.x + setting_key["Y"] = pose.position.y + setting_key["Z"] = pose.position.z + setting_key["Pitch"] = pose.rotation.pitch + setting_key["Roll"] = pose.rotation.roll + setting_key["Yaw"] = pose.rotation.yaw + + def add_multirotor(self, vehicle_name, pose): + assert(self.data["SimMode"] == "Multirotor") + if "Vehicles" not in self.data.keys(): + self.data['Vehicles'] = {} + + self.data['Vehicles'][vehicle_name] = {} + self.data['Vehicles'][vehicle_name]["VehicleType"] = "SimpleFlight" + self.set_pose(self.data['Vehicles'][vehicle_name], pose) + +def main(): + json_setting_helper = JSONSettingsCreator(sim_mode="Multirotor") + json_setting_helper.add_minimal() + + # arrange drones in a rectangle. todo make classes for different swarm spawn shapes? + dist_between_drones = 2.0 + num_drones_x = 5 + num_drones_y = 5 + grid_width = (num_drones_x-1) * dist_between_drones + grid_length = (num_drones_y-1) * dist_between_drones + + x_vals = np.linspace(0, grid_width, num_drones_x) + y_vals = np.linspace(0, grid_length, num_drones_y) + x_grid, y_grid = np.meshgrid(x_vals, y_vals) + + # pdb.set_trace() + + for row_idx in range(x_grid.shape[0]): + for col_idx in range(x_grid.shape[1]): + json_setting_helper.add_multirotor("Drone"+str((row_idx * num_drones_x) + col_idx), + Pose(Position(x=y_grid[row_idx, col_idx], y=x_grid[row_idx, col_idx], z=0), Rotation(yaw=0, pitch=0, roll=0))) + with open("bla.json", "w") as f: + json.dump(json_setting_helper.data, f, indent=2, sort_keys=True) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/settings/car.json b/ros2/src/airsim_tutorial_pkgs/settings/car.json new file mode 100755 index 0000000000..5969b9dc96 --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/settings/car.json @@ -0,0 +1,108 @@ +{ + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", + "SettingsVersion": 1.2, + "SimMode": "Car", + "ViewMode": "SpringArmChase", + "ClockSpeed": 1.0, + "Vehicles": { + "drone_1": { + "VehicleType": "PhysXCar", + "DefaultVehicleState": "Armed", + "EnableCollisionPassthrogh": false, + "EnableCollisions": true, + "AllowAPIAlways": true, + "Sensors": { + "Gps": { + "SensorType": 3, + "Enabled" : true + }, + "Barometer": { + "SensorType": 1, + "Enabled" : true + }, + "Magnetometer": { + "SensorType": 4, + "Enabled" : true + }, + "Imu" : { + "SensorType": 2, + "Enabled": true + }, + "LidarCustom": { + "SensorType": 6, + "Enabled": true, + "NumberOfChannels": 16, + "PointsPerSecond": 10000, + "X": 0, + "Y": 0, + "Z": -1.5, + "DrawDebugPoints": true, + "DataFrame": "SensorLocalFrame" + } + }, + "Cameras": { + "front_center_custom": { + "CaptureSettings": [ + { + "PublishToRos": 1, + "ImageType": 0, + "Width": 640, + "Height": 480, + "FOV_Degrees": 27, + "DepthOfFieldFstop": 2.8, + "DepthOfFieldFocalDistance": 200.0, + "DepthOfFieldFocalRegion": 200.0, + "TargetGamma": 1.5 + } + ], + "X": 1.75, "Y": 0, "Z": -1.25, + "Pitch": 0, "Roll": 0, "Yaw": 0 + }, + "front_left_custom": { + "CaptureSettings": [ + { + "PublishToRos": 1, + "ImageType": 0, + "Width": 672, + "Height": 376, + "FOV_Degrees": 90, + "TargetGamma": 1.5 + }, + { + "PublishToRos": 1, + "ImageType": 1, + "Width": 672, + "Height": 376, + "FOV_Degrees": 90, + "TargetGamma": 1.5 + } + ], + "X": 1.75, "Y": -0.06, "Z": -1.25, + "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 + }, + "front_right_custom": { + "CaptureSettings": [ + { + "PublishToRos": 1, + "ImageType": 0, + "Width": 672, + "Height": 376, + "FOV_Degrees": 90, + "TargetGamma": 1.5 + } + ], + "X": 1.75, "Y": 0.06, "Z": -1.25, + "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 + } + }, + "X": 0, "Y": 0, "Z": 0, + "Pitch": 0, "Roll": 0, "Yaw": 0 + } + }, + "SubWindows": [ + {"WindowID": 0, "ImageType": 0, "CameraName": "front_left_custom", "Visible": true}, + {"WindowID": 1, "ImageType": 0, "CameraName": "front_center_custom", "Visible": false}, + {"WindowID": 2, "ImageType": 0, "CameraName": "front_right_custom", "Visible": true} + ] +} + diff --git a/ros2/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json b/ros2/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json new file mode 100755 index 0000000000..5672ffa357 --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json @@ -0,0 +1,98 @@ +{ + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", + "SettingsVersion": 1.2, + "SimMode": "Multirotor", + "ViewMode": "SpringArmChase", + "ClockSpeed": 1.0, + "Vehicles": { + "drone_1": { + "VehicleType": "SimpleFlight", + "DefaultVehicleState": "Armed", + "EnableCollisionPassthrogh": false, + "EnableCollisions": true, + "AllowAPIAlways": true, + "RC": { + "RemoteControlID": 0, + "AllowAPIWhenDisconnected": false + }, + "Sensors": { + "Imu" : { + "SensorType": 2, + "Enabled": true + }, + "LidarCustom": { + "SensorType": 6, + "Enabled": true, + "NumberOfChannels": 16, + "PointsPerSecond": 10000, + "X": 0, + "Y": 0, + "Z": -1, + "DrawDebugPoints": true + } + }, + "Cameras": { + "front_center_custom": { + "CaptureSettings": [ + { + "PublishToRos": 1, + "ImageType": 0, + "Width": 640, + "Height": 480, + "FOV_Degrees": 27, + "DepthOfFieldFstop": 2.8, + "DepthOfFieldFocalDistance": 200.0, + "DepthOfFieldFocalRegion": 200.0, + "TargetGamma": 1.5 + } + ], + "X": 0.50, "Y": 0, "Z": 0.10, + "Pitch": 0, "Roll": 0, "Yaw": 0 + }, + "front_left_custom": { + "CaptureSettings": [ + { + "PublishToRos": 1, + "ImageType": 0, + "Width": 672, + "Height": 376, + "FOV_Degrees": 90, + "TargetGamma": 1.5 + }, + { + "PublishToRos": 1, + "ImageType": 1, + "Width": 672, + "Height": 376, + "FOV_Degrees": 90, + "TargetGamma": 1.5 + } + ], + "X": 0.50, "Y": -0.06, "Z": 0.10, + "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 + }, + "front_right_custom": { + "CaptureSettings": [ + { + "PublishToRos": 1, + "ImageType": 0, + "Width": 672, + "Height": 376, + "FOV_Degrees": 90, + "TargetGamma": 1.5 + } + ], + "X": 0.50, "Y": 0.06, "Z": 0.10, + "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 + } + }, + "X": 2, "Y": 0, "Z": 0, + "Pitch": 0, "Roll": 0, "Yaw": 0 + } + }, + "SubWindows": [ + {"WindowID": 0, "ImageType": 0, "CameraName": "front_left_custom", "Visible": true}, + {"WindowID": 1, "ImageType": 0, "CameraName": "front_center_custom", "Visible": false}, + {"WindowID": 2, "ImageType": 0, "CameraName": "front_right_custom", "Visible": true} + ] +} diff --git a/ros2/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json b/ros2/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json new file mode 100755 index 0000000000..fae81ee115 --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json @@ -0,0 +1,233 @@ +{ + "ClockSpeed": 1, + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", + "SettingsVersion": 1.2, + "SimMode": "Multirotor", + "Vehicles": { + "Drone0": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 0.0, + "Y": 0.0, + "Yaw": 0, + "Z": 0 + }, + "Drone1": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 0.0, + "Y": 2.0, + "Yaw": 0, + "Z": 0 + }, + "Drone10": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 4.0, + "Y": 0.0, + "Yaw": 0, + "Z": 0 + }, + "Drone11": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 4.0, + "Y": 2.0, + "Yaw": 0, + "Z": 0 + }, + "Drone12": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 4.0, + "Y": 4.0, + "Yaw": 0, + "Z": 0 + }, + "Drone13": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 4.0, + "Y": 6.0, + "Yaw": 0, + "Z": 0 + }, + "Drone14": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 4.0, + "Y": 8.0, + "Yaw": 0, + "Z": 0 + }, + "Drone15": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 6.0, + "Y": 0.0, + "Yaw": 0, + "Z": 0 + }, + "Drone16": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 6.0, + "Y": 2.0, + "Yaw": 0, + "Z": 0 + }, + "Drone17": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 6.0, + "Y": 4.0, + "Yaw": 0, + "Z": 0 + }, + "Drone18": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 6.0, + "Y": 6.0, + "Yaw": 0, + "Z": 0 + }, + "Drone19": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 6.0, + "Y": 8.0, + "Yaw": 0, + "Z": 0 + }, + "Drone2": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 0.0, + "Y": 4.0, + "Yaw": 0, + "Z": 0 + }, + "Drone20": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 8.0, + "Y": 0.0, + "Yaw": 0, + "Z": 0 + }, + "Drone21": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 8.0, + "Y": 2.0, + "Yaw": 0, + "Z": 0 + }, + "Drone22": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 8.0, + "Y": 4.0, + "Yaw": 0, + "Z": 0 + }, + "Drone23": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 8.0, + "Y": 6.0, + "Yaw": 0, + "Z": 0 + }, + "Drone24": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 8.0, + "Y": 8.0, + "Yaw": 0, + "Z": 0 + }, + "Drone3": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 0.0, + "Y": 6.0, + "Yaw": 0, + "Z": 0 + }, + "Drone4": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 0.0, + "Y": 8.0, + "Yaw": 0, + "Z": 0 + }, + "Drone5": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 2.0, + "Y": 0.0, + "Yaw": 0, + "Z": 0 + }, + "Drone6": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 2.0, + "Y": 2.0, + "Yaw": 0, + "Z": 0 + }, + "Drone7": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 2.0, + "Y": 4.0, + "Yaw": 0, + "Z": 0 + }, + "Drone8": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 2.0, + "Y": 6.0, + "Yaw": 0, + "Z": 0 + }, + "Drone9": { + "Pitch": 0, + "Roll": 0, + "VehicleType": "SimpleFlight", + "X": 2.0, + "Y": 8.0, + "Yaw": 0, + "Z": 0 + } + } +} \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json b/ros2/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json new file mode 100755 index 0000000000..8b57f7e909 --- /dev/null +++ b/ros2/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json @@ -0,0 +1,100 @@ +{ + "ClockSpeed": 1, + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", + "SettingsVersion": 1.2, + "SimMode": "Multirotor", + "Vehicles": { + "Drone_1": { + "VehicleType": "SimpleFlight", + "Sensors": { + "imu_1": { + "SensorType": 2, + "Enabled": true + }, + "lidar_1": { + "SensorType": 6, + "Range": 100, + "Enabled": true, + "NumberOfChannels": 64, + "PointsPerSecond": 100000, + "VerticalFOVUpper": 90, + "VerticalFOVLower": 0, + "HorizontalFOVStart": -90, + "HorizontalFOVEnd": 90, + "X": 0, "Y": 0, "Z": -0.1, + "DrawDebugPoints": true + } + }, + "Cameras": { + "camera_1": { + "CaptureSettings": [ + { + "ImageType": 0, + "Width": 672, + "Height": 376, + "FOV_Degrees": 90, + "TargetGamma": 1.5 + }, + { + "ImageType": 1, + "Width": 672, + "Height": 376, + "FOV_Degrees": 90, + "TargetGamma": 1.5 + } + ], + "X": 0.5, "Y": -0.06, "Z": 0.10, + "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 + } + }, + "X": 2.0, "Y": 0.0, "Z": 0, + "Pitch": 0, "Roll": 0, "Yaw": 0 + }, + "Drone_2": { + "VehicleType": "SimpleFlight", + "Sensors": { + "imu_2": { + "SensorType": 2, + "Enabled": true + }, + "lidar_2": { + "SensorType": 6, + "Range": 100, + "Enabled": true, + "NumberOfChannels": 64, + "PointsPerSecond": 100000, + "VerticalFOVUpper": 90, + "VerticalFOVLower": 0, + "HorizontalFOVStart": -90, + "HorizontalFOVEnd": 90, + "X": 0, "Y": 0, "Z": -0.1, + "DrawDebugPoints": true + } + }, + "Cameras": { + "camera_2": { + "CaptureSettings": [ + { + "ImageType": 0, + "Width": 672, + "Height": 376, + "FOV_Degrees": 90, + "TargetGamma": 1.5 + }, + { + "ImageType": 1, + "Width": 672, + "Height": 376, + "FOV_Degrees": 90, + "TargetGamma": 1.5 + } + ], + "X": 0.1, "Y": -0.06, "Z": 0.10, + "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 + } + }, + "X": 4.0, "Y": 0.0, "Z": 0, + "Pitch": 0, "Roll": 0, "Yaw": 0 + } + } +} \ No newline at end of file diff --git a/ros2/src/log/COLCON_IGNORE b/ros2/src/log/COLCON_IGNORE new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ros2/src/log/latest b/ros2/src/log/latest new file mode 120000 index 0000000000..17156673ec --- /dev/null +++ b/ros2/src/log/latest @@ -0,0 +1 @@ +latest_list \ No newline at end of file diff --git a/ros2/src/log/latest_list b/ros2/src/log/latest_list new file mode 120000 index 0000000000..37fb47d3a0 --- /dev/null +++ b/ros2/src/log/latest_list @@ -0,0 +1 @@ +list_2021-08-12_08-17-18 \ No newline at end of file From c8cb2f61f764ae370e4986ff0a2a8b936923336a Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 12 Aug 2021 14:21:11 -0700 Subject: [PATCH 006/123] - update macros --- ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 6 +++--- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index ab03590a1c..a97df9b1e3 100644 --- a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -586,7 +586,7 @@ void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_ros_pkgs::GimbalAng has_gimbal_cmd_ = true; } catch (tf2::TransformException& ex) { - ROS_WARN("%s", ex.what()); + RCLCPP_WARN("%s", ex.what()); } } @@ -606,7 +606,7 @@ void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_ros_pkgs::GimbalAn has_gimbal_cmd_ = true; } catch (tf2::TransformException& ex) { - ROS_WARN("%s", ex.what()); + RCLCPP_WARN("%s", ex.what()); } } @@ -746,7 +746,7 @@ sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr:: lidar_msg = std::move(lidar_msg_enu); } catch (tf2::TransformException& ex) { - ROS_WARN("%s", ex.what()); + RCLCPP_WARN("%s", ex.what()); ros::Duration(1.0).sleep(); } } diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 679ee4a657..f1f86b1bf3 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -586,7 +586,7 @@ void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_interfaces::GimbalA has_gimbal_cmd_ = true; } catch (tf2::TransformException& ex) { - ROS_WARN("%s", ex.what()); + RCLCPP_WARN("%s", ex.what()); } } @@ -606,7 +606,7 @@ void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_interfaces::Gimbal has_gimbal_cmd_ = true; } catch (tf2::TransformException& ex) { - ROS_WARN("%s", ex.what()); + RCLCPP_WARN("%s", ex.what()); } } @@ -746,7 +746,7 @@ sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr:: lidar_msg = std::move(lidar_msg_enu); } catch (tf2::TransformException& ex) { - ROS_WARN("%s", ex.what()); + RCLCPP_WARN("%s", ex.what()); ros::Duration(1.0).sleep(); } } From 8cb50e8dcc3d454c994c6c7ed3eb160cc4d1dccd Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 12 Aug 2021 14:22:27 -0700 Subject: [PATCH 007/123] - update ROS_ERROR_STREAM --- .../airsim_ros_pkgs/src/pd_position_controller_simple.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 1b93dbe9aa..0ab572edc9 100644 --- a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -110,7 +110,7 @@ bool PIDPositionController::local_position_goal_srv_cb(airsim_ros_pkgs::SetLocal if (has_goal_ && !reached_goal_) { // todo maintain array of position goals - ROS_ERROR_STREAM("[PIDPositionController] denying position goal request. I am still following the previous goal"); + RCLCPP_ERROR_STREAM("[PIDPositionController] denying position goal request. I am still following the previous goal"); return false; } @@ -168,7 +168,7 @@ void PIDPositionController::home_geopoint_cb(const airsim_ros_pkgs::GPSYaw& gps_ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) { if (!has_home_geo_) { - ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + RCLCPP_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); response.success = false; } @@ -219,7 +219,7 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Req bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) { if (!has_home_geo_) { - ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + RCLCPP_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); response.success = false; } @@ -265,7 +265,7 @@ void PIDPositionController::update_control_cmd_timer_cb(const ros::TimerEvent& e // todo check if odometry is too old!! // if no odom, don't do anything. if (!has_odom_) { - ROS_ERROR_STREAM("[PIDPositionController] Waiting for odometry!"); + RCLCPP_ERROR_STREAM("[PIDPositionController] Waiting for odometry!"); return; } From ab90dc49a91ffc2b9a56a4a1a4422ebc558626db Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 12 Aug 2021 14:30:07 -0700 Subject: [PATCH 008/123] - add missin msg --- ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 0ab572edc9..2e9a6ac44a 100644 --- a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -63,7 +63,7 @@ void PIDPositionController::initialize_ros() } // ROS publishers - airsim_vel_cmd_world_frame_pub_ = nh_private_.advertise("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); + airsim_vel_cmd_world_frame_pub_ = nh_private_.advertise("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); // ROS subscribers airsim_odom_sub_ = nh_.subscribe("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, &PIDPositionController::airsim_odom_cb, this); From 3eafad204c817062aab64b6e2ce7c45766b7faa9 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 12 Aug 2021 15:28:18 -0700 Subject: [PATCH 009/123] - update macros - update ros::NodeHandle - update ros::Publisher --- .../include/airsim_ros_wrapper.h | 26 ++++++------- .../include/pd_position_controller_simple.h | 12 +++--- ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 6 ++- .../src/airsim_ros_wrapper.cpp | 14 +++---- .../src/pd_position_controller_simple.cpp | 38 +++++++++---------- .../pd_position_controller_simple_node.cpp | 6 ++- 6 files changed, 53 insertions(+), 49 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index abe8003048..0794ff103b 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -133,7 +133,7 @@ class AirsimROSWrapper CAR }; - AirsimROSWrapper(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private, const std::string& host_ip); + AirsimROSWrapper(const rclcpp::Node& nh, const ros::NodeHandle& nh_private, const std::string& host_ip); ~AirsimROSWrapper(){}; void initialize_airsim(); @@ -150,7 +150,7 @@ class AirsimROSWrapper { SensorBase::SensorType sensor_type; std::string sensor_name; - ros::Publisher publisher; + rclcpp::Publisher publisher; }; // utility struct for a SINGLE robot @@ -161,15 +161,15 @@ class AirsimROSWrapper std::string vehicle_name; /// All things ROS - ros::Publisher odom_local_pub; - ros::Publisher global_gps_pub; - ros::Publisher env_pub; + rclcpp::Publisher odom_local_pub; + rclcpp::Publisher global_gps_pub; + rclcpp::Publisher env_pub; airsim_interfaces::Environment env_msg; std::vector sensor_pubs; // handle lidar seperately for max performance as data is collected on its own thread/callback std::vector lidar_pubs; - nav_msgs::Odometry curr_odom; + nav_msgs::msg::Odometry curr_odom; sensor_msgs::NavSatFix gps_sensor_msg; std::vector static_tf_msg_vec; @@ -188,7 +188,7 @@ class AirsimROSWrapper msr::airlib::CarApiBase::CarState curr_car_state; ros::Subscriber car_cmd_sub; - ros::Publisher car_state_pub; + rclcpp::Publisher car_state_pub; airsim_interfaces::CarState car_state_msg; bool has_car_cmd; @@ -254,7 +254,7 @@ class AirsimROSWrapper /// ROS tf broadcasters void publish_camera_tf(const ImageResponse& img_response, const ros::Time& ros_time, const std::string& frame_id, const std::string& child_frame_id); - void publish_odom_tf(const nav_msgs::Odometry& odom_msg); + void publish_odom_tf(const nav_msgs::msg::Odometry& odom_msg); /// camera helper methods sensor_msgs::CameraInfo generate_cam_info(const std::string& camera_name, const CameraSetting& camera_setting, const CaptureSetting& capture_setting) const; @@ -278,8 +278,8 @@ class AirsimROSWrapper tf2::Quaternion get_tf2_quat(const msr::airlib::Quaternionr& airlib_quat) const; msr::airlib::Quaternionr get_airlib_quat(const geometry_msgs::Quaternion& geometry_msgs_quat) const; msr::airlib::Quaternionr get_airlib_quat(const tf2::Quaternion& tf2_quat) const; - nav_msgs::Odometry get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const; - nav_msgs::Odometry get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const; + nav_msgs::msg::Odometry get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const; + nav_msgs::msg::Odometry get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const; airsim_interfaces::CarState get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const; msr::airlib::Pose get_airlib_pose(const float& x, const float& y, const float& z, const msr::airlib::Quaternionr& airlib_quat) const; airsim_interfaces::msg::GPSYaw get_gps_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const; @@ -316,7 +316,7 @@ class AirsimROSWrapper AIRSIM_MODE airsim_mode_ = AIRSIM_MODE::DRONE; ros::ServiceServer reset_srvr_; - ros::Publisher origin_geo_point_pub_; // home geo coord of drones + rclcpp::Publisher origin_geo_point_pub_; // home geo coord of drones msr::airlib::GeoPoint origin_geo_point_; // gps coord of unreal origin airsim_interfaces::msg::GPSYaw origin_geo_point_msg_; // todo duplicate @@ -370,12 +370,12 @@ class AirsimROSWrapper typedef std::pair, std::string> airsim_img_request_vehicle_name_pair; std::vector airsim_img_request_vehicle_name_pair_vec_; std::vector image_pub_vec_; - std::vector cam_info_pub_vec_; + std::vector cam_info_pub_vec_; std::vector camera_info_msg_vec_; /// ROS other publishers - ros::Publisher clock_pub_; + rclcpp::Publisher clock_pub_; rosgraph_msgs::Clock ros_clock_; bool publish_clock_ = false; diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h index 82f565d813..d61c94a4dc 100755 --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -47,7 +47,7 @@ STRICT_MODE_OFF //todo what does this do? { } - bool load_from_rosparams(const ros::NodeHandle& nh); + bool load_from_rosparams(const rclcpp::Node& nh); }; // todo should be a common representation @@ -72,13 +72,13 @@ class DynamicConstraints { } - bool load_from_rosparams(const ros::NodeHandle& nh); + bool load_from_rosparams(const rclcpp::Node& nh); }; class PIDPositionController { public: - PIDPositionController(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private); + PIDPositionController(const rclcpp::Node& nh, const ros::NodeHandle& nh_private); // ROS service callbacks bool local_position_goal_srv_cb(airsim_interfaces::srv::SetLocalPosition::Request& request, airsim_interfaces::srv::SetLocalPosition::Response& response); @@ -104,7 +104,7 @@ class PIDPositionController geodetic_converter::GeodeticConverter geodetic_converter_; bool use_eth_lib_for_geodetic_conv_; - ros::NodeHandle nh_; + rclcpp::Node nh_; ros::NodeHandle nh_private_; DynamicConstraints constraints_; @@ -117,7 +117,7 @@ class PIDPositionController bool has_home_geo_; airsim_interfaces::msg::GPSYaw gps_home_msg_; - nav_msgs::Odometry curr_odom_; + nav_msgs::msg::Odometry curr_odom_; airsim_interfaces::msg::VelCmd vel_cmd_; bool reached_goal_; bool has_goal_; @@ -125,7 +125,7 @@ class PIDPositionController bool got_goal_once_; // todo check for odom msg being older than n sec - ros::Publisher airsim_vel_cmd_world_frame_pub_; + rclcpp::Publisher airsim_vel_cmd_world_frame_pub_; ros::Subscriber airsim_odom_sub_; ros::Subscriber home_geopoint_sub_; ros::ServiceServer local_position_goal_srvr_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp index 308086d950..86aa5abee3 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -4,8 +4,10 @@ int main(int argc, char** argv) { - ros::init(argc, argv, "airsim_node"); - ros::NodeHandle nh; + // ros::init(argc, argv, "airsim_node"); + // ros::NodeHandle nh; + rclcpp::init(argc, argv); + rclcpp::Node nh = rclcpp::Node("airsim_node"); ros::NodeHandle nh_private("~"); std::string host_ip = "localhost"; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index f1f86b1bf3..ad184c3b29 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -25,7 +25,7 @@ const std::unordered_map AirsimROSWrapper::image_type_int_to_s { 7, "Infrared" } }; -AirsimROSWrapper::AirsimROSWrapper(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private, const std::string& host_ip) +AirsimROSWrapper::AirsimROSWrapper(const rclcpp::Node& nh, const ros::NodeHandle& nh_private, const std::string& host_ip) : nh_(nh), nh_private_(nh_private), img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ lidar_async_spinner_(1, &lidar_timer_cb_queue_) , // same as above, but for lidar @@ -146,7 +146,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); - vehicle_ros->odom_local_pub = nh_private_.advertise(curr_vehicle_name + "/" + odom_frame_id_, 10); + vehicle_ros->odom_local_pub = nh_private_.advertise(curr_vehicle_name + "/" + odom_frame_id_, 10); vehicle_ros->env_pub = nh_private_.advertise(curr_vehicle_name + "/environment", 10); @@ -627,9 +627,9 @@ airsim_interfaces::CarState AirsimROSWrapper::get_roscarstate_msg_from_car_state return state_msg; } -nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const +nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const { - nav_msgs::Odometry odom_msg; + nav_msgs::msg::Odometry odom_msg; odom_msg.pose.pose.position.x = car_state.getPosition().x(); odom_msg.pose.pose.position.y = car_state.getPosition().y(); @@ -660,9 +660,9 @@ nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_car_state(const msr::airl return odom_msg; } -nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const +nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const { - nav_msgs::Odometry odom_msg; + nav_msgs::msg::Odometry odom_msg; odom_msg.pose.pose.position.x = drone_state.getPosition().x(); odom_msg.pose.pose.position.y = drone_state.getPosition().y(); @@ -853,7 +853,7 @@ sensor_msgs::Imu AirsimROSWrapper::get_imu_msg_from_airsim(const msr::airlib::Im return imu_msg; } -void AirsimROSWrapper::publish_odom_tf(const nav_msgs::Odometry& odom_msg) +void AirsimROSWrapper::publish_odom_tf(const nav_msgs::msg::Odometry& odom_msg) { geometry_msgs::TransformStamped odom_tf; odom_tf.header = odom_msg.header; diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 0340d62204..8d2d338917 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -1,37 +1,37 @@ #include "pd_position_controller_simple.h" -bool PIDParams::load_from_rosparams(const ros::NodeHandle& nh) +bool PIDParams::load_from_rosparams(const rclcpp::Node& nh) { bool found = true; - found = found && nh.getParam("kp_x", kp_x); - found = found && nh.getParam("kp_y", kp_y); - found = found && nh.getParam("kp_z", kp_z); - found = found && nh.getParam("kp_yaw", kp_yaw); + found = found && nh.get_parameter("kp_x", kp_x); + found = found && nh.get_parameter("kp_y", kp_y); + found = found && nh.get_parameter("kp_z", kp_z); + found = found && nh.get_parameter("kp_yaw", kp_yaw); - found = found && nh.getParam("kd_x", kd_x); - found = found && nh.getParam("kd_y", kd_y); - found = found && nh.getParam("kd_z", kd_z); - found = found && nh.getParam("kd_yaw", kd_yaw); + found = found && nh.get_parameter("kd_x", kd_x); + found = found && nh.get_parameter("kd_y", kd_y); + found = found && nh.get_parameter("kd_z", kd_z); + found = found && nh.get_parameter("kd_yaw", kd_yaw); - found = found && nh.getParam("reached_thresh_xyz", reached_thresh_xyz); - found = found && nh.getParam("reached_yaw_degrees", reached_yaw_degrees); + found = found && nh.get_parameter("reached_thresh_xyz", reached_thresh_xyz); + found = found && nh.get_parameter("reached_yaw_degrees", reached_yaw_degrees); return found; } -bool DynamicConstraints::load_from_rosparams(const ros::NodeHandle& nh) +bool DynamicConstraints::load_from_rosparams(const rclcpp::Node& nh) { bool found = true; - found = found && nh.getParam("max_vel_horz_abs", max_vel_horz_abs); - found = found && nh.getParam("max_vel_vert_abs", max_vel_vert_abs); - found = found && nh.getParam("max_yaw_rate_degree", max_yaw_rate_degree); + found = found && nh.get_parameter("max_vel_horz_abs", max_vel_horz_abs); + found = found && nh.get_parameter("max_vel_vert_abs", max_vel_vert_abs); + found = found && nh.get_parameter("max_yaw_rate_degree", max_yaw_rate_degree); return found; } -PIDPositionController::PIDPositionController(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private) +PIDPositionController::PIDPositionController(const rclcpp::Node& nh, const ros::NodeHandle& nh_private) : nh_(nh), nh_private_(nh_private), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) { params_.load_from_rosparams(nh_private_); @@ -78,7 +78,7 @@ void PIDPositionController::initialize_ros() update_control_cmd_timer_ = nh_private_.createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); } -void PIDPositionController::airsim_odom_cb(const nav_msgs::Odometry& odom_msg) +void PIDPositionController::airsim_odom_cb(const nav_msgs::msg::Odometry& odom_msg) { has_odom_ = true; curr_odom_ = odom_msg; @@ -110,7 +110,7 @@ bool PIDPositionController::local_position_goal_srv_cb(airsim_interfaces::srv::S if (has_goal_ && !reached_goal_) { // todo maintain array of position goals - RCLCPP_ERROR_STREAM("[PIDPositionController] denying position goal request. I am still following the previous goal"); + RCLCPP_ERROR_STREAM(nh_.get_logger(), "[PIDPositionController] denying position goal request. I am still following the previous goal"); return false; } @@ -265,7 +265,7 @@ void PIDPositionController::update_control_cmd_timer_cb(const ros::TimerEvent& e // todo check if odometry is too old!! // if no odom, don't do anything. if (!has_odom_) { - RCLCPP_ERROR_STREAM("[PIDPositionController] Waiting for odometry!"); + RCLCPP_ERROR_STREAM(nh_.get_logger(), "[PIDPositionController] Waiting for odometry!"); return; } diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp index eddb6ec9e7..8250eb4659 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp @@ -3,8 +3,10 @@ int main(int argc, char** argv) { - ros::init(argc, argv, "pid_position_controller_simple_node"); - ros::NodeHandle nh; + // ros::init(argc, argv, "pid_position_controller_simple_node"); + // ros::NodeHandle nh; + rclcpp::init(argc, argv); + rclcpp::Node nh = rclcpp::Node("pid_position_controller_simple_node"); ros::NodeHandle nh_private("~"); PIDPositionController controller(nh, nh_private); From e2048121d16cf5d6f063ca55cee04c832765e90d Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 12 Aug 2021 15:41:35 -0700 Subject: [PATCH 010/123] - update ros::Publisher and ros::Subscriber --- .../include/airsim_ros_wrapper.h | 18 +++++++++--------- .../include/pd_position_controller_simple.h | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 0794ff103b..0180fcd9db 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -187,7 +187,7 @@ class AirsimROSWrapper public: msr::airlib::CarApiBase::CarState curr_car_state; - ros::Subscriber car_cmd_sub; + rclcpp::Subscription car_cmd_sub; rclcpp::Publisher car_state_pub; airsim_interfaces::CarState car_state_msg; @@ -202,8 +202,8 @@ class AirsimROSWrapper msr::airlib::MultirotorState curr_drone_state; // bool in_air_; // todo change to "status" and keep track of this - ros::Subscriber vel_cmd_body_frame_sub; - ros::Subscriber vel_cmd_world_frame_sub; + rclcpp::Subscription vel_cmd_body_frame_sub; + rclcpp::Subscription vel_cmd_world_frame_sub; ros::ServiceServer takeoff_srvr; ros::ServiceServer land_srvr; @@ -302,14 +302,14 @@ class AirsimROSWrapper private: // subscriber / services for ALL robots - ros::Subscriber vel_cmd_all_body_frame_sub_; - ros::Subscriber vel_cmd_all_world_frame_sub_; + rclcpp::Subscription vel_cmd_all_body_frame_sub_; + rclcpp::Subscription vel_cmd_all_world_frame_sub_; ros::ServiceServer takeoff_all_srvr_; ros::ServiceServer land_all_srvr_; // todo - subscriber / services for a GROUP of robots, which is defined by a list of `vehicle_name`s passed in the ros msg / srv request - ros::Subscriber vel_cmd_group_body_frame_sub_; - ros::Subscriber vel_cmd_group_world_frame_sub_; + rclcpp::Subscription vel_cmd_group_body_frame_sub_; + rclcpp::Subscription vel_cmd_group_world_frame_sub_; ros::ServiceServer takeoff_group_srvr_; ros::ServiceServer land_group_srvr_; @@ -379,8 +379,8 @@ class AirsimROSWrapper rosgraph_msgs::Clock ros_clock_; bool publish_clock_ = false; - ros::Subscriber gimbal_angle_quat_cmd_sub_; - ros::Subscriber gimbal_angle_euler_cmd_sub_; + rclcpp::Subscription gimbal_angle_quat_cmd_sub_; + rclcpp::Subscription gimbal_angle_euler_cmd_sub_; static constexpr char CAM_YML_NAME[] = "camera_name"; static constexpr char WIDTH_YML_NAME[] = "image_width"; diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h index d61c94a4dc..a7f8ad120f 100755 --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -126,8 +126,8 @@ class PIDPositionController // todo check for odom msg being older than n sec rclcpp::Publisher airsim_vel_cmd_world_frame_pub_; - ros::Subscriber airsim_odom_sub_; - ros::Subscriber home_geopoint_sub_; + rclcpp::Subscription airsim_odom_sub_; + rclcpp::Subscription home_geopoint_sub_; ros::ServiceServer local_position_goal_srvr_; ros::ServiceServer local_position_goal_override_srvr_; ros::ServiceServer gps_goal_srvr_; From b9d7f555084222a27ddc3dd69f966dc1db122f28 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Fri, 13 Aug 2021 05:16:42 -0700 Subject: [PATCH 011/123] - update subscribers and callbacks --- .../include/pd_position_controller_simple.h | 10 ++++---- .../src/pd_position_controller_simple.cpp | 25 ++++++++++--------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h index a7f8ad120f..ee8d84b8f1 100755 --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -87,8 +87,8 @@ class PIDPositionController bool gps_goal_srv_override_cb(airsim_interfaces::srv::SetGPSPosition::Request& request, airsim_interfaces::srv::SetGPSPosition::Response& response); // ROS subscriber callbacks - void airsim_odom_cb(const nav_msgs::msg::Odometry& odom_msg); - void home_geopoint_cb(const airsim_interfaces::msg::GPSYaw& gps_msg); + void airsim_odom_cb(const nav_msgs::msg::Odometry::SharedPtr odom_msg); + void home_geopoint_cb(const airsim_interfaces::msg::GPSYaw::SharedPtr gps_msg); void update_control_cmd_timer_cb(const ros::TimerEvent& event); @@ -125,9 +125,9 @@ class PIDPositionController bool got_goal_once_; // todo check for odom msg being older than n sec - rclcpp::Publisher airsim_vel_cmd_world_frame_pub_; - rclcpp::Subscription airsim_odom_sub_; - rclcpp::Subscription home_geopoint_sub_; + rclcpp::Publisher airsim_vel_cmd_world_frame_pub_; + rclcpp::Subscription::SharedPtr airsim_odom_sub_; + rclcpp::Subscription::SharedPtr home_geopoint_sub_; ros::ServiceServer local_position_goal_srvr_; ros::ServiceServer local_position_goal_override_srvr_; ros::ServiceServer gps_goal_srvr_; diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 8d2d338917..82f74adb33 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -1,4 +1,5 @@ #include "pd_position_controller_simple.h" +using std::placeholders::_1; bool PIDParams::load_from_rosparams(const rclcpp::Node& nh) { @@ -66,8 +67,8 @@ void PIDPositionController::initialize_ros() airsim_vel_cmd_world_frame_pub_ = nh_private_.advertise("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); // ROS subscribers - airsim_odom_sub_ = nh_.subscribe("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, &PIDPositionController::airsim_odom_cb, this); - home_geopoint_sub_ = nh_.subscribe("/airsim_node/home_geo_point", 50, &PIDPositionController::home_geopoint_cb, this); + airsim_odom_sub_ = nh_.create_subscription("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, std::bind(&PIDPositionController::airsim_odom_cb, this, _1)); + home_geopoint_sub_ = nh_.create_subscription("/airsim_node/home_geo_point", 50, std::bind(&PIDPositionController::home_geopoint_cb, this, _1)); // todo publish this under global nodehandle / "airsim node" and hide it from user local_position_goal_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal", &PIDPositionController::local_position_goal_srv_cb, this); local_position_goal_override_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal/override", &PIDPositionController::local_position_goal_srv_override_cb, this); @@ -78,14 +79,14 @@ void PIDPositionController::initialize_ros() update_control_cmd_timer_ = nh_private_.createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); } -void PIDPositionController::airsim_odom_cb(const nav_msgs::msg::Odometry& odom_msg) +void PIDPositionController::airsim_odom_cb(const nav_msgs::msg::Odometry::SharedPtr odom_msg) { has_odom_ = true; - curr_odom_ = odom_msg; - curr_position_.x = odom_msg.pose.pose.position.x; - curr_position_.y = odom_msg.pose.pose.position.y; - curr_position_.z = odom_msg.pose.pose.position.z; - curr_position_.yaw = utils::get_yaw_from_quat_msg(odom_msg.pose.pose.orientation); + curr_odom_ = *odom_msg; + curr_position_.x = odom_msg->pose.pose.position.x; + curr_position_.y = odom_msg->pose.pose.position.y; + curr_position_.z = odom_msg->pose.pose.position.z; + curr_position_.yaw = utils::get_yaw_from_quat_msg(odom_msg->pose.pose.orientation); } // todo maintain internal representation as eigen vec? @@ -154,14 +155,14 @@ bool PIDPositionController::local_position_goal_srv_override_cb(airsim_interface return true; } -void PIDPositionController::home_geopoint_cb(const airsim_interfaces::msg::GPSYaw& gps_msg) +void PIDPositionController::home_geopoint_cb(const airsim_interfaces::msg::GPSYaw::SharedPtr gps_msg) { if (has_home_geo_) return; - gps_home_msg_ = gps_msg; + gps_home_msg_ = *gps_msg; has_home_geo_ = true; - RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] GPS reference initializing " << gps_msg.latitude << ", " << gps_msg.longitude << ", " << gps_msg.altitude); - geodetic_converter_.initialiseReference(gps_msg.latitude, gps_msg.longitude, gps_msg.altitude); + RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] GPS reference initializing " << gps_msg->latitude << ", " << gps_msg->longitude << ", " << gps_msg->altitude); + geodetic_converter_.initialiseReference(gps_msg->latitude, gps_msg->longitude, gps_msg->altitude); } // todo do relative altitude, or add an option for the same? From dc5c10370db0bbb9821832c02be2babd179657cb Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Fri, 13 Aug 2021 07:27:27 -0700 Subject: [PATCH 012/123] - update nh_private to sub_node _ convert timer to wall timer --- .../include/airsim_ros_wrapper.h | 9 ++++-- .../include/pd_position_controller_simple.h | 10 +++--- ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 6 ++-- .../src/airsim_ros_wrapper.cpp | 32 +++++++++---------- .../src/pd_position_controller_simple.cpp | 21 ++++++------ .../pd_position_controller_simple_node.cpp | 3 +- 6 files changed, 45 insertions(+), 36 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 0180fcd9db..9b18f4127d 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -133,7 +133,7 @@ class AirsimROSWrapper CAR }; - AirsimROSWrapper(const rclcpp::Node& nh, const ros::NodeHandle& nh_private, const std::string& host_ip); + AirsimROSWrapper(const rclcpp::Node& nh, const rclcpp::Node& nh_private, const std::string& host_ip); ~AirsimROSWrapper(){}; void initialize_airsim(); @@ -332,8 +332,11 @@ class AirsimROSWrapper msr::airlib::RpcLibClientBase airsim_client_images_; msr::airlib::RpcLibClientBase airsim_client_lidar_; - ros::NodeHandle nh_; - ros::NodeHandle nh_private_; + rclcpp::Node nh_; + rclcpp::Node nh_private_; + + // ros::NodeHandle nh_; + // ros::NodeHandle nh_private_; // todo not sure if async spinners shuold be inside this class, or should be instantiated in airsim_node.cpp, and cb queues should be public // todo for multiple drones with multiple sensors, this won't scale. make it a part of VehicleROS? diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h index ee8d84b8f1..51131e348e 100755 --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -78,7 +78,7 @@ class DynamicConstraints class PIDPositionController { public: - PIDPositionController(const rclcpp::Node& nh, const ros::NodeHandle& nh_private); + PIDPositionController(const rclcpp::Node& nh, const rclcpp::Node& nh_private); // ROS service callbacks bool local_position_goal_srv_cb(airsim_interfaces::srv::SetLocalPosition::Request& request, airsim_interfaces::srv::SetLocalPosition::Response& response); @@ -90,7 +90,7 @@ class PIDPositionController void airsim_odom_cb(const nav_msgs::msg::Odometry::SharedPtr odom_msg); void home_geopoint_cb(const airsim_interfaces::msg::GPSYaw::SharedPtr gps_msg); - void update_control_cmd_timer_cb(const ros::TimerEvent& event); + void update_control_cmd_timer_cb(/* const ros::TimerEvent& event */); void reset_errors(); @@ -105,7 +105,8 @@ class PIDPositionController bool use_eth_lib_for_geodetic_conv_; rclcpp::Node nh_; - ros::NodeHandle nh_private_; + rclcpp::Node nh_private_; + // ros::NodeHandle nh_private_; DynamicConstraints constraints_; PIDParams params_; @@ -133,7 +134,8 @@ class PIDPositionController ros::ServiceServer gps_goal_srvr_; ros::ServiceServer gps_goal_override_srvr_; - ros::Timer update_control_cmd_timer_; + rclcpp::TimerBase::SharedPtr update_control_cmd_timer_; + //ros::Timer update_control_cmd_timer_; }; #endif /* _PID_POSITION_CONTROLLER_SIMPLE_ */ \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp index 86aa5abee3..f0eac90487 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -8,10 +8,12 @@ int main(int argc, char** argv) // ros::NodeHandle nh; rclcpp::init(argc, argv); rclcpp::Node nh = rclcpp::Node("airsim_node"); - ros::NodeHandle nh_private("~"); + rclcpp::Node nh_private = nh.create_sub_node("~"); + + // ros::NodeHandle nh_private("~"); std::string host_ip = "localhost"; - nh_private.getParam("host_ip", host_ip); + nh_private.get_parameter("host_ip", host_ip); AirsimROSWrapper airsim_ros_wrapper(nh, nh_private, host_ip); if (airsim_ros_wrapper.is_used_img_timer_cb_queue_) { diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index ad184c3b29..498f49e162 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -25,7 +25,7 @@ const std::unordered_map AirsimROSWrapper::image_type_int_to_s { 7, "Infrared" } }; -AirsimROSWrapper::AirsimROSWrapper(const rclcpp::Node& nh, const ros::NodeHandle& nh_private, const std::string& host_ip) +AirsimROSWrapper::AirsimROSWrapper(const rclcpp::Node& nh, const rclcpp::Node& nh_private, const std::string& host_ip) : nh_(nh), nh_private_(nh_private), img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ lidar_async_spinner_(1, &lidar_timer_cb_queue_) , // same as above, but for lidar @@ -89,9 +89,9 @@ void AirsimROSWrapper::initialize_ros() // ros params double update_airsim_control_every_n_sec; - nh_private_.getParam("is_vulkan", is_vulkan_); - nh_private_.getParam("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); - nh_private_.getParam("publish_clock", publish_clock_); + nh_private_.get_parameter("is_vulkan", is_vulkan_); + nh_private_.get_parameter("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); + nh_private_.get_parameter("publish_clock", publish_clock_); nh_private_.param("world_frame_id", world_frame_id_, world_frame_id_); odom_frame_id_ = world_frame_id_ == AIRSIM_FRAME_ID ? AIRSIM_ODOM_FRAME_ID : ENU_ODOM_FRAME_ID; nh_private_.param("odom_frame_id", odom_frame_id_, odom_frame_id_); @@ -99,8 +99,8 @@ void AirsimROSWrapper::initialize_ros() nh_private_.param("coordinate_system_enu", isENU_, isENU_); vel_cmd_duration_ = 0.05; // todo rosparam // todo enforce dynamics constraints in this node as well? - // nh_.getParam("max_vert_vel_", max_vert_vel_); - // nh_.getParam("max_horz_vel", max_horz_vel_) + // nh_.get_parameter("max_vert_vel_", max_vert_vel_); + // nh_.get_parameter("max_horz_vel", max_horz_vel_) create_ros_pubs_from_settings_json(); airsim_control_update_timer_ = nh_private_.createTimer(ros::Duration(update_airsim_control_every_n_sec), &AirsimROSWrapper::drone_state_timer_cb, this); @@ -160,11 +160,11 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() drone->vel_cmd_body_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_body_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name)); // todo ros::TransportHints().tcpNoDelay(); drone->vel_cmd_world_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_world_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name)); - drone->takeoff_srvr = nh_private_.advertiseService(curr_vehicle_name + "/takeoff", + drone->takeoff_srvr = nh_private_.create_service(curr_vehicle_name + "/takeoff", boost::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); - drone->land_srvr = nh_private_.advertiseService(curr_vehicle_name + "/land", + drone->land_srvr = nh_private_.create_service(curr_vehicle_name + "/land", boost::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); - // vehicle_ros.reset_srvr = nh_private_.advertiseService(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); + // vehicle_ros.reset_srvr = nh_private_.create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); } else { auto car = static_cast(vehicle_ros.get()); @@ -277,8 +277,8 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // add takeoff and land all services if more than 2 drones if (vehicle_name_ptr_map_.size() > 1 && airsim_mode_ == AIRSIM_MODE::DRONE) { - takeoff_all_srvr_ = nh_private_.advertiseService("all_robots/takeoff", &AirsimROSWrapper::takeoff_all_srv_cb, this); - land_all_srvr_ = nh_private_.advertiseService("all_robots/land", &AirsimROSWrapper::land_all_srv_cb, this); + takeoff_all_srvr_ = nh_private_.create_service("all_robots/takeoff", &AirsimROSWrapper::takeoff_all_srv_cb, this); + land_all_srvr_ = nh_private_.create_service("all_robots/land", &AirsimROSWrapper::land_all_srv_cb, this); // gimbal_angle_quat_cmd_sub_ = nh_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); @@ -288,12 +288,12 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() vel_cmd_group_body_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_group_body_frame_cb, this); vel_cmd_group_world_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_group_world_frame_cb, this); - takeoff_group_srvr_ = nh_private_.advertiseService("group_of_robots/takeoff", &AirsimROSWrapper::takeoff_group_srv_cb, this); - land_group_srvr_ = nh_private_.advertiseService("group_of_robots/land", &AirsimROSWrapper::land_group_srv_cb, this); + takeoff_group_srvr_ = nh_private_.create_service("group_of_robots/takeoff", &AirsimROSWrapper::takeoff_group_srv_cb, this); + land_group_srvr_ = nh_private_.create_service("group_of_robots/land", &AirsimROSWrapper::land_group_srv_cb, this); } // todo add per vehicle reset in AirLib API - reset_srvr_ = nh_private_.advertiseService("reset", &AirsimROSWrapper::reset_srv_cb, this); + reset_srvr_ = nh_private_.create_service("reset", &AirsimROSWrapper::reset_srv_cb, this); if (publish_clock_) { clock_pub_ = nh_private_.advertise("clock", 1); @@ -302,7 +302,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // if >0 cameras, add one more thread for img_request_timer_cb if (!airsim_img_request_vehicle_name_pair_vec_.empty()) { double update_airsim_img_response_every_n_sec; - nh_private_.getParam("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); + nh_private_.get_parameter("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); ros::TimerOptions timer_options(ros::Duration(update_airsim_img_response_every_n_sec), boost::bind(&AirsimROSWrapper::img_response_timer_cb, this, _1), &img_timer_cb_queue_); airsim_img_response_timer_ = nh_private_.createTimer(timer_options); @@ -312,7 +312,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // lidars update on their own callback/thread at a given rate if (lidar_cnt > 0) { double update_lidar_every_n_sec; - nh_private_.getParam("update_lidar_every_n_sec", update_lidar_every_n_sec); + nh_private_.get_parameter("update_lidar_every_n_sec", update_lidar_every_n_sec); // nh_private_.setCallbackQueue(&lidar_timer_cb_queue_); ros::TimerOptions timer_options(ros::Duration(update_lidar_every_n_sec), boost::bind(&AirsimROSWrapper::lidar_timer_cb, this, _1), &lidar_timer_cb_queue_); airsim_lidar_update_timer_ = nh_private_.createTimer(timer_options); diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 82f74adb33..6237b498ea 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -32,7 +32,7 @@ bool DynamicConstraints::load_from_rosparams(const rclcpp::Node& nh) return found; } -PIDPositionController::PIDPositionController(const rclcpp::Node& nh, const ros::NodeHandle& nh_private) +PIDPositionController::PIDPositionController(const rclcpp::Node& nh, const rclcpp::Node& nh_private) : nh_(nh), nh_private_(nh_private), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) { params_.load_from_rosparams(nh_private_); @@ -54,29 +54,30 @@ void PIDPositionController::initialize_ros() vel_cmd_ = airsim_interfaces::msg::VelCmd(); // ROS params double update_control_every_n_sec; - nh_private_.getParam("update_control_every_n_sec", update_control_every_n_sec); + nh_private_.get_parameter("update_control_every_n_sec", update_control_every_n_sec); std::string vehicle_name; while (vehicle_name == "") { - nh_private_.getParam("/vehicle_name", vehicle_name); + nh_private_.get_parameter("/vehicle_name", vehicle_name); RCLCPP_INFO_STREAM(nh_.get_logger() ,"Waiting vehicle name"); } // ROS publishers - airsim_vel_cmd_world_frame_pub_ = nh_private_.advertise("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); + airsim_vel_cmd_world_frame_pub_ = nh_private_.create_publisher("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); // ROS subscribers airsim_odom_sub_ = nh_.create_subscription("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, std::bind(&PIDPositionController::airsim_odom_cb, this, _1)); home_geopoint_sub_ = nh_.create_subscription("/airsim_node/home_geo_point", 50, std::bind(&PIDPositionController::home_geopoint_cb, this, _1)); // todo publish this under global nodehandle / "airsim node" and hide it from user - local_position_goal_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal", &PIDPositionController::local_position_goal_srv_cb, this); - local_position_goal_override_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal/override", &PIDPositionController::local_position_goal_srv_override_cb, this); - gps_goal_srvr_ = nh_.advertiseService("/airsim_node/gps_goal", &PIDPositionController::gps_goal_srv_cb, this); - gps_goal_override_srvr_ = nh_.advertiseService("/airsim_node/gps_goal/override", &PIDPositionController::gps_goal_srv_override_cb, this); + local_position_goal_srvr_ = nh_.create_service("/airsim_node/local_position_goal", &PIDPositionController::local_position_goal_srv_cb, this); + local_position_goal_override_srvr_ = nh_.create_service("/airsim_node/local_position_goal/override", &PIDPositionController::local_position_goal_srv_override_cb, this); + gps_goal_srvr_ = nh_.create_service("/airsim_node/gps_goal", &PIDPositionController::gps_goal_srv_cb, this); + gps_goal_override_srvr_ = nh_.create_service("/airsim_node/gps_goal/override", &PIDPositionController::gps_goal_srv_override_cb, this); // ROS timers - update_control_cmd_timer_ = nh_private_.createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); + //update_control_cmd_timer_ = nh_private_.createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); + update_control_cmd_timer_ = nh_private_.create_wall_timer(std::chrono::duration(update_control_every_n_sec), std::bind(&PIDPositionController::update_control_cmd_timer_cb, this)); } void PIDPositionController::airsim_odom_cb(const nav_msgs::msg::Odometry::SharedPtr odom_msg) @@ -261,7 +262,7 @@ bool PIDPositionController::gps_goal_srv_override_cb(airsim_interfaces::srv::Set return true; } -void PIDPositionController::update_control_cmd_timer_cb(const ros::TimerEvent& event) +void PIDPositionController::update_control_cmd_timer_cb(/* const ros::TimerEvent& event */) { // todo check if odometry is too old!! // if no odom, don't do anything. diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp index 8250eb4659..c7e01d3533 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp @@ -7,7 +7,8 @@ int main(int argc, char** argv) // ros::NodeHandle nh; rclcpp::init(argc, argv); rclcpp::Node nh = rclcpp::Node("pid_position_controller_simple_node"); - ros::NodeHandle nh_private("~"); + rclcpp::Node nh_private = nh.create_sub_node("~"); + // ros::NodeHandle nh_private("~"); PIDPositionController controller(nh, nh_private); From cf7c2213f0c2ebdab6e5ca8c37eb388eefe31702 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Fri, 13 Aug 2021 07:33:26 -0700 Subject: [PATCH 013/123] - add SharedPtr to Publisher --- .../src/airsim_ros_pkgs/include/pd_position_controller_simple.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h index 51131e348e..2983d0d87d 100755 --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -126,7 +126,7 @@ class PIDPositionController bool got_goal_once_; // todo check for odom msg being older than n sec - rclcpp::Publisher airsim_vel_cmd_world_frame_pub_; + rclcpp::Publisher::SharedPtr airsim_vel_cmd_world_frame_pub_; rclcpp::Subscription::SharedPtr airsim_odom_sub_; rclcpp::Subscription::SharedPtr home_geopoint_sub_; ros::ServiceServer local_position_goal_srvr_; From 7cff7e8b1c058629de938d7053d06b639bd8b88c Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Fri, 13 Aug 2021 08:24:09 -0700 Subject: [PATCH 014/123] - fix cb --- .../include/pd_position_controller_simple.h | 27 +++++---- .../src/pd_position_controller_simple.cpp | 56 +++++++++---------- .../pd_position_controller_simple_node.cpp | 5 +- 3 files changed, 48 insertions(+), 40 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h index 2983d0d87d..00d9bd5c3a 100755 --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -78,13 +78,13 @@ class DynamicConstraints class PIDPositionController { public: - PIDPositionController(const rclcpp::Node& nh, const rclcpp::Node& nh_private); + PIDPositionController(const std::shared_ptr nh, const rclcpp::Node& nh_private); // ROS service callbacks - bool local_position_goal_srv_cb(airsim_interfaces::srv::SetLocalPosition::Request& request, airsim_interfaces::srv::SetLocalPosition::Response& response); - bool local_position_goal_srv_override_cb(airsim_interfaces::srv::SetLocalPosition::Request& request, airsim_interfaces::srv::SetLocalPosition::Response& response); - bool gps_goal_srv_cb(airsim_interfaces::srv::SetGPSPosition::Request& request, airsim_interfaces::srv::SetGPSPosition::Response& response); - bool gps_goal_srv_override_cb(airsim_interfaces::srv::SetGPSPosition::Request& request, airsim_interfaces::srv::SetGPSPosition::Response& response); + bool local_position_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response); + bool local_position_goal_srv_override_cb(const std::shared_ptr request, std::shared_ptr response); + bool gps_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response); + bool gps_goal_srv_override_cb(const std::shared_ptr request, std::shared_ptr response); // ROS subscriber callbacks void airsim_odom_cb(const nav_msgs::msg::Odometry::SharedPtr odom_msg); @@ -104,7 +104,7 @@ class PIDPositionController geodetic_converter::GeodeticConverter geodetic_converter_; bool use_eth_lib_for_geodetic_conv_; - rclcpp::Node nh_; + const std::shared_ptr nh_; rclcpp::Node nh_private_; // ros::NodeHandle nh_private_; @@ -129,10 +129,17 @@ class PIDPositionController rclcpp::Publisher::SharedPtr airsim_vel_cmd_world_frame_pub_; rclcpp::Subscription::SharedPtr airsim_odom_sub_; rclcpp::Subscription::SharedPtr home_geopoint_sub_; - ros::ServiceServer local_position_goal_srvr_; - ros::ServiceServer local_position_goal_override_srvr_; - ros::ServiceServer gps_goal_srvr_; - ros::ServiceServer gps_goal_override_srvr_; + + rclcpp::Service::SharedPtr local_position_goal_srvr_; + rclcpp::Service::SharedPtr local_position_goal_override_srvr_; + rclcpp::Service::SharedPtr gps_goal_srvr_; + rclcpp::Service::SharedPtr gps_goal_override_srvr_; + + + // ros::ServiceServer local_position_goal_srvr_; + // ros::ServiceServer local_position_goal_override_srvr_; + // ros::ServiceServer gps_goal_srvr_; + // ros::ServiceServer gps_goal_override_srvr_; rclcpp::TimerBase::SharedPtr update_control_cmd_timer_; //ros::Timer update_control_cmd_timer_; diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 6237b498ea..43b2667320 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -1,5 +1,5 @@ #include "pd_position_controller_simple.h" -using std::placeholders::_1; +using namespace std::placeholders; bool PIDParams::load_from_rosparams(const rclcpp::Node& nh) { @@ -32,7 +32,7 @@ bool DynamicConstraints::load_from_rosparams(const rclcpp::Node& nh) return found; } -PIDPositionController::PIDPositionController(const rclcpp::Node& nh, const rclcpp::Node& nh_private) +PIDPositionController::PIDPositionController(const std::shared_ptr nh, const rclcpp::Node& nh_private) : nh_(nh), nh_private_(nh_private), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) { params_.load_from_rosparams(nh_private_); @@ -70,10 +70,10 @@ void PIDPositionController::initialize_ros() airsim_odom_sub_ = nh_.create_subscription("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, std::bind(&PIDPositionController::airsim_odom_cb, this, _1)); home_geopoint_sub_ = nh_.create_subscription("/airsim_node/home_geo_point", 50, std::bind(&PIDPositionController::home_geopoint_cb, this, _1)); // todo publish this under global nodehandle / "airsim node" and hide it from user - local_position_goal_srvr_ = nh_.create_service("/airsim_node/local_position_goal", &PIDPositionController::local_position_goal_srv_cb, this); - local_position_goal_override_srvr_ = nh_.create_service("/airsim_node/local_position_goal/override", &PIDPositionController::local_position_goal_srv_override_cb, this); - gps_goal_srvr_ = nh_.create_service("/airsim_node/gps_goal", &PIDPositionController::gps_goal_srv_cb, this); - gps_goal_override_srvr_ = nh_.create_service("/airsim_node/gps_goal/override", &PIDPositionController::gps_goal_srv_override_cb, this); + local_position_goal_srvr_ = nh_.create_service("/airsim_node/local_position_goal", std::bind(&PIDPositionController::local_position_goal_srv_cb, this, _1, _2)); + local_position_goal_override_srvr_ = nh_.create_service("/airsim_node/local_position_goal/override", std::bind(&PIDPositionController::local_position_goal_srv_override_cb, this, _1, _2)); + gps_goal_srvr_ = nh_.create_service("/airsim_node/gps_goal", std::bind(&PIDPositionController::gps_goal_srv_cb, this, _1, _2)); + gps_goal_override_srvr_ = nh_.create_service("/airsim_node/gps_goal/override", std::bind(&PIDPositionController::gps_goal_srv_override_cb, this, _1, _2)); // ROS timers //update_control_cmd_timer_ = nh_private_.createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); @@ -104,7 +104,7 @@ void PIDPositionController::check_reached_goal() reached_goal_ = true; } -bool PIDPositionController::local_position_goal_srv_cb(airsim_interfaces::srv::SetLocalPosition::Request& request, airsim_interfaces::srv::SetLocalPosition::Response& response) +bool PIDPositionController::local_position_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response) { // this tells the update timer callback to not do active hovering if (!got_goal_once_) @@ -112,15 +112,15 @@ bool PIDPositionController::local_position_goal_srv_cb(airsim_interfaces::srv::S if (has_goal_ && !reached_goal_) { // todo maintain array of position goals - RCLCPP_ERROR_STREAM(nh_.get_logger(), "[PIDPositionController] denying position goal request. I am still following the previous goal"); + RCLCPP_ERROR_STREAM(nh_.get_logger(), "[PIDPositionController] denying position goal request-> I am still following the previous goal"); return false; } if (!has_goal_) { - target_position_.x = request.x; - target_position_.y = request.y; - target_position_.z = request.z; - target_position_.yaw = request.yaw; + target_position_.x = request->x; + target_position_.y = request->y; + target_position_.z = request->z; + target_position_.yaw = request->yaw; RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks @@ -136,16 +136,16 @@ bool PIDPositionController::local_position_goal_srv_cb(airsim_interfaces::srv::S return false; } -bool PIDPositionController::local_position_goal_srv_override_cb(airsim_interfaces::srv::SetLocalPosition::Request& request, airsim_interfaces::srv::SetLocalPosition::Response& response) +bool PIDPositionController::local_position_goal_srv_override_cb(const std::shared_ptr request, std::shared_ptr response) { // this tells the update timer callback to not do active hovering if (!got_goal_once_) got_goal_once_ = true; - target_position_.x = request.x; - target_position_.y = request.y; - target_position_.z = request.z; - target_position_.yaw = request.yaw; + target_position_.x = request->x; + target_position_.y = request->y; + target_position_.z = request->z; + target_position_.yaw = request->yaw; RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks @@ -167,24 +167,24 @@ void PIDPositionController::home_geopoint_cb(const airsim_interfaces::msg::GPSYa } // todo do relative altitude, or add an option for the same? -bool PIDPositionController::gps_goal_srv_cb(airsim_interfaces::srv::SetGPSPosition::Request& request, airsim_interfaces::srv::SetGPSPosition::Response& response) +bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response) { if (!has_home_geo_) { RCLCPP_ERROR_STREAM(nh_.get_logger(), "[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); - response.success = false; + response->success = false; } // convert GPS goal to NED goal if (!has_goal_) { - msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); + msr::airlib::GeoPoint goal_gps_point(request->latitude, request->longitude, request->altitude); msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); bool use_eth_lib = true; if (use_eth_lib_for_geodetic_conv_) { double initial_latitude, initial_longitude, initial_altitude; geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); double n, e, d; - geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); + geodetic_converter_.geodetic2Ned(request->latitude, request->longitude, request->altitude, &n, &e, &d); // RCLCPP_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); target_position_.x = n; target_position_.y = e; @@ -200,7 +200,7 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_interfaces::srv::SetGPSPositi target_position_.z = ned_goal[2]; } - target_position_.yaw = request.yaw; // todo + target_position_.yaw = request->yaw; // todo RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); @@ -218,23 +218,23 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_interfaces::srv::SetGPSPositi } // todo do relative altitude, or add an option for the same? -bool PIDPositionController::gps_goal_srv_override_cb(airsim_interfaces::srv::SetGPSPosition::Request& request, airsim_interfaces::srv::SetGPSPosition::Response& response) +bool PIDPositionController::gps_goal_srv_override_cb(const std::shared_ptr request, std::shared_ptr response) { if (!has_home_geo_) { RCLCPP_ERROR_STREAM(nh_.get_logger(), "[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); - response.success = false; + response->success = false; } // convert GPS goal to NED goal - msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); + msr::airlib::GeoPoint goal_gps_point(request->latitude, request->longitude, request->altitude); msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); bool use_eth_lib = true; if (use_eth_lib_for_geodetic_conv_) { double initial_latitude, initial_longitude, initial_altitude; geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); double n, e, d; - geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); + geodetic_converter_.geodetic2Ned(request->latitude, request->longitude, request->altitude, &n, &e, &d); // RCLCPP_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); target_position_.x = n; target_position_.y = e; @@ -250,7 +250,7 @@ bool PIDPositionController::gps_goal_srv_override_cb(airsim_interfaces::srv::Set target_position_.z = ned_goal[2]; } - target_position_.yaw = request.yaw; // todo + target_position_.yaw = request->yaw; // todo RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); @@ -340,5 +340,5 @@ void PIDPositionController::enforce_dynamic_constraints() void PIDPositionController::publish_control_cmd() { - airsim_vel_cmd_world_frame_pub_.publish(vel_cmd_); + airsim_vel_cmd_world_frame_pub_->publish(vel_cmd_); } \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp index c7e01d3533..907038b790 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp @@ -6,8 +6,9 @@ int main(int argc, char** argv) // ros::init(argc, argv, "pid_position_controller_simple_node"); // ros::NodeHandle nh; rclcpp::init(argc, argv); - rclcpp::Node nh = rclcpp::Node("pid_position_controller_simple_node"); - rclcpp::Node nh_private = nh.create_sub_node("~"); + // std::shared_ptr node = rclcpp::Node::make_shared("add_two_ints_server"); + std::shared_ptr nh = rclcpp::Node::make_shared("pid_position_controller_simple_node"); + std::shared_ptr nh_private = nh.create_sub_node("~"); // ros::NodeHandle nh_private("~"); PIDPositionController controller(nh, nh_private); From 1187ac167fb3e71c3a975516deafdf2e5fad5465 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Fri, 13 Aug 2021 08:35:51 -0700 Subject: [PATCH 015/123] - commit everything after PD_position node pass --- .../include/airsim_ros_wrapper.h | 12 +-- .../include/pd_position_controller_simple.h | 9 +- .../src/pd_position_controller_simple.cpp | 90 +++++++++---------- 3 files changed, 56 insertions(+), 55 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 9b18f4127d..48e7315fa4 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -40,20 +40,20 @@ STRICT_MODE_OFF //todo what does this do? #include #include #include -#include -#include +//#include +//#include #include #include #include -#include +#include #include -#include +#include #include //hector_uav_msgs defunct? #include #include #include -#include -#include +#include +#include #include #include #include diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h index 00d9bd5c3a..23ffb690ad 100755 --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -47,7 +47,7 @@ STRICT_MODE_OFF //todo what does this do? { } - bool load_from_rosparams(const rclcpp::Node& nh); + bool load_from_rosparams(const std::shared_ptr nh); }; // todo should be a common representation @@ -72,13 +72,13 @@ class DynamicConstraints { } - bool load_from_rosparams(const rclcpp::Node& nh); + bool load_from_rosparams(const std::shared_ptr nh); }; class PIDPositionController { public: - PIDPositionController(const std::shared_ptr nh, const rclcpp::Node& nh_private); + PIDPositionController(const std::shared_ptr nh, const std::shared_ptr nh_private); // ROS service callbacks bool local_position_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response); @@ -105,7 +105,8 @@ class PIDPositionController bool use_eth_lib_for_geodetic_conv_; const std::shared_ptr nh_; - rclcpp::Node nh_private_; + const std::shared_ptr nh_private_; +// rclcpp::Node ; // ros::NodeHandle nh_private_; DynamicConstraints constraints_; diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 43b2667320..e9f6687a1f 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -1,38 +1,38 @@ #include "pd_position_controller_simple.h" using namespace std::placeholders; -bool PIDParams::load_from_rosparams(const rclcpp::Node& nh) +bool PIDParams::load_from_rosparams(const shared_ptr nh) { bool found = true; - found = found && nh.get_parameter("kp_x", kp_x); - found = found && nh.get_parameter("kp_y", kp_y); - found = found && nh.get_parameter("kp_z", kp_z); - found = found && nh.get_parameter("kp_yaw", kp_yaw); + found = found && nh->get_parameter("kp_x", kp_x); + found = found && nh->get_parameter("kp_y", kp_y); + found = found && nh->get_parameter("kp_z", kp_z); + found = found && nh->get_parameter("kp_yaw", kp_yaw); - found = found && nh.get_parameter("kd_x", kd_x); - found = found && nh.get_parameter("kd_y", kd_y); - found = found && nh.get_parameter("kd_z", kd_z); - found = found && nh.get_parameter("kd_yaw", kd_yaw); + found = found && nh->get_parameter("kd_x", kd_x); + found = found && nh->get_parameter("kd_y", kd_y); + found = found && nh->get_parameter("kd_z", kd_z); + found = found && nh->get_parameter("kd_yaw", kd_yaw); - found = found && nh.get_parameter("reached_thresh_xyz", reached_thresh_xyz); - found = found && nh.get_parameter("reached_yaw_degrees", reached_yaw_degrees); + found = found && nh->get_parameter("reached_thresh_xyz", reached_thresh_xyz); + found = found && nh->get_parameter("reached_yaw_degrees", reached_yaw_degrees); return found; } -bool DynamicConstraints::load_from_rosparams(const rclcpp::Node& nh) +bool DynamicConstraints::load_from_rosparams(const std::shared_ptr nh) { bool found = true; - found = found && nh.get_parameter("max_vel_horz_abs", max_vel_horz_abs); - found = found && nh.get_parameter("max_vel_vert_abs", max_vel_vert_abs); - found = found && nh.get_parameter("max_yaw_rate_degree", max_yaw_rate_degree); + found = found && nh->get_parameter("max_vel_horz_abs", max_vel_horz_abs); + found = found && nh->get_parameter("max_vel_vert_abs", max_vel_vert_abs); + found = found && nh->get_parameter("max_yaw_rate_degree", max_yaw_rate_degree); return found; } -PIDPositionController::PIDPositionController(const std::shared_ptr nh, const rclcpp::Node& nh_private) +PIDPositionController::PIDPositionController(const std::shared_ptr nh, const std::shared_ptr nh_private) : nh_(nh), nh_private_(nh_private), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) { params_.load_from_rosparams(nh_private_); @@ -54,30 +54,30 @@ void PIDPositionController::initialize_ros() vel_cmd_ = airsim_interfaces::msg::VelCmd(); // ROS params double update_control_every_n_sec; - nh_private_.get_parameter("update_control_every_n_sec", update_control_every_n_sec); + nh_private_->get_parameter("update_control_every_n_sec", update_control_every_n_sec); std::string vehicle_name; while (vehicle_name == "") { - nh_private_.get_parameter("/vehicle_name", vehicle_name); - RCLCPP_INFO_STREAM(nh_.get_logger() ,"Waiting vehicle name"); + nh_private_->get_parameter("/vehicle_name", vehicle_name); + RCLCPP_INFO_STREAM(nh_->get_logger() ,"Waiting vehicle name"); } // ROS publishers - airsim_vel_cmd_world_frame_pub_ = nh_private_.create_publisher("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); + airsim_vel_cmd_world_frame_pub_ = nh_private_->create_publisher("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); // ROS subscribers - airsim_odom_sub_ = nh_.create_subscription("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, std::bind(&PIDPositionController::airsim_odom_cb, this, _1)); - home_geopoint_sub_ = nh_.create_subscription("/airsim_node/home_geo_point", 50, std::bind(&PIDPositionController::home_geopoint_cb, this, _1)); + airsim_odom_sub_ = nh_->create_subscription("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, std::bind(&PIDPositionController::airsim_odom_cb, this, _1)); + home_geopoint_sub_ = nh_->create_subscription("/airsim_node/home_geo_point", 50, std::bind(&PIDPositionController::home_geopoint_cb, this, _1)); // todo publish this under global nodehandle / "airsim node" and hide it from user - local_position_goal_srvr_ = nh_.create_service("/airsim_node/local_position_goal", std::bind(&PIDPositionController::local_position_goal_srv_cb, this, _1, _2)); - local_position_goal_override_srvr_ = nh_.create_service("/airsim_node/local_position_goal/override", std::bind(&PIDPositionController::local_position_goal_srv_override_cb, this, _1, _2)); - gps_goal_srvr_ = nh_.create_service("/airsim_node/gps_goal", std::bind(&PIDPositionController::gps_goal_srv_cb, this, _1, _2)); - gps_goal_override_srvr_ = nh_.create_service("/airsim_node/gps_goal/override", std::bind(&PIDPositionController::gps_goal_srv_override_cb, this, _1, _2)); + local_position_goal_srvr_ = nh_->create_service("/airsim_node/local_position_goal", std::bind(&PIDPositionController::local_position_goal_srv_cb, this, _1, _2)); + local_position_goal_override_srvr_ = nh_->create_service("/airsim_node/local_position_goal/override", std::bind(&PIDPositionController::local_position_goal_srv_override_cb, this, _1, _2)); + gps_goal_srvr_ = nh_->create_service("/airsim_node/gps_goal", std::bind(&PIDPositionController::gps_goal_srv_cb, this, _1, _2)); + gps_goal_override_srvr_ = nh_->create_service("/airsim_node/gps_goal/override", std::bind(&PIDPositionController::gps_goal_srv_override_cb, this, _1, _2)); // ROS timers - //update_control_cmd_timer_ = nh_private_.createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); - update_control_cmd_timer_ = nh_private_.create_wall_timer(std::chrono::duration(update_control_every_n_sec), std::bind(&PIDPositionController::update_control_cmd_timer_cb, this)); + //update_control_cmd_timer_ = nh_private_->createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); + update_control_cmd_timer_ = nh_private_->create_wall_timer(std::chrono::duration(update_control_every_n_sec), std::bind(&PIDPositionController::update_control_cmd_timer_cb, this)); } void PIDPositionController::airsim_odom_cb(const nav_msgs::msg::Odometry::SharedPtr odom_msg) @@ -112,7 +112,7 @@ bool PIDPositionController::local_position_goal_srv_cb(const std::shared_ptr I am still following the previous goal"); + RCLCPP_ERROR_STREAM(nh_->get_logger(), "[PIDPositionController] denying position goal request-> I am still following the previous goal"); return false; } @@ -121,7 +121,7 @@ bool PIDPositionController::local_position_goal_srv_cb(const std::shared_ptry; target_position_.z = request->z; target_position_.yaw = request->yaw; - RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -132,7 +132,7 @@ bool PIDPositionController::local_position_goal_srv_cb(const std::shared_ptrget_logger(), "[PIDPositionController] Already have goal and have reached it"); return false; } @@ -146,7 +146,7 @@ bool PIDPositionController::local_position_goal_srv_override_cb(const std::share target_position_.y = request->y; target_position_.z = request->z; target_position_.yaw = request->yaw; - RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -162,7 +162,7 @@ void PIDPositionController::home_geopoint_cb(const airsim_interfaces::msg::GPSYa return; gps_home_msg_ = *gps_msg; has_home_geo_ = true; - RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] GPS reference initializing " << gps_msg->latitude << ", " << gps_msg->longitude << ", " << gps_msg->altitude); + RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] GPS reference initializing " << gps_msg->latitude << ", " << gps_msg->longitude << ", " << gps_msg->altitude); geodetic_converter_.initialiseReference(gps_msg->latitude, gps_msg->longitude, gps_msg->altitude); } @@ -170,7 +170,7 @@ void PIDPositionController::home_geopoint_cb(const airsim_interfaces::msg::GPSYa bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response) { if (!has_home_geo_) { - RCLCPP_ERROR_STREAM(nh_.get_logger(), "[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + RCLCPP_ERROR_STREAM(nh_->get_logger(), "[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); response->success = false; } @@ -192,7 +192,7 @@ bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptryaw; // todo - RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -213,7 +213,7 @@ bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptrget_logger(), "[PIDPositionController] Goal already received, ignoring!"); return false; } @@ -221,7 +221,7 @@ bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response) { if (!has_home_geo_) { - RCLCPP_ERROR_STREAM(nh_.get_logger(), "[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + RCLCPP_ERROR_STREAM(nh_->get_logger(), "[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); response->success = false; } @@ -242,7 +242,7 @@ bool PIDPositionController::gps_goal_srv_override_cb(const std::shared_ptryaw; // todo - RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -267,19 +267,19 @@ void PIDPositionController::update_control_cmd_timer_cb(/* const ros::TimerEvent // todo check if odometry is too old!! // if no odom, don't do anything. if (!has_odom_) { - RCLCPP_ERROR_STREAM(nh_.get_logger(), "[PIDPositionController] Waiting for odometry!"); + RCLCPP_ERROR_STREAM(nh_->get_logger(), "[PIDPositionController] Waiting for odometry!"); return; } if (has_goal_) { check_reached_goal(); if (reached_goal_) { - RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] Reached goal! Hovering at position."); + RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] Reached goal! Hovering at position."); has_goal_ = false; // dear future self, this function doesn't return coz we need to keep on actively hovering at last goal pose. don't act smart } else { - RCLCPP_INFO_STREAM(nh_.get_logger(), "[PIDPositionController] Moving to goal."); + RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] Moving to goal."); } } From 86b4fcd15e79fa384cba3ccb57f004a6fc65c42f Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sat, 14 Aug 2021 11:20:23 -0700 Subject: [PATCH 016/123] - commit some convrsions airsim_ros_wrapper --- .../include/airsim_ros_wrapper.h | 91 +++++++-------- .../include/pd_position_controller_simple.h | 8 +- .../src/airsim_ros_wrapper.cpp | 104 +++++++++--------- 3 files changed, 102 insertions(+), 101 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 48e7315fa4..507f679fe3 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -133,7 +133,7 @@ class AirsimROSWrapper CAR }; - AirsimROSWrapper(const rclcpp::Node& nh, const rclcpp::Node& nh_private, const std::string& host_ip); + AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_private, const std::string& host_ip); ~AirsimROSWrapper(){}; void initialize_airsim(); @@ -161,20 +161,20 @@ class AirsimROSWrapper std::string vehicle_name; /// All things ROS - rclcpp::Publisher odom_local_pub; - rclcpp::Publisher global_gps_pub; - rclcpp::Publisher env_pub; - airsim_interfaces::Environment env_msg; + rclcpp::Publisher>::SharedPtr odom_local_pub; + rclcpp::Publisher::SharedPtr global_gps_pub; + rclcpp::Publisher::SharedPtr env_pub; + airsim_interfaces::msg::Environment env_msg; std::vector sensor_pubs; // handle lidar seperately for max performance as data is collected on its own thread/callback std::vector lidar_pubs; nav_msgs::msg::Odometry curr_odom; - sensor_msgs::NavSatFix gps_sensor_msg; + sensor_msgs::msg::NavSatFix gps_sensor_msg; - std::vector static_tf_msg_vec; + std::vector static_tf_msg_vec; - ros::Time stamp; + rclcpp::TimerBase::SharedPtrstamp; std::string odom_frame_id; /// Status @@ -189,7 +189,7 @@ class AirsimROSWrapper rclcpp::Subscription car_cmd_sub; rclcpp::Publisher car_state_pub; - airsim_interfaces::CarState car_state_msg; + airsim_interfaces::msg::CarState car_state_msg; bool has_car_cmd; msr::airlib::CarApiBase::CarControls car_cmd; @@ -205,8 +205,8 @@ class AirsimROSWrapper rclcpp::Subscription vel_cmd_body_frame_sub; rclcpp::Subscription vel_cmd_world_frame_sub; - ros::ServiceServer takeoff_srvr; - ros::ServiceServer land_srvr; + rclcpp::Service<>::SharedPtr takeoff_srvr; + rclcpp::Service<>::SharedPtr land_srvr; bool has_vel_cmd; VelCmd vel_cmd; @@ -231,33 +231,33 @@ class AirsimROSWrapper void vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd& msg); // void vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd& msg, const std::string& vehicle_name); - void gimbal_angle_quat_cmd_cb(const airsim_interfaces::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg); - void gimbal_angle_euler_cmd_cb(const airsim_interfaces::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg); + void gimbal_angle_quat_cmd_cb(const airsim_interfaces::msg::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg); + void gimbal_angle_euler_cmd_cb(const airsim_interfaces::msg::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg); // commands - void car_cmd_cb(const airsim_interfaces::CarControls::ConstPtr& msg, const std::string& vehicle_name); + void car_cmd_cb(const airsim_interfaces::msg::CarControls::ConstPtr& msg, const std::string& vehicle_name); void update_commands(); // state, returns the simulation timestamp best guess based on drone state timestamp, airsim needs to return timestap for environment - ros::Time update_state(); + rclcpp::TimerBase::SharedPtr update_state(); void update_and_publish_static_transforms(VehicleROS* vehicle_ros); void publish_vehicle_state(); /// ROS service callbacks - bool takeoff_srv_cb(airsim_interfaces::Takeoff::Request& request, airsim_interfaces::Takeoff::Response& response, const std::string& vehicle_name); - bool takeoff_group_srv_cb(airsim_interfaces::TakeoffGroup::Request& request, airsim_interfaces::TakeoffGroup::Response& response); - bool takeoff_all_srv_cb(airsim_interfaces::Takeoff::Request& request, airsim_interfaces::Takeoff::Response& response); - bool land_srv_cb(airsim_interfaces::Land::Request& request, airsim_interfaces::Land::Response& response, const std::string& vehicle_name); - bool land_group_srv_cb(airsim_interfaces::LandGroup::Request& request, airsim_interfaces::LandGroup::Response& response); - bool land_all_srv_cb(airsim_interfaces::Land::Request& request, airsim_interfaces::Land::Response& response); - bool reset_srv_cb(airsim_interfaces::Reset::Request& request, airsim_interfaces::Reset::Response& response); + bool takeoff_srv_cb(airsim_interfaces::srv::Takeoff::Request& request, airsim_interfaces::srv::Takeoff::Response& response, const std::string& vehicle_name); + bool takeoff_group_srv_cb(airsim_interfaces::srv::TakeoffGroup::Request& request, airsim_interfaces::srv::TakeoffGroup::Response& response); + bool takeoff_all_srv_cb(airsim_interfaces::srv::Takeoff::Request& request, airsim_interfaces::srv::Takeoff::Response& response); + bool land_srv_cb(airsim_interfaces::srv::Land::Request& request, airsim_interfaces::srv::Land::Response& response, const std::string& vehicle_name); + bool land_group_srv_cb(airsim_interfaces::srv::LandGroup::Request& request, airsim_interfaces::srv::LandGroup::Response& response); + bool land_all_srv_cb(airsim_interfaces::srv::Land::Request& request, airsim_interfaces::srv::Land::Response& response); + bool reset_srv_cb(airsim_interfaces::srv::Reset::Request& request, airsim_interfaces::srv::Reset::Response& response); /// ROS tf broadcasters void publish_camera_tf(const ImageResponse& img_response, const ros::Time& ros_time, const std::string& frame_id, const std::string& child_frame_id); void publish_odom_tf(const nav_msgs::msg::Odometry& odom_msg); /// camera helper methods - sensor_msgs::CameraInfo generate_cam_info(const std::string& camera_name, const CameraSetting& camera_setting, const CaptureSetting& capture_setting) const; + sensor_msgs::msg::CameraInfo generate_cam_info(const std::string& camera_name, const CameraSetting& camera_setting, const CaptureSetting& capture_setting) const; cv::Mat manual_decode_depth(const ImageResponse& img_response) const; sensor_msgs::ImagePtr get_img_msg_from_response(const ImageResponse& img_response, const ros::Time curr_ros_time, const std::string frame_id); @@ -280,20 +280,20 @@ class AirsimROSWrapper msr::airlib::Quaternionr get_airlib_quat(const tf2::Quaternion& tf2_quat) const; nav_msgs::msg::Odometry get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const; nav_msgs::msg::Odometry get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const; - airsim_interfaces::CarState get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const; + airsim_interfaces::msg::CarState get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const; msr::airlib::Pose get_airlib_pose(const float& x, const float& y, const float& z, const msr::airlib::Quaternionr& airlib_quat) const; airsim_interfaces::msg::GPSYaw get_gps_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const; - sensor_msgs::NavSatFix get_gps_sensor_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const; - sensor_msgs::Imu get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const; - airsim_interfaces::Altimeter get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const; - sensor_msgs::Range get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const; - sensor_msgs::PointCloud2 get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const; - sensor_msgs::NavSatFix get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const; - sensor_msgs::MagneticField get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const; + sensor_msgs::msg::NavSatFix get_gps_sensor_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const; + sensor_msgs::msg::Imu get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const; + airsim_interfaces::msg::Altimeter get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const; + sensor_msgs::msg::Range get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const; + sensor_msgs::msg::PointCloud2 get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const; + sensor_msgs::msg::NavSatFix get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const; + sensor_msgs::msg::MagneticField get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const; airsim_interfaces::Environment get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const; // not used anymore, but can be useful in future with an unreal camera calibration environment - void read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::CameraInfo& cam_info) const; + void read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::msg::CameraInfo& cam_info) const; void convert_yaml_to_simple_mat(const YAML::Node& node, SimpleMatrix& m) const; // todo ugly // simulation time utility @@ -302,21 +302,21 @@ class AirsimROSWrapper private: // subscriber / services for ALL robots - rclcpp::Subscription vel_cmd_all_body_frame_sub_; - rclcpp::Subscription vel_cmd_all_world_frame_sub_; - ros::ServiceServer takeoff_all_srvr_; - ros::ServiceServer land_all_srvr_; + rclcpp::Subscription::SharedPtr vel_cmd_all_body_frame_sub_; + rclcpp::Subscription::SharedPtr vel_cmd_all_world_frame_sub_; + rclcpp::Service::SharedPtr takeoff_all_srvr_; + rclcpp::Service::SharedPtr land_all_srvr_; // todo - subscriber / services for a GROUP of robots, which is defined by a list of `vehicle_name`s passed in the ros msg / srv request - rclcpp::Subscription vel_cmd_group_body_frame_sub_; - rclcpp::Subscription vel_cmd_group_world_frame_sub_; - ros::ServiceServer takeoff_group_srvr_; - ros::ServiceServer land_group_srvr_; + rclcpp::Subscription::SharedPtr vel_cmd_group_body_frame_sub_; + rclcpp::Subscription::SharedPtr vel_cmd_group_world_frame_sub_; + rclcpp::Service::SharedPtr takeoff_group_srvr_; + rclcpp::Service::SharedPtr land_group_srvr_; AIRSIM_MODE airsim_mode_ = AIRSIM_MODE::DRONE; - ros::ServiceServer reset_srvr_; - rclcpp::Publisher origin_geo_point_pub_; // home geo coord of drones + rclcpp::Service::SharedPtr reset_srvr_; + rclcpp::Publisher::SharedPtr origin_geo_point_pub_; // home geo coord of drones msr::airlib::GeoPoint origin_geo_point_; // gps coord of unreal origin airsim_interfaces::msg::GPSYaw origin_geo_point_msg_; // todo duplicate @@ -332,8 +332,9 @@ class AirsimROSWrapper msr::airlib::RpcLibClientBase airsim_client_images_; msr::airlib::RpcLibClientBase airsim_client_lidar_; - rclcpp::Node nh_; - rclcpp::Node nh_private_; + std::shared_ptr nh; + std::shared_ptr nh_private_; + // ros::NodeHandle nh_; // ros::NodeHandle nh_private_; @@ -375,7 +376,7 @@ class AirsimROSWrapper std::vector image_pub_vec_; std::vector cam_info_pub_vec_; - std::vector camera_info_msg_vec_; + std::vector camera_info_msg_vec_; /// ROS other publishers rclcpp::Publisher clock_pub_; diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h index 23ffb690ad..0ac3452747 100755 --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -137,10 +137,10 @@ class PIDPositionController rclcpp::Service::SharedPtr gps_goal_override_srvr_; - // ros::ServiceServer local_position_goal_srvr_; - // ros::ServiceServer local_position_goal_override_srvr_; - // ros::ServiceServer gps_goal_srvr_; - // ros::ServiceServer gps_goal_override_srvr_; + // rclcpp::Service<>::SharedPtr local_position_goal_srvr_; + // rclcpp::Service<>::SharedPtr local_position_goal_override_srvr_; + // rclcpp::Service<>::SharedPtr gps_goal_srvr_; + // rclcpp::Service<>::SharedPtr gps_goal_override_srvr_; rclcpp::TimerBase::SharedPtr update_control_cmd_timer_; //ros::Timer update_control_cmd_timer_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 498f49e162..6d60c6f82b 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -25,7 +25,7 @@ const std::unordered_map AirsimROSWrapper::image_type_int_to_s { 7, "Infrared" } }; -AirsimROSWrapper::AirsimROSWrapper(const rclcpp::Node& nh, const rclcpp::Node& nh_private, const std::string& host_ip) +AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_private, const std::string& host_ip) : nh_(nh), nh_private_(nh_private), img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ lidar_async_spinner_(1, &lidar_timer_cb_queue_) , // same as above, but for lidar @@ -110,9 +110,9 @@ void AirsimROSWrapper::initialize_ros() void AirsimROSWrapper::create_ros_pubs_from_settings_json() { // subscribe to control commands on global nodehandle - gimbal_angle_quat_cmd_sub_ = nh_private_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); - gimbal_angle_euler_cmd_sub_ = nh_private_.subscribe("gimbal_angle_euler_cmd", 50, &AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this); - origin_geo_point_pub_ = nh_private_.advertise("origin_geo_point", 10); + gimbal_angle_quat_cmd_sub_ = nh_private_.create_subscription<>("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); + gimbal_angle_euler_cmd_sub_ = nh_private_.create_subscription<>("gimbal_angle_euler_cmd", 50, &AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this); + origin_geo_point_pub_ = nh_private_.create_publisher("origin_geo_point", 10); airsim_img_request_vehicle_name_pair_vec_.clear(); image_pub_vec_.clear(); @@ -146,11 +146,11 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); - vehicle_ros->odom_local_pub = nh_private_.advertise(curr_vehicle_name + "/" + odom_frame_id_, 10); + vehicle_ros->odom_local_pub = nh_private_.create_publisher(curr_vehicle_name + "/" + odom_frame_id_, 10); - vehicle_ros->env_pub = nh_private_.advertise(curr_vehicle_name + "/environment", 10); + vehicle_ros->env_pub = nh_private_.create_publisher(curr_vehicle_name + "/environment", 10); - vehicle_ros->global_gps_pub = nh_private_.advertise(curr_vehicle_name + "/global_gps", 10); + vehicle_ros->global_gps_pub = nh_private_.create_publisher(curr_vehicle_name + "/global_gps", 10); if (airsim_mode_ == AIRSIM_MODE::DRONE) { auto drone = static_cast(vehicle_ros.get()); @@ -160,16 +160,16 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() drone->vel_cmd_body_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_body_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name)); // todo ros::TransportHints().tcpNoDelay(); drone->vel_cmd_world_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_world_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name)); - drone->takeoff_srvr = nh_private_.create_service(curr_vehicle_name + "/takeoff", + drone->takeoff_srvr = nh_private_.create_service(curr_vehicle_name + "/takeoff", boost::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); - drone->land_srvr = nh_private_.create_service(curr_vehicle_name + "/land", + drone->land_srvr = nh_private_.create_service(curr_vehicle_name + "/land", boost::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); // vehicle_ros.reset_srvr = nh_private_.create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); } else { auto car = static_cast(vehicle_ros.get()); - car->car_cmd_sub = nh_private_.subscribe(curr_vehicle_name + "/car_cmd", 1, boost::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name)); - car->car_state_pub = nh_private_.advertise(curr_vehicle_name + "/car_state", 10); + car->car_cmd_sub = nh_private_.subscribe(curr_vehicle_name + "/car_cmd", 1, boost::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name)); + car->car_state_pub = nh_private_.create_publisher(curr_vehicle_name + "/car_state", 10); } // iterate over camera map std::map .cameras; @@ -201,7 +201,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() } image_pub_vec_.push_back(image_transporter.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type), 1)); - cam_info_pub_vec_.push_back(nh_private_.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); + cam_info_pub_vec_.push_back(nh_private_.create_publisher(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); camera_info_msg_vec_.push_back(generate_cam_info(curr_camera_name, camera_setting, capture_setting)); } } @@ -222,27 +222,27 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() switch (sensor_setting->sensor_type) { case SensorBase::SensorType::Barometer: { std::cout << "Barometer" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/altimeter/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/altimeter/" + sensor_name, 10); break; } case SensorBase::SensorType::Imu: { std::cout << "Imu" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/imu/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/imu/" + sensor_name, 10); break; } case SensorBase::SensorType::Gps: { std::cout << "Gps" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/gps/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/gps/" + sensor_name, 10); break; } case SensorBase::SensorType::Magnetometer: { std::cout << "Magnetometer" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/magnetometer/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/magnetometer/" + sensor_name, 10); break; } case SensorBase::SensorType::Distance: { std::cout << "Distance" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/distance/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/distance/" + sensor_name, 10); break; } case SensorBase::SensorType::Lidar: { @@ -251,7 +251,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() msr::airlib::LidarSimpleParams params; params.initializeFromSettings(lidar_setting); append_static_lidar_tf(vehicle_ros.get(), sensor_name, params); - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/lidar/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/lidar/" + sensor_name, 10); break; } default: { @@ -280,13 +280,13 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() takeoff_all_srvr_ = nh_private_.create_service("all_robots/takeoff", &AirsimROSWrapper::takeoff_all_srv_cb, this); land_all_srvr_ = nh_private_.create_service("all_robots/land", &AirsimROSWrapper::land_all_srv_cb, this); - // gimbal_angle_quat_cmd_sub_ = nh_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); + // gimbal_angle_quat_cmd_sub_ = nh_.create_subscription<>("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); - vel_cmd_all_body_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_all_body_frame_cb, this); - vel_cmd_all_world_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_all_world_frame_cb, this); + vel_cmd_all_body_frame_sub_ = nh_private_.create_subscription<>("all_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_all_body_frame_cb, this); + vel_cmd_all_world_frame_sub_ = nh_private_.create_subscription<>("all_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_all_world_frame_cb, this); - vel_cmd_group_body_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_group_body_frame_cb, this); - vel_cmd_group_world_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_group_world_frame_cb, this); + vel_cmd_group_body_frame_sub_ = nh_private_.create_subscription<>("group_of_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_group_body_frame_cb, this); + vel_cmd_group_world_frame_sub_ = nh_private_.create_subscription<>("group_of_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_group_world_frame_cb, this); takeoff_group_srvr_ = nh_private_.create_service("group_of_robots/takeoff", &AirsimROSWrapper::takeoff_group_srv_cb, this); land_group_srvr_ = nh_private_.create_service("group_of_robots/land", &AirsimROSWrapper::land_group_srv_cb, this); @@ -296,7 +296,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() reset_srvr_ = nh_private_.create_service("reset", &AirsimROSWrapper::reset_srv_cb, this); if (publish_clock_) { - clock_pub_ = nh_private_.advertise("clock", 1); + clock_pub_ = nh_private_.create_publisher("clock", 1); } // if >0 cameras, add one more thread for img_request_timer_cb @@ -323,7 +323,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() } // todo: error check. if state is not landed, return error. -bool AirsimROSWrapper::takeoff_srv_cb(airsim_interfaces::Takeoff::Request& request, airsim_interfaces::Takeoff::Response& response, const std::string& vehicle_name) +bool AirsimROSWrapper::takeoff_srv_cb(airsim_interfaces::srv::Takeoff::Request& request, airsim_interfaces::srv::Takeoff::Response& response, const std::string& vehicle_name) { std::lock_guard guard(drone_control_mutex_); @@ -337,7 +337,7 @@ bool AirsimROSWrapper::takeoff_srv_cb(airsim_interfaces::Takeoff::Request& reque return true; } -bool AirsimROSWrapper::takeoff_group_srv_cb(airsim_interfaces::TakeoffGroup::Request& request, airsim_interfaces::TakeoffGroup::Response& response) +bool AirsimROSWrapper::takeoff_group_srv_cb(airsim_interfaces::srv::TakeoffGroup::Request& request, airsim_interfaces::srv::TakeoffGroup::Response& response) { std::lock_guard guard(drone_control_mutex_); @@ -353,7 +353,7 @@ bool AirsimROSWrapper::takeoff_group_srv_cb(airsim_interfaces::TakeoffGroup::Req return true; } -bool AirsimROSWrapper::takeoff_all_srv_cb(airsim_interfaces::Takeoff::Request& request, airsim_interfaces::Takeoff::Response& response) +bool AirsimROSWrapper::takeoff_all_srv_cb(airsim_interfaces::srv::Takeoff::Request& request, airsim_interfaces::srv::Takeoff::Response& response) { std::lock_guard guard(drone_control_mutex_); @@ -369,7 +369,7 @@ bool AirsimROSWrapper::takeoff_all_srv_cb(airsim_interfaces::Takeoff::Request& r return true; } -bool AirsimROSWrapper::land_srv_cb(airsim_interfaces::Land::Request& request, airsim_interfaces::Land::Response& response, const std::string& vehicle_name) +bool AirsimROSWrapper::land_srv_cb(airsim_interfaces::srv::Land::Request& request, airsim_interfaces::srv::Land::Response& response, const std::string& vehicle_name) { std::lock_guard guard(drone_control_mutex_); @@ -381,7 +381,7 @@ bool AirsimROSWrapper::land_srv_cb(airsim_interfaces::Land::Request& request, ai return true; //todo } -bool AirsimROSWrapper::land_group_srv_cb(airsim_interfaces::LandGroup::Request& request, airsim_interfaces::LandGroup::Response& response) +bool AirsimROSWrapper::land_group_srv_cb(airsim_interfaces::srv::LandGroup::Request& request, airsim_interfaces::srv::LandGroup::Response& response) { std::lock_guard guard(drone_control_mutex_); @@ -395,7 +395,7 @@ bool AirsimROSWrapper::land_group_srv_cb(airsim_interfaces::LandGroup::Request& return true; //todo } -bool AirsimROSWrapper::land_all_srv_cb(airsim_interfaces::Land::Request& request, airsim_interfaces::Land::Response& response) +bool AirsimROSWrapper::land_all_srv_cb(airsim_interfaces::srv::Land::Request& request, airsim_interfaces::srv::Land::Response& response) { std::lock_guard guard(drone_control_mutex_); @@ -411,7 +411,7 @@ bool AirsimROSWrapper::land_all_srv_cb(airsim_interfaces::Land::Request& request // todo add reset by vehicle_name API to airlib // todo not async remove waitonlasttask -bool AirsimROSWrapper::reset_srv_cb(airsim_interfaces::Reset::Request& request, airsim_interfaces::Reset::Response& response) +bool AirsimROSWrapper::reset_srv_cb(airsim_interfaces::srv::Reset::Request& request, airsim_interfaces::srv::Reset::Response& response) { std::lock_guard guard(drone_control_mutex_); @@ -434,7 +434,7 @@ msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const tf2::Quaternion return msr::airlib::Quaternionr(tf2_quat.w(), tf2_quat.x(), tf2_quat.y(), tf2_quat.z()); } -void AirsimROSWrapper::car_cmd_cb(const airsim_interfaces::CarControls::ConstPtr& msg, const std::string& vehicle_name) +void AirsimROSWrapper::car_cmd_cb(const airsim_interfaces::msg::CarControls::ConstPtr& msg, const std::string& vehicle_name) { std::lock_guard guard(drone_control_mutex_); @@ -574,7 +574,7 @@ void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_interfaces::msg:: } // todo support multiple gimbal commands -void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_interfaces::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg) +void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_interfaces::msg::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg) { tf2::Quaternion quat_control_cmd; try { @@ -594,7 +594,7 @@ void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_interfaces::GimbalA // 1. find quaternion of default gimbal pose // 2. forward multiply with quaternion equivalent to desired euler commands (in degrees) // 3. call airsim client's setCameraPose which sets camera pose wrt world (or takeoff?) ned frame. todo -void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_interfaces::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg) +void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_interfaces::msg::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg) { try { tf2::Quaternion quat_control_cmd; @@ -610,9 +610,9 @@ void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_interfaces::Gimbal } } -airsim_interfaces::CarState AirsimROSWrapper::get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const +airsim_interfaces::msg::CarState AirsimROSWrapper::get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const { - airsim_interfaces::CarState state_msg; + airsim_interfaces::msg::CarState state_msg; const auto odo = get_odom_msg_from_car_state(car_state); state_msg.pose = odo.pose; @@ -788,9 +788,9 @@ sensor_msgs::MagneticField AirsimROSWrapper::get_mag_msg_from_airsim(const msr:: } // todo covariances -sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const +sensor_msgs::msg::NavSatFix AirsimROSWrapper::get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const { - sensor_msgs::NavSatFix gps_msg; + sensor_msgs::msg::NavSatFix gps_msg; gps_msg.header.stamp = airsim_timestamp_to_ros(gps_data.time_stamp); gps_msg.latitude = gps_data.gnss.geo_point.latitude; gps_msg.longitude = gps_data.gnss.geo_point.longitude; @@ -855,7 +855,7 @@ sensor_msgs::Imu AirsimROSWrapper::get_imu_msg_from_airsim(const msr::airlib::Im void AirsimROSWrapper::publish_odom_tf(const nav_msgs::msg::Odometry& odom_msg) { - geometry_msgs::TransformStamped odom_tf; + geometry_msgs::msg::TransformStamped odom_tf; odom_tf.header = odom_msg.header; odom_tf.child_frame_id = odom_msg.child_frame_id; odom_tf.transform.translation.x = odom_msg.pose.pose.position.x; @@ -877,9 +877,9 @@ airsim_interfaces::msg::GPSYaw AirsimROSWrapper::get_gps_msg_from_airsim_geo_poi return gps_msg; } -sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const +sensor_msgs::msg::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const { - sensor_msgs::NavSatFix gps_msg; + sensor_msgs::msg::NavSatFix gps_msg; gps_msg.latitude = geo_point.latitude; gps_msg.longitude = geo_point.longitude; gps_msg.altitude = geo_point.altitude; @@ -996,7 +996,7 @@ ros::Time AirsimROSWrapper::update_state() vehicle_ros->curr_odom = get_odom_msg_from_car_state(car->curr_car_state); - airsim_interfaces::CarState state_msg = get_roscarstate_msg_from_car_state(car->curr_car_state); + airsim_interfaces::msg::CarState state_msg = get_roscarstate_msg_from_car_state(car->curr_car_state); state_msg.header.frame_id = vehicle_ros->vehicle_name; car->car_state_msg = state_msg; } @@ -1063,7 +1063,7 @@ void AirsimROSWrapper::publish_vehicle_state() } case SensorBase::SensorType::Gps: { auto gps_data = airsim_client_->getGpsData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::NavSatFix gps_msg = get_gps_msg_from_airsim(gps_data); + sensor_msgs::msg::NavSatFix gps_msg = get_gps_msg_from_airsim(gps_data); gps_msg.header.frame_id = vehicle_ros->vehicle_name; sensor_publisher.publisher.publish(gps_msg); break; @@ -1167,7 +1167,7 @@ void AirsimROSWrapper::set_nans_to_zeros_in_pose(const VehicleSetting& vehicle_s void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const VehicleSetting& vehicle_setting) { - geometry_msgs::TransformStamped vehicle_tf_msg; + geometry_msgs::msg::TransformStamped vehicle_tf_msg; vehicle_tf_msg.header.frame_id = world_frame_id_; vehicle_tf_msg.header.stamp = ros::Time::now(); vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name; @@ -1193,7 +1193,7 @@ void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const V void AirsimROSWrapper::append_static_lidar_tf(VehicleROS* vehicle_ros, const std::string& lidar_name, const msr::airlib::LidarSimpleParams& lidar_setting) { - geometry_msgs::TransformStamped lidar_tf_msg; + geometry_msgs::msg::TransformStamped lidar_tf_msg; lidar_tf_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; lidar_tf_msg.child_frame_id = vehicle_ros->vehicle_name + "/" + lidar_name; lidar_tf_msg.transform.translation.x = lidar_setting.relative_pose.position.x(); @@ -1216,7 +1216,7 @@ void AirsimROSWrapper::append_static_lidar_tf(VehicleROS* vehicle_ros, const std void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const std::string& camera_name, const CameraSetting& camera_setting) { - geometry_msgs::TransformStamped static_cam_tf_body_msg; + geometry_msgs::msg::TransformStamped static_cam_tf_body_msg; static_cam_tf_body_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; static_cam_tf_body_msg.child_frame_id = camera_name + "_body/static"; static_cam_tf_body_msg.transform.translation.x = camera_setting.position.x(); @@ -1236,7 +1236,7 @@ void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const st static_cam_tf_body_msg.transform.rotation.z = -static_cam_tf_body_msg.transform.rotation.z; } - geometry_msgs::TransformStamped static_cam_tf_optical_msg = static_cam_tf_body_msg; + geometry_msgs::msg::TransformStamped static_cam_tf_optical_msg = static_cam_tf_body_msg; static_cam_tf_optical_msg.child_frame_id = camera_name + "_optical/static"; tf2::Quaternion quat_cam_body; @@ -1337,11 +1337,11 @@ sensor_msgs::ImagePtr AirsimROSWrapper::get_depth_img_msg_from_response(const Im } // todo have a special stereo pair mode and get projection matrix by calculating offset wrt drone body frame? -sensor_msgs::CameraInfo AirsimROSWrapper::generate_cam_info(const std::string& camera_name, +sensor_msgs::msg::CameraInfo AirsimROSWrapper::generate_cam_info(const std::string& camera_name, const CameraSetting& camera_setting, const CaptureSetting& capture_setting) const { - sensor_msgs::CameraInfo cam_info_msg; + sensor_msgs::msg::CameraInfo cam_info_msg; cam_info_msg.header.frame_id = camera_name + "_optical"; cam_info_msg.height = capture_setting.height; cam_info_msg.width = capture_setting.width; @@ -1393,7 +1393,7 @@ void AirsimROSWrapper::process_and_publish_img_response(const std::vector Date: Sat, 14 Aug 2021 13:37:15 -0700 Subject: [PATCH 017/123] - commit updates --- .../include/airsim_ros_wrapper.h | 68 ++-- .../src/airsim_ros_wrapper.cpp | 316 +++++++++--------- 2 files changed, 193 insertions(+), 191 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 507f679fe3..fca3a09ac0 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -150,7 +150,7 @@ class AirsimROSWrapper { SensorBase::SensorType sensor_type; std::string sensor_name; - rclcpp::Publisher publisher; + rclcpp::Publisher::SharedPtr publisher; }; // utility struct for a SINGLE robot @@ -161,7 +161,7 @@ class AirsimROSWrapper std::string vehicle_name; /// All things ROS - rclcpp::Publisher>::SharedPtr odom_local_pub; + rclcpp::Publisher::SharedPtr odom_local_pub; rclcpp::Publisher::SharedPtr global_gps_pub; rclcpp::Publisher::SharedPtr env_pub; airsim_interfaces::msg::Environment env_msg; @@ -174,7 +174,7 @@ class AirsimROSWrapper std::vector static_tf_msg_vec; - rclcpp::TimerBase::SharedPtrstamp; + rclcpp::TimerBase::SharedPtr stamp; std::string odom_frame_id; /// Status @@ -187,8 +187,8 @@ class AirsimROSWrapper public: msr::airlib::CarApiBase::CarState curr_car_state; - rclcpp::Subscription car_cmd_sub; - rclcpp::Publisher car_state_pub; + rclcpp::Subscription::SharedPtr car_cmd_sub; + rclcpp::Publisher::SharedPtr car_state_pub; airsim_interfaces::msg::CarState car_state_msg; bool has_car_cmd; @@ -202,11 +202,11 @@ class AirsimROSWrapper msr::airlib::MultirotorState curr_drone_state; // bool in_air_; // todo change to "status" and keep track of this - rclcpp::Subscription vel_cmd_body_frame_sub; - rclcpp::Subscription vel_cmd_world_frame_sub; + rclcpp::Subscription::SharedPtr vel_cmd_body_frame_sub; + rclcpp::Subscription::SharedPtr vel_cmd_world_frame_sub; - rclcpp::Service<>::SharedPtr takeoff_srvr; - rclcpp::Service<>::SharedPtr land_srvr; + rclcpp::Service::SharedPtr takeoff_srvr; + rclcpp::Service::SharedPtr land_srvr; bool has_vel_cmd; VelCmd vel_cmd; @@ -221,21 +221,21 @@ class AirsimROSWrapper void lidar_timer_cb(const ros::TimerEvent& event); /// ROS subscriber callbacks - void vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelCmd::ConstPtr& msg, const std::string& vehicle_name); - void vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd::ConstPtr& msg, const std::string& vehicle_name); + void vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg, const std::string& vehicle_name); + void vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg, const std::string& vehicle_name); - void vel_cmd_group_body_frame_cb(const airsim_interfaces::msg::VelCmdGroup& msg); - void vel_cmd_group_world_frame_cb(const airsim_interfaces::msg::VelCmdGroup& msg); + void vel_cmd_group_body_frame_cb(const airsim_interfaces::msg::VelCmdGroup::SharedPtr msg); + void vel_cmd_group_world_frame_cb(const airsim_interfaces::msg::VelCmdGroup::SharedPtr msg); - void vel_cmd_all_world_frame_cb(const airsim_interfaces::msg::VelCmd& msg); - void vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd& msg); + void vel_cmd_all_world_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg); + void vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg); // void vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd& msg, const std::string& vehicle_name); - void gimbal_angle_quat_cmd_cb(const airsim_interfaces::msg::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg); - void gimbal_angle_euler_cmd_cb(const airsim_interfaces::msg::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg); + void gimbal_angle_quat_cmd_cb(const airsim_interfaces::msg::GimbalAngleQuatCmd::SharedPtr gimbal_angle_quat_cmd_msg); + void gimbal_angle_euler_cmd_cb(const airsim_interfaces::msg::GimbalAngleEulerCmd::SharedPtr gimbal_angle_euler_cmd_msg); // commands - void car_cmd_cb(const airsim_interfaces::msg::CarControls::ConstPtr& msg, const std::string& vehicle_name); + void car_cmd_cb(const airsim_interfaces::msg::CarControls::SharedPtr msg, const std::string& vehicle_name); void update_commands(); // state, returns the simulation timestamp best guess based on drone state timestamp, airsim needs to return timestap for environment @@ -244,13 +244,13 @@ class AirsimROSWrapper void publish_vehicle_state(); /// ROS service callbacks - bool takeoff_srv_cb(airsim_interfaces::srv::Takeoff::Request& request, airsim_interfaces::srv::Takeoff::Response& response, const std::string& vehicle_name); - bool takeoff_group_srv_cb(airsim_interfaces::srv::TakeoffGroup::Request& request, airsim_interfaces::srv::TakeoffGroup::Response& response); - bool takeoff_all_srv_cb(airsim_interfaces::srv::Takeoff::Request& request, airsim_interfaces::srv::Takeoff::Response& response); - bool land_srv_cb(airsim_interfaces::srv::Land::Request& request, airsim_interfaces::srv::Land::Response& response, const std::string& vehicle_name); - bool land_group_srv_cb(airsim_interfaces::srv::LandGroup::Request& request, airsim_interfaces::srv::LandGroup::Response& response); - bool land_all_srv_cb(airsim_interfaces::srv::Land::Request& request, airsim_interfaces::srv::Land::Response& response); - bool reset_srv_cb(airsim_interfaces::srv::Reset::Request& request, airsim_interfaces::srv::Reset::Response& response); + bool takeoff_srv_cb(const std::shared_ptr request, const std::shared_ptr response, const std::string& vehicle_name); + bool takeoff_group_srv_cb(const std::shared_ptr request, const std::shared_ptr response); + bool takeoff_all_srv_cb(const std::shared_ptr request, const std::shared_ptr response); + bool land_srv_cb(const std::shared_ptr request, const std::shared_ptr response, const std::string& vehicle_name); + bool land_group_srv_cb(const std::shared_ptr request, const std::shared_ptr response); + bool land_all_srv_cb(const std::shared_ptr request, const std::shared_ptr response); + bool reset_srv_cb(const std::shared_ptr request, const std::shared_ptr response); /// ROS tf broadcasters void publish_camera_tf(const ImageResponse& img_response, const ros::Time& ros_time, const std::string& frame_id, const std::string& child_frame_id); @@ -260,8 +260,8 @@ class AirsimROSWrapper sensor_msgs::msg::CameraInfo generate_cam_info(const std::string& camera_name, const CameraSetting& camera_setting, const CaptureSetting& capture_setting) const; cv::Mat manual_decode_depth(const ImageResponse& img_response) const; - sensor_msgs::ImagePtr get_img_msg_from_response(const ImageResponse& img_response, const ros::Time curr_ros_time, const std::string frame_id); - sensor_msgs::ImagePtr get_depth_img_msg_from_response(const ImageResponse& img_response, const ros::Time curr_ros_time, const std::string frame_id); + sensor_msgs::msg::ImagePtr get_img_msg_from_response(const ImageResponse& img_response, const ros::Time curr_ros_time, const std::string frame_id); + sensor_msgs::msg::ImagePtr get_depth_img_msg_from_response(const ImageResponse& img_response, const ros::Time curr_ros_time, const std::string frame_id); void process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name); @@ -276,7 +276,7 @@ class AirsimROSWrapper /// utils. todo parse into an Airlib<->ROS conversion class tf2::Quaternion get_tf2_quat(const msr::airlib::Quaternionr& airlib_quat) const; - msr::airlib::Quaternionr get_airlib_quat(const geometry_msgs::Quaternion& geometry_msgs_quat) const; + msr::airlib::Quaternionr get_airlib_quat(const geometry_msgs::msg::Quaternion& geometry_msgs_quat) const; msr::airlib::Quaternionr get_airlib_quat(const tf2::Quaternion& tf2_quat) const; nav_msgs::msg::Odometry get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const; nav_msgs::msg::Odometry get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const; @@ -290,7 +290,7 @@ class AirsimROSWrapper sensor_msgs::msg::PointCloud2 get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const; sensor_msgs::msg::NavSatFix get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const; sensor_msgs::msg::MagneticField get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const; - airsim_interfaces::Environment get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const; + airsim_interfaces::msg::Environment get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const; // not used anymore, but can be useful in future with an unreal camera calibration environment void read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::msg::CameraInfo& cam_info) const; @@ -332,7 +332,7 @@ class AirsimROSWrapper msr::airlib::RpcLibClientBase airsim_client_images_; msr::airlib::RpcLibClientBase airsim_client_lidar_; - std::shared_ptr nh; + std::shared_ptr nh_; std::shared_ptr nh_private_; @@ -379,12 +379,12 @@ class AirsimROSWrapper std::vector camera_info_msg_vec_; /// ROS other publishers - rclcpp::Publisher clock_pub_; - rosgraph_msgs::Clock ros_clock_; + rclcpp::Publisher::SharedPtr clock_pub_; + rosgraph_msgs::msg::Clock ros_clock_; bool publish_clock_ = false; - rclcpp::Subscription gimbal_angle_quat_cmd_sub_; - rclcpp::Subscription gimbal_angle_euler_cmd_sub_; + rclcpp::Subscription::SharedPtr gimbal_angle_quat_cmd_sub_; + rclcpp::Subscription::SharedPtr gimbal_angle_euler_cmd_sub_; static constexpr char CAM_YML_NAME[] = "camera_name"; static constexpr char WIDTH_YML_NAME[] = "image_width"; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 6d60c6f82b..acc1592139 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -5,6 +5,8 @@ #include "common/AirSimSettings.hpp" #include +using namespace std::placeholders; + constexpr char AirsimROSWrapper::CAM_YML_NAME[]; constexpr char AirsimROSWrapper::WIDTH_YML_NAME[]; constexpr char AirsimROSWrapper::HEIGHT_YML_NAME[]; @@ -41,11 +43,11 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const if (AirSimSettings::singleton().simmode_name != AirSimSettings::kSimModeTypeCar) { airsim_mode_ = AIRSIM_MODE::DRONE; - RCLCPP_INFO("Setting ROS wrapper to DRONE mode"); + RCLCPP_INFO(nh_->get_logger(), "Setting ROS wrapper to DRONE mode"); } else { airsim_mode_ = AIRSIM_MODE::CAR; - RCLCPP_INFO("Setting ROS wrapper to CAR mode"); + RCLCPP_INFO(nh_->get_logger(), "Setting ROS wrapper to CAR mode"); } initialize_ros(); @@ -89,30 +91,30 @@ void AirsimROSWrapper::initialize_ros() // ros params double update_airsim_control_every_n_sec; - nh_private_.get_parameter("is_vulkan", is_vulkan_); - nh_private_.get_parameter("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); - nh_private_.get_parameter("publish_clock", publish_clock_); - nh_private_.param("world_frame_id", world_frame_id_, world_frame_id_); + nh_private_->get_parameter("is_vulkan", is_vulkan_); + nh_private_->get_parameter("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); + nh_private_->get_parameter("publish_clock", publish_clock_); + nh_private_->param("world_frame_id", world_frame_id_, world_frame_id_); odom_frame_id_ = world_frame_id_ == AIRSIM_FRAME_ID ? AIRSIM_ODOM_FRAME_ID : ENU_ODOM_FRAME_ID; - nh_private_.param("odom_frame_id", odom_frame_id_, odom_frame_id_); + nh_private_->param("odom_frame_id", odom_frame_id_, odom_frame_id_); isENU_ = !(odom_frame_id_ == AIRSIM_ODOM_FRAME_ID); - nh_private_.param("coordinate_system_enu", isENU_, isENU_); + nh_private_->param("coordinate_system_enu", isENU_, isENU_); vel_cmd_duration_ = 0.05; // todo rosparam // todo enforce dynamics constraints in this node as well? - // nh_.get_parameter("max_vert_vel_", max_vert_vel_); - // nh_.get_parameter("max_horz_vel", max_horz_vel_) + // nh_->get_parameter("max_vert_vel_", max_vert_vel_); + // nh_->get_parameter("max_horz_vel", max_horz_vel_) create_ros_pubs_from_settings_json(); - airsim_control_update_timer_ = nh_private_.createTimer(ros::Duration(update_airsim_control_every_n_sec), &AirsimROSWrapper::drone_state_timer_cb, this); + airsim_control_update_timer_ = nh_private_->createTimer(ros::Duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); } // XmlRpc::XmlRpcValue can't be const in this case void AirsimROSWrapper::create_ros_pubs_from_settings_json() { // subscribe to control commands on global nodehandle - gimbal_angle_quat_cmd_sub_ = nh_private_.create_subscription<>("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); - gimbal_angle_euler_cmd_sub_ = nh_private_.create_subscription<>("gimbal_angle_euler_cmd", 50, &AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this); - origin_geo_point_pub_ = nh_private_.create_publisher("origin_geo_point", 10); + gimbal_angle_quat_cmd_sub_ = nh_private_->create_subscription("gimbal_angle_quat_cmd", 50, std::bind(&AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this, _1)); + gimbal_angle_euler_cmd_sub_ = nh_private_->create_subscription("gimbal_angle_euler_cmd", 50, std::bind(&AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this, _1)); + origin_geo_point_pub_ = nh_private_->create_publisher("origin_geo_point", 10); airsim_img_request_vehicle_name_pair_vec_.clear(); image_pub_vec_.clear(); @@ -128,7 +130,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() auto& vehicle_setting = curr_vehicle_elem.second; auto curr_vehicle_name = curr_vehicle_elem.first; - nh_.setParam("/vehicle_name", curr_vehicle_name); + nh_->setParam("/vehicle_name", curr_vehicle_name); set_nans_to_zeros_in_pose(*vehicle_setting); @@ -146,30 +148,30 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); - vehicle_ros->odom_local_pub = nh_private_.create_publisher(curr_vehicle_name + "/" + odom_frame_id_, 10); + vehicle_ros->odom_local_pub = nh_private_->create_publisher(curr_vehicle_name + "/" + odom_frame_id_, 10); - vehicle_ros->env_pub = nh_private_.create_publisher(curr_vehicle_name + "/environment", 10); + vehicle_ros->env_pub = nh_private_->create_publisher(curr_vehicle_name + "/environment", 10); - vehicle_ros->global_gps_pub = nh_private_.create_publisher(curr_vehicle_name + "/global_gps", 10); + vehicle_ros->global_gps_pub = nh_private_->create_publisher(curr_vehicle_name + "/global_gps", 10); if (airsim_mode_ == AIRSIM_MODE::DRONE) { auto drone = static_cast(vehicle_ros.get()); // bind to a single callback. todo optimal subs queue length // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument - drone->vel_cmd_body_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_body_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name)); // todo ros::TransportHints().tcpNoDelay(); - drone->vel_cmd_world_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_world_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name)); - - drone->takeoff_srvr = nh_private_.create_service(curr_vehicle_name + "/takeoff", - boost::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); - drone->land_srvr = nh_private_.create_service(curr_vehicle_name + "/land", - boost::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); - // vehicle_ros.reset_srvr = nh_private_.create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); + drone->vel_cmd_body_frame_sub = nh_private_->create_subscription(curr_vehicle_name + "/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name)); // todo ros::TransportHints().tcpNoDelay(); + drone->vel_cmd_world_frame_sub = nh_private_->create_subscription(curr_vehicle_name + "/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name)); + + drone->takeoff_srvr = nh_private_->create_service(curr_vehicle_name + "/takeoff", + std::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); + drone->land_srvr = nh_private_->create_service(curr_vehicle_name + "/land", + std::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); + // vehicle_ros.reset_srvr = nh_private_->create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); } else { auto car = static_cast(vehicle_ros.get()); - car->car_cmd_sub = nh_private_.subscribe(curr_vehicle_name + "/car_cmd", 1, boost::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name)); - car->car_state_pub = nh_private_.create_publisher(curr_vehicle_name + "/car_state", 10); + car->car_cmd_sub = nh_private_->create_subscription(curr_vehicle_name + "/car_cmd", 1, std::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name)); + car->car_state_pub = nh_private_->create_publisher(curr_vehicle_name + "/car_state", 10); } // iterate over camera map std::map .cameras; @@ -201,7 +203,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() } image_pub_vec_.push_back(image_transporter.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type), 1)); - cam_info_pub_vec_.push_back(nh_private_.create_publisher(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); + cam_info_pub_vec_.push_back(nh_private_->create_publisher(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); camera_info_msg_vec_.push_back(generate_cam_info(curr_camera_name, camera_setting, capture_setting)); } } @@ -222,27 +224,27 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() switch (sensor_setting->sensor_type) { case SensorBase::SensorType::Barometer: { std::cout << "Barometer" << std::endl; - sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/altimeter/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/altimeter/" + sensor_name, 10); break; } case SensorBase::SensorType::Imu: { std::cout << "Imu" << std::endl; - sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/imu/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/imu/" + sensor_name, 10); break; } case SensorBase::SensorType::Gps: { std::cout << "Gps" << std::endl; - sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/gps/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/gps/" + sensor_name, 10); break; } case SensorBase::SensorType::Magnetometer: { std::cout << "Magnetometer" << std::endl; - sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/magnetometer/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/magnetometer/" + sensor_name, 10); break; } case SensorBase::SensorType::Distance: { std::cout << "Distance" << std::endl; - sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/distance/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/distance/" + sensor_name, 10); break; } case SensorBase::SensorType::Lidar: { @@ -251,7 +253,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() msr::airlib::LidarSimpleParams params; params.initializeFromSettings(lidar_setting); append_static_lidar_tf(vehicle_ros.get(), sensor_name, params); - sensor_publisher.publisher = nh_private_.create_publisher(curr_vehicle_name + "/lidar/" + sensor_name, 10); + sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/lidar/" + sensor_name, 10); break; } default: { @@ -277,45 +279,45 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // add takeoff and land all services if more than 2 drones if (vehicle_name_ptr_map_.size() > 1 && airsim_mode_ == AIRSIM_MODE::DRONE) { - takeoff_all_srvr_ = nh_private_.create_service("all_robots/takeoff", &AirsimROSWrapper::takeoff_all_srv_cb, this); - land_all_srvr_ = nh_private_.create_service("all_robots/land", &AirsimROSWrapper::land_all_srv_cb, this); + takeoff_all_srvr_ = nh_private_->create_service("all_robots/takeoff", std::bind(&AirsimROSWrapper::takeoff_all_srv_cb, this, _1, _2)); + land_all_srvr_ = nh_private_->create_service("all_robots/land", std::bind(&AirsimROSWrapper::land_all_srv_cb, this, _1, _2)); - // gimbal_angle_quat_cmd_sub_ = nh_.create_subscription<>("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); + // gimbal_angle_quat_cmd_sub_ = nh_->create_subscription<>("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); - vel_cmd_all_body_frame_sub_ = nh_private_.create_subscription<>("all_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_all_body_frame_cb, this); - vel_cmd_all_world_frame_sub_ = nh_private_.create_subscription<>("all_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_all_world_frame_cb, this); + vel_cmd_all_body_frame_sub_ = nh_private_->create_subscription("all_robots/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_body_frame_cb, this, _1)); + vel_cmd_all_world_frame_sub_ = nh_private_->create_subscription("all_robots/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_world_frame_cb, this, _1)); - vel_cmd_group_body_frame_sub_ = nh_private_.create_subscription<>("group_of_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_group_body_frame_cb, this); - vel_cmd_group_world_frame_sub_ = nh_private_.create_subscription<>("group_of_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_group_world_frame_cb, this); + vel_cmd_group_body_frame_sub_ = nh_private_->create_subscription("group_of_robots/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_group_body_frame_cb, this, _1)); + vel_cmd_group_world_frame_sub_ = nh_private_->create_subscription("group_of_robots/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_group_world_frame_cb, this, _1)); - takeoff_group_srvr_ = nh_private_.create_service("group_of_robots/takeoff", &AirsimROSWrapper::takeoff_group_srv_cb, this); - land_group_srvr_ = nh_private_.create_service("group_of_robots/land", &AirsimROSWrapper::land_group_srv_cb, this); + takeoff_group_srvr_ = nh_private_->create_service("group_of_robots/takeoff", std::bind(&AirsimROSWrapper::takeoff_group_srv_cb, this, _1, _2)); + land_group_srvr_ = nh_private_->create_service("group_of_robots/land", std::bind(&AirsimROSWrapper::land_group_srv_cb, this, _1, _2)); } // todo add per vehicle reset in AirLib API - reset_srvr_ = nh_private_.create_service("reset", &AirsimROSWrapper::reset_srv_cb, this); + reset_srvr_ = nh_private_->create_service("reset", std::bind(&AirsimROSWrapper::reset_srv_cb, this, _1, _2)); if (publish_clock_) { - clock_pub_ = nh_private_.create_publisher("clock", 1); + clock_pub_ = nh_private_->create_publisher("clock", 1); } // if >0 cameras, add one more thread for img_request_timer_cb if (!airsim_img_request_vehicle_name_pair_vec_.empty()) { double update_airsim_img_response_every_n_sec; - nh_private_.get_parameter("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); + nh_private_->get_parameter("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); - ros::TimerOptions timer_options(ros::Duration(update_airsim_img_response_every_n_sec), boost::bind(&AirsimROSWrapper::img_response_timer_cb, this, _1), &img_timer_cb_queue_); - airsim_img_response_timer_ = nh_private_.createTimer(timer_options); + ros::TimerOptions timer_options(ros::Duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this, _1), &img_timer_cb_queue_); + airsim_img_response_timer_ = nh_private_->createTimer(timer_options); is_used_img_timer_cb_queue_ = true; } // lidars update on their own callback/thread at a given rate if (lidar_cnt > 0) { double update_lidar_every_n_sec; - nh_private_.get_parameter("update_lidar_every_n_sec", update_lidar_every_n_sec); - // nh_private_.setCallbackQueue(&lidar_timer_cb_queue_); - ros::TimerOptions timer_options(ros::Duration(update_lidar_every_n_sec), boost::bind(&AirsimROSWrapper::lidar_timer_cb, this, _1), &lidar_timer_cb_queue_); - airsim_lidar_update_timer_ = nh_private_.createTimer(timer_options); + nh_private_->get_parameter("update_lidar_every_n_sec", update_lidar_every_n_sec); + // nh_private_->setCallbackQueue(&lidar_timer_cb_queue_); + ros::TimerOptions timer_options(ros::Duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this, _1), &lidar_timer_cb_queue_); + airsim_lidar_update_timer_ = nh_private_->createTimer(timer_options); is_used_lidar_timer_cb_queue_ = true; } @@ -323,57 +325,57 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() } // todo: error check. if state is not landed, return error. -bool AirsimROSWrapper::takeoff_srv_cb(airsim_interfaces::srv::Takeoff::Request& request, airsim_interfaces::srv::Takeoff::Response& response, const std::string& vehicle_name) +bool AirsimROSWrapper::takeoff_srv_cb(std::shared_ptr request, std::shared_ptr response, const std::string& vehicle_name) { std::lock_guard guard(drone_control_mutex_); - if (request.waitOnLastTask) + if (request->wait_on_last_task) static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? - // response.success = + // response->success = else static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); - // response.success = + // response->success = return true; } -bool AirsimROSWrapper::takeoff_group_srv_cb(airsim_interfaces::srv::TakeoffGroup::Request& request, airsim_interfaces::srv::TakeoffGroup::Response& response) +bool AirsimROSWrapper::takeoff_group_srv_cb(std::shared_ptr request, std::shared_ptr response) { std::lock_guard guard(drone_control_mutex_); - if (request.waitOnLastTask) - for (const auto& vehicle_name : request.vehicle_names) + if (request->wait_on_last_task) + for (const auto& vehicle_name : request->vehicle_names) static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? - // response.success = + // response->success = else - for (const auto& vehicle_name : request.vehicle_names) + for (const auto& vehicle_name : request->vehicle_names) static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); - // response.success = + // response->success = return true; } -bool AirsimROSWrapper::takeoff_all_srv_cb(airsim_interfaces::srv::Takeoff::Request& request, airsim_interfaces::srv::Takeoff::Response& response) +bool AirsimROSWrapper::takeoff_all_srv_cb(std::shared_ptr request, std::shared_ptr response) { std::lock_guard guard(drone_control_mutex_); - if (request.waitOnLastTask) + if (request->wait_on_last_task) for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first)->waitOnLastTask(); // todo value for timeout_sec? - // response.success = + // response->success = else for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first); - // response.success = + // response->success = return true; } -bool AirsimROSWrapper::land_srv_cb(airsim_interfaces::srv::Land::Request& request, airsim_interfaces::srv::Land::Response& response, const std::string& vehicle_name) +bool AirsimROSWrapper::land_srv_cb(std::shared_ptr request, std::shared_ptr response, const std::string& vehicle_name) { std::lock_guard guard(drone_control_mutex_); - if (request.waitOnLastTask) + if (request->wait_on_last_task) static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); else static_cast(airsim_client_.get())->landAsync(60, vehicle_name); @@ -381,25 +383,25 @@ bool AirsimROSWrapper::land_srv_cb(airsim_interfaces::srv::Land::Request& reques return true; //todo } -bool AirsimROSWrapper::land_group_srv_cb(airsim_interfaces::srv::LandGroup::Request& request, airsim_interfaces::srv::LandGroup::Response& response) +bool AirsimROSWrapper::land_group_srv_cb(std::shared_ptr request, std::shared_ptr response) { std::lock_guard guard(drone_control_mutex_); - if (request.waitOnLastTask) - for (const auto& vehicle_name : request.vehicle_names) + if (request->wait_on_last_task) + for (const auto& vehicle_name : request->vehicle_names) static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); else - for (const auto& vehicle_name : request.vehicle_names) + for (const auto& vehicle_name : request->vehicle_names) static_cast(airsim_client_.get())->landAsync(60, vehicle_name); return true; //todo } -bool AirsimROSWrapper::land_all_srv_cb(airsim_interfaces::srv::Land::Request& request, airsim_interfaces::srv::Land::Response& response) +bool AirsimROSWrapper::land_all_srv_cb(std::shared_ptr request, std::shared_ptr response) { std::lock_guard guard(drone_control_mutex_); - if (request.waitOnLastTask) + if (request->wait_on_last_task) for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) static_cast(airsim_client_.get())->landAsync(60, vehicle_name_ptr_pair.first)->waitOnLastTask(); else @@ -410,8 +412,8 @@ bool AirsimROSWrapper::land_all_srv_cb(airsim_interfaces::srv::Land::Request& re } // todo add reset by vehicle_name API to airlib -// todo not async remove waitonlasttask -bool AirsimROSWrapper::reset_srv_cb(airsim_interfaces::srv::Reset::Request& request, airsim_interfaces::srv::Reset::Response& response) +// todo not async remove wait_on_last_task +bool AirsimROSWrapper::reset_srv_cb(std::shared_ptr request, std::shared_ptr response) { std::lock_guard guard(drone_control_mutex_); @@ -424,7 +426,7 @@ tf2::Quaternion AirsimROSWrapper::get_tf2_quat(const msr::airlib::Quaternionr& a return tf2::Quaternion(airlib_quat.x(), airlib_quat.y(), airlib_quat.z(), airlib_quat.w()); } -msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const geometry_msgs::Quaternion& geometry_msgs_quat) const +msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const geometry_msgs::msg::Quaternion& geometry_msgs_quat) const { return msr::airlib::Quaternionr(geometry_msgs_quat.w, geometry_msgs_quat.x, geometry_msgs_quat.y, geometry_msgs_quat.z); } @@ -434,7 +436,7 @@ msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const tf2::Quaternion return msr::airlib::Quaternionr(tf2_quat.w(), tf2_quat.x(), tf2_quat.y(), tf2_quat.z()); } -void AirsimROSWrapper::car_cmd_cb(const airsim_interfaces::msg::CarControls::ConstPtr& msg, const std::string& vehicle_name) +void AirsimROSWrapper::car_cmd_cb(const airsim_interfaces::msg::CarControls::SharedPtr msg, const std::string& vehicle_name) { std::lock_guard guard(drone_control_mutex_); @@ -456,7 +458,7 @@ msr::airlib::Pose AirsimROSWrapper::get_airlib_pose(const float& x, const float& } // void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd& msg, const std::string& vehicle_name) -void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd::ConstPtr& msg, const std::string& vehicle_name) +void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg, const std::string& vehicle_name) { std::lock_guard guard(drone_control_mutex_); @@ -476,34 +478,34 @@ void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCm drone->has_vel_cmd = true; } -void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg::VelCmdGroup& msg) +void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg::VelCmdGroup::SharedPtr msg) { std::lock_guard guard(drone_control_mutex_); - for (const auto& vehicle_name : msg.vehicle_names) { + for (const auto& vehicle_name : msg->vehicle_names) { auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); double roll, pitch, yaw; tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw // todo do actual body frame? - drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd.z = msg->twist.linear.z; drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; drone->vel_cmd.yaw_mode.is_rate = true; // airsim uses degrees - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); drone->has_vel_cmd = true; } } // void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd::ConstPtr& msg) -void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd& msg) +void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg) { std::lock_guard guard(drone_control_mutex_); - // todo expose waitOnLastTask or nah? + // todo expose wait_on_last_task or nah? for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { auto drone = static_cast(vehicle_name_ptr_pair.second.get()); @@ -511,18 +513,18 @@ void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::V tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw // todo do actual body frame? - drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd.z = msg->twist.linear.z; drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; drone->vel_cmd.yaw_mode.is_rate = true; // airsim uses degrees - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); drone->has_vel_cmd = true; } } -void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelCmd::ConstPtr& msg, const std::string& vehicle_name) +void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg, const std::string& vehicle_name) { std::lock_guard guard(drone_control_mutex_); @@ -538,55 +540,55 @@ void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelC } // this is kinda unnecessary but maybe it makes life easier for the end user. -void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_interfaces::msg::VelCmdGroup& msg) +void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_interfaces::msg::VelCmdGroup::SharedPtr msg) { std::lock_guard guard(drone_control_mutex_); - for (const auto& vehicle_name : msg.vehicle_names) { + for (const auto& vehicle_name : msg->vehicle_names) { auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - drone->vel_cmd.x = msg.twist.linear.x; - drone->vel_cmd.y = msg.twist.linear.y; - drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.x = msg->twist.linear.x; + drone->vel_cmd.y = msg->twist.linear.y; + drone->vel_cmd.z = msg->twist.linear.z; drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; drone->vel_cmd.yaw_mode.is_rate = true; - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); drone->has_vel_cmd = true; } } -void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_interfaces::msg::VelCmd& msg) +void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg) { std::lock_guard guard(drone_control_mutex_); - // todo expose waitOnLastTask or nah? + // todo expose wait_on_last_task or nah? for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { auto drone = static_cast(vehicle_name_ptr_pair.second.get()); - drone->vel_cmd.x = msg.twist.linear.x; - drone->vel_cmd.y = msg.twist.linear.y; - drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.x = msg->twist.linear.x; + drone->vel_cmd.y = msg->twist.linear.y; + drone->vel_cmd.z = msg->twist.linear.z; drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; drone->vel_cmd.yaw_mode.is_rate = true; - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); drone->has_vel_cmd = true; } } // todo support multiple gimbal commands -void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_interfaces::msg::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg) +void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_interfaces::msg::GimbalAngleQuatCmd::SharedPtr gimbal_angle_quat_cmd_msg) { tf2::Quaternion quat_control_cmd; try { - tf2::convert(gimbal_angle_quat_cmd_msg.orientation, quat_control_cmd); + tf2::convert(gimbal_angle_quat_cmd_msg->orientation, quat_control_cmd); quat_control_cmd.normalize(); gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); // airsim uses wxyz - gimbal_cmd_.camera_name = gimbal_angle_quat_cmd_msg.camera_name; - gimbal_cmd_.vehicle_name = gimbal_angle_quat_cmd_msg.vehicle_name; + gimbal_cmd_.camera_name = gimbal_angle_quat_cmd_msg->camera_name; + gimbal_cmd_.vehicle_name = gimbal_angle_quat_cmd_msg->vehicle_name; has_gimbal_cmd_ = true; } catch (tf2::TransformException& ex) { - RCLCPP_WARN("%s", ex.what()); + RCLCPP_WARN(nh_->get_logger(), "%s", ex.what()); } } @@ -594,19 +596,19 @@ void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_interfaces::msg::Gi // 1. find quaternion of default gimbal pose // 2. forward multiply with quaternion equivalent to desired euler commands (in degrees) // 3. call airsim client's setCameraPose which sets camera pose wrt world (or takeoff?) ned frame. todo -void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_interfaces::msg::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg) +void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_interfaces::msg::GimbalAngleEulerCmd::SharedPtr gimbal_angle_euler_cmd_msg) { try { tf2::Quaternion quat_control_cmd; - quat_control_cmd.setRPY(math_common::deg2rad(gimbal_angle_euler_cmd_msg.roll), math_common::deg2rad(gimbal_angle_euler_cmd_msg.pitch), math_common::deg2rad(gimbal_angle_euler_cmd_msg.yaw)); + quat_control_cmd.setRPY(math_common::deg2rad(gimbal_angle_euler_cmd_msg->roll), math_common::deg2rad(gimbal_angle_euler_cmd_msg->pitch), math_common::deg2rad(gimbal_angle_euler_cmd_msg->yaw)); quat_control_cmd.normalize(); gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); - gimbal_cmd_.camera_name = gimbal_angle_euler_cmd_msg.camera_name; - gimbal_cmd_.vehicle_name = gimbal_angle_euler_cmd_msg.vehicle_name; + gimbal_cmd_.camera_name = gimbal_angle_euler_cmd_msg->camera_name; + gimbal_cmd_.vehicle_name = gimbal_angle_euler_cmd_msg->vehicle_name; has_gimbal_cmd_ = true; } catch (tf2::TransformException& ex) { - RCLCPP_WARN("%s", ex.what()); + RCLCPP_WARN(nh_->get_logger(), "%s", ex.what()); } } @@ -696,9 +698,9 @@ nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(con // https://docs.ros.org/jade/api/sensor_msgs/html/point__cloud__conversion_8h_source.html#l00066 // look at UnrealLidarSensor.cpp UnrealLidarSensor::getPointCloud() for math // read this carefully https://docs.ros.org/kinetic/api/sensor_msgs/html/msg/PointCloud2.html -sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const +sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const { - sensor_msgs::PointCloud2 lidar_msg; + sensor_msgs::msg::PointCloud2 lidar_msg; lidar_msg.header.stamp = ros::Time::now(); lidar_msg.header.frame_id = vehicle_name; @@ -715,7 +717,7 @@ sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr:: for (size_t d = 0; d < lidar_msg.fields.size(); ++d, offset += 4) { lidar_msg.fields[d].offset = offset; - lidar_msg.fields[d].datatype = sensor_msgs::PointField::FLOAT32; + lidar_msg.fields[d].datatype = sensor_msgs::msg::PointField::FLOAT32; lidar_msg.fields[d].count = 1; } @@ -736,7 +738,7 @@ sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr:: if (isENU_) { try { - sensor_msgs::PointCloud2 lidar_msg_enu; + sensor_msgs::msg::PointCloud2 lidar_msg_enu; auto transformStampedENU = tf_buffer_.lookupTransform(AIRSIM_FRAME_ID, vehicle_name, ros::Time(0), ros::Duration(1)); tf2::doTransform(lidar_msg, lidar_msg_enu, transformStampedENU); @@ -746,7 +748,7 @@ sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr:: lidar_msg = std::move(lidar_msg_enu); } catch (tf2::TransformException& ex) { - RCLCPP_WARN("%s", ex.what()); + RCLCPP_WARN(nh_->get_logger(), "%s", ex.what()); ros::Duration(1.0).sleep(); } } @@ -754,9 +756,9 @@ sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr:: return lidar_msg; } -airsim_interfaces::Environment AirsimROSWrapper::get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const +airsim_interfaces::msg::Environment AirsimROSWrapper::get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const { - airsim_interfaces::Environment env_msg; + airsim_interfaces::msg::Environment env_msg; env_msg.position.x = env_data.position.x(); env_msg.position.y = env_data.position.y(); env_msg.position.z = env_data.position.z(); @@ -773,9 +775,9 @@ airsim_interfaces::Environment AirsimROSWrapper::get_environment_msg_from_airsim return env_msg; } -sensor_msgs::MagneticField AirsimROSWrapper::get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const +sensor_msgs::msg::MagneticField AirsimROSWrapper::get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const { - sensor_msgs::MagneticField mag_msg; + sensor_msgs::msg::MagneticField mag_msg; mag_msg.magnetic_field.x = mag_data.magnetic_field_body.x(); mag_msg.magnetic_field.y = mag_data.magnetic_field_body.y(); mag_msg.magnetic_field.z = mag_data.magnetic_field_body.z(); @@ -795,7 +797,7 @@ sensor_msgs::msg::NavSatFix AirsimROSWrapper::get_gps_msg_from_airsim(const msr: gps_msg.latitude = gps_data.gnss.geo_point.latitude; gps_msg.longitude = gps_data.gnss.geo_point.longitude; gps_msg.altitude = gps_data.gnss.geo_point.altitude; - gps_msg.status.service = sensor_msgs::NavSatStatus::SERVICE_GLONASS; + gps_msg.status.service = sensor_msgs::msg::NavSatStatus::SERVICE_GLONASS; gps_msg.status.status = gps_data.gnss.fix_type; // gps_msg.position_covariance_type = // gps_msg.position_covariance = @@ -803,9 +805,9 @@ sensor_msgs::msg::NavSatFix AirsimROSWrapper::get_gps_msg_from_airsim(const msr: return gps_msg; } -sensor_msgs::Range AirsimROSWrapper::get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const +sensor_msgs::msg::Range AirsimROSWrapper::get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const { - sensor_msgs::Range dist_msg; + sensor_msgs::msg::Range dist_msg; dist_msg.header.stamp = airsim_timestamp_to_ros(dist_data.time_stamp); dist_msg.range = dist_data.distance; dist_msg.min_range = dist_data.min_distance; @@ -814,9 +816,9 @@ sensor_msgs::Range AirsimROSWrapper::get_range_from_airsim(const msr::airlib::Di return dist_msg; } -airsim_interfaces::Altimeter AirsimROSWrapper::get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const +airsim_interfaces::msg::Altimeter AirsimROSWrapper::get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const { - airsim_interfaces::Altimeter alt_msg; + airsim_interfaces::msg::Altimeter alt_msg; alt_msg.header.stamp = airsim_timestamp_to_ros(alt_data.time_stamp); alt_msg.altitude = alt_data.altitude; alt_msg.pressure = alt_data.pressure; @@ -826,9 +828,9 @@ airsim_interfaces::Altimeter AirsimROSWrapper::get_altimeter_msg_from_airsim(con } // todo covariances -sensor_msgs::Imu AirsimROSWrapper::get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const +sensor_msgs::msg::Imu AirsimROSWrapper::get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const { - sensor_msgs::Imu imu_msg; + sensor_msgs::msg::Imu imu_msg; // imu_msg.header.frame_id = "/airsim/odom_local_ned";// todo multiple drones imu_msg.header.stamp = airsim_timestamp_to_ros(imu_data.time_stamp); imu_msg.orientation.x = imu_data.orientation.x(); @@ -907,7 +909,7 @@ void AirsimROSWrapper::drone_state_timer_cb(const ros::TimerEvent& event) { try { // todo this is global origin - origin_geo_point_pub_.publish(origin_geo_point_msg_); + origin_geo_point_pub_->publish(origin_geo_point_msg_); // get the basic vehicle pose and environmental state const auto now = update_state(); @@ -919,7 +921,7 @@ void AirsimROSWrapper::drone_state_timer_cb(const ros::TimerEvent& event) } // publish the simulation clock if (publish_clock_) { - clock_pub_.publish(ros_clock_); + clock_pub_->publish(ros_clock_); } // publish vehicle state, odom, and all basic sensor types @@ -1003,7 +1005,7 @@ ros::Time AirsimROSWrapper::update_state() vehicle_ros->stamp = vehicle_time; - airsim_interfaces::Environment env_msg = get_environment_msg_from_airsim(env_data); + airsim_interfaces::msg::Environment env_msg = get_environment_msg_from_airsim(env_data); env_msg.header.frame_id = vehicle_ros->vehicle_name; env_msg.header.stamp = vehicle_time; vehicle_ros->env_msg = env_msg; @@ -1023,49 +1025,49 @@ void AirsimROSWrapper::publish_vehicle_state() auto& vehicle_ros = vehicle_name_ptr_pair.second; // simulation environment truth - vehicle_ros->env_pub.publish(vehicle_ros->env_msg); + vehicle_ros->env_pub->publish(vehicle_ros->env_msg); if (airsim_mode_ == AIRSIM_MODE::CAR) { // dashboard reading from car, RPM, gear, etc auto car = static_cast(vehicle_ros.get()); - car->car_state_pub.publish(car->car_state_msg); + car->car_state_pub->publish(car->car_state_msg); } // odom and transforms - vehicle_ros->odom_local_pub.publish(vehicle_ros->curr_odom); + vehicle_ros->odom_local_pub->publish(vehicle_ros->curr_odom); publish_odom_tf(vehicle_ros->curr_odom); // ground truth GPS position from sim/HITL - vehicle_ros->global_gps_pub.publish(vehicle_ros->gps_sensor_msg); + vehicle_ros->global_gps_pub->publish(vehicle_ros->gps_sensor_msg); for (auto& sensor_publisher : vehicle_ros->sensor_pubs) { switch (sensor_publisher.sensor_type) { case SensorBase::SensorType::Barometer: { auto baro_data = airsim_client_->getBarometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - airsim_interfaces::Altimeter alt_msg = get_altimeter_msg_from_airsim(baro_data); + airsim_interfaces::msg::Altimeter alt_msg = get_altimeter_msg_from_airsim(baro_data); alt_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(alt_msg); + sensor_publisher.publisher->publish(alt_msg); break; } case SensorBase::SensorType::Imu: { auto imu_data = airsim_client_->getImuData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::Imu imu_msg = get_imu_msg_from_airsim(imu_data); + sensor_msgs::msg::Imu imu_msg = get_imu_msg_from_airsim(imu_data); imu_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(imu_msg); + sensor_publisher.publisher->publish(imu_msg); break; } case SensorBase::SensorType::Distance: { auto distance_data = airsim_client_->getDistanceSensorData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::Range dist_msg = get_range_from_airsim(distance_data); + sensor_msgs::msg::Range dist_msg = get_range_from_airsim(distance_data); dist_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(dist_msg); + sensor_publisher.publisher->publish(dist_msg); break; } case SensorBase::SensorType::Gps: { auto gps_data = airsim_client_->getGpsData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); sensor_msgs::msg::NavSatFix gps_msg = get_gps_msg_from_airsim(gps_data); gps_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(gps_msg); + sensor_publisher.publisher->publish(gps_msg); break; } case SensorBase::SensorType::Lidar: { @@ -1074,9 +1076,9 @@ void AirsimROSWrapper::publish_vehicle_state() } case SensorBase::SensorType::Magnetometer: { auto mag_data = airsim_client_->getMagnetometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::MagneticField mag_msg = get_mag_msg_from_airsim(mag_data); + sensor_msgs::msg::MagneticField mag_msg = get_mag_msg_from_airsim(mag_data); mag_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(mag_msg); + sensor_publisher.publisher->publish(mag_msg); break; } } @@ -1260,7 +1262,7 @@ void AirsimROSWrapper::img_response_timer_cb(const ros::TimerEvent& event) for (const auto& airsim_img_request_vehicle_name_pair : airsim_img_request_vehicle_name_pair_vec_) { const std::vector& img_response = airsim_client_images_.simGetImages(airsim_img_request_vehicle_name_pair.first, airsim_img_request_vehicle_name_pair.second); - if (img_response.size() == airsim_img_request_vehicle_name_pair.first.size()) { + if (img_response->size() == airsim_img_request_vehicle_name_pair.first.size()) { process_and_publish_img_response(img_response, image_response_idx, airsim_img_request_vehicle_name_pair.second); image_response_idx += img_response.size(); } @@ -1281,8 +1283,8 @@ void AirsimROSWrapper::lidar_timer_cb(const ros::TimerEvent& event) if (!vehicle_name_ptr_pair.second->lidar_pubs.empty()) { for (auto& lidar_publisher : vehicle_name_ptr_pair.second->lidar_pubs) { auto lidar_data = airsim_client_lidar_.getLidarData(lidar_publisher.sensor_name, vehicle_name_ptr_pair.first); - sensor_msgs::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first); - lidar_publisher.publisher.publish(lidar_msg); + sensor_msgs::msg::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first); + lidar_publisher.publisher->publish(lidar_msg); } } } @@ -1305,11 +1307,11 @@ cv::Mat AirsimROSWrapper::manual_decode_depth(const ImageResponse& img_response) return mat; } -sensor_msgs::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, +sensor_msgs::msg::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, const ros::Time curr_ros_time, const std::string frame_id) { - sensor_msgs::ImagePtr img_msg_ptr = boost::make_shared(); + sensor_msgs::msg::ImagePtr img_msg_ptr = boost::make_shared(); img_msg_ptr->data = img_response.image_data_uint8; img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes img_msg_ptr->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); @@ -1323,14 +1325,14 @@ sensor_msgs::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const ImageRes return img_msg_ptr; } -sensor_msgs::ImagePtr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, +sensor_msgs::msg::ImagePtr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, const ros::Time curr_ros_time, const std::string frame_id) { // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, // hence the dependency on opencv and cv_bridge. however, this is an extremely fast op, so no big deal. cv::Mat depth_img = manual_decode_depth(img_response); - sensor_msgs::ImagePtr depth_img_msg = cv_bridge::CvImage(std_msgs::Header(), "32FC1", depth_img).toImageMsg(); + sensor_msgs::msg::ImagePtr depth_img_msg = cv_bridge::CvImage(std_msgs::Header(), "32FC1", depth_img).toImageMsg(); depth_img_msg->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); depth_img_msg->header.frame_id = frame_id; return depth_img_msg; @@ -1370,17 +1372,17 @@ void AirsimROSWrapper::process_and_publish_img_response(const std::vectorpublish(camera_info_msg_vec_[img_response_idx_internal]); // DepthPlanar / DepthPerspective / DepthVis / DisparityNormalized if (curr_img_response.pixels_as_float) { - image_pub_vec_[img_response_idx_internal].publish(get_depth_img_msg_from_response(curr_img_response, + image_pub_vec_[img_response_idx_internal]->publish(get_depth_img_msg_from_response(curr_img_response, curr_ros_time, curr_img_response.camera_name + "_optical")); } // Scene / Segmentation / SurfaceNormals / Infrared else { - image_pub_vec_[img_response_idx_internal].publish(get_img_msg_from_response(curr_img_response, + image_pub_vec_[img_response_idx_internal]->publish(get_img_msg_from_response(curr_img_response, curr_ros_time, curr_img_response.camera_name + "_optical")); } From d180718eed9498dbba8266cfa6e597b5fab8fb9c Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sat, 14 Aug 2021 13:59:50 -0700 Subject: [PATCH 018/123] - update CameraInfo --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index acc1592139..777f7af26e 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -1457,11 +1457,11 @@ void AirsimROSWrapper::read_params_from_yaml_and_fill_cam_info_msg(const std::st cam_info.width = doc[WIDTH_YML_NAME].as(); cam_info.height = doc[HEIGHT_YML_NAME].as(); - SimpleMatrix K_(3, 3, &cam_info.K[0]); + SimpleMatrix K_(3, 3, &cam_info.k[0]); convert_yaml_to_simple_mat(doc[K_YML_NAME], K_); - SimpleMatrix R_(3, 3, &cam_info.R[0]); + SimpleMatrix R_(3, 3, &cam_info.r[0]); convert_yaml_to_simple_mat(doc[R_YML_NAME], R_); - SimpleMatrix P_(3, 4, &cam_info.P[0]); + SimpleMatrix P_(3, 4, &cam_info.p[0]); convert_yaml_to_simple_mat(doc[P_YML_NAME], P_); cam_info.distortion_model = doc[DMODEL_YML_NAME].as(); @@ -1471,8 +1471,8 @@ void AirsimROSWrapper::read_params_from_yaml_and_fill_cam_info_msg(const std::st D_rows = D_node["rows"].as(); D_cols = D_node["cols"].as(); const YAML::Node& D_data = D_node["data"]; - cam_info.D.resize(D_rows * D_cols); + cam_info.d.resize(D_rows * D_cols); for (int i = 0; i < D_rows * D_cols; ++i) { - cam_info.D[i] = D_data[i].as(); + cam_info.d[i] = D_data[i].as(); } } \ No newline at end of file From f8682891763418f450d31bd3703278d2da75d15e Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sat, 14 Aug 2021 14:00:51 -0700 Subject: [PATCH 019/123] - Update CameraInfo --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 777f7af26e..cd170cc1ac 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -1350,8 +1350,8 @@ sensor_msgs::msg::CameraInfo AirsimROSWrapper::generate_cam_info(const std::stri float f_x = (capture_setting.width / 2.0) / tan(math_common::deg2rad(capture_setting.fov_degrees / 2.0)); // todo focal length in Y direction should be same as X it seems. this can change in future a scene capture component which exactly correponds to a cine camera // float f_y = (capture_setting.height / 2.0) / tan(math_common::deg2rad(fov_degrees / 2.0)); - cam_info_msg.K = { f_x, 0.0, capture_setting.width / 2.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 1.0 }; - cam_info_msg.P = { f_x, 0.0, capture_setting.width / 2.0, 0.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 0.0, 1.0, 0.0 }; + cam_info_msg.k = { f_x, 0.0, capture_setting.width / 2.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 1.0 }; + cam_info_msg.p = { f_x, 0.0, capture_setting.width / 2.0, 0.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 0.0, 1.0, 0.0 }; return cam_info_msg; } From e3c1177dafd4c8f38e6dcaa479697a2d44d777aa Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sat, 14 Aug 2021 14:32:52 -0700 Subject: [PATCH 020/123] - update --- ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 2 +- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index fca3a09ac0..ddae307007 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -33,7 +33,7 @@ STRICT_MODE_OFF //todo what does this do? #include #include #include -#include +#include #include #include #include diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index cd170cc1ac..4097679e5b 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -105,7 +105,8 @@ void AirsimROSWrapper::initialize_ros() // nh_->get_parameter("max_horz_vel", max_horz_vel_) create_ros_pubs_from_settings_json(); - airsim_control_update_timer_ = nh_private_->createTimer(ros::Duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); + airsim_control_update_timer_ = nh_private_->create_wall_timer(std::chrono::duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); + // airsim_control_update_timer_ = nh_private_->createTimer(ros::Duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); } // XmlRpc::XmlRpcValue can't be const in this case @@ -905,7 +906,7 @@ ros::Time AirsimROSWrapper::airsim_timestamp_to_ros(const msr::airlib::TTimePoin return cur_time; } -void AirsimROSWrapper::drone_state_timer_cb(const ros::TimerEvent& event) +void AirsimROSWrapper::drone_state_timer_cb(/* const ros::TimerEvent& event */) { try { // todo this is global origin From a44eb9692b5e9846dcf8319e909a16f1564e1f52 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 15 Aug 2021 02:02:01 -0700 Subject: [PATCH 021/123] - update --- .../airsim_ros_pkgs/include/airsim_ros_wrapper.h | 12 ++++++------ ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 13 +++++++------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index ddae307007..e479fd0cb5 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -216,9 +216,9 @@ class AirsimROSWrapper }; /// ROS timer callbacks - void img_response_timer_cb(const ros::TimerEvent& event); // update images from airsim_client_ every nth sec - void drone_state_timer_cb(const ros::TimerEvent& event); // update drone state from airsim_client_ every nth sec - void lidar_timer_cb(const ros::TimerEvent& event); + void img_response_timer_cb(/* const ros::TimerEvent& event */); // update images from airsim_client_ every nth sec + void drone_state_timer_cb(/* const ros::TimerEvent& event */); // update drone state from airsim_client_ every nth sec + void lidar_timer_cb(/* const ros::TimerEvent& event */); /// ROS subscriber callbacks void vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg, const std::string& vehicle_name); @@ -360,15 +360,15 @@ class AirsimROSWrapper tf2_ros::StaticTransformBroadcaster static_tf_pub_; bool isENU_ = false; - tf2_ros::Buffer tf_buffer_; - tf2_ros::TransformListener tf_listener_; + std::shared_ptr tf_buffer_; + std::shared_ptr tf_listener_; /// ROS params double vel_cmd_duration_; /// ROS Timers. ros::Timer airsim_img_response_timer_; - ros::Timer airsim_control_update_timer_; + rclcpp::TimerBase::SharedPtr airsim_control_update_timer_; ros::Timer airsim_lidar_update_timer_; typedef std::pair, std::string> airsim_img_request_vehicle_name_pair; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 4097679e5b..0c1fed3fdf 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -35,7 +35,6 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const , airsim_client_images_(host_ip) , airsim_client_lidar_(host_ip) , airsim_settings_parser_(host_ip) - , tf_listener_(tf_buffer_) { ros_clock_.clock.fromSec(0); is_used_lidar_timer_cb_queue_ = false; @@ -49,6 +48,8 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const airsim_mode_ = AIRSIM_MODE::CAR; RCLCPP_INFO(nh_->get_logger(), "Setting ROS wrapper to CAR mode"); } + tf_buffer_ = std::shared_ptr(nh_->get_clock()); + tf_listener_ = std::make_shared(tf_buffer_); initialize_ros(); @@ -307,7 +308,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() double update_airsim_img_response_every_n_sec; nh_private_->get_parameter("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); - ros::TimerOptions timer_options(ros::Duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this, _1), &img_timer_cb_queue_); + ros::TimerOptions timer_options(ros::Duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this), &img_timer_cb_queue_); airsim_img_response_timer_ = nh_private_->createTimer(timer_options); is_used_img_timer_cb_queue_ = true; } @@ -317,7 +318,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() double update_lidar_every_n_sec; nh_private_->get_parameter("update_lidar_every_n_sec", update_lidar_every_n_sec); // nh_private_->setCallbackQueue(&lidar_timer_cb_queue_); - ros::TimerOptions timer_options(ros::Duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this, _1), &lidar_timer_cb_queue_); + ros::TimerOptions timer_options(ros::Duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this), &lidar_timer_cb_queue_); airsim_lidar_update_timer_ = nh_private_->createTimer(timer_options); is_used_lidar_timer_cb_queue_ = true; } @@ -906,7 +907,7 @@ ros::Time AirsimROSWrapper::airsim_timestamp_to_ros(const msr::airlib::TTimePoin return cur_time; } -void AirsimROSWrapper::drone_state_timer_cb(/* const ros::TimerEvent& event */) +void AirsimROSWrapper::drone_state_timer_cb() { try { // todo this is global origin @@ -1256,7 +1257,7 @@ void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const st vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_optical_msg); } -void AirsimROSWrapper::img_response_timer_cb(const ros::TimerEvent& event) +void AirsimROSWrapper::img_response_timer_cb() { try { int image_response_idx = 0; @@ -1277,7 +1278,7 @@ void AirsimROSWrapper::img_response_timer_cb(const ros::TimerEvent& event) } } -void AirsimROSWrapper::lidar_timer_cb(const ros::TimerEvent& event) +void AirsimROSWrapper::lidar_timer_cb() { try { for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { From 5bb434435a8b505605b1159d636d20d6bbba2e84 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 15 Aug 2021 02:22:26 -0700 Subject: [PATCH 022/123] - update time - update setParam --- .../include/airsim_ros_wrapper.h | 8 ++-- .../src/airsim_ros_wrapper.cpp | 38 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index e479fd0cb5..d8ad6051c1 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -260,8 +260,8 @@ class AirsimROSWrapper sensor_msgs::msg::CameraInfo generate_cam_info(const std::string& camera_name, const CameraSetting& camera_setting, const CaptureSetting& capture_setting) const; cv::Mat manual_decode_depth(const ImageResponse& img_response) const; - sensor_msgs::msg::ImagePtr get_img_msg_from_response(const ImageResponse& img_response, const ros::Time curr_ros_time, const std::string frame_id); - sensor_msgs::msg::ImagePtr get_depth_img_msg_from_response(const ImageResponse& img_response, const ros::Time curr_ros_time, const std::string frame_id); + sensor_msgs::msg::ImagePtr get_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id); + sensor_msgs::msg::ImagePtr get_depth_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id); void process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name); @@ -297,8 +297,8 @@ class AirsimROSWrapper void convert_yaml_to_simple_mat(const YAML::Node& node, SimpleMatrix& m) const; // todo ugly // simulation time utility - ros::Time airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const; - ros::Time chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const; + rclcpp::Time airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const; + rclcpp::Time chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const; private: // subscriber / services for ALL robots diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 0c1fed3fdf..cd84f39271 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -107,7 +107,7 @@ void AirsimROSWrapper::initialize_ros() create_ros_pubs_from_settings_json(); airsim_control_update_timer_ = nh_private_->create_wall_timer(std::chrono::duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); - // airsim_control_update_timer_ = nh_private_->createTimer(ros::Duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); + // airsim_control_update_timer_ = nh_private_->createTimer(rclcpp::Duration (update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); } // XmlRpc::XmlRpcValue can't be const in this case @@ -132,7 +132,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() auto& vehicle_setting = curr_vehicle_elem.second; auto curr_vehicle_name = curr_vehicle_elem.first; - nh_->setParam("/vehicle_name", curr_vehicle_name); + nh_->set_parameter("/vehicle_name", curr_vehicle_name); set_nans_to_zeros_in_pose(*vehicle_setting); @@ -308,7 +308,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() double update_airsim_img_response_every_n_sec; nh_private_->get_parameter("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); - ros::TimerOptions timer_options(ros::Duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this), &img_timer_cb_queue_); + ros::TimerOptions timer_options(rclcpp::Duration (update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this), &img_timer_cb_queue_); airsim_img_response_timer_ = nh_private_->createTimer(timer_options); is_used_img_timer_cb_queue_ = true; } @@ -318,7 +318,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() double update_lidar_every_n_sec; nh_private_->get_parameter("update_lidar_every_n_sec", update_lidar_every_n_sec); // nh_private_->setCallbackQueue(&lidar_timer_cb_queue_); - ros::TimerOptions timer_options(ros::Duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this), &lidar_timer_cb_queue_); + ros::TimerOptions timer_options(rclcpp::Duration (update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this), &lidar_timer_cb_queue_); airsim_lidar_update_timer_ = nh_private_->createTimer(timer_options); is_used_lidar_timer_cb_queue_ = true; } @@ -703,7 +703,7 @@ nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(con sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const { sensor_msgs::msg::PointCloud2 lidar_msg; - lidar_msg.header.stamp = ros::Time::now(); + lidar_msg.header.stamp = nh_->get_clock()->now().toMsg(); lidar_msg.header.frame_id = vehicle_name; if (lidar_data.point_cloud.size() > 3) { @@ -741,7 +741,7 @@ sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const if (isENU_) { try { sensor_msgs::msg::PointCloud2 lidar_msg_enu; - auto transformStampedENU = tf_buffer_.lookupTransform(AIRSIM_FRAME_ID, vehicle_name, ros::Time(0), ros::Duration(1)); + auto transformStampedENU = tf_buffer_.lookupTransform(AIRSIM_FRAME_ID, vehicle_name, rclcpp::Time(0), rclcpp::Duration (1)); tf2::doTransform(lidar_msg, lidar_msg_enu, transformStampedENU); lidar_msg_enu.header.stamp = lidar_msg.header.stamp; @@ -751,7 +751,7 @@ sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const } catch (tf2::TransformException& ex) { RCLCPP_WARN(nh_->get_logger(), "%s", ex.what()); - ros::Duration(1.0).sleep(); + rclcpp::Duration (1.0).sleep(); } } @@ -890,20 +890,20 @@ sensor_msgs::msg::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo return gps_msg; } -ros::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const +rclcpp::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const { auto dur = std::chrono::duration(stamp.time_since_epoch()); - ros::Time cur_time; + rclcpp::Time cur_time; cur_time.fromSec(dur.count()); return cur_time; } -ros::Time AirsimROSWrapper::airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const +rclcpp::Time AirsimROSWrapper::airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const { // airsim appears to use chrono::system_clock with nanosecond precision std::chrono::nanoseconds dur(stamp); std::chrono::time_point tp(dur); - ros::Time cur_time = chrono_timestamp_to_ros(tp); + rclcpp::Time cur_time = chrono_timestamp_to_ros(tp); return cur_time; } @@ -950,10 +950,10 @@ void AirsimROSWrapper::update_and_publish_static_transforms(VehicleROS* vehicle_ } } -ros::Time AirsimROSWrapper::update_state() +rclcpp::Time AirsimROSWrapper::update_state() { bool got_sim_time = false; - ros::Time curr_ros_time = ros::Time::now(); + rclcpp::Time curr_ros_time = nh_->get_clock()->now(); //should be easier way to get the sim time through API, something like: //msr::airlib::Environment::State env = airsim_client_->simGetGroundTruthEnvironment(""); @@ -961,7 +961,7 @@ ros::Time AirsimROSWrapper::update_state() // iterate over drones for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - ros::Time vehicle_time; + rclcpp::Time vehicle_time; // get drone state from airsim auto& vehicle_ros = vehicle_name_ptr_pair.second; @@ -1173,7 +1173,7 @@ void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const V { geometry_msgs::msg::TransformStamped vehicle_tf_msg; vehicle_tf_msg.header.frame_id = world_frame_id_; - vehicle_tf_msg.header.stamp = ros::Time::now(); + vehicle_tf_msg.header.stamp = nh_->get_clock()->now().toMsg(); vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name; vehicle_tf_msg.transform.translation.x = vehicle_setting.position.x(); vehicle_tf_msg.transform.translation.y = vehicle_setting.position.y(); @@ -1310,7 +1310,7 @@ cv::Mat AirsimROSWrapper::manual_decode_depth(const ImageResponse& img_response) } sensor_msgs::msg::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, - const ros::Time curr_ros_time, + const rclcpp::Time curr_ros_time, const std::string frame_id) { sensor_msgs::msg::ImagePtr img_msg_ptr = boost::make_shared(); @@ -1328,7 +1328,7 @@ sensor_msgs::msg::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const Ima } sensor_msgs::msg::ImagePtr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, - const ros::Time curr_ros_time, + const rclcpp::Time curr_ros_time, const std::string frame_id) { // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, @@ -1360,7 +1360,7 @@ sensor_msgs::msg::CameraInfo AirsimROSWrapper::generate_cam_info(const std::stri void AirsimROSWrapper::process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name) { // todo add option to use airsim time (image_response.TTimePoint) like Gazebo /use_sim_time param - ros::Time curr_ros_time = ros::Time::now(); + rclcpp::Time curr_ros_time = nh_->get_clock()->now(); int img_response_idx_internal = img_response_idx; for (const auto& curr_img_response : img_response_vec) { @@ -1395,7 +1395,7 @@ void AirsimROSWrapper::process_and_publish_img_response(const std::vector Date: Sun, 15 Aug 2021 02:41:24 -0700 Subject: [PATCH 023/123] - update imageptr --- .../src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 4 ++-- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index d8ad6051c1..2215341a64 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -260,8 +260,8 @@ class AirsimROSWrapper sensor_msgs::msg::CameraInfo generate_cam_info(const std::string& camera_name, const CameraSetting& camera_setting, const CaptureSetting& capture_setting) const; cv::Mat manual_decode_depth(const ImageResponse& img_response) const; - sensor_msgs::msg::ImagePtr get_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id); - sensor_msgs::msg::ImagePtr get_depth_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id); + sensor_msgs::msg::Image::SharedPtr get_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id); + sensor_msgs::msg::Image::SharedPtr get_depth_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id); void process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name); diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index cd84f39271..154a53ac1c 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -703,7 +703,7 @@ nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(con sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const { sensor_msgs::msg::PointCloud2 lidar_msg; - lidar_msg.header.stamp = nh_->get_clock()->now().toMsg(); + lidar_msg.header.stamp = nh_->get_clock()->now(); lidar_msg.header.frame_id = vehicle_name; if (lidar_data.point_cloud.size() > 3) { @@ -1173,7 +1173,7 @@ void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const V { geometry_msgs::msg::TransformStamped vehicle_tf_msg; vehicle_tf_msg.header.frame_id = world_frame_id_; - vehicle_tf_msg.header.stamp = nh_->get_clock()->now().toMsg(); + vehicle_tf_msg.header.stamp = nh_->get_clock()->now(); vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name; vehicle_tf_msg.transform.translation.x = vehicle_setting.position.x(); vehicle_tf_msg.transform.translation.y = vehicle_setting.position.y(); @@ -1309,11 +1309,11 @@ cv::Mat AirsimROSWrapper::manual_decode_depth(const ImageResponse& img_response) return mat; } -sensor_msgs::msg::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, +sensor_msgs::msg::Image::SharedPtr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id) { - sensor_msgs::msg::ImagePtr img_msg_ptr = boost::make_shared(); + sensor_msgs::msg::Image::SharedPtr img_msg_ptr = boost::make_shared(); img_msg_ptr->data = img_response.image_data_uint8; img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes img_msg_ptr->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); @@ -1327,14 +1327,14 @@ sensor_msgs::msg::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const Ima return img_msg_ptr; } -sensor_msgs::msg::ImagePtr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, +sensor_msgs::msg::Image::SharedPtr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id) { // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, // hence the dependency on opencv and cv_bridge. however, this is an extremely fast op, so no big deal. cv::Mat depth_img = manual_decode_depth(img_response); - sensor_msgs::msg::ImagePtr depth_img_msg = cv_bridge::CvImage(std_msgs::Header(), "32FC1", depth_img).toImageMsg(); + sensor_msgs::msg::Image::SharedPtr depth_img_msg = cv_bridge::CvImage(std_msgs::Header(), "32FC1", depth_img).toImageMsg(); depth_img_msg->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); depth_img_msg->header.frame_id = frame_id; return depth_img_msg; From 8326c124375c25fb8a486f1cd6b770b4b998eee6 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 15 Aug 2021 02:46:01 -0700 Subject: [PATCH 024/123] - cosmetic --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 154a53ac1c..0fc635fd53 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -308,7 +308,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() double update_airsim_img_response_every_n_sec; nh_private_->get_parameter("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); - ros::TimerOptions timer_options(rclcpp::Duration (update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this), &img_timer_cb_queue_); + ros::TimerOptions timer_options(rclcpp::Duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this), &img_timer_cb_queue_); airsim_img_response_timer_ = nh_private_->createTimer(timer_options); is_used_img_timer_cb_queue_ = true; } @@ -318,7 +318,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() double update_lidar_every_n_sec; nh_private_->get_parameter("update_lidar_every_n_sec", update_lidar_every_n_sec); // nh_private_->setCallbackQueue(&lidar_timer_cb_queue_); - ros::TimerOptions timer_options(rclcpp::Duration (update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this), &lidar_timer_cb_queue_); + ros::TimerOptions timer_options(rclcpp::Duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this), &lidar_timer_cb_queue_); airsim_lidar_update_timer_ = nh_private_->createTimer(timer_options); is_used_lidar_timer_cb_queue_ = true; } @@ -741,7 +741,7 @@ sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const if (isENU_) { try { sensor_msgs::msg::PointCloud2 lidar_msg_enu; - auto transformStampedENU = tf_buffer_.lookupTransform(AIRSIM_FRAME_ID, vehicle_name, rclcpp::Time(0), rclcpp::Duration (1)); + auto transformStampedENU = tf_buffer_.lookupTransform(AIRSIM_FRAME_ID, vehicle_name, rclcpp::Time(0), rclcpp::Duration(1)); tf2::doTransform(lidar_msg, lidar_msg_enu, transformStampedENU); lidar_msg_enu.header.stamp = lidar_msg.header.stamp; @@ -751,7 +751,7 @@ sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const } catch (tf2::TransformException& ex) { RCLCPP_WARN(nh_->get_logger(), "%s", ex.what()); - rclcpp::Duration (1.0).sleep(); + rclcpp::Duration(1.0).sleep(); } } From 6fc7aa2b3f95572c4a347681031196b0870f4213 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 15 Aug 2021 05:05:05 -0700 Subject: [PATCH 025/123] - fix cb with placeholders and args --- .../include/airsim_ros_wrapper.h | 2 +- .../src/airsim_ros_wrapper.cpp | 45 ++++++++++--------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 2215341a64..3cefbad9be 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -374,7 +374,7 @@ class AirsimROSWrapper typedef std::pair, std::string> airsim_img_request_vehicle_name_pair; std::vector airsim_img_request_vehicle_name_pair_vec_; std::vector image_pub_vec_; - std::vector cam_info_pub_vec_; + std::vector::SharedPtr> cam_info_pub_vec_; std::vector camera_info_msg_vec_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 0fc635fd53..4cd4487260 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -48,8 +48,8 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const airsim_mode_ = AIRSIM_MODE::CAR; RCLCPP_INFO(nh_->get_logger(), "Setting ROS wrapper to CAR mode"); } - tf_buffer_ = std::shared_ptr(nh_->get_clock()); - tf_listener_ = std::make_shared(tf_buffer_); + tf_buffer_ = std::make_shared(nh_->get_clock()); + tf_listener_ = std::make_shared(*tf_buffer_); initialize_ros(); @@ -95,11 +95,11 @@ void AirsimROSWrapper::initialize_ros() nh_private_->get_parameter("is_vulkan", is_vulkan_); nh_private_->get_parameter("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); nh_private_->get_parameter("publish_clock", publish_clock_); - nh_private_->param("world_frame_id", world_frame_id_, world_frame_id_); + nh_private_->get_parameter_or("world_frame_id", world_frame_id_, world_frame_id_); odom_frame_id_ = world_frame_id_ == AIRSIM_FRAME_ID ? AIRSIM_ODOM_FRAME_ID : ENU_ODOM_FRAME_ID; - nh_private_->param("odom_frame_id", odom_frame_id_, odom_frame_id_); + nh_private_->get_parameter_or("odom_frame_id", odom_frame_id_, odom_frame_id_); isENU_ = !(odom_frame_id_ == AIRSIM_ODOM_FRAME_ID); - nh_private_->param("coordinate_system_enu", isENU_, isENU_); + nh_private_->get_parameter_or("coordinate_system_enu", isENU_, isENU_); vel_cmd_duration_ = 0.05; // todo rosparam // todo enforce dynamics constraints in this node as well? // nh_->get_parameter("max_vert_vel_", max_vert_vel_); @@ -161,18 +161,23 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // bind to a single callback. todo optimal subs queue length // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument - drone->vel_cmd_body_frame_sub = nh_private_->create_subscription(curr_vehicle_name + "/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name)); // todo ros::TransportHints().tcpNoDelay(); - drone->vel_cmd_world_frame_sub = nh_private_->create_subscription(curr_vehicle_name + "/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name)); + std::function fcn_vel_cmd_body_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name); + drone->vel_cmd_body_frame_sub = nh_private_->create_subscription(curr_vehicle_name + "/vel_cmd_body_frame", 1, fcn_vel_cmd_body_frame_sub); // todo ros::TransportHints().tcpNoDelay(); - drone->takeoff_srvr = nh_private_->create_service(curr_vehicle_name + "/takeoff", - std::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); - drone->land_srvr = nh_private_->create_service(curr_vehicle_name + "/land", - std::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); + std::function fcn_vel_cmd_world_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name); + drone->vel_cmd_world_frame_sub = nh_private_->create_subscription(curr_vehicle_name + "/vel_cmd_world_frame", 1, fcn_vel_cmd_world_frame_sub); + + std::function, std::shared_ptr)> fcn_takeoff_srvr = std::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name); + drone->takeoff_srvr = nh_private_->create_service(curr_vehicle_name + "/takeoff",fcn_takeoff_srvr); + + std::function, std::shared_ptr)> fcn_land_srvr = std::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name); + drone->land_srvr = nh_private_->create_service(curr_vehicle_name + "/land", fcn_land_srvr); // vehicle_ros.reset_srvr = nh_private_->create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); } else { auto car = static_cast(vehicle_ros.get()); - car->car_cmd_sub = nh_private_->create_subscription(curr_vehicle_name + "/car_cmd", 1, std::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name)); + std::function fcn_car_cmd_sub = std::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name); + car->car_cmd_sub = nh_private_->create_subscription(curr_vehicle_name + "/car_cmd", 1, fcn_car_cmd_sub); car->car_state_pub = nh_private_->create_publisher(curr_vehicle_name + "/car_state", 10); } @@ -703,7 +708,7 @@ nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(con sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const { sensor_msgs::msg::PointCloud2 lidar_msg; - lidar_msg.header.stamp = nh_->get_clock()->now(); + lidar_msg.header.stamp = nh_->now(); lidar_msg.header.frame_id = vehicle_name; if (lidar_data.point_cloud.size() > 3) { @@ -741,7 +746,7 @@ sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const if (isENU_) { try { sensor_msgs::msg::PointCloud2 lidar_msg_enu; - auto transformStampedENU = tf_buffer_.lookupTransform(AIRSIM_FRAME_ID, vehicle_name, rclcpp::Time(0), rclcpp::Duration(1)); + auto transformStampedENU = tf_buffer_->lookupTransform(AIRSIM_FRAME_ID, vehicle_name, rclcpp::Time(0), rclcpp::Duration(1)); tf2::doTransform(lidar_msg, lidar_msg_enu, transformStampedENU); lidar_msg_enu.header.stamp = lidar_msg.header.stamp; @@ -953,7 +958,7 @@ void AirsimROSWrapper::update_and_publish_static_transforms(VehicleROS* vehicle_ rclcpp::Time AirsimROSWrapper::update_state() { bool got_sim_time = false; - rclcpp::Time curr_ros_time = nh_->get_clock()->now(); + rclcpp::Time curr_ros_time = nh_->now(); //should be easier way to get the sim time through API, something like: //msr::airlib::Environment::State env = airsim_client_->simGetGroundTruthEnvironment(""); @@ -1173,7 +1178,7 @@ void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const V { geometry_msgs::msg::TransformStamped vehicle_tf_msg; vehicle_tf_msg.header.frame_id = world_frame_id_; - vehicle_tf_msg.header.stamp = nh_->get_clock()->now(); + vehicle_tf_msg.header.stamp = nh_->now(); vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name; vehicle_tf_msg.transform.translation.x = vehicle_setting.position.x(); vehicle_tf_msg.transform.translation.y = vehicle_setting.position.y(); @@ -1334,7 +1339,7 @@ sensor_msgs::msg::Image::SharedPtr AirsimROSWrapper::get_depth_img_msg_from_resp // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, // hence the dependency on opencv and cv_bridge. however, this is an extremely fast op, so no big deal. cv::Mat depth_img = manual_decode_depth(img_response); - sensor_msgs::msg::Image::SharedPtr depth_img_msg = cv_bridge::CvImage(std_msgs::Header(), "32FC1", depth_img).toImageMsg(); + sensor_msgs::msg::Image::SharedPtr depth_img_msg = cv_bridge::CvImage(std_msgs::msg::Header(), "32FC1", depth_img).toImageMsg(); depth_img_msg->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); depth_img_msg->header.frame_id = frame_id; return depth_img_msg; @@ -1360,7 +1365,7 @@ sensor_msgs::msg::CameraInfo AirsimROSWrapper::generate_cam_info(const std::stri void AirsimROSWrapper::process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name) { // todo add option to use airsim time (image_response.TTimePoint) like Gazebo /use_sim_time param - rclcpp::Time curr_ros_time = nh_->get_clock()->now(); + rclcpp::Time curr_ros_time = nh_->now(); int img_response_idx_internal = img_response_idx; for (const auto& curr_img_response : img_response_vec) { @@ -1378,13 +1383,13 @@ void AirsimROSWrapper::process_and_publish_img_response(const std::vectorpublish(get_depth_img_msg_from_response(curr_img_response, + image_pub_vec_[img_response_idx_internal].publish(get_depth_img_msg_from_response(curr_img_response, curr_ros_time, curr_img_response.camera_name + "_optical")); } // Scene / Segmentation / SurfaceNormals / Infrared else { - image_pub_vec_[img_response_idx_internal]->publish(get_img_msg_from_response(curr_img_response, + image_pub_vec_[img_response_idx_internal].publish(get_img_msg_from_response(curr_img_response, curr_ros_time, curr_img_response.camera_name + "_optical")); } From cb14693be102b0f406d95a47b6399a7140b82b06 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 15 Aug 2021 05:24:40 -0700 Subject: [PATCH 026/123] - fix image msg ptr --- ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 4 ++-- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 3cefbad9be..0f521fef83 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -260,8 +260,8 @@ class AirsimROSWrapper sensor_msgs::msg::CameraInfo generate_cam_info(const std::string& camera_name, const CameraSetting& camera_setting, const CaptureSetting& capture_setting) const; cv::Mat manual_decode_depth(const ImageResponse& img_response) const; - sensor_msgs::msg::Image::SharedPtr get_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id); - sensor_msgs::msg::Image::SharedPtr get_depth_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id); + std::shared_ptr get_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id); + std::shared_ptr get_depth_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id); void process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name); diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 4cd4487260..c662de2ee4 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -1314,11 +1314,11 @@ cv::Mat AirsimROSWrapper::manual_decode_depth(const ImageResponse& img_response) return mat; } -sensor_msgs::msg::Image::SharedPtr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, +std::shared_ptr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id) { - sensor_msgs::msg::Image::SharedPtr img_msg_ptr = boost::make_shared(); + std::shared_ptr img_msg_ptr = std::make_shared();//boost::make_shared(); img_msg_ptr->data = img_response.image_data_uint8; img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes img_msg_ptr->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); @@ -1332,14 +1332,14 @@ sensor_msgs::msg::Image::SharedPtr AirsimROSWrapper::get_img_msg_from_response(c return img_msg_ptr; } -sensor_msgs::msg::Image::SharedPtr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, +std::shared_ptr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, const rclcpp::Time curr_ros_time, const std::string frame_id) { // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, // hence the dependency on opencv and cv_bridge. however, this is an extremely fast op, so no big deal. cv::Mat depth_img = manual_decode_depth(img_response); - sensor_msgs::msg::Image::SharedPtr depth_img_msg = cv_bridge::CvImage(std_msgs::msg::Header(), "32FC1", depth_img).toImageMsg(); + std::shared_ptr depth_img_msg = cv_bridge::CvImage(std_msgs::msg::Header(), "32FC1", depth_img).toImageMsg(); depth_img_msg->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); depth_img_msg->header.frame_id = frame_id; return depth_img_msg; From 639054b3307e608b30604d4c7d897b55885b9ca1 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 15 Aug 2021 05:27:27 -0700 Subject: [PATCH 027/123] - fix set_parameter --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index c662de2ee4..e98de540eb 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -132,7 +132,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() auto& vehicle_setting = curr_vehicle_elem.second; auto curr_vehicle_name = curr_vehicle_elem.first; - nh_->set_parameter("/vehicle_name", curr_vehicle_name); + nh_->set_parameter(rclcpp::Parameter("/vehicle_name"), curr_vehicle_name); set_nans_to_zeros_in_pose(*vehicle_setting); From bd3add753251c772ecbca31f84967de968442461 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 15 Aug 2021 06:14:28 -0700 Subject: [PATCH 028/123] - update --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index e98de540eb..dcde60523a 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -106,7 +106,7 @@ void AirsimROSWrapper::initialize_ros() // nh_->get_parameter("max_horz_vel", max_horz_vel_) create_ros_pubs_from_settings_json(); - airsim_control_update_timer_ = nh_private_->create_wall_timer(std::chrono::duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); + airsim_control_update_timer_ = nh_private_->create_wall_timer(std::chrono::milliseconds(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); // airsim_control_update_timer_ = nh_private_->createTimer(rclcpp::Duration (update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); } @@ -756,7 +756,7 @@ sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const } catch (tf2::TransformException& ex) { RCLCPP_WARN(nh_->get_logger(), "%s", ex.what()); - rclcpp::Duration(1.0).sleep(); + rclcpp::Rate(1.0).sleep(); } } From 2e1f18bb130a8d178d8e596403e507586a3065be Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 15 Aug 2021 07:59:24 -0700 Subject: [PATCH 029/123] - commit fix --- ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 6 +++--- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 0f521fef83..df59dc7a56 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -174,7 +174,7 @@ class AirsimROSWrapper std::vector static_tf_msg_vec; - rclcpp::TimerBase::SharedPtr stamp; + rclcpp::Time stamp; std::string odom_frame_id; /// Status @@ -239,7 +239,7 @@ class AirsimROSWrapper void update_commands(); // state, returns the simulation timestamp best guess based on drone state timestamp, airsim needs to return timestap for environment - rclcpp::TimerBase::SharedPtr update_state(); + rclcpp::Time AirsimROSWrapper::update_state(); void update_and_publish_static_transforms(VehicleROS* vehicle_ros); void publish_vehicle_state(); @@ -253,7 +253,7 @@ class AirsimROSWrapper bool reset_srv_cb(const std::shared_ptr request, const std::shared_ptr response); /// ROS tf broadcasters - void publish_camera_tf(const ImageResponse& img_response, const ros::Time& ros_time, const std::string& frame_id, const std::string& child_frame_id); + void publish_camera_tf(const ImageResponse& img_response, const rclcpp::Time& ros_time, const std::string& frame_id, const std::string& child_frame_id); void publish_odom_tf(const nav_msgs::msg::Odometry& odom_msg); /// camera helper methods diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index dcde60523a..132d6f82df 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -106,7 +106,7 @@ void AirsimROSWrapper::initialize_ros() // nh_->get_parameter("max_horz_vel", max_horz_vel_) create_ros_pubs_from_settings_json(); - airsim_control_update_timer_ = nh_private_->create_wall_timer(std::chrono::milliseconds(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); + airsim_control_update_timer_ = nh_private_->create_wall_timer(std::chrono::duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); // airsim_control_update_timer_ = nh_private_->createTimer(rclcpp::Duration (update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); } @@ -132,7 +132,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() auto& vehicle_setting = curr_vehicle_elem.second; auto curr_vehicle_name = curr_vehicle_elem.first; - nh_->set_parameter(rclcpp::Parameter("/vehicle_name"), curr_vehicle_name); + nh_->set_parameter(rclcpp::Parameter("/vehicle_name", curr_vehicle_name)); set_nans_to_zeros_in_pose(*vehicle_setting); @@ -1269,7 +1269,7 @@ void AirsimROSWrapper::img_response_timer_cb() for (const auto& airsim_img_request_vehicle_name_pair : airsim_img_request_vehicle_name_pair_vec_) { const std::vector& img_response = airsim_client_images_.simGetImages(airsim_img_request_vehicle_name_pair.first, airsim_img_request_vehicle_name_pair.second); - if (img_response->size() == airsim_img_request_vehicle_name_pair.first.size()) { + if (img_response.size() == airsim_img_request_vehicle_name_pair.first.size()) { process_and_publish_img_response(img_response, image_response_idx, airsim_img_request_vehicle_name_pair.second); image_response_idx += img_response.size(); } From 9cd345c2d664bb609acf28c850e60f6fbf783dd1 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Mon, 16 Aug 2021 02:36:27 -0700 Subject: [PATCH 030/123] - chane sensor_pubs to seperate vectors - fix TransformBroadcaster --- .../include/airsim_ros_wrapper.h | 36 ++-- .../src/airsim_ros_wrapper.cpp | 163 ++++++++++-------- 2 files changed, 113 insertions(+), 86 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index df59dc7a56..0a840a2351 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -124,6 +124,14 @@ struct GimbalCmd // vehicle_name(vehicle_name), camera_name(camera_name), target_quat(target_quat) {}; }; +template +struct SensorPublisher +{ + SensorBase::SensorType sensor_type; + std::string sensor_name; + typename rclcpp::Publisher::SharedPtr publisher; +}; + class AirsimROSWrapper { public: @@ -146,13 +154,6 @@ class AirsimROSWrapper bool is_used_img_timer_cb_queue_; private: - struct SensorPublisher - { - SensorBase::SensorType sensor_type; - std::string sensor_name; - rclcpp::Publisher::SharedPtr publisher; - }; - // utility struct for a SINGLE robot class VehicleROS { @@ -165,9 +166,17 @@ class AirsimROSWrapper rclcpp::Publisher::SharedPtr global_gps_pub; rclcpp::Publisher::SharedPtr env_pub; airsim_interfaces::msg::Environment env_msg; - std::vector sensor_pubs; + + std::vector> barometer_pubs; + std::vector> imu_pubs; + std::vector> gps_pubs; + std::vector> magnetometer_pubs; + std::vector> distance_pubs; + std::vector> lidar_pubs; + + //std::vector sensor_pubs; // handle lidar seperately for max performance as data is collected on its own thread/callback - std::vector lidar_pubs; + //std::vector lidar_pubs; nav_msgs::msg::Odometry curr_odom; sensor_msgs::msg::NavSatFix gps_sensor_msg; @@ -239,7 +248,7 @@ class AirsimROSWrapper void update_commands(); // state, returns the simulation timestamp best guess based on drone state timestamp, airsim needs to return timestap for environment - rclcpp::Time AirsimROSWrapper::update_state(); + rclcpp::Time update_state(); void update_and_publish_static_transforms(VehicleROS* vehicle_ros); void publish_vehicle_state(); @@ -300,6 +309,9 @@ class AirsimROSWrapper rclcpp::Time airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const; rclcpp::Time chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const; + template + const SensorPublisher create_sensor_publisher(const string& sensor_type_name, const string& sensor_name, SensorBase::SensorType sensor_type, const string& topic_name, int QoS); + private: // subscriber / services for ALL robots rclcpp::Subscription::SharedPtr vel_cmd_all_body_frame_sub_; @@ -356,8 +368,8 @@ class AirsimROSWrapper const std::string AIRSIM_ODOM_FRAME_ID = "odom_local_ned"; const std::string ENU_ODOM_FRAME_ID = "odom_local_enu"; std::string odom_frame_id_ = AIRSIM_ODOM_FRAME_ID; - tf2_ros::TransformBroadcaster tf_broadcaster_; - tf2_ros::StaticTransformBroadcaster static_tf_pub_; + std::shared_ptr tf_broadcaster_; + std::shared_ptr static_tf_pub_; bool isENU_ = false; std::shared_ptr tf_buffer_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 132d6f82df..fe0264a573 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -50,7 +50,8 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const } tf_buffer_ = std::make_shared(nh_->get_clock()); tf_listener_ = std::make_shared(*tf_buffer_); - + tf_broadcaster_ = std::make_shared(nh_);; + static_tf_pub_= std::make_shared(nh_);; initialize_ros(); std::cout << "AirsimROSWrapper Initialized!\n"; @@ -219,67 +220,78 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() } // iterate over sensors - std::vector sensors; + // std::vector sensors; for (auto& curr_sensor_map : vehicle_setting->sensors) { auto& sensor_name = curr_sensor_map.first; auto& sensor_setting = curr_sensor_map.second; - + if (sensor_setting->enabled) { - SensorPublisher sensor_publisher; - sensor_publisher.sensor_name = sensor_setting->sensor_name; - sensor_publisher.sensor_type = sensor_setting->sensor_type; + switch (sensor_setting->sensor_type) { case SensorBase::SensorType::Barometer: { - std::cout << "Barometer" << std::endl; - sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/altimeter/" + sensor_name, 10); + SensorPublisher sensor_publisher = + create_sensor_publisher("Barometer",sensor_setting->sensor_name, sensor_setting->sensor_type, + curr_vehicle_name + "/altimeter/" + sensor_name, 10); + vehicle_ros->barometer_pubs.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Imu: { - std::cout << "Imu" << std::endl; - sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/imu/" + sensor_name, 10); + SensorPublisher sensor_publisher = + create_sensor_publisher("Imu",sensor_setting->sensor_name, sensor_setting->sensor_type, + curr_vehicle_name + "/imu/" + sensor_name, 10); + vehicle_ros->imu_pubs.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Gps: { - std::cout << "Gps" << std::endl; - sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/gps/" + sensor_name, 10); + SensorPublisher sensor_publisher = + create_sensor_publisher("Gps",sensor_setting->sensor_name, sensor_setting->sensor_type, + curr_vehicle_name + "/gps/" + sensor_name, 10); + vehicle_ros->gps_pubs.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Magnetometer: { - std::cout << "Magnetometer" << std::endl; - sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/magnetometer/" + sensor_name, 10); + SensorPublisher sensor_publisher = + create_sensor_publisher("Magnetometer",sensor_setting->sensor_name, sensor_setting->sensor_type, + curr_vehicle_name + "/magnetometer/" + sensor_name, 10); + vehicle_ros->magnetometer_pubs.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Distance: { - std::cout << "Distance" << std::endl; - sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/distance/" + sensor_name, 10); + SensorPublisher sensor_publisher = + create_sensor_publisher("Distance",sensor_setting->sensor_name, sensor_setting->sensor_type, + curr_vehicle_name + "/distance/" + sensor_name, 10); + vehicle_ros->distance_pubs.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Lidar: { - std::cout << "Lidar" << std::endl; auto lidar_setting = *static_cast(sensor_setting.get()); msr::airlib::LidarSimpleParams params; params.initializeFromSettings(lidar_setting); append_static_lidar_tf(vehicle_ros.get(), sensor_name, params); - sensor_publisher.publisher = nh_private_->create_publisher(curr_vehicle_name + "/lidar/" + sensor_name, 10); + + SensorPublisher sensor_publisher = + create_sensor_publisher("Lidar",sensor_setting->sensor_name, sensor_setting->sensor_type, + curr_vehicle_name + "/lidar/" + sensor_name, 10); + vehicle_ros->lidar_pubs.emplace_back(sensor_publisher); break; } default: { throw std::invalid_argument("Unexpected sensor type"); } } - sensors.emplace_back(sensor_publisher); + // sensors.emplace_back(sensor_publisher); } } - // we want fast access to the lidar sensors for callback handling, sort them out now - auto isLidar = std::function([](const SensorPublisher& pub) { - return pub.sensor_type == SensorBase::SensorType::Lidar; - }); - size_t cnt = std::count_if(sensors.begin(), sensors.end(), isLidar); - lidar_cnt += cnt; - vehicle_ros->lidar_pubs.resize(cnt); - vehicle_ros->sensor_pubs.resize(sensors.size() - cnt); - std::partition_copy(sensors.begin(), sensors.end(), vehicle_ros->lidar_pubs.begin(), vehicle_ros->sensor_pubs.begin(), isLidar); + // // we want fast access to the lidar sensors for callback handling, sort them out now + // auto isLidar = std::function([](const SensorPublisher& pub) { + // return pub.sensor_type == SensorBase::SensorType::Lidar; + // }); + // size_t cnt = std::count_if(sensors.begin(), sensors.end(), isLidar); + // lidar_cnt += cnt; + // vehicle_ros->lidar_pubs.resize(cnt); + // vehicle_ros->sensor_pubs.resize(sensors.size() - cnt); + // std::partition_copy(sensors.begin(), sensors.end(), vehicle_ros->lidar_pubs.begin(), vehicle_ros->sensor_pubs.begin(), isLidar); vehicle_name_ptr_map_.emplace(curr_vehicle_name, std::move(vehicle_ros)); // allows fast lookup in command callbacks in case of a lot of drones } @@ -331,6 +343,17 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() initialize_airsim(); } +template +const SensorPublisher AirsimROSWrapper::create_sensor_publisher(const string& sensor_type_name, const string& sensor_name, SensorBase::SensorType sensor_type, const string& topic_name, int QoS) +{ + std::cout << sensor_type_name << std::endl; + SensorPublisher sensor_publisher; + sensor_publisher.sensor_name = sensor_name; + sensor_publisher.sensor_type = sensor_type; + sensor_publisher.publisher = nh_private_->create_publisher(topic_name, QoS); + return sensor_publisher; +} + // todo: error check. if state is not landed, return error. bool AirsimROSWrapper::takeoff_srv_cb(std::shared_ptr request, std::shared_ptr response, const std::string& vehicle_name) { @@ -874,7 +897,7 @@ void AirsimROSWrapper::publish_odom_tf(const nav_msgs::msg::Odometry& odom_msg) odom_tf.transform.rotation.y = odom_msg.pose.pose.orientation.y; odom_tf.transform.rotation.z = odom_msg.pose.pose.orientation.z; odom_tf.transform.rotation.w = odom_msg.pose.pose.orientation.w; - tf_broadcaster_.sendTransform(odom_tf); + tf_broadcaster_->sendTransform(odom_tf); } airsim_interfaces::msg::GPSYaw AirsimROSWrapper::get_gps_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const @@ -950,7 +973,7 @@ void AirsimROSWrapper::update_and_publish_static_transforms(VehicleROS* vehicle_ if (vehicle_ros && !vehicle_ros->static_tf_msg_vec.empty()) { for (auto& static_tf_msg : vehicle_ros->static_tf_msg_vec) { static_tf_msg.header.stamp = vehicle_ros->stamp; - static_tf_pub_.sendTransform(static_tf_msg); + static_tf_pub_->sendTransform(static_tf_msg); } } } @@ -1047,48 +1070,40 @@ void AirsimROSWrapper::publish_vehicle_state() // ground truth GPS position from sim/HITL vehicle_ros->global_gps_pub->publish(vehicle_ros->gps_sensor_msg); - for (auto& sensor_publisher : vehicle_ros->sensor_pubs) { - switch (sensor_publisher.sensor_type) { - case SensorBase::SensorType::Barometer: { - auto baro_data = airsim_client_->getBarometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - airsim_interfaces::msg::Altimeter alt_msg = get_altimeter_msg_from_airsim(baro_data); - alt_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher->publish(alt_msg); - break; - } - case SensorBase::SensorType::Imu: { - auto imu_data = airsim_client_->getImuData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::msg::Imu imu_msg = get_imu_msg_from_airsim(imu_data); - imu_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher->publish(imu_msg); - break; - } - case SensorBase::SensorType::Distance: { - auto distance_data = airsim_client_->getDistanceSensorData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::msg::Range dist_msg = get_range_from_airsim(distance_data); - dist_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher->publish(dist_msg); - break; - } - case SensorBase::SensorType::Gps: { - auto gps_data = airsim_client_->getGpsData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::msg::NavSatFix gps_msg = get_gps_msg_from_airsim(gps_data); - gps_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher->publish(gps_msg); - break; - } - case SensorBase::SensorType::Lidar: { - // handled via callback - break; - } - case SensorBase::SensorType::Magnetometer: { - auto mag_data = airsim_client_->getMagnetometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::msg::MagneticField mag_msg = get_mag_msg_from_airsim(mag_data); - mag_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher->publish(mag_msg); - break; - } - } + for (auto& sensor_publisher : vehicle_ros->barometer_pubs) { + auto baro_data = airsim_client_->getBarometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + airsim_interfaces::msg::Altimeter alt_msg = get_altimeter_msg_from_airsim(baro_data); + alt_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher->publish(alt_msg); + } + + for (auto& sensor_publisher : vehicle_ros->imu_pubs) { + auto imu_data = airsim_client_->getImuData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::msg::Imu imu_msg = get_imu_msg_from_airsim(imu_data); + imu_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher->publish(imu_msg); + } + for (auto& sensor_publisher : vehicle_ros->distance_pubs) { + auto distance_data = airsim_client_->getDistanceSensorData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::msg::Range dist_msg = get_range_from_airsim(distance_data); + dist_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher->publish(dist_msg); + } + for (auto& sensor_publisher : vehicle_ros->gps_pubs) { + auto gps_data = airsim_client_->getGpsData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::msg::NavSatFix gps_msg = get_gps_msg_from_airsim(gps_data); + gps_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher->publish(gps_msg); + } + // case SensorBase::SensorType::Lidar: { + // // handled via callback + // break; + // } + for (auto& sensor_publisher : vehicle_ros->magnetometer_pubs) { + auto mag_data = airsim_client_->getMagnetometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::msg::MagneticField mag_msg = get_mag_msg_from_airsim(mag_data); + mag_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher->publish(mag_msg); } update_and_publish_static_transforms(vehicle_ros.get()); @@ -1441,8 +1456,8 @@ void AirsimROSWrapper::publish_camera_tf(const ImageResponse& img_response, cons quat_cam_optical.normalize(); tf2::convert(quat_cam_optical, cam_tf_optical_msg.transform.rotation); - tf_broadcaster_.sendTransform(cam_tf_body_msg); - tf_broadcaster_.sendTransform(cam_tf_optical_msg); + tf_broadcaster_->sendTransform(cam_tf_body_msg); + tf_broadcaster_->sendTransform(cam_tf_optical_msg); } void AirsimROSWrapper::convert_yaml_to_simple_mat(const YAML::Node& node, SimpleMatrix& m) const From 60cb1d6d0b398b0db667bc983ca0c7c0370c08b2 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Tue, 17 Aug 2021 04:16:10 -0700 Subject: [PATCH 031/123] - replace ros::AsyncSpinner logic --- .../include/airsim_ros_wrapper.h | 22 ++++++++++--------- ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 20 +++++++++++++---- .../src/airsim_ros_wrapper.cpp | 19 ++++++++++------ 3 files changed, 40 insertions(+), 21 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 0a840a2351..6d9bb47413 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -141,15 +141,15 @@ class AirsimROSWrapper CAR }; - AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_private, const std::string& host_ip); + AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_private, const std::shared_ptr nh_img, const std::shared_ptr nh_lidar, const std::string& host_ip); ~AirsimROSWrapper(){}; void initialize_airsim(); void initialize_ros(); // std::vector callback_queues_; - ros::AsyncSpinner img_async_spinner_; - ros::AsyncSpinner lidar_async_spinner_; + //ros::AsyncSpinner img_async_spinner_; + //ros::AsyncSpinner lidar_async_spinner_; bool is_used_lidar_timer_cb_queue_; bool is_used_img_timer_cb_queue_; @@ -225,9 +225,9 @@ class AirsimROSWrapper }; /// ROS timer callbacks - void img_response_timer_cb(/* const ros::TimerEvent& event */); // update images from airsim_client_ every nth sec - void drone_state_timer_cb(/* const ros::TimerEvent& event */); // update drone state from airsim_client_ every nth sec - void lidar_timer_cb(/* const ros::TimerEvent& event */); + void img_response_timer_cb(); // update images from airsim_client_ every nth sec + void drone_state_timer_cb(); // update drone state from airsim_client_ every nth sec + void lidar_timer_cb(); /// ROS subscriber callbacks void vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg, const std::string& vehicle_name); @@ -346,6 +346,8 @@ class AirsimROSWrapper std::shared_ptr nh_; std::shared_ptr nh_private_; + std::shared_ptr nh_img_; + std::shared_ptr nh_lidar_; // ros::NodeHandle nh_; @@ -353,8 +355,8 @@ class AirsimROSWrapper // todo not sure if async spinners shuold be inside this class, or should be instantiated in airsim_node.cpp, and cb queues should be public // todo for multiple drones with multiple sensors, this won't scale. make it a part of VehicleROS? - ros::CallbackQueue img_timer_cb_queue_; - ros::CallbackQueue lidar_timer_cb_queue_; + //ros::CallbackQueue img_timer_cb_queue_; + //ros::CallbackQueue lidar_timer_cb_queue_; std::mutex drone_control_mutex_; @@ -379,9 +381,9 @@ class AirsimROSWrapper double vel_cmd_duration_; /// ROS Timers. - ros::Timer airsim_img_response_timer_; + rclcpp::TimerBase::SharedPtr airsim_img_response_timer_; rclcpp::TimerBase::SharedPtr airsim_control_update_timer_; - ros::Timer airsim_lidar_update_timer_; + rclcpp::TimerBase::SharedPtr airsim_lidar_update_timer_; typedef std::pair, std::string> airsim_img_request_vehicle_name_pair; std::vector airsim_img_request_vehicle_name_pair_vec_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp index f0eac90487..51ac9ea322 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -1,6 +1,6 @@ #include "rclcpp/rclcpp.hpp" #include "airsim_ros_wrapper.h" -#include +//#include int main(int argc, char** argv) { @@ -9,19 +9,31 @@ int main(int argc, char** argv) rclcpp::init(argc, argv); rclcpp::Node nh = rclcpp::Node("airsim_node"); rclcpp::Node nh_private = nh.create_sub_node("~"); + rclcpp::Node nh_img = nh.create_sub_node("img"); + rclcpp::Node nh_lidar = nh.create_sub_node("lidar"); // ros::NodeHandle nh_private("~"); std::string host_ip = "localhost"; nh_private.get_parameter("host_ip", host_ip); - AirsimROSWrapper airsim_ros_wrapper(nh, nh_private, host_ip); + AirsimROSWrapper airsim_ros_wrapper(nh, nh_private, nh_img, nh_lidar, host_ip); if (airsim_ros_wrapper.is_used_img_timer_cb_queue_) { - airsim_ros_wrapper.img_async_spinner_.start(); + rclcpp::executors::SingleThreadedExecutor executor; + executor.add_node(nh_img); + while (rclcpp::ok()) { + executor.spin(nh_img); + } + // airsim_ros_wrapper.img_async_spinner_.start(); } if (airsim_ros_wrapper.is_used_lidar_timer_cb_queue_) { - airsim_ros_wrapper.lidar_async_spinner_.start(); + rclcpp::executors::SingleThreadedExecutor executor; + executor.add_node(nh_lidar); + while (rclcpp::ok()) { + executor.spin(nh_lidar); + } + // airsim_ros_wrapper.lidar_async_spinner_.start(); } ros::spin(); diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index fe0264a573..a8e85674cd 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -27,9 +27,11 @@ const std::unordered_map AirsimROSWrapper::image_type_int_to_s { 7, "Infrared" } }; -AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_private, const std::string& host_ip) - : nh_(nh), nh_private_(nh_private), img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ - lidar_async_spinner_(1, &lidar_timer_cb_queue_) +AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_private, const std::shared_ptr nh_img, const std::shared_ptr nh_lidar, const std::string& host_ip) + : nh_(nh), nh_private_(nh_private) + , nh_img_(nh_img), nh_lidar_(nh_lidar) + // , img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ + // lidar_async_spinner_(1, &lidar_timer_cb_queue_) , // same as above, but for lidar host_ip_(host_ip) , airsim_client_images_(host_ip) @@ -325,8 +327,10 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() double update_airsim_img_response_every_n_sec; nh_private_->get_parameter("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); - ros::TimerOptions timer_options(rclcpp::Duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this), &img_timer_cb_queue_); - airsim_img_response_timer_ = nh_private_->createTimer(timer_options); + // ros::TimerOptions timer_options(rclcpp::Duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this), &img_timer_cb_queue_); + // airsim_img_response_timer_ = nh_private_->createTimer(timer_options); + + airsim_img_response_timer_ = nh_img_->create_wall_timer(std::chrono::duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this)); is_used_img_timer_cb_queue_ = true; } @@ -335,8 +339,9 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() double update_lidar_every_n_sec; nh_private_->get_parameter("update_lidar_every_n_sec", update_lidar_every_n_sec); // nh_private_->setCallbackQueue(&lidar_timer_cb_queue_); - ros::TimerOptions timer_options(rclcpp::Duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this), &lidar_timer_cb_queue_); - airsim_lidar_update_timer_ = nh_private_->createTimer(timer_options); + //ros::TimerOptions timer_options(rclcpp::Duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this), &lidar_timer_cb_queue_); + //airsim_lidar_update_timer_ = nh_private_->createTimer(timer_options); + airsim_lidar_update_timer_ = nh_lidar_->create_wall_timer(std::chrono::duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this)); is_used_lidar_timer_cb_queue_ = true; } From a78ee599973a41b195020aff3b258ca3fc1e9297 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Tue, 17 Aug 2021 06:30:09 -0700 Subject: [PATCH 032/123] - update fromSec() --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index a8e85674cd..cd5bd7fdab 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -38,7 +38,8 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const , airsim_client_lidar_(host_ip) , airsim_settings_parser_(host_ip) { - ros_clock_.clock.fromSec(0); + // ros_clock_.clock.fromSec(0); + ros_clock_.clock = rclcpp::Time(0); //ToDo - is it the right conversion? is_used_lidar_timer_cb_queue_ = false; is_used_img_timer_cb_queue_ = false; @@ -926,8 +927,8 @@ sensor_msgs::msg::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo rclcpp::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const { auto dur = std::chrono::duration(stamp.time_since_epoch()); - rclcpp::Time cur_time; - cur_time.fromSec(dur.count()); + rclcpp::Time cur_time(dur.count(), 0); +// cur_time.fromSec(dur.count()); return cur_time; } From 0d0d183d6904f0290d668d45dc363c07a049d4a2 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Tue, 17 Aug 2021 08:16:11 -0700 Subject: [PATCH 033/123] - update --- ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 16 ++++++++-------- .../airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 2 +- .../src/pd_position_controller_simple_node.cpp | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp index 51ac9ea322..79c876e1f3 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -7,22 +7,22 @@ int main(int argc, char** argv) // ros::init(argc, argv, "airsim_node"); // ros::NodeHandle nh; rclcpp::init(argc, argv); - rclcpp::Node nh = rclcpp::Node("airsim_node"); - rclcpp::Node nh_private = nh.create_sub_node("~"); - rclcpp::Node nh_img = nh.create_sub_node("img"); - rclcpp::Node nh_lidar = nh.create_sub_node("lidar"); + std::shared_ptr nh = rclcpp::Node::make_shared("airsim_node"); + std::shared_ptr nh_private = nh->create_sub_node("~"); + std::shared_ptr nh_img = nh->create_sub_node("img"); + std::shared_ptr nh_lidar = nh->create_sub_node("lidar"); // ros::NodeHandle nh_private("~"); std::string host_ip = "localhost"; - nh_private.get_parameter("host_ip", host_ip); + nh_private->get_parameter("host_ip", host_ip); AirsimROSWrapper airsim_ros_wrapper(nh, nh_private, nh_img, nh_lidar, host_ip); if (airsim_ros_wrapper.is_used_img_timer_cb_queue_) { rclcpp::executors::SingleThreadedExecutor executor; executor.add_node(nh_img); while (rclcpp::ok()) { - executor.spin(nh_img); + executor.spin(); } // airsim_ros_wrapper.img_async_spinner_.start(); } @@ -31,12 +31,12 @@ int main(int argc, char** argv) rclcpp::executors::SingleThreadedExecutor executor; executor.add_node(nh_lidar); while (rclcpp::ok()) { - executor.spin(nh_lidar); + executor.spin(); } // airsim_ros_wrapper.lidar_async_spinner_.start(); } - ros::spin(); + rclcpp::spin(nh); return 0; } \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index cd5bd7fdab..cab3a26527 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -927,7 +927,7 @@ sensor_msgs::msg::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo rclcpp::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const { auto dur = std::chrono::duration(stamp.time_since_epoch()); - rclcpp::Time cur_time(dur.count(), 0); + rclcpp::Time cur_time(dur.count(), 0); //ToDo - is the right conversion? // cur_time.fromSec(dur.count()); return cur_time; } diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp index 907038b790..71b9367f3e 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp @@ -7,8 +7,8 @@ int main(int argc, char** argv) // ros::NodeHandle nh; rclcpp::init(argc, argv); // std::shared_ptr node = rclcpp::Node::make_shared("add_two_ints_server"); - std::shared_ptr nh = rclcpp::Node::make_shared("pid_position_controller_simple_node"); - std::shared_ptr nh_private = nh.create_sub_node("~"); + std::shared_ptr nh = rclcpp::Node::make_shared("pid_position_controller_simple_node"); + std::shared_ptr nh_private = nh->create_sub_node("~"); // ros::NodeHandle nh_private("~"); PIDPositionController controller(nh, nh_private); @@ -21,6 +21,6 @@ int main(int argc, char** argv) // async_spinner.start(); // single threaded spinner - ros::spin(); + rclcpp::spin(nh); return 0; } \ No newline at end of file From d35f0dd7b128c7e0bd0ec61a79b84ad875b8a7b8 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Wed, 18 Aug 2021 08:51:52 -0700 Subject: [PATCH 034/123] - add DEPENDENCIES to rosidl_generate_interfaces --- ros2/src/airsim_interfaces/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ros2/src/airsim_interfaces/CMakeLists.txt b/ros2/src/airsim_interfaces/CMakeLists.txt index 281ebab5df..854c13dd23 100644 --- a/ros2/src/airsim_interfaces/CMakeLists.txt +++ b/ros2/src/airsim_interfaces/CMakeLists.txt @@ -12,6 +12,9 @@ endif() find_package(ament_cmake REQUIRED) find_package(rosidl_default_generators REQUIRED) +find_package(std_msgs REQUIRED) +find_package(geometry_msgs REQUIRED) +find_package(geographic_msgs REQUIRED) rosidl_generate_interfaces(${PROJECT_NAME} "msg/GimbalAngleEulerCmd.msg" @@ -29,7 +32,7 @@ rosidl_generate_interfaces(${PROJECT_NAME} "srv/Land.srv" "srv/LandGroup.srv" "srv/Reset.srv" - "srv/SetLocalPosition.srv" + "srv/SetLocalPosition.srv" DEPENDENCIES std_msgs geometry_msgs geographic_msgs ) #install(FILES mapping_rules.yaml DESTINATION share/${PROJECT_NAME}) From 694eae7ba7c609721257ed12e932756d8fd0ba51 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Wed, 18 Aug 2021 08:52:11 -0700 Subject: [PATCH 035/123] - add inline to get_yaw_from_quat_msg() --- ros2/src/airsim_ros_pkgs/include/utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/include/utils.h b/ros2/src/airsim_ros_pkgs/include/utils.h index 9c62731921..a62f691a63 100755 --- a/ros2/src/airsim_ros_pkgs/include/utils.h +++ b/ros2/src/airsim_ros_pkgs/include/utils.h @@ -1,7 +1,7 @@ #include namespace utils { -double get_yaw_from_quat_msg(const geometry_msgs::msg::Quaternion& quat_msg) +inline double get_yaw_from_quat_msg(const geometry_msgs::msg::Quaternion& quat_msg) { tf2::Quaternion quat_tf; double roll, pitch, yaw; From f4fdcefb1aca40b1f4c457dddc5429a84ea32744 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Wed, 18 Aug 2021 08:52:34 -0700 Subject: [PATCH 036/123] - add launch files --- .../launch/airsim_node.launch.py | 65 +++++++++++++++++++ .../launch/static_transforms.launch.py | 21 ++++++ 2 files changed, 86 insertions(+) create mode 100644 ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py create mode 100644 ros2/src/airsim_ros_pkgs/launch/static_transforms.launch.py diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py b/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py new file mode 100644 index 0000000000..484c28cee1 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py @@ -0,0 +1,65 @@ +import os +import sys + +import launch +import launch_ros.actions +from ament_index_python.packages import get_package_share_directory + + +def generate_launch_description(): + ld = launch.LaunchDescription([ + launch.actions.DeclareLaunchArgument( + name='output', + default_value='log' + ), + launch.actions.DeclareLaunchArgument( + name='publish_clock', + default_value='false' + ), + launch.actions.DeclareLaunchArgument( + name='is_vulkan', + default_value='true' + ), + launch.actions.DeclareLaunchArgument( + name='host', + default_value='192.168.211.1' #ToDo - cahnge + ), + launch_ros.actions.Node( + package='airsim_ros_pkgs', + executable='airsim_node', + name='airsim_node', + output='screen', #ToDo-change to var + parameters=[ + { + 'is_vulkan': 'false' + }, + { + 'update_airsim_img_response_every_n_sec': '0.05' + }, + { + 'update_airsim_control_every_n_sec': '0.01' + }, + { + 'update_lidar_every_n_sec': '0.01' + }, + { + 'publish_clock': 'false' #launch.substitutions.LaunchConfiguration('publish_clock') #ToDo-change to var + }, + { + 'host_ip': '192.168.211.1'#launch.substitutions.LaunchConfiguration('host') #ToDo-change to var + } + ], + arguments=['--ros-args', '--log-level', 'INFO'] + )#, + # launch.actions.IncludeLaunchDescription( + # launch.launch_description_sources.PythonLaunchDescriptionSource( + # os.path.join(get_package_share_directory( + # 'airsim_ros_pkgs'), 'launch/static_transforms.launch.py') + # ) + # ) + ]) + return ld + + +if __name__ == '__main__': + generate_launch_description() diff --git a/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch.py b/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch.py new file mode 100644 index 0000000000..e5366582d4 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch.py @@ -0,0 +1,21 @@ +import os +import sys + +import launch +import launch_ros.actions + + +def generate_launch_description(): + ld = launch.LaunchDescription([ + launch_ros.actions.Node( + package='tf2_ros', + executable='static_transform_publisher', + name='ned_to_enu_pub', + arguments=['0', '0', '0', '1.57', '0', '3.14', 'world_ned', 'world_enu']#, '100'] + ) + ]) + return ld + + +if __name__ == '__main__': + generate_launch_description() From 28b5401f7bc9867cb3bf9c5565be346a4e41a96b Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Wed, 18 Aug 2021 08:53:05 -0700 Subject: [PATCH 037/123] - some fixes and ToDo's --- ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 16 +++++++--------- .../airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 7 +++++-- .../src/pd_position_controller_simple_node.cpp | 10 +++------- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp index 79c876e1f3..6b4d26decc 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -4,19 +4,17 @@ int main(int argc, char** argv) { - // ros::init(argc, argv, "airsim_node"); - // ros::NodeHandle nh; rclcpp::init(argc, argv); - std::shared_ptr nh = rclcpp::Node::make_shared("airsim_node"); - std::shared_ptr nh_private = nh->create_sub_node("~"); + rclcpp::NodeOptions node_options; + node_options.allow_undeclared_parameters(true); + std::shared_ptr nh = rclcpp::Node::make_shared("airsim_node", "airsim_node", node_options); + // std::shared_ptr nh_private = nh->create_sub_node("~/"); std::shared_ptr nh_img = nh->create_sub_node("img"); std::shared_ptr nh_lidar = nh->create_sub_node("lidar"); - // ros::NodeHandle nh_private("~"); - - std::string host_ip = "localhost"; - nh_private->get_parameter("host_ip", host_ip); - AirsimROSWrapper airsim_ros_wrapper(nh, nh_private, nh_img, nh_lidar, host_ip); + std::string host_ip = "192.168.211.1"; //ToDo - change + /* nh_private */nh->get_parameter("host_ip", host_ip); + AirsimROSWrapper airsim_ros_wrapper(nh, nh /* nh_private */, nh_img, nh_lidar, host_ip);//ToDo - do we really need nh_private? if (airsim_ros_wrapper.is_used_img_timer_cb_queue_) { rclcpp::executors::SingleThreadedExecutor executor; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index cab3a26527..d934fb8a4e 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -276,6 +276,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() create_sensor_publisher("Lidar",sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/lidar/" + sensor_name, 10); vehicle_ros->lidar_pubs.emplace_back(sensor_publisher); + lidar_cnt += 1; break; } default: { @@ -926,8 +927,10 @@ sensor_msgs::msg::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo rclcpp::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const { - auto dur = std::chrono::duration(stamp.time_since_epoch()); - rclcpp::Time cur_time(dur.count(), 0); //ToDo - is the right conversion? + + auto dur = std::chrono::duration_cast(stamp.time_since_epoch()); + // auto dur = std::chrono::duration(stamp.time_since_epoch()); + rclcpp::Time cur_time(dur.count()); //ToDo - is the right conversion? // cur_time.fromSec(dur.count()); return cur_time; } diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp index 71b9367f3e..c568d3a62f 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp @@ -3,15 +3,11 @@ int main(int argc, char** argv) { - // ros::init(argc, argv, "pid_position_controller_simple_node"); - // ros::NodeHandle nh; rclcpp::init(argc, argv); - // std::shared_ptr node = rclcpp::Node::make_shared("add_two_ints_server"); - std::shared_ptr nh = rclcpp::Node::make_shared("pid_position_controller_simple_node"); - std::shared_ptr nh_private = nh->create_sub_node("~"); - // ros::NodeHandle nh_private("~"); + std::shared_ptr nh = rclcpp::Node::make_shared("pid_position_controller_simple_node","pid_position_controller_simple_node"); + std::shared_ptr nh_private = nh->create_sub_node("private"); - PIDPositionController controller(nh, nh_private); + PIDPositionController controller(nh, nh /* nh_private */); //ToDo - do we really need nh_private? // int num_threads = 1; // ros::MultiThreadedSpinner multi_thread(num_threads); From 369c1059620c1afcad8c8de909909a8bcc3c0083 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Wed, 18 Aug 2021 08:53:51 -0700 Subject: [PATCH 038/123] - add '-g' to cmakelist.txt --- ros2/src/airsim_ros_pkgs/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/CMakeLists.txt b/ros2/src/airsim_ros_pkgs/CMakeLists.txt index ca87374825..1432f10219 100644 --- a/ros2/src/airsim_ros_pkgs/CMakeLists.txt +++ b/ros2/src/airsim_ros_pkgs/CMakeLists.txt @@ -48,7 +48,7 @@ set(CMAKE_CXX_STANDARD 14) set(CXX_EXP_LIB "-nostdinc++ -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -nodefaultlibs -l/usr/lib/x86_64-linux-gnu/libc++.so -l/usr/lib/x86_64-linux-gnu/libc++abi.so --lm -lc -lgcc_s -lgcc +-lm -lc -lgcc_s -lgcc -g -lstdc++fs -fmax-errors=10 -Wnoexcept -Wstrict-null-sentinel") set(RPC_LIB_INCLUDES " ${AIRSIM_ROOT}/external/rpclib/rpclib-2.3.0/include") set(RPC_LIB rpc) From 4cbe4149dd32cdc2fd5c4b500aa5dd61540878aa Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 19 Aug 2021 05:06:15 -0700 Subject: [PATCH 039/123] - add auto params declartion --- ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp index 6b4d26decc..e40c51c591 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -6,13 +6,12 @@ int main(int argc, char** argv) { rclcpp::init(argc, argv); rclcpp::NodeOptions node_options; - node_options.allow_undeclared_parameters(true); + node_options.automatically_declare_parameters_from_overrides(true); std::shared_ptr nh = rclcpp::Node::make_shared("airsim_node", "airsim_node", node_options); // std::shared_ptr nh_private = nh->create_sub_node("~/"); std::shared_ptr nh_img = nh->create_sub_node("img"); std::shared_ptr nh_lidar = nh->create_sub_node("lidar"); - - std::string host_ip = "192.168.211.1"; //ToDo - change + std::string host_ip; /* nh_private */nh->get_parameter("host_ip", host_ip); AirsimROSWrapper airsim_ros_wrapper(nh, nh /* nh_private */, nh_img, nh_lidar, host_ip);//ToDo - do we really need nh_private? From c279daddef66da96c63c486c6655e90d39a95cdd Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 19 Aug 2021 05:09:15 -0700 Subject: [PATCH 040/123] - cosmetic --- ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 3 ++- .../src/pd_position_controller_simple_node.cpp | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp index e40c51c591..010ea657f8 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -7,7 +7,8 @@ int main(int argc, char** argv) rclcpp::init(argc, argv); rclcpp::NodeOptions node_options; node_options.automatically_declare_parameters_from_overrides(true); - std::shared_ptr nh = rclcpp::Node::make_shared("airsim_node", "airsim_node", node_options); + const string node_name = "airsim_node"; + std::shared_ptr nh = rclcpp::Node::make_shared(node_name, node_name, node_options); // std::shared_ptr nh_private = nh->create_sub_node("~/"); std::shared_ptr nh_img = nh->create_sub_node("img"); std::shared_ptr nh_lidar = nh->create_sub_node("lidar"); diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp index c568d3a62f..edcfe9d23d 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp @@ -4,7 +4,10 @@ int main(int argc, char** argv) { rclcpp::init(argc, argv); - std::shared_ptr nh = rclcpp::Node::make_shared("pid_position_controller_simple_node","pid_position_controller_simple_node"); + rclcpp::NodeOptions node_options; + node_options.automatically_declare_parameters_from_overrides(true); + const string node_name = "pid_position_controller_simple_node"; + std::shared_ptr nh = rclcpp::Node::make_shared(node_name, node_name, node_options); std::shared_ptr nh_private = nh->create_sub_node("private"); PIDPositionController controller(nh, nh /* nh_private */); //ToDo - do we really need nh_private? From de0711947761c15b38f8493de555ab99ec7935fe Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 19 Aug 2021 05:55:53 -0700 Subject: [PATCH 041/123] - add missing declare_parameter --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index d934fb8a4e..08d2daf0b0 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -108,7 +108,8 @@ void AirsimROSWrapper::initialize_ros() // todo enforce dynamics constraints in this node as well? // nh_->get_parameter("max_vert_vel_", max_vert_vel_); // nh_->get_parameter("max_horz_vel", max_horz_vel_) - + + nh_private_->declare_parameter("/vehicle_name",rclcpp::ParameterValue("")); create_ros_pubs_from_settings_json(); airsim_control_update_timer_ = nh_private_->create_wall_timer(std::chrono::duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); // airsim_control_update_timer_ = nh_private_->createTimer(rclcpp::Duration (update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); From 2f49e359ff936231c9a4dab20ae5201225d50f6d Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 19 Aug 2021 05:56:24 -0700 Subject: [PATCH 042/123] - change airsim_node launch file --- .../launch/airsim_node.launch.py | 128 +++++++++++------- 1 file changed, 80 insertions(+), 48 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py b/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py index 484c28cee1..b9b5ee8b0d 100644 --- a/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py +++ b/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py @@ -1,65 +1,97 @@ import os import sys -import launch -import launch_ros.actions +from launch import LaunchDescription +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration +from launch_ros.actions import Node + from ament_index_python.packages import get_package_share_directory def generate_launch_description(): - ld = launch.LaunchDescription([ - launch.actions.DeclareLaunchArgument( - name='output', - default_value='log' - ), - launch.actions.DeclareLaunchArgument( - name='publish_clock', - default_value='false' - ), - launch.actions.DeclareLaunchArgument( - name='is_vulkan', - default_value='true' - ), - launch.actions.DeclareLaunchArgument( - name='host', - default_value='192.168.211.1' #ToDo - cahnge - ), - launch_ros.actions.Node( + + output = DeclareLaunchArgument( + "output", + default_value='log') + + publish_clock = DeclareLaunchArgument( + "publish_clock", + default_value='False') + + is_vulkan = DeclareLaunchArgument( + "is_vulkan", + default_value='True') + + host = DeclareLaunchArgument( + "host", + default_value='localhost') + + airsim_node = Node( package='airsim_ros_pkgs', executable='airsim_node', name='airsim_node', - output='screen', #ToDo-change to var - parameters=[ - { - 'is_vulkan': 'false' - }, - { - 'update_airsim_img_response_every_n_sec': '0.05' - }, - { - 'update_airsim_control_every_n_sec': '0.01' - }, - { - 'update_lidar_every_n_sec': '0.01' - }, - { - 'publish_clock': 'false' #launch.substitutions.LaunchConfiguration('publish_clock') #ToDo-change to var - }, - { - 'host_ip': '192.168.211.1'#launch.substitutions.LaunchConfiguration('host') #ToDo-change to var - } - ], - arguments=['--ros-args', '--log-level', 'INFO'] - )#, + output='screen', + parameters=[{ + 'is_vulkan': False, + 'update_airsim_img_response_every_n_sec': 0.05, + 'update_airsim_control_every_n_sec': 0.01, + 'update_lidar_every_n_sec': 0.01, + 'publish_clock': LaunchConfiguration('publish_clock'), + 'host_ip': LaunchConfiguration('host') + }]) + + + # Create the launch description and populate + ld = LaunchDescription() + + # Declare the launch options + ld.add_action(output) + ld.add_action(publish_clock) + ld.add_action(is_vulkan) + ld.add_action(host) + + ld.add_action(airsim_node) + + + + + + # launch.actions.DeclareLaunchArgument( + + # launch_ros.actions.Node( + # package='airsim_ros_pkgs', + # executable='airsim_node', + # name='airsim_node', + # output='screen', #ToDo-change to var + # parameters=[ + # { + # 'is_vulkan': 'false' + # }, + # { + # 'update_airsim_img_response_every_n_sec': '0.05' + # }, + # { + # 'update_airsim_control_every_n_sec': '0.01' + # }, + # { + # 'update_lidar_every_n_sec': '0.01' + # }, + # { + # 'publish_clock': 'false' #launch.substitutions.LaunchConfiguration('publish_clock') #ToDo-change to var + # }, + # { + # 'host_ip': launch.substitutions.LaunchConfiguration('host') #ToDo-change to var + # } + # ], + # arguments=['--ros-args', '--log-level', 'INFO'] + # )#, # launch.actions.IncludeLaunchDescription( # launch.launch_description_sources.PythonLaunchDescriptionSource( # os.path.join(get_package_share_directory( # 'airsim_ros_pkgs'), 'launch/static_transforms.launch.py') # ) # ) - ]) - return ld + # ]) - -if __name__ == '__main__': - generate_launch_description() + return ld From 845497c79a8ad7061f99b83a9566c831922b52e0 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 19 Aug 2021 06:04:36 -0700 Subject: [PATCH 043/123] - add static_transforms to launch file --- .../launch/airsim_node.launch.py | 51 +++---------------- 1 file changed, 8 insertions(+), 43 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py b/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py index b9b5ee8b0d..8343f596ee 100644 --- a/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py +++ b/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch.py @@ -1,10 +1,10 @@ import os -import sys from launch import LaunchDescription -from launch.actions import DeclareLaunchArgument +from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription from launch.substitutions import LaunchConfiguration from launch_ros.actions import Node +from launch.launch_description_sources import PythonLaunchDescriptionSource from ament_index_python.packages import get_package_share_directory @@ -41,6 +41,11 @@ def generate_launch_description(): 'host_ip': LaunchConfiguration('host') }]) + static_transforms = IncludeLaunchDescription( + PythonLaunchDescriptionSource( + os.path.join(get_package_share_directory('airsim_ros_pkgs'), 'launch/static_transforms.launch.py') + ) + ) # Create the launch description and populate ld = LaunchDescription() @@ -51,47 +56,7 @@ def generate_launch_description(): ld.add_action(is_vulkan) ld.add_action(host) + ld.add_action(static_transforms) ld.add_action(airsim_node) - - - - - # launch.actions.DeclareLaunchArgument( - - # launch_ros.actions.Node( - # package='airsim_ros_pkgs', - # executable='airsim_node', - # name='airsim_node', - # output='screen', #ToDo-change to var - # parameters=[ - # { - # 'is_vulkan': 'false' - # }, - # { - # 'update_airsim_img_response_every_n_sec': '0.05' - # }, - # { - # 'update_airsim_control_every_n_sec': '0.01' - # }, - # { - # 'update_lidar_every_n_sec': '0.01' - # }, - # { - # 'publish_clock': 'false' #launch.substitutions.LaunchConfiguration('publish_clock') #ToDo-change to var - # }, - # { - # 'host_ip': launch.substitutions.LaunchConfiguration('host') #ToDo-change to var - # } - # ], - # arguments=['--ros-args', '--log-level', 'INFO'] - # )#, - # launch.actions.IncludeLaunchDescription( - # launch.launch_description_sources.PythonLaunchDescriptionSource( - # os.path.join(get_package_share_directory( - # 'airsim_ros_pkgs'), 'launch/static_transforms.launch.py') - # ) - # ) - # ]) - return ld From 431cd3f0822d838e15311ac94ea9f42aa933e75b Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 19 Aug 2021 08:07:22 -0700 Subject: [PATCH 044/123] - add pd_position_controller_simple launch file --- .../position_controller_simple.launch.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch.py diff --git a/ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch.py b/ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch.py new file mode 100644 index 0000000000..036d87c061 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch.py @@ -0,0 +1,32 @@ +import launch +from launch_ros.actions import Node + + +def generate_launch_description(): + ld = launch.LaunchDescription([ + Node( + package='airsim_ros_pkgs', + executable='pd_position_controller_simple_node', + name='pid_position_node', + output='screen', + parameters=[{ + 'update_control_every_n_sec': 0.01, + + 'kp_x': 0.30, + 'kp_y': 0.30, + 'kp_z': 0.30, + 'kp_yaw': 0.30, + + 'kd_x': 0.05, + 'kd_y': 0.05, + 'kd_z': 0.05, + 'kd_yaw': 0.05, + + 'reached_thresh_xyz': 0.1, + 'reached_yaw_degrees': 5.0 + } + ] + ) + ]) + + return ld From 38973cb534f67f747ff966bfe5da8a4312cce495 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 19 Aug 2021 08:08:57 -0700 Subject: [PATCH 045/123] - update topic names to show node name --- ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 5 +- .../src/airsim_ros_wrapper.cpp | 54 +++++++++---------- .../src/pd_position_controller_simple.cpp | 14 ++++- .../pd_position_controller_simple_node.cpp | 3 +- 4 files changed, 42 insertions(+), 34 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp index 010ea657f8..1fa35567a0 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -7,8 +7,7 @@ int main(int argc, char** argv) rclcpp::init(argc, argv); rclcpp::NodeOptions node_options; node_options.automatically_declare_parameters_from_overrides(true); - const string node_name = "airsim_node"; - std::shared_ptr nh = rclcpp::Node::make_shared(node_name, node_name, node_options); + std::shared_ptr nh = rclcpp::Node::make_shared("airsim_node", node_options); // std::shared_ptr nh_private = nh->create_sub_node("~/"); std::shared_ptr nh_img = nh->create_sub_node("img"); std::shared_ptr nh_lidar = nh->create_sub_node("lidar"); @@ -22,7 +21,6 @@ int main(int argc, char** argv) while (rclcpp::ok()) { executor.spin(); } - // airsim_ros_wrapper.img_async_spinner_.start(); } if (airsim_ros_wrapper.is_used_lidar_timer_cb_queue_) { @@ -31,7 +29,6 @@ int main(int argc, char** argv) while (rclcpp::ok()) { executor.spin(); } - // airsim_ros_wrapper.lidar_async_spinner_.start(); } rclcpp::spin(nh); diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 08d2daf0b0..2ef4e7a568 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -109,7 +109,7 @@ void AirsimROSWrapper::initialize_ros() // nh_->get_parameter("max_vert_vel_", max_vert_vel_); // nh_->get_parameter("max_horz_vel", max_horz_vel_) - nh_private_->declare_parameter("/vehicle_name",rclcpp::ParameterValue("")); + nh_private_->declare_parameter("vehicle_name",rclcpp::ParameterValue("")); create_ros_pubs_from_settings_json(); airsim_control_update_timer_ = nh_private_->create_wall_timer(std::chrono::duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); // airsim_control_update_timer_ = nh_private_->createTimer(rclcpp::Duration (update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); @@ -119,9 +119,9 @@ void AirsimROSWrapper::initialize_ros() void AirsimROSWrapper::create_ros_pubs_from_settings_json() { // subscribe to control commands on global nodehandle - gimbal_angle_quat_cmd_sub_ = nh_private_->create_subscription("gimbal_angle_quat_cmd", 50, std::bind(&AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this, _1)); - gimbal_angle_euler_cmd_sub_ = nh_private_->create_subscription("gimbal_angle_euler_cmd", 50, std::bind(&AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this, _1)); - origin_geo_point_pub_ = nh_private_->create_publisher("origin_geo_point", 10); + gimbal_angle_quat_cmd_sub_ = nh_private_->create_subscription("~/gimbal_angle_quat_cmd", 50, std::bind(&AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this, _1)); + gimbal_angle_euler_cmd_sub_ = nh_private_->create_subscription("~/gimbal_angle_euler_cmd", 50, std::bind(&AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this, _1)); + origin_geo_point_pub_ = nh_private_->create_publisher("~/origin_geo_point", 10); airsim_img_request_vehicle_name_pair_vec_.clear(); image_pub_vec_.clear(); @@ -137,7 +137,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() auto& vehicle_setting = curr_vehicle_elem.second; auto curr_vehicle_name = curr_vehicle_elem.first; - nh_->set_parameter(rclcpp::Parameter("/vehicle_name", curr_vehicle_name)); + nh_->set_parameter(rclcpp::Parameter("vehicle_name", curr_vehicle_name)); set_nans_to_zeros_in_pose(*vehicle_setting); @@ -155,11 +155,11 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); - vehicle_ros->odom_local_pub = nh_private_->create_publisher(curr_vehicle_name + "/" + odom_frame_id_, 10); + vehicle_ros->odom_local_pub = nh_private_->create_publisher("~/" + curr_vehicle_name + "/" + odom_frame_id_, 10); - vehicle_ros->env_pub = nh_private_->create_publisher(curr_vehicle_name + "/environment", 10); + vehicle_ros->env_pub = nh_private_->create_publisher("~/" + curr_vehicle_name + "/environment", 10); - vehicle_ros->global_gps_pub = nh_private_->create_publisher(curr_vehicle_name + "/global_gps", 10); + vehicle_ros->global_gps_pub = nh_private_->create_publisher("~/" + curr_vehicle_name + "/global_gps", 10); if (airsim_mode_ == AIRSIM_MODE::DRONE) { auto drone = static_cast(vehicle_ros.get()); @@ -167,23 +167,23 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // bind to a single callback. todo optimal subs queue length // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument std::function fcn_vel_cmd_body_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name); - drone->vel_cmd_body_frame_sub = nh_private_->create_subscription(curr_vehicle_name + "/vel_cmd_body_frame", 1, fcn_vel_cmd_body_frame_sub); // todo ros::TransportHints().tcpNoDelay(); + drone->vel_cmd_body_frame_sub = nh_private_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_body_frame", 1, fcn_vel_cmd_body_frame_sub); // todo ros::TransportHints().tcpNoDelay(); std::function fcn_vel_cmd_world_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name); - drone->vel_cmd_world_frame_sub = nh_private_->create_subscription(curr_vehicle_name + "/vel_cmd_world_frame", 1, fcn_vel_cmd_world_frame_sub); + drone->vel_cmd_world_frame_sub = nh_private_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_world_frame", 1, fcn_vel_cmd_world_frame_sub); std::function, std::shared_ptr)> fcn_takeoff_srvr = std::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name); - drone->takeoff_srvr = nh_private_->create_service(curr_vehicle_name + "/takeoff",fcn_takeoff_srvr); + drone->takeoff_srvr = nh_private_->create_service("~/" + curr_vehicle_name + "/takeoff",fcn_takeoff_srvr); std::function, std::shared_ptr)> fcn_land_srvr = std::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name); - drone->land_srvr = nh_private_->create_service(curr_vehicle_name + "/land", fcn_land_srvr); + drone->land_srvr = nh_private_->create_service("~/" + curr_vehicle_name + "/land", fcn_land_srvr); // vehicle_ros.reset_srvr = nh_private_->create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); } else { auto car = static_cast(vehicle_ros.get()); std::function fcn_car_cmd_sub = std::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name); - car->car_cmd_sub = nh_private_->create_subscription(curr_vehicle_name + "/car_cmd", 1, fcn_car_cmd_sub); - car->car_state_pub = nh_private_->create_publisher(curr_vehicle_name + "/car_state", 10); + car->car_cmd_sub = nh_private_->create_subscription("~/" + curr_vehicle_name + "/car_cmd", 1, fcn_car_cmd_sub); + car->car_state_pub = nh_private_->create_publisher("~/" + curr_vehicle_name + "/car_state", 10); } // iterate over camera map std::map .cameras; @@ -214,8 +214,8 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, true)); } - image_pub_vec_.push_back(image_transporter.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type), 1)); - cam_info_pub_vec_.push_back(nh_private_->create_publisher(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); + image_pub_vec_.push_back(image_transporter.advertise("~/" + curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type), 1)); + cam_info_pub_vec_.push_back(nh_private_->create_publisher("~/" + curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); camera_info_msg_vec_.push_back(generate_cam_info(curr_camera_name, camera_setting, capture_setting)); } } @@ -303,26 +303,26 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // add takeoff and land all services if more than 2 drones if (vehicle_name_ptr_map_.size() > 1 && airsim_mode_ == AIRSIM_MODE::DRONE) { - takeoff_all_srvr_ = nh_private_->create_service("all_robots/takeoff", std::bind(&AirsimROSWrapper::takeoff_all_srv_cb, this, _1, _2)); - land_all_srvr_ = nh_private_->create_service("all_robots/land", std::bind(&AirsimROSWrapper::land_all_srv_cb, this, _1, _2)); + takeoff_all_srvr_ = nh_private_->create_service("~/all_robots/takeoff", std::bind(&AirsimROSWrapper::takeoff_all_srv_cb, this, _1, _2)); + land_all_srvr_ = nh_private_->create_service("~/all_robots/land", std::bind(&AirsimROSWrapper::land_all_srv_cb, this, _1, _2)); // gimbal_angle_quat_cmd_sub_ = nh_->create_subscription<>("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); - vel_cmd_all_body_frame_sub_ = nh_private_->create_subscription("all_robots/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_body_frame_cb, this, _1)); - vel_cmd_all_world_frame_sub_ = nh_private_->create_subscription("all_robots/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_world_frame_cb, this, _1)); + vel_cmd_all_body_frame_sub_ = nh_private_->create_subscription("~/all_robots/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_body_frame_cb, this, _1)); + vel_cmd_all_world_frame_sub_ = nh_private_->create_subscription("~/all_robots/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_world_frame_cb, this, _1)); - vel_cmd_group_body_frame_sub_ = nh_private_->create_subscription("group_of_robots/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_group_body_frame_cb, this, _1)); - vel_cmd_group_world_frame_sub_ = nh_private_->create_subscription("group_of_robots/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_group_world_frame_cb, this, _1)); + vel_cmd_group_body_frame_sub_ = nh_private_->create_subscription("~/group_of_robots/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_group_body_frame_cb, this, _1)); + vel_cmd_group_world_frame_sub_ = nh_private_->create_subscription("~/group_of_robots/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_group_world_frame_cb, this, _1)); - takeoff_group_srvr_ = nh_private_->create_service("group_of_robots/takeoff", std::bind(&AirsimROSWrapper::takeoff_group_srv_cb, this, _1, _2)); - land_group_srvr_ = nh_private_->create_service("group_of_robots/land", std::bind(&AirsimROSWrapper::land_group_srv_cb, this, _1, _2)); + takeoff_group_srvr_ = nh_private_->create_service("~/group_of_robots/takeoff", std::bind(&AirsimROSWrapper::takeoff_group_srv_cb, this, _1, _2)); + land_group_srvr_ = nh_private_->create_service("~/group_of_robots/land", std::bind(&AirsimROSWrapper::land_group_srv_cb, this, _1, _2)); } // todo add per vehicle reset in AirLib API - reset_srvr_ = nh_private_->create_service("reset", std::bind(&AirsimROSWrapper::reset_srv_cb, this, _1, _2)); + reset_srvr_ = nh_private_->create_service("~/reset", std::bind(&AirsimROSWrapper::reset_srv_cb, this, _1, _2)); if (publish_clock_) { - clock_pub_ = nh_private_->create_publisher("clock", 1); + clock_pub_ = nh_private_->create_publisher("~/clock", 1); } // if >0 cameras, add one more thread for img_request_timer_cb @@ -358,7 +358,7 @@ const SensorPublisher AirsimROSWrapper::create_sensor_publisher(const string& SensorPublisher sensor_publisher; sensor_publisher.sensor_name = sensor_name; sensor_publisher.sensor_type = sensor_type; - sensor_publisher.publisher = nh_private_->create_publisher(topic_name, QoS); + sensor_publisher.publisher = nh_private_->create_publisher("~/" + topic_name, QoS); return sensor_publisher; } diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index e9f6687a1f..16b7a0da23 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -56,10 +56,22 @@ void PIDPositionController::initialize_ros() double update_control_every_n_sec; nh_private_->get_parameter("update_control_every_n_sec", update_control_every_n_sec); + auto parameters_client = std::make_shared(nh_private_, "/airsim_node"); + while (!parameters_client->wait_for_service(std::chrono::seconds(1))) + { + if (!rclcpp::ok()) + { + RCLCPP_ERROR(nh_->get_logger(), "Interrupted while waiting for the service. Exiting."); + rclcpp::shutdown(); + } + RCLCPP_INFO(nh_->get_logger(), "service not available, waiting again..."); + } + std::string vehicle_name; while (vehicle_name == "") { - nh_private_->get_parameter("/vehicle_name", vehicle_name); + vehicle_name = parameters_client->get_parameter("vehicle_name", vehicle_name); + //nh_private_->get_parameter("vehicle_name", vehicle_name); RCLCPP_INFO_STREAM(nh_->get_logger() ,"Waiting vehicle name"); } diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp index edcfe9d23d..352bd8bbf6 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp @@ -6,8 +6,7 @@ int main(int argc, char** argv) rclcpp::init(argc, argv); rclcpp::NodeOptions node_options; node_options.automatically_declare_parameters_from_overrides(true); - const string node_name = "pid_position_controller_simple_node"; - std::shared_ptr nh = rclcpp::Node::make_shared(node_name, node_name, node_options); + std::shared_ptr nh = rclcpp::Node::make_shared("pid_position_controller_simple_node", node_options); std::shared_ptr nh_private = nh->create_sub_node("private"); PIDPositionController controller(nh, nh /* nh_private */); //ToDo - do we really need nh_private? From ef4b6687e79b0180731f9a01a4c7e4b496e6a720 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 19 Aug 2021 08:44:36 -0700 Subject: [PATCH 046/123] Revert "- fix missing cmmits after merge" This reverts commit aee0025a1e120e4df26226c35d3cac662d893f8e. --- AirLib/include/common/AirSimSettings.hpp | 2 +- Unreal/Environments/Blocks/Blocks.uproject | 2 +- .../Content/Blueprints/BP_SimHUDWidget.uasset | Bin 436905 -> 327382 bytes Unreal/Plugins/AirSim/Source/PIPCamera.cpp | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/AirLib/include/common/AirSimSettings.hpp b/AirLib/include/common/AirSimSettings.hpp index 0958853ff1..a54334bc9f 100644 --- a/AirLib/include/common/AirSimSettings.hpp +++ b/AirLib/include/common/AirSimSettings.hpp @@ -1065,7 +1065,7 @@ namespace airlib capture_setting.motion_blur_amount = settings_json.getFloat("MotionBlurAmount", capture_setting.motion_blur_amount); capture_setting.image_type = settings_json.getInt("ImageType", 0); capture_setting.target_gamma = settings_json.getFloat("TargetGamma", - capture_setting.image_type == 0 || capture_setting.image_type == 5 ? CaptureSetting::kSceneTargetGamma : Utils::nan()); + capture_setting.image_type == 0 ? CaptureSetting::kSceneTargetGamma : Utils::nan()); std::string projection_mode = Utils::toLower(settings_json.getString("ProjectionMode", "")); if (projection_mode == "" || projection_mode == "perspective") diff --git a/Unreal/Environments/Blocks/Blocks.uproject b/Unreal/Environments/Blocks/Blocks.uproject index 8b6c8b80f8..cbc4c1d614 100644 --- a/Unreal/Environments/Blocks/Blocks.uproject +++ b/Unreal/Environments/Blocks/Blocks.uproject @@ -1,6 +1,6 @@ { "FileVersion": 3, - "EngineAssociation": "4.26", + "EngineAssociation": "4.25", "Category": "", "Description": "", "Modules": [ diff --git a/Unreal/Plugins/AirSim/Content/Blueprints/BP_SimHUDWidget.uasset b/Unreal/Plugins/AirSim/Content/Blueprints/BP_SimHUDWidget.uasset index a254cd325049a9432803aeb0877b5deed8366680..43adf255fd41cbe049a084ee012fa8a476c5bb35 100644 GIT binary patch literal 327382 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 diff --git a/Unreal/Plugins/AirSim/Source/PIPCamera.cpp b/Unreal/Plugins/AirSim/Source/PIPCamera.cpp index e13fd7f131..a4646b03dc 100644 --- a/Unreal/Plugins/AirSim/Source/PIPCamera.cpp +++ b/Unreal/Plugins/AirSim/Source/PIPCamera.cpp @@ -360,7 +360,7 @@ void APIPCamera::setupCameraFromSettings(const APIPCamera::CameraSetting& camera case ImageType::Segmentation: case ImageType::SurfaceNormals: - updateCaptureComponentSetting(captures_[image_type], render_targets_[image_type], false, image_type_to_pixel_format_map_[image_type], capture_setting, ned_transform, false); + updateCaptureComponentSetting(captures_[image_type], render_targets_[image_type], true, image_type_to_pixel_format_map_[image_type], capture_setting, ned_transform, true); break; default: From b5c726baafe7e5f0468ab2e82ec145d3219c64bb Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 19 Aug 2021 08:45:05 -0700 Subject: [PATCH 047/123] Revert "Fix broken docs ref to image types" This reverts commit 1a3ae359611bca284901f93efbcfff2f03d285f1. --- docs/settings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/settings.md b/docs/settings.md index f14027da64..3a9c8fee99 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -301,7 +301,7 @@ This element specifies the settings used for the camera following the vehicle in The `CameraDefaults` element at root level specifies defaults used for all cameras. These defaults can be overridden for individual camera in `Cameras` element inside `Vehicles` as described later. ### Note on ImageType element -The `ImageType` element in JSON array determines which image type that settings applies to. The valid values are described in [ImageType section](image_apis.md#available-imagetype-values). In addition, we also support special value `ImageType: -1` to apply the settings to external camera (i.e. what you are looking at on the screen). +The `ImageType` element in JSON array determines which image type that settings applies to. The valid values are described in [ImageType section](image_apis.md#available-imagetype). In addition, we also support special value `ImageType: -1` to apply the settings to external camera (i.e. what you are looking at on the screen). For example, `CaptureSettings` element is json array so you can add settings for multiple image types easily. From c7fc7d75aa9bfe95b4b331d397a163fb1a4829fd Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 19 Aug 2021 08:45:21 -0700 Subject: [PATCH 048/123] Revert "-Add maximize subwindow" This reverts commit 26ea2ab3d9d3a790653ad04d0a77f29ef0df95a9. --- .../Plugins/AirSim/Source/SimHUD/SimHUD.cpp | 22 ------------------- Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h | 3 --- .../AirSim/Source/SimHUD/SimHUDWidget.h | 4 +--- 3 files changed, 1 insertion(+), 28 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp index b67d85060b..71000329c0 100644 --- a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp +++ b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp @@ -172,24 +172,6 @@ void ASimHUD::inputEventToggleAll() updateWidgetSubwindowVisibility(); } -void ASimHUD::inputEventToggleSubwindow0Fullscreen() -{ - inputEventToggleSubwindow0(); - widget_->maximizeSubWindow(0); -} - -void ASimHUD::inputEventToggleSubwindow1Fullscreen() -{ - inputEventToggleSubwindow1(); - widget_->maximizeSubWindow(1); -} - -void ASimHUD::inputEventToggleSubwindow2Fullscreen() -{ - inputEventToggleSubwindow2(); - widget_->maximizeSubWindow(2); -} - void ASimHUD::createMainWidget() { //create main widget @@ -257,10 +239,6 @@ void ASimHUD::setupInputBindings() UAirBlueprintLib::BindActionToKey("InputEventToggleSubwindow1", EKeys::Two, this, &ASimHUD::inputEventToggleSubwindow1); UAirBlueprintLib::BindActionToKey("InputEventToggleSubwindow2", EKeys::Three, this, &ASimHUD::inputEventToggleSubwindow2); UAirBlueprintLib::BindActionToKey("InputEventToggleAll", EKeys::Zero, this, &ASimHUD::inputEventToggleAll); - - UAirBlueprintLib::BindActionToKey("InputEventToggleSubwindow0Fullscreen", EKeys::One, this, &ASimHUD::inputEventToggleSubwindow0Fullscreen, false, true); - UAirBlueprintLib::BindActionToKey("InputEventToggleSubwindow1Fullscreen", EKeys::Two, this, &ASimHUD::inputEventToggleSubwindow1Fullscreen, false, true); - UAirBlueprintLib::BindActionToKey("InputEventToggleSubwindow2Fullscreen", EKeys::Three, this, &ASimHUD::inputEventToggleSubwindow2Fullscreen, false, true); } void ASimHUD::initializeSettings() diff --git a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h index 56b30c2fa2..98ebaaa502 100644 --- a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h +++ b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h @@ -33,9 +33,6 @@ class AIRSIM_API ASimHUD : public AHUD void inputEventToggleSubwindow1(); void inputEventToggleSubwindow2(); void inputEventToggleAll(); - void inputEventToggleSubwindow0Fullscreen(); - void inputEventToggleSubwindow1Fullscreen(); - void inputEventToggleSubwindow2Fullscreen(); ImageType getSubwindowCameraType(int window_index); void setSubwindowCameraType(int window_index, ImageType type); diff --git a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUDWidget.h b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUDWidget.h index edc5abe107..bcbaff99fa 100644 --- a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUDWidget.h +++ b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUDWidget.h @@ -42,10 +42,8 @@ class AIRSIM_API USimHUDWidget : public UUserWidget bool getRecordButtonVisibility(); UFUNCTION(BlueprintImplementableEvent, Category = "C++ Interface") - bool initializeForPlay(); + bool initializeForPlay(); - UFUNCTION(BlueprintImplementableEvent, Category = "C++ Interface") - bool maximizeSubWindow(int window_index); protected: UFUNCTION(BlueprintImplementableEvent, Category = "C++ Interface") bool setReportContainerVisibility(bool is_visible); From 37fd2fe637c64a86849c333c2c2782caad58d4bd Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 00:45:34 -0700 Subject: [PATCH 049/123] - remove folders from tracking --- ros2/install/.colcon_install_layout | 1 - ros2/install/COLCON_IGNORE | 0 ros2/install/_local_setup_util_ps1.py | 376 ---------------- ros2/install/_local_setup_util_sh.py | 376 ---------------- .../include/airsim_interfaces/msg/altimeter.h | 12 - .../airsim_interfaces/msg/altimeter.hpp | 11 - .../airsim_interfaces/msg/car_controls.h | 12 - .../airsim_interfaces/msg/car_controls.hpp | 11 - .../include/airsim_interfaces/msg/car_state.h | 12 - .../airsim_interfaces/msg/car_state.hpp | 11 - .../msg/detail/altimeter__builder.hpp | 103 ----- .../msg/detail/altimeter__functions.c | 153 ------- .../msg/detail/altimeter__functions.h | 124 ------ ...altimeter__rosidl_typesupport_fastrtps_c.h | 36 -- ...meter__rosidl_typesupport_fastrtps_cpp.hpp | 79 ---- ...eter__rosidl_typesupport_introspection_c.h | 26 -- ...__rosidl_typesupport_introspection_cpp.hpp | 27 -- .../msg/detail/altimeter__struct.h | 47 -- .../msg/detail/altimeter__struct.hpp | 175 -------- .../msg/detail/altimeter__traits.hpp | 46 -- .../msg/detail/altimeter__type_support.c | 134 ------ .../msg/detail/altimeter__type_support.cpp | 152 ------- .../msg/detail/altimeter__type_support.h | 33 -- .../msg/detail/car_controls__builder.hpp | 167 ------- .../msg/detail/car_controls__functions.c | 161 ------- .../msg/detail/car_controls__functions.h | 124 ------ ..._controls__rosidl_typesupport_fastrtps_c.h | 36 -- ...trols__rosidl_typesupport_fastrtps_cpp.hpp | 79 ---- ...rols__rosidl_typesupport_introspection_c.h | 26 -- ...__rosidl_typesupport_introspection_cpp.hpp | 27 -- .../msg/detail/car_controls__struct.h | 51 --- .../msg/detail/car_controls__struct.hpp | 231 ---------- .../msg/detail/car_controls__traits.hpp | 46 -- .../msg/detail/car_controls__type_support.c | 194 --------- .../msg/detail/car_controls__type_support.cpp | 212 --------- .../msg/detail/car_controls__type_support.h | 33 -- .../msg/detail/car_state__builder.hpp | 167 ------- .../msg/detail/car_state__functions.c | 175 -------- .../msg/detail/car_state__functions.h | 124 ------ ...car_state__rosidl_typesupport_fastrtps_c.h | 36 -- ...state__rosidl_typesupport_fastrtps_cpp.hpp | 79 ---- ...tate__rosidl_typesupport_introspection_c.h | 26 -- ...__rosidl_typesupport_introspection_cpp.hpp | 27 -- .../msg/detail/car_state__struct.h | 55 --- .../msg/detail/car_state__struct.hpp | 235 ---------- .../msg/detail/car_state__traits.hpp | 50 --- .../msg/detail/car_state__type_support.c | 206 --------- .../msg/detail/car_state__type_support.cpp | 212 --------- .../msg/detail/car_state__type_support.h | 33 -- .../msg/detail/environment__builder.hpp | 151 ------- .../msg/detail/environment__functions.c | 179 -------- .../msg/detail/environment__functions.h | 124 ------ ...vironment__rosidl_typesupport_fastrtps_c.h | 36 -- ...nment__rosidl_typesupport_fastrtps_cpp.hpp | 79 ---- ...ment__rosidl_typesupport_introspection_c.h | 26 -- ...__rosidl_typesupport_introspection_cpp.hpp | 27 -- .../msg/detail/environment__struct.h | 55 --- .../msg/detail/environment__struct.hpp | 222 ---------- .../msg/detail/environment__traits.hpp | 51 --- .../msg/detail/environment__type_support.c | 195 --------- .../msg/detail/environment__type_support.cpp | 197 --------- .../msg/detail/environment__type_support.h | 33 -- .../gimbal_angle_euler_cmd__builder.hpp | 135 ------ .../gimbal_angle_euler_cmd__functions.c | 170 -------- .../gimbal_angle_euler_cmd__functions.h | 124 ------ ...euler_cmd__rosidl_typesupport_fastrtps_c.h | 36 -- ...r_cmd__rosidl_typesupport_fastrtps_cpp.hpp | 79 ---- ..._cmd__rosidl_typesupport_introspection_c.h | 26 -- ...__rosidl_typesupport_introspection_cpp.hpp | 27 -- .../detail/gimbal_angle_euler_cmd__struct.h | 52 --- .../detail/gimbal_angle_euler_cmd__struct.hpp | 205 --------- .../detail/gimbal_angle_euler_cmd__traits.hpp | 46 -- .../gimbal_angle_euler_cmd__type_support.c | 167 ------- .../gimbal_angle_euler_cmd__type_support.cpp | 182 -------- .../gimbal_angle_euler_cmd__type_support.h | 33 -- .../detail/gimbal_angle_quat_cmd__builder.hpp | 103 ----- .../detail/gimbal_angle_quat_cmd__functions.c | 173 -------- .../detail/gimbal_angle_quat_cmd__functions.h | 124 ------ ..._quat_cmd__rosidl_typesupport_fastrtps_c.h | 36 -- ...t_cmd__rosidl_typesupport_fastrtps_cpp.hpp | 79 ---- ..._cmd__rosidl_typesupport_introspection_c.h | 26 -- ...__rosidl_typesupport_introspection_cpp.hpp | 27 -- .../detail/gimbal_angle_quat_cmd__struct.h | 52 --- .../detail/gimbal_angle_quat_cmd__struct.hpp | 179 -------- .../detail/gimbal_angle_quat_cmd__traits.hpp | 48 --- .../gimbal_angle_quat_cmd__type_support.c | 143 ------ .../gimbal_angle_quat_cmd__type_support.cpp | 152 ------- .../gimbal_angle_quat_cmd__type_support.h | 33 -- .../msg/detail/gps_yaw__builder.hpp | 103 ----- .../msg/detail/gps_yaw__functions.c | 144 ------- .../msg/detail/gps_yaw__functions.h | 124 ------ .../gps_yaw__rosidl_typesupport_fastrtps_c.h | 36 -- ...s_yaw__rosidl_typesupport_fastrtps_cpp.hpp | 79 ---- ..._yaw__rosidl_typesupport_introspection_c.h | 26 -- ...__rosidl_typesupport_introspection_cpp.hpp | 27 -- .../msg/detail/gps_yaw__struct.h | 43 -- .../msg/detail/gps_yaw__struct.hpp | 172 -------- .../msg/detail/gps_yaw__traits.hpp | 42 -- .../msg/detail/gps_yaw__type_support.c | 126 ------ .../msg/detail/gps_yaw__type_support.cpp | 152 ------- .../msg/detail/gps_yaw__type_support.h | 33 -- .../msg/detail/vel_cmd__builder.hpp | 55 --- .../msg/detail/vel_cmd__functions.c | 147 ------- .../msg/detail/vel_cmd__functions.h | 124 ------ .../vel_cmd__rosidl_typesupport_fastrtps_c.h | 36 -- ...l_cmd__rosidl_typesupport_fastrtps_cpp.hpp | 79 ---- ..._cmd__rosidl_typesupport_introspection_c.h | 26 -- ...__rosidl_typesupport_introspection_cpp.hpp | 27 -- .../msg/detail/vel_cmd__struct.h | 44 -- .../msg/detail/vel_cmd__struct.hpp | 127 ------ .../msg/detail/vel_cmd__traits.hpp | 46 -- .../msg/detail/vel_cmd__type_support.c | 89 ---- .../msg/detail/vel_cmd__type_support.cpp | 107 ----- .../msg/detail/vel_cmd__type_support.h | 33 -- .../msg/detail/vel_cmd_group__builder.hpp | 71 --- .../msg/detail/vel_cmd_group__functions.c | 156 ------- .../msg/detail/vel_cmd_group__functions.h | 124 ------ ...cmd_group__rosidl_typesupport_fastrtps_c.h | 36 -- ...group__rosidl_typesupport_fastrtps_cpp.hpp | 79 ---- ...roup__rosidl_typesupport_introspection_c.h | 26 -- ...__rosidl_typesupport_introspection_cpp.hpp | 27 -- .../msg/detail/vel_cmd_group__struct.h | 47 -- .../msg/detail/vel_cmd_group__struct.hpp | 139 ------ .../msg/detail/vel_cmd_group__traits.hpp | 46 -- .../msg/detail/vel_cmd_group__type_support.c | 106 ----- .../detail/vel_cmd_group__type_support.cpp | 149 ------- .../msg/detail/vel_cmd_group__type_support.h | 33 -- .../airsim_interfaces/msg/environment.h | 12 - .../airsim_interfaces/msg/environment.hpp | 11 - .../msg/gimbal_angle_euler_cmd.h | 12 - .../msg/gimbal_angle_euler_cmd.hpp | 11 - .../msg/gimbal_angle_quat_cmd.h | 12 - .../msg/gimbal_angle_quat_cmd.hpp | 11 - .../include/airsim_interfaces/msg/gps_yaw.h | 12 - .../include/airsim_interfaces/msg/gps_yaw.hpp | 11 - .../rosidl_generator_c__visibility_control.h | 42 -- ...pesupport_fastrtps_c__visibility_control.h | 43 -- ...support_fastrtps_cpp__visibility_control.h | 43 -- ...port_introspection_c__visibility_control.h | 43 -- .../include/airsim_interfaces/msg/vel_cmd.h | 12 - .../include/airsim_interfaces/msg/vel_cmd.hpp | 11 - .../airsim_interfaces/msg/vel_cmd_group.h | 12 - .../airsim_interfaces/msg/vel_cmd_group.hpp | 11 - .../srv/detail/land__builder.hpp | 97 ----- .../srv/detail/land__functions.c | 266 ------------ .../srv/detail/land__functions.h | 223 ---------- .../land__rosidl_typesupport_fastrtps_c.h | 87 ---- .../land__rosidl_typesupport_fastrtps_cpp.hpp | 175 -------- ...land__rosidl_typesupport_introspection_c.h | 47 -- ...__rosidl_typesupport_introspection_cpp.hpp | 67 --- .../srv/detail/land__struct.h | 59 --- .../srv/detail/land__struct.hpp | 260 ----------- .../srv/detail/land__traits.hpp | 126 ------ .../srv/detail/land__type_support.c | 224 ---------- .../srv/detail/land__type_support.cpp | 332 -------------- .../srv/detail/land__type_support.h | 58 --- .../srv/detail/land_group__builder.hpp | 113 ----- .../srv/detail/land_group__functions.c | 277 ------------ .../srv/detail/land_group__functions.h | 223 ---------- ...and_group__rosidl_typesupport_fastrtps_c.h | 87 ---- ...group__rosidl_typesupport_fastrtps_cpp.hpp | 175 -------- ...roup__rosidl_typesupport_introspection_c.h | 47 -- ...__rosidl_typesupport_introspection_cpp.hpp | 67 --- .../srv/detail/land_group__struct.h | 64 --- .../srv/detail/land_group__struct.hpp | 272 ------------ .../srv/detail/land_group__traits.hpp | 126 ------ .../srv/detail/land_group__type_support.c | 243 ----------- .../srv/detail/land_group__type_support.cpp | 374 ---------------- .../srv/detail/land_group__type_support.h | 58 --- .../srv/detail/reset__builder.hpp | 97 ----- .../srv/detail/reset__functions.c | 266 ------------ .../srv/detail/reset__functions.h | 223 ---------- .../reset__rosidl_typesupport_fastrtps_c.h | 87 ---- ...reset__rosidl_typesupport_fastrtps_cpp.hpp | 175 -------- ...eset__rosidl_typesupport_introspection_c.h | 47 -- ...__rosidl_typesupport_introspection_cpp.hpp | 67 --- .../srv/detail/reset__struct.h | 59 --- .../srv/detail/reset__struct.hpp | 260 ----------- .../srv/detail/reset__traits.hpp | 126 ------ .../srv/detail/reset__type_support.c | 224 ---------- .../srv/detail/reset__type_support.cpp | 332 -------------- .../srv/detail/reset__type_support.h | 58 --- .../srv/detail/set_gps_position__builder.hpp | 161 ------- .../srv/detail/set_gps_position__functions.c | 283 ------------ .../srv/detail/set_gps_position__functions.h | 223 ---------- ..._position__rosidl_typesupport_fastrtps_c.h | 87 ---- ...ition__rosidl_typesupport_fastrtps_cpp.hpp | 175 -------- ...tion__rosidl_typesupport_introspection_c.h | 47 -- ...__rosidl_typesupport_introspection_cpp.hpp | 67 --- .../srv/detail/set_gps_position__struct.h | 67 --- .../srv/detail/set_gps_position__struct.hpp | 316 -------------- .../srv/detail/set_gps_position__traits.hpp | 126 ------ .../detail/set_gps_position__type_support.c | 288 ------------- .../detail/set_gps_position__type_support.cpp | 392 ----------------- .../detail/set_gps_position__type_support.h | 58 --- .../detail/set_local_position__builder.hpp | 177 -------- .../detail/set_local_position__functions.c | 295 ------------- .../detail/set_local_position__functions.h | 223 ---------- ..._position__rosidl_typesupport_fastrtps_c.h | 87 ---- ...ition__rosidl_typesupport_fastrtps_cpp.hpp | 175 -------- ...tion__rosidl_typesupport_introspection_c.h | 47 -- ...__rosidl_typesupport_introspection_cpp.hpp | 67 --- .../srv/detail/set_local_position__struct.h | 73 ---- .../srv/detail/set_local_position__struct.hpp | 330 -------------- .../srv/detail/set_local_position__traits.hpp | 126 ------ .../detail/set_local_position__type_support.c | 308 ------------- .../set_local_position__type_support.cpp | 407 ------------------ .../detail/set_local_position__type_support.h | 58 --- .../srv/detail/takeoff__builder.hpp | 97 ----- .../srv/detail/takeoff__functions.c | 266 ------------ .../srv/detail/takeoff__functions.h | 223 ---------- .../takeoff__rosidl_typesupport_fastrtps_c.h | 87 ---- ...keoff__rosidl_typesupport_fastrtps_cpp.hpp | 175 -------- ...eoff__rosidl_typesupport_introspection_c.h | 47 -- ...__rosidl_typesupport_introspection_cpp.hpp | 67 --- .../srv/detail/takeoff__struct.h | 59 --- .../srv/detail/takeoff__struct.hpp | 260 ----------- .../srv/detail/takeoff__traits.hpp | 126 ------ .../srv/detail/takeoff__type_support.c | 224 ---------- .../srv/detail/takeoff__type_support.cpp | 332 -------------- .../srv/detail/takeoff__type_support.h | 58 --- .../srv/detail/takeoff_group__builder.hpp | 113 ----- .../srv/detail/takeoff_group__functions.c | 277 ------------ .../srv/detail/takeoff_group__functions.h | 223 ---------- ...off_group__rosidl_typesupport_fastrtps_c.h | 87 ---- ...group__rosidl_typesupport_fastrtps_cpp.hpp | 175 -------- ...roup__rosidl_typesupport_introspection_c.h | 47 -- ...__rosidl_typesupport_introspection_cpp.hpp | 67 --- .../srv/detail/takeoff_group__struct.h | 64 --- .../srv/detail/takeoff_group__struct.hpp | 272 ------------ .../srv/detail/takeoff_group__traits.hpp | 126 ------ .../srv/detail/takeoff_group__type_support.c | 243 ----------- .../detail/takeoff_group__type_support.cpp | 374 ---------------- .../srv/detail/takeoff_group__type_support.h | 58 --- .../include/airsim_interfaces/srv/land.h | 12 - .../include/airsim_interfaces/srv/land.hpp | 11 - .../airsim_interfaces/srv/land_group.h | 12 - .../airsim_interfaces/srv/land_group.hpp | 11 - .../include/airsim_interfaces/srv/reset.h | 12 - .../include/airsim_interfaces/srv/reset.hpp | 11 - .../airsim_interfaces/srv/set_gps_position.h | 12 - .../srv/set_gps_position.hpp | 11 - .../srv/set_local_position.h | 12 - .../srv/set_local_position.hpp | 11 - .../include/airsim_interfaces/srv/takeoff.h | 12 - .../include/airsim_interfaces/srv/takeoff.hpp | 11 - .../airsim_interfaces/srv/takeoff_group.h | 12 - .../airsim_interfaces/srv/takeoff_group.hpp | 11 - .../lib/libairsim_interfaces__python.so | Bin 120504 -> 0 bytes ...ibairsim_interfaces__rosidl_generator_c.so | Bin 91512 -> 0 bytes ...airsim_interfaces__rosidl_typesupport_c.so | Bin 64808 -> 0 bytes ...rsim_interfaces__rosidl_typesupport_cpp.so | Bin 75624 -> 0 bytes ...terfaces__rosidl_typesupport_fastrtps_c.so | Bin 106808 -> 0 bytes ...rfaces__rosidl_typesupport_fastrtps_cpp.so | Bin 172656 -> 0 bytes ...ces__rosidl_typesupport_introspection_c.so | Bin 76928 -> 0 bytes ...s__rosidl_typesupport_introspection_cpp.so | Bin 166488 -> 0 bytes .../airsim_interfaces/__init__.py | 0 ...pesupport_c.cpython-38-x86_64-linux-gnu.so | Bin 74936 -> 0 bytes ..._fastrtps_c.cpython-38-x86_64-linux-gnu.so | Bin 74984 -> 0 bytes ...ospection_c.cpython-38-x86_64-linux-gnu.so | Bin 74960 -> 0 bytes .../airsim_interfaces/msg/__init__.py | 9 - .../airsim_interfaces/msg/_altimeter.py | 185 -------- .../airsim_interfaces/msg/_altimeter_s.c | 167 ------- .../airsim_interfaces/msg/_car_controls.py | 263 ----------- .../airsim_interfaces/msg/_car_controls_s.c | 247 ----------- .../airsim_interfaces/msg/_car_state.py | 275 ------------ .../airsim_interfaces/msg/_car_state_s.c | 265 ------------ .../airsim_interfaces/msg/_environment.py | 256 ----------- .../airsim_interfaces/msg/_environment_s.c | 254 ----------- .../msg/_gimbal_angle_euler_cmd.py | 223 ---------- .../msg/_gimbal_angle_euler_cmd_s.c | 234 ---------- .../msg/_gimbal_angle_quat_cmd.py | 191 -------- .../msg/_gimbal_angle_quat_cmd_s.c | 203 --------- .../airsim_interfaces/msg/_gps_yaw.py | 179 -------- .../airsim_interfaces/msg/_gps_yaw_s.c | 158 ------- .../airsim_interfaces/msg/_vel_cmd.py | 128 ------ .../airsim_interfaces/msg/_vel_cmd_group.py | 157 ------- .../airsim_interfaces/msg/_vel_cmd_group_s.c | 181 -------- .../airsim_interfaces/msg/_vel_cmd_s.c | 107 ----- .../airsim_interfaces/srv/__init__.py | 7 - .../airsim_interfaces/srv/_land.py | 278 ------------ .../airsim_interfaces/srv/_land_group.py | 307 ------------- .../airsim_interfaces/srv/_land_group_s.c | 267 ------------ .../airsim_interfaces/srv/_land_s.c | 193 --------- .../airsim_interfaces/srv/_reset.py | 278 ------------ .../airsim_interfaces/srv/_reset_s.c | 193 --------- .../srv/_set_gps_position.py | 354 --------------- .../srv/_set_gps_position_s.c | 288 ------------- .../srv/_set_local_position.py | 373 ---------------- .../srv/_set_local_position_s.c | 325 -------------- .../airsim_interfaces/srv/_takeoff.py | 278 ------------ .../airsim_interfaces/srv/_takeoff_group.py | 307 ------------- .../airsim_interfaces/srv/_takeoff_group_s.c | 267 ------------ .../airsim_interfaces/srv/_takeoff_s.c | 193 --------- .../airsim_interfacesConfig-version.cmake | 14 - .../cmake/airsim_interfacesConfig.cmake | 42 -- ...s__rosidl_generator_cExport-noconfig.cmake | 19 - ...interfaces__rosidl_generator_cExport.cmake | 99 ----- ...terfaces__rosidl_generator_cppExport.cmake | 99 ----- ..._rosidl_typesupport_cExport-noconfig.cmake | 19 - ...terfaces__rosidl_typesupport_cExport.cmake | 99 ----- ...osidl_typesupport_cppExport-noconfig.cmake | 19 - ...rfaces__rosidl_typesupport_cppExport.cmake | 99 ----- ...pport_introspection_cExport-noconfig.cmake | 19 - ...dl_typesupport_introspection_cExport.cmake | 114 ----- ...ort_introspection_cppExport-noconfig.cmake | 19 - ..._typesupport_introspection_cppExport.cmake | 98 ----- ...ent_cmake_export_dependencies-extras.cmake | 80 ---- ...ke_export_include_directories-extras.cmake | 16 - .../ament_cmake_export_libraries-extras.cmake | 140 ------ .../ament_cmake_export_targets-extras.cmake | 27 -- .../cmake/rosidl_cmake-extras.cmake | 4 - ..._export_typesupport_libraries-extras.cmake | 46 -- ...ke_export_typesupport_targets-extras.cmake | 23 - .../environment/ament_prefix_path.dsv | 1 - .../environment/ament_prefix_path.sh | 4 - .../environment/library_path.dsv | 1 - .../environment/library_path.sh | 16 - .../airsim_interfaces/environment/path.dsv | 1 - .../airsim_interfaces/environment/path.sh | 5 - .../environment/pythonpath.dsv | 1 - .../environment/pythonpath.sh | 3 - .../hook/cmake_prefix_path.dsv | 1 - .../hook/cmake_prefix_path.ps1 | 3 - .../hook/cmake_prefix_path.sh | 3 - .../hook/ld_library_path_lib.dsv | 1 - .../hook/ld_library_path_lib.ps1 | 3 - .../hook/ld_library_path_lib.sh | 3 - .../airsim_interfaces/hook/pythonpath.dsv | 1 - .../airsim_interfaces/hook/pythonpath.ps1 | 3 - .../airsim_interfaces/hook/pythonpath.sh | 3 - .../share/airsim_interfaces/local_setup.bash | 46 -- .../share/airsim_interfaces/local_setup.dsv | 4 - .../share/airsim_interfaces/local_setup.sh | 135 ------ .../share/airsim_interfaces/local_setup.zsh | 59 --- .../share/airsim_interfaces/msg/Altimeter.idl | 19 - .../share/airsim_interfaces/msg/Altimeter.msg | 4 - .../airsim_interfaces/msg/CarControls.idl | 27 -- .../airsim_interfaces/msg/CarControls.msg | 8 - .../share/airsim_interfaces/msg/CarState.idl | 29 -- .../share/airsim_interfaces/msg/CarState.msg | 8 - .../airsim_interfaces/msg/Environment.idl | 27 -- .../airsim_interfaces/msg/Environment.msg | 8 - .../share/airsim_interfaces/msg/GPSYaw.idl | 18 - .../share/airsim_interfaces/msg/GPSYaw.msg | 4 - .../msg/GimbalAngleEulerCmd.idl | 23 - .../msg/GimbalAngleEulerCmd.msg | 6 - .../msg/GimbalAngleQuatCmd.idl | 20 - .../msg/GimbalAngleQuatCmd.msg | 4 - .../share/airsim_interfaces/msg/VelCmd.idl | 13 - .../share/airsim_interfaces/msg/VelCmd.msg | 2 - .../airsim_interfaces/msg/VelCmdGroup.idl | 15 - .../airsim_interfaces/msg/VelCmdGroup.msg | 2 - .../share/airsim_interfaces/package.bash | 39 -- .../share/airsim_interfaces/package.dsv | 14 - .../share/airsim_interfaces/package.ps1 | 67 --- .../share/airsim_interfaces/package.sh | 89 ---- .../share/airsim_interfaces/package.xml | 24 -- .../share/airsim_interfaces/package.zsh | 50 --- .../share/airsim_interfaces/srv/Land.idl | 15 - .../share/airsim_interfaces/srv/Land.srv | 3 - .../share/airsim_interfaces/srv/LandGroup.idl | 17 - .../share/airsim_interfaces/srv/LandGroup.srv | 4 - .../srv/LandGroup_Request.msg | 2 - .../srv/LandGroup_Response.msg | 2 - .../airsim_interfaces/srv/Land_Request.msg | 1 - .../airsim_interfaces/srv/Land_Response.msg | 2 - .../share/airsim_interfaces/srv/Reset.idl | 17 - .../share/airsim_interfaces/srv/Reset.srv | 4 - .../airsim_interfaces/srv/Reset_Request.msg | 2 - .../airsim_interfaces/srv/Reset_Response.msg | 2 - .../airsim_interfaces/srv/SetGPSPosition.idl | 25 -- .../airsim_interfaces/srv/SetGPSPosition.srv | 8 - .../srv/SetGPSPosition_Request.msg | 5 - .../srv/SetGPSPosition_Response.msg | 3 - .../srv/SetLocalPosition.idl | 30 -- .../srv/SetLocalPosition.srv | 11 - .../srv/SetLocalPosition_Request.msg | 7 - .../srv/SetLocalPosition_Response.msg | 4 - .../share/airsim_interfaces/srv/Takeoff.idl | 15 - .../share/airsim_interfaces/srv/Takeoff.srv | 3 - .../airsim_interfaces/srv/TakeoffGroup.idl | 17 - .../airsim_interfaces/srv/TakeoffGroup.srv | 4 - .../srv/TakeoffGroup_Request.msg | 2 - .../srv/TakeoffGroup_Response.msg | 2 - .../airsim_interfaces/srv/Takeoff_Request.msg | 1 - .../srv/Takeoff_Response.msg | 2 - .../airsim_interfaces | 1 - .../parent_prefix_path/airsim_interfaces | 1 - .../rosidl_interfaces/airsim_interfaces | 46 -- .../share/airsim_ros_pkgs/package.bash | 39 -- .../share/airsim_ros_pkgs/package.dsv | 5 - .../share/airsim_ros_pkgs/package.ps1 | 64 --- .../share/airsim_ros_pkgs/package.sh | 86 ---- .../share/airsim_ros_pkgs/package.zsh | 50 --- ros2/install/local_setup.bash | 107 ----- ros2/install/local_setup.ps1 | 53 --- ros2/install/local_setup.sh | 114 ----- ros2/install/local_setup.zsh | 120 ------ ros2/install/setup.bash | 31 -- ros2/install/setup.ps1 | 29 -- ros2/install/setup.sh | 45 -- ros2/install/setup.zsh | 31 -- ros2/log/COLCON_IGNORE | 0 ros2/log/latest | 1 - ros2/log/latest_build | 1 - 406 files changed, 37671 deletions(-) delete mode 100644 ros2/install/.colcon_install_layout delete mode 100644 ros2/install/COLCON_IGNORE delete mode 100644 ros2/install/_local_setup_util_ps1.py delete mode 100644 ros2/install/_local_setup_util_sh.py delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_generator_c__visibility_control.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__builder.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_cpp.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__traits.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.c delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.cpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.hpp delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.h delete mode 100644 ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.hpp delete mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__python.so delete mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_generator_c.so delete mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_c.so delete mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_cpp.so delete mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_fastrtps_c.so delete mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_fastrtps_cpp.so delete mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_introspection_c.so delete mode 100644 ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_introspection_cpp.so delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/__init__.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_c.cpython-38-x86_64-linux-gnu.so delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_fastrtps_c.cpython-38-x86_64-linux-gnu.so delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_introspection_c.cpython-38-x86_64-linux-gnu.so delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/__init__.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/__init__.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group.py delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group_s.c delete mode 100644 ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_s.c delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig-version.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport-noconfig.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cppExport.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport-noconfig.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport-noconfig.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport-noconfig.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport-noconfig.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_include_directories-extras.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_libraries-extras.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_targets-extras.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake-extras.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.dsv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.sh delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.dsv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.sh delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.dsv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.sh delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.dsv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.sh delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.dsv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.ps1 delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.sh delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.dsv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.ps1 delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.sh delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.dsv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.ps1 delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.sh delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.bash delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.dsv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.sh delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.zsh delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.bash delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.dsv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.ps1 delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.sh delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.xml delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/package.zsh delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.srv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.srv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Request.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Response.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Request.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Response.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.srv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Request.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Response.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.srv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Request.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Response.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.srv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Request.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Response.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.srv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.idl delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.srv delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Request.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Response.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Request.msg delete mode 100644 ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Response.msg delete mode 100644 ros2/install/airsim_interfaces/share/ament_index/resource_index/package_run_dependencies/airsim_interfaces delete mode 100644 ros2/install/airsim_interfaces/share/ament_index/resource_index/parent_prefix_path/airsim_interfaces delete mode 100644 ros2/install/airsim_interfaces/share/ament_index/resource_index/rosidl_interfaces/airsim_interfaces delete mode 100644 ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.bash delete mode 100644 ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.dsv delete mode 100644 ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.ps1 delete mode 100644 ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.sh delete mode 100644 ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.zsh delete mode 100644 ros2/install/local_setup.bash delete mode 100644 ros2/install/local_setup.ps1 delete mode 100644 ros2/install/local_setup.sh delete mode 100644 ros2/install/local_setup.zsh delete mode 100644 ros2/install/setup.bash delete mode 100644 ros2/install/setup.ps1 delete mode 100644 ros2/install/setup.sh delete mode 100644 ros2/install/setup.zsh delete mode 100644 ros2/log/COLCON_IGNORE delete mode 120000 ros2/log/latest delete mode 120000 ros2/log/latest_build diff --git a/ros2/install/.colcon_install_layout b/ros2/install/.colcon_install_layout deleted file mode 100644 index 3aad5336af..0000000000 --- a/ros2/install/.colcon_install_layout +++ /dev/null @@ -1 +0,0 @@ -isolated diff --git a/ros2/install/COLCON_IGNORE b/ros2/install/COLCON_IGNORE deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ros2/install/_local_setup_util_ps1.py b/ros2/install/_local_setup_util_ps1.py deleted file mode 100644 index b3e16ebe67..0000000000 --- a/ros2/install/_local_setup_util_ps1.py +++ /dev/null @@ -1,376 +0,0 @@ -# Copyright 2016-2019 Dirk Thomas -# Licensed under the Apache License, Version 2.0 - -import argparse -from collections import OrderedDict -import os -from pathlib import Path -import sys - - -FORMAT_STR_COMMENT_LINE = '# {comment}' -FORMAT_STR_SET_ENV_VAR = 'Set-Item -Path "Env:{name}" -Value "{value}"' -FORMAT_STR_USE_ENV_VAR = '$env:{name}' -FORMAT_STR_INVOKE_SCRIPT = '_colcon_prefix_powershell_source_script "{script_path}"' -FORMAT_STR_REMOVE_TRAILING_SEPARATOR = '' - -DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' -DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' -DSV_TYPE_SET = 'set' -DSV_TYPE_SET_IF_UNSET = 'set-if-unset' -DSV_TYPE_SOURCE = 'source' - - -def main(argv=sys.argv[1:]): # noqa: D103 - parser = argparse.ArgumentParser( - description='Output shell commands for the packages in topological ' - 'order') - parser.add_argument( - 'primary_extension', - help='The file extension of the primary shell') - parser.add_argument( - 'additional_extension', nargs='?', - help='The additional file extension to be considered') - parser.add_argument( - '--merged-install', action='store_true', - help='All install prefixes are merged into a single location') - args = parser.parse_args(argv) - - packages = get_packages(Path(__file__).parent, args.merged_install) - - ordered_packages = order_packages(packages) - for pkg_name in ordered_packages: - if _include_comments(): - print( - FORMAT_STR_COMMENT_LINE.format_map( - {'comment': 'Package: ' + pkg_name})) - prefix = os.path.abspath(os.path.dirname(__file__)) - if not args.merged_install: - prefix = os.path.join(prefix, pkg_name) - for line in get_commands( - pkg_name, prefix, args.primary_extension, - args.additional_extension - ): - print(line) - - for line in _remove_trailing_separators(): - print(line) - - -def get_packages(prefix_path, merged_install): - """ - Find packages based on colcon-specific files created during installation. - - :param Path prefix_path: The install prefix path of all packages - :param bool merged_install: The flag if the packages are all installed - directly in the prefix or if each package is installed in a subdirectory - named after the package - :returns: A mapping from the package name to the set of runtime - dependencies - :rtype: dict - """ - packages = {} - # since importing colcon_core isn't feasible here the following constant - # must match colcon_core.location.get_relative_package_index_path() - subdirectory = 'share/colcon-core/packages' - if merged_install: - # return if workspace is empty - if not (prefix_path / subdirectory).is_dir(): - return packages - # find all files in the subdirectory - for p in (prefix_path / subdirectory).iterdir(): - if not p.is_file(): - continue - if p.name.startswith('.'): - continue - add_package_runtime_dependencies(p, packages) - else: - # for each subdirectory look for the package specific file - for p in prefix_path.iterdir(): - if not p.is_dir(): - continue - if p.name.startswith('.'): - continue - p = p / subdirectory / p.name - if p.is_file(): - add_package_runtime_dependencies(p, packages) - - # remove unknown dependencies - pkg_names = set(packages.keys()) - for k in packages.keys(): - packages[k] = {d for d in packages[k] if d in pkg_names} - - return packages - - -def add_package_runtime_dependencies(path, packages): - """ - Check the path and if it exists extract the packages runtime dependencies. - - :param Path path: The resource file containing the runtime dependencies - :param dict packages: A mapping from package names to the sets of runtime - dependencies to add to - """ - content = path.read_text() - dependencies = set(content.split(os.pathsep) if content else []) - packages[path.name] = dependencies - - -def order_packages(packages): - """ - Order packages topologically. - - :param dict packages: A mapping from package name to the set of runtime - dependencies - :returns: The package names - :rtype: list - """ - # select packages with no dependencies in alphabetical order - to_be_ordered = list(packages.keys()) - ordered = [] - while to_be_ordered: - pkg_names_without_deps = [ - name for name in to_be_ordered if not packages[name]] - if not pkg_names_without_deps: - reduce_cycle_set(packages) - raise RuntimeError( - 'Circular dependency between: ' + ', '.join(sorted(packages))) - pkg_names_without_deps.sort() - pkg_name = pkg_names_without_deps[0] - to_be_ordered.remove(pkg_name) - ordered.append(pkg_name) - # remove item from dependency lists - for k in list(packages.keys()): - if pkg_name in packages[k]: - packages[k].remove(pkg_name) - return ordered - - -def reduce_cycle_set(packages): - """ - Reduce the set of packages to the ones part of the circular dependency. - - :param dict packages: A mapping from package name to the set of runtime - dependencies which is modified in place - """ - last_depended = None - while len(packages) > 0: - # get all remaining dependencies - depended = set() - for pkg_name, dependencies in packages.items(): - depended = depended.union(dependencies) - # remove all packages which are not dependent on - for name in list(packages.keys()): - if name not in depended: - del packages[name] - if last_depended: - # if remaining packages haven't changed return them - if last_depended == depended: - return packages.keys() - # otherwise reduce again - last_depended = depended - - -def _include_comments(): - # skipping comment lines when COLCON_TRACE is not set speeds up the - # processing especially on Windows - return bool(os.environ.get('COLCON_TRACE')) - - -def get_commands(pkg_name, prefix, primary_extension, additional_extension): - commands = [] - package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') - if os.path.exists(package_dsv_path): - commands += process_dsv_file( - package_dsv_path, prefix, primary_extension, additional_extension) - return commands - - -def process_dsv_file( - dsv_path, prefix, primary_extension=None, additional_extension=None -): - commands = [] - if _include_comments(): - commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) - with open(dsv_path, 'r') as h: - content = h.read() - lines = content.splitlines() - - basenames = OrderedDict() - for i, line in enumerate(lines): - # skip over empty or whitespace-only lines - if not line.strip(): - continue - try: - type_, remainder = line.split(';', 1) - except ValueError: - raise RuntimeError( - "Line %d in '%s' doesn't contain a semicolon separating the " - 'type from the arguments' % (i + 1, dsv_path)) - if type_ != DSV_TYPE_SOURCE: - # handle non-source lines - try: - commands += handle_dsv_types_except_source( - type_, remainder, prefix) - except RuntimeError as e: - raise RuntimeError( - "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e - else: - # group remaining source lines by basename - path_without_ext, ext = os.path.splitext(remainder) - if path_without_ext not in basenames: - basenames[path_without_ext] = set() - assert ext.startswith('.') - ext = ext[1:] - if ext in (primary_extension, additional_extension): - basenames[path_without_ext].add(ext) - - # add the dsv extension to each basename if the file exists - for basename, extensions in basenames.items(): - if not os.path.isabs(basename): - basename = os.path.join(prefix, basename) - if os.path.exists(basename + '.dsv'): - extensions.add('dsv') - - for basename, extensions in basenames.items(): - if not os.path.isabs(basename): - basename = os.path.join(prefix, basename) - if 'dsv' in extensions: - # process dsv files recursively - commands += process_dsv_file( - basename + '.dsv', prefix, primary_extension=primary_extension, - additional_extension=additional_extension) - elif primary_extension in extensions and len(extensions) == 1: - # source primary-only files - commands += [ - FORMAT_STR_INVOKE_SCRIPT.format_map({ - 'prefix': prefix, - 'script_path': basename + '.' + primary_extension})] - elif additional_extension in extensions: - # source non-primary files - commands += [ - FORMAT_STR_INVOKE_SCRIPT.format_map({ - 'prefix': prefix, - 'script_path': basename + '.' + additional_extension})] - - return commands - - -def handle_dsv_types_except_source(type_, remainder, prefix): - commands = [] - if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): - try: - env_name, value = remainder.split(';', 1) - except ValueError: - raise RuntimeError( - "doesn't contain a semicolon separating the environment name " - 'from the value') - try_prefixed_value = os.path.join(prefix, value) if value else prefix - if os.path.exists(try_prefixed_value): - value = try_prefixed_value - if type_ == DSV_TYPE_SET: - commands += _set(env_name, value) - elif type_ == DSV_TYPE_SET_IF_UNSET: - commands += _set_if_unset(env_name, value) - else: - assert False - elif type_ in ( - DSV_TYPE_PREPEND_NON_DUPLICATE, - DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS - ): - try: - env_name_and_values = remainder.split(';') - except ValueError: - raise RuntimeError( - "doesn't contain a semicolon separating the environment name " - 'from the values') - env_name = env_name_and_values[0] - values = env_name_and_values[1:] - for value in values: - if not value: - value = prefix - elif not os.path.isabs(value): - value = os.path.join(prefix, value) - if ( - type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and - not os.path.exists(value) - ): - comment = 'skip extending {env_name} with not existing path: ' \ - '{value}'.format_map(locals()) - if _include_comments(): - commands.append( - FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) - else: - commands += _prepend_unique_value(env_name, value) - else: - raise RuntimeError( - 'contains an unknown environment hook type: ' + type_) - return commands - - -env_state = {} - - -def _prepend_unique_value(name, value): - global env_state - if name not in env_state: - if os.environ.get(name): - env_state[name] = set(os.environ[name].split(os.pathsep)) - else: - env_state[name] = set() - # prepend even if the variable has not been set yet, in case a shell script sets the - # same variable without the knowledge of this Python script. - # later _remove_trailing_separators() will cleanup any unintentional trailing separator - extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) - line = FORMAT_STR_SET_ENV_VAR.format_map( - {'name': name, 'value': value + extend}) - if value not in env_state[name]: - env_state[name].add(value) - else: - if not _include_comments(): - return [] - line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) - return [line] - - -# generate commands for removing prepended underscores -def _remove_trailing_separators(): - # do nothing if the shell extension does not implement the logic - if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: - return [] - - global env_state - commands = [] - for name in env_state: - # skip variables that already had values before this script started prepending - if name in os.environ: - continue - commands += [FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map( - {'name': name})] - return commands - - -def _set(name, value): - global env_state - env_state[name] = value - line = FORMAT_STR_SET_ENV_VAR.format_map( - {'name': name, 'value': value}) - return [line] - - -def _set_if_unset(name, value): - global env_state - line = FORMAT_STR_SET_ENV_VAR.format_map( - {'name': name, 'value': value}) - if env_state.get(name, os.environ.get(name)): - line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) - return [line] - - -if __name__ == '__main__': # pragma: no cover - try: - rc = main() - except RuntimeError as e: - print(str(e), file=sys.stderr) - rc = 1 - sys.exit(rc) diff --git a/ros2/install/_local_setup_util_sh.py b/ros2/install/_local_setup_util_sh.py deleted file mode 100644 index 07a8cbea68..0000000000 --- a/ros2/install/_local_setup_util_sh.py +++ /dev/null @@ -1,376 +0,0 @@ -# Copyright 2016-2019 Dirk Thomas -# Licensed under the Apache License, Version 2.0 - -import argparse -from collections import OrderedDict -import os -from pathlib import Path -import sys - - -FORMAT_STR_COMMENT_LINE = '# {comment}' -FORMAT_STR_SET_ENV_VAR = 'export {name}="{value}"' -FORMAT_STR_USE_ENV_VAR = '${name}' -FORMAT_STR_INVOKE_SCRIPT = 'COLCON_CURRENT_PREFIX="{prefix}" _colcon_prefix_sh_source_script "{script_path}"' -FORMAT_STR_REMOVE_TRAILING_SEPARATOR = 'if [ "$(echo -n ${name} | tail -c 1)" = ":" ]; then export {name}=${{{name}%?}} ; fi' - -DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' -DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' -DSV_TYPE_SET = 'set' -DSV_TYPE_SET_IF_UNSET = 'set-if-unset' -DSV_TYPE_SOURCE = 'source' - - -def main(argv=sys.argv[1:]): # noqa: D103 - parser = argparse.ArgumentParser( - description='Output shell commands for the packages in topological ' - 'order') - parser.add_argument( - 'primary_extension', - help='The file extension of the primary shell') - parser.add_argument( - 'additional_extension', nargs='?', - help='The additional file extension to be considered') - parser.add_argument( - '--merged-install', action='store_true', - help='All install prefixes are merged into a single location') - args = parser.parse_args(argv) - - packages = get_packages(Path(__file__).parent, args.merged_install) - - ordered_packages = order_packages(packages) - for pkg_name in ordered_packages: - if _include_comments(): - print( - FORMAT_STR_COMMENT_LINE.format_map( - {'comment': 'Package: ' + pkg_name})) - prefix = os.path.abspath(os.path.dirname(__file__)) - if not args.merged_install: - prefix = os.path.join(prefix, pkg_name) - for line in get_commands( - pkg_name, prefix, args.primary_extension, - args.additional_extension - ): - print(line) - - for line in _remove_trailing_separators(): - print(line) - - -def get_packages(prefix_path, merged_install): - """ - Find packages based on colcon-specific files created during installation. - - :param Path prefix_path: The install prefix path of all packages - :param bool merged_install: The flag if the packages are all installed - directly in the prefix or if each package is installed in a subdirectory - named after the package - :returns: A mapping from the package name to the set of runtime - dependencies - :rtype: dict - """ - packages = {} - # since importing colcon_core isn't feasible here the following constant - # must match colcon_core.location.get_relative_package_index_path() - subdirectory = 'share/colcon-core/packages' - if merged_install: - # return if workspace is empty - if not (prefix_path / subdirectory).is_dir(): - return packages - # find all files in the subdirectory - for p in (prefix_path / subdirectory).iterdir(): - if not p.is_file(): - continue - if p.name.startswith('.'): - continue - add_package_runtime_dependencies(p, packages) - else: - # for each subdirectory look for the package specific file - for p in prefix_path.iterdir(): - if not p.is_dir(): - continue - if p.name.startswith('.'): - continue - p = p / subdirectory / p.name - if p.is_file(): - add_package_runtime_dependencies(p, packages) - - # remove unknown dependencies - pkg_names = set(packages.keys()) - for k in packages.keys(): - packages[k] = {d for d in packages[k] if d in pkg_names} - - return packages - - -def add_package_runtime_dependencies(path, packages): - """ - Check the path and if it exists extract the packages runtime dependencies. - - :param Path path: The resource file containing the runtime dependencies - :param dict packages: A mapping from package names to the sets of runtime - dependencies to add to - """ - content = path.read_text() - dependencies = set(content.split(os.pathsep) if content else []) - packages[path.name] = dependencies - - -def order_packages(packages): - """ - Order packages topologically. - - :param dict packages: A mapping from package name to the set of runtime - dependencies - :returns: The package names - :rtype: list - """ - # select packages with no dependencies in alphabetical order - to_be_ordered = list(packages.keys()) - ordered = [] - while to_be_ordered: - pkg_names_without_deps = [ - name for name in to_be_ordered if not packages[name]] - if not pkg_names_without_deps: - reduce_cycle_set(packages) - raise RuntimeError( - 'Circular dependency between: ' + ', '.join(sorted(packages))) - pkg_names_without_deps.sort() - pkg_name = pkg_names_without_deps[0] - to_be_ordered.remove(pkg_name) - ordered.append(pkg_name) - # remove item from dependency lists - for k in list(packages.keys()): - if pkg_name in packages[k]: - packages[k].remove(pkg_name) - return ordered - - -def reduce_cycle_set(packages): - """ - Reduce the set of packages to the ones part of the circular dependency. - - :param dict packages: A mapping from package name to the set of runtime - dependencies which is modified in place - """ - last_depended = None - while len(packages) > 0: - # get all remaining dependencies - depended = set() - for pkg_name, dependencies in packages.items(): - depended = depended.union(dependencies) - # remove all packages which are not dependent on - for name in list(packages.keys()): - if name not in depended: - del packages[name] - if last_depended: - # if remaining packages haven't changed return them - if last_depended == depended: - return packages.keys() - # otherwise reduce again - last_depended = depended - - -def _include_comments(): - # skipping comment lines when COLCON_TRACE is not set speeds up the - # processing especially on Windows - return bool(os.environ.get('COLCON_TRACE')) - - -def get_commands(pkg_name, prefix, primary_extension, additional_extension): - commands = [] - package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') - if os.path.exists(package_dsv_path): - commands += process_dsv_file( - package_dsv_path, prefix, primary_extension, additional_extension) - return commands - - -def process_dsv_file( - dsv_path, prefix, primary_extension=None, additional_extension=None -): - commands = [] - if _include_comments(): - commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) - with open(dsv_path, 'r') as h: - content = h.read() - lines = content.splitlines() - - basenames = OrderedDict() - for i, line in enumerate(lines): - # skip over empty or whitespace-only lines - if not line.strip(): - continue - try: - type_, remainder = line.split(';', 1) - except ValueError: - raise RuntimeError( - "Line %d in '%s' doesn't contain a semicolon separating the " - 'type from the arguments' % (i + 1, dsv_path)) - if type_ != DSV_TYPE_SOURCE: - # handle non-source lines - try: - commands += handle_dsv_types_except_source( - type_, remainder, prefix) - except RuntimeError as e: - raise RuntimeError( - "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e - else: - # group remaining source lines by basename - path_without_ext, ext = os.path.splitext(remainder) - if path_without_ext not in basenames: - basenames[path_without_ext] = set() - assert ext.startswith('.') - ext = ext[1:] - if ext in (primary_extension, additional_extension): - basenames[path_without_ext].add(ext) - - # add the dsv extension to each basename if the file exists - for basename, extensions in basenames.items(): - if not os.path.isabs(basename): - basename = os.path.join(prefix, basename) - if os.path.exists(basename + '.dsv'): - extensions.add('dsv') - - for basename, extensions in basenames.items(): - if not os.path.isabs(basename): - basename = os.path.join(prefix, basename) - if 'dsv' in extensions: - # process dsv files recursively - commands += process_dsv_file( - basename + '.dsv', prefix, primary_extension=primary_extension, - additional_extension=additional_extension) - elif primary_extension in extensions and len(extensions) == 1: - # source primary-only files - commands += [ - FORMAT_STR_INVOKE_SCRIPT.format_map({ - 'prefix': prefix, - 'script_path': basename + '.' + primary_extension})] - elif additional_extension in extensions: - # source non-primary files - commands += [ - FORMAT_STR_INVOKE_SCRIPT.format_map({ - 'prefix': prefix, - 'script_path': basename + '.' + additional_extension})] - - return commands - - -def handle_dsv_types_except_source(type_, remainder, prefix): - commands = [] - if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): - try: - env_name, value = remainder.split(';', 1) - except ValueError: - raise RuntimeError( - "doesn't contain a semicolon separating the environment name " - 'from the value') - try_prefixed_value = os.path.join(prefix, value) if value else prefix - if os.path.exists(try_prefixed_value): - value = try_prefixed_value - if type_ == DSV_TYPE_SET: - commands += _set(env_name, value) - elif type_ == DSV_TYPE_SET_IF_UNSET: - commands += _set_if_unset(env_name, value) - else: - assert False - elif type_ in ( - DSV_TYPE_PREPEND_NON_DUPLICATE, - DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS - ): - try: - env_name_and_values = remainder.split(';') - except ValueError: - raise RuntimeError( - "doesn't contain a semicolon separating the environment name " - 'from the values') - env_name = env_name_and_values[0] - values = env_name_and_values[1:] - for value in values: - if not value: - value = prefix - elif not os.path.isabs(value): - value = os.path.join(prefix, value) - if ( - type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and - not os.path.exists(value) - ): - comment = 'skip extending {env_name} with not existing path: ' \ - '{value}'.format_map(locals()) - if _include_comments(): - commands.append( - FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) - else: - commands += _prepend_unique_value(env_name, value) - else: - raise RuntimeError( - 'contains an unknown environment hook type: ' + type_) - return commands - - -env_state = {} - - -def _prepend_unique_value(name, value): - global env_state - if name not in env_state: - if os.environ.get(name): - env_state[name] = set(os.environ[name].split(os.pathsep)) - else: - env_state[name] = set() - # prepend even if the variable has not been set yet, in case a shell script sets the - # same variable without the knowledge of this Python script. - # later _remove_trailing_separators() will cleanup any unintentional trailing separator - extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) - line = FORMAT_STR_SET_ENV_VAR.format_map( - {'name': name, 'value': value + extend}) - if value not in env_state[name]: - env_state[name].add(value) - else: - if not _include_comments(): - return [] - line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) - return [line] - - -# generate commands for removing prepended underscores -def _remove_trailing_separators(): - # do nothing if the shell extension does not implement the logic - if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: - return [] - - global env_state - commands = [] - for name in env_state: - # skip variables that already had values before this script started prepending - if name in os.environ: - continue - commands += [FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map( - {'name': name})] - return commands - - -def _set(name, value): - global env_state - env_state[name] = value - line = FORMAT_STR_SET_ENV_VAR.format_map( - {'name': name, 'value': value}) - return [line] - - -def _set_if_unset(name, value): - global env_state - line = FORMAT_STR_SET_ENV_VAR.format_map( - {'name': name, 'value': value}) - if env_state.get(name, os.environ.get(name)): - line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) - return [line] - - -if __name__ == '__main__': # pragma: no cover - try: - rc = main() - except RuntimeError as e: - print(str(e), file=sys.stderr) - rc = 1 - sys.exit(rc) diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.h deleted file mode 100644 index 8a48c332a8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__ALTIMETER_H_ -#define AIRSIM_INTERFACES__MSG__ALTIMETER_H_ - -#include "airsim_interfaces/msg/detail/altimeter__struct.h" -#include "airsim_interfaces/msg/detail/altimeter__functions.h" -#include "airsim_interfaces/msg/detail/altimeter__type_support.h" - -#endif // AIRSIM_INTERFACES__MSG__ALTIMETER_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.hpp deleted file mode 100644 index 4b43bca495..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/altimeter.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__ALTIMETER_HPP_ -#define AIRSIM_INTERFACES__MSG__ALTIMETER_HPP_ - -#include "airsim_interfaces/msg/detail/altimeter__struct.hpp" -#include "airsim_interfaces/msg/detail/altimeter__builder.hpp" -#include "airsim_interfaces/msg/detail/altimeter__traits.hpp" - -#endif // AIRSIM_INTERFACES__MSG__ALTIMETER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.h deleted file mode 100644 index 1536514c0e..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__CAR_CONTROLS_H_ -#define AIRSIM_INTERFACES__MSG__CAR_CONTROLS_H_ - -#include "airsim_interfaces/msg/detail/car_controls__struct.h" -#include "airsim_interfaces/msg/detail/car_controls__functions.h" -#include "airsim_interfaces/msg/detail/car_controls__type_support.h" - -#endif // AIRSIM_INTERFACES__MSG__CAR_CONTROLS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.hpp deleted file mode 100644 index e961a84fba..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_controls.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__CAR_CONTROLS_HPP_ -#define AIRSIM_INTERFACES__MSG__CAR_CONTROLS_HPP_ - -#include "airsim_interfaces/msg/detail/car_controls__struct.hpp" -#include "airsim_interfaces/msg/detail/car_controls__builder.hpp" -#include "airsim_interfaces/msg/detail/car_controls__traits.hpp" - -#endif // AIRSIM_INTERFACES__MSG__CAR_CONTROLS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.h deleted file mode 100644 index a2ad9f85f4..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__CAR_STATE_H_ -#define AIRSIM_INTERFACES__MSG__CAR_STATE_H_ - -#include "airsim_interfaces/msg/detail/car_state__struct.h" -#include "airsim_interfaces/msg/detail/car_state__functions.h" -#include "airsim_interfaces/msg/detail/car_state__type_support.h" - -#endif // AIRSIM_INTERFACES__MSG__CAR_STATE_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.hpp deleted file mode 100644 index dab7cd6832..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/car_state.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__CAR_STATE_HPP_ -#define AIRSIM_INTERFACES__MSG__CAR_STATE_HPP_ - -#include "airsim_interfaces/msg/detail/car_state__struct.hpp" -#include "airsim_interfaces/msg/detail/car_state__builder.hpp" -#include "airsim_interfaces/msg/detail/car_state__traits.hpp" - -#endif // AIRSIM_INTERFACES__MSG__CAR_STATE_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__builder.hpp deleted file mode 100644 index cad78bd700..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__builder.hpp +++ /dev/null @@ -1,103 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__BUILDER_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__BUILDER_HPP_ - -#include "airsim_interfaces/msg/detail/altimeter__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace builder -{ - -class Init_Altimeter_qnh -{ -public: - explicit Init_Altimeter_qnh(::airsim_interfaces::msg::Altimeter & msg) - : msg_(msg) - {} - ::airsim_interfaces::msg::Altimeter qnh(::airsim_interfaces::msg::Altimeter::_qnh_type arg) - { - msg_.qnh = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::msg::Altimeter msg_; -}; - -class Init_Altimeter_pressure -{ -public: - explicit Init_Altimeter_pressure(::airsim_interfaces::msg::Altimeter & msg) - : msg_(msg) - {} - Init_Altimeter_qnh pressure(::airsim_interfaces::msg::Altimeter::_pressure_type arg) - { - msg_.pressure = std::move(arg); - return Init_Altimeter_qnh(msg_); - } - -private: - ::airsim_interfaces::msg::Altimeter msg_; -}; - -class Init_Altimeter_altitude -{ -public: - explicit Init_Altimeter_altitude(::airsim_interfaces::msg::Altimeter & msg) - : msg_(msg) - {} - Init_Altimeter_pressure altitude(::airsim_interfaces::msg::Altimeter::_altitude_type arg) - { - msg_.altitude = std::move(arg); - return Init_Altimeter_pressure(msg_); - } - -private: - ::airsim_interfaces::msg::Altimeter msg_; -}; - -class Init_Altimeter_header -{ -public: - Init_Altimeter_header() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_Altimeter_altitude header(::airsim_interfaces::msg::Altimeter::_header_type arg) - { - msg_.header = std::move(arg); - return Init_Altimeter_altitude(msg_); - } - -private: - ::airsim_interfaces::msg::Altimeter msg_; -}; - -} // namespace builder - -} // namespace msg - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::msg::Altimeter>() -{ - return airsim_interfaces::msg::builder::Init_Altimeter_header(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.c deleted file mode 100644 index 34101d36db..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.c +++ /dev/null @@ -1,153 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/msg/detail/altimeter__functions.h" - -#include -#include -#include -#include - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/detail/header__functions.h" - -bool -airsim_interfaces__msg__Altimeter__init(airsim_interfaces__msg__Altimeter * msg) -{ - if (!msg) { - return false; - } - // header - if (!std_msgs__msg__Header__init(&msg->header)) { - airsim_interfaces__msg__Altimeter__fini(msg); - return false; - } - // altitude - // pressure - // qnh - return true; -} - -void -airsim_interfaces__msg__Altimeter__fini(airsim_interfaces__msg__Altimeter * msg) -{ - if (!msg) { - return; - } - // header - std_msgs__msg__Header__fini(&msg->header); - // altitude - // pressure - // qnh -} - -airsim_interfaces__msg__Altimeter * -airsim_interfaces__msg__Altimeter__create() -{ - airsim_interfaces__msg__Altimeter * msg = (airsim_interfaces__msg__Altimeter *)malloc(sizeof(airsim_interfaces__msg__Altimeter)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__msg__Altimeter)); - bool success = airsim_interfaces__msg__Altimeter__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__msg__Altimeter__destroy(airsim_interfaces__msg__Altimeter * msg) -{ - if (msg) { - airsim_interfaces__msg__Altimeter__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__msg__Altimeter__Sequence__init(airsim_interfaces__msg__Altimeter__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__msg__Altimeter * data = NULL; - if (size) { - data = (airsim_interfaces__msg__Altimeter *)calloc(size, sizeof(airsim_interfaces__msg__Altimeter)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__msg__Altimeter__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__msg__Altimeter__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__msg__Altimeter__Sequence__fini(airsim_interfaces__msg__Altimeter__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__msg__Altimeter__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__msg__Altimeter__Sequence * -airsim_interfaces__msg__Altimeter__Sequence__create(size_t size) -{ - airsim_interfaces__msg__Altimeter__Sequence * array = (airsim_interfaces__msg__Altimeter__Sequence *)malloc(sizeof(airsim_interfaces__msg__Altimeter__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__msg__Altimeter__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__msg__Altimeter__Sequence__destroy(airsim_interfaces__msg__Altimeter__Sequence * array) -{ - if (array) { - airsim_interfaces__msg__Altimeter__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.h deleted file mode 100644 index ee2241a671..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__functions.h +++ /dev/null @@ -1,124 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/msg/detail/altimeter__struct.h" - -/// Initialize msg/Altimeter message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__msg__Altimeter - * )) before or use - * airsim_interfaces__msg__Altimeter__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__Altimeter__init(airsim_interfaces__msg__Altimeter * msg); - -/// Finalize msg/Altimeter message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__Altimeter__fini(airsim_interfaces__msg__Altimeter * msg); - -/// Create msg/Altimeter message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__msg__Altimeter__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__Altimeter * -airsim_interfaces__msg__Altimeter__create(); - -/// Destroy msg/Altimeter message. -/** - * It calls - * airsim_interfaces__msg__Altimeter__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__Altimeter__destroy(airsim_interfaces__msg__Altimeter * msg); - - -/// Initialize array of msg/Altimeter messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__msg__Altimeter__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__Altimeter__Sequence__init(airsim_interfaces__msg__Altimeter__Sequence * array, size_t size); - -/// Finalize array of msg/Altimeter messages. -/** - * It calls - * airsim_interfaces__msg__Altimeter__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__Altimeter__Sequence__fini(airsim_interfaces__msg__Altimeter__Sequence * array); - -/// Create array of msg/Altimeter messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__msg__Altimeter__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__Altimeter__Sequence * -airsim_interfaces__msg__Altimeter__Sequence__create(size_t size); - -/// Destroy array of msg/Altimeter messages. -/** - * It calls - * airsim_interfaces__msg__Altimeter__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__Altimeter__Sequence__destroy(airsim_interfaces__msg__Altimeter__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index 053d3473f6..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,36 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__msg__Altimeter( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__msg__Altimeter( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, Altimeter)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index 215807b47b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/msg/detail/altimeter__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::msg::Altimeter & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::msg::Altimeter & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::msg::Altimeter & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_Altimeter( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace msg - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, Altimeter)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_c.h deleted file mode 100644 index b520e908e9..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,26 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, Altimeter)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 0637d050f7..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, Altimeter)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.h deleted file mode 100644 index 4a829afed6..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.h +++ /dev/null @@ -1,47 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.h" - -// Struct defined in msg/Altimeter in the package airsim_interfaces. -typedef struct airsim_interfaces__msg__Altimeter -{ - std_msgs__msg__Header header; - float altitude; - float pressure; - float qnh; -} airsim_interfaces__msg__Altimeter; - -// Struct for a sequence of airsim_interfaces__msg__Altimeter. -typedef struct airsim_interfaces__msg__Altimeter__Sequence -{ - airsim_interfaces__msg__Altimeter * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__msg__Altimeter__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.hpp deleted file mode 100644 index d236f3072f..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__struct.hpp +++ /dev/null @@ -1,175 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.hpp" - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__msg__Altimeter __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__msg__Altimeter __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace msg -{ - -// message struct -template -struct Altimeter_ -{ - using Type = Altimeter_; - - explicit Altimeter_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_init) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->altitude = 0.0f; - this->pressure = 0.0f; - this->qnh = 0.0f; - } - } - - explicit Altimeter_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_alloc, _init) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->altitude = 0.0f; - this->pressure = 0.0f; - this->qnh = 0.0f; - } - } - - // field types and members - using _header_type = - std_msgs::msg::Header_; - _header_type header; - using _altitude_type = - float; - _altitude_type altitude; - using _pressure_type = - float; - _pressure_type pressure; - using _qnh_type = - float; - _qnh_type qnh; - - // setters for named parameter idiom - Type & set__header( - const std_msgs::msg::Header_ & _arg) - { - this->header = _arg; - return *this; - } - Type & set__altitude( - const float & _arg) - { - this->altitude = _arg; - return *this; - } - Type & set__pressure( - const float & _arg) - { - this->pressure = _arg; - return *this; - } - Type & set__qnh( - const float & _arg) - { - this->qnh = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::msg::Altimeter_ *; - using ConstRawPtr = - const airsim_interfaces::msg::Altimeter_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__msg__Altimeter - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__msg__Altimeter - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const Altimeter_ & other) const - { - if (this->header != other.header) { - return false; - } - if (this->altitude != other.altitude) { - return false; - } - if (this->pressure != other.pressure) { - return false; - } - if (this->qnh != other.qnh) { - return false; - } - return true; - } - bool operator!=(const Altimeter_ & other) const - { - return !this->operator==(other); - } -}; // struct Altimeter_ - -// alias to use template instance with default allocator -using Altimeter = - airsim_interfaces::msg::Altimeter_>; - -// constant definitions - -} // namespace msg - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__traits.hpp deleted file mode 100644 index 3eac5e878c..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__traits.hpp +++ /dev/null @@ -1,46 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TRAITS_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TRAITS_HPP_ - -#include "airsim_interfaces/msg/detail/altimeter__struct.hpp" -#include -#include -#include - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__traits.hpp" - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::msg::Altimeter"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/msg/Altimeter"; -} - -template<> -struct has_fixed_size - : std::integral_constant::value> {}; - -template<> -struct has_bounded_size - : std::integral_constant::value> {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.c deleted file mode 100644 index a8127ee971..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.c +++ /dev/null @@ -1,134 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/msg/detail/altimeter__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/msg/detail/altimeter__functions.h" -#include "airsim_interfaces/msg/detail/altimeter__struct.h" - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/header.h" -// Member `header` -#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void Altimeter__rosidl_typesupport_introspection_c__Altimeter_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__msg__Altimeter__init(message_memory); -} - -void Altimeter__rosidl_typesupport_introspection_c__Altimeter_fini_function(void * message_memory) -{ - airsim_interfaces__msg__Altimeter__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_member_array[4] = { - { - "header", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__Altimeter, header), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "altitude", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__Altimeter, altitude), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "pressure", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__Altimeter, pressure), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "qnh", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__Altimeter, qnh), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_members = { - "airsim_interfaces__msg", // message namespace - "Altimeter", // message name - 4, // number of fields - sizeof(airsim_interfaces__msg__Altimeter), - Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_member_array, // message members - Altimeter__rosidl_typesupport_introspection_c__Altimeter_init_function, // function to initialize message memory (memory has to be allocated) - Altimeter__rosidl_typesupport_introspection_c__Altimeter_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_type_support_handle = { - 0, - &Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, Altimeter)() { - Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_member_array[0].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); - if (!Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_type_support_handle.typesupport_identifier) { - Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &Altimeter__rosidl_typesupport_introspection_c__Altimeter_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.cpp deleted file mode 100644 index de04343948..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.cpp +++ /dev/null @@ -1,152 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/detail/altimeter__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void Altimeter_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::msg::Altimeter(_init); -} - -void Altimeter_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~Altimeter(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember Altimeter_message_member_array[4] = { - { - "header", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::Altimeter, header), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "altitude", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::Altimeter, altitude), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "pressure", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::Altimeter, pressure), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "qnh", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::Altimeter, qnh), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers Altimeter_message_members = { - "airsim_interfaces::msg", // message namespace - "Altimeter", // message name - 4, // number of fields - sizeof(airsim_interfaces::msg::Altimeter), - Altimeter_message_member_array, // message members - Altimeter_init_function, // function to initialize message memory (memory has to be allocated) - Altimeter_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t Altimeter_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &Altimeter_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace msg - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::Altimeter_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, Altimeter)() { - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::Altimeter_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.h deleted file mode 100644 index 08b09360e9..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/altimeter__type_support.h +++ /dev/null @@ -1,33 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - msg, - Altimeter -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ALTIMETER__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__builder.hpp deleted file mode 100644 index 08d6d87ba8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__builder.hpp +++ /dev/null @@ -1,167 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__BUILDER_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__BUILDER_HPP_ - -#include "airsim_interfaces/msg/detail/car_controls__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace builder -{ - -class Init_CarControls_gear_immediate -{ -public: - explicit Init_CarControls_gear_immediate(::airsim_interfaces::msg::CarControls & msg) - : msg_(msg) - {} - ::airsim_interfaces::msg::CarControls gear_immediate(::airsim_interfaces::msg::CarControls::_gear_immediate_type arg) - { - msg_.gear_immediate = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::msg::CarControls msg_; -}; - -class Init_CarControls_manual_gear -{ -public: - explicit Init_CarControls_manual_gear(::airsim_interfaces::msg::CarControls & msg) - : msg_(msg) - {} - Init_CarControls_gear_immediate manual_gear(::airsim_interfaces::msg::CarControls::_manual_gear_type arg) - { - msg_.manual_gear = std::move(arg); - return Init_CarControls_gear_immediate(msg_); - } - -private: - ::airsim_interfaces::msg::CarControls msg_; -}; - -class Init_CarControls_manual -{ -public: - explicit Init_CarControls_manual(::airsim_interfaces::msg::CarControls & msg) - : msg_(msg) - {} - Init_CarControls_manual_gear manual(::airsim_interfaces::msg::CarControls::_manual_type arg) - { - msg_.manual = std::move(arg); - return Init_CarControls_manual_gear(msg_); - } - -private: - ::airsim_interfaces::msg::CarControls msg_; -}; - -class Init_CarControls_handbrake -{ -public: - explicit Init_CarControls_handbrake(::airsim_interfaces::msg::CarControls & msg) - : msg_(msg) - {} - Init_CarControls_manual handbrake(::airsim_interfaces::msg::CarControls::_handbrake_type arg) - { - msg_.handbrake = std::move(arg); - return Init_CarControls_manual(msg_); - } - -private: - ::airsim_interfaces::msg::CarControls msg_; -}; - -class Init_CarControls_steering -{ -public: - explicit Init_CarControls_steering(::airsim_interfaces::msg::CarControls & msg) - : msg_(msg) - {} - Init_CarControls_handbrake steering(::airsim_interfaces::msg::CarControls::_steering_type arg) - { - msg_.steering = std::move(arg); - return Init_CarControls_handbrake(msg_); - } - -private: - ::airsim_interfaces::msg::CarControls msg_; -}; - -class Init_CarControls_brake -{ -public: - explicit Init_CarControls_brake(::airsim_interfaces::msg::CarControls & msg) - : msg_(msg) - {} - Init_CarControls_steering brake(::airsim_interfaces::msg::CarControls::_brake_type arg) - { - msg_.brake = std::move(arg); - return Init_CarControls_steering(msg_); - } - -private: - ::airsim_interfaces::msg::CarControls msg_; -}; - -class Init_CarControls_throttle -{ -public: - explicit Init_CarControls_throttle(::airsim_interfaces::msg::CarControls & msg) - : msg_(msg) - {} - Init_CarControls_brake throttle(::airsim_interfaces::msg::CarControls::_throttle_type arg) - { - msg_.throttle = std::move(arg); - return Init_CarControls_brake(msg_); - } - -private: - ::airsim_interfaces::msg::CarControls msg_; -}; - -class Init_CarControls_header -{ -public: - Init_CarControls_header() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_CarControls_throttle header(::airsim_interfaces::msg::CarControls::_header_type arg) - { - msg_.header = std::move(arg); - return Init_CarControls_throttle(msg_); - } - -private: - ::airsim_interfaces::msg::CarControls msg_; -}; - -} // namespace builder - -} // namespace msg - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::msg::CarControls>() -{ - return airsim_interfaces::msg::builder::Init_CarControls_header(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.c deleted file mode 100644 index a17d01de21..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.c +++ /dev/null @@ -1,161 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/msg/detail/car_controls__functions.h" - -#include -#include -#include -#include - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/detail/header__functions.h" - -bool -airsim_interfaces__msg__CarControls__init(airsim_interfaces__msg__CarControls * msg) -{ - if (!msg) { - return false; - } - // header - if (!std_msgs__msg__Header__init(&msg->header)) { - airsim_interfaces__msg__CarControls__fini(msg); - return false; - } - // throttle - // brake - // steering - // handbrake - // manual - // manual_gear - // gear_immediate - return true; -} - -void -airsim_interfaces__msg__CarControls__fini(airsim_interfaces__msg__CarControls * msg) -{ - if (!msg) { - return; - } - // header - std_msgs__msg__Header__fini(&msg->header); - // throttle - // brake - // steering - // handbrake - // manual - // manual_gear - // gear_immediate -} - -airsim_interfaces__msg__CarControls * -airsim_interfaces__msg__CarControls__create() -{ - airsim_interfaces__msg__CarControls * msg = (airsim_interfaces__msg__CarControls *)malloc(sizeof(airsim_interfaces__msg__CarControls)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__msg__CarControls)); - bool success = airsim_interfaces__msg__CarControls__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__msg__CarControls__destroy(airsim_interfaces__msg__CarControls * msg) -{ - if (msg) { - airsim_interfaces__msg__CarControls__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__msg__CarControls__Sequence__init(airsim_interfaces__msg__CarControls__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__msg__CarControls * data = NULL; - if (size) { - data = (airsim_interfaces__msg__CarControls *)calloc(size, sizeof(airsim_interfaces__msg__CarControls)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__msg__CarControls__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__msg__CarControls__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__msg__CarControls__Sequence__fini(airsim_interfaces__msg__CarControls__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__msg__CarControls__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__msg__CarControls__Sequence * -airsim_interfaces__msg__CarControls__Sequence__create(size_t size) -{ - airsim_interfaces__msg__CarControls__Sequence * array = (airsim_interfaces__msg__CarControls__Sequence *)malloc(sizeof(airsim_interfaces__msg__CarControls__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__msg__CarControls__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__msg__CarControls__Sequence__destroy(airsim_interfaces__msg__CarControls__Sequence * array) -{ - if (array) { - airsim_interfaces__msg__CarControls__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.h deleted file mode 100644 index baa152af4b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__functions.h +++ /dev/null @@ -1,124 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/msg/detail/car_controls__struct.h" - -/// Initialize msg/CarControls message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__msg__CarControls - * )) before or use - * airsim_interfaces__msg__CarControls__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__CarControls__init(airsim_interfaces__msg__CarControls * msg); - -/// Finalize msg/CarControls message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__CarControls__fini(airsim_interfaces__msg__CarControls * msg); - -/// Create msg/CarControls message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__msg__CarControls__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__CarControls * -airsim_interfaces__msg__CarControls__create(); - -/// Destroy msg/CarControls message. -/** - * It calls - * airsim_interfaces__msg__CarControls__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__CarControls__destroy(airsim_interfaces__msg__CarControls * msg); - - -/// Initialize array of msg/CarControls messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__msg__CarControls__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__CarControls__Sequence__init(airsim_interfaces__msg__CarControls__Sequence * array, size_t size); - -/// Finalize array of msg/CarControls messages. -/** - * It calls - * airsim_interfaces__msg__CarControls__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__CarControls__Sequence__fini(airsim_interfaces__msg__CarControls__Sequence * array); - -/// Create array of msg/CarControls messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__msg__CarControls__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__CarControls__Sequence * -airsim_interfaces__msg__CarControls__Sequence__create(size_t size); - -/// Destroy array of msg/CarControls messages. -/** - * It calls - * airsim_interfaces__msg__CarControls__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__CarControls__Sequence__destroy(airsim_interfaces__msg__CarControls__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index eef3a8ee36..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,36 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__msg__CarControls( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__msg__CarControls( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, CarControls)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index b733b3914a..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/msg/detail/car_controls__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::msg::CarControls & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::msg::CarControls & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::msg::CarControls & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_CarControls( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace msg - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, CarControls)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 4276b8a410..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,26 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, CarControls)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 358c11824a..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, CarControls)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.h deleted file mode 100644 index 7d211bff72..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.h +++ /dev/null @@ -1,51 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.h" - -// Struct defined in msg/CarControls in the package airsim_interfaces. -typedef struct airsim_interfaces__msg__CarControls -{ - std_msgs__msg__Header header; - float throttle; - float brake; - float steering; - bool handbrake; - bool manual; - int8_t manual_gear; - bool gear_immediate; -} airsim_interfaces__msg__CarControls; - -// Struct for a sequence of airsim_interfaces__msg__CarControls. -typedef struct airsim_interfaces__msg__CarControls__Sequence -{ - airsim_interfaces__msg__CarControls * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__msg__CarControls__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.hpp deleted file mode 100644 index 4074c5a836..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__struct.hpp +++ /dev/null @@ -1,231 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.hpp" - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__msg__CarControls __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__msg__CarControls __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace msg -{ - -// message struct -template -struct CarControls_ -{ - using Type = CarControls_; - - explicit CarControls_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_init) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->throttle = 0.0f; - this->brake = 0.0f; - this->steering = 0.0f; - this->handbrake = false; - this->manual = false; - this->manual_gear = 0; - this->gear_immediate = false; - } - } - - explicit CarControls_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_alloc, _init) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->throttle = 0.0f; - this->brake = 0.0f; - this->steering = 0.0f; - this->handbrake = false; - this->manual = false; - this->manual_gear = 0; - this->gear_immediate = false; - } - } - - // field types and members - using _header_type = - std_msgs::msg::Header_; - _header_type header; - using _throttle_type = - float; - _throttle_type throttle; - using _brake_type = - float; - _brake_type brake; - using _steering_type = - float; - _steering_type steering; - using _handbrake_type = - bool; - _handbrake_type handbrake; - using _manual_type = - bool; - _manual_type manual; - using _manual_gear_type = - int8_t; - _manual_gear_type manual_gear; - using _gear_immediate_type = - bool; - _gear_immediate_type gear_immediate; - - // setters for named parameter idiom - Type & set__header( - const std_msgs::msg::Header_ & _arg) - { - this->header = _arg; - return *this; - } - Type & set__throttle( - const float & _arg) - { - this->throttle = _arg; - return *this; - } - Type & set__brake( - const float & _arg) - { - this->brake = _arg; - return *this; - } - Type & set__steering( - const float & _arg) - { - this->steering = _arg; - return *this; - } - Type & set__handbrake( - const bool & _arg) - { - this->handbrake = _arg; - return *this; - } - Type & set__manual( - const bool & _arg) - { - this->manual = _arg; - return *this; - } - Type & set__manual_gear( - const int8_t & _arg) - { - this->manual_gear = _arg; - return *this; - } - Type & set__gear_immediate( - const bool & _arg) - { - this->gear_immediate = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::msg::CarControls_ *; - using ConstRawPtr = - const airsim_interfaces::msg::CarControls_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__msg__CarControls - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__msg__CarControls - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const CarControls_ & other) const - { - if (this->header != other.header) { - return false; - } - if (this->throttle != other.throttle) { - return false; - } - if (this->brake != other.brake) { - return false; - } - if (this->steering != other.steering) { - return false; - } - if (this->handbrake != other.handbrake) { - return false; - } - if (this->manual != other.manual) { - return false; - } - if (this->manual_gear != other.manual_gear) { - return false; - } - if (this->gear_immediate != other.gear_immediate) { - return false; - } - return true; - } - bool operator!=(const CarControls_ & other) const - { - return !this->operator==(other); - } -}; // struct CarControls_ - -// alias to use template instance with default allocator -using CarControls = - airsim_interfaces::msg::CarControls_>; - -// constant definitions - -} // namespace msg - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__traits.hpp deleted file mode 100644 index 22a45f15b6..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__traits.hpp +++ /dev/null @@ -1,46 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TRAITS_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TRAITS_HPP_ - -#include "airsim_interfaces/msg/detail/car_controls__struct.hpp" -#include -#include -#include - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__traits.hpp" - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::msg::CarControls"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/msg/CarControls"; -} - -template<> -struct has_fixed_size - : std::integral_constant::value> {}; - -template<> -struct has_bounded_size - : std::integral_constant::value> {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.c deleted file mode 100644 index 7cf9a0389a..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.c +++ /dev/null @@ -1,194 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/msg/detail/car_controls__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/msg/detail/car_controls__functions.h" -#include "airsim_interfaces/msg/detail/car_controls__struct.h" - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/header.h" -// Member `header` -#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void CarControls__rosidl_typesupport_introspection_c__CarControls_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__msg__CarControls__init(message_memory); -} - -void CarControls__rosidl_typesupport_introspection_c__CarControls_fini_function(void * message_memory) -{ - airsim_interfaces__msg__CarControls__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember CarControls__rosidl_typesupport_introspection_c__CarControls_message_member_array[8] = { - { - "header", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarControls, header), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "throttle", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarControls, throttle), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "brake", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarControls, brake), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "steering", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarControls, steering), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "handbrake", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarControls, handbrake), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "manual", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarControls, manual), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "manual_gear", // name - rosidl_typesupport_introspection_c__ROS_TYPE_INT8, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarControls, manual_gear), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "gear_immediate", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarControls, gear_immediate), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers CarControls__rosidl_typesupport_introspection_c__CarControls_message_members = { - "airsim_interfaces__msg", // message namespace - "CarControls", // message name - 8, // number of fields - sizeof(airsim_interfaces__msg__CarControls), - CarControls__rosidl_typesupport_introspection_c__CarControls_message_member_array, // message members - CarControls__rosidl_typesupport_introspection_c__CarControls_init_function, // function to initialize message memory (memory has to be allocated) - CarControls__rosidl_typesupport_introspection_c__CarControls_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t CarControls__rosidl_typesupport_introspection_c__CarControls_message_type_support_handle = { - 0, - &CarControls__rosidl_typesupport_introspection_c__CarControls_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, CarControls)() { - CarControls__rosidl_typesupport_introspection_c__CarControls_message_member_array[0].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); - if (!CarControls__rosidl_typesupport_introspection_c__CarControls_message_type_support_handle.typesupport_identifier) { - CarControls__rosidl_typesupport_introspection_c__CarControls_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &CarControls__rosidl_typesupport_introspection_c__CarControls_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.cpp deleted file mode 100644 index 60a3c37ede..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.cpp +++ /dev/null @@ -1,212 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/detail/car_controls__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void CarControls_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::msg::CarControls(_init); -} - -void CarControls_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~CarControls(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember CarControls_message_member_array[8] = { - { - "header", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarControls, header), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "throttle", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarControls, throttle), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "brake", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarControls, brake), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "steering", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarControls, steering), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "handbrake", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarControls, handbrake), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "manual", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarControls, manual), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "manual_gear", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT8, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarControls, manual_gear), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "gear_immediate", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarControls, gear_immediate), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers CarControls_message_members = { - "airsim_interfaces::msg", // message namespace - "CarControls", // message name - 8, // number of fields - sizeof(airsim_interfaces::msg::CarControls), - CarControls_message_member_array, // message members - CarControls_init_function, // function to initialize message memory (memory has to be allocated) - CarControls_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t CarControls_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &CarControls_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace msg - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::CarControls_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, CarControls)() { - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::CarControls_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.h deleted file mode 100644 index 5a51c57b44..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_controls__type_support.h +++ /dev/null @@ -1,33 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - msg, - CarControls -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_CONTROLS__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__builder.hpp deleted file mode 100644 index fb1c1c514f..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__builder.hpp +++ /dev/null @@ -1,167 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__BUILDER_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__BUILDER_HPP_ - -#include "airsim_interfaces/msg/detail/car_state__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace builder -{ - -class Init_CarState_handbrake -{ -public: - explicit Init_CarState_handbrake(::airsim_interfaces::msg::CarState & msg) - : msg_(msg) - {} - ::airsim_interfaces::msg::CarState handbrake(::airsim_interfaces::msg::CarState::_handbrake_type arg) - { - msg_.handbrake = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::msg::CarState msg_; -}; - -class Init_CarState_maxrpm -{ -public: - explicit Init_CarState_maxrpm(::airsim_interfaces::msg::CarState & msg) - : msg_(msg) - {} - Init_CarState_handbrake maxrpm(::airsim_interfaces::msg::CarState::_maxrpm_type arg) - { - msg_.maxrpm = std::move(arg); - return Init_CarState_handbrake(msg_); - } - -private: - ::airsim_interfaces::msg::CarState msg_; -}; - -class Init_CarState_rpm -{ -public: - explicit Init_CarState_rpm(::airsim_interfaces::msg::CarState & msg) - : msg_(msg) - {} - Init_CarState_maxrpm rpm(::airsim_interfaces::msg::CarState::_rpm_type arg) - { - msg_.rpm = std::move(arg); - return Init_CarState_maxrpm(msg_); - } - -private: - ::airsim_interfaces::msg::CarState msg_; -}; - -class Init_CarState_gear -{ -public: - explicit Init_CarState_gear(::airsim_interfaces::msg::CarState & msg) - : msg_(msg) - {} - Init_CarState_rpm gear(::airsim_interfaces::msg::CarState::_gear_type arg) - { - msg_.gear = std::move(arg); - return Init_CarState_rpm(msg_); - } - -private: - ::airsim_interfaces::msg::CarState msg_; -}; - -class Init_CarState_speed -{ -public: - explicit Init_CarState_speed(::airsim_interfaces::msg::CarState & msg) - : msg_(msg) - {} - Init_CarState_gear speed(::airsim_interfaces::msg::CarState::_speed_type arg) - { - msg_.speed = std::move(arg); - return Init_CarState_gear(msg_); - } - -private: - ::airsim_interfaces::msg::CarState msg_; -}; - -class Init_CarState_twist -{ -public: - explicit Init_CarState_twist(::airsim_interfaces::msg::CarState & msg) - : msg_(msg) - {} - Init_CarState_speed twist(::airsim_interfaces::msg::CarState::_twist_type arg) - { - msg_.twist = std::move(arg); - return Init_CarState_speed(msg_); - } - -private: - ::airsim_interfaces::msg::CarState msg_; -}; - -class Init_CarState_pose -{ -public: - explicit Init_CarState_pose(::airsim_interfaces::msg::CarState & msg) - : msg_(msg) - {} - Init_CarState_twist pose(::airsim_interfaces::msg::CarState::_pose_type arg) - { - msg_.pose = std::move(arg); - return Init_CarState_twist(msg_); - } - -private: - ::airsim_interfaces::msg::CarState msg_; -}; - -class Init_CarState_header -{ -public: - Init_CarState_header() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_CarState_pose header(::airsim_interfaces::msg::CarState::_header_type arg) - { - msg_.header = std::move(arg); - return Init_CarState_pose(msg_); - } - -private: - ::airsim_interfaces::msg::CarState msg_; -}; - -} // namespace builder - -} // namespace msg - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::msg::CarState>() -{ - return airsim_interfaces::msg::builder::Init_CarState_header(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.c deleted file mode 100644 index 01a4df9e1e..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.c +++ /dev/null @@ -1,175 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/msg/detail/car_state__functions.h" - -#include -#include -#include -#include - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/detail/header__functions.h" -// Member `pose` -#include "geometry_msgs/msg/detail/pose_with_covariance__functions.h" -// Member `twist` -#include "geometry_msgs/msg/detail/twist_with_covariance__functions.h" - -bool -airsim_interfaces__msg__CarState__init(airsim_interfaces__msg__CarState * msg) -{ - if (!msg) { - return false; - } - // header - if (!std_msgs__msg__Header__init(&msg->header)) { - airsim_interfaces__msg__CarState__fini(msg); - return false; - } - // pose - if (!geometry_msgs__msg__PoseWithCovariance__init(&msg->pose)) { - airsim_interfaces__msg__CarState__fini(msg); - return false; - } - // twist - if (!geometry_msgs__msg__TwistWithCovariance__init(&msg->twist)) { - airsim_interfaces__msg__CarState__fini(msg); - return false; - } - // speed - // gear - // rpm - // maxrpm - // handbrake - return true; -} - -void -airsim_interfaces__msg__CarState__fini(airsim_interfaces__msg__CarState * msg) -{ - if (!msg) { - return; - } - // header - std_msgs__msg__Header__fini(&msg->header); - // pose - geometry_msgs__msg__PoseWithCovariance__fini(&msg->pose); - // twist - geometry_msgs__msg__TwistWithCovariance__fini(&msg->twist); - // speed - // gear - // rpm - // maxrpm - // handbrake -} - -airsim_interfaces__msg__CarState * -airsim_interfaces__msg__CarState__create() -{ - airsim_interfaces__msg__CarState * msg = (airsim_interfaces__msg__CarState *)malloc(sizeof(airsim_interfaces__msg__CarState)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__msg__CarState)); - bool success = airsim_interfaces__msg__CarState__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__msg__CarState__destroy(airsim_interfaces__msg__CarState * msg) -{ - if (msg) { - airsim_interfaces__msg__CarState__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__msg__CarState__Sequence__init(airsim_interfaces__msg__CarState__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__msg__CarState * data = NULL; - if (size) { - data = (airsim_interfaces__msg__CarState *)calloc(size, sizeof(airsim_interfaces__msg__CarState)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__msg__CarState__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__msg__CarState__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__msg__CarState__Sequence__fini(airsim_interfaces__msg__CarState__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__msg__CarState__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__msg__CarState__Sequence * -airsim_interfaces__msg__CarState__Sequence__create(size_t size) -{ - airsim_interfaces__msg__CarState__Sequence * array = (airsim_interfaces__msg__CarState__Sequence *)malloc(sizeof(airsim_interfaces__msg__CarState__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__msg__CarState__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__msg__CarState__Sequence__destroy(airsim_interfaces__msg__CarState__Sequence * array) -{ - if (array) { - airsim_interfaces__msg__CarState__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.h deleted file mode 100644 index d35b087df3..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__functions.h +++ /dev/null @@ -1,124 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/msg/detail/car_state__struct.h" - -/// Initialize msg/CarState message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__msg__CarState - * )) before or use - * airsim_interfaces__msg__CarState__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__CarState__init(airsim_interfaces__msg__CarState * msg); - -/// Finalize msg/CarState message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__CarState__fini(airsim_interfaces__msg__CarState * msg); - -/// Create msg/CarState message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__msg__CarState__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__CarState * -airsim_interfaces__msg__CarState__create(); - -/// Destroy msg/CarState message. -/** - * It calls - * airsim_interfaces__msg__CarState__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__CarState__destroy(airsim_interfaces__msg__CarState * msg); - - -/// Initialize array of msg/CarState messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__msg__CarState__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__CarState__Sequence__init(airsim_interfaces__msg__CarState__Sequence * array, size_t size); - -/// Finalize array of msg/CarState messages. -/** - * It calls - * airsim_interfaces__msg__CarState__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__CarState__Sequence__fini(airsim_interfaces__msg__CarState__Sequence * array); - -/// Create array of msg/CarState messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__msg__CarState__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__CarState__Sequence * -airsim_interfaces__msg__CarState__Sequence__create(size_t size); - -/// Destroy array of msg/CarState messages. -/** - * It calls - * airsim_interfaces__msg__CarState__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__CarState__Sequence__destroy(airsim_interfaces__msg__CarState__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index b422141b43..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,36 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__msg__CarState( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__msg__CarState( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, CarState)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index 64e22ffa32..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/msg/detail/car_state__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::msg::CarState & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::msg::CarState & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::msg::CarState & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_CarState( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace msg - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, CarState)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 7f1617ebc5..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,26 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, CarState)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index fff3f8a4e5..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, CarState)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.h deleted file mode 100644 index a265f3b35b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.h +++ /dev/null @@ -1,55 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.h" -// Member 'pose' -#include "geometry_msgs/msg/detail/pose_with_covariance__struct.h" -// Member 'twist' -#include "geometry_msgs/msg/detail/twist_with_covariance__struct.h" - -// Struct defined in msg/CarState in the package airsim_interfaces. -typedef struct airsim_interfaces__msg__CarState -{ - std_msgs__msg__Header header; - geometry_msgs__msg__PoseWithCovariance pose; - geometry_msgs__msg__TwistWithCovariance twist; - float speed; - int8_t gear; - float rpm; - float maxrpm; - bool handbrake; -} airsim_interfaces__msg__CarState; - -// Struct for a sequence of airsim_interfaces__msg__CarState. -typedef struct airsim_interfaces__msg__CarState__Sequence -{ - airsim_interfaces__msg__CarState * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__msg__CarState__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.hpp deleted file mode 100644 index b798ecf56c..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__struct.hpp +++ /dev/null @@ -1,235 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.hpp" -// Member 'pose' -#include "geometry_msgs/msg/detail/pose_with_covariance__struct.hpp" -// Member 'twist' -#include "geometry_msgs/msg/detail/twist_with_covariance__struct.hpp" - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__msg__CarState __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__msg__CarState __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace msg -{ - -// message struct -template -struct CarState_ -{ - using Type = CarState_; - - explicit CarState_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_init), - pose(_init), - twist(_init) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->speed = 0.0f; - this->gear = 0; - this->rpm = 0.0f; - this->maxrpm = 0.0f; - this->handbrake = false; - } - } - - explicit CarState_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_alloc, _init), - pose(_alloc, _init), - twist(_alloc, _init) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->speed = 0.0f; - this->gear = 0; - this->rpm = 0.0f; - this->maxrpm = 0.0f; - this->handbrake = false; - } - } - - // field types and members - using _header_type = - std_msgs::msg::Header_; - _header_type header; - using _pose_type = - geometry_msgs::msg::PoseWithCovariance_; - _pose_type pose; - using _twist_type = - geometry_msgs::msg::TwistWithCovariance_; - _twist_type twist; - using _speed_type = - float; - _speed_type speed; - using _gear_type = - int8_t; - _gear_type gear; - using _rpm_type = - float; - _rpm_type rpm; - using _maxrpm_type = - float; - _maxrpm_type maxrpm; - using _handbrake_type = - bool; - _handbrake_type handbrake; - - // setters for named parameter idiom - Type & set__header( - const std_msgs::msg::Header_ & _arg) - { - this->header = _arg; - return *this; - } - Type & set__pose( - const geometry_msgs::msg::PoseWithCovariance_ & _arg) - { - this->pose = _arg; - return *this; - } - Type & set__twist( - const geometry_msgs::msg::TwistWithCovariance_ & _arg) - { - this->twist = _arg; - return *this; - } - Type & set__speed( - const float & _arg) - { - this->speed = _arg; - return *this; - } - Type & set__gear( - const int8_t & _arg) - { - this->gear = _arg; - return *this; - } - Type & set__rpm( - const float & _arg) - { - this->rpm = _arg; - return *this; - } - Type & set__maxrpm( - const float & _arg) - { - this->maxrpm = _arg; - return *this; - } - Type & set__handbrake( - const bool & _arg) - { - this->handbrake = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::msg::CarState_ *; - using ConstRawPtr = - const airsim_interfaces::msg::CarState_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__msg__CarState - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__msg__CarState - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const CarState_ & other) const - { - if (this->header != other.header) { - return false; - } - if (this->pose != other.pose) { - return false; - } - if (this->twist != other.twist) { - return false; - } - if (this->speed != other.speed) { - return false; - } - if (this->gear != other.gear) { - return false; - } - if (this->rpm != other.rpm) { - return false; - } - if (this->maxrpm != other.maxrpm) { - return false; - } - if (this->handbrake != other.handbrake) { - return false; - } - return true; - } - bool operator!=(const CarState_ & other) const - { - return !this->operator==(other); - } -}; // struct CarState_ - -// alias to use template instance with default allocator -using CarState = - airsim_interfaces::msg::CarState_>; - -// constant definitions - -} // namespace msg - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__traits.hpp deleted file mode 100644 index 086a41b7db..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__traits.hpp +++ /dev/null @@ -1,50 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TRAITS_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TRAITS_HPP_ - -#include "airsim_interfaces/msg/detail/car_state__struct.hpp" -#include -#include -#include - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__traits.hpp" -// Member 'pose' -#include "geometry_msgs/msg/detail/pose_with_covariance__traits.hpp" -// Member 'twist' -#include "geometry_msgs/msg/detail/twist_with_covariance__traits.hpp" - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::msg::CarState"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/msg/CarState"; -} - -template<> -struct has_fixed_size - : std::integral_constant::value && has_fixed_size::value && has_fixed_size::value> {}; - -template<> -struct has_bounded_size - : std::integral_constant::value && has_bounded_size::value && has_bounded_size::value> {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.c deleted file mode 100644 index 32f51fed86..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.c +++ /dev/null @@ -1,206 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/msg/detail/car_state__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/msg/detail/car_state__functions.h" -#include "airsim_interfaces/msg/detail/car_state__struct.h" - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/header.h" -// Member `header` -#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" -// Member `pose` -#include "geometry_msgs/msg/pose_with_covariance.h" -// Member `pose` -#include "geometry_msgs/msg/detail/pose_with_covariance__rosidl_typesupport_introspection_c.h" -// Member `twist` -#include "geometry_msgs/msg/twist_with_covariance.h" -// Member `twist` -#include "geometry_msgs/msg/detail/twist_with_covariance__rosidl_typesupport_introspection_c.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void CarState__rosidl_typesupport_introspection_c__CarState_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__msg__CarState__init(message_memory); -} - -void CarState__rosidl_typesupport_introspection_c__CarState_fini_function(void * message_memory) -{ - airsim_interfaces__msg__CarState__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember CarState__rosidl_typesupport_introspection_c__CarState_message_member_array[8] = { - { - "header", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarState, header), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "pose", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarState, pose), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "twist", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarState, twist), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "speed", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarState, speed), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "gear", // name - rosidl_typesupport_introspection_c__ROS_TYPE_INT8, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarState, gear), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "rpm", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarState, rpm), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "maxrpm", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarState, maxrpm), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "handbrake", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__CarState, handbrake), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers CarState__rosidl_typesupport_introspection_c__CarState_message_members = { - "airsim_interfaces__msg", // message namespace - "CarState", // message name - 8, // number of fields - sizeof(airsim_interfaces__msg__CarState), - CarState__rosidl_typesupport_introspection_c__CarState_message_member_array, // message members - CarState__rosidl_typesupport_introspection_c__CarState_init_function, // function to initialize message memory (memory has to be allocated) - CarState__rosidl_typesupport_introspection_c__CarState_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t CarState__rosidl_typesupport_introspection_c__CarState_message_type_support_handle = { - 0, - &CarState__rosidl_typesupport_introspection_c__CarState_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, CarState)() { - CarState__rosidl_typesupport_introspection_c__CarState_message_member_array[0].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); - CarState__rosidl_typesupport_introspection_c__CarState_message_member_array[1].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, PoseWithCovariance)(); - CarState__rosidl_typesupport_introspection_c__CarState_message_member_array[2].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, TwistWithCovariance)(); - if (!CarState__rosidl_typesupport_introspection_c__CarState_message_type_support_handle.typesupport_identifier) { - CarState__rosidl_typesupport_introspection_c__CarState_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &CarState__rosidl_typesupport_introspection_c__CarState_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.cpp deleted file mode 100644 index 8586881935..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.cpp +++ /dev/null @@ -1,212 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/detail/car_state__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void CarState_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::msg::CarState(_init); -} - -void CarState_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~CarState(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember CarState_message_member_array[8] = { - { - "header", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarState, header), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "pose", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarState, pose), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "twist", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarState, twist), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "speed", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarState, speed), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "gear", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT8, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarState, gear), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "rpm", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarState, rpm), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "maxrpm", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarState, maxrpm), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "handbrake", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::CarState, handbrake), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers CarState_message_members = { - "airsim_interfaces::msg", // message namespace - "CarState", // message name - 8, // number of fields - sizeof(airsim_interfaces::msg::CarState), - CarState_message_member_array, // message members - CarState_init_function, // function to initialize message memory (memory has to be allocated) - CarState_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t CarState_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &CarState_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace msg - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::CarState_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, CarState)() { - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::CarState_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.h deleted file mode 100644 index 5ffd3d91d8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/car_state__type_support.h +++ /dev/null @@ -1,33 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - msg, - CarState -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__CAR_STATE__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__builder.hpp deleted file mode 100644 index c852ff606d..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__builder.hpp +++ /dev/null @@ -1,151 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__BUILDER_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__BUILDER_HPP_ - -#include "airsim_interfaces/msg/detail/environment__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace builder -{ - -class Init_Environment_air_density -{ -public: - explicit Init_Environment_air_density(::airsim_interfaces::msg::Environment & msg) - : msg_(msg) - {} - ::airsim_interfaces::msg::Environment air_density(::airsim_interfaces::msg::Environment::_air_density_type arg) - { - msg_.air_density = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::msg::Environment msg_; -}; - -class Init_Environment_temperature -{ -public: - explicit Init_Environment_temperature(::airsim_interfaces::msg::Environment & msg) - : msg_(msg) - {} - Init_Environment_air_density temperature(::airsim_interfaces::msg::Environment::_temperature_type arg) - { - msg_.temperature = std::move(arg); - return Init_Environment_air_density(msg_); - } - -private: - ::airsim_interfaces::msg::Environment msg_; -}; - -class Init_Environment_air_pressure -{ -public: - explicit Init_Environment_air_pressure(::airsim_interfaces::msg::Environment & msg) - : msg_(msg) - {} - Init_Environment_temperature air_pressure(::airsim_interfaces::msg::Environment::_air_pressure_type arg) - { - msg_.air_pressure = std::move(arg); - return Init_Environment_temperature(msg_); - } - -private: - ::airsim_interfaces::msg::Environment msg_; -}; - -class Init_Environment_gravity -{ -public: - explicit Init_Environment_gravity(::airsim_interfaces::msg::Environment & msg) - : msg_(msg) - {} - Init_Environment_air_pressure gravity(::airsim_interfaces::msg::Environment::_gravity_type arg) - { - msg_.gravity = std::move(arg); - return Init_Environment_air_pressure(msg_); - } - -private: - ::airsim_interfaces::msg::Environment msg_; -}; - -class Init_Environment_geo_point -{ -public: - explicit Init_Environment_geo_point(::airsim_interfaces::msg::Environment & msg) - : msg_(msg) - {} - Init_Environment_gravity geo_point(::airsim_interfaces::msg::Environment::_geo_point_type arg) - { - msg_.geo_point = std::move(arg); - return Init_Environment_gravity(msg_); - } - -private: - ::airsim_interfaces::msg::Environment msg_; -}; - -class Init_Environment_position -{ -public: - explicit Init_Environment_position(::airsim_interfaces::msg::Environment & msg) - : msg_(msg) - {} - Init_Environment_geo_point position(::airsim_interfaces::msg::Environment::_position_type arg) - { - msg_.position = std::move(arg); - return Init_Environment_geo_point(msg_); - } - -private: - ::airsim_interfaces::msg::Environment msg_; -}; - -class Init_Environment_header -{ -public: - Init_Environment_header() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_Environment_position header(::airsim_interfaces::msg::Environment::_header_type arg) - { - msg_.header = std::move(arg); - return Init_Environment_position(msg_); - } - -private: - ::airsim_interfaces::msg::Environment msg_; -}; - -} // namespace builder - -} // namespace msg - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::msg::Environment>() -{ - return airsim_interfaces::msg::builder::Init_Environment_header(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.c deleted file mode 100644 index aa9bc469c7..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.c +++ /dev/null @@ -1,179 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/msg/detail/environment__functions.h" - -#include -#include -#include -#include - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/detail/header__functions.h" -// Member `position` -// Member `gravity` -#include "geometry_msgs/msg/detail/vector3__functions.h" -// Member `geo_point` -#include "geographic_msgs/msg/detail/geo_point__functions.h" - -bool -airsim_interfaces__msg__Environment__init(airsim_interfaces__msg__Environment * msg) -{ - if (!msg) { - return false; - } - // header - if (!std_msgs__msg__Header__init(&msg->header)) { - airsim_interfaces__msg__Environment__fini(msg); - return false; - } - // position - if (!geometry_msgs__msg__Vector3__init(&msg->position)) { - airsim_interfaces__msg__Environment__fini(msg); - return false; - } - // geo_point - if (!geographic_msgs__msg__GeoPoint__init(&msg->geo_point)) { - airsim_interfaces__msg__Environment__fini(msg); - return false; - } - // gravity - if (!geometry_msgs__msg__Vector3__init(&msg->gravity)) { - airsim_interfaces__msg__Environment__fini(msg); - return false; - } - // air_pressure - // temperature - // air_density - return true; -} - -void -airsim_interfaces__msg__Environment__fini(airsim_interfaces__msg__Environment * msg) -{ - if (!msg) { - return; - } - // header - std_msgs__msg__Header__fini(&msg->header); - // position - geometry_msgs__msg__Vector3__fini(&msg->position); - // geo_point - geographic_msgs__msg__GeoPoint__fini(&msg->geo_point); - // gravity - geometry_msgs__msg__Vector3__fini(&msg->gravity); - // air_pressure - // temperature - // air_density -} - -airsim_interfaces__msg__Environment * -airsim_interfaces__msg__Environment__create() -{ - airsim_interfaces__msg__Environment * msg = (airsim_interfaces__msg__Environment *)malloc(sizeof(airsim_interfaces__msg__Environment)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__msg__Environment)); - bool success = airsim_interfaces__msg__Environment__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__msg__Environment__destroy(airsim_interfaces__msg__Environment * msg) -{ - if (msg) { - airsim_interfaces__msg__Environment__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__msg__Environment__Sequence__init(airsim_interfaces__msg__Environment__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__msg__Environment * data = NULL; - if (size) { - data = (airsim_interfaces__msg__Environment *)calloc(size, sizeof(airsim_interfaces__msg__Environment)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__msg__Environment__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__msg__Environment__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__msg__Environment__Sequence__fini(airsim_interfaces__msg__Environment__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__msg__Environment__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__msg__Environment__Sequence * -airsim_interfaces__msg__Environment__Sequence__create(size_t size) -{ - airsim_interfaces__msg__Environment__Sequence * array = (airsim_interfaces__msg__Environment__Sequence *)malloc(sizeof(airsim_interfaces__msg__Environment__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__msg__Environment__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__msg__Environment__Sequence__destroy(airsim_interfaces__msg__Environment__Sequence * array) -{ - if (array) { - airsim_interfaces__msg__Environment__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.h deleted file mode 100644 index cb32316f84..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__functions.h +++ /dev/null @@ -1,124 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/msg/detail/environment__struct.h" - -/// Initialize msg/Environment message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__msg__Environment - * )) before or use - * airsim_interfaces__msg__Environment__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__Environment__init(airsim_interfaces__msg__Environment * msg); - -/// Finalize msg/Environment message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__Environment__fini(airsim_interfaces__msg__Environment * msg); - -/// Create msg/Environment message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__msg__Environment__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__Environment * -airsim_interfaces__msg__Environment__create(); - -/// Destroy msg/Environment message. -/** - * It calls - * airsim_interfaces__msg__Environment__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__Environment__destroy(airsim_interfaces__msg__Environment * msg); - - -/// Initialize array of msg/Environment messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__msg__Environment__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__Environment__Sequence__init(airsim_interfaces__msg__Environment__Sequence * array, size_t size); - -/// Finalize array of msg/Environment messages. -/** - * It calls - * airsim_interfaces__msg__Environment__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__Environment__Sequence__fini(airsim_interfaces__msg__Environment__Sequence * array); - -/// Create array of msg/Environment messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__msg__Environment__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__Environment__Sequence * -airsim_interfaces__msg__Environment__Sequence__create(size_t size); - -/// Destroy array of msg/Environment messages. -/** - * It calls - * airsim_interfaces__msg__Environment__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__Environment__Sequence__destroy(airsim_interfaces__msg__Environment__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index 65cd666436..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,36 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__msg__Environment( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__msg__Environment( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, Environment)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index 2c542d3f98..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/msg/detail/environment__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::msg::Environment & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::msg::Environment & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::msg::Environment & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_Environment( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace msg - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, Environment)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 206536edff..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,26 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, Environment)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 08a9f05fe1..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, Environment)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.h deleted file mode 100644 index 9b06e89fde..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.h +++ /dev/null @@ -1,55 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.h" -// Member 'position' -// Member 'gravity' -#include "geometry_msgs/msg/detail/vector3__struct.h" -// Member 'geo_point' -#include "geographic_msgs/msg/detail/geo_point__struct.h" - -// Struct defined in msg/Environment in the package airsim_interfaces. -typedef struct airsim_interfaces__msg__Environment -{ - std_msgs__msg__Header header; - geometry_msgs__msg__Vector3 position; - geographic_msgs__msg__GeoPoint geo_point; - geometry_msgs__msg__Vector3 gravity; - float air_pressure; - float temperature; - float air_density; -} airsim_interfaces__msg__Environment; - -// Struct for a sequence of airsim_interfaces__msg__Environment. -typedef struct airsim_interfaces__msg__Environment__Sequence -{ - airsim_interfaces__msg__Environment * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__msg__Environment__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.hpp deleted file mode 100644 index 98d5aa3c9c..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__struct.hpp +++ /dev/null @@ -1,222 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.hpp" -// Member 'position' -// Member 'gravity' -#include "geometry_msgs/msg/detail/vector3__struct.hpp" -// Member 'geo_point' -#include "geographic_msgs/msg/detail/geo_point__struct.hpp" - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__msg__Environment __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__msg__Environment __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace msg -{ - -// message struct -template -struct Environment_ -{ - using Type = Environment_; - - explicit Environment_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_init), - position(_init), - geo_point(_init), - gravity(_init) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->air_pressure = 0.0f; - this->temperature = 0.0f; - this->air_density = 0.0f; - } - } - - explicit Environment_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_alloc, _init), - position(_alloc, _init), - geo_point(_alloc, _init), - gravity(_alloc, _init) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->air_pressure = 0.0f; - this->temperature = 0.0f; - this->air_density = 0.0f; - } - } - - // field types and members - using _header_type = - std_msgs::msg::Header_; - _header_type header; - using _position_type = - geometry_msgs::msg::Vector3_; - _position_type position; - using _geo_point_type = - geographic_msgs::msg::GeoPoint_; - _geo_point_type geo_point; - using _gravity_type = - geometry_msgs::msg::Vector3_; - _gravity_type gravity; - using _air_pressure_type = - float; - _air_pressure_type air_pressure; - using _temperature_type = - float; - _temperature_type temperature; - using _air_density_type = - float; - _air_density_type air_density; - - // setters for named parameter idiom - Type & set__header( - const std_msgs::msg::Header_ & _arg) - { - this->header = _arg; - return *this; - } - Type & set__position( - const geometry_msgs::msg::Vector3_ & _arg) - { - this->position = _arg; - return *this; - } - Type & set__geo_point( - const geographic_msgs::msg::GeoPoint_ & _arg) - { - this->geo_point = _arg; - return *this; - } - Type & set__gravity( - const geometry_msgs::msg::Vector3_ & _arg) - { - this->gravity = _arg; - return *this; - } - Type & set__air_pressure( - const float & _arg) - { - this->air_pressure = _arg; - return *this; - } - Type & set__temperature( - const float & _arg) - { - this->temperature = _arg; - return *this; - } - Type & set__air_density( - const float & _arg) - { - this->air_density = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::msg::Environment_ *; - using ConstRawPtr = - const airsim_interfaces::msg::Environment_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__msg__Environment - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__msg__Environment - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const Environment_ & other) const - { - if (this->header != other.header) { - return false; - } - if (this->position != other.position) { - return false; - } - if (this->geo_point != other.geo_point) { - return false; - } - if (this->gravity != other.gravity) { - return false; - } - if (this->air_pressure != other.air_pressure) { - return false; - } - if (this->temperature != other.temperature) { - return false; - } - if (this->air_density != other.air_density) { - return false; - } - return true; - } - bool operator!=(const Environment_ & other) const - { - return !this->operator==(other); - } -}; // struct Environment_ - -// alias to use template instance with default allocator -using Environment = - airsim_interfaces::msg::Environment_>; - -// constant definitions - -} // namespace msg - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__traits.hpp deleted file mode 100644 index 0283661997..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__traits.hpp +++ /dev/null @@ -1,51 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TRAITS_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TRAITS_HPP_ - -#include "airsim_interfaces/msg/detail/environment__struct.hpp" -#include -#include -#include - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__traits.hpp" -// Member 'position' -// Member 'gravity' -#include "geometry_msgs/msg/detail/vector3__traits.hpp" -// Member 'geo_point' -#include "geographic_msgs/msg/detail/geo_point__traits.hpp" - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::msg::Environment"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/msg/Environment"; -} - -template<> -struct has_fixed_size - : std::integral_constant::value && has_fixed_size::value && has_fixed_size::value> {}; - -template<> -struct has_bounded_size - : std::integral_constant::value && has_bounded_size::value && has_bounded_size::value> {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.c deleted file mode 100644 index b331f83c45..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.c +++ /dev/null @@ -1,195 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/msg/detail/environment__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/msg/detail/environment__functions.h" -#include "airsim_interfaces/msg/detail/environment__struct.h" - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/header.h" -// Member `header` -#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" -// Member `position` -// Member `gravity` -#include "geometry_msgs/msg/vector3.h" -// Member `position` -// Member `gravity` -#include "geometry_msgs/msg/detail/vector3__rosidl_typesupport_introspection_c.h" -// Member `geo_point` -#include "geographic_msgs/msg/geo_point.h" -// Member `geo_point` -#include "geographic_msgs/msg/detail/geo_point__rosidl_typesupport_introspection_c.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void Environment__rosidl_typesupport_introspection_c__Environment_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__msg__Environment__init(message_memory); -} - -void Environment__rosidl_typesupport_introspection_c__Environment_fini_function(void * message_memory) -{ - airsim_interfaces__msg__Environment__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember Environment__rosidl_typesupport_introspection_c__Environment_message_member_array[7] = { - { - "header", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__Environment, header), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "position", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__Environment, position), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "geo_point", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__Environment, geo_point), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "gravity", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__Environment, gravity), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "air_pressure", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__Environment, air_pressure), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "temperature", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__Environment, temperature), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "air_density", // name - rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__Environment, air_density), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers Environment__rosidl_typesupport_introspection_c__Environment_message_members = { - "airsim_interfaces__msg", // message namespace - "Environment", // message name - 7, // number of fields - sizeof(airsim_interfaces__msg__Environment), - Environment__rosidl_typesupport_introspection_c__Environment_message_member_array, // message members - Environment__rosidl_typesupport_introspection_c__Environment_init_function, // function to initialize message memory (memory has to be allocated) - Environment__rosidl_typesupport_introspection_c__Environment_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t Environment__rosidl_typesupport_introspection_c__Environment_message_type_support_handle = { - 0, - &Environment__rosidl_typesupport_introspection_c__Environment_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, Environment)() { - Environment__rosidl_typesupport_introspection_c__Environment_message_member_array[0].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); - Environment__rosidl_typesupport_introspection_c__Environment_message_member_array[1].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, Vector3)(); - Environment__rosidl_typesupport_introspection_c__Environment_message_member_array[2].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geographic_msgs, msg, GeoPoint)(); - Environment__rosidl_typesupport_introspection_c__Environment_message_member_array[3].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, Vector3)(); - if (!Environment__rosidl_typesupport_introspection_c__Environment_message_type_support_handle.typesupport_identifier) { - Environment__rosidl_typesupport_introspection_c__Environment_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &Environment__rosidl_typesupport_introspection_c__Environment_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.cpp deleted file mode 100644 index 9668d7a0cd..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.cpp +++ /dev/null @@ -1,197 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/detail/environment__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void Environment_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::msg::Environment(_init); -} - -void Environment_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~Environment(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember Environment_message_member_array[7] = { - { - "header", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::Environment, header), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "position", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::Environment, position), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "geo_point", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::Environment, geo_point), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "gravity", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::Environment, gravity), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "air_pressure", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::Environment, air_pressure), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "temperature", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::Environment, temperature), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "air_density", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::Environment, air_density), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers Environment_message_members = { - "airsim_interfaces::msg", // message namespace - "Environment", // message name - 7, // number of fields - sizeof(airsim_interfaces::msg::Environment), - Environment_message_member_array, // message members - Environment_init_function, // function to initialize message memory (memory has to be allocated) - Environment_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t Environment_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &Environment_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace msg - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::Environment_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, Environment)() { - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::Environment_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.h deleted file mode 100644 index 5578b9ab45..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/environment__type_support.h +++ /dev/null @@ -1,33 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - msg, - Environment -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__ENVIRONMENT__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__builder.hpp deleted file mode 100644 index 87e262c620..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__builder.hpp +++ /dev/null @@ -1,135 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__BUILDER_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__BUILDER_HPP_ - -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace builder -{ - -class Init_GimbalAngleEulerCmd_yaw -{ -public: - explicit Init_GimbalAngleEulerCmd_yaw(::airsim_interfaces::msg::GimbalAngleEulerCmd & msg) - : msg_(msg) - {} - ::airsim_interfaces::msg::GimbalAngleEulerCmd yaw(::airsim_interfaces::msg::GimbalAngleEulerCmd::_yaw_type arg) - { - msg_.yaw = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; -}; - -class Init_GimbalAngleEulerCmd_pitch -{ -public: - explicit Init_GimbalAngleEulerCmd_pitch(::airsim_interfaces::msg::GimbalAngleEulerCmd & msg) - : msg_(msg) - {} - Init_GimbalAngleEulerCmd_yaw pitch(::airsim_interfaces::msg::GimbalAngleEulerCmd::_pitch_type arg) - { - msg_.pitch = std::move(arg); - return Init_GimbalAngleEulerCmd_yaw(msg_); - } - -private: - ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; -}; - -class Init_GimbalAngleEulerCmd_roll -{ -public: - explicit Init_GimbalAngleEulerCmd_roll(::airsim_interfaces::msg::GimbalAngleEulerCmd & msg) - : msg_(msg) - {} - Init_GimbalAngleEulerCmd_pitch roll(::airsim_interfaces::msg::GimbalAngleEulerCmd::_roll_type arg) - { - msg_.roll = std::move(arg); - return Init_GimbalAngleEulerCmd_pitch(msg_); - } - -private: - ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; -}; - -class Init_GimbalAngleEulerCmd_vehicle_name -{ -public: - explicit Init_GimbalAngleEulerCmd_vehicle_name(::airsim_interfaces::msg::GimbalAngleEulerCmd & msg) - : msg_(msg) - {} - Init_GimbalAngleEulerCmd_roll vehicle_name(::airsim_interfaces::msg::GimbalAngleEulerCmd::_vehicle_name_type arg) - { - msg_.vehicle_name = std::move(arg); - return Init_GimbalAngleEulerCmd_roll(msg_); - } - -private: - ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; -}; - -class Init_GimbalAngleEulerCmd_camera_name -{ -public: - explicit Init_GimbalAngleEulerCmd_camera_name(::airsim_interfaces::msg::GimbalAngleEulerCmd & msg) - : msg_(msg) - {} - Init_GimbalAngleEulerCmd_vehicle_name camera_name(::airsim_interfaces::msg::GimbalAngleEulerCmd::_camera_name_type arg) - { - msg_.camera_name = std::move(arg); - return Init_GimbalAngleEulerCmd_vehicle_name(msg_); - } - -private: - ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; -}; - -class Init_GimbalAngleEulerCmd_header -{ -public: - Init_GimbalAngleEulerCmd_header() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_GimbalAngleEulerCmd_camera_name header(::airsim_interfaces::msg::GimbalAngleEulerCmd::_header_type arg) - { - msg_.header = std::move(arg); - return Init_GimbalAngleEulerCmd_camera_name(msg_); - } - -private: - ::airsim_interfaces::msg::GimbalAngleEulerCmd msg_; -}; - -} // namespace builder - -} // namespace msg - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::msg::GimbalAngleEulerCmd>() -{ - return airsim_interfaces::msg::builder::Init_GimbalAngleEulerCmd_header(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.c deleted file mode 100644 index 202efb0d81..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.c +++ /dev/null @@ -1,170 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h" - -#include -#include -#include -#include - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/detail/header__functions.h" -// Member `camera_name` -// Member `vehicle_name` -#include "rosidl_runtime_c/string_functions.h" - -bool -airsim_interfaces__msg__GimbalAngleEulerCmd__init(airsim_interfaces__msg__GimbalAngleEulerCmd * msg) -{ - if (!msg) { - return false; - } - // header - if (!std_msgs__msg__Header__init(&msg->header)) { - airsim_interfaces__msg__GimbalAngleEulerCmd__fini(msg); - return false; - } - // camera_name - if (!rosidl_runtime_c__String__init(&msg->camera_name)) { - airsim_interfaces__msg__GimbalAngleEulerCmd__fini(msg); - return false; - } - // vehicle_name - if (!rosidl_runtime_c__String__init(&msg->vehicle_name)) { - airsim_interfaces__msg__GimbalAngleEulerCmd__fini(msg); - return false; - } - // roll - // pitch - // yaw - return true; -} - -void -airsim_interfaces__msg__GimbalAngleEulerCmd__fini(airsim_interfaces__msg__GimbalAngleEulerCmd * msg) -{ - if (!msg) { - return; - } - // header - std_msgs__msg__Header__fini(&msg->header); - // camera_name - rosidl_runtime_c__String__fini(&msg->camera_name); - // vehicle_name - rosidl_runtime_c__String__fini(&msg->vehicle_name); - // roll - // pitch - // yaw -} - -airsim_interfaces__msg__GimbalAngleEulerCmd * -airsim_interfaces__msg__GimbalAngleEulerCmd__create() -{ - airsim_interfaces__msg__GimbalAngleEulerCmd * msg = (airsim_interfaces__msg__GimbalAngleEulerCmd *)malloc(sizeof(airsim_interfaces__msg__GimbalAngleEulerCmd)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__msg__GimbalAngleEulerCmd)); - bool success = airsim_interfaces__msg__GimbalAngleEulerCmd__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__msg__GimbalAngleEulerCmd__destroy(airsim_interfaces__msg__GimbalAngleEulerCmd * msg) -{ - if (msg) { - airsim_interfaces__msg__GimbalAngleEulerCmd__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__init(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__msg__GimbalAngleEulerCmd * data = NULL; - if (size) { - data = (airsim_interfaces__msg__GimbalAngleEulerCmd *)calloc(size, sizeof(airsim_interfaces__msg__GimbalAngleEulerCmd)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__msg__GimbalAngleEulerCmd__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__msg__GimbalAngleEulerCmd__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__fini(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__msg__GimbalAngleEulerCmd__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * -airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__create(size_t size) -{ - airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array = (airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence *)malloc(sizeof(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__destroy(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array) -{ - if (array) { - airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h deleted file mode 100644 index b9db7340d5..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h +++ /dev/null @@ -1,124 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h" - -/// Initialize msg/GimbalAngleEulerCmd message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__msg__GimbalAngleEulerCmd - * )) before or use - * airsim_interfaces__msg__GimbalAngleEulerCmd__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__GimbalAngleEulerCmd__init(airsim_interfaces__msg__GimbalAngleEulerCmd * msg); - -/// Finalize msg/GimbalAngleEulerCmd message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GimbalAngleEulerCmd__fini(airsim_interfaces__msg__GimbalAngleEulerCmd * msg); - -/// Create msg/GimbalAngleEulerCmd message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__msg__GimbalAngleEulerCmd__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__GimbalAngleEulerCmd * -airsim_interfaces__msg__GimbalAngleEulerCmd__create(); - -/// Destroy msg/GimbalAngleEulerCmd message. -/** - * It calls - * airsim_interfaces__msg__GimbalAngleEulerCmd__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GimbalAngleEulerCmd__destroy(airsim_interfaces__msg__GimbalAngleEulerCmd * msg); - - -/// Initialize array of msg/GimbalAngleEulerCmd messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__msg__GimbalAngleEulerCmd__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__init(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array, size_t size); - -/// Finalize array of msg/GimbalAngleEulerCmd messages. -/** - * It calls - * airsim_interfaces__msg__GimbalAngleEulerCmd__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__fini(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array); - -/// Create array of msg/GimbalAngleEulerCmd messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * -airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__create(size_t size); - -/// Destroy array of msg/GimbalAngleEulerCmd messages. -/** - * It calls - * airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence__destroy(airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index d9be60a41f..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,36 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__msg__GimbalAngleEulerCmd( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__msg__GimbalAngleEulerCmd( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, GimbalAngleEulerCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index 3a66f9a9c1..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::msg::GimbalAngleEulerCmd & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::msg::GimbalAngleEulerCmd & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::msg::GimbalAngleEulerCmd & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_GimbalAngleEulerCmd( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace msg - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, GimbalAngleEulerCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 6c593b2053..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,26 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GimbalAngleEulerCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 8e93ba2931..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GimbalAngleEulerCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h deleted file mode 100644 index 3f6d925fc0..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h +++ /dev/null @@ -1,52 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.h" -// Member 'camera_name' -// Member 'vehicle_name' -#include "rosidl_runtime_c/string.h" - -// Struct defined in msg/GimbalAngleEulerCmd in the package airsim_interfaces. -typedef struct airsim_interfaces__msg__GimbalAngleEulerCmd -{ - std_msgs__msg__Header header; - rosidl_runtime_c__String camera_name; - rosidl_runtime_c__String vehicle_name; - double roll; - double pitch; - double yaw; -} airsim_interfaces__msg__GimbalAngleEulerCmd; - -// Struct for a sequence of airsim_interfaces__msg__GimbalAngleEulerCmd. -typedef struct airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence -{ - airsim_interfaces__msg__GimbalAngleEulerCmd * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__msg__GimbalAngleEulerCmd__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp deleted file mode 100644 index 538f51415e..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp +++ /dev/null @@ -1,205 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.hpp" - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__msg__GimbalAngleEulerCmd __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__msg__GimbalAngleEulerCmd __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace msg -{ - -// message struct -template -struct GimbalAngleEulerCmd_ -{ - using Type = GimbalAngleEulerCmd_; - - explicit GimbalAngleEulerCmd_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_init) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->camera_name = ""; - this->vehicle_name = ""; - this->roll = 0.0; - this->pitch = 0.0; - this->yaw = 0.0; - } - } - - explicit GimbalAngleEulerCmd_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_alloc, _init), - camera_name(_alloc), - vehicle_name(_alloc) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->camera_name = ""; - this->vehicle_name = ""; - this->roll = 0.0; - this->pitch = 0.0; - this->yaw = 0.0; - } - } - - // field types and members - using _header_type = - std_msgs::msg::Header_; - _header_type header; - using _camera_name_type = - std::basic_string, typename ContainerAllocator::template rebind::other>; - _camera_name_type camera_name; - using _vehicle_name_type = - std::basic_string, typename ContainerAllocator::template rebind::other>; - _vehicle_name_type vehicle_name; - using _roll_type = - double; - _roll_type roll; - using _pitch_type = - double; - _pitch_type pitch; - using _yaw_type = - double; - _yaw_type yaw; - - // setters for named parameter idiom - Type & set__header( - const std_msgs::msg::Header_ & _arg) - { - this->header = _arg; - return *this; - } - Type & set__camera_name( - const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) - { - this->camera_name = _arg; - return *this; - } - Type & set__vehicle_name( - const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) - { - this->vehicle_name = _arg; - return *this; - } - Type & set__roll( - const double & _arg) - { - this->roll = _arg; - return *this; - } - Type & set__pitch( - const double & _arg) - { - this->pitch = _arg; - return *this; - } - Type & set__yaw( - const double & _arg) - { - this->yaw = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::msg::GimbalAngleEulerCmd_ *; - using ConstRawPtr = - const airsim_interfaces::msg::GimbalAngleEulerCmd_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__msg__GimbalAngleEulerCmd - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__msg__GimbalAngleEulerCmd - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const GimbalAngleEulerCmd_ & other) const - { - if (this->header != other.header) { - return false; - } - if (this->camera_name != other.camera_name) { - return false; - } - if (this->vehicle_name != other.vehicle_name) { - return false; - } - if (this->roll != other.roll) { - return false; - } - if (this->pitch != other.pitch) { - return false; - } - if (this->yaw != other.yaw) { - return false; - } - return true; - } - bool operator!=(const GimbalAngleEulerCmd_ & other) const - { - return !this->operator==(other); - } -}; // struct GimbalAngleEulerCmd_ - -// alias to use template instance with default allocator -using GimbalAngleEulerCmd = - airsim_interfaces::msg::GimbalAngleEulerCmd_>; - -// constant definitions - -} // namespace msg - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__traits.hpp deleted file mode 100644 index 05bc2f3f01..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__traits.hpp +++ /dev/null @@ -1,46 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TRAITS_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TRAITS_HPP_ - -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp" -#include -#include -#include - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__traits.hpp" - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::msg::GimbalAngleEulerCmd"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/msg/GimbalAngleEulerCmd"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.c deleted file mode 100644 index 5f918a4021..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.c +++ /dev/null @@ -1,167 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h" - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/header.h" -// Member `header` -#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" -// Member `camera_name` -// Member `vehicle_name` -#include "rosidl_runtime_c/string_functions.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__msg__GimbalAngleEulerCmd__init(message_memory); -} - -void GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_fini_function(void * message_memory) -{ - airsim_interfaces__msg__GimbalAngleEulerCmd__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_member_array[6] = { - { - "header", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, header), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "camera_name", // name - rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, camera_name), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "vehicle_name", // name - rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, vehicle_name), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "roll", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, roll), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "pitch", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, pitch), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "yaw", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GimbalAngleEulerCmd, yaw), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_members = { - "airsim_interfaces__msg", // message namespace - "GimbalAngleEulerCmd", // message name - 6, // number of fields - sizeof(airsim_interfaces__msg__GimbalAngleEulerCmd), - GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_member_array, // message members - GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_init_function, // function to initialize message memory (memory has to be allocated) - GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_type_support_handle = { - 0, - &GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GimbalAngleEulerCmd)() { - GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_member_array[0].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); - if (!GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_type_support_handle.typesupport_identifier) { - GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &GimbalAngleEulerCmd__rosidl_typesupport_introspection_c__GimbalAngleEulerCmd_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.cpp deleted file mode 100644 index ca0158d037..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.cpp +++ /dev/null @@ -1,182 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void GimbalAngleEulerCmd_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::msg::GimbalAngleEulerCmd(_init); -} - -void GimbalAngleEulerCmd_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~GimbalAngleEulerCmd(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember GimbalAngleEulerCmd_message_member_array[6] = { - { - "header", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, header), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "camera_name", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, camera_name), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "vehicle_name", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, vehicle_name), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "roll", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, roll), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "pitch", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, pitch), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "yaw", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GimbalAngleEulerCmd, yaw), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers GimbalAngleEulerCmd_message_members = { - "airsim_interfaces::msg", // message namespace - "GimbalAngleEulerCmd", // message name - 6, // number of fields - sizeof(airsim_interfaces::msg::GimbalAngleEulerCmd), - GimbalAngleEulerCmd_message_member_array, // message members - GimbalAngleEulerCmd_init_function, // function to initialize message memory (memory has to be allocated) - GimbalAngleEulerCmd_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t GimbalAngleEulerCmd_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &GimbalAngleEulerCmd_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace msg - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GimbalAngleEulerCmd_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GimbalAngleEulerCmd)() { - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GimbalAngleEulerCmd_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.h deleted file mode 100644 index c26c41135e..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.h +++ /dev/null @@ -1,33 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - msg, - GimbalAngleEulerCmd -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_EULER_CMD__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__builder.hpp deleted file mode 100644 index 1756292f86..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__builder.hpp +++ /dev/null @@ -1,103 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__BUILDER_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__BUILDER_HPP_ - -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace builder -{ - -class Init_GimbalAngleQuatCmd_orientation -{ -public: - explicit Init_GimbalAngleQuatCmd_orientation(::airsim_interfaces::msg::GimbalAngleQuatCmd & msg) - : msg_(msg) - {} - ::airsim_interfaces::msg::GimbalAngleQuatCmd orientation(::airsim_interfaces::msg::GimbalAngleQuatCmd::_orientation_type arg) - { - msg_.orientation = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::msg::GimbalAngleQuatCmd msg_; -}; - -class Init_GimbalAngleQuatCmd_vehicle_name -{ -public: - explicit Init_GimbalAngleQuatCmd_vehicle_name(::airsim_interfaces::msg::GimbalAngleQuatCmd & msg) - : msg_(msg) - {} - Init_GimbalAngleQuatCmd_orientation vehicle_name(::airsim_interfaces::msg::GimbalAngleQuatCmd::_vehicle_name_type arg) - { - msg_.vehicle_name = std::move(arg); - return Init_GimbalAngleQuatCmd_orientation(msg_); - } - -private: - ::airsim_interfaces::msg::GimbalAngleQuatCmd msg_; -}; - -class Init_GimbalAngleQuatCmd_camera_name -{ -public: - explicit Init_GimbalAngleQuatCmd_camera_name(::airsim_interfaces::msg::GimbalAngleQuatCmd & msg) - : msg_(msg) - {} - Init_GimbalAngleQuatCmd_vehicle_name camera_name(::airsim_interfaces::msg::GimbalAngleQuatCmd::_camera_name_type arg) - { - msg_.camera_name = std::move(arg); - return Init_GimbalAngleQuatCmd_vehicle_name(msg_); - } - -private: - ::airsim_interfaces::msg::GimbalAngleQuatCmd msg_; -}; - -class Init_GimbalAngleQuatCmd_header -{ -public: - Init_GimbalAngleQuatCmd_header() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_GimbalAngleQuatCmd_camera_name header(::airsim_interfaces::msg::GimbalAngleQuatCmd::_header_type arg) - { - msg_.header = std::move(arg); - return Init_GimbalAngleQuatCmd_camera_name(msg_); - } - -private: - ::airsim_interfaces::msg::GimbalAngleQuatCmd msg_; -}; - -} // namespace builder - -} // namespace msg - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::msg::GimbalAngleQuatCmd>() -{ - return airsim_interfaces::msg::builder::Init_GimbalAngleQuatCmd_header(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.c deleted file mode 100644 index 2a2b7d19c8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.c +++ /dev/null @@ -1,173 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h" - -#include -#include -#include -#include - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/detail/header__functions.h" -// Member `camera_name` -// Member `vehicle_name` -#include "rosidl_runtime_c/string_functions.h" -// Member `orientation` -#include "geometry_msgs/msg/detail/quaternion__functions.h" - -bool -airsim_interfaces__msg__GimbalAngleQuatCmd__init(airsim_interfaces__msg__GimbalAngleQuatCmd * msg) -{ - if (!msg) { - return false; - } - // header - if (!std_msgs__msg__Header__init(&msg->header)) { - airsim_interfaces__msg__GimbalAngleQuatCmd__fini(msg); - return false; - } - // camera_name - if (!rosidl_runtime_c__String__init(&msg->camera_name)) { - airsim_interfaces__msg__GimbalAngleQuatCmd__fini(msg); - return false; - } - // vehicle_name - if (!rosidl_runtime_c__String__init(&msg->vehicle_name)) { - airsim_interfaces__msg__GimbalAngleQuatCmd__fini(msg); - return false; - } - // orientation - if (!geometry_msgs__msg__Quaternion__init(&msg->orientation)) { - airsim_interfaces__msg__GimbalAngleQuatCmd__fini(msg); - return false; - } - return true; -} - -void -airsim_interfaces__msg__GimbalAngleQuatCmd__fini(airsim_interfaces__msg__GimbalAngleQuatCmd * msg) -{ - if (!msg) { - return; - } - // header - std_msgs__msg__Header__fini(&msg->header); - // camera_name - rosidl_runtime_c__String__fini(&msg->camera_name); - // vehicle_name - rosidl_runtime_c__String__fini(&msg->vehicle_name); - // orientation - geometry_msgs__msg__Quaternion__fini(&msg->orientation); -} - -airsim_interfaces__msg__GimbalAngleQuatCmd * -airsim_interfaces__msg__GimbalAngleQuatCmd__create() -{ - airsim_interfaces__msg__GimbalAngleQuatCmd * msg = (airsim_interfaces__msg__GimbalAngleQuatCmd *)malloc(sizeof(airsim_interfaces__msg__GimbalAngleQuatCmd)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__msg__GimbalAngleQuatCmd)); - bool success = airsim_interfaces__msg__GimbalAngleQuatCmd__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__msg__GimbalAngleQuatCmd__destroy(airsim_interfaces__msg__GimbalAngleQuatCmd * msg) -{ - if (msg) { - airsim_interfaces__msg__GimbalAngleQuatCmd__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__init(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__msg__GimbalAngleQuatCmd * data = NULL; - if (size) { - data = (airsim_interfaces__msg__GimbalAngleQuatCmd *)calloc(size, sizeof(airsim_interfaces__msg__GimbalAngleQuatCmd)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__msg__GimbalAngleQuatCmd__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__msg__GimbalAngleQuatCmd__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__fini(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__msg__GimbalAngleQuatCmd__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * -airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__create(size_t size) -{ - airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array = (airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence *)malloc(sizeof(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__destroy(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array) -{ - if (array) { - airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h deleted file mode 100644 index 950ac71c3e..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h +++ /dev/null @@ -1,124 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h" - -/// Initialize msg/GimbalAngleQuatCmd message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__msg__GimbalAngleQuatCmd - * )) before or use - * airsim_interfaces__msg__GimbalAngleQuatCmd__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__GimbalAngleQuatCmd__init(airsim_interfaces__msg__GimbalAngleQuatCmd * msg); - -/// Finalize msg/GimbalAngleQuatCmd message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GimbalAngleQuatCmd__fini(airsim_interfaces__msg__GimbalAngleQuatCmd * msg); - -/// Create msg/GimbalAngleQuatCmd message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__msg__GimbalAngleQuatCmd__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__GimbalAngleQuatCmd * -airsim_interfaces__msg__GimbalAngleQuatCmd__create(); - -/// Destroy msg/GimbalAngleQuatCmd message. -/** - * It calls - * airsim_interfaces__msg__GimbalAngleQuatCmd__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GimbalAngleQuatCmd__destroy(airsim_interfaces__msg__GimbalAngleQuatCmd * msg); - - -/// Initialize array of msg/GimbalAngleQuatCmd messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__msg__GimbalAngleQuatCmd__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__init(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array, size_t size); - -/// Finalize array of msg/GimbalAngleQuatCmd messages. -/** - * It calls - * airsim_interfaces__msg__GimbalAngleQuatCmd__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__fini(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array); - -/// Create array of msg/GimbalAngleQuatCmd messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * -airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__create(size_t size); - -/// Destroy array of msg/GimbalAngleQuatCmd messages. -/** - * It calls - * airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence__destroy(airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index 99c77d7a8f..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,36 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__msg__GimbalAngleQuatCmd( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__msg__GimbalAngleQuatCmd( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, GimbalAngleQuatCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index 32339208da..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::msg::GimbalAngleQuatCmd & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::msg::GimbalAngleQuatCmd & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::msg::GimbalAngleQuatCmd & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_GimbalAngleQuatCmd( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace msg - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, GimbalAngleQuatCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 88b20e0a4f..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,26 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GimbalAngleQuatCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 80c6ad620a..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GimbalAngleQuatCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h deleted file mode 100644 index b04526a5a1..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h +++ /dev/null @@ -1,52 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.h" -// Member 'camera_name' -// Member 'vehicle_name' -#include "rosidl_runtime_c/string.h" -// Member 'orientation' -#include "geometry_msgs/msg/detail/quaternion__struct.h" - -// Struct defined in msg/GimbalAngleQuatCmd in the package airsim_interfaces. -typedef struct airsim_interfaces__msg__GimbalAngleQuatCmd -{ - std_msgs__msg__Header header; - rosidl_runtime_c__String camera_name; - rosidl_runtime_c__String vehicle_name; - geometry_msgs__msg__Quaternion orientation; -} airsim_interfaces__msg__GimbalAngleQuatCmd; - -// Struct for a sequence of airsim_interfaces__msg__GimbalAngleQuatCmd. -typedef struct airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence -{ - airsim_interfaces__msg__GimbalAngleQuatCmd * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__msg__GimbalAngleQuatCmd__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp deleted file mode 100644 index 8655cf4dd1..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp +++ /dev/null @@ -1,179 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__struct.hpp" -// Member 'orientation' -#include "geometry_msgs/msg/detail/quaternion__struct.hpp" - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__msg__GimbalAngleQuatCmd __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__msg__GimbalAngleQuatCmd __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace msg -{ - -// message struct -template -struct GimbalAngleQuatCmd_ -{ - using Type = GimbalAngleQuatCmd_; - - explicit GimbalAngleQuatCmd_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_init), - orientation(_init) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->camera_name = ""; - this->vehicle_name = ""; - } - } - - explicit GimbalAngleQuatCmd_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : header(_alloc, _init), - camera_name(_alloc), - vehicle_name(_alloc), - orientation(_alloc, _init) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->camera_name = ""; - this->vehicle_name = ""; - } - } - - // field types and members - using _header_type = - std_msgs::msg::Header_; - _header_type header; - using _camera_name_type = - std::basic_string, typename ContainerAllocator::template rebind::other>; - _camera_name_type camera_name; - using _vehicle_name_type = - std::basic_string, typename ContainerAllocator::template rebind::other>; - _vehicle_name_type vehicle_name; - using _orientation_type = - geometry_msgs::msg::Quaternion_; - _orientation_type orientation; - - // setters for named parameter idiom - Type & set__header( - const std_msgs::msg::Header_ & _arg) - { - this->header = _arg; - return *this; - } - Type & set__camera_name( - const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) - { - this->camera_name = _arg; - return *this; - } - Type & set__vehicle_name( - const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) - { - this->vehicle_name = _arg; - return *this; - } - Type & set__orientation( - const geometry_msgs::msg::Quaternion_ & _arg) - { - this->orientation = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::msg::GimbalAngleQuatCmd_ *; - using ConstRawPtr = - const airsim_interfaces::msg::GimbalAngleQuatCmd_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__msg__GimbalAngleQuatCmd - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__msg__GimbalAngleQuatCmd - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const GimbalAngleQuatCmd_ & other) const - { - if (this->header != other.header) { - return false; - } - if (this->camera_name != other.camera_name) { - return false; - } - if (this->vehicle_name != other.vehicle_name) { - return false; - } - if (this->orientation != other.orientation) { - return false; - } - return true; - } - bool operator!=(const GimbalAngleQuatCmd_ & other) const - { - return !this->operator==(other); - } -}; // struct GimbalAngleQuatCmd_ - -// alias to use template instance with default allocator -using GimbalAngleQuatCmd = - airsim_interfaces::msg::GimbalAngleQuatCmd_>; - -// constant definitions - -} // namespace msg - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__traits.hpp deleted file mode 100644 index f825d0e6d8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__traits.hpp +++ /dev/null @@ -1,48 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TRAITS_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TRAITS_HPP_ - -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp" -#include -#include -#include - -// Include directives for member types -// Member 'header' -#include "std_msgs/msg/detail/header__traits.hpp" -// Member 'orientation' -#include "geometry_msgs/msg/detail/quaternion__traits.hpp" - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::msg::GimbalAngleQuatCmd"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/msg/GimbalAngleQuatCmd"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.c deleted file mode 100644 index e22b137654..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.c +++ /dev/null @@ -1,143 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h" - - -// Include directives for member types -// Member `header` -#include "std_msgs/msg/header.h" -// Member `header` -#include "std_msgs/msg/detail/header__rosidl_typesupport_introspection_c.h" -// Member `camera_name` -// Member `vehicle_name` -#include "rosidl_runtime_c/string_functions.h" -// Member `orientation` -#include "geometry_msgs/msg/quaternion.h" -// Member `orientation` -#include "geometry_msgs/msg/detail/quaternion__rosidl_typesupport_introspection_c.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__msg__GimbalAngleQuatCmd__init(message_memory); -} - -void GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_fini_function(void * message_memory) -{ - airsim_interfaces__msg__GimbalAngleQuatCmd__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_member_array[4] = { - { - "header", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GimbalAngleQuatCmd, header), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "camera_name", // name - rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GimbalAngleQuatCmd, camera_name), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "vehicle_name", // name - rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GimbalAngleQuatCmd, vehicle_name), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "orientation", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GimbalAngleQuatCmd, orientation), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_members = { - "airsim_interfaces__msg", // message namespace - "GimbalAngleQuatCmd", // message name - 4, // number of fields - sizeof(airsim_interfaces__msg__GimbalAngleQuatCmd), - GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_member_array, // message members - GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_init_function, // function to initialize message memory (memory has to be allocated) - GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_type_support_handle = { - 0, - &GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GimbalAngleQuatCmd)() { - GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_member_array[0].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, std_msgs, msg, Header)(); - GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_member_array[3].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, Quaternion)(); - if (!GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_type_support_handle.typesupport_identifier) { - GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &GimbalAngleQuatCmd__rosidl_typesupport_introspection_c__GimbalAngleQuatCmd_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.cpp deleted file mode 100644 index 5984817b0f..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.cpp +++ /dev/null @@ -1,152 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void GimbalAngleQuatCmd_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::msg::GimbalAngleQuatCmd(_init); -} - -void GimbalAngleQuatCmd_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~GimbalAngleQuatCmd(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember GimbalAngleQuatCmd_message_member_array[4] = { - { - "header", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GimbalAngleQuatCmd, header), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "camera_name", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GimbalAngleQuatCmd, camera_name), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "vehicle_name", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GimbalAngleQuatCmd, vehicle_name), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "orientation", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GimbalAngleQuatCmd, orientation), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers GimbalAngleQuatCmd_message_members = { - "airsim_interfaces::msg", // message namespace - "GimbalAngleQuatCmd", // message name - 4, // number of fields - sizeof(airsim_interfaces::msg::GimbalAngleQuatCmd), - GimbalAngleQuatCmd_message_member_array, // message members - GimbalAngleQuatCmd_init_function, // function to initialize message memory (memory has to be allocated) - GimbalAngleQuatCmd_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t GimbalAngleQuatCmd_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &GimbalAngleQuatCmd_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace msg - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GimbalAngleQuatCmd_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GimbalAngleQuatCmd)() { - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GimbalAngleQuatCmd_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.h deleted file mode 100644 index 1645ed657f..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.h +++ /dev/null @@ -1,33 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - msg, - GimbalAngleQuatCmd -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GIMBAL_ANGLE_QUAT_CMD__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__builder.hpp deleted file mode 100644 index 276b0521c5..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__builder.hpp +++ /dev/null @@ -1,103 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__BUILDER_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__BUILDER_HPP_ - -#include "airsim_interfaces/msg/detail/gps_yaw__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace builder -{ - -class Init_GPSYaw_yaw -{ -public: - explicit Init_GPSYaw_yaw(::airsim_interfaces::msg::GPSYaw & msg) - : msg_(msg) - {} - ::airsim_interfaces::msg::GPSYaw yaw(::airsim_interfaces::msg::GPSYaw::_yaw_type arg) - { - msg_.yaw = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::msg::GPSYaw msg_; -}; - -class Init_GPSYaw_altitude -{ -public: - explicit Init_GPSYaw_altitude(::airsim_interfaces::msg::GPSYaw & msg) - : msg_(msg) - {} - Init_GPSYaw_yaw altitude(::airsim_interfaces::msg::GPSYaw::_altitude_type arg) - { - msg_.altitude = std::move(arg); - return Init_GPSYaw_yaw(msg_); - } - -private: - ::airsim_interfaces::msg::GPSYaw msg_; -}; - -class Init_GPSYaw_longitude -{ -public: - explicit Init_GPSYaw_longitude(::airsim_interfaces::msg::GPSYaw & msg) - : msg_(msg) - {} - Init_GPSYaw_altitude longitude(::airsim_interfaces::msg::GPSYaw::_longitude_type arg) - { - msg_.longitude = std::move(arg); - return Init_GPSYaw_altitude(msg_); - } - -private: - ::airsim_interfaces::msg::GPSYaw msg_; -}; - -class Init_GPSYaw_latitude -{ -public: - Init_GPSYaw_latitude() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_GPSYaw_longitude latitude(::airsim_interfaces::msg::GPSYaw::_latitude_type arg) - { - msg_.latitude = std::move(arg); - return Init_GPSYaw_longitude(msg_); - } - -private: - ::airsim_interfaces::msg::GPSYaw msg_; -}; - -} // namespace builder - -} // namespace msg - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::msg::GPSYaw>() -{ - return airsim_interfaces::msg::builder::Init_GPSYaw_latitude(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.c deleted file mode 100644 index caf7bd73fd..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.c +++ /dev/null @@ -1,144 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/msg/detail/gps_yaw__functions.h" - -#include -#include -#include -#include - - -bool -airsim_interfaces__msg__GPSYaw__init(airsim_interfaces__msg__GPSYaw * msg) -{ - if (!msg) { - return false; - } - // latitude - // longitude - // altitude - // yaw - return true; -} - -void -airsim_interfaces__msg__GPSYaw__fini(airsim_interfaces__msg__GPSYaw * msg) -{ - if (!msg) { - return; - } - // latitude - // longitude - // altitude - // yaw -} - -airsim_interfaces__msg__GPSYaw * -airsim_interfaces__msg__GPSYaw__create() -{ - airsim_interfaces__msg__GPSYaw * msg = (airsim_interfaces__msg__GPSYaw *)malloc(sizeof(airsim_interfaces__msg__GPSYaw)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__msg__GPSYaw)); - bool success = airsim_interfaces__msg__GPSYaw__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__msg__GPSYaw__destroy(airsim_interfaces__msg__GPSYaw * msg) -{ - if (msg) { - airsim_interfaces__msg__GPSYaw__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__msg__GPSYaw__Sequence__init(airsim_interfaces__msg__GPSYaw__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__msg__GPSYaw * data = NULL; - if (size) { - data = (airsim_interfaces__msg__GPSYaw *)calloc(size, sizeof(airsim_interfaces__msg__GPSYaw)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__msg__GPSYaw__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__msg__GPSYaw__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__msg__GPSYaw__Sequence__fini(airsim_interfaces__msg__GPSYaw__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__msg__GPSYaw__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__msg__GPSYaw__Sequence * -airsim_interfaces__msg__GPSYaw__Sequence__create(size_t size) -{ - airsim_interfaces__msg__GPSYaw__Sequence * array = (airsim_interfaces__msg__GPSYaw__Sequence *)malloc(sizeof(airsim_interfaces__msg__GPSYaw__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__msg__GPSYaw__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__msg__GPSYaw__Sequence__destroy(airsim_interfaces__msg__GPSYaw__Sequence * array) -{ - if (array) { - airsim_interfaces__msg__GPSYaw__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.h deleted file mode 100644 index a607f0027c..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__functions.h +++ /dev/null @@ -1,124 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/msg/detail/gps_yaw__struct.h" - -/// Initialize msg/GPSYaw message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__msg__GPSYaw - * )) before or use - * airsim_interfaces__msg__GPSYaw__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__GPSYaw__init(airsim_interfaces__msg__GPSYaw * msg); - -/// Finalize msg/GPSYaw message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GPSYaw__fini(airsim_interfaces__msg__GPSYaw * msg); - -/// Create msg/GPSYaw message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__msg__GPSYaw__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__GPSYaw * -airsim_interfaces__msg__GPSYaw__create(); - -/// Destroy msg/GPSYaw message. -/** - * It calls - * airsim_interfaces__msg__GPSYaw__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GPSYaw__destroy(airsim_interfaces__msg__GPSYaw * msg); - - -/// Initialize array of msg/GPSYaw messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__msg__GPSYaw__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__GPSYaw__Sequence__init(airsim_interfaces__msg__GPSYaw__Sequence * array, size_t size); - -/// Finalize array of msg/GPSYaw messages. -/** - * It calls - * airsim_interfaces__msg__GPSYaw__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GPSYaw__Sequence__fini(airsim_interfaces__msg__GPSYaw__Sequence * array); - -/// Create array of msg/GPSYaw messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__msg__GPSYaw__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__GPSYaw__Sequence * -airsim_interfaces__msg__GPSYaw__Sequence__create(size_t size); - -/// Destroy array of msg/GPSYaw messages. -/** - * It calls - * airsim_interfaces__msg__GPSYaw__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__GPSYaw__Sequence__destroy(airsim_interfaces__msg__GPSYaw__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index 9d4eb445bd..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,36 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__msg__GPSYaw( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__msg__GPSYaw( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, GPSYaw)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index 11b5ba132d..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/msg/detail/gps_yaw__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::msg::GPSYaw & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::msg::GPSYaw & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::msg::GPSYaw & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_GPSYaw( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace msg - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, GPSYaw)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 6cb069a32b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,26 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GPSYaw)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 2da98914eb..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GPSYaw)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.h deleted file mode 100644 index d40b2b66b2..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.h +++ /dev/null @@ -1,43 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Struct defined in msg/GPSYaw in the package airsim_interfaces. -typedef struct airsim_interfaces__msg__GPSYaw -{ - double latitude; - double longitude; - double altitude; - double yaw; -} airsim_interfaces__msg__GPSYaw; - -// Struct for a sequence of airsim_interfaces__msg__GPSYaw. -typedef struct airsim_interfaces__msg__GPSYaw__Sequence -{ - airsim_interfaces__msg__GPSYaw * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__msg__GPSYaw__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.hpp deleted file mode 100644 index 66b477965d..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__struct.hpp +++ /dev/null @@ -1,172 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__msg__GPSYaw __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__msg__GPSYaw __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace msg -{ - -// message struct -template -struct GPSYaw_ -{ - using Type = GPSYaw_; - - explicit GPSYaw_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->latitude = 0.0; - this->longitude = 0.0; - this->altitude = 0.0; - this->yaw = 0.0; - } - } - - explicit GPSYaw_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->latitude = 0.0; - this->longitude = 0.0; - this->altitude = 0.0; - this->yaw = 0.0; - } - } - - // field types and members - using _latitude_type = - double; - _latitude_type latitude; - using _longitude_type = - double; - _longitude_type longitude; - using _altitude_type = - double; - _altitude_type altitude; - using _yaw_type = - double; - _yaw_type yaw; - - // setters for named parameter idiom - Type & set__latitude( - const double & _arg) - { - this->latitude = _arg; - return *this; - } - Type & set__longitude( - const double & _arg) - { - this->longitude = _arg; - return *this; - } - Type & set__altitude( - const double & _arg) - { - this->altitude = _arg; - return *this; - } - Type & set__yaw( - const double & _arg) - { - this->yaw = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::msg::GPSYaw_ *; - using ConstRawPtr = - const airsim_interfaces::msg::GPSYaw_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__msg__GPSYaw - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__msg__GPSYaw - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const GPSYaw_ & other) const - { - if (this->latitude != other.latitude) { - return false; - } - if (this->longitude != other.longitude) { - return false; - } - if (this->altitude != other.altitude) { - return false; - } - if (this->yaw != other.yaw) { - return false; - } - return true; - } - bool operator!=(const GPSYaw_ & other) const - { - return !this->operator==(other); - } -}; // struct GPSYaw_ - -// alias to use template instance with default allocator -using GPSYaw = - airsim_interfaces::msg::GPSYaw_>; - -// constant definitions - -} // namespace msg - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__traits.hpp deleted file mode 100644 index 8891d0ca6e..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__traits.hpp +++ /dev/null @@ -1,42 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TRAITS_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TRAITS_HPP_ - -#include "airsim_interfaces/msg/detail/gps_yaw__struct.hpp" -#include -#include -#include - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::msg::GPSYaw"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/msg/GPSYaw"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.c deleted file mode 100644 index 2da1dfac0f..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.c +++ /dev/null @@ -1,126 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/msg/detail/gps_yaw__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/msg/detail/gps_yaw__functions.h" -#include "airsim_interfaces/msg/detail/gps_yaw__struct.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -void GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__msg__GPSYaw__init(message_memory); -} - -void GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_fini_function(void * message_memory) -{ - airsim_interfaces__msg__GPSYaw__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_member_array[4] = { - { - "latitude", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GPSYaw, latitude), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "longitude", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GPSYaw, longitude), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "altitude", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GPSYaw, altitude), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "yaw", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__GPSYaw, yaw), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_members = { - "airsim_interfaces__msg", // message namespace - "GPSYaw", // message name - 4, // number of fields - sizeof(airsim_interfaces__msg__GPSYaw), - GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_member_array, // message members - GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_init_function, // function to initialize message memory (memory has to be allocated) - GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_type_support_handle = { - 0, - &GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, GPSYaw)() { - if (!GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_type_support_handle.typesupport_identifier) { - GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &GPSYaw__rosidl_typesupport_introspection_c__GPSYaw_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.cpp deleted file mode 100644 index 86d0dccd9c..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.cpp +++ /dev/null @@ -1,152 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/detail/gps_yaw__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void GPSYaw_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::msg::GPSYaw(_init); -} - -void GPSYaw_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~GPSYaw(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember GPSYaw_message_member_array[4] = { - { - "latitude", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GPSYaw, latitude), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "longitude", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GPSYaw, longitude), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "altitude", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GPSYaw, altitude), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "yaw", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::GPSYaw, yaw), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers GPSYaw_message_members = { - "airsim_interfaces::msg", // message namespace - "GPSYaw", // message name - 4, // number of fields - sizeof(airsim_interfaces::msg::GPSYaw), - GPSYaw_message_member_array, // message members - GPSYaw_init_function, // function to initialize message memory (memory has to be allocated) - GPSYaw_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t GPSYaw_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &GPSYaw_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace msg - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GPSYaw_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, GPSYaw)() { - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::GPSYaw_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.h deleted file mode 100644 index 09b564ce73..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/gps_yaw__type_support.h +++ /dev/null @@ -1,33 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - msg, - GPSYaw -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__GPS_YAW__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__builder.hpp deleted file mode 100644 index c367e6050e..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__builder.hpp +++ /dev/null @@ -1,55 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__BUILDER_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__BUILDER_HPP_ - -#include "airsim_interfaces/msg/detail/vel_cmd__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace builder -{ - -class Init_VelCmd_twist -{ -public: - Init_VelCmd_twist() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - ::airsim_interfaces::msg::VelCmd twist(::airsim_interfaces::msg::VelCmd::_twist_type arg) - { - msg_.twist = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::msg::VelCmd msg_; -}; - -} // namespace builder - -} // namespace msg - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::msg::VelCmd>() -{ - return airsim_interfaces::msg::builder::Init_VelCmd_twist(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.c deleted file mode 100644 index 0158328c68..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.c +++ /dev/null @@ -1,147 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/msg/detail/vel_cmd__functions.h" - -#include -#include -#include -#include - - -// Include directives for member types -// Member `twist` -#include "geometry_msgs/msg/detail/twist__functions.h" - -bool -airsim_interfaces__msg__VelCmd__init(airsim_interfaces__msg__VelCmd * msg) -{ - if (!msg) { - return false; - } - // twist - if (!geometry_msgs__msg__Twist__init(&msg->twist)) { - airsim_interfaces__msg__VelCmd__fini(msg); - return false; - } - return true; -} - -void -airsim_interfaces__msg__VelCmd__fini(airsim_interfaces__msg__VelCmd * msg) -{ - if (!msg) { - return; - } - // twist - geometry_msgs__msg__Twist__fini(&msg->twist); -} - -airsim_interfaces__msg__VelCmd * -airsim_interfaces__msg__VelCmd__create() -{ - airsim_interfaces__msg__VelCmd * msg = (airsim_interfaces__msg__VelCmd *)malloc(sizeof(airsim_interfaces__msg__VelCmd)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__msg__VelCmd)); - bool success = airsim_interfaces__msg__VelCmd__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__msg__VelCmd__destroy(airsim_interfaces__msg__VelCmd * msg) -{ - if (msg) { - airsim_interfaces__msg__VelCmd__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__msg__VelCmd__Sequence__init(airsim_interfaces__msg__VelCmd__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__msg__VelCmd * data = NULL; - if (size) { - data = (airsim_interfaces__msg__VelCmd *)calloc(size, sizeof(airsim_interfaces__msg__VelCmd)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__msg__VelCmd__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__msg__VelCmd__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__msg__VelCmd__Sequence__fini(airsim_interfaces__msg__VelCmd__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__msg__VelCmd__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__msg__VelCmd__Sequence * -airsim_interfaces__msg__VelCmd__Sequence__create(size_t size) -{ - airsim_interfaces__msg__VelCmd__Sequence * array = (airsim_interfaces__msg__VelCmd__Sequence *)malloc(sizeof(airsim_interfaces__msg__VelCmd__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__msg__VelCmd__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__msg__VelCmd__Sequence__destroy(airsim_interfaces__msg__VelCmd__Sequence * array) -{ - if (array) { - airsim_interfaces__msg__VelCmd__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.h deleted file mode 100644 index b39dcc9854..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__functions.h +++ /dev/null @@ -1,124 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/msg/detail/vel_cmd__struct.h" - -/// Initialize msg/VelCmd message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__msg__VelCmd - * )) before or use - * airsim_interfaces__msg__VelCmd__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__VelCmd__init(airsim_interfaces__msg__VelCmd * msg); - -/// Finalize msg/VelCmd message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__VelCmd__fini(airsim_interfaces__msg__VelCmd * msg); - -/// Create msg/VelCmd message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__msg__VelCmd__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__VelCmd * -airsim_interfaces__msg__VelCmd__create(); - -/// Destroy msg/VelCmd message. -/** - * It calls - * airsim_interfaces__msg__VelCmd__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__VelCmd__destroy(airsim_interfaces__msg__VelCmd * msg); - - -/// Initialize array of msg/VelCmd messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__msg__VelCmd__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__VelCmd__Sequence__init(airsim_interfaces__msg__VelCmd__Sequence * array, size_t size); - -/// Finalize array of msg/VelCmd messages. -/** - * It calls - * airsim_interfaces__msg__VelCmd__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__VelCmd__Sequence__fini(airsim_interfaces__msg__VelCmd__Sequence * array); - -/// Create array of msg/VelCmd messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__msg__VelCmd__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__VelCmd__Sequence * -airsim_interfaces__msg__VelCmd__Sequence__create(size_t size); - -/// Destroy array of msg/VelCmd messages. -/** - * It calls - * airsim_interfaces__msg__VelCmd__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__VelCmd__Sequence__destroy(airsim_interfaces__msg__VelCmd__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index c156a7ec84..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,36 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__msg__VelCmd( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__msg__VelCmd( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, VelCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index 91346836c7..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/msg/detail/vel_cmd__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::msg::VelCmd & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::msg::VelCmd & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::msg::VelCmd & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_VelCmd( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace msg - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, VelCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 078a6ae8e4..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,26 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, VelCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index edaf26ba39..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, VelCmd)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.h deleted file mode 100644 index b12d25e0ee..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.h +++ /dev/null @@ -1,44 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'twist' -#include "geometry_msgs/msg/detail/twist__struct.h" - -// Struct defined in msg/VelCmd in the package airsim_interfaces. -typedef struct airsim_interfaces__msg__VelCmd -{ - geometry_msgs__msg__Twist twist; -} airsim_interfaces__msg__VelCmd; - -// Struct for a sequence of airsim_interfaces__msg__VelCmd. -typedef struct airsim_interfaces__msg__VelCmd__Sequence -{ - airsim_interfaces__msg__VelCmd * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__msg__VelCmd__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.hpp deleted file mode 100644 index 51a93a516a..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__struct.hpp +++ /dev/null @@ -1,127 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -// Include directives for member types -// Member 'twist' -#include "geometry_msgs/msg/detail/twist__struct.hpp" - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__msg__VelCmd __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__msg__VelCmd __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace msg -{ - -// message struct -template -struct VelCmd_ -{ - using Type = VelCmd_; - - explicit VelCmd_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : twist(_init) - { - (void)_init; - } - - explicit VelCmd_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : twist(_alloc, _init) - { - (void)_init; - } - - // field types and members - using _twist_type = - geometry_msgs::msg::Twist_; - _twist_type twist; - - // setters for named parameter idiom - Type & set__twist( - const geometry_msgs::msg::Twist_ & _arg) - { - this->twist = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::msg::VelCmd_ *; - using ConstRawPtr = - const airsim_interfaces::msg::VelCmd_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__msg__VelCmd - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__msg__VelCmd - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const VelCmd_ & other) const - { - if (this->twist != other.twist) { - return false; - } - return true; - } - bool operator!=(const VelCmd_ & other) const - { - return !this->operator==(other); - } -}; // struct VelCmd_ - -// alias to use template instance with default allocator -using VelCmd = - airsim_interfaces::msg::VelCmd_>; - -// constant definitions - -} // namespace msg - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__traits.hpp deleted file mode 100644 index 9401d3ea80..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__traits.hpp +++ /dev/null @@ -1,46 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TRAITS_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TRAITS_HPP_ - -#include "airsim_interfaces/msg/detail/vel_cmd__struct.hpp" -#include -#include -#include - -// Include directives for member types -// Member 'twist' -#include "geometry_msgs/msg/detail/twist__traits.hpp" - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::msg::VelCmd"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/msg/VelCmd"; -} - -template<> -struct has_fixed_size - : std::integral_constant::value> {}; - -template<> -struct has_bounded_size - : std::integral_constant::value> {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.c deleted file mode 100644 index 90c91f57c3..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.c +++ /dev/null @@ -1,89 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/msg/detail/vel_cmd__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/msg/detail/vel_cmd__functions.h" -#include "airsim_interfaces/msg/detail/vel_cmd__struct.h" - - -// Include directives for member types -// Member `twist` -#include "geometry_msgs/msg/twist.h" -// Member `twist` -#include "geometry_msgs/msg/detail/twist__rosidl_typesupport_introspection_c.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void VelCmd__rosidl_typesupport_introspection_c__VelCmd_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__msg__VelCmd__init(message_memory); -} - -void VelCmd__rosidl_typesupport_introspection_c__VelCmd_fini_function(void * message_memory) -{ - airsim_interfaces__msg__VelCmd__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_member_array[1] = { - { - "twist", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__VelCmd, twist), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_members = { - "airsim_interfaces__msg", // message namespace - "VelCmd", // message name - 1, // number of fields - sizeof(airsim_interfaces__msg__VelCmd), - VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_member_array, // message members - VelCmd__rosidl_typesupport_introspection_c__VelCmd_init_function, // function to initialize message memory (memory has to be allocated) - VelCmd__rosidl_typesupport_introspection_c__VelCmd_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_type_support_handle = { - 0, - &VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, VelCmd)() { - VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_member_array[0].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, Twist)(); - if (!VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_type_support_handle.typesupport_identifier) { - VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &VelCmd__rosidl_typesupport_introspection_c__VelCmd_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.cpp deleted file mode 100644 index fa4c70dfdf..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.cpp +++ /dev/null @@ -1,107 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/detail/vel_cmd__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void VelCmd_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::msg::VelCmd(_init); -} - -void VelCmd_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~VelCmd(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember VelCmd_message_member_array[1] = { - { - "twist", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::VelCmd, twist), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers VelCmd_message_members = { - "airsim_interfaces::msg", // message namespace - "VelCmd", // message name - 1, // number of fields - sizeof(airsim_interfaces::msg::VelCmd), - VelCmd_message_member_array, // message members - VelCmd_init_function, // function to initialize message memory (memory has to be allocated) - VelCmd_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t VelCmd_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &VelCmd_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace msg - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::VelCmd_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, VelCmd)() { - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::VelCmd_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.h deleted file mode 100644 index b4d0ca39d8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd__type_support.h +++ /dev/null @@ -1,33 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - msg, - VelCmd -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__builder.hpp deleted file mode 100644 index 14ddb6fb2b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__builder.hpp +++ /dev/null @@ -1,71 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__BUILDER_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__BUILDER_HPP_ - -#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace builder -{ - -class Init_VelCmdGroup_vehicle_names -{ -public: - explicit Init_VelCmdGroup_vehicle_names(::airsim_interfaces::msg::VelCmdGroup & msg) - : msg_(msg) - {} - ::airsim_interfaces::msg::VelCmdGroup vehicle_names(::airsim_interfaces::msg::VelCmdGroup::_vehicle_names_type arg) - { - msg_.vehicle_names = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::msg::VelCmdGroup msg_; -}; - -class Init_VelCmdGroup_twist -{ -public: - Init_VelCmdGroup_twist() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_VelCmdGroup_vehicle_names twist(::airsim_interfaces::msg::VelCmdGroup::_twist_type arg) - { - msg_.twist = std::move(arg); - return Init_VelCmdGroup_vehicle_names(msg_); - } - -private: - ::airsim_interfaces::msg::VelCmdGroup msg_; -}; - -} // namespace builder - -} // namespace msg - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::msg::VelCmdGroup>() -{ - return airsim_interfaces::msg::builder::Init_VelCmdGroup_twist(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.c deleted file mode 100644 index 51267badf5..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.c +++ /dev/null @@ -1,156 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/msg/detail/vel_cmd_group__functions.h" - -#include -#include -#include -#include - - -// Include directives for member types -// Member `twist` -#include "geometry_msgs/msg/detail/twist__functions.h" -// Member `vehicle_names` -#include "rosidl_runtime_c/string_functions.h" - -bool -airsim_interfaces__msg__VelCmdGroup__init(airsim_interfaces__msg__VelCmdGroup * msg) -{ - if (!msg) { - return false; - } - // twist - if (!geometry_msgs__msg__Twist__init(&msg->twist)) { - airsim_interfaces__msg__VelCmdGroup__fini(msg); - return false; - } - // vehicle_names - if (!rosidl_runtime_c__String__Sequence__init(&msg->vehicle_names, 0)) { - airsim_interfaces__msg__VelCmdGroup__fini(msg); - return false; - } - return true; -} - -void -airsim_interfaces__msg__VelCmdGroup__fini(airsim_interfaces__msg__VelCmdGroup * msg) -{ - if (!msg) { - return; - } - // twist - geometry_msgs__msg__Twist__fini(&msg->twist); - // vehicle_names - rosidl_runtime_c__String__Sequence__fini(&msg->vehicle_names); -} - -airsim_interfaces__msg__VelCmdGroup * -airsim_interfaces__msg__VelCmdGroup__create() -{ - airsim_interfaces__msg__VelCmdGroup * msg = (airsim_interfaces__msg__VelCmdGroup *)malloc(sizeof(airsim_interfaces__msg__VelCmdGroup)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__msg__VelCmdGroup)); - bool success = airsim_interfaces__msg__VelCmdGroup__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__msg__VelCmdGroup__destroy(airsim_interfaces__msg__VelCmdGroup * msg) -{ - if (msg) { - airsim_interfaces__msg__VelCmdGroup__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__msg__VelCmdGroup__Sequence__init(airsim_interfaces__msg__VelCmdGroup__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__msg__VelCmdGroup * data = NULL; - if (size) { - data = (airsim_interfaces__msg__VelCmdGroup *)calloc(size, sizeof(airsim_interfaces__msg__VelCmdGroup)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__msg__VelCmdGroup__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__msg__VelCmdGroup__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__msg__VelCmdGroup__Sequence__fini(airsim_interfaces__msg__VelCmdGroup__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__msg__VelCmdGroup__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__msg__VelCmdGroup__Sequence * -airsim_interfaces__msg__VelCmdGroup__Sequence__create(size_t size) -{ - airsim_interfaces__msg__VelCmdGroup__Sequence * array = (airsim_interfaces__msg__VelCmdGroup__Sequence *)malloc(sizeof(airsim_interfaces__msg__VelCmdGroup__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__msg__VelCmdGroup__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__msg__VelCmdGroup__Sequence__destroy(airsim_interfaces__msg__VelCmdGroup__Sequence * array) -{ - if (array) { - airsim_interfaces__msg__VelCmdGroup__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.h deleted file mode 100644 index a874d3eb79..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__functions.h +++ /dev/null @@ -1,124 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.h" - -/// Initialize msg/VelCmdGroup message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__msg__VelCmdGroup - * )) before or use - * airsim_interfaces__msg__VelCmdGroup__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__VelCmdGroup__init(airsim_interfaces__msg__VelCmdGroup * msg); - -/// Finalize msg/VelCmdGroup message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__VelCmdGroup__fini(airsim_interfaces__msg__VelCmdGroup * msg); - -/// Create msg/VelCmdGroup message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__msg__VelCmdGroup__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__VelCmdGroup * -airsim_interfaces__msg__VelCmdGroup__create(); - -/// Destroy msg/VelCmdGroup message. -/** - * It calls - * airsim_interfaces__msg__VelCmdGroup__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__VelCmdGroup__destroy(airsim_interfaces__msg__VelCmdGroup * msg); - - -/// Initialize array of msg/VelCmdGroup messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__msg__VelCmdGroup__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__msg__VelCmdGroup__Sequence__init(airsim_interfaces__msg__VelCmdGroup__Sequence * array, size_t size); - -/// Finalize array of msg/VelCmdGroup messages. -/** - * It calls - * airsim_interfaces__msg__VelCmdGroup__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__VelCmdGroup__Sequence__fini(airsim_interfaces__msg__VelCmdGroup__Sequence * array); - -/// Create array of msg/VelCmdGroup messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__msg__VelCmdGroup__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__msg__VelCmdGroup__Sequence * -airsim_interfaces__msg__VelCmdGroup__Sequence__create(size_t size); - -/// Destroy array of msg/VelCmdGroup messages. -/** - * It calls - * airsim_interfaces__msg__VelCmdGroup__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__msg__VelCmdGroup__Sequence__destroy(airsim_interfaces__msg__VelCmdGroup__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index 1660fd59ed..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,36 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__msg__VelCmdGroup( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__msg__VelCmdGroup( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, msg, VelCmdGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index 1847430802..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::msg::VelCmdGroup & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::msg::VelCmdGroup & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::msg::VelCmdGroup & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_VelCmdGroup( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace msg - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, msg, VelCmdGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 9fbe730cb6..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,26 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, VelCmdGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 5eb22a70b1..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, VelCmdGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.h deleted file mode 100644 index b332605f74..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.h +++ /dev/null @@ -1,47 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'twist' -#include "geometry_msgs/msg/detail/twist__struct.h" -// Member 'vehicle_names' -#include "rosidl_runtime_c/string.h" - -// Struct defined in msg/VelCmdGroup in the package airsim_interfaces. -typedef struct airsim_interfaces__msg__VelCmdGroup -{ - geometry_msgs__msg__Twist twist; - rosidl_runtime_c__String__Sequence vehicle_names; -} airsim_interfaces__msg__VelCmdGroup; - -// Struct for a sequence of airsim_interfaces__msg__VelCmdGroup. -typedef struct airsim_interfaces__msg__VelCmdGroup__Sequence -{ - airsim_interfaces__msg__VelCmdGroup * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__msg__VelCmdGroup__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp deleted file mode 100644 index 613a3682f4..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp +++ /dev/null @@ -1,139 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -// Include directives for member types -// Member 'twist' -#include "geometry_msgs/msg/detail/twist__struct.hpp" - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__msg__VelCmdGroup __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__msg__VelCmdGroup __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace msg -{ - -// message struct -template -struct VelCmdGroup_ -{ - using Type = VelCmdGroup_; - - explicit VelCmdGroup_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : twist(_init) - { - (void)_init; - } - - explicit VelCmdGroup_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : twist(_alloc, _init) - { - (void)_init; - } - - // field types and members - using _twist_type = - geometry_msgs::msg::Twist_; - _twist_type twist; - using _vehicle_names_type = - std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other>; - _vehicle_names_type vehicle_names; - - // setters for named parameter idiom - Type & set__twist( - const geometry_msgs::msg::Twist_ & _arg) - { - this->twist = _arg; - return *this; - } - Type & set__vehicle_names( - const std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other> & _arg) - { - this->vehicle_names = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::msg::VelCmdGroup_ *; - using ConstRawPtr = - const airsim_interfaces::msg::VelCmdGroup_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__msg__VelCmdGroup - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__msg__VelCmdGroup - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const VelCmdGroup_ & other) const - { - if (this->twist != other.twist) { - return false; - } - if (this->vehicle_names != other.vehicle_names) { - return false; - } - return true; - } - bool operator!=(const VelCmdGroup_ & other) const - { - return !this->operator==(other); - } -}; // struct VelCmdGroup_ - -// alias to use template instance with default allocator -using VelCmdGroup = - airsim_interfaces::msg::VelCmdGroup_>; - -// constant definitions - -} // namespace msg - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__traits.hpp deleted file mode 100644 index 48bee2e366..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__traits.hpp +++ /dev/null @@ -1,46 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TRAITS_HPP_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TRAITS_HPP_ - -#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp" -#include -#include -#include - -// Include directives for member types -// Member 'twist' -#include "geometry_msgs/msg/detail/twist__traits.hpp" - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::msg::VelCmdGroup"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/msg/VelCmdGroup"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.c deleted file mode 100644 index ac34b5f27d..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.c +++ /dev/null @@ -1,106 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/msg/detail/vel_cmd_group__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/msg/detail/vel_cmd_group__functions.h" -#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.h" - - -// Include directives for member types -// Member `twist` -#include "geometry_msgs/msg/twist.h" -// Member `twist` -#include "geometry_msgs/msg/detail/twist__rosidl_typesupport_introspection_c.h" -// Member `vehicle_names` -#include "rosidl_runtime_c/string_functions.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__msg__VelCmdGroup__init(message_memory); -} - -void VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_fini_function(void * message_memory) -{ - airsim_interfaces__msg__VelCmdGroup__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_member_array[2] = { - { - "twist", // name - rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - NULL, // members of sub message (initialized later) - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__VelCmdGroup, twist), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "vehicle_names", // name - rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type - 0, // upper bound of string - NULL, // members of sub message - true, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__msg__VelCmdGroup, vehicle_names), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_members = { - "airsim_interfaces__msg", // message namespace - "VelCmdGroup", // message name - 2, // number of fields - sizeof(airsim_interfaces__msg__VelCmdGroup), - VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_member_array, // message members - VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_init_function, // function to initialize message memory (memory has to be allocated) - VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_type_support_handle = { - 0, - &VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, msg, VelCmdGroup)() { - VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_member_array[0].members_ = - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, geometry_msgs, msg, Twist)(); - if (!VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_type_support_handle.typesupport_identifier) { - VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &VelCmdGroup__rosidl_typesupport_introspection_c__VelCmdGroup_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.cpp deleted file mode 100644 index addf4009d0..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.cpp +++ /dev/null @@ -1,149 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace msg -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void VelCmdGroup_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::msg::VelCmdGroup(_init); -} - -void VelCmdGroup_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~VelCmdGroup(); -} - -size_t size_function__VelCmdGroup__vehicle_names(const void * untyped_member) -{ - const auto * member = reinterpret_cast *>(untyped_member); - return member->size(); -} - -const void * get_const_function__VelCmdGroup__vehicle_names(const void * untyped_member, size_t index) -{ - const auto & member = - *reinterpret_cast *>(untyped_member); - return &member[index]; -} - -void * get_function__VelCmdGroup__vehicle_names(void * untyped_member, size_t index) -{ - auto & member = - *reinterpret_cast *>(untyped_member); - return &member[index]; -} - -void resize_function__VelCmdGroup__vehicle_names(void * untyped_member, size_t size) -{ - auto * member = - reinterpret_cast *>(untyped_member); - member->resize(size); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember VelCmdGroup_message_member_array[2] = { - { - "twist", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type - 0, // upper bound of string - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::VelCmdGroup, twist), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "vehicle_names", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type - 0, // upper bound of string - nullptr, // members of sub message - true, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::msg::VelCmdGroup, vehicle_names), // bytes offset in struct - nullptr, // default value - size_function__VelCmdGroup__vehicle_names, // size() function pointer - get_const_function__VelCmdGroup__vehicle_names, // get_const(index) function pointer - get_function__VelCmdGroup__vehicle_names, // get(index) function pointer - resize_function__VelCmdGroup__vehicle_names // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers VelCmdGroup_message_members = { - "airsim_interfaces::msg", // message namespace - "VelCmdGroup", // message name - 2, // number of fields - sizeof(airsim_interfaces::msg::VelCmdGroup), - VelCmdGroup_message_member_array, // message members - VelCmdGroup_init_function, // function to initialize message memory (memory has to be allocated) - VelCmdGroup_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t VelCmdGroup_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &VelCmdGroup_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace msg - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::VelCmdGroup_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, msg, VelCmdGroup)() { - return &::airsim_interfaces::msg::rosidl_typesupport_introspection_cpp::VelCmdGroup_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.h deleted file mode 100644 index 01c9e2fe57..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/detail/vel_cmd_group__type_support.h +++ /dev/null @@ -1,33 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - msg, - VelCmdGroup -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__DETAIL__VEL_CMD_GROUP__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.h deleted file mode 100644 index 46301a8ccb..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__ENVIRONMENT_H_ -#define AIRSIM_INTERFACES__MSG__ENVIRONMENT_H_ - -#include "airsim_interfaces/msg/detail/environment__struct.h" -#include "airsim_interfaces/msg/detail/environment__functions.h" -#include "airsim_interfaces/msg/detail/environment__type_support.h" - -#endif // AIRSIM_INTERFACES__MSG__ENVIRONMENT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.hpp deleted file mode 100644 index 0c02d5ea30..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/environment.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__ENVIRONMENT_HPP_ -#define AIRSIM_INTERFACES__MSG__ENVIRONMENT_HPP_ - -#include "airsim_interfaces/msg/detail/environment__struct.hpp" -#include "airsim_interfaces/msg/detail/environment__builder.hpp" -#include "airsim_interfaces/msg/detail/environment__traits.hpp" - -#endif // AIRSIM_INTERFACES__MSG__ENVIRONMENT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.h deleted file mode 100644 index cb8acc9621..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_H_ -#define AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_H_ - -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__type_support.h" - -#endif // AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.hpp deleted file mode 100644 index 683a6cae19..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_euler_cmd.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_HPP_ -#define AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_HPP_ - -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.hpp" -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__builder.hpp" -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__traits.hpp" - -#endif // AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_EULER_CMD_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.h deleted file mode 100644 index 65693ae2a8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_H_ -#define AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_H_ - -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__type_support.h" - -#endif // AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.hpp deleted file mode 100644 index e0fb47d2d1..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gimbal_angle_quat_cmd.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_HPP_ -#define AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_HPP_ - -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.hpp" -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__builder.hpp" -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__traits.hpp" - -#endif // AIRSIM_INTERFACES__MSG__GIMBAL_ANGLE_QUAT_CMD_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.h deleted file mode 100644 index dcd0449ca1..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__GPS_YAW_H_ -#define AIRSIM_INTERFACES__MSG__GPS_YAW_H_ - -#include "airsim_interfaces/msg/detail/gps_yaw__struct.h" -#include "airsim_interfaces/msg/detail/gps_yaw__functions.h" -#include "airsim_interfaces/msg/detail/gps_yaw__type_support.h" - -#endif // AIRSIM_INTERFACES__MSG__GPS_YAW_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.hpp deleted file mode 100644 index 2499d4624c..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/gps_yaw.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__GPS_YAW_HPP_ -#define AIRSIM_INTERFACES__MSG__GPS_YAW_HPP_ - -#include "airsim_interfaces/msg/detail/gps_yaw__struct.hpp" -#include "airsim_interfaces/msg/detail/gps_yaw__builder.hpp" -#include "airsim_interfaces/msg/detail/gps_yaw__traits.hpp" - -#endif // AIRSIM_INTERFACES__MSG__GPS_YAW_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_generator_c__visibility_control.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_generator_c__visibility_control.h deleted file mode 100644 index 6739ec2b15..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_generator_c__visibility_control.h +++ /dev/null @@ -1,42 +0,0 @@ -// generated from rosidl_generator_c/resource/rosidl_generator_c__visibility_control.h.in -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ -#define AIRSIM_INTERFACES__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -// This logic was borrowed (then namespaced) from the examples on the gcc wiki: -// https://gcc.gnu.org/wiki/Visibility - -#if defined _WIN32 || defined __CYGWIN__ - #ifdef __GNUC__ - #define ROSIDL_GENERATOR_C_EXPORT_airsim_interfaces __attribute__ ((dllexport)) - #define ROSIDL_GENERATOR_C_IMPORT_airsim_interfaces __attribute__ ((dllimport)) - #else - #define ROSIDL_GENERATOR_C_EXPORT_airsim_interfaces __declspec(dllexport) - #define ROSIDL_GENERATOR_C_IMPORT_airsim_interfaces __declspec(dllimport) - #endif - #ifdef ROSIDL_GENERATOR_C_BUILDING_DLL_airsim_interfaces - #define ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces ROSIDL_GENERATOR_C_EXPORT_airsim_interfaces - #else - #define ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces ROSIDL_GENERATOR_C_IMPORT_airsim_interfaces - #endif -#else - #define ROSIDL_GENERATOR_C_EXPORT_airsim_interfaces __attribute__ ((visibility("default"))) - #define ROSIDL_GENERATOR_C_IMPORT_airsim_interfaces - #if __GNUC__ >= 4 - #define ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces __attribute__ ((visibility("default"))) - #else - #define ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces - #endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h deleted file mode 100644 index 81a9eb4c27..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h +++ /dev/null @@ -1,43 +0,0 @@ -// generated from -// rosidl_typesupport_fastrtps_c/resource/rosidl_typesupport_fastrtps_c__visibility_control.h.in -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ -#define AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ - -#if __cplusplus -extern "C" -{ -#endif - -// This logic was borrowed (then namespaced) from the examples on the gcc wiki: -// https://gcc.gnu.org/wiki/Visibility - -#if defined _WIN32 || defined __CYGWIN__ - #ifdef __GNUC__ - #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_airsim_interfaces __attribute__ ((dllexport)) - #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_airsim_interfaces __attribute__ ((dllimport)) - #else - #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_airsim_interfaces __declspec(dllexport) - #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_airsim_interfaces __declspec(dllimport) - #endif - #ifdef ROSIDL_TYPESUPPORT_FASTRTPS_C_BUILDING_DLL_airsim_interfaces - #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_airsim_interfaces - #else - #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_airsim_interfaces - #endif -#else - #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_airsim_interfaces __attribute__ ((visibility("default"))) - #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_airsim_interfaces - #if __GNUC__ >= 4 - #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces __attribute__ ((visibility("default"))) - #else - #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces - #endif -#endif - -#if __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h deleted file mode 100644 index 1c4f8bf0e9..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h +++ /dev/null @@ -1,43 +0,0 @@ -// generated from -// rosidl_typesupport_fastrtps_cpp/resource/rosidl_typesupport_fastrtps_cpp__visibility_control.h.in -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ -#define AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ - -#if __cplusplus -extern "C" -{ -#endif - -// This logic was borrowed (then namespaced) from the examples on the gcc wiki: -// https://gcc.gnu.org/wiki/Visibility - -#if defined _WIN32 || defined __CYGWIN__ - #ifdef __GNUC__ - #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_airsim_interfaces __attribute__ ((dllexport)) - #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_airsim_interfaces __attribute__ ((dllimport)) - #else - #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_airsim_interfaces __declspec(dllexport) - #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_airsim_interfaces __declspec(dllimport) - #endif - #ifdef ROSIDL_TYPESUPPORT_FASTRTPS_CPP_BUILDING_DLL_airsim_interfaces - #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_airsim_interfaces - #else - #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_airsim_interfaces - #endif -#else - #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_airsim_interfaces __attribute__ ((visibility("default"))) - #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_airsim_interfaces - #if __GNUC__ >= 4 - #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces __attribute__ ((visibility("default"))) - #else - #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces - #endif -#endif - -#if __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h deleted file mode 100644 index ea17b8a076..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h +++ /dev/null @@ -1,43 +0,0 @@ -// generated from -// rosidl_typesupport_introspection_c/resource/rosidl_typesupport_introspection_c__visibility_control.h.in -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ -#define AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -// This logic was borrowed (then namespaced) from the examples on the gcc wiki: -// https://gcc.gnu.org/wiki/Visibility - -#if defined _WIN32 || defined __CYGWIN__ - #ifdef __GNUC__ - #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces __attribute__ ((dllexport)) - #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_airsim_interfaces __attribute__ ((dllimport)) - #else - #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces __declspec(dllexport) - #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_airsim_interfaces __declspec(dllimport) - #endif - #ifdef ROSIDL_TYPESUPPORT_INTROSPECTION_C_BUILDING_DLL_airsim_interfaces - #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces - #else - #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_airsim_interfaces - #endif -#else - #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces __attribute__ ((visibility("default"))) - #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_airsim_interfaces - #if __GNUC__ >= 4 - #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces __attribute__ ((visibility("default"))) - #else - #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces - #endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.h deleted file mode 100644 index 2e1309d2f4..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__VEL_CMD_H_ -#define AIRSIM_INTERFACES__MSG__VEL_CMD_H_ - -#include "airsim_interfaces/msg/detail/vel_cmd__struct.h" -#include "airsim_interfaces/msg/detail/vel_cmd__functions.h" -#include "airsim_interfaces/msg/detail/vel_cmd__type_support.h" - -#endif // AIRSIM_INTERFACES__MSG__VEL_CMD_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.hpp deleted file mode 100644 index a3e0ff0748..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__VEL_CMD_HPP_ -#define AIRSIM_INTERFACES__MSG__VEL_CMD_HPP_ - -#include "airsim_interfaces/msg/detail/vel_cmd__struct.hpp" -#include "airsim_interfaces/msg/detail/vel_cmd__builder.hpp" -#include "airsim_interfaces/msg/detail/vel_cmd__traits.hpp" - -#endif // AIRSIM_INTERFACES__MSG__VEL_CMD_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.h deleted file mode 100644 index 7a02a851de..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_H_ -#define AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_H_ - -#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.h" -#include "airsim_interfaces/msg/detail/vel_cmd_group__functions.h" -#include "airsim_interfaces/msg/detail/vel_cmd_group__type_support.h" - -#endif // AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.hpp deleted file mode 100644 index 9a114c43c7..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/msg/vel_cmd_group.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_HPP_ -#define AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_HPP_ - -#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.hpp" -#include "airsim_interfaces/msg/detail/vel_cmd_group__builder.hpp" -#include "airsim_interfaces/msg/detail/vel_cmd_group__traits.hpp" - -#endif // AIRSIM_INTERFACES__MSG__VEL_CMD_GROUP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__builder.hpp deleted file mode 100644 index 7e10946b10..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__builder.hpp +++ /dev/null @@ -1,97 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__BUILDER_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__BUILDER_HPP_ - -#include "airsim_interfaces/srv/detail/land__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_Land_Request_wait_on_last_task -{ -public: - Init_Land_Request_wait_on_last_task() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - ::airsim_interfaces::srv::Land_Request wait_on_last_task(::airsim_interfaces::srv::Land_Request::_wait_on_last_task_type arg) - { - msg_.wait_on_last_task = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::Land_Request msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::Land_Request>() -{ - return airsim_interfaces::srv::builder::Init_Land_Request_wait_on_last_task(); -} - -} // namespace airsim_interfaces - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_Land_Response_success -{ -public: - Init_Land_Response_success() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - ::airsim_interfaces::srv::Land_Response success(::airsim_interfaces::srv::Land_Response::_success_type arg) - { - msg_.success = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::Land_Response msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::Land_Response>() -{ - return airsim_interfaces::srv::builder::Init_Land_Response_success(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.c deleted file mode 100644 index a6d099f567..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.c +++ /dev/null @@ -1,266 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/srv/detail/land__functions.h" - -#include -#include -#include -#include - -bool -airsim_interfaces__srv__Land_Request__init(airsim_interfaces__srv__Land_Request * msg) -{ - if (!msg) { - return false; - } - // wait_on_last_task - return true; -} - -void -airsim_interfaces__srv__Land_Request__fini(airsim_interfaces__srv__Land_Request * msg) -{ - if (!msg) { - return; - } - // wait_on_last_task -} - -airsim_interfaces__srv__Land_Request * -airsim_interfaces__srv__Land_Request__create() -{ - airsim_interfaces__srv__Land_Request * msg = (airsim_interfaces__srv__Land_Request *)malloc(sizeof(airsim_interfaces__srv__Land_Request)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__Land_Request)); - bool success = airsim_interfaces__srv__Land_Request__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__Land_Request__destroy(airsim_interfaces__srv__Land_Request * msg) -{ - if (msg) { - airsim_interfaces__srv__Land_Request__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__Land_Request__Sequence__init(airsim_interfaces__srv__Land_Request__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__Land_Request * data = NULL; - if (size) { - data = (airsim_interfaces__srv__Land_Request *)calloc(size, sizeof(airsim_interfaces__srv__Land_Request)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__Land_Request__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__Land_Request__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__Land_Request__Sequence__fini(airsim_interfaces__srv__Land_Request__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__Land_Request__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__Land_Request__Sequence * -airsim_interfaces__srv__Land_Request__Sequence__create(size_t size) -{ - airsim_interfaces__srv__Land_Request__Sequence * array = (airsim_interfaces__srv__Land_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__Land_Request__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__Land_Request__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__Land_Request__Sequence__destroy(airsim_interfaces__srv__Land_Request__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__Land_Request__Sequence__fini(array); - } - free(array); -} - - -bool -airsim_interfaces__srv__Land_Response__init(airsim_interfaces__srv__Land_Response * msg) -{ - if (!msg) { - return false; - } - // success - return true; -} - -void -airsim_interfaces__srv__Land_Response__fini(airsim_interfaces__srv__Land_Response * msg) -{ - if (!msg) { - return; - } - // success -} - -airsim_interfaces__srv__Land_Response * -airsim_interfaces__srv__Land_Response__create() -{ - airsim_interfaces__srv__Land_Response * msg = (airsim_interfaces__srv__Land_Response *)malloc(sizeof(airsim_interfaces__srv__Land_Response)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__Land_Response)); - bool success = airsim_interfaces__srv__Land_Response__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__Land_Response__destroy(airsim_interfaces__srv__Land_Response * msg) -{ - if (msg) { - airsim_interfaces__srv__Land_Response__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__Land_Response__Sequence__init(airsim_interfaces__srv__Land_Response__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__Land_Response * data = NULL; - if (size) { - data = (airsim_interfaces__srv__Land_Response *)calloc(size, sizeof(airsim_interfaces__srv__Land_Response)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__Land_Response__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__Land_Response__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__Land_Response__Sequence__fini(airsim_interfaces__srv__Land_Response__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__Land_Response__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__Land_Response__Sequence * -airsim_interfaces__srv__Land_Response__Sequence__create(size_t size) -{ - airsim_interfaces__srv__Land_Response__Sequence * array = (airsim_interfaces__srv__Land_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__Land_Response__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__Land_Response__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__Land_Response__Sequence__destroy(airsim_interfaces__srv__Land_Response__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__Land_Response__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.h deleted file mode 100644 index d6f41984b0..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__functions.h +++ /dev/null @@ -1,223 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/srv/detail/land__struct.h" - -/// Initialize srv/Land message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__Land_Request - * )) before or use - * airsim_interfaces__srv__Land_Request__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Land_Request__init(airsim_interfaces__srv__Land_Request * msg); - -/// Finalize srv/Land message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Land_Request__fini(airsim_interfaces__srv__Land_Request * msg); - -/// Create srv/Land message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__Land_Request__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Land_Request * -airsim_interfaces__srv__Land_Request__create(); - -/// Destroy srv/Land message. -/** - * It calls - * airsim_interfaces__srv__Land_Request__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Land_Request__destroy(airsim_interfaces__srv__Land_Request * msg); - - -/// Initialize array of srv/Land messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__Land_Request__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Land_Request__Sequence__init(airsim_interfaces__srv__Land_Request__Sequence * array, size_t size); - -/// Finalize array of srv/Land messages. -/** - * It calls - * airsim_interfaces__srv__Land_Request__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Land_Request__Sequence__fini(airsim_interfaces__srv__Land_Request__Sequence * array); - -/// Create array of srv/Land messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__Land_Request__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Land_Request__Sequence * -airsim_interfaces__srv__Land_Request__Sequence__create(size_t size); - -/// Destroy array of srv/Land messages. -/** - * It calls - * airsim_interfaces__srv__Land_Request__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Land_Request__Sequence__destroy(airsim_interfaces__srv__Land_Request__Sequence * array); - -/// Initialize srv/Land message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__Land_Response - * )) before or use - * airsim_interfaces__srv__Land_Response__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Land_Response__init(airsim_interfaces__srv__Land_Response * msg); - -/// Finalize srv/Land message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Land_Response__fini(airsim_interfaces__srv__Land_Response * msg); - -/// Create srv/Land message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__Land_Response__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Land_Response * -airsim_interfaces__srv__Land_Response__create(); - -/// Destroy srv/Land message. -/** - * It calls - * airsim_interfaces__srv__Land_Response__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Land_Response__destroy(airsim_interfaces__srv__Land_Response * msg); - - -/// Initialize array of srv/Land messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__Land_Response__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Land_Response__Sequence__init(airsim_interfaces__srv__Land_Response__Sequence * array, size_t size); - -/// Finalize array of srv/Land messages. -/** - * It calls - * airsim_interfaces__srv__Land_Response__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Land_Response__Sequence__fini(airsim_interfaces__srv__Land_Response__Sequence * array); - -/// Create array of srv/Land messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__Land_Response__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Land_Response__Sequence * -airsim_interfaces__srv__Land_Response__Sequence__create(size_t size); - -/// Destroy array of srv/Land messages. -/** - * It calls - * airsim_interfaces__srv__Land_Response__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Land_Response__Sequence__destroy(airsim_interfaces__srv__Land_Response__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index 37e18d47f0..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,87 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__Land_Request( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__Land_Request( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Land_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__Land_Response( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__Land_Response( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Land_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Land)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index 82a3f552a6..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,175 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/srv/detail/land__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::Land_Request & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::Land_Request & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::Land_Request & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_Land_Request( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Land_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/land__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -// already included above -// #include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::Land_Response & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::Land_Response & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::Land_Response & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_Land_Response( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Land_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rmw/types.h" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Land)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 81d4249c0b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,47 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Request)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Response)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index da6842412f..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,67 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.h deleted file mode 100644 index 10885e1a32..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.h +++ /dev/null @@ -1,59 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Struct defined in srv/Land in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__Land_Request -{ - bool wait_on_last_task; -} airsim_interfaces__srv__Land_Request; - -// Struct for a sequence of airsim_interfaces__srv__Land_Request. -typedef struct airsim_interfaces__srv__Land_Request__Sequence -{ - airsim_interfaces__srv__Land_Request * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__Land_Request__Sequence; - - -// Constants defined in the message - -// Struct defined in srv/Land in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__Land_Response -{ - bool success; -} airsim_interfaces__srv__Land_Response; - -// Struct for a sequence of airsim_interfaces__srv__Land_Response. -typedef struct airsim_interfaces__srv__Land_Response__Sequence -{ - airsim_interfaces__srv__Land_Response * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__Land_Response__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.hpp deleted file mode 100644 index 29c5235cd2..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__struct.hpp +++ /dev/null @@ -1,260 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__Land_Request __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__Land_Request __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct Land_Request_ -{ - using Type = Land_Request_; - - explicit Land_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->wait_on_last_task = false; - } - } - - explicit Land_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->wait_on_last_task = false; - } - } - - // field types and members - using _wait_on_last_task_type = - bool; - _wait_on_last_task_type wait_on_last_task; - - // setters for named parameter idiom - Type & set__wait_on_last_task( - const bool & _arg) - { - this->wait_on_last_task = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::Land_Request_ *; - using ConstRawPtr = - const airsim_interfaces::srv::Land_Request_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__Land_Request - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__Land_Request - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const Land_Request_ & other) const - { - if (this->wait_on_last_task != other.wait_on_last_task) { - return false; - } - return true; - } - bool operator!=(const Land_Request_ & other) const - { - return !this->operator==(other); - } -}; // struct Land_Request_ - -// alias to use template instance with default allocator -using Land_Request = - airsim_interfaces::srv::Land_Request_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__Land_Response __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__Land_Response __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct Land_Response_ -{ - using Type = Land_Response_; - - explicit Land_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - explicit Land_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - // field types and members - using _success_type = - bool; - _success_type success; - - // setters for named parameter idiom - Type & set__success( - const bool & _arg) - { - this->success = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::Land_Response_ *; - using ConstRawPtr = - const airsim_interfaces::srv::Land_Response_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__Land_Response - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__Land_Response - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const Land_Response_ & other) const - { - if (this->success != other.success) { - return false; - } - return true; - } - bool operator!=(const Land_Response_ & other) const - { - return !this->operator==(other); - } -}; // struct Land_Response_ - -// alias to use template instance with default allocator -using Land_Response = - airsim_interfaces::srv::Land_Response_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - -namespace airsim_interfaces -{ - -namespace srv -{ - -struct Land -{ - using Request = airsim_interfaces::srv::Land_Request; - using Response = airsim_interfaces::srv::Land_Response; -}; - -} // namespace srv - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__traits.hpp deleted file mode 100644 index 0da3e5830d..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__traits.hpp +++ /dev/null @@ -1,126 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__TRAITS_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__TRAITS_HPP_ - -#include "airsim_interfaces/srv/detail/land__struct.hpp" -#include -#include -#include - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::Land_Request"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/Land_Request"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::Land_Response"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/Land_Response"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::Land"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/Land"; -} - -template<> -struct has_fixed_size - : std::integral_constant< - bool, - has_fixed_size::value && - has_fixed_size::value - > -{ -}; - -template<> -struct has_bounded_size - : std::integral_constant< - bool, - has_bounded_size::value && - has_bounded_size::value - > -{ -}; - -template<> -struct is_service - : std::true_type -{ -}; - -template<> -struct is_service_request - : std::true_type -{ -}; - -template<> -struct is_service_response - : std::true_type -{ -}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.c deleted file mode 100644 index a1e7a5d068..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.c +++ /dev/null @@ -1,224 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/srv/detail/land__functions.h" -#include "airsim_interfaces/srv/detail/land__struct.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -void Land_Request__rosidl_typesupport_introspection_c__Land_Request_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__Land_Request__init(message_memory); -} - -void Land_Request__rosidl_typesupport_introspection_c__Land_Request_fini_function(void * message_memory) -{ - airsim_interfaces__srv__Land_Request__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_member_array[1] = { - { - "wait_on_last_task", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__Land_Request, wait_on_last_task), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_members = { - "airsim_interfaces__srv", // message namespace - "Land_Request", // message name - 1, // number of fields - sizeof(airsim_interfaces__srv__Land_Request), - Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_member_array, // message members - Land_Request__rosidl_typesupport_introspection_c__Land_Request_init_function, // function to initialize message memory (memory has to be allocated) - Land_Request__rosidl_typesupport_introspection_c__Land_Request_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_type_support_handle = { - 0, - &Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Request)() { - if (!Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_type_support_handle.typesupport_identifier) { - Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &Land_Request__rosidl_typesupport_introspection_c__Land_Request_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "rosidl_typesupport_introspection_c/field_types.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -// already included above -// #include "rosidl_typesupport_introspection_c/message_introspection.h" -// already included above -// #include "airsim_interfaces/srv/detail/land__functions.h" -// already included above -// #include "airsim_interfaces/srv/detail/land__struct.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -void Land_Response__rosidl_typesupport_introspection_c__Land_Response_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__Land_Response__init(message_memory); -} - -void Land_Response__rosidl_typesupport_introspection_c__Land_Response_fini_function(void * message_memory) -{ - airsim_interfaces__srv__Land_Response__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_member_array[1] = { - { - "success", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__Land_Response, success), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_members = { - "airsim_interfaces__srv", // message namespace - "Land_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces__srv__Land_Response), - Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_member_array, // message members - Land_Response__rosidl_typesupport_introspection_c__Land_Response_init_function, // function to initialize message memory (memory has to be allocated) - Land_Response__rosidl_typesupport_introspection_c__Land_Response_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_type_support_handle = { - 0, - &Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Response)() { - if (!Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_type_support_handle.typesupport_identifier) { - Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &Land_Response__rosidl_typesupport_introspection_c__Land_Response_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/land__rosidl_typesupport_introspection_c.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/service_introspection.h" - -// this is intentionally not const to allow initialization later to prevent an initialization race -static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_members = { - "airsim_interfaces__srv", // service namespace - "Land", // service name - // these two fields are initialized below on the first access - NULL, // request message - // airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_Request_message_type_support_handle, - NULL // response message - // airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_Response_message_type_support_handle -}; - -static rosidl_service_type_support_t airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_type_support_handle = { - 0, - &airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_members, - get_service_typesupport_handle_function, -}; - -// Forward declaration of request/response type support functions -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Request)(); - -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Response)(); - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land)() { - if (!airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_type_support_handle.typesupport_identifier) { - airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - rosidl_typesupport_introspection_c__ServiceMembers * service_members = - (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_type_support_handle.data; - - if (!service_members->request_members_) { - service_members->request_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Request)()->data; - } - if (!service_members->response_members_) { - service_members->response_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Land_Response)()->data; - } - - return &airsim_interfaces__srv__detail__land__rosidl_typesupport_introspection_c__Land_service_type_support_handle; -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.cpp deleted file mode 100644 index ecc6adc5fa..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.cpp +++ /dev/null @@ -1,332 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/srv/detail/land__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void Land_Request_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::Land_Request(_init); -} - -void Land_Request_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~Land_Request(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember Land_Request_message_member_array[1] = { - { - "wait_on_last_task", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::Land_Request, wait_on_last_task), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers Land_Request_message_members = { - "airsim_interfaces::srv", // message namespace - "Land_Request", // message name - 1, // number of fields - sizeof(airsim_interfaces::srv::Land_Request), - Land_Request_message_member_array, // message members - Land_Request_init_function, // function to initialize message memory (memory has to be allocated) - Land_Request_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t Land_Request_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &Land_Request_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Land_Request_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land_Request)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Land_Request_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "array" -// already included above -// #include "cstddef" -// already included above -// #include "string" -// already included above -// #include "vector" -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/srv/detail/land__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void Land_Response_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::Land_Response(_init); -} - -void Land_Response_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~Land_Response(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember Land_Response_message_member_array[1] = { - { - "success", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::Land_Response, success), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers Land_Response_message_members = { - "airsim_interfaces::srv", // message namespace - "Land_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces::srv::Land_Response), - Land_Response_message_member_array, // message members - Land_Response_init_function, // function to initialize message memory (memory has to be allocated) - Land_Response_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t Land_Response_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &Land_Response_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Land_Response_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land_Response)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Land_Response_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/land__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -// this is intentionally not const to allow initialization later to prevent an initialization race -static ::rosidl_typesupport_introspection_cpp::ServiceMembers Land_service_members = { - "airsim_interfaces::srv", // service namespace - "Land", // service name - // these two fields are initialized below on the first access - // see get_service_type_support_handle() - nullptr, // request message - nullptr // response message -}; - -static const rosidl_service_type_support_t Land_service_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &Land_service_members, - get_service_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -get_service_type_support_handle() -{ - // get a handle to the value to be returned - auto service_type_support = - &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Land_service_type_support_handle; - // get a non-const and properly typed version of the data void * - auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( - static_cast( - service_type_support->data)); - // make sure that both the request_members_ and the response_members_ are initialized - // if they are not, initialize them - if ( - service_members->request_members_ == nullptr || - service_members->response_members_ == nullptr) - { - // initialize the request_members_ with the static function from the external library - service_members->request_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::Land_Request - >()->data - ); - // initialize the response_members_ with the static function from the external library - service_members->response_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::Land_Response - >()->data - ); - } - // finally return the properly initialized service_type_support handle - return service_type_support; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Land)() { - return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.h deleted file mode 100644 index d66e9b65d2..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land__type_support.h +++ /dev/null @@ -1,58 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - Land_Request -)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - Land_Response -)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - Land -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__builder.hpp deleted file mode 100644 index 0a2e432b87..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__builder.hpp +++ /dev/null @@ -1,113 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__BUILDER_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__BUILDER_HPP_ - -#include "airsim_interfaces/srv/detail/land_group__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_LandGroup_Request_wait_on_last_task -{ -public: - explicit Init_LandGroup_Request_wait_on_last_task(::airsim_interfaces::srv::LandGroup_Request & msg) - : msg_(msg) - {} - ::airsim_interfaces::srv::LandGroup_Request wait_on_last_task(::airsim_interfaces::srv::LandGroup_Request::_wait_on_last_task_type arg) - { - msg_.wait_on_last_task = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::LandGroup_Request msg_; -}; - -class Init_LandGroup_Request_vehicle_names -{ -public: - Init_LandGroup_Request_vehicle_names() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_LandGroup_Request_wait_on_last_task vehicle_names(::airsim_interfaces::srv::LandGroup_Request::_vehicle_names_type arg) - { - msg_.vehicle_names = std::move(arg); - return Init_LandGroup_Request_wait_on_last_task(msg_); - } - -private: - ::airsim_interfaces::srv::LandGroup_Request msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::LandGroup_Request>() -{ - return airsim_interfaces::srv::builder::Init_LandGroup_Request_vehicle_names(); -} - -} // namespace airsim_interfaces - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_LandGroup_Response_success -{ -public: - Init_LandGroup_Response_success() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - ::airsim_interfaces::srv::LandGroup_Response success(::airsim_interfaces::srv::LandGroup_Response::_success_type arg) - { - msg_.success = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::LandGroup_Response msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::LandGroup_Response>() -{ - return airsim_interfaces::srv::builder::Init_LandGroup_Response_success(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.c deleted file mode 100644 index 0ff04cf468..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.c +++ /dev/null @@ -1,277 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/srv/detail/land_group__functions.h" - -#include -#include -#include -#include - -// Include directives for member types -// Member `vehicle_names` -#include "rosidl_runtime_c/string_functions.h" - -bool -airsim_interfaces__srv__LandGroup_Request__init(airsim_interfaces__srv__LandGroup_Request * msg) -{ - if (!msg) { - return false; - } - // vehicle_names - if (!rosidl_runtime_c__String__Sequence__init(&msg->vehicle_names, 0)) { - airsim_interfaces__srv__LandGroup_Request__fini(msg); - return false; - } - // wait_on_last_task - return true; -} - -void -airsim_interfaces__srv__LandGroup_Request__fini(airsim_interfaces__srv__LandGroup_Request * msg) -{ - if (!msg) { - return; - } - // vehicle_names - rosidl_runtime_c__String__Sequence__fini(&msg->vehicle_names); - // wait_on_last_task -} - -airsim_interfaces__srv__LandGroup_Request * -airsim_interfaces__srv__LandGroup_Request__create() -{ - airsim_interfaces__srv__LandGroup_Request * msg = (airsim_interfaces__srv__LandGroup_Request *)malloc(sizeof(airsim_interfaces__srv__LandGroup_Request)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__LandGroup_Request)); - bool success = airsim_interfaces__srv__LandGroup_Request__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__LandGroup_Request__destroy(airsim_interfaces__srv__LandGroup_Request * msg) -{ - if (msg) { - airsim_interfaces__srv__LandGroup_Request__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__LandGroup_Request__Sequence__init(airsim_interfaces__srv__LandGroup_Request__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__LandGroup_Request * data = NULL; - if (size) { - data = (airsim_interfaces__srv__LandGroup_Request *)calloc(size, sizeof(airsim_interfaces__srv__LandGroup_Request)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__LandGroup_Request__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__LandGroup_Request__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__LandGroup_Request__Sequence__fini(airsim_interfaces__srv__LandGroup_Request__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__LandGroup_Request__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__LandGroup_Request__Sequence * -airsim_interfaces__srv__LandGroup_Request__Sequence__create(size_t size) -{ - airsim_interfaces__srv__LandGroup_Request__Sequence * array = (airsim_interfaces__srv__LandGroup_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__LandGroup_Request__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__LandGroup_Request__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__LandGroup_Request__Sequence__destroy(airsim_interfaces__srv__LandGroup_Request__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__LandGroup_Request__Sequence__fini(array); - } - free(array); -} - - -bool -airsim_interfaces__srv__LandGroup_Response__init(airsim_interfaces__srv__LandGroup_Response * msg) -{ - if (!msg) { - return false; - } - // success - return true; -} - -void -airsim_interfaces__srv__LandGroup_Response__fini(airsim_interfaces__srv__LandGroup_Response * msg) -{ - if (!msg) { - return; - } - // success -} - -airsim_interfaces__srv__LandGroup_Response * -airsim_interfaces__srv__LandGroup_Response__create() -{ - airsim_interfaces__srv__LandGroup_Response * msg = (airsim_interfaces__srv__LandGroup_Response *)malloc(sizeof(airsim_interfaces__srv__LandGroup_Response)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__LandGroup_Response)); - bool success = airsim_interfaces__srv__LandGroup_Response__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__LandGroup_Response__destroy(airsim_interfaces__srv__LandGroup_Response * msg) -{ - if (msg) { - airsim_interfaces__srv__LandGroup_Response__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__LandGroup_Response__Sequence__init(airsim_interfaces__srv__LandGroup_Response__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__LandGroup_Response * data = NULL; - if (size) { - data = (airsim_interfaces__srv__LandGroup_Response *)calloc(size, sizeof(airsim_interfaces__srv__LandGroup_Response)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__LandGroup_Response__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__LandGroup_Response__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__LandGroup_Response__Sequence__fini(airsim_interfaces__srv__LandGroup_Response__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__LandGroup_Response__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__LandGroup_Response__Sequence * -airsim_interfaces__srv__LandGroup_Response__Sequence__create(size_t size) -{ - airsim_interfaces__srv__LandGroup_Response__Sequence * array = (airsim_interfaces__srv__LandGroup_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__LandGroup_Response__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__LandGroup_Response__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__LandGroup_Response__Sequence__destroy(airsim_interfaces__srv__LandGroup_Response__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__LandGroup_Response__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.h deleted file mode 100644 index d8f4b2c917..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__functions.h +++ /dev/null @@ -1,223 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/srv/detail/land_group__struct.h" - -/// Initialize srv/LandGroup message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__LandGroup_Request - * )) before or use - * airsim_interfaces__srv__LandGroup_Request__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__LandGroup_Request__init(airsim_interfaces__srv__LandGroup_Request * msg); - -/// Finalize srv/LandGroup message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__LandGroup_Request__fini(airsim_interfaces__srv__LandGroup_Request * msg); - -/// Create srv/LandGroup message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__LandGroup_Request__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__LandGroup_Request * -airsim_interfaces__srv__LandGroup_Request__create(); - -/// Destroy srv/LandGroup message. -/** - * It calls - * airsim_interfaces__srv__LandGroup_Request__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__LandGroup_Request__destroy(airsim_interfaces__srv__LandGroup_Request * msg); - - -/// Initialize array of srv/LandGroup messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__LandGroup_Request__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__LandGroup_Request__Sequence__init(airsim_interfaces__srv__LandGroup_Request__Sequence * array, size_t size); - -/// Finalize array of srv/LandGroup messages. -/** - * It calls - * airsim_interfaces__srv__LandGroup_Request__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__LandGroup_Request__Sequence__fini(airsim_interfaces__srv__LandGroup_Request__Sequence * array); - -/// Create array of srv/LandGroup messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__LandGroup_Request__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__LandGroup_Request__Sequence * -airsim_interfaces__srv__LandGroup_Request__Sequence__create(size_t size); - -/// Destroy array of srv/LandGroup messages. -/** - * It calls - * airsim_interfaces__srv__LandGroup_Request__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__LandGroup_Request__Sequence__destroy(airsim_interfaces__srv__LandGroup_Request__Sequence * array); - -/// Initialize srv/LandGroup message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__LandGroup_Response - * )) before or use - * airsim_interfaces__srv__LandGroup_Response__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__LandGroup_Response__init(airsim_interfaces__srv__LandGroup_Response * msg); - -/// Finalize srv/LandGroup message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__LandGroup_Response__fini(airsim_interfaces__srv__LandGroup_Response * msg); - -/// Create srv/LandGroup message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__LandGroup_Response__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__LandGroup_Response * -airsim_interfaces__srv__LandGroup_Response__create(); - -/// Destroy srv/LandGroup message. -/** - * It calls - * airsim_interfaces__srv__LandGroup_Response__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__LandGroup_Response__destroy(airsim_interfaces__srv__LandGroup_Response * msg); - - -/// Initialize array of srv/LandGroup messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__LandGroup_Response__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__LandGroup_Response__Sequence__init(airsim_interfaces__srv__LandGroup_Response__Sequence * array, size_t size); - -/// Finalize array of srv/LandGroup messages. -/** - * It calls - * airsim_interfaces__srv__LandGroup_Response__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__LandGroup_Response__Sequence__fini(airsim_interfaces__srv__LandGroup_Response__Sequence * array); - -/// Create array of srv/LandGroup messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__LandGroup_Response__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__LandGroup_Response__Sequence * -airsim_interfaces__srv__LandGroup_Response__Sequence__create(size_t size); - -/// Destroy array of srv/LandGroup messages. -/** - * It calls - * airsim_interfaces__srv__LandGroup_Response__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__LandGroup_Response__Sequence__destroy(airsim_interfaces__srv__LandGroup_Response__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index fbf7c6d7f8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,87 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__LandGroup_Request( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__LandGroup_Request( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, LandGroup_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__LandGroup_Response( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__LandGroup_Response( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, LandGroup_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, LandGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index e8b3c8d5e1..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,175 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/srv/detail/land_group__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::LandGroup_Request & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::LandGroup_Request & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::LandGroup_Request & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_LandGroup_Request( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, LandGroup_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/land_group__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -// already included above -// #include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::LandGroup_Response & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::LandGroup_Response & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::LandGroup_Response & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_LandGroup_Response( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, LandGroup_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rmw/types.h" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, LandGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 66b4949eda..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,47 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Request)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Response)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 272fa09ea1..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,67 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.h deleted file mode 100644 index 03f3b634db..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.h +++ /dev/null @@ -1,64 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'vehicle_names' -#include "rosidl_runtime_c/string.h" - -// Struct defined in srv/LandGroup in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__LandGroup_Request -{ - rosidl_runtime_c__String__Sequence vehicle_names; - bool wait_on_last_task; -} airsim_interfaces__srv__LandGroup_Request; - -// Struct for a sequence of airsim_interfaces__srv__LandGroup_Request. -typedef struct airsim_interfaces__srv__LandGroup_Request__Sequence -{ - airsim_interfaces__srv__LandGroup_Request * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__LandGroup_Request__Sequence; - - -// Constants defined in the message - -// Struct defined in srv/LandGroup in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__LandGroup_Response -{ - bool success; -} airsim_interfaces__srv__LandGroup_Response; - -// Struct for a sequence of airsim_interfaces__srv__LandGroup_Response. -typedef struct airsim_interfaces__srv__LandGroup_Response__Sequence -{ - airsim_interfaces__srv__LandGroup_Response * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__LandGroup_Response__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.hpp deleted file mode 100644 index a87062cd8b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__struct.hpp +++ /dev/null @@ -1,272 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__LandGroup_Request __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__LandGroup_Request __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct LandGroup_Request_ -{ - using Type = LandGroup_Request_; - - explicit LandGroup_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->wait_on_last_task = false; - } - } - - explicit LandGroup_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->wait_on_last_task = false; - } - } - - // field types and members - using _vehicle_names_type = - std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other>; - _vehicle_names_type vehicle_names; - using _wait_on_last_task_type = - bool; - _wait_on_last_task_type wait_on_last_task; - - // setters for named parameter idiom - Type & set__vehicle_names( - const std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other> & _arg) - { - this->vehicle_names = _arg; - return *this; - } - Type & set__wait_on_last_task( - const bool & _arg) - { - this->wait_on_last_task = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::LandGroup_Request_ *; - using ConstRawPtr = - const airsim_interfaces::srv::LandGroup_Request_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__LandGroup_Request - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__LandGroup_Request - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const LandGroup_Request_ & other) const - { - if (this->vehicle_names != other.vehicle_names) { - return false; - } - if (this->wait_on_last_task != other.wait_on_last_task) { - return false; - } - return true; - } - bool operator!=(const LandGroup_Request_ & other) const - { - return !this->operator==(other); - } -}; // struct LandGroup_Request_ - -// alias to use template instance with default allocator -using LandGroup_Request = - airsim_interfaces::srv::LandGroup_Request_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__LandGroup_Response __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__LandGroup_Response __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct LandGroup_Response_ -{ - using Type = LandGroup_Response_; - - explicit LandGroup_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - explicit LandGroup_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - // field types and members - using _success_type = - bool; - _success_type success; - - // setters for named parameter idiom - Type & set__success( - const bool & _arg) - { - this->success = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::LandGroup_Response_ *; - using ConstRawPtr = - const airsim_interfaces::srv::LandGroup_Response_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__LandGroup_Response - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__LandGroup_Response - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const LandGroup_Response_ & other) const - { - if (this->success != other.success) { - return false; - } - return true; - } - bool operator!=(const LandGroup_Response_ & other) const - { - return !this->operator==(other); - } -}; // struct LandGroup_Response_ - -// alias to use template instance with default allocator -using LandGroup_Response = - airsim_interfaces::srv::LandGroup_Response_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - -namespace airsim_interfaces -{ - -namespace srv -{ - -struct LandGroup -{ - using Request = airsim_interfaces::srv::LandGroup_Request; - using Response = airsim_interfaces::srv::LandGroup_Response; -}; - -} // namespace srv - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__traits.hpp deleted file mode 100644 index 93d742835b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__traits.hpp +++ /dev/null @@ -1,126 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TRAITS_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TRAITS_HPP_ - -#include "airsim_interfaces/srv/detail/land_group__struct.hpp" -#include -#include -#include - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::LandGroup_Request"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/LandGroup_Request"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::LandGroup_Response"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/LandGroup_Response"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::LandGroup"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/LandGroup"; -} - -template<> -struct has_fixed_size - : std::integral_constant< - bool, - has_fixed_size::value && - has_fixed_size::value - > -{ -}; - -template<> -struct has_bounded_size - : std::integral_constant< - bool, - has_bounded_size::value && - has_bounded_size::value - > -{ -}; - -template<> -struct is_service - : std::true_type -{ -}; - -template<> -struct is_service_request - : std::true_type -{ -}; - -template<> -struct is_service_response - : std::true_type -{ -}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.c deleted file mode 100644 index c0b28dfd84..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.c +++ /dev/null @@ -1,243 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/srv/detail/land_group__functions.h" -#include "airsim_interfaces/srv/detail/land_group__struct.h" - - -// Include directives for member types -// Member `vehicle_names` -#include "rosidl_runtime_c/string_functions.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__LandGroup_Request__init(message_memory); -} - -void LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_fini_function(void * message_memory) -{ - airsim_interfaces__srv__LandGroup_Request__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_member_array[2] = { - { - "vehicle_names", // name - rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type - 0, // upper bound of string - NULL, // members of sub message - true, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__LandGroup_Request, vehicle_names), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "wait_on_last_task", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__LandGroup_Request, wait_on_last_task), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_members = { - "airsim_interfaces__srv", // message namespace - "LandGroup_Request", // message name - 2, // number of fields - sizeof(airsim_interfaces__srv__LandGroup_Request), - LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_member_array, // message members - LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_init_function, // function to initialize message memory (memory has to be allocated) - LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_type_support_handle = { - 0, - &LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Request)() { - if (!LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_type_support_handle.typesupport_identifier) { - LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &LandGroup_Request__rosidl_typesupport_introspection_c__LandGroup_Request_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "rosidl_typesupport_introspection_c/field_types.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -// already included above -// #include "rosidl_typesupport_introspection_c/message_introspection.h" -// already included above -// #include "airsim_interfaces/srv/detail/land_group__functions.h" -// already included above -// #include "airsim_interfaces/srv/detail/land_group__struct.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -void LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__LandGroup_Response__init(message_memory); -} - -void LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_fini_function(void * message_memory) -{ - airsim_interfaces__srv__LandGroup_Response__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_member_array[1] = { - { - "success", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__LandGroup_Response, success), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_members = { - "airsim_interfaces__srv", // message namespace - "LandGroup_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces__srv__LandGroup_Response), - LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_member_array, // message members - LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_init_function, // function to initialize message memory (memory has to be allocated) - LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_type_support_handle = { - 0, - &LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Response)() { - if (!LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_type_support_handle.typesupport_identifier) { - LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &LandGroup_Response__rosidl_typesupport_introspection_c__LandGroup_Response_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/land_group__rosidl_typesupport_introspection_c.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/service_introspection.h" - -// this is intentionally not const to allow initialization later to prevent an initialization race -static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_members = { - "airsim_interfaces__srv", // service namespace - "LandGroup", // service name - // these two fields are initialized below on the first access - NULL, // request message - // airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_Request_message_type_support_handle, - NULL // response message - // airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_Response_message_type_support_handle -}; - -static rosidl_service_type_support_t airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_type_support_handle = { - 0, - &airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_members, - get_service_typesupport_handle_function, -}; - -// Forward declaration of request/response type support functions -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Request)(); - -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Response)(); - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup)() { - if (!airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_type_support_handle.typesupport_identifier) { - airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - rosidl_typesupport_introspection_c__ServiceMembers * service_members = - (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_type_support_handle.data; - - if (!service_members->request_members_) { - service_members->request_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Request)()->data; - } - if (!service_members->response_members_) { - service_members->response_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, LandGroup_Response)()->data; - } - - return &airsim_interfaces__srv__detail__land_group__rosidl_typesupport_introspection_c__LandGroup_service_type_support_handle; -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.cpp deleted file mode 100644 index 43c306b527..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.cpp +++ /dev/null @@ -1,374 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/srv/detail/land_group__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void LandGroup_Request_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::LandGroup_Request(_init); -} - -void LandGroup_Request_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~LandGroup_Request(); -} - -size_t size_function__LandGroup_Request__vehicle_names(const void * untyped_member) -{ - const auto * member = reinterpret_cast *>(untyped_member); - return member->size(); -} - -const void * get_const_function__LandGroup_Request__vehicle_names(const void * untyped_member, size_t index) -{ - const auto & member = - *reinterpret_cast *>(untyped_member); - return &member[index]; -} - -void * get_function__LandGroup_Request__vehicle_names(void * untyped_member, size_t index) -{ - auto & member = - *reinterpret_cast *>(untyped_member); - return &member[index]; -} - -void resize_function__LandGroup_Request__vehicle_names(void * untyped_member, size_t size) -{ - auto * member = - reinterpret_cast *>(untyped_member); - member->resize(size); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember LandGroup_Request_message_member_array[2] = { - { - "vehicle_names", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type - 0, // upper bound of string - nullptr, // members of sub message - true, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::LandGroup_Request, vehicle_names), // bytes offset in struct - nullptr, // default value - size_function__LandGroup_Request__vehicle_names, // size() function pointer - get_const_function__LandGroup_Request__vehicle_names, // get_const(index) function pointer - get_function__LandGroup_Request__vehicle_names, // get(index) function pointer - resize_function__LandGroup_Request__vehicle_names // resize(index) function pointer - }, - { - "wait_on_last_task", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::LandGroup_Request, wait_on_last_task), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers LandGroup_Request_message_members = { - "airsim_interfaces::srv", // message namespace - "LandGroup_Request", // message name - 2, // number of fields - sizeof(airsim_interfaces::srv::LandGroup_Request), - LandGroup_Request_message_member_array, // message members - LandGroup_Request_init_function, // function to initialize message memory (memory has to be allocated) - LandGroup_Request_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t LandGroup_Request_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &LandGroup_Request_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::LandGroup_Request_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup_Request)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::LandGroup_Request_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "array" -// already included above -// #include "cstddef" -// already included above -// #include "string" -// already included above -// #include "vector" -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/srv/detail/land_group__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void LandGroup_Response_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::LandGroup_Response(_init); -} - -void LandGroup_Response_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~LandGroup_Response(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember LandGroup_Response_message_member_array[1] = { - { - "success", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::LandGroup_Response, success), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers LandGroup_Response_message_members = { - "airsim_interfaces::srv", // message namespace - "LandGroup_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces::srv::LandGroup_Response), - LandGroup_Response_message_member_array, // message members - LandGroup_Response_init_function, // function to initialize message memory (memory has to be allocated) - LandGroup_Response_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t LandGroup_Response_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &LandGroup_Response_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::LandGroup_Response_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup_Response)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::LandGroup_Response_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/land_group__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -// this is intentionally not const to allow initialization later to prevent an initialization race -static ::rosidl_typesupport_introspection_cpp::ServiceMembers LandGroup_service_members = { - "airsim_interfaces::srv", // service namespace - "LandGroup", // service name - // these two fields are initialized below on the first access - // see get_service_type_support_handle() - nullptr, // request message - nullptr // response message -}; - -static const rosidl_service_type_support_t LandGroup_service_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &LandGroup_service_members, - get_service_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -get_service_type_support_handle() -{ - // get a handle to the value to be returned - auto service_type_support = - &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::LandGroup_service_type_support_handle; - // get a non-const and properly typed version of the data void * - auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( - static_cast( - service_type_support->data)); - // make sure that both the request_members_ and the response_members_ are initialized - // if they are not, initialize them - if ( - service_members->request_members_ == nullptr || - service_members->response_members_ == nullptr) - { - // initialize the request_members_ with the static function from the external library - service_members->request_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::LandGroup_Request - >()->data - ); - // initialize the response_members_ with the static function from the external library - service_members->response_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::LandGroup_Response - >()->data - ); - } - // finally return the properly initialized service_type_support handle - return service_type_support; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, LandGroup)() { - return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.h deleted file mode 100644 index 8ea9305e94..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/land_group__type_support.h +++ /dev/null @@ -1,58 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - LandGroup_Request -)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - LandGroup_Response -)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - LandGroup -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__LAND_GROUP__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__builder.hpp deleted file mode 100644 index 0f38b37d68..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__builder.hpp +++ /dev/null @@ -1,97 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__BUILDER_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__BUILDER_HPP_ - -#include "airsim_interfaces/srv/detail/reset__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_Reset_Request_wait_on_last_task -{ -public: - Init_Reset_Request_wait_on_last_task() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - ::airsim_interfaces::srv::Reset_Request wait_on_last_task(::airsim_interfaces::srv::Reset_Request::_wait_on_last_task_type arg) - { - msg_.wait_on_last_task = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::Reset_Request msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::Reset_Request>() -{ - return airsim_interfaces::srv::builder::Init_Reset_Request_wait_on_last_task(); -} - -} // namespace airsim_interfaces - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_Reset_Response_success -{ -public: - Init_Reset_Response_success() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - ::airsim_interfaces::srv::Reset_Response success(::airsim_interfaces::srv::Reset_Response::_success_type arg) - { - msg_.success = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::Reset_Response msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::Reset_Response>() -{ - return airsim_interfaces::srv::builder::Init_Reset_Response_success(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.c deleted file mode 100644 index 01cd47116e..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.c +++ /dev/null @@ -1,266 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/srv/detail/reset__functions.h" - -#include -#include -#include -#include - -bool -airsim_interfaces__srv__Reset_Request__init(airsim_interfaces__srv__Reset_Request * msg) -{ - if (!msg) { - return false; - } - // wait_on_last_task - return true; -} - -void -airsim_interfaces__srv__Reset_Request__fini(airsim_interfaces__srv__Reset_Request * msg) -{ - if (!msg) { - return; - } - // wait_on_last_task -} - -airsim_interfaces__srv__Reset_Request * -airsim_interfaces__srv__Reset_Request__create() -{ - airsim_interfaces__srv__Reset_Request * msg = (airsim_interfaces__srv__Reset_Request *)malloc(sizeof(airsim_interfaces__srv__Reset_Request)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__Reset_Request)); - bool success = airsim_interfaces__srv__Reset_Request__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__Reset_Request__destroy(airsim_interfaces__srv__Reset_Request * msg) -{ - if (msg) { - airsim_interfaces__srv__Reset_Request__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__Reset_Request__Sequence__init(airsim_interfaces__srv__Reset_Request__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__Reset_Request * data = NULL; - if (size) { - data = (airsim_interfaces__srv__Reset_Request *)calloc(size, sizeof(airsim_interfaces__srv__Reset_Request)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__Reset_Request__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__Reset_Request__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__Reset_Request__Sequence__fini(airsim_interfaces__srv__Reset_Request__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__Reset_Request__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__Reset_Request__Sequence * -airsim_interfaces__srv__Reset_Request__Sequence__create(size_t size) -{ - airsim_interfaces__srv__Reset_Request__Sequence * array = (airsim_interfaces__srv__Reset_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__Reset_Request__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__Reset_Request__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__Reset_Request__Sequence__destroy(airsim_interfaces__srv__Reset_Request__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__Reset_Request__Sequence__fini(array); - } - free(array); -} - - -bool -airsim_interfaces__srv__Reset_Response__init(airsim_interfaces__srv__Reset_Response * msg) -{ - if (!msg) { - return false; - } - // success - return true; -} - -void -airsim_interfaces__srv__Reset_Response__fini(airsim_interfaces__srv__Reset_Response * msg) -{ - if (!msg) { - return; - } - // success -} - -airsim_interfaces__srv__Reset_Response * -airsim_interfaces__srv__Reset_Response__create() -{ - airsim_interfaces__srv__Reset_Response * msg = (airsim_interfaces__srv__Reset_Response *)malloc(sizeof(airsim_interfaces__srv__Reset_Response)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__Reset_Response)); - bool success = airsim_interfaces__srv__Reset_Response__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__Reset_Response__destroy(airsim_interfaces__srv__Reset_Response * msg) -{ - if (msg) { - airsim_interfaces__srv__Reset_Response__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__Reset_Response__Sequence__init(airsim_interfaces__srv__Reset_Response__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__Reset_Response * data = NULL; - if (size) { - data = (airsim_interfaces__srv__Reset_Response *)calloc(size, sizeof(airsim_interfaces__srv__Reset_Response)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__Reset_Response__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__Reset_Response__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__Reset_Response__Sequence__fini(airsim_interfaces__srv__Reset_Response__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__Reset_Response__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__Reset_Response__Sequence * -airsim_interfaces__srv__Reset_Response__Sequence__create(size_t size) -{ - airsim_interfaces__srv__Reset_Response__Sequence * array = (airsim_interfaces__srv__Reset_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__Reset_Response__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__Reset_Response__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__Reset_Response__Sequence__destroy(airsim_interfaces__srv__Reset_Response__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__Reset_Response__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.h deleted file mode 100644 index 21318019d8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__functions.h +++ /dev/null @@ -1,223 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/srv/detail/reset__struct.h" - -/// Initialize srv/Reset message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__Reset_Request - * )) before or use - * airsim_interfaces__srv__Reset_Request__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Reset_Request__init(airsim_interfaces__srv__Reset_Request * msg); - -/// Finalize srv/Reset message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Reset_Request__fini(airsim_interfaces__srv__Reset_Request * msg); - -/// Create srv/Reset message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__Reset_Request__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Reset_Request * -airsim_interfaces__srv__Reset_Request__create(); - -/// Destroy srv/Reset message. -/** - * It calls - * airsim_interfaces__srv__Reset_Request__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Reset_Request__destroy(airsim_interfaces__srv__Reset_Request * msg); - - -/// Initialize array of srv/Reset messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__Reset_Request__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Reset_Request__Sequence__init(airsim_interfaces__srv__Reset_Request__Sequence * array, size_t size); - -/// Finalize array of srv/Reset messages. -/** - * It calls - * airsim_interfaces__srv__Reset_Request__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Reset_Request__Sequence__fini(airsim_interfaces__srv__Reset_Request__Sequence * array); - -/// Create array of srv/Reset messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__Reset_Request__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Reset_Request__Sequence * -airsim_interfaces__srv__Reset_Request__Sequence__create(size_t size); - -/// Destroy array of srv/Reset messages. -/** - * It calls - * airsim_interfaces__srv__Reset_Request__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Reset_Request__Sequence__destroy(airsim_interfaces__srv__Reset_Request__Sequence * array); - -/// Initialize srv/Reset message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__Reset_Response - * )) before or use - * airsim_interfaces__srv__Reset_Response__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Reset_Response__init(airsim_interfaces__srv__Reset_Response * msg); - -/// Finalize srv/Reset message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Reset_Response__fini(airsim_interfaces__srv__Reset_Response * msg); - -/// Create srv/Reset message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__Reset_Response__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Reset_Response * -airsim_interfaces__srv__Reset_Response__create(); - -/// Destroy srv/Reset message. -/** - * It calls - * airsim_interfaces__srv__Reset_Response__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Reset_Response__destroy(airsim_interfaces__srv__Reset_Response * msg); - - -/// Initialize array of srv/Reset messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__Reset_Response__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Reset_Response__Sequence__init(airsim_interfaces__srv__Reset_Response__Sequence * array, size_t size); - -/// Finalize array of srv/Reset messages. -/** - * It calls - * airsim_interfaces__srv__Reset_Response__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Reset_Response__Sequence__fini(airsim_interfaces__srv__Reset_Response__Sequence * array); - -/// Create array of srv/Reset messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__Reset_Response__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Reset_Response__Sequence * -airsim_interfaces__srv__Reset_Response__Sequence__create(size_t size); - -/// Destroy array of srv/Reset messages. -/** - * It calls - * airsim_interfaces__srv__Reset_Response__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Reset_Response__Sequence__destroy(airsim_interfaces__srv__Reset_Response__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index 69ce4fd27a..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,87 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__Reset_Request( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__Reset_Request( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Reset_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__Reset_Response( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__Reset_Response( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Reset_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Reset)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index dd557643af..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,175 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/srv/detail/reset__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::Reset_Request & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::Reset_Request & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::Reset_Request & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_Reset_Request( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Reset_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/reset__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -// already included above -// #include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::Reset_Response & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::Reset_Response & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::Reset_Response & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_Reset_Response( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Reset_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rmw/types.h" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Reset)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 8157d9f5a3..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,47 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Request)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Response)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 2a2532b931..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,67 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.h deleted file mode 100644 index bef979b8fd..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.h +++ /dev/null @@ -1,59 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Struct defined in srv/Reset in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__Reset_Request -{ - bool wait_on_last_task; -} airsim_interfaces__srv__Reset_Request; - -// Struct for a sequence of airsim_interfaces__srv__Reset_Request. -typedef struct airsim_interfaces__srv__Reset_Request__Sequence -{ - airsim_interfaces__srv__Reset_Request * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__Reset_Request__Sequence; - - -// Constants defined in the message - -// Struct defined in srv/Reset in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__Reset_Response -{ - bool success; -} airsim_interfaces__srv__Reset_Response; - -// Struct for a sequence of airsim_interfaces__srv__Reset_Response. -typedef struct airsim_interfaces__srv__Reset_Response__Sequence -{ - airsim_interfaces__srv__Reset_Response * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__Reset_Response__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.hpp deleted file mode 100644 index d245379fa6..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__struct.hpp +++ /dev/null @@ -1,260 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__Reset_Request __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__Reset_Request __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct Reset_Request_ -{ - using Type = Reset_Request_; - - explicit Reset_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->wait_on_last_task = false; - } - } - - explicit Reset_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->wait_on_last_task = false; - } - } - - // field types and members - using _wait_on_last_task_type = - bool; - _wait_on_last_task_type wait_on_last_task; - - // setters for named parameter idiom - Type & set__wait_on_last_task( - const bool & _arg) - { - this->wait_on_last_task = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::Reset_Request_ *; - using ConstRawPtr = - const airsim_interfaces::srv::Reset_Request_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__Reset_Request - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__Reset_Request - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const Reset_Request_ & other) const - { - if (this->wait_on_last_task != other.wait_on_last_task) { - return false; - } - return true; - } - bool operator!=(const Reset_Request_ & other) const - { - return !this->operator==(other); - } -}; // struct Reset_Request_ - -// alias to use template instance with default allocator -using Reset_Request = - airsim_interfaces::srv::Reset_Request_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__Reset_Response __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__Reset_Response __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct Reset_Response_ -{ - using Type = Reset_Response_; - - explicit Reset_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - explicit Reset_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - // field types and members - using _success_type = - bool; - _success_type success; - - // setters for named parameter idiom - Type & set__success( - const bool & _arg) - { - this->success = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::Reset_Response_ *; - using ConstRawPtr = - const airsim_interfaces::srv::Reset_Response_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__Reset_Response - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__Reset_Response - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const Reset_Response_ & other) const - { - if (this->success != other.success) { - return false; - } - return true; - } - bool operator!=(const Reset_Response_ & other) const - { - return !this->operator==(other); - } -}; // struct Reset_Response_ - -// alias to use template instance with default allocator -using Reset_Response = - airsim_interfaces::srv::Reset_Response_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - -namespace airsim_interfaces -{ - -namespace srv -{ - -struct Reset -{ - using Request = airsim_interfaces::srv::Reset_Request; - using Response = airsim_interfaces::srv::Reset_Response; -}; - -} // namespace srv - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__traits.hpp deleted file mode 100644 index 810c7a6a1b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__traits.hpp +++ /dev/null @@ -1,126 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__TRAITS_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__TRAITS_HPP_ - -#include "airsim_interfaces/srv/detail/reset__struct.hpp" -#include -#include -#include - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::Reset_Request"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/Reset_Request"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::Reset_Response"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/Reset_Response"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::Reset"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/Reset"; -} - -template<> -struct has_fixed_size - : std::integral_constant< - bool, - has_fixed_size::value && - has_fixed_size::value - > -{ -}; - -template<> -struct has_bounded_size - : std::integral_constant< - bool, - has_bounded_size::value && - has_bounded_size::value - > -{ -}; - -template<> -struct is_service - : std::true_type -{ -}; - -template<> -struct is_service_request - : std::true_type -{ -}; - -template<> -struct is_service_response - : std::true_type -{ -}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.c deleted file mode 100644 index 7944bf2f75..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.c +++ /dev/null @@ -1,224 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/srv/detail/reset__functions.h" -#include "airsim_interfaces/srv/detail/reset__struct.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -void Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__Reset_Request__init(message_memory); -} - -void Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_fini_function(void * message_memory) -{ - airsim_interfaces__srv__Reset_Request__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_member_array[1] = { - { - "wait_on_last_task", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__Reset_Request, wait_on_last_task), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_members = { - "airsim_interfaces__srv", // message namespace - "Reset_Request", // message name - 1, // number of fields - sizeof(airsim_interfaces__srv__Reset_Request), - Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_member_array, // message members - Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_init_function, // function to initialize message memory (memory has to be allocated) - Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_type_support_handle = { - 0, - &Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Request)() { - if (!Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_type_support_handle.typesupport_identifier) { - Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &Reset_Request__rosidl_typesupport_introspection_c__Reset_Request_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "rosidl_typesupport_introspection_c/field_types.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -// already included above -// #include "rosidl_typesupport_introspection_c/message_introspection.h" -// already included above -// #include "airsim_interfaces/srv/detail/reset__functions.h" -// already included above -// #include "airsim_interfaces/srv/detail/reset__struct.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -void Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__Reset_Response__init(message_memory); -} - -void Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_fini_function(void * message_memory) -{ - airsim_interfaces__srv__Reset_Response__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_member_array[1] = { - { - "success", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__Reset_Response, success), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_members = { - "airsim_interfaces__srv", // message namespace - "Reset_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces__srv__Reset_Response), - Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_member_array, // message members - Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_init_function, // function to initialize message memory (memory has to be allocated) - Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_type_support_handle = { - 0, - &Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Response)() { - if (!Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_type_support_handle.typesupport_identifier) { - Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &Reset_Response__rosidl_typesupport_introspection_c__Reset_Response_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/reset__rosidl_typesupport_introspection_c.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/service_introspection.h" - -// this is intentionally not const to allow initialization later to prevent an initialization race -static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_members = { - "airsim_interfaces__srv", // service namespace - "Reset", // service name - // these two fields are initialized below on the first access - NULL, // request message - // airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_Request_message_type_support_handle, - NULL // response message - // airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_Response_message_type_support_handle -}; - -static rosidl_service_type_support_t airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_type_support_handle = { - 0, - &airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_members, - get_service_typesupport_handle_function, -}; - -// Forward declaration of request/response type support functions -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Request)(); - -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Response)(); - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset)() { - if (!airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_type_support_handle.typesupport_identifier) { - airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - rosidl_typesupport_introspection_c__ServiceMembers * service_members = - (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_type_support_handle.data; - - if (!service_members->request_members_) { - service_members->request_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Request)()->data; - } - if (!service_members->response_members_) { - service_members->response_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Reset_Response)()->data; - } - - return &airsim_interfaces__srv__detail__reset__rosidl_typesupport_introspection_c__Reset_service_type_support_handle; -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.cpp deleted file mode 100644 index 8743ab2bf4..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.cpp +++ /dev/null @@ -1,332 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/srv/detail/reset__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void Reset_Request_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::Reset_Request(_init); -} - -void Reset_Request_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~Reset_Request(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember Reset_Request_message_member_array[1] = { - { - "wait_on_last_task", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::Reset_Request, wait_on_last_task), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers Reset_Request_message_members = { - "airsim_interfaces::srv", // message namespace - "Reset_Request", // message name - 1, // number of fields - sizeof(airsim_interfaces::srv::Reset_Request), - Reset_Request_message_member_array, // message members - Reset_Request_init_function, // function to initialize message memory (memory has to be allocated) - Reset_Request_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t Reset_Request_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &Reset_Request_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Reset_Request_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset_Request)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Reset_Request_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "array" -// already included above -// #include "cstddef" -// already included above -// #include "string" -// already included above -// #include "vector" -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/srv/detail/reset__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void Reset_Response_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::Reset_Response(_init); -} - -void Reset_Response_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~Reset_Response(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember Reset_Response_message_member_array[1] = { - { - "success", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::Reset_Response, success), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers Reset_Response_message_members = { - "airsim_interfaces::srv", // message namespace - "Reset_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces::srv::Reset_Response), - Reset_Response_message_member_array, // message members - Reset_Response_init_function, // function to initialize message memory (memory has to be allocated) - Reset_Response_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t Reset_Response_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &Reset_Response_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Reset_Response_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset_Response)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Reset_Response_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/reset__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -// this is intentionally not const to allow initialization later to prevent an initialization race -static ::rosidl_typesupport_introspection_cpp::ServiceMembers Reset_service_members = { - "airsim_interfaces::srv", // service namespace - "Reset", // service name - // these two fields are initialized below on the first access - // see get_service_type_support_handle() - nullptr, // request message - nullptr // response message -}; - -static const rosidl_service_type_support_t Reset_service_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &Reset_service_members, - get_service_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -get_service_type_support_handle() -{ - // get a handle to the value to be returned - auto service_type_support = - &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Reset_service_type_support_handle; - // get a non-const and properly typed version of the data void * - auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( - static_cast( - service_type_support->data)); - // make sure that both the request_members_ and the response_members_ are initialized - // if they are not, initialize them - if ( - service_members->request_members_ == nullptr || - service_members->response_members_ == nullptr) - { - // initialize the request_members_ with the static function from the external library - service_members->request_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::Reset_Request - >()->data - ); - // initialize the response_members_ with the static function from the external library - service_members->response_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::Reset_Response - >()->data - ); - } - // finally return the properly initialized service_type_support handle - return service_type_support; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Reset)() { - return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.h deleted file mode 100644 index 7ded9ec07c..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/reset__type_support.h +++ /dev/null @@ -1,58 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__RESET__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__RESET__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - Reset_Request -)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - Reset_Response -)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - Reset -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__RESET__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__builder.hpp deleted file mode 100644 index 2a8e5d74ef..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__builder.hpp +++ /dev/null @@ -1,161 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__BUILDER_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__BUILDER_HPP_ - -#include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_SetGPSPosition_Request_vehicle_name -{ -public: - explicit Init_SetGPSPosition_Request_vehicle_name(::airsim_interfaces::srv::SetGPSPosition_Request & msg) - : msg_(msg) - {} - ::airsim_interfaces::srv::SetGPSPosition_Request vehicle_name(::airsim_interfaces::srv::SetGPSPosition_Request::_vehicle_name_type arg) - { - msg_.vehicle_name = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::SetGPSPosition_Request msg_; -}; - -class Init_SetGPSPosition_Request_yaw -{ -public: - explicit Init_SetGPSPosition_Request_yaw(::airsim_interfaces::srv::SetGPSPosition_Request & msg) - : msg_(msg) - {} - Init_SetGPSPosition_Request_vehicle_name yaw(::airsim_interfaces::srv::SetGPSPosition_Request::_yaw_type arg) - { - msg_.yaw = std::move(arg); - return Init_SetGPSPosition_Request_vehicle_name(msg_); - } - -private: - ::airsim_interfaces::srv::SetGPSPosition_Request msg_; -}; - -class Init_SetGPSPosition_Request_altitude -{ -public: - explicit Init_SetGPSPosition_Request_altitude(::airsim_interfaces::srv::SetGPSPosition_Request & msg) - : msg_(msg) - {} - Init_SetGPSPosition_Request_yaw altitude(::airsim_interfaces::srv::SetGPSPosition_Request::_altitude_type arg) - { - msg_.altitude = std::move(arg); - return Init_SetGPSPosition_Request_yaw(msg_); - } - -private: - ::airsim_interfaces::srv::SetGPSPosition_Request msg_; -}; - -class Init_SetGPSPosition_Request_longitude -{ -public: - explicit Init_SetGPSPosition_Request_longitude(::airsim_interfaces::srv::SetGPSPosition_Request & msg) - : msg_(msg) - {} - Init_SetGPSPosition_Request_altitude longitude(::airsim_interfaces::srv::SetGPSPosition_Request::_longitude_type arg) - { - msg_.longitude = std::move(arg); - return Init_SetGPSPosition_Request_altitude(msg_); - } - -private: - ::airsim_interfaces::srv::SetGPSPosition_Request msg_; -}; - -class Init_SetGPSPosition_Request_latitude -{ -public: - Init_SetGPSPosition_Request_latitude() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_SetGPSPosition_Request_longitude latitude(::airsim_interfaces::srv::SetGPSPosition_Request::_latitude_type arg) - { - msg_.latitude = std::move(arg); - return Init_SetGPSPosition_Request_longitude(msg_); - } - -private: - ::airsim_interfaces::srv::SetGPSPosition_Request msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::SetGPSPosition_Request>() -{ - return airsim_interfaces::srv::builder::Init_SetGPSPosition_Request_latitude(); -} - -} // namespace airsim_interfaces - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_SetGPSPosition_Response_success -{ -public: - Init_SetGPSPosition_Response_success() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - ::airsim_interfaces::srv::SetGPSPosition_Response success(::airsim_interfaces::srv::SetGPSPosition_Response::_success_type arg) - { - msg_.success = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::SetGPSPosition_Response msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::SetGPSPosition_Response>() -{ - return airsim_interfaces::srv::builder::Init_SetGPSPosition_Response_success(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.c deleted file mode 100644 index 7a372fc766..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.c +++ /dev/null @@ -1,283 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/srv/detail/set_gps_position__functions.h" - -#include -#include -#include -#include - -// Include directives for member types -// Member `vehicle_name` -#include "rosidl_runtime_c/string_functions.h" - -bool -airsim_interfaces__srv__SetGPSPosition_Request__init(airsim_interfaces__srv__SetGPSPosition_Request * msg) -{ - if (!msg) { - return false; - } - // latitude - // longitude - // altitude - // yaw - // vehicle_name - if (!rosidl_runtime_c__String__init(&msg->vehicle_name)) { - airsim_interfaces__srv__SetGPSPosition_Request__fini(msg); - return false; - } - return true; -} - -void -airsim_interfaces__srv__SetGPSPosition_Request__fini(airsim_interfaces__srv__SetGPSPosition_Request * msg) -{ - if (!msg) { - return; - } - // latitude - // longitude - // altitude - // yaw - // vehicle_name - rosidl_runtime_c__String__fini(&msg->vehicle_name); -} - -airsim_interfaces__srv__SetGPSPosition_Request * -airsim_interfaces__srv__SetGPSPosition_Request__create() -{ - airsim_interfaces__srv__SetGPSPosition_Request * msg = (airsim_interfaces__srv__SetGPSPosition_Request *)malloc(sizeof(airsim_interfaces__srv__SetGPSPosition_Request)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__SetGPSPosition_Request)); - bool success = airsim_interfaces__srv__SetGPSPosition_Request__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__SetGPSPosition_Request__destroy(airsim_interfaces__srv__SetGPSPosition_Request * msg) -{ - if (msg) { - airsim_interfaces__srv__SetGPSPosition_Request__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__SetGPSPosition_Request__Sequence__init(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__SetGPSPosition_Request * data = NULL; - if (size) { - data = (airsim_interfaces__srv__SetGPSPosition_Request *)calloc(size, sizeof(airsim_interfaces__srv__SetGPSPosition_Request)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__SetGPSPosition_Request__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__SetGPSPosition_Request__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__SetGPSPosition_Request__Sequence__fini(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__SetGPSPosition_Request__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__SetGPSPosition_Request__Sequence * -airsim_interfaces__srv__SetGPSPosition_Request__Sequence__create(size_t size) -{ - airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array = (airsim_interfaces__srv__SetGPSPosition_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__SetGPSPosition_Request__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__SetGPSPosition_Request__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__SetGPSPosition_Request__Sequence__destroy(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__SetGPSPosition_Request__Sequence__fini(array); - } - free(array); -} - - -bool -airsim_interfaces__srv__SetGPSPosition_Response__init(airsim_interfaces__srv__SetGPSPosition_Response * msg) -{ - if (!msg) { - return false; - } - // success - return true; -} - -void -airsim_interfaces__srv__SetGPSPosition_Response__fini(airsim_interfaces__srv__SetGPSPosition_Response * msg) -{ - if (!msg) { - return; - } - // success -} - -airsim_interfaces__srv__SetGPSPosition_Response * -airsim_interfaces__srv__SetGPSPosition_Response__create() -{ - airsim_interfaces__srv__SetGPSPosition_Response * msg = (airsim_interfaces__srv__SetGPSPosition_Response *)malloc(sizeof(airsim_interfaces__srv__SetGPSPosition_Response)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__SetGPSPosition_Response)); - bool success = airsim_interfaces__srv__SetGPSPosition_Response__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__SetGPSPosition_Response__destroy(airsim_interfaces__srv__SetGPSPosition_Response * msg) -{ - if (msg) { - airsim_interfaces__srv__SetGPSPosition_Response__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__SetGPSPosition_Response__Sequence__init(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__SetGPSPosition_Response * data = NULL; - if (size) { - data = (airsim_interfaces__srv__SetGPSPosition_Response *)calloc(size, sizeof(airsim_interfaces__srv__SetGPSPosition_Response)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__SetGPSPosition_Response__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__SetGPSPosition_Response__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__SetGPSPosition_Response__Sequence__fini(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__SetGPSPosition_Response__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__SetGPSPosition_Response__Sequence * -airsim_interfaces__srv__SetGPSPosition_Response__Sequence__create(size_t size) -{ - airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array = (airsim_interfaces__srv__SetGPSPosition_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__SetGPSPosition_Response__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__SetGPSPosition_Response__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__SetGPSPosition_Response__Sequence__destroy(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__SetGPSPosition_Response__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.h deleted file mode 100644 index 6ab75616f8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__functions.h +++ /dev/null @@ -1,223 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/srv/detail/set_gps_position__struct.h" - -/// Initialize srv/SetGPSPosition message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__SetGPSPosition_Request - * )) before or use - * airsim_interfaces__srv__SetGPSPosition_Request__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__SetGPSPosition_Request__init(airsim_interfaces__srv__SetGPSPosition_Request * msg); - -/// Finalize srv/SetGPSPosition message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetGPSPosition_Request__fini(airsim_interfaces__srv__SetGPSPosition_Request * msg); - -/// Create srv/SetGPSPosition message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__SetGPSPosition_Request__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__SetGPSPosition_Request * -airsim_interfaces__srv__SetGPSPosition_Request__create(); - -/// Destroy srv/SetGPSPosition message. -/** - * It calls - * airsim_interfaces__srv__SetGPSPosition_Request__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetGPSPosition_Request__destroy(airsim_interfaces__srv__SetGPSPosition_Request * msg); - - -/// Initialize array of srv/SetGPSPosition messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__SetGPSPosition_Request__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__SetGPSPosition_Request__Sequence__init(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array, size_t size); - -/// Finalize array of srv/SetGPSPosition messages. -/** - * It calls - * airsim_interfaces__srv__SetGPSPosition_Request__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetGPSPosition_Request__Sequence__fini(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array); - -/// Create array of srv/SetGPSPosition messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__SetGPSPosition_Request__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__SetGPSPosition_Request__Sequence * -airsim_interfaces__srv__SetGPSPosition_Request__Sequence__create(size_t size); - -/// Destroy array of srv/SetGPSPosition messages. -/** - * It calls - * airsim_interfaces__srv__SetGPSPosition_Request__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetGPSPosition_Request__Sequence__destroy(airsim_interfaces__srv__SetGPSPosition_Request__Sequence * array); - -/// Initialize srv/SetGPSPosition message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__SetGPSPosition_Response - * )) before or use - * airsim_interfaces__srv__SetGPSPosition_Response__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__SetGPSPosition_Response__init(airsim_interfaces__srv__SetGPSPosition_Response * msg); - -/// Finalize srv/SetGPSPosition message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetGPSPosition_Response__fini(airsim_interfaces__srv__SetGPSPosition_Response * msg); - -/// Create srv/SetGPSPosition message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__SetGPSPosition_Response__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__SetGPSPosition_Response * -airsim_interfaces__srv__SetGPSPosition_Response__create(); - -/// Destroy srv/SetGPSPosition message. -/** - * It calls - * airsim_interfaces__srv__SetGPSPosition_Response__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetGPSPosition_Response__destroy(airsim_interfaces__srv__SetGPSPosition_Response * msg); - - -/// Initialize array of srv/SetGPSPosition messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__SetGPSPosition_Response__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__SetGPSPosition_Response__Sequence__init(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array, size_t size); - -/// Finalize array of srv/SetGPSPosition messages. -/** - * It calls - * airsim_interfaces__srv__SetGPSPosition_Response__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetGPSPosition_Response__Sequence__fini(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array); - -/// Create array of srv/SetGPSPosition messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__SetGPSPosition_Response__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__SetGPSPosition_Response__Sequence * -airsim_interfaces__srv__SetGPSPosition_Response__Sequence__create(size_t size); - -/// Destroy array of srv/SetGPSPosition messages. -/** - * It calls - * airsim_interfaces__srv__SetGPSPosition_Response__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetGPSPosition_Response__Sequence__destroy(airsim_interfaces__srv__SetGPSPosition_Response__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index 992d94d38c..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,87 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__SetGPSPosition_Request( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__SetGPSPosition_Request( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetGPSPosition_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__SetGPSPosition_Response( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__SetGPSPosition_Response( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetGPSPosition_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetGPSPosition)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index 213f47382c..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,175 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::SetGPSPosition_Request & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::SetGPSPosition_Request & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::SetGPSPosition_Request & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_SetGPSPosition_Request( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetGPSPosition_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -// already included above -// #include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::SetGPSPosition_Response & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::SetGPSPosition_Response & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::SetGPSPosition_Response & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_SetGPSPosition_Response( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetGPSPosition_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rmw/types.h" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetGPSPosition)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 08dc3b75bd..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,47 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Request)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Response)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 4c4caeb547..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,67 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.h deleted file mode 100644 index 96191de128..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.h +++ /dev/null @@ -1,67 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'vehicle_name' -#include "rosidl_runtime_c/string.h" - -// Struct defined in srv/SetGPSPosition in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__SetGPSPosition_Request -{ - double latitude; - double longitude; - double altitude; - double yaw; - rosidl_runtime_c__String vehicle_name; -} airsim_interfaces__srv__SetGPSPosition_Request; - -// Struct for a sequence of airsim_interfaces__srv__SetGPSPosition_Request. -typedef struct airsim_interfaces__srv__SetGPSPosition_Request__Sequence -{ - airsim_interfaces__srv__SetGPSPosition_Request * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__SetGPSPosition_Request__Sequence; - - -// Constants defined in the message - -// Struct defined in srv/SetGPSPosition in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__SetGPSPosition_Response -{ - bool success; -} airsim_interfaces__srv__SetGPSPosition_Response; - -// Struct for a sequence of airsim_interfaces__srv__SetGPSPosition_Response. -typedef struct airsim_interfaces__srv__SetGPSPosition_Response__Sequence -{ - airsim_interfaces__srv__SetGPSPosition_Response * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__SetGPSPosition_Response__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.hpp deleted file mode 100644 index 3694c0d7c5..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__struct.hpp +++ /dev/null @@ -1,316 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Request __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Request __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct SetGPSPosition_Request_ -{ - using Type = SetGPSPosition_Request_; - - explicit SetGPSPosition_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->latitude = 0.0; - this->longitude = 0.0; - this->altitude = 0.0; - this->yaw = 0.0; - this->vehicle_name = ""; - } - } - - explicit SetGPSPosition_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : vehicle_name(_alloc) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->latitude = 0.0; - this->longitude = 0.0; - this->altitude = 0.0; - this->yaw = 0.0; - this->vehicle_name = ""; - } - } - - // field types and members - using _latitude_type = - double; - _latitude_type latitude; - using _longitude_type = - double; - _longitude_type longitude; - using _altitude_type = - double; - _altitude_type altitude; - using _yaw_type = - double; - _yaw_type yaw; - using _vehicle_name_type = - std::basic_string, typename ContainerAllocator::template rebind::other>; - _vehicle_name_type vehicle_name; - - // setters for named parameter idiom - Type & set__latitude( - const double & _arg) - { - this->latitude = _arg; - return *this; - } - Type & set__longitude( - const double & _arg) - { - this->longitude = _arg; - return *this; - } - Type & set__altitude( - const double & _arg) - { - this->altitude = _arg; - return *this; - } - Type & set__yaw( - const double & _arg) - { - this->yaw = _arg; - return *this; - } - Type & set__vehicle_name( - const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) - { - this->vehicle_name = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::SetGPSPosition_Request_ *; - using ConstRawPtr = - const airsim_interfaces::srv::SetGPSPosition_Request_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Request - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Request - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const SetGPSPosition_Request_ & other) const - { - if (this->latitude != other.latitude) { - return false; - } - if (this->longitude != other.longitude) { - return false; - } - if (this->altitude != other.altitude) { - return false; - } - if (this->yaw != other.yaw) { - return false; - } - if (this->vehicle_name != other.vehicle_name) { - return false; - } - return true; - } - bool operator!=(const SetGPSPosition_Request_ & other) const - { - return !this->operator==(other); - } -}; // struct SetGPSPosition_Request_ - -// alias to use template instance with default allocator -using SetGPSPosition_Request = - airsim_interfaces::srv::SetGPSPosition_Request_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Response __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Response __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct SetGPSPosition_Response_ -{ - using Type = SetGPSPosition_Response_; - - explicit SetGPSPosition_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - explicit SetGPSPosition_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - // field types and members - using _success_type = - bool; - _success_type success; - - // setters for named parameter idiom - Type & set__success( - const bool & _arg) - { - this->success = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::SetGPSPosition_Response_ *; - using ConstRawPtr = - const airsim_interfaces::srv::SetGPSPosition_Response_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Response - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__SetGPSPosition_Response - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const SetGPSPosition_Response_ & other) const - { - if (this->success != other.success) { - return false; - } - return true; - } - bool operator!=(const SetGPSPosition_Response_ & other) const - { - return !this->operator==(other); - } -}; // struct SetGPSPosition_Response_ - -// alias to use template instance with default allocator -using SetGPSPosition_Response = - airsim_interfaces::srv::SetGPSPosition_Response_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - -namespace airsim_interfaces -{ - -namespace srv -{ - -struct SetGPSPosition -{ - using Request = airsim_interfaces::srv::SetGPSPosition_Request; - using Response = airsim_interfaces::srv::SetGPSPosition_Response; -}; - -} // namespace srv - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__traits.hpp deleted file mode 100644 index 25642111a4..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__traits.hpp +++ /dev/null @@ -1,126 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TRAITS_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TRAITS_HPP_ - -#include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" -#include -#include -#include - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::SetGPSPosition_Request"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/SetGPSPosition_Request"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::SetGPSPosition_Response"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/SetGPSPosition_Response"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::SetGPSPosition"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/SetGPSPosition"; -} - -template<> -struct has_fixed_size - : std::integral_constant< - bool, - has_fixed_size::value && - has_fixed_size::value - > -{ -}; - -template<> -struct has_bounded_size - : std::integral_constant< - bool, - has_bounded_size::value && - has_bounded_size::value - > -{ -}; - -template<> -struct is_service - : std::true_type -{ -}; - -template<> -struct is_service_request - : std::true_type -{ -}; - -template<> -struct is_service_response - : std::true_type -{ -}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.c deleted file mode 100644 index cf6463d3e6..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.c +++ /dev/null @@ -1,288 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/srv/detail/set_gps_position__functions.h" -#include "airsim_interfaces/srv/detail/set_gps_position__struct.h" - - -// Include directives for member types -// Member `vehicle_name` -#include "rosidl_runtime_c/string_functions.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__SetGPSPosition_Request__init(message_memory); -} - -void SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_fini_function(void * message_memory) -{ - airsim_interfaces__srv__SetGPSPosition_Request__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_member_array[5] = { - { - "latitude", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetGPSPosition_Request, latitude), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "longitude", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetGPSPosition_Request, longitude), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "altitude", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetGPSPosition_Request, altitude), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "yaw", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetGPSPosition_Request, yaw), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "vehicle_name", // name - rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetGPSPosition_Request, vehicle_name), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_members = { - "airsim_interfaces__srv", // message namespace - "SetGPSPosition_Request", // message name - 5, // number of fields - sizeof(airsim_interfaces__srv__SetGPSPosition_Request), - SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_member_array, // message members - SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_init_function, // function to initialize message memory (memory has to be allocated) - SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_type_support_handle = { - 0, - &SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Request)() { - if (!SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_type_support_handle.typesupport_identifier) { - SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &SetGPSPosition_Request__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "rosidl_typesupport_introspection_c/field_types.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -// already included above -// #include "rosidl_typesupport_introspection_c/message_introspection.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_gps_position__functions.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_gps_position__struct.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -void SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__SetGPSPosition_Response__init(message_memory); -} - -void SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_fini_function(void * message_memory) -{ - airsim_interfaces__srv__SetGPSPosition_Response__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_member_array[1] = { - { - "success", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetGPSPosition_Response, success), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_members = { - "airsim_interfaces__srv", // message namespace - "SetGPSPosition_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces__srv__SetGPSPosition_Response), - SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_member_array, // message members - SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_init_function, // function to initialize message memory (memory has to be allocated) - SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_type_support_handle = { - 0, - &SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Response)() { - if (!SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_type_support_handle.typesupport_identifier) { - SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &SetGPSPosition_Response__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_gps_position__rosidl_typesupport_introspection_c.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/service_introspection.h" - -// this is intentionally not const to allow initialization later to prevent an initialization race -static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_members = { - "airsim_interfaces__srv", // service namespace - "SetGPSPosition", // service name - // these two fields are initialized below on the first access - NULL, // request message - // airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_Request_message_type_support_handle, - NULL // response message - // airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_Response_message_type_support_handle -}; - -static rosidl_service_type_support_t airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_type_support_handle = { - 0, - &airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_members, - get_service_typesupport_handle_function, -}; - -// Forward declaration of request/response type support functions -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Request)(); - -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Response)(); - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition)() { - if (!airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_type_support_handle.typesupport_identifier) { - airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - rosidl_typesupport_introspection_c__ServiceMembers * service_members = - (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_type_support_handle.data; - - if (!service_members->request_members_) { - service_members->request_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Request)()->data; - } - if (!service_members->response_members_) { - service_members->response_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetGPSPosition_Response)()->data; - } - - return &airsim_interfaces__srv__detail__set_gps_position__rosidl_typesupport_introspection_c__SetGPSPosition_service_type_support_handle; -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.cpp deleted file mode 100644 index 428062dad2..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.cpp +++ /dev/null @@ -1,392 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void SetGPSPosition_Request_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::SetGPSPosition_Request(_init); -} - -void SetGPSPosition_Request_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~SetGPSPosition_Request(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember SetGPSPosition_Request_message_member_array[5] = { - { - "latitude", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetGPSPosition_Request, latitude), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "longitude", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetGPSPosition_Request, longitude), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "altitude", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetGPSPosition_Request, altitude), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "yaw", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetGPSPosition_Request, yaw), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "vehicle_name", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetGPSPosition_Request, vehicle_name), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers SetGPSPosition_Request_message_members = { - "airsim_interfaces::srv", // message namespace - "SetGPSPosition_Request", // message name - 5, // number of fields - sizeof(airsim_interfaces::srv::SetGPSPosition_Request), - SetGPSPosition_Request_message_member_array, // message members - SetGPSPosition_Request_init_function, // function to initialize message memory (memory has to be allocated) - SetGPSPosition_Request_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t SetGPSPosition_Request_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &SetGPSPosition_Request_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetGPSPosition_Request_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition_Request)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetGPSPosition_Request_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "array" -// already included above -// #include "cstddef" -// already included above -// #include "string" -// already included above -// #include "vector" -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void SetGPSPosition_Response_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::SetGPSPosition_Response(_init); -} - -void SetGPSPosition_Response_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~SetGPSPosition_Response(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember SetGPSPosition_Response_message_member_array[1] = { - { - "success", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetGPSPosition_Response, success), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers SetGPSPosition_Response_message_members = { - "airsim_interfaces::srv", // message namespace - "SetGPSPosition_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces::srv::SetGPSPosition_Response), - SetGPSPosition_Response_message_member_array, // message members - SetGPSPosition_Response_init_function, // function to initialize message memory (memory has to be allocated) - SetGPSPosition_Response_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t SetGPSPosition_Response_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &SetGPSPosition_Response_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetGPSPosition_Response_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition_Response)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetGPSPosition_Response_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -// this is intentionally not const to allow initialization later to prevent an initialization race -static ::rosidl_typesupport_introspection_cpp::ServiceMembers SetGPSPosition_service_members = { - "airsim_interfaces::srv", // service namespace - "SetGPSPosition", // service name - // these two fields are initialized below on the first access - // see get_service_type_support_handle() - nullptr, // request message - nullptr // response message -}; - -static const rosidl_service_type_support_t SetGPSPosition_service_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &SetGPSPosition_service_members, - get_service_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -get_service_type_support_handle() -{ - // get a handle to the value to be returned - auto service_type_support = - &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetGPSPosition_service_type_support_handle; - // get a non-const and properly typed version of the data void * - auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( - static_cast( - service_type_support->data)); - // make sure that both the request_members_ and the response_members_ are initialized - // if they are not, initialize them - if ( - service_members->request_members_ == nullptr || - service_members->response_members_ == nullptr) - { - // initialize the request_members_ with the static function from the external library - service_members->request_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::SetGPSPosition_Request - >()->data - ); - // initialize the response_members_ with the static function from the external library - service_members->response_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::SetGPSPosition_Response - >()->data - ); - } - // finally return the properly initialized service_type_support handle - return service_type_support; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetGPSPosition)() { - return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.h deleted file mode 100644 index 355ad80c08..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_gps_position__type_support.h +++ /dev/null @@ -1,58 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - SetGPSPosition_Request -)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - SetGPSPosition_Response -)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - SetGPSPosition -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_GPS_POSITION__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__builder.hpp deleted file mode 100644 index d6b406ad41..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__builder.hpp +++ /dev/null @@ -1,177 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__BUILDER_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__BUILDER_HPP_ - -#include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_SetLocalPosition_Request_vehicle_name -{ -public: - explicit Init_SetLocalPosition_Request_vehicle_name(::airsim_interfaces::srv::SetLocalPosition_Request & msg) - : msg_(msg) - {} - ::airsim_interfaces::srv::SetLocalPosition_Request vehicle_name(::airsim_interfaces::srv::SetLocalPosition_Request::_vehicle_name_type arg) - { - msg_.vehicle_name = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::SetLocalPosition_Request msg_; -}; - -class Init_SetLocalPosition_Request_yaw -{ -public: - explicit Init_SetLocalPosition_Request_yaw(::airsim_interfaces::srv::SetLocalPosition_Request & msg) - : msg_(msg) - {} - Init_SetLocalPosition_Request_vehicle_name yaw(::airsim_interfaces::srv::SetLocalPosition_Request::_yaw_type arg) - { - msg_.yaw = std::move(arg); - return Init_SetLocalPosition_Request_vehicle_name(msg_); - } - -private: - ::airsim_interfaces::srv::SetLocalPosition_Request msg_; -}; - -class Init_SetLocalPosition_Request_z -{ -public: - explicit Init_SetLocalPosition_Request_z(::airsim_interfaces::srv::SetLocalPosition_Request & msg) - : msg_(msg) - {} - Init_SetLocalPosition_Request_yaw z(::airsim_interfaces::srv::SetLocalPosition_Request::_z_type arg) - { - msg_.z = std::move(arg); - return Init_SetLocalPosition_Request_yaw(msg_); - } - -private: - ::airsim_interfaces::srv::SetLocalPosition_Request msg_; -}; - -class Init_SetLocalPosition_Request_y -{ -public: - explicit Init_SetLocalPosition_Request_y(::airsim_interfaces::srv::SetLocalPosition_Request & msg) - : msg_(msg) - {} - Init_SetLocalPosition_Request_z y(::airsim_interfaces::srv::SetLocalPosition_Request::_y_type arg) - { - msg_.y = std::move(arg); - return Init_SetLocalPosition_Request_z(msg_); - } - -private: - ::airsim_interfaces::srv::SetLocalPosition_Request msg_; -}; - -class Init_SetLocalPosition_Request_x -{ -public: - Init_SetLocalPosition_Request_x() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_SetLocalPosition_Request_y x(::airsim_interfaces::srv::SetLocalPosition_Request::_x_type arg) - { - msg_.x = std::move(arg); - return Init_SetLocalPosition_Request_y(msg_); - } - -private: - ::airsim_interfaces::srv::SetLocalPosition_Request msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::SetLocalPosition_Request>() -{ - return airsim_interfaces::srv::builder::Init_SetLocalPosition_Request_x(); -} - -} // namespace airsim_interfaces - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_SetLocalPosition_Response_message -{ -public: - explicit Init_SetLocalPosition_Response_message(::airsim_interfaces::srv::SetLocalPosition_Response & msg) - : msg_(msg) - {} - ::airsim_interfaces::srv::SetLocalPosition_Response message(::airsim_interfaces::srv::SetLocalPosition_Response::_message_type arg) - { - msg_.message = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::SetLocalPosition_Response msg_; -}; - -class Init_SetLocalPosition_Response_success -{ -public: - Init_SetLocalPosition_Response_success() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_SetLocalPosition_Response_message success(::airsim_interfaces::srv::SetLocalPosition_Response::_success_type arg) - { - msg_.success = std::move(arg); - return Init_SetLocalPosition_Response_message(msg_); - } - -private: - ::airsim_interfaces::srv::SetLocalPosition_Response msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::SetLocalPosition_Response>() -{ - return airsim_interfaces::srv::builder::Init_SetLocalPosition_Response_success(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.c deleted file mode 100644 index b8a3bd411b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.c +++ /dev/null @@ -1,295 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/srv/detail/set_local_position__functions.h" - -#include -#include -#include -#include - -// Include directives for member types -// Member `vehicle_name` -#include "rosidl_runtime_c/string_functions.h" - -bool -airsim_interfaces__srv__SetLocalPosition_Request__init(airsim_interfaces__srv__SetLocalPosition_Request * msg) -{ - if (!msg) { - return false; - } - // x - // y - // z - // yaw - // vehicle_name - if (!rosidl_runtime_c__String__init(&msg->vehicle_name)) { - airsim_interfaces__srv__SetLocalPosition_Request__fini(msg); - return false; - } - return true; -} - -void -airsim_interfaces__srv__SetLocalPosition_Request__fini(airsim_interfaces__srv__SetLocalPosition_Request * msg) -{ - if (!msg) { - return; - } - // x - // y - // z - // yaw - // vehicle_name - rosidl_runtime_c__String__fini(&msg->vehicle_name); -} - -airsim_interfaces__srv__SetLocalPosition_Request * -airsim_interfaces__srv__SetLocalPosition_Request__create() -{ - airsim_interfaces__srv__SetLocalPosition_Request * msg = (airsim_interfaces__srv__SetLocalPosition_Request *)malloc(sizeof(airsim_interfaces__srv__SetLocalPosition_Request)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__SetLocalPosition_Request)); - bool success = airsim_interfaces__srv__SetLocalPosition_Request__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__SetLocalPosition_Request__destroy(airsim_interfaces__srv__SetLocalPosition_Request * msg) -{ - if (msg) { - airsim_interfaces__srv__SetLocalPosition_Request__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__SetLocalPosition_Request__Sequence__init(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__SetLocalPosition_Request * data = NULL; - if (size) { - data = (airsim_interfaces__srv__SetLocalPosition_Request *)calloc(size, sizeof(airsim_interfaces__srv__SetLocalPosition_Request)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__SetLocalPosition_Request__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__SetLocalPosition_Request__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__SetLocalPosition_Request__Sequence__fini(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__SetLocalPosition_Request__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__SetLocalPosition_Request__Sequence * -airsim_interfaces__srv__SetLocalPosition_Request__Sequence__create(size_t size) -{ - airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array = (airsim_interfaces__srv__SetLocalPosition_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__SetLocalPosition_Request__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__SetLocalPosition_Request__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__SetLocalPosition_Request__Sequence__destroy(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__SetLocalPosition_Request__Sequence__fini(array); - } - free(array); -} - - -// Include directives for member types -// Member `message` -// already included above -// #include "rosidl_runtime_c/string_functions.h" - -bool -airsim_interfaces__srv__SetLocalPosition_Response__init(airsim_interfaces__srv__SetLocalPosition_Response * msg) -{ - if (!msg) { - return false; - } - // success - // message - if (!rosidl_runtime_c__String__init(&msg->message)) { - airsim_interfaces__srv__SetLocalPosition_Response__fini(msg); - return false; - } - return true; -} - -void -airsim_interfaces__srv__SetLocalPosition_Response__fini(airsim_interfaces__srv__SetLocalPosition_Response * msg) -{ - if (!msg) { - return; - } - // success - // message - rosidl_runtime_c__String__fini(&msg->message); -} - -airsim_interfaces__srv__SetLocalPosition_Response * -airsim_interfaces__srv__SetLocalPosition_Response__create() -{ - airsim_interfaces__srv__SetLocalPosition_Response * msg = (airsim_interfaces__srv__SetLocalPosition_Response *)malloc(sizeof(airsim_interfaces__srv__SetLocalPosition_Response)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__SetLocalPosition_Response)); - bool success = airsim_interfaces__srv__SetLocalPosition_Response__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__SetLocalPosition_Response__destroy(airsim_interfaces__srv__SetLocalPosition_Response * msg) -{ - if (msg) { - airsim_interfaces__srv__SetLocalPosition_Response__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__SetLocalPosition_Response__Sequence__init(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__SetLocalPosition_Response * data = NULL; - if (size) { - data = (airsim_interfaces__srv__SetLocalPosition_Response *)calloc(size, sizeof(airsim_interfaces__srv__SetLocalPosition_Response)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__SetLocalPosition_Response__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__SetLocalPosition_Response__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__SetLocalPosition_Response__Sequence__fini(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__SetLocalPosition_Response__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__SetLocalPosition_Response__Sequence * -airsim_interfaces__srv__SetLocalPosition_Response__Sequence__create(size_t size) -{ - airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array = (airsim_interfaces__srv__SetLocalPosition_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__SetLocalPosition_Response__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__SetLocalPosition_Response__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__SetLocalPosition_Response__Sequence__destroy(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__SetLocalPosition_Response__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.h deleted file mode 100644 index 2c2c819ac3..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__functions.h +++ /dev/null @@ -1,223 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/srv/detail/set_local_position__struct.h" - -/// Initialize srv/SetLocalPosition message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__SetLocalPosition_Request - * )) before or use - * airsim_interfaces__srv__SetLocalPosition_Request__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__SetLocalPosition_Request__init(airsim_interfaces__srv__SetLocalPosition_Request * msg); - -/// Finalize srv/SetLocalPosition message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetLocalPosition_Request__fini(airsim_interfaces__srv__SetLocalPosition_Request * msg); - -/// Create srv/SetLocalPosition message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__SetLocalPosition_Request__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__SetLocalPosition_Request * -airsim_interfaces__srv__SetLocalPosition_Request__create(); - -/// Destroy srv/SetLocalPosition message. -/** - * It calls - * airsim_interfaces__srv__SetLocalPosition_Request__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetLocalPosition_Request__destroy(airsim_interfaces__srv__SetLocalPosition_Request * msg); - - -/// Initialize array of srv/SetLocalPosition messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__SetLocalPosition_Request__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__SetLocalPosition_Request__Sequence__init(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array, size_t size); - -/// Finalize array of srv/SetLocalPosition messages. -/** - * It calls - * airsim_interfaces__srv__SetLocalPosition_Request__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetLocalPosition_Request__Sequence__fini(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array); - -/// Create array of srv/SetLocalPosition messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__SetLocalPosition_Request__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__SetLocalPosition_Request__Sequence * -airsim_interfaces__srv__SetLocalPosition_Request__Sequence__create(size_t size); - -/// Destroy array of srv/SetLocalPosition messages. -/** - * It calls - * airsim_interfaces__srv__SetLocalPosition_Request__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetLocalPosition_Request__Sequence__destroy(airsim_interfaces__srv__SetLocalPosition_Request__Sequence * array); - -/// Initialize srv/SetLocalPosition message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__SetLocalPosition_Response - * )) before or use - * airsim_interfaces__srv__SetLocalPosition_Response__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__SetLocalPosition_Response__init(airsim_interfaces__srv__SetLocalPosition_Response * msg); - -/// Finalize srv/SetLocalPosition message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetLocalPosition_Response__fini(airsim_interfaces__srv__SetLocalPosition_Response * msg); - -/// Create srv/SetLocalPosition message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__SetLocalPosition_Response__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__SetLocalPosition_Response * -airsim_interfaces__srv__SetLocalPosition_Response__create(); - -/// Destroy srv/SetLocalPosition message. -/** - * It calls - * airsim_interfaces__srv__SetLocalPosition_Response__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetLocalPosition_Response__destroy(airsim_interfaces__srv__SetLocalPosition_Response * msg); - - -/// Initialize array of srv/SetLocalPosition messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__SetLocalPosition_Response__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__SetLocalPosition_Response__Sequence__init(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array, size_t size); - -/// Finalize array of srv/SetLocalPosition messages. -/** - * It calls - * airsim_interfaces__srv__SetLocalPosition_Response__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetLocalPosition_Response__Sequence__fini(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array); - -/// Create array of srv/SetLocalPosition messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__SetLocalPosition_Response__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__SetLocalPosition_Response__Sequence * -airsim_interfaces__srv__SetLocalPosition_Response__Sequence__create(size_t size); - -/// Destroy array of srv/SetLocalPosition messages. -/** - * It calls - * airsim_interfaces__srv__SetLocalPosition_Response__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__SetLocalPosition_Response__Sequence__destroy(airsim_interfaces__srv__SetLocalPosition_Response__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index 5f3532c5dd..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,87 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__SetLocalPosition_Request( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__SetLocalPosition_Request( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetLocalPosition_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__SetLocalPosition_Response( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__SetLocalPosition_Response( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetLocalPosition_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, SetLocalPosition)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index ecb78ae203..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,175 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::SetLocalPosition_Request & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::SetLocalPosition_Request & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::SetLocalPosition_Request & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_SetLocalPosition_Request( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetLocalPosition_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -// already included above -// #include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::SetLocalPosition_Response & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::SetLocalPosition_Response & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::SetLocalPosition_Response & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_SetLocalPosition_Response( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetLocalPosition_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rmw/types.h" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, SetLocalPosition)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h deleted file mode 100644 index e7f9511330..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,47 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Request)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Response)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 316e06d4d8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,67 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.h deleted file mode 100644 index cccfbc2d30..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.h +++ /dev/null @@ -1,73 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'vehicle_name' -#include "rosidl_runtime_c/string.h" - -// Struct defined in srv/SetLocalPosition in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__SetLocalPosition_Request -{ - double x; - double y; - double z; - double yaw; - rosidl_runtime_c__String vehicle_name; -} airsim_interfaces__srv__SetLocalPosition_Request; - -// Struct for a sequence of airsim_interfaces__srv__SetLocalPosition_Request. -typedef struct airsim_interfaces__srv__SetLocalPosition_Request__Sequence -{ - airsim_interfaces__srv__SetLocalPosition_Request * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__SetLocalPosition_Request__Sequence; - - -// Constants defined in the message - -// Include directives for member types -// Member 'message' -// already included above -// #include "rosidl_runtime_c/string.h" - -// Struct defined in srv/SetLocalPosition in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__SetLocalPosition_Response -{ - bool success; - rosidl_runtime_c__String message; -} airsim_interfaces__srv__SetLocalPosition_Response; - -// Struct for a sequence of airsim_interfaces__srv__SetLocalPosition_Response. -typedef struct airsim_interfaces__srv__SetLocalPosition_Response__Sequence -{ - airsim_interfaces__srv__SetLocalPosition_Response * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__SetLocalPosition_Response__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.hpp deleted file mode 100644 index 39dd92b3a8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__struct.hpp +++ /dev/null @@ -1,330 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Request __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Request __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct SetLocalPosition_Request_ -{ - using Type = SetLocalPosition_Request_; - - explicit SetLocalPosition_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->x = 0.0; - this->y = 0.0; - this->z = 0.0; - this->yaw = 0.0; - this->vehicle_name = ""; - } - } - - explicit SetLocalPosition_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : vehicle_name(_alloc) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->x = 0.0; - this->y = 0.0; - this->z = 0.0; - this->yaw = 0.0; - this->vehicle_name = ""; - } - } - - // field types and members - using _x_type = - double; - _x_type x; - using _y_type = - double; - _y_type y; - using _z_type = - double; - _z_type z; - using _yaw_type = - double; - _yaw_type yaw; - using _vehicle_name_type = - std::basic_string, typename ContainerAllocator::template rebind::other>; - _vehicle_name_type vehicle_name; - - // setters for named parameter idiom - Type & set__x( - const double & _arg) - { - this->x = _arg; - return *this; - } - Type & set__y( - const double & _arg) - { - this->y = _arg; - return *this; - } - Type & set__z( - const double & _arg) - { - this->z = _arg; - return *this; - } - Type & set__yaw( - const double & _arg) - { - this->yaw = _arg; - return *this; - } - Type & set__vehicle_name( - const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) - { - this->vehicle_name = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::SetLocalPosition_Request_ *; - using ConstRawPtr = - const airsim_interfaces::srv::SetLocalPosition_Request_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Request - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Request - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const SetLocalPosition_Request_ & other) const - { - if (this->x != other.x) { - return false; - } - if (this->y != other.y) { - return false; - } - if (this->z != other.z) { - return false; - } - if (this->yaw != other.yaw) { - return false; - } - if (this->vehicle_name != other.vehicle_name) { - return false; - } - return true; - } - bool operator!=(const SetLocalPosition_Request_ & other) const - { - return !this->operator==(other); - } -}; // struct SetLocalPosition_Request_ - -// alias to use template instance with default allocator -using SetLocalPosition_Request = - airsim_interfaces::srv::SetLocalPosition_Request_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Response __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Response __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct SetLocalPosition_Response_ -{ - using Type = SetLocalPosition_Response_; - - explicit SetLocalPosition_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - this->message = ""; - } - } - - explicit SetLocalPosition_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - : message(_alloc) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - this->message = ""; - } - } - - // field types and members - using _success_type = - bool; - _success_type success; - using _message_type = - std::basic_string, typename ContainerAllocator::template rebind::other>; - _message_type message; - - // setters for named parameter idiom - Type & set__success( - const bool & _arg) - { - this->success = _arg; - return *this; - } - Type & set__message( - const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) - { - this->message = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::SetLocalPosition_Response_ *; - using ConstRawPtr = - const airsim_interfaces::srv::SetLocalPosition_Response_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Response - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__SetLocalPosition_Response - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const SetLocalPosition_Response_ & other) const - { - if (this->success != other.success) { - return false; - } - if (this->message != other.message) { - return false; - } - return true; - } - bool operator!=(const SetLocalPosition_Response_ & other) const - { - return !this->operator==(other); - } -}; // struct SetLocalPosition_Response_ - -// alias to use template instance with default allocator -using SetLocalPosition_Response = - airsim_interfaces::srv::SetLocalPosition_Response_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - -namespace airsim_interfaces -{ - -namespace srv -{ - -struct SetLocalPosition -{ - using Request = airsim_interfaces::srv::SetLocalPosition_Request; - using Response = airsim_interfaces::srv::SetLocalPosition_Response; -}; - -} // namespace srv - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__traits.hpp deleted file mode 100644 index 859cc53082..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__traits.hpp +++ /dev/null @@ -1,126 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TRAITS_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TRAITS_HPP_ - -#include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" -#include -#include -#include - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::SetLocalPosition_Request"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/SetLocalPosition_Request"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::SetLocalPosition_Response"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/SetLocalPosition_Response"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::SetLocalPosition"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/SetLocalPosition"; -} - -template<> -struct has_fixed_size - : std::integral_constant< - bool, - has_fixed_size::value && - has_fixed_size::value - > -{ -}; - -template<> -struct has_bounded_size - : std::integral_constant< - bool, - has_bounded_size::value && - has_bounded_size::value - > -{ -}; - -template<> -struct is_service - : std::true_type -{ -}; - -template<> -struct is_service_request - : std::true_type -{ -}; - -template<> -struct is_service_response - : std::true_type -{ -}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.c deleted file mode 100644 index 2b9754a148..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.c +++ /dev/null @@ -1,308 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/srv/detail/set_local_position__functions.h" -#include "airsim_interfaces/srv/detail/set_local_position__struct.h" - - -// Include directives for member types -// Member `vehicle_name` -#include "rosidl_runtime_c/string_functions.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__SetLocalPosition_Request__init(message_memory); -} - -void SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_fini_function(void * message_memory) -{ - airsim_interfaces__srv__SetLocalPosition_Request__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_member_array[5] = { - { - "x", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetLocalPosition_Request, x), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "y", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetLocalPosition_Request, y), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "z", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetLocalPosition_Request, z), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "yaw", // name - rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetLocalPosition_Request, yaw), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "vehicle_name", // name - rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetLocalPosition_Request, vehicle_name), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_members = { - "airsim_interfaces__srv", // message namespace - "SetLocalPosition_Request", // message name - 5, // number of fields - sizeof(airsim_interfaces__srv__SetLocalPosition_Request), - SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_member_array, // message members - SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_init_function, // function to initialize message memory (memory has to be allocated) - SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_type_support_handle = { - 0, - &SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Request)() { - if (!SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_type_support_handle.typesupport_identifier) { - SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &SetLocalPosition_Request__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "rosidl_typesupport_introspection_c/field_types.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -// already included above -// #include "rosidl_typesupport_introspection_c/message_introspection.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_local_position__functions.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_local_position__struct.h" - - -// Include directives for member types -// Member `message` -// already included above -// #include "rosidl_runtime_c/string_functions.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__SetLocalPosition_Response__init(message_memory); -} - -void SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_fini_function(void * message_memory) -{ - airsim_interfaces__srv__SetLocalPosition_Response__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_member_array[2] = { - { - "success", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetLocalPosition_Response, success), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "message", // name - rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__SetLocalPosition_Response, message), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_members = { - "airsim_interfaces__srv", // message namespace - "SetLocalPosition_Response", // message name - 2, // number of fields - sizeof(airsim_interfaces__srv__SetLocalPosition_Response), - SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_member_array, // message members - SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_init_function, // function to initialize message memory (memory has to be allocated) - SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_type_support_handle = { - 0, - &SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Response)() { - if (!SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_type_support_handle.typesupport_identifier) { - SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &SetLocalPosition_Response__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_local_position__rosidl_typesupport_introspection_c.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/service_introspection.h" - -// this is intentionally not const to allow initialization later to prevent an initialization race -static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_members = { - "airsim_interfaces__srv", // service namespace - "SetLocalPosition", // service name - // these two fields are initialized below on the first access - NULL, // request message - // airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_Request_message_type_support_handle, - NULL // response message - // airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_Response_message_type_support_handle -}; - -static rosidl_service_type_support_t airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_type_support_handle = { - 0, - &airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_members, - get_service_typesupport_handle_function, -}; - -// Forward declaration of request/response type support functions -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Request)(); - -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Response)(); - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition)() { - if (!airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_type_support_handle.typesupport_identifier) { - airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - rosidl_typesupport_introspection_c__ServiceMembers * service_members = - (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_type_support_handle.data; - - if (!service_members->request_members_) { - service_members->request_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Request)()->data; - } - if (!service_members->response_members_) { - service_members->response_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, SetLocalPosition_Response)()->data; - } - - return &airsim_interfaces__srv__detail__set_local_position__rosidl_typesupport_introspection_c__SetLocalPosition_service_type_support_handle; -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.cpp deleted file mode 100644 index 1c8e9eb6eb..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.cpp +++ /dev/null @@ -1,407 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void SetLocalPosition_Request_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::SetLocalPosition_Request(_init); -} - -void SetLocalPosition_Request_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~SetLocalPosition_Request(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember SetLocalPosition_Request_message_member_array[5] = { - { - "x", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetLocalPosition_Request, x), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "y", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetLocalPosition_Request, y), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "z", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetLocalPosition_Request, z), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "yaw", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetLocalPosition_Request, yaw), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "vehicle_name", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetLocalPosition_Request, vehicle_name), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers SetLocalPosition_Request_message_members = { - "airsim_interfaces::srv", // message namespace - "SetLocalPosition_Request", // message name - 5, // number of fields - sizeof(airsim_interfaces::srv::SetLocalPosition_Request), - SetLocalPosition_Request_message_member_array, // message members - SetLocalPosition_Request_init_function, // function to initialize message memory (memory has to be allocated) - SetLocalPosition_Request_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t SetLocalPosition_Request_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &SetLocalPosition_Request_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetLocalPosition_Request_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition_Request)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetLocalPosition_Request_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "array" -// already included above -// #include "cstddef" -// already included above -// #include "string" -// already included above -// #include "vector" -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void SetLocalPosition_Response_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::SetLocalPosition_Response(_init); -} - -void SetLocalPosition_Response_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~SetLocalPosition_Response(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember SetLocalPosition_Response_message_member_array[2] = { - { - "success", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetLocalPosition_Response, success), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - }, - { - "message", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::SetLocalPosition_Response, message), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers SetLocalPosition_Response_message_members = { - "airsim_interfaces::srv", // message namespace - "SetLocalPosition_Response", // message name - 2, // number of fields - sizeof(airsim_interfaces::srv::SetLocalPosition_Response), - SetLocalPosition_Response_message_member_array, // message members - SetLocalPosition_Response_init_function, // function to initialize message memory (memory has to be allocated) - SetLocalPosition_Response_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t SetLocalPosition_Response_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &SetLocalPosition_Response_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetLocalPosition_Response_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition_Response)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetLocalPosition_Response_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -// this is intentionally not const to allow initialization later to prevent an initialization race -static ::rosidl_typesupport_introspection_cpp::ServiceMembers SetLocalPosition_service_members = { - "airsim_interfaces::srv", // service namespace - "SetLocalPosition", // service name - // these two fields are initialized below on the first access - // see get_service_type_support_handle() - nullptr, // request message - nullptr // response message -}; - -static const rosidl_service_type_support_t SetLocalPosition_service_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &SetLocalPosition_service_members, - get_service_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -get_service_type_support_handle() -{ - // get a handle to the value to be returned - auto service_type_support = - &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::SetLocalPosition_service_type_support_handle; - // get a non-const and properly typed version of the data void * - auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( - static_cast( - service_type_support->data)); - // make sure that both the request_members_ and the response_members_ are initialized - // if they are not, initialize them - if ( - service_members->request_members_ == nullptr || - service_members->response_members_ == nullptr) - { - // initialize the request_members_ with the static function from the external library - service_members->request_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::SetLocalPosition_Request - >()->data - ); - // initialize the response_members_ with the static function from the external library - service_members->response_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::SetLocalPosition_Response - >()->data - ); - } - // finally return the properly initialized service_type_support handle - return service_type_support; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, SetLocalPosition)() { - return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.h deleted file mode 100644 index 52ba7ad877..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/set_local_position__type_support.h +++ /dev/null @@ -1,58 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - SetLocalPosition_Request -)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - SetLocalPosition_Response -)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - SetLocalPosition -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__SET_LOCAL_POSITION__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__builder.hpp deleted file mode 100644 index c5cde9429b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__builder.hpp +++ /dev/null @@ -1,97 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__BUILDER_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__BUILDER_HPP_ - -#include "airsim_interfaces/srv/detail/takeoff__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_Takeoff_Request_wait_on_last_task -{ -public: - Init_Takeoff_Request_wait_on_last_task() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - ::airsim_interfaces::srv::Takeoff_Request wait_on_last_task(::airsim_interfaces::srv::Takeoff_Request::_wait_on_last_task_type arg) - { - msg_.wait_on_last_task = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::Takeoff_Request msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::Takeoff_Request>() -{ - return airsim_interfaces::srv::builder::Init_Takeoff_Request_wait_on_last_task(); -} - -} // namespace airsim_interfaces - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_Takeoff_Response_success -{ -public: - Init_Takeoff_Response_success() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - ::airsim_interfaces::srv::Takeoff_Response success(::airsim_interfaces::srv::Takeoff_Response::_success_type arg) - { - msg_.success = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::Takeoff_Response msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::Takeoff_Response>() -{ - return airsim_interfaces::srv::builder::Init_Takeoff_Response_success(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.c deleted file mode 100644 index 29989a0bca..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.c +++ /dev/null @@ -1,266 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/srv/detail/takeoff__functions.h" - -#include -#include -#include -#include - -bool -airsim_interfaces__srv__Takeoff_Request__init(airsim_interfaces__srv__Takeoff_Request * msg) -{ - if (!msg) { - return false; - } - // wait_on_last_task - return true; -} - -void -airsim_interfaces__srv__Takeoff_Request__fini(airsim_interfaces__srv__Takeoff_Request * msg) -{ - if (!msg) { - return; - } - // wait_on_last_task -} - -airsim_interfaces__srv__Takeoff_Request * -airsim_interfaces__srv__Takeoff_Request__create() -{ - airsim_interfaces__srv__Takeoff_Request * msg = (airsim_interfaces__srv__Takeoff_Request *)malloc(sizeof(airsim_interfaces__srv__Takeoff_Request)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__Takeoff_Request)); - bool success = airsim_interfaces__srv__Takeoff_Request__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__Takeoff_Request__destroy(airsim_interfaces__srv__Takeoff_Request * msg) -{ - if (msg) { - airsim_interfaces__srv__Takeoff_Request__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__Takeoff_Request__Sequence__init(airsim_interfaces__srv__Takeoff_Request__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__Takeoff_Request * data = NULL; - if (size) { - data = (airsim_interfaces__srv__Takeoff_Request *)calloc(size, sizeof(airsim_interfaces__srv__Takeoff_Request)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__Takeoff_Request__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__Takeoff_Request__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__Takeoff_Request__Sequence__fini(airsim_interfaces__srv__Takeoff_Request__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__Takeoff_Request__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__Takeoff_Request__Sequence * -airsim_interfaces__srv__Takeoff_Request__Sequence__create(size_t size) -{ - airsim_interfaces__srv__Takeoff_Request__Sequence * array = (airsim_interfaces__srv__Takeoff_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__Takeoff_Request__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__Takeoff_Request__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__Takeoff_Request__Sequence__destroy(airsim_interfaces__srv__Takeoff_Request__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__Takeoff_Request__Sequence__fini(array); - } - free(array); -} - - -bool -airsim_interfaces__srv__Takeoff_Response__init(airsim_interfaces__srv__Takeoff_Response * msg) -{ - if (!msg) { - return false; - } - // success - return true; -} - -void -airsim_interfaces__srv__Takeoff_Response__fini(airsim_interfaces__srv__Takeoff_Response * msg) -{ - if (!msg) { - return; - } - // success -} - -airsim_interfaces__srv__Takeoff_Response * -airsim_interfaces__srv__Takeoff_Response__create() -{ - airsim_interfaces__srv__Takeoff_Response * msg = (airsim_interfaces__srv__Takeoff_Response *)malloc(sizeof(airsim_interfaces__srv__Takeoff_Response)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__Takeoff_Response)); - bool success = airsim_interfaces__srv__Takeoff_Response__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__Takeoff_Response__destroy(airsim_interfaces__srv__Takeoff_Response * msg) -{ - if (msg) { - airsim_interfaces__srv__Takeoff_Response__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__Takeoff_Response__Sequence__init(airsim_interfaces__srv__Takeoff_Response__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__Takeoff_Response * data = NULL; - if (size) { - data = (airsim_interfaces__srv__Takeoff_Response *)calloc(size, sizeof(airsim_interfaces__srv__Takeoff_Response)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__Takeoff_Response__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__Takeoff_Response__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__Takeoff_Response__Sequence__fini(airsim_interfaces__srv__Takeoff_Response__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__Takeoff_Response__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__Takeoff_Response__Sequence * -airsim_interfaces__srv__Takeoff_Response__Sequence__create(size_t size) -{ - airsim_interfaces__srv__Takeoff_Response__Sequence * array = (airsim_interfaces__srv__Takeoff_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__Takeoff_Response__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__Takeoff_Response__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__Takeoff_Response__Sequence__destroy(airsim_interfaces__srv__Takeoff_Response__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__Takeoff_Response__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.h deleted file mode 100644 index bbf93424db..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__functions.h +++ /dev/null @@ -1,223 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/srv/detail/takeoff__struct.h" - -/// Initialize srv/Takeoff message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__Takeoff_Request - * )) before or use - * airsim_interfaces__srv__Takeoff_Request__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Takeoff_Request__init(airsim_interfaces__srv__Takeoff_Request * msg); - -/// Finalize srv/Takeoff message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Takeoff_Request__fini(airsim_interfaces__srv__Takeoff_Request * msg); - -/// Create srv/Takeoff message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__Takeoff_Request__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Takeoff_Request * -airsim_interfaces__srv__Takeoff_Request__create(); - -/// Destroy srv/Takeoff message. -/** - * It calls - * airsim_interfaces__srv__Takeoff_Request__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Takeoff_Request__destroy(airsim_interfaces__srv__Takeoff_Request * msg); - - -/// Initialize array of srv/Takeoff messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__Takeoff_Request__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Takeoff_Request__Sequence__init(airsim_interfaces__srv__Takeoff_Request__Sequence * array, size_t size); - -/// Finalize array of srv/Takeoff messages. -/** - * It calls - * airsim_interfaces__srv__Takeoff_Request__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Takeoff_Request__Sequence__fini(airsim_interfaces__srv__Takeoff_Request__Sequence * array); - -/// Create array of srv/Takeoff messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__Takeoff_Request__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Takeoff_Request__Sequence * -airsim_interfaces__srv__Takeoff_Request__Sequence__create(size_t size); - -/// Destroy array of srv/Takeoff messages. -/** - * It calls - * airsim_interfaces__srv__Takeoff_Request__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Takeoff_Request__Sequence__destroy(airsim_interfaces__srv__Takeoff_Request__Sequence * array); - -/// Initialize srv/Takeoff message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__Takeoff_Response - * )) before or use - * airsim_interfaces__srv__Takeoff_Response__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Takeoff_Response__init(airsim_interfaces__srv__Takeoff_Response * msg); - -/// Finalize srv/Takeoff message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Takeoff_Response__fini(airsim_interfaces__srv__Takeoff_Response * msg); - -/// Create srv/Takeoff message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__Takeoff_Response__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Takeoff_Response * -airsim_interfaces__srv__Takeoff_Response__create(); - -/// Destroy srv/Takeoff message. -/** - * It calls - * airsim_interfaces__srv__Takeoff_Response__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Takeoff_Response__destroy(airsim_interfaces__srv__Takeoff_Response * msg); - - -/// Initialize array of srv/Takeoff messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__Takeoff_Response__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__Takeoff_Response__Sequence__init(airsim_interfaces__srv__Takeoff_Response__Sequence * array, size_t size); - -/// Finalize array of srv/Takeoff messages. -/** - * It calls - * airsim_interfaces__srv__Takeoff_Response__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Takeoff_Response__Sequence__fini(airsim_interfaces__srv__Takeoff_Response__Sequence * array); - -/// Create array of srv/Takeoff messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__Takeoff_Response__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__Takeoff_Response__Sequence * -airsim_interfaces__srv__Takeoff_Response__Sequence__create(size_t size); - -/// Destroy array of srv/Takeoff messages. -/** - * It calls - * airsim_interfaces__srv__Takeoff_Response__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__Takeoff_Response__Sequence__destroy(airsim_interfaces__srv__Takeoff_Response__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index 0b4cd5975d..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,87 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__Takeoff_Request( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__Takeoff_Request( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Takeoff_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__Takeoff_Response( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__Takeoff_Response( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Takeoff_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, Takeoff)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index 6fa39198e4..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,175 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/srv/detail/takeoff__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::Takeoff_Request & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::Takeoff_Request & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::Takeoff_Request & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_Takeoff_Request( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Takeoff_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -// already included above -// #include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::Takeoff_Response & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::Takeoff_Response & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::Takeoff_Response & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_Takeoff_Response( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Takeoff_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rmw/types.h" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, Takeoff)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 8de7eea702..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,47 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Request)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Response)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 85bf07ff31..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,67 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.h deleted file mode 100644 index 8458a577a9..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.h +++ /dev/null @@ -1,59 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Struct defined in srv/Takeoff in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__Takeoff_Request -{ - bool wait_on_last_task; -} airsim_interfaces__srv__Takeoff_Request; - -// Struct for a sequence of airsim_interfaces__srv__Takeoff_Request. -typedef struct airsim_interfaces__srv__Takeoff_Request__Sequence -{ - airsim_interfaces__srv__Takeoff_Request * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__Takeoff_Request__Sequence; - - -// Constants defined in the message - -// Struct defined in srv/Takeoff in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__Takeoff_Response -{ - bool success; -} airsim_interfaces__srv__Takeoff_Response; - -// Struct for a sequence of airsim_interfaces__srv__Takeoff_Response. -typedef struct airsim_interfaces__srv__Takeoff_Response__Sequence -{ - airsim_interfaces__srv__Takeoff_Response * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__Takeoff_Response__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.hpp deleted file mode 100644 index 031b366cad..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__struct.hpp +++ /dev/null @@ -1,260 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__Takeoff_Request __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__Takeoff_Request __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct Takeoff_Request_ -{ - using Type = Takeoff_Request_; - - explicit Takeoff_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->wait_on_last_task = false; - } - } - - explicit Takeoff_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->wait_on_last_task = false; - } - } - - // field types and members - using _wait_on_last_task_type = - bool; - _wait_on_last_task_type wait_on_last_task; - - // setters for named parameter idiom - Type & set__wait_on_last_task( - const bool & _arg) - { - this->wait_on_last_task = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::Takeoff_Request_ *; - using ConstRawPtr = - const airsim_interfaces::srv::Takeoff_Request_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__Takeoff_Request - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__Takeoff_Request - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const Takeoff_Request_ & other) const - { - if (this->wait_on_last_task != other.wait_on_last_task) { - return false; - } - return true; - } - bool operator!=(const Takeoff_Request_ & other) const - { - return !this->operator==(other); - } -}; // struct Takeoff_Request_ - -// alias to use template instance with default allocator -using Takeoff_Request = - airsim_interfaces::srv::Takeoff_Request_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__Takeoff_Response __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__Takeoff_Response __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct Takeoff_Response_ -{ - using Type = Takeoff_Response_; - - explicit Takeoff_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - explicit Takeoff_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - // field types and members - using _success_type = - bool; - _success_type success; - - // setters for named parameter idiom - Type & set__success( - const bool & _arg) - { - this->success = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::Takeoff_Response_ *; - using ConstRawPtr = - const airsim_interfaces::srv::Takeoff_Response_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__Takeoff_Response - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__Takeoff_Response - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const Takeoff_Response_ & other) const - { - if (this->success != other.success) { - return false; - } - return true; - } - bool operator!=(const Takeoff_Response_ & other) const - { - return !this->operator==(other); - } -}; // struct Takeoff_Response_ - -// alias to use template instance with default allocator -using Takeoff_Response = - airsim_interfaces::srv::Takeoff_Response_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - -namespace airsim_interfaces -{ - -namespace srv -{ - -struct Takeoff -{ - using Request = airsim_interfaces::srv::Takeoff_Request; - using Response = airsim_interfaces::srv::Takeoff_Response; -}; - -} // namespace srv - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__traits.hpp deleted file mode 100644 index 9bb81d7d83..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__traits.hpp +++ /dev/null @@ -1,126 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TRAITS_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TRAITS_HPP_ - -#include "airsim_interfaces/srv/detail/takeoff__struct.hpp" -#include -#include -#include - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::Takeoff_Request"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/Takeoff_Request"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::Takeoff_Response"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/Takeoff_Response"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::Takeoff"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/Takeoff"; -} - -template<> -struct has_fixed_size - : std::integral_constant< - bool, - has_fixed_size::value && - has_fixed_size::value - > -{ -}; - -template<> -struct has_bounded_size - : std::integral_constant< - bool, - has_bounded_size::value && - has_bounded_size::value - > -{ -}; - -template<> -struct is_service - : std::true_type -{ -}; - -template<> -struct is_service_request - : std::true_type -{ -}; - -template<> -struct is_service_response - : std::true_type -{ -}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.c deleted file mode 100644 index a96e079729..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.c +++ /dev/null @@ -1,224 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/srv/detail/takeoff__functions.h" -#include "airsim_interfaces/srv/detail/takeoff__struct.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -void Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__Takeoff_Request__init(message_memory); -} - -void Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_fini_function(void * message_memory) -{ - airsim_interfaces__srv__Takeoff_Request__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_member_array[1] = { - { - "wait_on_last_task", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__Takeoff_Request, wait_on_last_task), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_members = { - "airsim_interfaces__srv", // message namespace - "Takeoff_Request", // message name - 1, // number of fields - sizeof(airsim_interfaces__srv__Takeoff_Request), - Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_member_array, // message members - Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_init_function, // function to initialize message memory (memory has to be allocated) - Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_type_support_handle = { - 0, - &Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Request)() { - if (!Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_type_support_handle.typesupport_identifier) { - Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &Takeoff_Request__rosidl_typesupport_introspection_c__Takeoff_Request_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "rosidl_typesupport_introspection_c/field_types.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -// already included above -// #include "rosidl_typesupport_introspection_c/message_introspection.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff__functions.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff__struct.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -void Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__Takeoff_Response__init(message_memory); -} - -void Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_fini_function(void * message_memory) -{ - airsim_interfaces__srv__Takeoff_Response__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_member_array[1] = { - { - "success", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__Takeoff_Response, success), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_members = { - "airsim_interfaces__srv", // message namespace - "Takeoff_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces__srv__Takeoff_Response), - Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_member_array, // message members - Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_init_function, // function to initialize message memory (memory has to be allocated) - Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_type_support_handle = { - 0, - &Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Response)() { - if (!Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_type_support_handle.typesupport_identifier) { - Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &Takeoff_Response__rosidl_typesupport_introspection_c__Takeoff_Response_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff__rosidl_typesupport_introspection_c.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/service_introspection.h" - -// this is intentionally not const to allow initialization later to prevent an initialization race -static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_members = { - "airsim_interfaces__srv", // service namespace - "Takeoff", // service name - // these two fields are initialized below on the first access - NULL, // request message - // airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_Request_message_type_support_handle, - NULL // response message - // airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_Response_message_type_support_handle -}; - -static rosidl_service_type_support_t airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_type_support_handle = { - 0, - &airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_members, - get_service_typesupport_handle_function, -}; - -// Forward declaration of request/response type support functions -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Request)(); - -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Response)(); - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff)() { - if (!airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_type_support_handle.typesupport_identifier) { - airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - rosidl_typesupport_introspection_c__ServiceMembers * service_members = - (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_type_support_handle.data; - - if (!service_members->request_members_) { - service_members->request_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Request)()->data; - } - if (!service_members->response_members_) { - service_members->response_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, Takeoff_Response)()->data; - } - - return &airsim_interfaces__srv__detail__takeoff__rosidl_typesupport_introspection_c__Takeoff_service_type_support_handle; -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.cpp deleted file mode 100644 index 34118400bd..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.cpp +++ /dev/null @@ -1,332 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/srv/detail/takeoff__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void Takeoff_Request_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::Takeoff_Request(_init); -} - -void Takeoff_Request_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~Takeoff_Request(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember Takeoff_Request_message_member_array[1] = { - { - "wait_on_last_task", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::Takeoff_Request, wait_on_last_task), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers Takeoff_Request_message_members = { - "airsim_interfaces::srv", // message namespace - "Takeoff_Request", // message name - 1, // number of fields - sizeof(airsim_interfaces::srv::Takeoff_Request), - Takeoff_Request_message_member_array, // message members - Takeoff_Request_init_function, // function to initialize message memory (memory has to be allocated) - Takeoff_Request_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t Takeoff_Request_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &Takeoff_Request_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Takeoff_Request_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff_Request)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Takeoff_Request_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "array" -// already included above -// #include "cstddef" -// already included above -// #include "string" -// already included above -// #include "vector" -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void Takeoff_Response_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::Takeoff_Response(_init); -} - -void Takeoff_Response_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~Takeoff_Response(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember Takeoff_Response_message_member_array[1] = { - { - "success", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::Takeoff_Response, success), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers Takeoff_Response_message_members = { - "airsim_interfaces::srv", // message namespace - "Takeoff_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces::srv::Takeoff_Response), - Takeoff_Response_message_member_array, // message members - Takeoff_Response_init_function, // function to initialize message memory (memory has to be allocated) - Takeoff_Response_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t Takeoff_Response_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &Takeoff_Response_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Takeoff_Response_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff_Response)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Takeoff_Response_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -// this is intentionally not const to allow initialization later to prevent an initialization race -static ::rosidl_typesupport_introspection_cpp::ServiceMembers Takeoff_service_members = { - "airsim_interfaces::srv", // service namespace - "Takeoff", // service name - // these two fields are initialized below on the first access - // see get_service_type_support_handle() - nullptr, // request message - nullptr // response message -}; - -static const rosidl_service_type_support_t Takeoff_service_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &Takeoff_service_members, - get_service_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -get_service_type_support_handle() -{ - // get a handle to the value to be returned - auto service_type_support = - &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::Takeoff_service_type_support_handle; - // get a non-const and properly typed version of the data void * - auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( - static_cast( - service_type_support->data)); - // make sure that both the request_members_ and the response_members_ are initialized - // if they are not, initialize them - if ( - service_members->request_members_ == nullptr || - service_members->response_members_ == nullptr) - { - // initialize the request_members_ with the static function from the external library - service_members->request_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::Takeoff_Request - >()->data - ); - // initialize the response_members_ with the static function from the external library - service_members->response_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::Takeoff_Response - >()->data - ); - } - // finally return the properly initialized service_type_support handle - return service_type_support; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, Takeoff)() { - return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.h deleted file mode 100644 index 87ffda7736..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff__type_support.h +++ /dev/null @@ -1,58 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - Takeoff_Request -)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - Takeoff_Response -)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - Takeoff -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__builder.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__builder.hpp deleted file mode 100644 index 5b7f0c8e6f..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__builder.hpp +++ /dev/null @@ -1,113 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__BUILDER_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__BUILDER_HPP_ - -#include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" -#include -#include -#include - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_TakeoffGroup_Request_wait_on_last_task -{ -public: - explicit Init_TakeoffGroup_Request_wait_on_last_task(::airsim_interfaces::srv::TakeoffGroup_Request & msg) - : msg_(msg) - {} - ::airsim_interfaces::srv::TakeoffGroup_Request wait_on_last_task(::airsim_interfaces::srv::TakeoffGroup_Request::_wait_on_last_task_type arg) - { - msg_.wait_on_last_task = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::TakeoffGroup_Request msg_; -}; - -class Init_TakeoffGroup_Request_vehicle_names -{ -public: - Init_TakeoffGroup_Request_vehicle_names() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - Init_TakeoffGroup_Request_wait_on_last_task vehicle_names(::airsim_interfaces::srv::TakeoffGroup_Request::_vehicle_names_type arg) - { - msg_.vehicle_names = std::move(arg); - return Init_TakeoffGroup_Request_wait_on_last_task(msg_); - } - -private: - ::airsim_interfaces::srv::TakeoffGroup_Request msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::TakeoffGroup_Request>() -{ - return airsim_interfaces::srv::builder::Init_TakeoffGroup_Request_vehicle_names(); -} - -} // namespace airsim_interfaces - - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace builder -{ - -class Init_TakeoffGroup_Response_success -{ -public: - Init_TakeoffGroup_Response_success() - : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) - {} - ::airsim_interfaces::srv::TakeoffGroup_Response success(::airsim_interfaces::srv::TakeoffGroup_Response::_success_type arg) - { - msg_.success = std::move(arg); - return std::move(msg_); - } - -private: - ::airsim_interfaces::srv::TakeoffGroup_Response msg_; -}; - -} // namespace builder - -} // namespace srv - -template -auto build(); - -template<> -inline -auto build<::airsim_interfaces::srv::TakeoffGroup_Response>() -{ - return airsim_interfaces::srv::builder::Init_TakeoffGroup_Response_success(); -} - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__BUILDER_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.c deleted file mode 100644 index 24da8c21e6..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.c +++ /dev/null @@ -1,277 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.c.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice -#include "airsim_interfaces/srv/detail/takeoff_group__functions.h" - -#include -#include -#include -#include - -// Include directives for member types -// Member `vehicle_names` -#include "rosidl_runtime_c/string_functions.h" - -bool -airsim_interfaces__srv__TakeoffGroup_Request__init(airsim_interfaces__srv__TakeoffGroup_Request * msg) -{ - if (!msg) { - return false; - } - // vehicle_names - if (!rosidl_runtime_c__String__Sequence__init(&msg->vehicle_names, 0)) { - airsim_interfaces__srv__TakeoffGroup_Request__fini(msg); - return false; - } - // wait_on_last_task - return true; -} - -void -airsim_interfaces__srv__TakeoffGroup_Request__fini(airsim_interfaces__srv__TakeoffGroup_Request * msg) -{ - if (!msg) { - return; - } - // vehicle_names - rosidl_runtime_c__String__Sequence__fini(&msg->vehicle_names); - // wait_on_last_task -} - -airsim_interfaces__srv__TakeoffGroup_Request * -airsim_interfaces__srv__TakeoffGroup_Request__create() -{ - airsim_interfaces__srv__TakeoffGroup_Request * msg = (airsim_interfaces__srv__TakeoffGroup_Request *)malloc(sizeof(airsim_interfaces__srv__TakeoffGroup_Request)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__TakeoffGroup_Request)); - bool success = airsim_interfaces__srv__TakeoffGroup_Request__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__TakeoffGroup_Request__destroy(airsim_interfaces__srv__TakeoffGroup_Request * msg) -{ - if (msg) { - airsim_interfaces__srv__TakeoffGroup_Request__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__TakeoffGroup_Request__Sequence__init(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__TakeoffGroup_Request * data = NULL; - if (size) { - data = (airsim_interfaces__srv__TakeoffGroup_Request *)calloc(size, sizeof(airsim_interfaces__srv__TakeoffGroup_Request)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__TakeoffGroup_Request__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__TakeoffGroup_Request__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__TakeoffGroup_Request__Sequence__fini(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__TakeoffGroup_Request__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__TakeoffGroup_Request__Sequence * -airsim_interfaces__srv__TakeoffGroup_Request__Sequence__create(size_t size) -{ - airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array = (airsim_interfaces__srv__TakeoffGroup_Request__Sequence *)malloc(sizeof(airsim_interfaces__srv__TakeoffGroup_Request__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__TakeoffGroup_Request__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__TakeoffGroup_Request__Sequence__destroy(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__TakeoffGroup_Request__Sequence__fini(array); - } - free(array); -} - - -bool -airsim_interfaces__srv__TakeoffGroup_Response__init(airsim_interfaces__srv__TakeoffGroup_Response * msg) -{ - if (!msg) { - return false; - } - // success - return true; -} - -void -airsim_interfaces__srv__TakeoffGroup_Response__fini(airsim_interfaces__srv__TakeoffGroup_Response * msg) -{ - if (!msg) { - return; - } - // success -} - -airsim_interfaces__srv__TakeoffGroup_Response * -airsim_interfaces__srv__TakeoffGroup_Response__create() -{ - airsim_interfaces__srv__TakeoffGroup_Response * msg = (airsim_interfaces__srv__TakeoffGroup_Response *)malloc(sizeof(airsim_interfaces__srv__TakeoffGroup_Response)); - if (!msg) { - return NULL; - } - memset(msg, 0, sizeof(airsim_interfaces__srv__TakeoffGroup_Response)); - bool success = airsim_interfaces__srv__TakeoffGroup_Response__init(msg); - if (!success) { - free(msg); - return NULL; - } - return msg; -} - -void -airsim_interfaces__srv__TakeoffGroup_Response__destroy(airsim_interfaces__srv__TakeoffGroup_Response * msg) -{ - if (msg) { - airsim_interfaces__srv__TakeoffGroup_Response__fini(msg); - } - free(msg); -} - - -bool -airsim_interfaces__srv__TakeoffGroup_Response__Sequence__init(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array, size_t size) -{ - if (!array) { - return false; - } - airsim_interfaces__srv__TakeoffGroup_Response * data = NULL; - if (size) { - data = (airsim_interfaces__srv__TakeoffGroup_Response *)calloc(size, sizeof(airsim_interfaces__srv__TakeoffGroup_Response)); - if (!data) { - return false; - } - // initialize all array elements - size_t i; - for (i = 0; i < size; ++i) { - bool success = airsim_interfaces__srv__TakeoffGroup_Response__init(&data[i]); - if (!success) { - break; - } - } - if (i < size) { - // if initialization failed finalize the already initialized array elements - for (; i > 0; --i) { - airsim_interfaces__srv__TakeoffGroup_Response__fini(&data[i - 1]); - } - free(data); - return false; - } - } - array->data = data; - array->size = size; - array->capacity = size; - return true; -} - -void -airsim_interfaces__srv__TakeoffGroup_Response__Sequence__fini(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array) -{ - if (!array) { - return; - } - if (array->data) { - // ensure that data and capacity values are consistent - assert(array->capacity > 0); - // finalize all array elements - for (size_t i = 0; i < array->capacity; ++i) { - airsim_interfaces__srv__TakeoffGroup_Response__fini(&array->data[i]); - } - free(array->data); - array->data = NULL; - array->size = 0; - array->capacity = 0; - } else { - // ensure that data, size, and capacity values are consistent - assert(0 == array->size); - assert(0 == array->capacity); - } -} - -airsim_interfaces__srv__TakeoffGroup_Response__Sequence * -airsim_interfaces__srv__TakeoffGroup_Response__Sequence__create(size_t size) -{ - airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array = (airsim_interfaces__srv__TakeoffGroup_Response__Sequence *)malloc(sizeof(airsim_interfaces__srv__TakeoffGroup_Response__Sequence)); - if (!array) { - return NULL; - } - bool success = airsim_interfaces__srv__TakeoffGroup_Response__Sequence__init(array, size); - if (!success) { - free(array); - return NULL; - } - return array; -} - -void -airsim_interfaces__srv__TakeoffGroup_Response__Sequence__destroy(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array) -{ - if (array) { - airsim_interfaces__srv__TakeoffGroup_Response__Sequence__fini(array); - } - free(array); -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.h deleted file mode 100644 index 8348d8c6d8..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__functions.h +++ /dev/null @@ -1,223 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__functions.h.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__FUNCTIONS_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__FUNCTIONS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include - -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#include "airsim_interfaces/srv/detail/takeoff_group__struct.h" - -/// Initialize srv/TakeoffGroup message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__TakeoffGroup_Request - * )) before or use - * airsim_interfaces__srv__TakeoffGroup_Request__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__TakeoffGroup_Request__init(airsim_interfaces__srv__TakeoffGroup_Request * msg); - -/// Finalize srv/TakeoffGroup message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__TakeoffGroup_Request__fini(airsim_interfaces__srv__TakeoffGroup_Request * msg); - -/// Create srv/TakeoffGroup message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__TakeoffGroup_Request__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__TakeoffGroup_Request * -airsim_interfaces__srv__TakeoffGroup_Request__create(); - -/// Destroy srv/TakeoffGroup message. -/** - * It calls - * airsim_interfaces__srv__TakeoffGroup_Request__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__TakeoffGroup_Request__destroy(airsim_interfaces__srv__TakeoffGroup_Request * msg); - - -/// Initialize array of srv/TakeoffGroup messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__TakeoffGroup_Request__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__TakeoffGroup_Request__Sequence__init(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array, size_t size); - -/// Finalize array of srv/TakeoffGroup messages. -/** - * It calls - * airsim_interfaces__srv__TakeoffGroup_Request__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__TakeoffGroup_Request__Sequence__fini(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array); - -/// Create array of srv/TakeoffGroup messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__TakeoffGroup_Request__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__TakeoffGroup_Request__Sequence * -airsim_interfaces__srv__TakeoffGroup_Request__Sequence__create(size_t size); - -/// Destroy array of srv/TakeoffGroup messages. -/** - * It calls - * airsim_interfaces__srv__TakeoffGroup_Request__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__TakeoffGroup_Request__Sequence__destroy(airsim_interfaces__srv__TakeoffGroup_Request__Sequence * array); - -/// Initialize srv/TakeoffGroup message. -/** - * If the init function is called twice for the same message without - * calling fini inbetween previously allocated memory will be leaked. - * \param[in,out] msg The previously allocated message pointer. - * Fields without a default value will not be initialized by this function. - * You might want to call memset(msg, 0, sizeof( - * airsim_interfaces__srv__TakeoffGroup_Response - * )) before or use - * airsim_interfaces__srv__TakeoffGroup_Response__create() - * to allocate and initialize the message. - * \return true if initialization was successful, otherwise false - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__TakeoffGroup_Response__init(airsim_interfaces__srv__TakeoffGroup_Response * msg); - -/// Finalize srv/TakeoffGroup message. -/** - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__TakeoffGroup_Response__fini(airsim_interfaces__srv__TakeoffGroup_Response * msg); - -/// Create srv/TakeoffGroup message. -/** - * It allocates the memory for the message, sets the memory to zero, and - * calls - * airsim_interfaces__srv__TakeoffGroup_Response__init(). - * \return The pointer to the initialized message if successful, - * otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__TakeoffGroup_Response * -airsim_interfaces__srv__TakeoffGroup_Response__create(); - -/// Destroy srv/TakeoffGroup message. -/** - * It calls - * airsim_interfaces__srv__TakeoffGroup_Response__fini() - * and frees the memory of the message. - * \param[in,out] msg The allocated message pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__TakeoffGroup_Response__destroy(airsim_interfaces__srv__TakeoffGroup_Response * msg); - - -/// Initialize array of srv/TakeoffGroup messages. -/** - * It allocates the memory for the number of elements and calls - * airsim_interfaces__srv__TakeoffGroup_Response__init() - * for each element of the array. - * \param[in,out] array The allocated array pointer. - * \param[in] size The size / capacity of the array. - * \return true if initialization was successful, otherwise false - * If the array pointer is valid and the size is zero it is guaranteed - # to return true. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -bool -airsim_interfaces__srv__TakeoffGroup_Response__Sequence__init(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array, size_t size); - -/// Finalize array of srv/TakeoffGroup messages. -/** - * It calls - * airsim_interfaces__srv__TakeoffGroup_Response__fini() - * for each element of the array and frees the memory for the number of - * elements. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__TakeoffGroup_Response__Sequence__fini(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array); - -/// Create array of srv/TakeoffGroup messages. -/** - * It allocates the memory for the array and calls - * airsim_interfaces__srv__TakeoffGroup_Response__Sequence__init(). - * \param[in] size The size / capacity of the array. - * \return The pointer to the initialized array if successful, otherwise NULL - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -airsim_interfaces__srv__TakeoffGroup_Response__Sequence * -airsim_interfaces__srv__TakeoffGroup_Response__Sequence__create(size_t size); - -/// Destroy array of srv/TakeoffGroup messages. -/** - * It calls - * airsim_interfaces__srv__TakeoffGroup_Response__Sequence__fini() - * on the array, - * and frees the memory of the array. - * \param[in,out] array The initialized array pointer. - */ -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -void -airsim_interfaces__srv__TakeoffGroup_Response__Sequence__destroy(airsim_interfaces__srv__TakeoffGroup_Response__Sequence * array); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__FUNCTIONS_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_c.h deleted file mode 100644 index 68a25ab46b..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_c.h +++ /dev/null @@ -1,87 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ - - -#include -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__TakeoffGroup_Request( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__TakeoffGroup_Request( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, TakeoffGroup_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t get_serialized_size_airsim_interfaces__srv__TakeoffGroup_Response( - const void * untyped_ros_message, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -size_t max_serialized_size_airsim_interfaces__srv__TakeoffGroup_Response( - bool & full_bounded, - size_t current_alignment); - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, TakeoffGroup_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, airsim_interfaces, srv, TakeoffGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_cpp.hpp deleted file mode 100644 index ea245d7331..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_fastrtps_cpp.hpp +++ /dev/null @@ -1,175 +0,0 @@ -// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -#include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -#include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::TakeoffGroup_Request & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::TakeoffGroup_Request & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::TakeoffGroup_Request & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_TakeoffGroup_Request( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, TakeoffGroup_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -# ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-register" -# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -# endif -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -// already included above -// #include "fastcdr/Cdr.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace typesupport_fastrtps_cpp -{ - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_serialize( - const airsim_interfaces::srv::TakeoffGroup_Response & ros_message, - eprosima::fastcdr::Cdr & cdr); - -bool -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -cdr_deserialize( - eprosima::fastcdr::Cdr & cdr, - airsim_interfaces::srv::TakeoffGroup_Response & ros_message); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -get_serialized_size( - const airsim_interfaces::srv::TakeoffGroup_Response & ros_message, - size_t current_alignment); - -size_t -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -max_serialized_size_TakeoffGroup_Response( - bool & full_bounded, - size_t current_alignment); - -} // namespace typesupport_fastrtps_cpp - -} // namespace srv - -} // namespace airsim_interfaces - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, TakeoffGroup_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rmw/types.h" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, airsim_interfaces, srv, TakeoffGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h deleted file mode 100644 index 48d4986db4..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h +++ /dev/null @@ -1,47 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Request)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Response)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_cpp.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_cpp.hpp deleted file mode 100644 index 933594ff3a..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_cpp.hpp +++ /dev/null @@ -1,67 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ - - -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_interface/macros.h" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup_Request)(); - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -// TODO(dirk-thomas) these visibility macros should be message package specific -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup_Response)(); - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * - ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.h deleted file mode 100644 index 2ea65c4902..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.h +++ /dev/null @@ -1,64 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__struct.h.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include -#include - - -// Constants defined in the message - -// Include directives for member types -// Member 'vehicle_names' -#include "rosidl_runtime_c/string.h" - -// Struct defined in srv/TakeoffGroup in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__TakeoffGroup_Request -{ - rosidl_runtime_c__String__Sequence vehicle_names; - bool wait_on_last_task; -} airsim_interfaces__srv__TakeoffGroup_Request; - -// Struct for a sequence of airsim_interfaces__srv__TakeoffGroup_Request. -typedef struct airsim_interfaces__srv__TakeoffGroup_Request__Sequence -{ - airsim_interfaces__srv__TakeoffGroup_Request * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__TakeoffGroup_Request__Sequence; - - -// Constants defined in the message - -// Struct defined in srv/TakeoffGroup in the package airsim_interfaces. -typedef struct airsim_interfaces__srv__TakeoffGroup_Response -{ - bool success; -} airsim_interfaces__srv__TakeoffGroup_Response; - -// Struct for a sequence of airsim_interfaces__srv__TakeoffGroup_Response. -typedef struct airsim_interfaces__srv__TakeoffGroup_Response__Sequence -{ - airsim_interfaces__srv__TakeoffGroup_Response * data; - /// The number of valid items in data - size_t size; - /// The number of allocated items in data - size_t capacity; -} airsim_interfaces__srv__TakeoffGroup_Response__Sequence; - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.hpp deleted file mode 100644 index bc5ce40d38..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__struct.hpp +++ /dev/null @@ -1,272 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_HPP_ - -#include -#include -#include -#include -#include -#include -#include - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Request __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Request __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct TakeoffGroup_Request_ -{ - using Type = TakeoffGroup_Request_; - - explicit TakeoffGroup_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->wait_on_last_task = false; - } - } - - explicit TakeoffGroup_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->wait_on_last_task = false; - } - } - - // field types and members - using _vehicle_names_type = - std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other>; - _vehicle_names_type vehicle_names; - using _wait_on_last_task_type = - bool; - _wait_on_last_task_type wait_on_last_task; - - // setters for named parameter idiom - Type & set__vehicle_names( - const std::vector, typename ContainerAllocator::template rebind::other>, typename ContainerAllocator::template rebind, typename ContainerAllocator::template rebind::other>>::other> & _arg) - { - this->vehicle_names = _arg; - return *this; - } - Type & set__wait_on_last_task( - const bool & _arg) - { - this->wait_on_last_task = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::TakeoffGroup_Request_ *; - using ConstRawPtr = - const airsim_interfaces::srv::TakeoffGroup_Request_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Request - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Request - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const TakeoffGroup_Request_ & other) const - { - if (this->vehicle_names != other.vehicle_names) { - return false; - } - if (this->wait_on_last_task != other.wait_on_last_task) { - return false; - } - return true; - } - bool operator!=(const TakeoffGroup_Request_ & other) const - { - return !this->operator==(other); - } -}; // struct TakeoffGroup_Request_ - -// alias to use template instance with default allocator -using TakeoffGroup_Request = - airsim_interfaces::srv::TakeoffGroup_Request_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - - -#ifndef _WIN32 -# define DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Response __attribute__((deprecated)) -#else -# define DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Response __declspec(deprecated) -#endif - -namespace airsim_interfaces -{ - -namespace srv -{ - -// message struct -template -struct TakeoffGroup_Response_ -{ - using Type = TakeoffGroup_Response_; - - explicit TakeoffGroup_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - explicit TakeoffGroup_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) - { - (void)_alloc; - if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || - rosidl_runtime_cpp::MessageInitialization::ZERO == _init) - { - this->success = false; - } - } - - // field types and members - using _success_type = - bool; - _success_type success; - - // setters for named parameter idiom - Type & set__success( - const bool & _arg) - { - this->success = _arg; - return *this; - } - - // constant declarations - - // pointer types - using RawPtr = - airsim_interfaces::srv::TakeoffGroup_Response_ *; - using ConstRawPtr = - const airsim_interfaces::srv::TakeoffGroup_Response_ *; - using SharedPtr = - std::shared_ptr>; - using ConstSharedPtr = - std::shared_ptr const>; - - template>> - using UniquePtrWithDeleter = - std::unique_ptr, Deleter>; - - using UniquePtr = UniquePtrWithDeleter<>; - - template>> - using ConstUniquePtrWithDeleter = - std::unique_ptr const, Deleter>; - using ConstUniquePtr = ConstUniquePtrWithDeleter<>; - - using WeakPtr = - std::weak_ptr>; - using ConstWeakPtr = - std::weak_ptr const>; - - // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead - // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly - typedef DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Response - std::shared_ptr> - Ptr; - typedef DEPRECATED__airsim_interfaces__srv__TakeoffGroup_Response - std::shared_ptr const> - ConstPtr; - - // comparison operators - bool operator==(const TakeoffGroup_Response_ & other) const - { - if (this->success != other.success) { - return false; - } - return true; - } - bool operator!=(const TakeoffGroup_Response_ & other) const - { - return !this->operator==(other); - } -}; // struct TakeoffGroup_Response_ - -// alias to use template instance with default allocator -using TakeoffGroup_Response = - airsim_interfaces::srv::TakeoffGroup_Response_>; - -// constant definitions - -} // namespace srv - -} // namespace airsim_interfaces - -namespace airsim_interfaces -{ - -namespace srv -{ - -struct TakeoffGroup -{ - using Request = airsim_interfaces::srv::TakeoffGroup_Request; - using Response = airsim_interfaces::srv::TakeoffGroup_Response; -}; - -} // namespace srv - -} // namespace airsim_interfaces - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__STRUCT_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__traits.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__traits.hpp deleted file mode 100644 index b24cc6e623..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__traits.hpp +++ /dev/null @@ -1,126 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TRAITS_HPP_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TRAITS_HPP_ - -#include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" -#include -#include -#include - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::TakeoffGroup_Request"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/TakeoffGroup_Request"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::TakeoffGroup_Response"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/TakeoffGroup_Response"; -} - -template<> -struct has_fixed_size - : std::integral_constant {}; - -template<> -struct has_bounded_size - : std::integral_constant {}; - -template<> -struct is_message - : std::true_type {}; - -} // namespace rosidl_generator_traits - -namespace rosidl_generator_traits -{ - -template<> -inline const char * data_type() -{ - return "airsim_interfaces::srv::TakeoffGroup"; -} - -template<> -inline const char * name() -{ - return "airsim_interfaces/srv/TakeoffGroup"; -} - -template<> -struct has_fixed_size - : std::integral_constant< - bool, - has_fixed_size::value && - has_fixed_size::value - > -{ -}; - -template<> -struct has_bounded_size - : std::integral_constant< - bool, - has_bounded_size::value && - has_bounded_size::value - > -{ -}; - -template<> -struct is_service - : std::true_type -{ -}; - -template<> -struct is_service_request - : std::true_type -{ -}; - -template<> -struct is_service_response - : std::true_type -{ -}; - -} // namespace rosidl_generator_traits - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TRAITS_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.c b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.c deleted file mode 100644 index 5e9c21b55e..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.c +++ /dev/null @@ -1,243 +0,0 @@ -// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#include -#include "airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h" -#include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -#include "rosidl_typesupport_introspection_c/field_types.h" -#include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/message_introspection.h" -#include "airsim_interfaces/srv/detail/takeoff_group__functions.h" -#include "airsim_interfaces/srv/detail/takeoff_group__struct.h" - - -// Include directives for member types -// Member `vehicle_names` -#include "rosidl_runtime_c/string_functions.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -void TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__TakeoffGroup_Request__init(message_memory); -} - -void TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_fini_function(void * message_memory) -{ - airsim_interfaces__srv__TakeoffGroup_Request__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_member_array[2] = { - { - "vehicle_names", // name - rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type - 0, // upper bound of string - NULL, // members of sub message - true, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__TakeoffGroup_Request, vehicle_names), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - }, - { - "wait_on_last_task", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__TakeoffGroup_Request, wait_on_last_task), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_members = { - "airsim_interfaces__srv", // message namespace - "TakeoffGroup_Request", // message name - 2, // number of fields - sizeof(airsim_interfaces__srv__TakeoffGroup_Request), - TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_member_array, // message members - TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_init_function, // function to initialize message memory (memory has to be allocated) - TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_type_support_handle = { - 0, - &TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Request)() { - if (!TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_type_support_handle.typesupport_identifier) { - TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &TakeoffGroup_Request__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -// already included above -// #include -// already included above -// #include "airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "rosidl_typesupport_introspection_c/field_types.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -// already included above -// #include "rosidl_typesupport_introspection_c/message_introspection.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff_group__functions.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff_group__struct.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -void TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_init_function( - void * message_memory, enum rosidl_runtime_c__message_initialization _init) -{ - // TODO(karsten1987): initializers are not yet implemented for typesupport c - // see https://github.com/ros2/ros2/issues/397 - (void) _init; - airsim_interfaces__srv__TakeoffGroup_Response__init(message_memory); -} - -void TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_fini_function(void * message_memory) -{ - airsim_interfaces__srv__TakeoffGroup_Response__fini(message_memory); -} - -static rosidl_typesupport_introspection_c__MessageMember TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_member_array[1] = { - { - "success", // name - rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - NULL, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces__srv__TakeoffGroup_Response, success), // bytes offset in struct - NULL, // default value - NULL, // size() function pointer - NULL, // get_const(index) function pointer - NULL, // get(index) function pointer - NULL // resize(index) function pointer - } -}; - -static const rosidl_typesupport_introspection_c__MessageMembers TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_members = { - "airsim_interfaces__srv", // message namespace - "TakeoffGroup_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces__srv__TakeoffGroup_Response), - TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_member_array, // message members - TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_init_function, // function to initialize message memory (memory has to be allocated) - TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_fini_function // function to terminate message instance (will not free memory) -}; - -// this is not const since it must be initialized on first access -// since C does not allow non-integral compile-time constants -static rosidl_message_type_support_t TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_type_support_handle = { - 0, - &TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_members, - get_message_typesupport_handle_function, -}; - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Response)() { - if (!TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_type_support_handle.typesupport_identifier) { - TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - return &TakeoffGroup_Response__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_type_support_handle; -} -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "airsim_interfaces/msg/rosidl_typesupport_introspection_c__visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff_group__rosidl_typesupport_introspection_c.h" -// already included above -// #include "rosidl_typesupport_introspection_c/identifier.h" -#include "rosidl_typesupport_introspection_c/service_introspection.h" - -// this is intentionally not const to allow initialization later to prevent an initialization race -static rosidl_typesupport_introspection_c__ServiceMembers airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_members = { - "airsim_interfaces__srv", // service namespace - "TakeoffGroup", // service name - // these two fields are initialized below on the first access - NULL, // request message - // airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_Request_message_type_support_handle, - NULL // response message - // airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_Response_message_type_support_handle -}; - -static rosidl_service_type_support_t airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_type_support_handle = { - 0, - &airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_members, - get_service_typesupport_handle_function, -}; - -// Forward declaration of request/response type support functions -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Request)(); - -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Response)(); - -ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup)() { - if (!airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_type_support_handle.typesupport_identifier) { - airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_type_support_handle.typesupport_identifier = - rosidl_typesupport_introspection_c__identifier; - } - rosidl_typesupport_introspection_c__ServiceMembers * service_members = - (rosidl_typesupport_introspection_c__ServiceMembers *)airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_type_support_handle.data; - - if (!service_members->request_members_) { - service_members->request_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Request)()->data; - } - if (!service_members->response_members_) { - service_members->response_members_ = - (const rosidl_typesupport_introspection_c__MessageMembers *) - ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, airsim_interfaces, srv, TakeoffGroup_Response)()->data; - } - - return &airsim_interfaces__srv__detail__takeoff_group__rosidl_typesupport_introspection_c__TakeoffGroup_service_type_support_handle; -} diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.cpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.cpp deleted file mode 100644 index c6e19e1488..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.cpp +++ /dev/null @@ -1,374 +0,0 @@ -// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#include "array" -#include "cstddef" -#include "string" -#include "vector" -#include "rosidl_runtime_c/message_type_support_struct.h" -#include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_interface/macros.h" -#include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" -#include "rosidl_typesupport_introspection_cpp/field_types.hpp" -#include "rosidl_typesupport_introspection_cpp/identifier.hpp" -#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void TakeoffGroup_Request_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::TakeoffGroup_Request(_init); -} - -void TakeoffGroup_Request_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~TakeoffGroup_Request(); -} - -size_t size_function__TakeoffGroup_Request__vehicle_names(const void * untyped_member) -{ - const auto * member = reinterpret_cast *>(untyped_member); - return member->size(); -} - -const void * get_const_function__TakeoffGroup_Request__vehicle_names(const void * untyped_member, size_t index) -{ - const auto & member = - *reinterpret_cast *>(untyped_member); - return &member[index]; -} - -void * get_function__TakeoffGroup_Request__vehicle_names(void * untyped_member, size_t index) -{ - auto & member = - *reinterpret_cast *>(untyped_member); - return &member[index]; -} - -void resize_function__TakeoffGroup_Request__vehicle_names(void * untyped_member, size_t size) -{ - auto * member = - reinterpret_cast *>(untyped_member); - member->resize(size); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember TakeoffGroup_Request_message_member_array[2] = { - { - "vehicle_names", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type - 0, // upper bound of string - nullptr, // members of sub message - true, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::TakeoffGroup_Request, vehicle_names), // bytes offset in struct - nullptr, // default value - size_function__TakeoffGroup_Request__vehicle_names, // size() function pointer - get_const_function__TakeoffGroup_Request__vehicle_names, // get_const(index) function pointer - get_function__TakeoffGroup_Request__vehicle_names, // get(index) function pointer - resize_function__TakeoffGroup_Request__vehicle_names // resize(index) function pointer - }, - { - "wait_on_last_task", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::TakeoffGroup_Request, wait_on_last_task), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers TakeoffGroup_Request_message_members = { - "airsim_interfaces::srv", // message namespace - "TakeoffGroup_Request", // message name - 2, // number of fields - sizeof(airsim_interfaces::srv::TakeoffGroup_Request), - TakeoffGroup_Request_message_member_array, // message members - TakeoffGroup_Request_init_function, // function to initialize message memory (memory has to be allocated) - TakeoffGroup_Request_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t TakeoffGroup_Request_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &TakeoffGroup_Request_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::TakeoffGroup_Request_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup_Request)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::TakeoffGroup_Request_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -// already included above -// #include "array" -// already included above -// #include "cstddef" -// already included above -// #include "string" -// already included above -// #include "vector" -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/field_types.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -void TakeoffGroup_Response_init_function( - void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) -{ - new (message_memory) airsim_interfaces::srv::TakeoffGroup_Response(_init); -} - -void TakeoffGroup_Response_fini_function(void * message_memory) -{ - auto typed_message = static_cast(message_memory); - typed_message->~TakeoffGroup_Response(); -} - -static const ::rosidl_typesupport_introspection_cpp::MessageMember TakeoffGroup_Response_message_member_array[1] = { - { - "success", // name - ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type - 0, // upper bound of string - nullptr, // members of sub message - false, // is array - 0, // array size - false, // is upper bound - offsetof(airsim_interfaces::srv::TakeoffGroup_Response, success), // bytes offset in struct - nullptr, // default value - nullptr, // size() function pointer - nullptr, // get_const(index) function pointer - nullptr, // get(index) function pointer - nullptr // resize(index) function pointer - } -}; - -static const ::rosidl_typesupport_introspection_cpp::MessageMembers TakeoffGroup_Response_message_members = { - "airsim_interfaces::srv", // message namespace - "TakeoffGroup_Response", // message name - 1, // number of fields - sizeof(airsim_interfaces::srv::TakeoffGroup_Response), - TakeoffGroup_Response_message_member_array, // message members - TakeoffGroup_Response_init_function, // function to initialize message memory (memory has to be allocated) - TakeoffGroup_Response_fini_function // function to terminate message instance (will not free memory) -}; - -static const rosidl_message_type_support_t TakeoffGroup_Response_message_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &TakeoffGroup_Response_message_members, - get_message_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -get_message_type_support_handle() -{ - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::TakeoffGroup_Response_message_type_support_handle; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup_Response)() { - return &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::TakeoffGroup_Response_message_type_support_handle; -} - -#ifdef __cplusplus -} -#endif - -#include "rosidl_runtime_c/service_type_support_struct.h" -// already included above -// #include "rosidl_typesupport_cpp/message_type_support.hpp" -#include "rosidl_typesupport_cpp/service_type_support.hpp" -// already included above -// #include "rosidl_typesupport_interface/macros.h" -// already included above -// #include "rosidl_typesupport_introspection_cpp/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/identifier.hpp" -// already included above -// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" -#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp" -#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp" - -namespace airsim_interfaces -{ - -namespace srv -{ - -namespace rosidl_typesupport_introspection_cpp -{ - -// this is intentionally not const to allow initialization later to prevent an initialization race -static ::rosidl_typesupport_introspection_cpp::ServiceMembers TakeoffGroup_service_members = { - "airsim_interfaces::srv", // service namespace - "TakeoffGroup", // service name - // these two fields are initialized below on the first access - // see get_service_type_support_handle() - nullptr, // request message - nullptr // response message -}; - -static const rosidl_service_type_support_t TakeoffGroup_service_type_support_handle = { - ::rosidl_typesupport_introspection_cpp::typesupport_identifier, - &TakeoffGroup_service_members, - get_service_typesupport_handle_function, -}; - -} // namespace rosidl_typesupport_introspection_cpp - -} // namespace srv - -} // namespace airsim_interfaces - - -namespace rosidl_typesupport_introspection_cpp -{ - -template<> -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -get_service_type_support_handle() -{ - // get a handle to the value to be returned - auto service_type_support = - &::airsim_interfaces::srv::rosidl_typesupport_introspection_cpp::TakeoffGroup_service_type_support_handle; - // get a non-const and properly typed version of the data void * - auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>( - static_cast( - service_type_support->data)); - // make sure that both the request_members_ and the response_members_ are initialized - // if they are not, initialize them - if ( - service_members->request_members_ == nullptr || - service_members->response_members_ == nullptr) - { - // initialize the request_members_ with the static function from the external library - service_members->request_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::TakeoffGroup_Request - >()->data - ); - // initialize the response_members_ with the static function from the external library - service_members->response_members_ = static_cast< - const ::rosidl_typesupport_introspection_cpp::MessageMembers * - >( - ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle< - ::airsim_interfaces::srv::TakeoffGroup_Response - >()->data - ); - } - // finally return the properly initialized service_type_support handle - return service_type_support; -} - -} // namespace rosidl_typesupport_introspection_cpp - -#ifdef __cplusplus -extern "C" -{ -#endif - -ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, airsim_interfaces, srv, TakeoffGroup)() { - return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle(); -} - -#ifdef __cplusplus -} -#endif diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.h deleted file mode 100644 index 00daad0cdc..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/detail/takeoff_group__type_support.h +++ /dev/null @@ -1,58 +0,0 @@ -// generated from rosidl_generator_c/resource/idl__type_support.h.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TYPE_SUPPORT_H_ -#define AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TYPE_SUPPORT_H_ - -#include "rosidl_typesupport_interface/macros.h" - -#include "airsim_interfaces/msg/rosidl_generator_c__visibility_control.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - TakeoffGroup_Request -)(); - -// already included above -// #include "rosidl_runtime_c/message_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_message_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - TakeoffGroup_Response -)(); - -#include "rosidl_runtime_c/service_type_support_struct.h" - -// Forward declare the get type support functions for this type. -ROSIDL_GENERATOR_C_PUBLIC_airsim_interfaces -const rosidl_service_type_support_t * -ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME( - rosidl_typesupport_c, - airsim_interfaces, - srv, - TakeoffGroup -)(); - -#ifdef __cplusplus -} -#endif - -#endif // AIRSIM_INTERFACES__SRV__DETAIL__TAKEOFF_GROUP__TYPE_SUPPORT_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.h deleted file mode 100644 index 6fbbdc0d1e..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__LAND_H_ -#define AIRSIM_INTERFACES__SRV__LAND_H_ - -#include "airsim_interfaces/srv/detail/land__struct.h" -#include "airsim_interfaces/srv/detail/land__functions.h" -#include "airsim_interfaces/srv/detail/land__type_support.h" - -#endif // AIRSIM_INTERFACES__SRV__LAND_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.hpp deleted file mode 100644 index f736ea8a6a..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__LAND_HPP_ -#define AIRSIM_INTERFACES__SRV__LAND_HPP_ - -#include "airsim_interfaces/srv/detail/land__struct.hpp" -#include "airsim_interfaces/srv/detail/land__builder.hpp" -#include "airsim_interfaces/srv/detail/land__traits.hpp" - -#endif // AIRSIM_INTERFACES__SRV__LAND_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.h deleted file mode 100644 index 7f13b69051..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__LAND_GROUP_H_ -#define AIRSIM_INTERFACES__SRV__LAND_GROUP_H_ - -#include "airsim_interfaces/srv/detail/land_group__struct.h" -#include "airsim_interfaces/srv/detail/land_group__functions.h" -#include "airsim_interfaces/srv/detail/land_group__type_support.h" - -#endif // AIRSIM_INTERFACES__SRV__LAND_GROUP_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.hpp deleted file mode 100644 index e38781b91f..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/land_group.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__LAND_GROUP_HPP_ -#define AIRSIM_INTERFACES__SRV__LAND_GROUP_HPP_ - -#include "airsim_interfaces/srv/detail/land_group__struct.hpp" -#include "airsim_interfaces/srv/detail/land_group__builder.hpp" -#include "airsim_interfaces/srv/detail/land_group__traits.hpp" - -#endif // AIRSIM_INTERFACES__SRV__LAND_GROUP_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.h deleted file mode 100644 index e8bfc59e6d..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__RESET_H_ -#define AIRSIM_INTERFACES__SRV__RESET_H_ - -#include "airsim_interfaces/srv/detail/reset__struct.h" -#include "airsim_interfaces/srv/detail/reset__functions.h" -#include "airsim_interfaces/srv/detail/reset__type_support.h" - -#endif // AIRSIM_INTERFACES__SRV__RESET_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.hpp deleted file mode 100644 index fc1396833a..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/reset.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__RESET_HPP_ -#define AIRSIM_INTERFACES__SRV__RESET_HPP_ - -#include "airsim_interfaces/srv/detail/reset__struct.hpp" -#include "airsim_interfaces/srv/detail/reset__builder.hpp" -#include "airsim_interfaces/srv/detail/reset__traits.hpp" - -#endif // AIRSIM_INTERFACES__SRV__RESET_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.h deleted file mode 100644 index f60d1f27a7..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_H_ -#define AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_H_ - -#include "airsim_interfaces/srv/detail/set_gps_position__struct.h" -#include "airsim_interfaces/srv/detail/set_gps_position__functions.h" -#include "airsim_interfaces/srv/detail/set_gps_position__type_support.h" - -#endif // AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.hpp deleted file mode 100644 index 645d68c8ca..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_gps_position.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_HPP_ -#define AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_HPP_ - -#include "airsim_interfaces/srv/detail/set_gps_position__struct.hpp" -#include "airsim_interfaces/srv/detail/set_gps_position__builder.hpp" -#include "airsim_interfaces/srv/detail/set_gps_position__traits.hpp" - -#endif // AIRSIM_INTERFACES__SRV__SET_GPS_POSITION_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.h deleted file mode 100644 index 4e188fa721..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_H_ -#define AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_H_ - -#include "airsim_interfaces/srv/detail/set_local_position__struct.h" -#include "airsim_interfaces/srv/detail/set_local_position__functions.h" -#include "airsim_interfaces/srv/detail/set_local_position__type_support.h" - -#endif // AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.hpp deleted file mode 100644 index 091dabbd2c..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/set_local_position.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_HPP_ -#define AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_HPP_ - -#include "airsim_interfaces/srv/detail/set_local_position__struct.hpp" -#include "airsim_interfaces/srv/detail/set_local_position__builder.hpp" -#include "airsim_interfaces/srv/detail/set_local_position__traits.hpp" - -#endif // AIRSIM_INTERFACES__SRV__SET_LOCAL_POSITION_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.h deleted file mode 100644 index 164d8cdf02..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__TAKEOFF_H_ -#define AIRSIM_INTERFACES__SRV__TAKEOFF_H_ - -#include "airsim_interfaces/srv/detail/takeoff__struct.h" -#include "airsim_interfaces/srv/detail/takeoff__functions.h" -#include "airsim_interfaces/srv/detail/takeoff__type_support.h" - -#endif // AIRSIM_INTERFACES__SRV__TAKEOFF_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.hpp deleted file mode 100644 index 4afa2fcdef..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__TAKEOFF_HPP_ -#define AIRSIM_INTERFACES__SRV__TAKEOFF_HPP_ - -#include "airsim_interfaces/srv/detail/takeoff__struct.hpp" -#include "airsim_interfaces/srv/detail/takeoff__builder.hpp" -#include "airsim_interfaces/srv/detail/takeoff__traits.hpp" - -#endif // AIRSIM_INTERFACES__SRV__TAKEOFF_HPP_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.h b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.h deleted file mode 100644 index 8dff46f2c5..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.h +++ /dev/null @@ -1,12 +0,0 @@ -// generated from rosidl_generator_c/resource/idl.h.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_H_ -#define AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_H_ - -#include "airsim_interfaces/srv/detail/takeoff_group__struct.h" -#include "airsim_interfaces/srv/detail/takeoff_group__functions.h" -#include "airsim_interfaces/srv/detail/takeoff_group__type_support.h" - -#endif // AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_H_ diff --git a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.hpp b/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.hpp deleted file mode 100644 index e8836e8e45..0000000000 --- a/ros2/install/airsim_interfaces/include/airsim_interfaces/srv/takeoff_group.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// generated from rosidl_generator_cpp/resource/idl.hpp.em -// generated code does not contain a copyright notice - -#ifndef AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_HPP_ -#define AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_HPP_ - -#include "airsim_interfaces/srv/detail/takeoff_group__struct.hpp" -#include "airsim_interfaces/srv/detail/takeoff_group__builder.hpp" -#include "airsim_interfaces/srv/detail/takeoff_group__traits.hpp" - -#endif // AIRSIM_INTERFACES__SRV__TAKEOFF_GROUP_HPP_ diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__python.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__python.so deleted file mode 100644 index ab166d89ab5f3bebc969862b41bcbc5a3d844d2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120504 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 diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_generator_c.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_generator_c.so deleted file mode 100644 index aa01904c4ef8a3edee65de6874c8e5e8aa7ef53c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91512 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 diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_c.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_c.so deleted file mode 100644 index 60136a09e40dbf4e008e29a5993db6c316c5bc3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64808 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 OP1WPysUuoG{(k@%fB(z? diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_cpp.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_cpp.so deleted file mode 100644 index af85d5adeef8dab06f7bfccd81bd9ab1ef9a7fe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75624 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

LD~jNd^cnvDhdo=I&9F`+{Y-gOntPBt@fkXlAxn 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 Nrl8c#2=bEr{|C^uQ11W$ diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_fastrtps_cpp.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_fastrtps_cpp.so deleted file mode 100644 index f582fab7d093065080b7bae665e2fabad8af8c21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172656 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 diff --git a/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_introspection_cpp.so b/ros2/install/airsim_interfaces/lib/libairsim_interfaces__rosidl_typesupport_introspection_cpp.so deleted file mode 100644 index 5329012330331f7b73e5378be0472fe6a3916da3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166488 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 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/__init__.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_c.cpython-38-x86_64-linux-gnu.so b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_c.cpython-38-x86_64-linux-gnu.so deleted file mode 100644 index 8215ac5d5f23340b412b93b5dd3b9d40a97cbe12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74936 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 WR~zDWD1r5t?WHU?YD1E4{r?N~((QEs diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_fastrtps_c.cpython-38-x86_64-linux-gnu.so b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_fastrtps_c.cpython-38-x86_64-linux-gnu.so deleted file mode 100644 index d9aebd7dbe0614f7a8d364f92cbd9d6f574c4818..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74984 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 S>F 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 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_introspection_c.cpython-38-x86_64-linux-gnu.so b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/airsim_interfaces_s__rosidl_typesupport_introspection_c.cpython-38-x86_64-linux-gnu.so deleted file mode 100644 index 967b8ec0495e014faea3cc66c60c3ce82dae1a81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74960 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

*xzFWg@(C|YWg~HaD3=PlH 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 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/__init__.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/__init__.py deleted file mode 100644 index 993c6fb783..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from airsim_interfaces.msg._altimeter import Altimeter # noqa: F401 -from airsim_interfaces.msg._car_controls import CarControls # noqa: F401 -from airsim_interfaces.msg._car_state import CarState # noqa: F401 -from airsim_interfaces.msg._environment import Environment # noqa: F401 -from airsim_interfaces.msg._gps_yaw import GPSYaw # noqa: F401 -from airsim_interfaces.msg._gimbal_angle_euler_cmd import GimbalAngleEulerCmd # noqa: F401 -from airsim_interfaces.msg._gimbal_angle_quat_cmd import GimbalAngleQuatCmd # noqa: F401 -from airsim_interfaces.msg._vel_cmd import VelCmd # noqa: F401 -from airsim_interfaces.msg._vel_cmd_group import VelCmdGroup # noqa: F401 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter.py deleted file mode 100644 index 2783cefbcd..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter.py +++ /dev/null @@ -1,185 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:msg/Altimeter.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_Altimeter(type): - """Metaclass of message 'Altimeter'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.msg.Altimeter') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__altimeter - cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__altimeter - cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__altimeter - cls._TYPE_SUPPORT = module.type_support_msg__msg__altimeter - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__altimeter - - from std_msgs.msg import Header - if Header.__class__._TYPE_SUPPORT is None: - Header.__class__.__import_type_support__() - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class Altimeter(metaclass=Metaclass_Altimeter): - """Message class 'Altimeter'.""" - - __slots__ = [ - '_header', - '_altitude', - '_pressure', - '_qnh', - ] - - _fields_and_field_types = { - 'header': 'std_msgs/Header', - 'altitude': 'float', - 'pressure': 'float', - 'qnh': 'float', - } - - SLOT_TYPES = ( - rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - from std_msgs.msg import Header - self.header = kwargs.get('header', Header()) - self.altitude = kwargs.get('altitude', float()) - self.pressure = kwargs.get('pressure', float()) - self.qnh = kwargs.get('qnh', float()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.header != other.header: - return False - if self.altitude != other.altitude: - return False - if self.pressure != other.pressure: - return False - if self.qnh != other.qnh: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def header(self): - """Message field 'header'.""" - return self._header - - @header.setter - def header(self, value): - if __debug__: - from std_msgs.msg import Header - assert \ - isinstance(value, Header), \ - "The 'header' field must be a sub message of type 'Header'" - self._header = value - - @property - def altitude(self): - """Message field 'altitude'.""" - return self._altitude - - @altitude.setter - def altitude(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'altitude' field must be of type 'float'" - self._altitude = value - - @property - def pressure(self): - """Message field 'pressure'.""" - return self._pressure - - @pressure.setter - def pressure(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'pressure' field must be of type 'float'" - self._pressure = value - - @property - def qnh(self): - """Message field 'qnh'.""" - return self._qnh - - @qnh.setter - def qnh(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'qnh' field must be of type 'float'" - self._qnh = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter_s.c deleted file mode 100644 index 39fc0e8a14..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_altimeter_s.c +++ /dev/null @@ -1,167 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:msg/Altimeter.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/detail/altimeter__struct.h" -#include "airsim_interfaces/msg/detail/altimeter__functions.h" - -ROSIDL_GENERATOR_C_IMPORT -bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__msg__altimeter__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[43]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.msg._altimeter.Altimeter", full_classname_dest, 42) == 0); - } - airsim_interfaces__msg__Altimeter * ros_message = _ros_message; - { // header - PyObject * field = PyObject_GetAttrString(_pymsg, "header"); - if (!field) { - return false; - } - if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // altitude - PyObject * field = PyObject_GetAttrString(_pymsg, "altitude"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->altitude = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // pressure - PyObject * field = PyObject_GetAttrString(_pymsg, "pressure"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->pressure = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // qnh - PyObject * field = PyObject_GetAttrString(_pymsg, "qnh"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->qnh = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__msg__altimeter__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of Altimeter */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._altimeter"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Altimeter"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__msg__Altimeter * ros_message = (airsim_interfaces__msg__Altimeter *)raw_ros_message; - { // header - PyObject * field = NULL; - field = std_msgs__msg__header__convert_to_py(&ros_message->header); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "header", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // altitude - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->altitude); - { - int rc = PyObject_SetAttrString(_pymessage, "altitude", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // pressure - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->pressure); - { - int rc = PyObject_SetAttrString(_pymessage, "pressure", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // qnh - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->qnh); - { - int rc = PyObject_SetAttrString(_pymessage, "qnh", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls.py deleted file mode 100644 index d7eea1913a..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls.py +++ /dev/null @@ -1,263 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:msg/CarControls.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_CarControls(type): - """Metaclass of message 'CarControls'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.msg.CarControls') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__car_controls - cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__car_controls - cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__car_controls - cls._TYPE_SUPPORT = module.type_support_msg__msg__car_controls - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__car_controls - - from std_msgs.msg import Header - if Header.__class__._TYPE_SUPPORT is None: - Header.__class__.__import_type_support__() - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class CarControls(metaclass=Metaclass_CarControls): - """Message class 'CarControls'.""" - - __slots__ = [ - '_header', - '_throttle', - '_brake', - '_steering', - '_handbrake', - '_manual', - '_manual_gear', - '_gear_immediate', - ] - - _fields_and_field_types = { - 'header': 'std_msgs/Header', - 'throttle': 'float', - 'brake': 'float', - 'steering': 'float', - 'handbrake': 'boolean', - 'manual': 'boolean', - 'manual_gear': 'int8', - 'gear_immediate': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - rosidl_parser.definition.BasicType('int8'), # noqa: E501 - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - from std_msgs.msg import Header - self.header = kwargs.get('header', Header()) - self.throttle = kwargs.get('throttle', float()) - self.brake = kwargs.get('brake', float()) - self.steering = kwargs.get('steering', float()) - self.handbrake = kwargs.get('handbrake', bool()) - self.manual = kwargs.get('manual', bool()) - self.manual_gear = kwargs.get('manual_gear', int()) - self.gear_immediate = kwargs.get('gear_immediate', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.header != other.header: - return False - if self.throttle != other.throttle: - return False - if self.brake != other.brake: - return False - if self.steering != other.steering: - return False - if self.handbrake != other.handbrake: - return False - if self.manual != other.manual: - return False - if self.manual_gear != other.manual_gear: - return False - if self.gear_immediate != other.gear_immediate: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def header(self): - """Message field 'header'.""" - return self._header - - @header.setter - def header(self, value): - if __debug__: - from std_msgs.msg import Header - assert \ - isinstance(value, Header), \ - "The 'header' field must be a sub message of type 'Header'" - self._header = value - - @property - def throttle(self): - """Message field 'throttle'.""" - return self._throttle - - @throttle.setter - def throttle(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'throttle' field must be of type 'float'" - self._throttle = value - - @property - def brake(self): - """Message field 'brake'.""" - return self._brake - - @brake.setter - def brake(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'brake' field must be of type 'float'" - self._brake = value - - @property - def steering(self): - """Message field 'steering'.""" - return self._steering - - @steering.setter - def steering(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'steering' field must be of type 'float'" - self._steering = value - - @property - def handbrake(self): - """Message field 'handbrake'.""" - return self._handbrake - - @handbrake.setter - def handbrake(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'handbrake' field must be of type 'bool'" - self._handbrake = value - - @property - def manual(self): - """Message field 'manual'.""" - return self._manual - - @manual.setter - def manual(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'manual' field must be of type 'bool'" - self._manual = value - - @property - def manual_gear(self): - """Message field 'manual_gear'.""" - return self._manual_gear - - @manual_gear.setter - def manual_gear(self, value): - if __debug__: - assert \ - isinstance(value, int), \ - "The 'manual_gear' field must be of type 'int'" - assert value >= -128 and value < 128, \ - "The 'manual_gear' field must be an integer in [-128, 127]" - self._manual_gear = value - - @property - def gear_immediate(self): - """Message field 'gear_immediate'.""" - return self._gear_immediate - - @gear_immediate.setter - def gear_immediate(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'gear_immediate' field must be of type 'bool'" - self._gear_immediate = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls_s.c deleted file mode 100644 index 54b12d4b34..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_controls_s.c +++ /dev/null @@ -1,247 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:msg/CarControls.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/detail/car_controls__struct.h" -#include "airsim_interfaces/msg/detail/car_controls__functions.h" - -ROSIDL_GENERATOR_C_IMPORT -bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__msg__car_controls__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[48]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.msg._car_controls.CarControls", full_classname_dest, 47) == 0); - } - airsim_interfaces__msg__CarControls * ros_message = _ros_message; - { // header - PyObject * field = PyObject_GetAttrString(_pymsg, "header"); - if (!field) { - return false; - } - if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // throttle - PyObject * field = PyObject_GetAttrString(_pymsg, "throttle"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->throttle = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // brake - PyObject * field = PyObject_GetAttrString(_pymsg, "brake"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->brake = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // steering - PyObject * field = PyObject_GetAttrString(_pymsg, "steering"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->steering = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // handbrake - PyObject * field = PyObject_GetAttrString(_pymsg, "handbrake"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->handbrake = (Py_True == field); - Py_DECREF(field); - } - { // manual - PyObject * field = PyObject_GetAttrString(_pymsg, "manual"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->manual = (Py_True == field); - Py_DECREF(field); - } - { // manual_gear - PyObject * field = PyObject_GetAttrString(_pymsg, "manual_gear"); - if (!field) { - return false; - } - assert(PyLong_Check(field)); - ros_message->manual_gear = (int8_t)PyLong_AsLong(field); - Py_DECREF(field); - } - { // gear_immediate - PyObject * field = PyObject_GetAttrString(_pymsg, "gear_immediate"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->gear_immediate = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__msg__car_controls__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of CarControls */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._car_controls"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "CarControls"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__msg__CarControls * ros_message = (airsim_interfaces__msg__CarControls *)raw_ros_message; - { // header - PyObject * field = NULL; - field = std_msgs__msg__header__convert_to_py(&ros_message->header); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "header", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // throttle - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->throttle); - { - int rc = PyObject_SetAttrString(_pymessage, "throttle", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // brake - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->brake); - { - int rc = PyObject_SetAttrString(_pymessage, "brake", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // steering - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->steering); - { - int rc = PyObject_SetAttrString(_pymessage, "steering", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // handbrake - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->handbrake ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "handbrake", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // manual - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->manual ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "manual", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // manual_gear - PyObject * field = NULL; - field = PyLong_FromLong(ros_message->manual_gear); - { - int rc = PyObject_SetAttrString(_pymessage, "manual_gear", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // gear_immediate - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->gear_immediate ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "gear_immediate", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state.py deleted file mode 100644 index 65414a3721..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state.py +++ /dev/null @@ -1,275 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:msg/CarState.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_CarState(type): - """Metaclass of message 'CarState'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.msg.CarState') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__car_state - cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__car_state - cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__car_state - cls._TYPE_SUPPORT = module.type_support_msg__msg__car_state - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__car_state - - from geometry_msgs.msg import PoseWithCovariance - if PoseWithCovariance.__class__._TYPE_SUPPORT is None: - PoseWithCovariance.__class__.__import_type_support__() - - from geometry_msgs.msg import TwistWithCovariance - if TwistWithCovariance.__class__._TYPE_SUPPORT is None: - TwistWithCovariance.__class__.__import_type_support__() - - from std_msgs.msg import Header - if Header.__class__._TYPE_SUPPORT is None: - Header.__class__.__import_type_support__() - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class CarState(metaclass=Metaclass_CarState): - """Message class 'CarState'.""" - - __slots__ = [ - '_header', - '_pose', - '_twist', - '_speed', - '_gear', - '_rpm', - '_maxrpm', - '_handbrake', - ] - - _fields_and_field_types = { - 'header': 'std_msgs/Header', - 'pose': 'geometry_msgs/PoseWithCovariance', - 'twist': 'geometry_msgs/TwistWithCovariance', - 'speed': 'float', - 'gear': 'int8', - 'rpm': 'float', - 'maxrpm': 'float', - 'handbrake': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 - rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'PoseWithCovariance'), # noqa: E501 - rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'TwistWithCovariance'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - rosidl_parser.definition.BasicType('int8'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - from std_msgs.msg import Header - self.header = kwargs.get('header', Header()) - from geometry_msgs.msg import PoseWithCovariance - self.pose = kwargs.get('pose', PoseWithCovariance()) - from geometry_msgs.msg import TwistWithCovariance - self.twist = kwargs.get('twist', TwistWithCovariance()) - self.speed = kwargs.get('speed', float()) - self.gear = kwargs.get('gear', int()) - self.rpm = kwargs.get('rpm', float()) - self.maxrpm = kwargs.get('maxrpm', float()) - self.handbrake = kwargs.get('handbrake', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.header != other.header: - return False - if self.pose != other.pose: - return False - if self.twist != other.twist: - return False - if self.speed != other.speed: - return False - if self.gear != other.gear: - return False - if self.rpm != other.rpm: - return False - if self.maxrpm != other.maxrpm: - return False - if self.handbrake != other.handbrake: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def header(self): - """Message field 'header'.""" - return self._header - - @header.setter - def header(self, value): - if __debug__: - from std_msgs.msg import Header - assert \ - isinstance(value, Header), \ - "The 'header' field must be a sub message of type 'Header'" - self._header = value - - @property - def pose(self): - """Message field 'pose'.""" - return self._pose - - @pose.setter - def pose(self, value): - if __debug__: - from geometry_msgs.msg import PoseWithCovariance - assert \ - isinstance(value, PoseWithCovariance), \ - "The 'pose' field must be a sub message of type 'PoseWithCovariance'" - self._pose = value - - @property - def twist(self): - """Message field 'twist'.""" - return self._twist - - @twist.setter - def twist(self, value): - if __debug__: - from geometry_msgs.msg import TwistWithCovariance - assert \ - isinstance(value, TwistWithCovariance), \ - "The 'twist' field must be a sub message of type 'TwistWithCovariance'" - self._twist = value - - @property - def speed(self): - """Message field 'speed'.""" - return self._speed - - @speed.setter - def speed(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'speed' field must be of type 'float'" - self._speed = value - - @property - def gear(self): - """Message field 'gear'.""" - return self._gear - - @gear.setter - def gear(self, value): - if __debug__: - assert \ - isinstance(value, int), \ - "The 'gear' field must be of type 'int'" - assert value >= -128 and value < 128, \ - "The 'gear' field must be an integer in [-128, 127]" - self._gear = value - - @property - def rpm(self): - """Message field 'rpm'.""" - return self._rpm - - @rpm.setter - def rpm(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'rpm' field must be of type 'float'" - self._rpm = value - - @property - def maxrpm(self): - """Message field 'maxrpm'.""" - return self._maxrpm - - @maxrpm.setter - def maxrpm(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'maxrpm' field must be of type 'float'" - self._maxrpm = value - - @property - def handbrake(self): - """Message field 'handbrake'.""" - return self._handbrake - - @handbrake.setter - def handbrake(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'handbrake' field must be of type 'bool'" - self._handbrake = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state_s.c deleted file mode 100644 index 8346491ea0..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_car_state_s.c +++ /dev/null @@ -1,265 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:msg/CarState.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/detail/car_state__struct.h" -#include "airsim_interfaces/msg/detail/car_state__functions.h" - -ROSIDL_GENERATOR_C_IMPORT -bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); -ROSIDL_GENERATOR_C_IMPORT -bool geometry_msgs__msg__pose_with_covariance__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * geometry_msgs__msg__pose_with_covariance__convert_to_py(void * raw_ros_message); -ROSIDL_GENERATOR_C_IMPORT -bool geometry_msgs__msg__twist_with_covariance__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * geometry_msgs__msg__twist_with_covariance__convert_to_py(void * raw_ros_message); - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__msg__car_state__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[42]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.msg._car_state.CarState", full_classname_dest, 41) == 0); - } - airsim_interfaces__msg__CarState * ros_message = _ros_message; - { // header - PyObject * field = PyObject_GetAttrString(_pymsg, "header"); - if (!field) { - return false; - } - if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // pose - PyObject * field = PyObject_GetAttrString(_pymsg, "pose"); - if (!field) { - return false; - } - if (!geometry_msgs__msg__pose_with_covariance__convert_from_py(field, &ros_message->pose)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // twist - PyObject * field = PyObject_GetAttrString(_pymsg, "twist"); - if (!field) { - return false; - } - if (!geometry_msgs__msg__twist_with_covariance__convert_from_py(field, &ros_message->twist)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // speed - PyObject * field = PyObject_GetAttrString(_pymsg, "speed"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->speed = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // gear - PyObject * field = PyObject_GetAttrString(_pymsg, "gear"); - if (!field) { - return false; - } - assert(PyLong_Check(field)); - ros_message->gear = (int8_t)PyLong_AsLong(field); - Py_DECREF(field); - } - { // rpm - PyObject * field = PyObject_GetAttrString(_pymsg, "rpm"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->rpm = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // maxrpm - PyObject * field = PyObject_GetAttrString(_pymsg, "maxrpm"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->maxrpm = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // handbrake - PyObject * field = PyObject_GetAttrString(_pymsg, "handbrake"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->handbrake = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__msg__car_state__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of CarState */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._car_state"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "CarState"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__msg__CarState * ros_message = (airsim_interfaces__msg__CarState *)raw_ros_message; - { // header - PyObject * field = NULL; - field = std_msgs__msg__header__convert_to_py(&ros_message->header); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "header", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // pose - PyObject * field = NULL; - field = geometry_msgs__msg__pose_with_covariance__convert_to_py(&ros_message->pose); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "pose", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // twist - PyObject * field = NULL; - field = geometry_msgs__msg__twist_with_covariance__convert_to_py(&ros_message->twist); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "twist", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // speed - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->speed); - { - int rc = PyObject_SetAttrString(_pymessage, "speed", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // gear - PyObject * field = NULL; - field = PyLong_FromLong(ros_message->gear); - { - int rc = PyObject_SetAttrString(_pymessage, "gear", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // rpm - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->rpm); - { - int rc = PyObject_SetAttrString(_pymessage, "rpm", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // maxrpm - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->maxrpm); - { - int rc = PyObject_SetAttrString(_pymessage, "maxrpm", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // handbrake - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->handbrake ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "handbrake", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment.py deleted file mode 100644 index e2d3ab1101..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment.py +++ /dev/null @@ -1,256 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:msg/Environment.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_Environment(type): - """Metaclass of message 'Environment'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.msg.Environment') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__environment - cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__environment - cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__environment - cls._TYPE_SUPPORT = module.type_support_msg__msg__environment - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__environment - - from geographic_msgs.msg import GeoPoint - if GeoPoint.__class__._TYPE_SUPPORT is None: - GeoPoint.__class__.__import_type_support__() - - from geometry_msgs.msg import Vector3 - if Vector3.__class__._TYPE_SUPPORT is None: - Vector3.__class__.__import_type_support__() - - from std_msgs.msg import Header - if Header.__class__._TYPE_SUPPORT is None: - Header.__class__.__import_type_support__() - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class Environment(metaclass=Metaclass_Environment): - """Message class 'Environment'.""" - - __slots__ = [ - '_header', - '_position', - '_geo_point', - '_gravity', - '_air_pressure', - '_temperature', - '_air_density', - ] - - _fields_and_field_types = { - 'header': 'std_msgs/Header', - 'position': 'geometry_msgs/Vector3', - 'geo_point': 'geographic_msgs/GeoPoint', - 'gravity': 'geometry_msgs/Vector3', - 'air_pressure': 'float', - 'temperature': 'float', - 'air_density': 'float', - } - - SLOT_TYPES = ( - rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 - rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'Vector3'), # noqa: E501 - rosidl_parser.definition.NamespacedType(['geographic_msgs', 'msg'], 'GeoPoint'), # noqa: E501 - rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'Vector3'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - rosidl_parser.definition.BasicType('float'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - from std_msgs.msg import Header - self.header = kwargs.get('header', Header()) - from geometry_msgs.msg import Vector3 - self.position = kwargs.get('position', Vector3()) - from geographic_msgs.msg import GeoPoint - self.geo_point = kwargs.get('geo_point', GeoPoint()) - from geometry_msgs.msg import Vector3 - self.gravity = kwargs.get('gravity', Vector3()) - self.air_pressure = kwargs.get('air_pressure', float()) - self.temperature = kwargs.get('temperature', float()) - self.air_density = kwargs.get('air_density', float()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.header != other.header: - return False - if self.position != other.position: - return False - if self.geo_point != other.geo_point: - return False - if self.gravity != other.gravity: - return False - if self.air_pressure != other.air_pressure: - return False - if self.temperature != other.temperature: - return False - if self.air_density != other.air_density: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def header(self): - """Message field 'header'.""" - return self._header - - @header.setter - def header(self, value): - if __debug__: - from std_msgs.msg import Header - assert \ - isinstance(value, Header), \ - "The 'header' field must be a sub message of type 'Header'" - self._header = value - - @property - def position(self): - """Message field 'position'.""" - return self._position - - @position.setter - def position(self, value): - if __debug__: - from geometry_msgs.msg import Vector3 - assert \ - isinstance(value, Vector3), \ - "The 'position' field must be a sub message of type 'Vector3'" - self._position = value - - @property - def geo_point(self): - """Message field 'geo_point'.""" - return self._geo_point - - @geo_point.setter - def geo_point(self, value): - if __debug__: - from geographic_msgs.msg import GeoPoint - assert \ - isinstance(value, GeoPoint), \ - "The 'geo_point' field must be a sub message of type 'GeoPoint'" - self._geo_point = value - - @property - def gravity(self): - """Message field 'gravity'.""" - return self._gravity - - @gravity.setter - def gravity(self, value): - if __debug__: - from geometry_msgs.msg import Vector3 - assert \ - isinstance(value, Vector3), \ - "The 'gravity' field must be a sub message of type 'Vector3'" - self._gravity = value - - @property - def air_pressure(self): - """Message field 'air_pressure'.""" - return self._air_pressure - - @air_pressure.setter - def air_pressure(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'air_pressure' field must be of type 'float'" - self._air_pressure = value - - @property - def temperature(self): - """Message field 'temperature'.""" - return self._temperature - - @temperature.setter - def temperature(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'temperature' field must be of type 'float'" - self._temperature = value - - @property - def air_density(self): - """Message field 'air_density'.""" - return self._air_density - - @air_density.setter - def air_density(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'air_density' field must be of type 'float'" - self._air_density = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment_s.c deleted file mode 100644 index 45195e7dfe..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_environment_s.c +++ /dev/null @@ -1,254 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:msg/Environment.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/detail/environment__struct.h" -#include "airsim_interfaces/msg/detail/environment__functions.h" - -ROSIDL_GENERATOR_C_IMPORT -bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); -ROSIDL_GENERATOR_C_IMPORT -bool geometry_msgs__msg__vector3__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * geometry_msgs__msg__vector3__convert_to_py(void * raw_ros_message); -ROSIDL_GENERATOR_C_IMPORT -bool geographic_msgs__msg__geo_point__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * geographic_msgs__msg__geo_point__convert_to_py(void * raw_ros_message); -ROSIDL_GENERATOR_C_IMPORT -bool geometry_msgs__msg__vector3__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * geometry_msgs__msg__vector3__convert_to_py(void * raw_ros_message); - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__msg__environment__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[47]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.msg._environment.Environment", full_classname_dest, 46) == 0); - } - airsim_interfaces__msg__Environment * ros_message = _ros_message; - { // header - PyObject * field = PyObject_GetAttrString(_pymsg, "header"); - if (!field) { - return false; - } - if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // position - PyObject * field = PyObject_GetAttrString(_pymsg, "position"); - if (!field) { - return false; - } - if (!geometry_msgs__msg__vector3__convert_from_py(field, &ros_message->position)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // geo_point - PyObject * field = PyObject_GetAttrString(_pymsg, "geo_point"); - if (!field) { - return false; - } - if (!geographic_msgs__msg__geo_point__convert_from_py(field, &ros_message->geo_point)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // gravity - PyObject * field = PyObject_GetAttrString(_pymsg, "gravity"); - if (!field) { - return false; - } - if (!geometry_msgs__msg__vector3__convert_from_py(field, &ros_message->gravity)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // air_pressure - PyObject * field = PyObject_GetAttrString(_pymsg, "air_pressure"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->air_pressure = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // temperature - PyObject * field = PyObject_GetAttrString(_pymsg, "temperature"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->temperature = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // air_density - PyObject * field = PyObject_GetAttrString(_pymsg, "air_density"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->air_density = (float)PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__msg__environment__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of Environment */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._environment"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Environment"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__msg__Environment * ros_message = (airsim_interfaces__msg__Environment *)raw_ros_message; - { // header - PyObject * field = NULL; - field = std_msgs__msg__header__convert_to_py(&ros_message->header); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "header", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // position - PyObject * field = NULL; - field = geometry_msgs__msg__vector3__convert_to_py(&ros_message->position); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "position", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // geo_point - PyObject * field = NULL; - field = geographic_msgs__msg__geo_point__convert_to_py(&ros_message->geo_point); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "geo_point", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // gravity - PyObject * field = NULL; - field = geometry_msgs__msg__vector3__convert_to_py(&ros_message->gravity); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "gravity", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // air_pressure - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->air_pressure); - { - int rc = PyObject_SetAttrString(_pymessage, "air_pressure", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // temperature - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->temperature); - { - int rc = PyObject_SetAttrString(_pymessage, "temperature", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // air_density - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->air_density); - { - int rc = PyObject_SetAttrString(_pymessage, "air_density", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd.py deleted file mode 100644 index 66074d532c..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd.py +++ /dev/null @@ -1,223 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_GimbalAngleEulerCmd(type): - """Metaclass of message 'GimbalAngleEulerCmd'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.msg.GimbalAngleEulerCmd') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__gimbal_angle_euler_cmd - cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__gimbal_angle_euler_cmd - cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__gimbal_angle_euler_cmd - cls._TYPE_SUPPORT = module.type_support_msg__msg__gimbal_angle_euler_cmd - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__gimbal_angle_euler_cmd - - from std_msgs.msg import Header - if Header.__class__._TYPE_SUPPORT is None: - Header.__class__.__import_type_support__() - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class GimbalAngleEulerCmd(metaclass=Metaclass_GimbalAngleEulerCmd): - """Message class 'GimbalAngleEulerCmd'.""" - - __slots__ = [ - '_header', - '_camera_name', - '_vehicle_name', - '_roll', - '_pitch', - '_yaw', - ] - - _fields_and_field_types = { - 'header': 'std_msgs/Header', - 'camera_name': 'string', - 'vehicle_name': 'string', - 'roll': 'double', - 'pitch': 'double', - 'yaw': 'double', - } - - SLOT_TYPES = ( - rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 - rosidl_parser.definition.UnboundedString(), # noqa: E501 - rosidl_parser.definition.UnboundedString(), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - from std_msgs.msg import Header - self.header = kwargs.get('header', Header()) - self.camera_name = kwargs.get('camera_name', str()) - self.vehicle_name = kwargs.get('vehicle_name', str()) - self.roll = kwargs.get('roll', float()) - self.pitch = kwargs.get('pitch', float()) - self.yaw = kwargs.get('yaw', float()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.header != other.header: - return False - if self.camera_name != other.camera_name: - return False - if self.vehicle_name != other.vehicle_name: - return False - if self.roll != other.roll: - return False - if self.pitch != other.pitch: - return False - if self.yaw != other.yaw: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def header(self): - """Message field 'header'.""" - return self._header - - @header.setter - def header(self, value): - if __debug__: - from std_msgs.msg import Header - assert \ - isinstance(value, Header), \ - "The 'header' field must be a sub message of type 'Header'" - self._header = value - - @property - def camera_name(self): - """Message field 'camera_name'.""" - return self._camera_name - - @camera_name.setter - def camera_name(self, value): - if __debug__: - assert \ - isinstance(value, str), \ - "The 'camera_name' field must be of type 'str'" - self._camera_name = value - - @property - def vehicle_name(self): - """Message field 'vehicle_name'.""" - return self._vehicle_name - - @vehicle_name.setter - def vehicle_name(self, value): - if __debug__: - assert \ - isinstance(value, str), \ - "The 'vehicle_name' field must be of type 'str'" - self._vehicle_name = value - - @property - def roll(self): - """Message field 'roll'.""" - return self._roll - - @roll.setter - def roll(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'roll' field must be of type 'float'" - self._roll = value - - @property - def pitch(self): - """Message field 'pitch'.""" - return self._pitch - - @pitch.setter - def pitch(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'pitch' field must be of type 'float'" - self._pitch = value - - @property - def yaw(self): - """Message field 'yaw'.""" - return self._yaw - - @yaw.setter - def yaw(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'yaw' field must be of type 'float'" - self._yaw = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd_s.c deleted file mode 100644 index bb9d215bf0..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_euler_cmd_s.c +++ /dev/null @@ -1,234 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:msg/GimbalAngleEulerCmd.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__struct.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_euler_cmd__functions.h" - -#include "rosidl_runtime_c/string.h" -#include "rosidl_runtime_c/string_functions.h" - -ROSIDL_GENERATOR_C_IMPORT -bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__msg__gimbal_angle_euler_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[66]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.msg._gimbal_angle_euler_cmd.GimbalAngleEulerCmd", full_classname_dest, 65) == 0); - } - airsim_interfaces__msg__GimbalAngleEulerCmd * ros_message = _ros_message; - { // header - PyObject * field = PyObject_GetAttrString(_pymsg, "header"); - if (!field) { - return false; - } - if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // camera_name - PyObject * field = PyObject_GetAttrString(_pymsg, "camera_name"); - if (!field) { - return false; - } - assert(PyUnicode_Check(field)); - PyObject * encoded_field = PyUnicode_AsUTF8String(field); - if (!encoded_field) { - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String__assign(&ros_message->camera_name, PyBytes_AS_STRING(encoded_field)); - Py_DECREF(encoded_field); - Py_DECREF(field); - } - { // vehicle_name - PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_name"); - if (!field) { - return false; - } - assert(PyUnicode_Check(field)); - PyObject * encoded_field = PyUnicode_AsUTF8String(field); - if (!encoded_field) { - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String__assign(&ros_message->vehicle_name, PyBytes_AS_STRING(encoded_field)); - Py_DECREF(encoded_field); - Py_DECREF(field); - } - { // roll - PyObject * field = PyObject_GetAttrString(_pymsg, "roll"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->roll = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // pitch - PyObject * field = PyObject_GetAttrString(_pymsg, "pitch"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->pitch = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // yaw - PyObject * field = PyObject_GetAttrString(_pymsg, "yaw"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->yaw = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__msg__gimbal_angle_euler_cmd__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of GimbalAngleEulerCmd */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._gimbal_angle_euler_cmd"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "GimbalAngleEulerCmd"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__msg__GimbalAngleEulerCmd * ros_message = (airsim_interfaces__msg__GimbalAngleEulerCmd *)raw_ros_message; - { // header - PyObject * field = NULL; - field = std_msgs__msg__header__convert_to_py(&ros_message->header); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "header", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // camera_name - PyObject * field = NULL; - field = PyUnicode_DecodeUTF8( - ros_message->camera_name.data, - strlen(ros_message->camera_name.data), - "strict"); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "camera_name", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // vehicle_name - PyObject * field = NULL; - field = PyUnicode_DecodeUTF8( - ros_message->vehicle_name.data, - strlen(ros_message->vehicle_name.data), - "strict"); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "vehicle_name", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // roll - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->roll); - { - int rc = PyObject_SetAttrString(_pymessage, "roll", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // pitch - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->pitch); - { - int rc = PyObject_SetAttrString(_pymessage, "pitch", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // yaw - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->yaw); - { - int rc = PyObject_SetAttrString(_pymessage, "yaw", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd.py deleted file mode 100644 index a097e3da59..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd.py +++ /dev/null @@ -1,191 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_GimbalAngleQuatCmd(type): - """Metaclass of message 'GimbalAngleQuatCmd'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.msg.GimbalAngleQuatCmd') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__gimbal_angle_quat_cmd - cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__gimbal_angle_quat_cmd - cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__gimbal_angle_quat_cmd - cls._TYPE_SUPPORT = module.type_support_msg__msg__gimbal_angle_quat_cmd - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__gimbal_angle_quat_cmd - - from geometry_msgs.msg import Quaternion - if Quaternion.__class__._TYPE_SUPPORT is None: - Quaternion.__class__.__import_type_support__() - - from std_msgs.msg import Header - if Header.__class__._TYPE_SUPPORT is None: - Header.__class__.__import_type_support__() - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class GimbalAngleQuatCmd(metaclass=Metaclass_GimbalAngleQuatCmd): - """Message class 'GimbalAngleQuatCmd'.""" - - __slots__ = [ - '_header', - '_camera_name', - '_vehicle_name', - '_orientation', - ] - - _fields_and_field_types = { - 'header': 'std_msgs/Header', - 'camera_name': 'string', - 'vehicle_name': 'string', - 'orientation': 'geometry_msgs/Quaternion', - } - - SLOT_TYPES = ( - rosidl_parser.definition.NamespacedType(['std_msgs', 'msg'], 'Header'), # noqa: E501 - rosidl_parser.definition.UnboundedString(), # noqa: E501 - rosidl_parser.definition.UnboundedString(), # noqa: E501 - rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'Quaternion'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - from std_msgs.msg import Header - self.header = kwargs.get('header', Header()) - self.camera_name = kwargs.get('camera_name', str()) - self.vehicle_name = kwargs.get('vehicle_name', str()) - from geometry_msgs.msg import Quaternion - self.orientation = kwargs.get('orientation', Quaternion()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.header != other.header: - return False - if self.camera_name != other.camera_name: - return False - if self.vehicle_name != other.vehicle_name: - return False - if self.orientation != other.orientation: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def header(self): - """Message field 'header'.""" - return self._header - - @header.setter - def header(self, value): - if __debug__: - from std_msgs.msg import Header - assert \ - isinstance(value, Header), \ - "The 'header' field must be a sub message of type 'Header'" - self._header = value - - @property - def camera_name(self): - """Message field 'camera_name'.""" - return self._camera_name - - @camera_name.setter - def camera_name(self, value): - if __debug__: - assert \ - isinstance(value, str), \ - "The 'camera_name' field must be of type 'str'" - self._camera_name = value - - @property - def vehicle_name(self): - """Message field 'vehicle_name'.""" - return self._vehicle_name - - @vehicle_name.setter - def vehicle_name(self, value): - if __debug__: - assert \ - isinstance(value, str), \ - "The 'vehicle_name' field must be of type 'str'" - self._vehicle_name = value - - @property - def orientation(self): - """Message field 'orientation'.""" - return self._orientation - - @orientation.setter - def orientation(self, value): - if __debug__: - from geometry_msgs.msg import Quaternion - assert \ - isinstance(value, Quaternion), \ - "The 'orientation' field must be a sub message of type 'Quaternion'" - self._orientation = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd_s.c deleted file mode 100644 index 5430186a29..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gimbal_angle_quat_cmd_s.c +++ /dev/null @@ -1,203 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:msg/GimbalAngleQuatCmd.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__struct.h" -#include "airsim_interfaces/msg/detail/gimbal_angle_quat_cmd__functions.h" - -#include "rosidl_runtime_c/string.h" -#include "rosidl_runtime_c/string_functions.h" - -ROSIDL_GENERATOR_C_IMPORT -bool std_msgs__msg__header__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * std_msgs__msg__header__convert_to_py(void * raw_ros_message); -ROSIDL_GENERATOR_C_IMPORT -bool geometry_msgs__msg__quaternion__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * geometry_msgs__msg__quaternion__convert_to_py(void * raw_ros_message); - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__msg__gimbal_angle_quat_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[64]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.msg._gimbal_angle_quat_cmd.GimbalAngleQuatCmd", full_classname_dest, 63) == 0); - } - airsim_interfaces__msg__GimbalAngleQuatCmd * ros_message = _ros_message; - { // header - PyObject * field = PyObject_GetAttrString(_pymsg, "header"); - if (!field) { - return false; - } - if (!std_msgs__msg__header__convert_from_py(field, &ros_message->header)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // camera_name - PyObject * field = PyObject_GetAttrString(_pymsg, "camera_name"); - if (!field) { - return false; - } - assert(PyUnicode_Check(field)); - PyObject * encoded_field = PyUnicode_AsUTF8String(field); - if (!encoded_field) { - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String__assign(&ros_message->camera_name, PyBytes_AS_STRING(encoded_field)); - Py_DECREF(encoded_field); - Py_DECREF(field); - } - { // vehicle_name - PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_name"); - if (!field) { - return false; - } - assert(PyUnicode_Check(field)); - PyObject * encoded_field = PyUnicode_AsUTF8String(field); - if (!encoded_field) { - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String__assign(&ros_message->vehicle_name, PyBytes_AS_STRING(encoded_field)); - Py_DECREF(encoded_field); - Py_DECREF(field); - } - { // orientation - PyObject * field = PyObject_GetAttrString(_pymsg, "orientation"); - if (!field) { - return false; - } - if (!geometry_msgs__msg__quaternion__convert_from_py(field, &ros_message->orientation)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__msg__gimbal_angle_quat_cmd__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of GimbalAngleQuatCmd */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._gimbal_angle_quat_cmd"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "GimbalAngleQuatCmd"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__msg__GimbalAngleQuatCmd * ros_message = (airsim_interfaces__msg__GimbalAngleQuatCmd *)raw_ros_message; - { // header - PyObject * field = NULL; - field = std_msgs__msg__header__convert_to_py(&ros_message->header); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "header", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // camera_name - PyObject * field = NULL; - field = PyUnicode_DecodeUTF8( - ros_message->camera_name.data, - strlen(ros_message->camera_name.data), - "strict"); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "camera_name", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // vehicle_name - PyObject * field = NULL; - field = PyUnicode_DecodeUTF8( - ros_message->vehicle_name.data, - strlen(ros_message->vehicle_name.data), - "strict"); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "vehicle_name", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // orientation - PyObject * field = NULL; - field = geometry_msgs__msg__quaternion__convert_to_py(&ros_message->orientation); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "orientation", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw.py deleted file mode 100644 index 03feaf34b5..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw.py +++ /dev/null @@ -1,179 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:msg/GPSYaw.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_GPSYaw(type): - """Metaclass of message 'GPSYaw'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.msg.GPSYaw') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__gps_yaw - cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__gps_yaw - cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__gps_yaw - cls._TYPE_SUPPORT = module.type_support_msg__msg__gps_yaw - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__gps_yaw - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class GPSYaw(metaclass=Metaclass_GPSYaw): - """Message class 'GPSYaw'.""" - - __slots__ = [ - '_latitude', - '_longitude', - '_altitude', - '_yaw', - ] - - _fields_and_field_types = { - 'latitude': 'double', - 'longitude': 'double', - 'altitude': 'double', - 'yaw': 'double', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.latitude = kwargs.get('latitude', float()) - self.longitude = kwargs.get('longitude', float()) - self.altitude = kwargs.get('altitude', float()) - self.yaw = kwargs.get('yaw', float()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.latitude != other.latitude: - return False - if self.longitude != other.longitude: - return False - if self.altitude != other.altitude: - return False - if self.yaw != other.yaw: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def latitude(self): - """Message field 'latitude'.""" - return self._latitude - - @latitude.setter - def latitude(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'latitude' field must be of type 'float'" - self._latitude = value - - @property - def longitude(self): - """Message field 'longitude'.""" - return self._longitude - - @longitude.setter - def longitude(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'longitude' field must be of type 'float'" - self._longitude = value - - @property - def altitude(self): - """Message field 'altitude'.""" - return self._altitude - - @altitude.setter - def altitude(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'altitude' field must be of type 'float'" - self._altitude = value - - @property - def yaw(self): - """Message field 'yaw'.""" - return self._yaw - - @yaw.setter - def yaw(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'yaw' field must be of type 'float'" - self._yaw = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw_s.c deleted file mode 100644 index 82705670e6..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_gps_yaw_s.c +++ /dev/null @@ -1,158 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:msg/GPSYaw.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/detail/gps_yaw__struct.h" -#include "airsim_interfaces/msg/detail/gps_yaw__functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__msg__gps_yaw__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[38]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.msg._gps_yaw.GPSYaw", full_classname_dest, 37) == 0); - } - airsim_interfaces__msg__GPSYaw * ros_message = _ros_message; - { // latitude - PyObject * field = PyObject_GetAttrString(_pymsg, "latitude"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->latitude = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // longitude - PyObject * field = PyObject_GetAttrString(_pymsg, "longitude"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->longitude = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // altitude - PyObject * field = PyObject_GetAttrString(_pymsg, "altitude"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->altitude = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // yaw - PyObject * field = PyObject_GetAttrString(_pymsg, "yaw"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->yaw = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__msg__gps_yaw__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of GPSYaw */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._gps_yaw"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "GPSYaw"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__msg__GPSYaw * ros_message = (airsim_interfaces__msg__GPSYaw *)raw_ros_message; - { // latitude - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->latitude); - { - int rc = PyObject_SetAttrString(_pymessage, "latitude", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // longitude - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->longitude); - { - int rc = PyObject_SetAttrString(_pymessage, "longitude", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // altitude - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->altitude); - { - int rc = PyObject_SetAttrString(_pymessage, "altitude", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // yaw - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->yaw); - { - int rc = PyObject_SetAttrString(_pymessage, "yaw", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd.py deleted file mode 100644 index 238c7d4589..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd.py +++ /dev/null @@ -1,128 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:msg/VelCmd.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_VelCmd(type): - """Metaclass of message 'VelCmd'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.msg.VelCmd') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__vel_cmd - cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__vel_cmd - cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__vel_cmd - cls._TYPE_SUPPORT = module.type_support_msg__msg__vel_cmd - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__vel_cmd - - from geometry_msgs.msg import Twist - if Twist.__class__._TYPE_SUPPORT is None: - Twist.__class__.__import_type_support__() - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class VelCmd(metaclass=Metaclass_VelCmd): - """Message class 'VelCmd'.""" - - __slots__ = [ - '_twist', - ] - - _fields_and_field_types = { - 'twist': 'geometry_msgs/Twist', - } - - SLOT_TYPES = ( - rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'Twist'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - from geometry_msgs.msg import Twist - self.twist = kwargs.get('twist', Twist()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.twist != other.twist: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def twist(self): - """Message field 'twist'.""" - return self._twist - - @twist.setter - def twist(self, value): - if __debug__: - from geometry_msgs.msg import Twist - assert \ - isinstance(value, Twist), \ - "The 'twist' field must be a sub message of type 'Twist'" - self._twist = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group.py deleted file mode 100644 index 4369d27eb9..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group.py +++ /dev/null @@ -1,157 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:msg/VelCmdGroup.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_VelCmdGroup(type): - """Metaclass of message 'VelCmdGroup'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.msg.VelCmdGroup') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__vel_cmd_group - cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__vel_cmd_group - cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__vel_cmd_group - cls._TYPE_SUPPORT = module.type_support_msg__msg__vel_cmd_group - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__vel_cmd_group - - from geometry_msgs.msg import Twist - if Twist.__class__._TYPE_SUPPORT is None: - Twist.__class__.__import_type_support__() - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class VelCmdGroup(metaclass=Metaclass_VelCmdGroup): - """Message class 'VelCmdGroup'.""" - - __slots__ = [ - '_twist', - '_vehicle_names', - ] - - _fields_and_field_types = { - 'twist': 'geometry_msgs/Twist', - 'vehicle_names': 'sequence', - } - - SLOT_TYPES = ( - rosidl_parser.definition.NamespacedType(['geometry_msgs', 'msg'], 'Twist'), # noqa: E501 - rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.UnboundedString()), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - from geometry_msgs.msg import Twist - self.twist = kwargs.get('twist', Twist()) - self.vehicle_names = kwargs.get('vehicle_names', []) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.twist != other.twist: - return False - if self.vehicle_names != other.vehicle_names: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def twist(self): - """Message field 'twist'.""" - return self._twist - - @twist.setter - def twist(self, value): - if __debug__: - from geometry_msgs.msg import Twist - assert \ - isinstance(value, Twist), \ - "The 'twist' field must be a sub message of type 'Twist'" - self._twist = value - - @property - def vehicle_names(self): - """Message field 'vehicle_names'.""" - return self._vehicle_names - - @vehicle_names.setter - def vehicle_names(self, value): - if __debug__: - from collections.abc import Sequence - from collections.abc import Set - from collections import UserList - from collections import UserString - assert \ - ((isinstance(value, Sequence) or - isinstance(value, Set) or - isinstance(value, UserList)) and - not isinstance(value, str) and - not isinstance(value, UserString) and - all(isinstance(v, str) for v in value) and - True), \ - "The 'vehicle_names' field must be a set or sequence and each value of type 'str'" - self._vehicle_names = value diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group_s.c deleted file mode 100644 index 100f51b6e9..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_group_s.c +++ /dev/null @@ -1,181 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:msg/VelCmdGroup.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/detail/vel_cmd_group__struct.h" -#include "airsim_interfaces/msg/detail/vel_cmd_group__functions.h" - -#include "rosidl_runtime_c/primitives_sequence.h" -#include "rosidl_runtime_c/primitives_sequence_functions.h" -#include "rosidl_runtime_c/string.h" -#include "rosidl_runtime_c/string_functions.h" - -ROSIDL_GENERATOR_C_IMPORT -bool geometry_msgs__msg__twist__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * geometry_msgs__msg__twist__convert_to_py(void * raw_ros_message); - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__msg__vel_cmd_group__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[49]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.msg._vel_cmd_group.VelCmdGroup", full_classname_dest, 48) == 0); - } - airsim_interfaces__msg__VelCmdGroup * ros_message = _ros_message; - { // twist - PyObject * field = PyObject_GetAttrString(_pymsg, "twist"); - if (!field) { - return false; - } - if (!geometry_msgs__msg__twist__convert_from_py(field, &ros_message->twist)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - { // vehicle_names - PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_names"); - if (!field) { - return false; - } - PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'vehicle_names'"); - if (!seq_field) { - Py_DECREF(field); - return false; - } - Py_ssize_t size = PySequence_Size(field); - if (-1 == size) { - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - if (!rosidl_runtime_c__String__Sequence__init(&(ros_message->vehicle_names), size)) { - PyErr_SetString(PyExc_RuntimeError, "unable to create String__Sequence ros_message"); - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String * dest = ros_message->vehicle_names.data; - for (Py_ssize_t i = 0; i < size; ++i) { - PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); - if (!item) { - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - assert(PyUnicode_Check(item)); - PyObject * encoded_item = PyUnicode_AsUTF8String(item); - if (!encoded_item) { - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String__assign(&dest[i], PyBytes_AS_STRING(encoded_item)); - Py_DECREF(encoded_item); - } - Py_DECREF(seq_field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__msg__vel_cmd_group__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of VelCmdGroup */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._vel_cmd_group"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "VelCmdGroup"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__msg__VelCmdGroup * ros_message = (airsim_interfaces__msg__VelCmdGroup *)raw_ros_message; - { // twist - PyObject * field = NULL; - field = geometry_msgs__msg__twist__convert_to_py(&ros_message->twist); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "twist", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // vehicle_names - PyObject * field = NULL; - size_t size = ros_message->vehicle_names.size; - rosidl_runtime_c__String * src = ros_message->vehicle_names.data; - field = PyList_New(size); - if (!field) { - return NULL; - } - for (size_t i = 0; i < size; ++i) { - PyObject * decoded_item = PyUnicode_DecodeUTF8(src[i].data, strlen(src[i].data), "strict"); - if (!decoded_item) { - return NULL; - } - int rc = PyList_SetItem(field, i, decoded_item); - (void)rc; - assert(rc == 0); - } - assert(PySequence_Check(field)); - { - int rc = PyObject_SetAttrString(_pymessage, "vehicle_names", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_s.c deleted file mode 100644 index 4ff9b5fa50..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/msg/_vel_cmd_s.c +++ /dev/null @@ -1,107 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:msg/VelCmd.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/msg/detail/vel_cmd__struct.h" -#include "airsim_interfaces/msg/detail/vel_cmd__functions.h" - -ROSIDL_GENERATOR_C_IMPORT -bool geometry_msgs__msg__twist__convert_from_py(PyObject * _pymsg, void * _ros_message); -ROSIDL_GENERATOR_C_IMPORT -PyObject * geometry_msgs__msg__twist__convert_to_py(void * raw_ros_message); - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__msg__vel_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[38]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.msg._vel_cmd.VelCmd", full_classname_dest, 37) == 0); - } - airsim_interfaces__msg__VelCmd * ros_message = _ros_message; - { // twist - PyObject * field = PyObject_GetAttrString(_pymsg, "twist"); - if (!field) { - return false; - } - if (!geometry_msgs__msg__twist__convert_from_py(field, &ros_message->twist)) { - Py_DECREF(field); - return false; - } - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__msg__vel_cmd__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of VelCmd */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.msg._vel_cmd"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "VelCmd"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__msg__VelCmd * ros_message = (airsim_interfaces__msg__VelCmd *)raw_ros_message; - { // twist - PyObject * field = NULL; - field = geometry_msgs__msg__twist__convert_to_py(&ros_message->twist); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "twist", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/__init__.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/__init__.py deleted file mode 100644 index 114256927c..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from airsim_interfaces.srv._land import Land # noqa: F401 -from airsim_interfaces.srv._land_group import LandGroup # noqa: F401 -from airsim_interfaces.srv._reset import Reset # noqa: F401 -from airsim_interfaces.srv._set_gps_position import SetGPSPosition # noqa: F401 -from airsim_interfaces.srv._set_local_position import SetLocalPosition # noqa: F401 -from airsim_interfaces.srv._takeoff import Takeoff # noqa: F401 -from airsim_interfaces.srv._takeoff_group import TakeoffGroup # noqa: F401 diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land.py deleted file mode 100644 index 8566c571f2..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land.py +++ /dev/null @@ -1,278 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:srv/Land.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_Land_Request(type): - """Metaclass of message 'Land_Request'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.Land_Request') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__land__request - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__land__request - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__land__request - cls._TYPE_SUPPORT = module.type_support_msg__srv__land__request - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__land__request - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class Land_Request(metaclass=Metaclass_Land_Request): - """Message class 'Land_Request'.""" - - __slots__ = [ - '_wait_on_last_task', - ] - - _fields_and_field_types = { - 'wait_on_last_task': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.wait_on_last_task = kwargs.get('wait_on_last_task', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.wait_on_last_task != other.wait_on_last_task: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def wait_on_last_task(self): - """Message field 'wait_on_last_task'.""" - return self._wait_on_last_task - - @wait_on_last_task.setter - def wait_on_last_task(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'wait_on_last_task' field must be of type 'bool'" - self._wait_on_last_task = value - - -# Import statements for member types - -# already imported above -# import rosidl_parser.definition - - -class Metaclass_Land_Response(type): - """Metaclass of message 'Land_Response'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.Land_Response') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__land__response - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__land__response - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__land__response - cls._TYPE_SUPPORT = module.type_support_msg__srv__land__response - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__land__response - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class Land_Response(metaclass=Metaclass_Land_Response): - """Message class 'Land_Response'.""" - - __slots__ = [ - '_success', - ] - - _fields_and_field_types = { - 'success': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.success = kwargs.get('success', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.success != other.success: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def success(self): - """Message field 'success'.""" - return self._success - - @success.setter - def success(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'success' field must be of type 'bool'" - self._success = value - - -class Metaclass_Land(type): - """Metaclass of service 'Land'.""" - - _TYPE_SUPPORT = None - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.Land') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._TYPE_SUPPORT = module.type_support_srv__srv__land - - from airsim_interfaces.srv import _land - if _land.Metaclass_Land_Request._TYPE_SUPPORT is None: - _land.Metaclass_Land_Request.__import_type_support__() - if _land.Metaclass_Land_Response._TYPE_SUPPORT is None: - _land.Metaclass_Land_Response.__import_type_support__() - - -class Land(metaclass=Metaclass_Land): - from airsim_interfaces.srv._land import Land_Request as Request - from airsim_interfaces.srv._land import Land_Response as Response - - def __init__(self): - raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group.py deleted file mode 100644 index deafc93151..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group.py +++ /dev/null @@ -1,307 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:srv/LandGroup.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_LandGroup_Request(type): - """Metaclass of message 'LandGroup_Request'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.LandGroup_Request') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__land_group__request - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__land_group__request - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__land_group__request - cls._TYPE_SUPPORT = module.type_support_msg__srv__land_group__request - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__land_group__request - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class LandGroup_Request(metaclass=Metaclass_LandGroup_Request): - """Message class 'LandGroup_Request'.""" - - __slots__ = [ - '_vehicle_names', - '_wait_on_last_task', - ] - - _fields_and_field_types = { - 'vehicle_names': 'sequence', - 'wait_on_last_task': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.UnboundedString()), # noqa: E501 - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.vehicle_names = kwargs.get('vehicle_names', []) - self.wait_on_last_task = kwargs.get('wait_on_last_task', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.vehicle_names != other.vehicle_names: - return False - if self.wait_on_last_task != other.wait_on_last_task: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def vehicle_names(self): - """Message field 'vehicle_names'.""" - return self._vehicle_names - - @vehicle_names.setter - def vehicle_names(self, value): - if __debug__: - from collections.abc import Sequence - from collections.abc import Set - from collections import UserList - from collections import UserString - assert \ - ((isinstance(value, Sequence) or - isinstance(value, Set) or - isinstance(value, UserList)) and - not isinstance(value, str) and - not isinstance(value, UserString) and - all(isinstance(v, str) for v in value) and - True), \ - "The 'vehicle_names' field must be a set or sequence and each value of type 'str'" - self._vehicle_names = value - - @property - def wait_on_last_task(self): - """Message field 'wait_on_last_task'.""" - return self._wait_on_last_task - - @wait_on_last_task.setter - def wait_on_last_task(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'wait_on_last_task' field must be of type 'bool'" - self._wait_on_last_task = value - - -# Import statements for member types - -# already imported above -# import rosidl_parser.definition - - -class Metaclass_LandGroup_Response(type): - """Metaclass of message 'LandGroup_Response'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.LandGroup_Response') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__land_group__response - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__land_group__response - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__land_group__response - cls._TYPE_SUPPORT = module.type_support_msg__srv__land_group__response - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__land_group__response - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class LandGroup_Response(metaclass=Metaclass_LandGroup_Response): - """Message class 'LandGroup_Response'.""" - - __slots__ = [ - '_success', - ] - - _fields_and_field_types = { - 'success': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.success = kwargs.get('success', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.success != other.success: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def success(self): - """Message field 'success'.""" - return self._success - - @success.setter - def success(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'success' field must be of type 'bool'" - self._success = value - - -class Metaclass_LandGroup(type): - """Metaclass of service 'LandGroup'.""" - - _TYPE_SUPPORT = None - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.LandGroup') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._TYPE_SUPPORT = module.type_support_srv__srv__land_group - - from airsim_interfaces.srv import _land_group - if _land_group.Metaclass_LandGroup_Request._TYPE_SUPPORT is None: - _land_group.Metaclass_LandGroup_Request.__import_type_support__() - if _land_group.Metaclass_LandGroup_Response._TYPE_SUPPORT is None: - _land_group.Metaclass_LandGroup_Response.__import_type_support__() - - -class LandGroup(metaclass=Metaclass_LandGroup): - from airsim_interfaces.srv._land_group import LandGroup_Request as Request - from airsim_interfaces.srv._land_group import LandGroup_Response as Response - - def __init__(self): - raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group_s.c deleted file mode 100644 index 2762e924e2..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_group_s.c +++ /dev/null @@ -1,267 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:srv/LandGroup.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/srv/detail/land_group__struct.h" -#include "airsim_interfaces/srv/detail/land_group__functions.h" - -#include "rosidl_runtime_c/primitives_sequence.h" -#include "rosidl_runtime_c/primitives_sequence_functions.h" -#include "rosidl_runtime_c/string.h" -#include "rosidl_runtime_c/string_functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__land_group__request__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[52]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._land_group.LandGroup_Request", full_classname_dest, 51) == 0); - } - airsim_interfaces__srv__LandGroup_Request * ros_message = _ros_message; - { // vehicle_names - PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_names"); - if (!field) { - return false; - } - PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'vehicle_names'"); - if (!seq_field) { - Py_DECREF(field); - return false; - } - Py_ssize_t size = PySequence_Size(field); - if (-1 == size) { - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - if (!rosidl_runtime_c__String__Sequence__init(&(ros_message->vehicle_names), size)) { - PyErr_SetString(PyExc_RuntimeError, "unable to create String__Sequence ros_message"); - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String * dest = ros_message->vehicle_names.data; - for (Py_ssize_t i = 0; i < size; ++i) { - PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); - if (!item) { - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - assert(PyUnicode_Check(item)); - PyObject * encoded_item = PyUnicode_AsUTF8String(item); - if (!encoded_item) { - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String__assign(&dest[i], PyBytes_AS_STRING(encoded_item)); - Py_DECREF(encoded_item); - } - Py_DECREF(seq_field); - Py_DECREF(field); - } - { // wait_on_last_task - PyObject * field = PyObject_GetAttrString(_pymsg, "wait_on_last_task"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->wait_on_last_task = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__land_group__request__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of LandGroup_Request */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._land_group"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "LandGroup_Request"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__LandGroup_Request * ros_message = (airsim_interfaces__srv__LandGroup_Request *)raw_ros_message; - { // vehicle_names - PyObject * field = NULL; - size_t size = ros_message->vehicle_names.size; - rosidl_runtime_c__String * src = ros_message->vehicle_names.data; - field = PyList_New(size); - if (!field) { - return NULL; - } - for (size_t i = 0; i < size; ++i) { - PyObject * decoded_item = PyUnicode_DecodeUTF8(src[i].data, strlen(src[i].data), "strict"); - if (!decoded_item) { - return NULL; - } - int rc = PyList_SetItem(field, i, decoded_item); - (void)rc; - assert(rc == 0); - } - assert(PySequence_Check(field)); - { - int rc = PyObject_SetAttrString(_pymessage, "vehicle_names", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // wait_on_last_task - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->wait_on_last_task ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "wait_on_last_task", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} - -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -// already included above -// #include -// already included above -// #include -// already included above -// #include "numpy/ndarrayobject.h" -// already included above -// #include "rosidl_runtime_c/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/land_group__struct.h" -// already included above -// #include "airsim_interfaces/srv/detail/land_group__functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__land_group__response__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[53]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._land_group.LandGroup_Response", full_classname_dest, 52) == 0); - } - airsim_interfaces__srv__LandGroup_Response * ros_message = _ros_message; - { // success - PyObject * field = PyObject_GetAttrString(_pymsg, "success"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->success = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__land_group__response__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of LandGroup_Response */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._land_group"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "LandGroup_Response"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__LandGroup_Response * ros_message = (airsim_interfaces__srv__LandGroup_Response *)raw_ros_message; - { // success - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->success ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "success", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_s.c deleted file mode 100644 index d7b5166405..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_land_s.c +++ /dev/null @@ -1,193 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:srv/Land.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/srv/detail/land__struct.h" -#include "airsim_interfaces/srv/detail/land__functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__land__request__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[41]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._land.Land_Request", full_classname_dest, 40) == 0); - } - airsim_interfaces__srv__Land_Request * ros_message = _ros_message; - { // wait_on_last_task - PyObject * field = PyObject_GetAttrString(_pymsg, "wait_on_last_task"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->wait_on_last_task = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__land__request__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of Land_Request */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._land"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Land_Request"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__Land_Request * ros_message = (airsim_interfaces__srv__Land_Request *)raw_ros_message; - { // wait_on_last_task - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->wait_on_last_task ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "wait_on_last_task", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} - -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -// already included above -// #include -// already included above -// #include -// already included above -// #include "numpy/ndarrayobject.h" -// already included above -// #include "rosidl_runtime_c/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/land__struct.h" -// already included above -// #include "airsim_interfaces/srv/detail/land__functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__land__response__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[42]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._land.Land_Response", full_classname_dest, 41) == 0); - } - airsim_interfaces__srv__Land_Response * ros_message = _ros_message; - { // success - PyObject * field = PyObject_GetAttrString(_pymsg, "success"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->success = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__land__response__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of Land_Response */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._land"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Land_Response"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__Land_Response * ros_message = (airsim_interfaces__srv__Land_Response *)raw_ros_message; - { // success - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->success ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "success", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset.py deleted file mode 100644 index cdfec1c9d9..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset.py +++ /dev/null @@ -1,278 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:srv/Reset.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_Reset_Request(type): - """Metaclass of message 'Reset_Request'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.Reset_Request') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__reset__request - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__reset__request - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__reset__request - cls._TYPE_SUPPORT = module.type_support_msg__srv__reset__request - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__reset__request - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class Reset_Request(metaclass=Metaclass_Reset_Request): - """Message class 'Reset_Request'.""" - - __slots__ = [ - '_wait_on_last_task', - ] - - _fields_and_field_types = { - 'wait_on_last_task': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.wait_on_last_task = kwargs.get('wait_on_last_task', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.wait_on_last_task != other.wait_on_last_task: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def wait_on_last_task(self): - """Message field 'wait_on_last_task'.""" - return self._wait_on_last_task - - @wait_on_last_task.setter - def wait_on_last_task(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'wait_on_last_task' field must be of type 'bool'" - self._wait_on_last_task = value - - -# Import statements for member types - -# already imported above -# import rosidl_parser.definition - - -class Metaclass_Reset_Response(type): - """Metaclass of message 'Reset_Response'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.Reset_Response') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__reset__response - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__reset__response - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__reset__response - cls._TYPE_SUPPORT = module.type_support_msg__srv__reset__response - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__reset__response - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class Reset_Response(metaclass=Metaclass_Reset_Response): - """Message class 'Reset_Response'.""" - - __slots__ = [ - '_success', - ] - - _fields_and_field_types = { - 'success': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.success = kwargs.get('success', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.success != other.success: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def success(self): - """Message field 'success'.""" - return self._success - - @success.setter - def success(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'success' field must be of type 'bool'" - self._success = value - - -class Metaclass_Reset(type): - """Metaclass of service 'Reset'.""" - - _TYPE_SUPPORT = None - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.Reset') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._TYPE_SUPPORT = module.type_support_srv__srv__reset - - from airsim_interfaces.srv import _reset - if _reset.Metaclass_Reset_Request._TYPE_SUPPORT is None: - _reset.Metaclass_Reset_Request.__import_type_support__() - if _reset.Metaclass_Reset_Response._TYPE_SUPPORT is None: - _reset.Metaclass_Reset_Response.__import_type_support__() - - -class Reset(metaclass=Metaclass_Reset): - from airsim_interfaces.srv._reset import Reset_Request as Request - from airsim_interfaces.srv._reset import Reset_Response as Response - - def __init__(self): - raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset_s.c deleted file mode 100644 index 1855a65712..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_reset_s.c +++ /dev/null @@ -1,193 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:srv/Reset.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/srv/detail/reset__struct.h" -#include "airsim_interfaces/srv/detail/reset__functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__reset__request__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[43]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._reset.Reset_Request", full_classname_dest, 42) == 0); - } - airsim_interfaces__srv__Reset_Request * ros_message = _ros_message; - { // wait_on_last_task - PyObject * field = PyObject_GetAttrString(_pymsg, "wait_on_last_task"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->wait_on_last_task = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__reset__request__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of Reset_Request */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._reset"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Reset_Request"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__Reset_Request * ros_message = (airsim_interfaces__srv__Reset_Request *)raw_ros_message; - { // wait_on_last_task - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->wait_on_last_task ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "wait_on_last_task", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} - -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -// already included above -// #include -// already included above -// #include -// already included above -// #include "numpy/ndarrayobject.h" -// already included above -// #include "rosidl_runtime_c/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/reset__struct.h" -// already included above -// #include "airsim_interfaces/srv/detail/reset__functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__reset__response__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[44]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._reset.Reset_Response", full_classname_dest, 43) == 0); - } - airsim_interfaces__srv__Reset_Response * ros_message = _ros_message; - { // success - PyObject * field = PyObject_GetAttrString(_pymsg, "success"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->success = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__reset__response__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of Reset_Response */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._reset"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Reset_Response"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__Reset_Response * ros_message = (airsim_interfaces__srv__Reset_Response *)raw_ros_message; - { // success - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->success ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "success", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position.py deleted file mode 100644 index 0ef5d6cf5b..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position.py +++ /dev/null @@ -1,354 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:srv/SetGPSPosition.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_SetGPSPosition_Request(type): - """Metaclass of message 'SetGPSPosition_Request'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.SetGPSPosition_Request') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__set_gps_position__request - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__set_gps_position__request - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__set_gps_position__request - cls._TYPE_SUPPORT = module.type_support_msg__srv__set_gps_position__request - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__set_gps_position__request - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class SetGPSPosition_Request(metaclass=Metaclass_SetGPSPosition_Request): - """Message class 'SetGPSPosition_Request'.""" - - __slots__ = [ - '_latitude', - '_longitude', - '_altitude', - '_yaw', - '_vehicle_name', - ] - - _fields_and_field_types = { - 'latitude': 'double', - 'longitude': 'double', - 'altitude': 'double', - 'yaw': 'double', - 'vehicle_name': 'string', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.UnboundedString(), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.latitude = kwargs.get('latitude', float()) - self.longitude = kwargs.get('longitude', float()) - self.altitude = kwargs.get('altitude', float()) - self.yaw = kwargs.get('yaw', float()) - self.vehicle_name = kwargs.get('vehicle_name', str()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.latitude != other.latitude: - return False - if self.longitude != other.longitude: - return False - if self.altitude != other.altitude: - return False - if self.yaw != other.yaw: - return False - if self.vehicle_name != other.vehicle_name: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def latitude(self): - """Message field 'latitude'.""" - return self._latitude - - @latitude.setter - def latitude(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'latitude' field must be of type 'float'" - self._latitude = value - - @property - def longitude(self): - """Message field 'longitude'.""" - return self._longitude - - @longitude.setter - def longitude(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'longitude' field must be of type 'float'" - self._longitude = value - - @property - def altitude(self): - """Message field 'altitude'.""" - return self._altitude - - @altitude.setter - def altitude(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'altitude' field must be of type 'float'" - self._altitude = value - - @property - def yaw(self): - """Message field 'yaw'.""" - return self._yaw - - @yaw.setter - def yaw(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'yaw' field must be of type 'float'" - self._yaw = value - - @property - def vehicle_name(self): - """Message field 'vehicle_name'.""" - return self._vehicle_name - - @vehicle_name.setter - def vehicle_name(self, value): - if __debug__: - assert \ - isinstance(value, str), \ - "The 'vehicle_name' field must be of type 'str'" - self._vehicle_name = value - - -# Import statements for member types - -# already imported above -# import rosidl_parser.definition - - -class Metaclass_SetGPSPosition_Response(type): - """Metaclass of message 'SetGPSPosition_Response'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.SetGPSPosition_Response') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__set_gps_position__response - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__set_gps_position__response - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__set_gps_position__response - cls._TYPE_SUPPORT = module.type_support_msg__srv__set_gps_position__response - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__set_gps_position__response - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class SetGPSPosition_Response(metaclass=Metaclass_SetGPSPosition_Response): - """Message class 'SetGPSPosition_Response'.""" - - __slots__ = [ - '_success', - ] - - _fields_and_field_types = { - 'success': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.success = kwargs.get('success', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.success != other.success: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def success(self): - """Message field 'success'.""" - return self._success - - @success.setter - def success(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'success' field must be of type 'bool'" - self._success = value - - -class Metaclass_SetGPSPosition(type): - """Metaclass of service 'SetGPSPosition'.""" - - _TYPE_SUPPORT = None - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.SetGPSPosition') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._TYPE_SUPPORT = module.type_support_srv__srv__set_gps_position - - from airsim_interfaces.srv import _set_gps_position - if _set_gps_position.Metaclass_SetGPSPosition_Request._TYPE_SUPPORT is None: - _set_gps_position.Metaclass_SetGPSPosition_Request.__import_type_support__() - if _set_gps_position.Metaclass_SetGPSPosition_Response._TYPE_SUPPORT is None: - _set_gps_position.Metaclass_SetGPSPosition_Response.__import_type_support__() - - -class SetGPSPosition(metaclass=Metaclass_SetGPSPosition): - from airsim_interfaces.srv._set_gps_position import SetGPSPosition_Request as Request - from airsim_interfaces.srv._set_gps_position import SetGPSPosition_Response as Response - - def __init__(self): - raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position_s.c deleted file mode 100644 index 108470a216..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_gps_position_s.c +++ /dev/null @@ -1,288 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:srv/SetGPSPosition.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/srv/detail/set_gps_position__struct.h" -#include "airsim_interfaces/srv/detail/set_gps_position__functions.h" - -#include "rosidl_runtime_c/string.h" -#include "rosidl_runtime_c/string_functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__set_gps_position__request__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[63]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._set_gps_position.SetGPSPosition_Request", full_classname_dest, 62) == 0); - } - airsim_interfaces__srv__SetGPSPosition_Request * ros_message = _ros_message; - { // latitude - PyObject * field = PyObject_GetAttrString(_pymsg, "latitude"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->latitude = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // longitude - PyObject * field = PyObject_GetAttrString(_pymsg, "longitude"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->longitude = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // altitude - PyObject * field = PyObject_GetAttrString(_pymsg, "altitude"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->altitude = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // yaw - PyObject * field = PyObject_GetAttrString(_pymsg, "yaw"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->yaw = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // vehicle_name - PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_name"); - if (!field) { - return false; - } - assert(PyUnicode_Check(field)); - PyObject * encoded_field = PyUnicode_AsUTF8String(field); - if (!encoded_field) { - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String__assign(&ros_message->vehicle_name, PyBytes_AS_STRING(encoded_field)); - Py_DECREF(encoded_field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__set_gps_position__request__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of SetGPSPosition_Request */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._set_gps_position"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "SetGPSPosition_Request"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__SetGPSPosition_Request * ros_message = (airsim_interfaces__srv__SetGPSPosition_Request *)raw_ros_message; - { // latitude - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->latitude); - { - int rc = PyObject_SetAttrString(_pymessage, "latitude", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // longitude - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->longitude); - { - int rc = PyObject_SetAttrString(_pymessage, "longitude", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // altitude - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->altitude); - { - int rc = PyObject_SetAttrString(_pymessage, "altitude", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // yaw - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->yaw); - { - int rc = PyObject_SetAttrString(_pymessage, "yaw", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // vehicle_name - PyObject * field = NULL; - field = PyUnicode_DecodeUTF8( - ros_message->vehicle_name.data, - strlen(ros_message->vehicle_name.data), - "strict"); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "vehicle_name", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} - -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -// already included above -// #include -// already included above -// #include -// already included above -// #include "numpy/ndarrayobject.h" -// already included above -// #include "rosidl_runtime_c/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_gps_position__struct.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_gps_position__functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__set_gps_position__response__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[64]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._set_gps_position.SetGPSPosition_Response", full_classname_dest, 63) == 0); - } - airsim_interfaces__srv__SetGPSPosition_Response * ros_message = _ros_message; - { // success - PyObject * field = PyObject_GetAttrString(_pymsg, "success"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->success = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__set_gps_position__response__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of SetGPSPosition_Response */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._set_gps_position"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "SetGPSPosition_Response"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__SetGPSPosition_Response * ros_message = (airsim_interfaces__srv__SetGPSPosition_Response *)raw_ros_message; - { // success - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->success ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "success", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position.py deleted file mode 100644 index d79c7cb50f..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position.py +++ /dev/null @@ -1,373 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:srv/SetLocalPosition.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_SetLocalPosition_Request(type): - """Metaclass of message 'SetLocalPosition_Request'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.SetLocalPosition_Request') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__set_local_position__request - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__set_local_position__request - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__set_local_position__request - cls._TYPE_SUPPORT = module.type_support_msg__srv__set_local_position__request - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__set_local_position__request - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class SetLocalPosition_Request(metaclass=Metaclass_SetLocalPosition_Request): - """Message class 'SetLocalPosition_Request'.""" - - __slots__ = [ - '_x', - '_y', - '_z', - '_yaw', - '_vehicle_name', - ] - - _fields_and_field_types = { - 'x': 'double', - 'y': 'double', - 'z': 'double', - 'yaw': 'double', - 'vehicle_name': 'string', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.BasicType('double'), # noqa: E501 - rosidl_parser.definition.UnboundedString(), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.x = kwargs.get('x', float()) - self.y = kwargs.get('y', float()) - self.z = kwargs.get('z', float()) - self.yaw = kwargs.get('yaw', float()) - self.vehicle_name = kwargs.get('vehicle_name', str()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.x != other.x: - return False - if self.y != other.y: - return False - if self.z != other.z: - return False - if self.yaw != other.yaw: - return False - if self.vehicle_name != other.vehicle_name: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def x(self): - """Message field 'x'.""" - return self._x - - @x.setter - def x(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'x' field must be of type 'float'" - self._x = value - - @property - def y(self): - """Message field 'y'.""" - return self._y - - @y.setter - def y(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'y' field must be of type 'float'" - self._y = value - - @property - def z(self): - """Message field 'z'.""" - return self._z - - @z.setter - def z(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'z' field must be of type 'float'" - self._z = value - - @property - def yaw(self): - """Message field 'yaw'.""" - return self._yaw - - @yaw.setter - def yaw(self, value): - if __debug__: - assert \ - isinstance(value, float), \ - "The 'yaw' field must be of type 'float'" - self._yaw = value - - @property - def vehicle_name(self): - """Message field 'vehicle_name'.""" - return self._vehicle_name - - @vehicle_name.setter - def vehicle_name(self, value): - if __debug__: - assert \ - isinstance(value, str), \ - "The 'vehicle_name' field must be of type 'str'" - self._vehicle_name = value - - -# Import statements for member types - -# already imported above -# import rosidl_parser.definition - - -class Metaclass_SetLocalPosition_Response(type): - """Metaclass of message 'SetLocalPosition_Response'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.SetLocalPosition_Response') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__set_local_position__response - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__set_local_position__response - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__set_local_position__response - cls._TYPE_SUPPORT = module.type_support_msg__srv__set_local_position__response - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__set_local_position__response - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class SetLocalPosition_Response(metaclass=Metaclass_SetLocalPosition_Response): - """Message class 'SetLocalPosition_Response'.""" - - __slots__ = [ - '_success', - '_message', - ] - - _fields_and_field_types = { - 'success': 'boolean', - 'message': 'string', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - rosidl_parser.definition.UnboundedString(), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.success = kwargs.get('success', bool()) - self.message = kwargs.get('message', str()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.success != other.success: - return False - if self.message != other.message: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def success(self): - """Message field 'success'.""" - return self._success - - @success.setter - def success(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'success' field must be of type 'bool'" - self._success = value - - @property - def message(self): - """Message field 'message'.""" - return self._message - - @message.setter - def message(self, value): - if __debug__: - assert \ - isinstance(value, str), \ - "The 'message' field must be of type 'str'" - self._message = value - - -class Metaclass_SetLocalPosition(type): - """Metaclass of service 'SetLocalPosition'.""" - - _TYPE_SUPPORT = None - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.SetLocalPosition') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._TYPE_SUPPORT = module.type_support_srv__srv__set_local_position - - from airsim_interfaces.srv import _set_local_position - if _set_local_position.Metaclass_SetLocalPosition_Request._TYPE_SUPPORT is None: - _set_local_position.Metaclass_SetLocalPosition_Request.__import_type_support__() - if _set_local_position.Metaclass_SetLocalPosition_Response._TYPE_SUPPORT is None: - _set_local_position.Metaclass_SetLocalPosition_Response.__import_type_support__() - - -class SetLocalPosition(metaclass=Metaclass_SetLocalPosition): - from airsim_interfaces.srv._set_local_position import SetLocalPosition_Request as Request - from airsim_interfaces.srv._set_local_position import SetLocalPosition_Response as Response - - def __init__(self): - raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position_s.c deleted file mode 100644 index 4222657983..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_set_local_position_s.c +++ /dev/null @@ -1,325 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:srv/SetLocalPosition.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/srv/detail/set_local_position__struct.h" -#include "airsim_interfaces/srv/detail/set_local_position__functions.h" - -#include "rosidl_runtime_c/string.h" -#include "rosidl_runtime_c/string_functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__set_local_position__request__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[67]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._set_local_position.SetLocalPosition_Request", full_classname_dest, 66) == 0); - } - airsim_interfaces__srv__SetLocalPosition_Request * ros_message = _ros_message; - { // x - PyObject * field = PyObject_GetAttrString(_pymsg, "x"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->x = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // y - PyObject * field = PyObject_GetAttrString(_pymsg, "y"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->y = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // z - PyObject * field = PyObject_GetAttrString(_pymsg, "z"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->z = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // yaw - PyObject * field = PyObject_GetAttrString(_pymsg, "yaw"); - if (!field) { - return false; - } - assert(PyFloat_Check(field)); - ros_message->yaw = PyFloat_AS_DOUBLE(field); - Py_DECREF(field); - } - { // vehicle_name - PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_name"); - if (!field) { - return false; - } - assert(PyUnicode_Check(field)); - PyObject * encoded_field = PyUnicode_AsUTF8String(field); - if (!encoded_field) { - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String__assign(&ros_message->vehicle_name, PyBytes_AS_STRING(encoded_field)); - Py_DECREF(encoded_field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__set_local_position__request__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of SetLocalPosition_Request */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._set_local_position"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "SetLocalPosition_Request"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__SetLocalPosition_Request * ros_message = (airsim_interfaces__srv__SetLocalPosition_Request *)raw_ros_message; - { // x - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->x); - { - int rc = PyObject_SetAttrString(_pymessage, "x", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // y - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->y); - { - int rc = PyObject_SetAttrString(_pymessage, "y", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // z - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->z); - { - int rc = PyObject_SetAttrString(_pymessage, "z", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // yaw - PyObject * field = NULL; - field = PyFloat_FromDouble(ros_message->yaw); - { - int rc = PyObject_SetAttrString(_pymessage, "yaw", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // vehicle_name - PyObject * field = NULL; - field = PyUnicode_DecodeUTF8( - ros_message->vehicle_name.data, - strlen(ros_message->vehicle_name.data), - "strict"); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "vehicle_name", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} - -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -// already included above -// #include -// already included above -// #include -// already included above -// #include "numpy/ndarrayobject.h" -// already included above -// #include "rosidl_runtime_c/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_local_position__struct.h" -// already included above -// #include "airsim_interfaces/srv/detail/set_local_position__functions.h" - -// already included above -// #include "rosidl_runtime_c/string.h" -// already included above -// #include "rosidl_runtime_c/string_functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__set_local_position__response__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[68]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._set_local_position.SetLocalPosition_Response", full_classname_dest, 67) == 0); - } - airsim_interfaces__srv__SetLocalPosition_Response * ros_message = _ros_message; - { // success - PyObject * field = PyObject_GetAttrString(_pymsg, "success"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->success = (Py_True == field); - Py_DECREF(field); - } - { // message - PyObject * field = PyObject_GetAttrString(_pymsg, "message"); - if (!field) { - return false; - } - assert(PyUnicode_Check(field)); - PyObject * encoded_field = PyUnicode_AsUTF8String(field); - if (!encoded_field) { - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String__assign(&ros_message->message, PyBytes_AS_STRING(encoded_field)); - Py_DECREF(encoded_field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__set_local_position__response__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of SetLocalPosition_Response */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._set_local_position"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "SetLocalPosition_Response"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__SetLocalPosition_Response * ros_message = (airsim_interfaces__srv__SetLocalPosition_Response *)raw_ros_message; - { // success - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->success ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "success", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // message - PyObject * field = NULL; - field = PyUnicode_DecodeUTF8( - ros_message->message.data, - strlen(ros_message->message.data), - "strict"); - if (!field) { - return NULL; - } - { - int rc = PyObject_SetAttrString(_pymessage, "message", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff.py deleted file mode 100644 index acb79b9633..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff.py +++ /dev/null @@ -1,278 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:srv/Takeoff.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_Takeoff_Request(type): - """Metaclass of message 'Takeoff_Request'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.Takeoff_Request') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__takeoff__request - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__takeoff__request - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__takeoff__request - cls._TYPE_SUPPORT = module.type_support_msg__srv__takeoff__request - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__takeoff__request - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class Takeoff_Request(metaclass=Metaclass_Takeoff_Request): - """Message class 'Takeoff_Request'.""" - - __slots__ = [ - '_wait_on_last_task', - ] - - _fields_and_field_types = { - 'wait_on_last_task': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.wait_on_last_task = kwargs.get('wait_on_last_task', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.wait_on_last_task != other.wait_on_last_task: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def wait_on_last_task(self): - """Message field 'wait_on_last_task'.""" - return self._wait_on_last_task - - @wait_on_last_task.setter - def wait_on_last_task(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'wait_on_last_task' field must be of type 'bool'" - self._wait_on_last_task = value - - -# Import statements for member types - -# already imported above -# import rosidl_parser.definition - - -class Metaclass_Takeoff_Response(type): - """Metaclass of message 'Takeoff_Response'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.Takeoff_Response') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__takeoff__response - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__takeoff__response - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__takeoff__response - cls._TYPE_SUPPORT = module.type_support_msg__srv__takeoff__response - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__takeoff__response - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class Takeoff_Response(metaclass=Metaclass_Takeoff_Response): - """Message class 'Takeoff_Response'.""" - - __slots__ = [ - '_success', - ] - - _fields_and_field_types = { - 'success': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.success = kwargs.get('success', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.success != other.success: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def success(self): - """Message field 'success'.""" - return self._success - - @success.setter - def success(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'success' field must be of type 'bool'" - self._success = value - - -class Metaclass_Takeoff(type): - """Metaclass of service 'Takeoff'.""" - - _TYPE_SUPPORT = None - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.Takeoff') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._TYPE_SUPPORT = module.type_support_srv__srv__takeoff - - from airsim_interfaces.srv import _takeoff - if _takeoff.Metaclass_Takeoff_Request._TYPE_SUPPORT is None: - _takeoff.Metaclass_Takeoff_Request.__import_type_support__() - if _takeoff.Metaclass_Takeoff_Response._TYPE_SUPPORT is None: - _takeoff.Metaclass_Takeoff_Response.__import_type_support__() - - -class Takeoff(metaclass=Metaclass_Takeoff): - from airsim_interfaces.srv._takeoff import Takeoff_Request as Request - from airsim_interfaces.srv._takeoff import Takeoff_Response as Response - - def __init__(self): - raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group.py b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group.py deleted file mode 100644 index 5784f25228..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group.py +++ /dev/null @@ -1,307 +0,0 @@ -# generated from rosidl_generator_py/resource/_idl.py.em -# with input from airsim_interfaces:srv/TakeoffGroup.idl -# generated code does not contain a copyright notice - - -# Import statements for member types - -import rosidl_parser.definition # noqa: E402, I100 - - -class Metaclass_TakeoffGroup_Request(type): - """Metaclass of message 'TakeoffGroup_Request'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.TakeoffGroup_Request') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__takeoff_group__request - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__takeoff_group__request - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__takeoff_group__request - cls._TYPE_SUPPORT = module.type_support_msg__srv__takeoff_group__request - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__takeoff_group__request - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class TakeoffGroup_Request(metaclass=Metaclass_TakeoffGroup_Request): - """Message class 'TakeoffGroup_Request'.""" - - __slots__ = [ - '_vehicle_names', - '_wait_on_last_task', - ] - - _fields_and_field_types = { - 'vehicle_names': 'sequence', - 'wait_on_last_task': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.UnboundedString()), # noqa: E501 - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.vehicle_names = kwargs.get('vehicle_names', []) - self.wait_on_last_task = kwargs.get('wait_on_last_task', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.vehicle_names != other.vehicle_names: - return False - if self.wait_on_last_task != other.wait_on_last_task: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def vehicle_names(self): - """Message field 'vehicle_names'.""" - return self._vehicle_names - - @vehicle_names.setter - def vehicle_names(self, value): - if __debug__: - from collections.abc import Sequence - from collections.abc import Set - from collections import UserList - from collections import UserString - assert \ - ((isinstance(value, Sequence) or - isinstance(value, Set) or - isinstance(value, UserList)) and - not isinstance(value, str) and - not isinstance(value, UserString) and - all(isinstance(v, str) for v in value) and - True), \ - "The 'vehicle_names' field must be a set or sequence and each value of type 'str'" - self._vehicle_names = value - - @property - def wait_on_last_task(self): - """Message field 'wait_on_last_task'.""" - return self._wait_on_last_task - - @wait_on_last_task.setter - def wait_on_last_task(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'wait_on_last_task' field must be of type 'bool'" - self._wait_on_last_task = value - - -# Import statements for member types - -# already imported above -# import rosidl_parser.definition - - -class Metaclass_TakeoffGroup_Response(type): - """Metaclass of message 'TakeoffGroup_Response'.""" - - _CREATE_ROS_MESSAGE = None - _CONVERT_FROM_PY = None - _CONVERT_TO_PY = None - _DESTROY_ROS_MESSAGE = None - _TYPE_SUPPORT = None - - __constants = { - } - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.TakeoffGroup_Response') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__srv__takeoff_group__response - cls._CONVERT_FROM_PY = module.convert_from_py_msg__srv__takeoff_group__response - cls._CONVERT_TO_PY = module.convert_to_py_msg__srv__takeoff_group__response - cls._TYPE_SUPPORT = module.type_support_msg__srv__takeoff_group__response - cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__srv__takeoff_group__response - - @classmethod - def __prepare__(cls, name, bases, **kwargs): - # list constant names here so that they appear in the help text of - # the message class under "Data and other attributes defined here:" - # as well as populate each message instance - return { - } - - -class TakeoffGroup_Response(metaclass=Metaclass_TakeoffGroup_Response): - """Message class 'TakeoffGroup_Response'.""" - - __slots__ = [ - '_success', - ] - - _fields_and_field_types = { - 'success': 'boolean', - } - - SLOT_TYPES = ( - rosidl_parser.definition.BasicType('boolean'), # noqa: E501 - ) - - def __init__(self, **kwargs): - assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ - 'Invalid arguments passed to constructor: %s' % \ - ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) - self.success = kwargs.get('success', bool()) - - def __repr__(self): - typename = self.__class__.__module__.split('.') - typename.pop() - typename.append(self.__class__.__name__) - args = [] - for s, t in zip(self.__slots__, self.SLOT_TYPES): - field = getattr(self, s) - fieldstr = repr(field) - # We use Python array type for fields that can be directly stored - # in them, and "normal" sequences for everything else. If it is - # a type that we store in an array, strip off the 'array' portion. - if ( - isinstance(t, rosidl_parser.definition.AbstractSequence) and - isinstance(t.value_type, rosidl_parser.definition.BasicType) and - t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] - ): - if len(field) == 0: - fieldstr = '[]' - else: - assert fieldstr.startswith('array(') - prefix = "array('X', " - suffix = ')' - fieldstr = fieldstr[len(prefix):-len(suffix)] - args.append(s[1:] + '=' + fieldstr) - return '%s(%s)' % ('.'.join(typename), ', '.join(args)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if self.success != other.success: - return False - return True - - @classmethod - def get_fields_and_field_types(cls): - from copy import copy - return copy(cls._fields_and_field_types) - - @property - def success(self): - """Message field 'success'.""" - return self._success - - @success.setter - def success(self, value): - if __debug__: - assert \ - isinstance(value, bool), \ - "The 'success' field must be of type 'bool'" - self._success = value - - -class Metaclass_TakeoffGroup(type): - """Metaclass of service 'TakeoffGroup'.""" - - _TYPE_SUPPORT = None - - @classmethod - def __import_type_support__(cls): - try: - from rosidl_generator_py import import_type_support - module = import_type_support('airsim_interfaces') - except ImportError: - import logging - import traceback - logger = logging.getLogger( - 'airsim_interfaces.srv.TakeoffGroup') - logger.debug( - 'Failed to import needed modules for type support:\n' + - traceback.format_exc()) - else: - cls._TYPE_SUPPORT = module.type_support_srv__srv__takeoff_group - - from airsim_interfaces.srv import _takeoff_group - if _takeoff_group.Metaclass_TakeoffGroup_Request._TYPE_SUPPORT is None: - _takeoff_group.Metaclass_TakeoffGroup_Request.__import_type_support__() - if _takeoff_group.Metaclass_TakeoffGroup_Response._TYPE_SUPPORT is None: - _takeoff_group.Metaclass_TakeoffGroup_Response.__import_type_support__() - - -class TakeoffGroup(metaclass=Metaclass_TakeoffGroup): - from airsim_interfaces.srv._takeoff_group import TakeoffGroup_Request as Request - from airsim_interfaces.srv._takeoff_group import TakeoffGroup_Response as Response - - def __init__(self): - raise NotImplementedError('Service classes can not be instantiated') diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group_s.c deleted file mode 100644 index 414283d5de..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_group_s.c +++ /dev/null @@ -1,267 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:srv/TakeoffGroup.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/srv/detail/takeoff_group__struct.h" -#include "airsim_interfaces/srv/detail/takeoff_group__functions.h" - -#include "rosidl_runtime_c/primitives_sequence.h" -#include "rosidl_runtime_c/primitives_sequence_functions.h" -#include "rosidl_runtime_c/string.h" -#include "rosidl_runtime_c/string_functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__takeoff_group__request__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[58]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._takeoff_group.TakeoffGroup_Request", full_classname_dest, 57) == 0); - } - airsim_interfaces__srv__TakeoffGroup_Request * ros_message = _ros_message; - { // vehicle_names - PyObject * field = PyObject_GetAttrString(_pymsg, "vehicle_names"); - if (!field) { - return false; - } - PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'vehicle_names'"); - if (!seq_field) { - Py_DECREF(field); - return false; - } - Py_ssize_t size = PySequence_Size(field); - if (-1 == size) { - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - if (!rosidl_runtime_c__String__Sequence__init(&(ros_message->vehicle_names), size)) { - PyErr_SetString(PyExc_RuntimeError, "unable to create String__Sequence ros_message"); - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String * dest = ros_message->vehicle_names.data; - for (Py_ssize_t i = 0; i < size; ++i) { - PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); - if (!item) { - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - assert(PyUnicode_Check(item)); - PyObject * encoded_item = PyUnicode_AsUTF8String(item); - if (!encoded_item) { - Py_DECREF(seq_field); - Py_DECREF(field); - return false; - } - rosidl_runtime_c__String__assign(&dest[i], PyBytes_AS_STRING(encoded_item)); - Py_DECREF(encoded_item); - } - Py_DECREF(seq_field); - Py_DECREF(field); - } - { // wait_on_last_task - PyObject * field = PyObject_GetAttrString(_pymsg, "wait_on_last_task"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->wait_on_last_task = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__takeoff_group__request__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of TakeoffGroup_Request */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._takeoff_group"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "TakeoffGroup_Request"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__TakeoffGroup_Request * ros_message = (airsim_interfaces__srv__TakeoffGroup_Request *)raw_ros_message; - { // vehicle_names - PyObject * field = NULL; - size_t size = ros_message->vehicle_names.size; - rosidl_runtime_c__String * src = ros_message->vehicle_names.data; - field = PyList_New(size); - if (!field) { - return NULL; - } - for (size_t i = 0; i < size; ++i) { - PyObject * decoded_item = PyUnicode_DecodeUTF8(src[i].data, strlen(src[i].data), "strict"); - if (!decoded_item) { - return NULL; - } - int rc = PyList_SetItem(field, i, decoded_item); - (void)rc; - assert(rc == 0); - } - assert(PySequence_Check(field)); - { - int rc = PyObject_SetAttrString(_pymessage, "vehicle_names", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - { // wait_on_last_task - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->wait_on_last_task ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "wait_on_last_task", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} - -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -// already included above -// #include -// already included above -// #include -// already included above -// #include "numpy/ndarrayobject.h" -// already included above -// #include "rosidl_runtime_c/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff_group__struct.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff_group__functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__takeoff_group__response__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[59]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._takeoff_group.TakeoffGroup_Response", full_classname_dest, 58) == 0); - } - airsim_interfaces__srv__TakeoffGroup_Response * ros_message = _ros_message; - { // success - PyObject * field = PyObject_GetAttrString(_pymsg, "success"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->success = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__takeoff_group__response__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of TakeoffGroup_Response */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._takeoff_group"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "TakeoffGroup_Response"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__TakeoffGroup_Response * ros_message = (airsim_interfaces__srv__TakeoffGroup_Response *)raw_ros_message; - { // success - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->success ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "success", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_s.c b/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_s.c deleted file mode 100644 index 8058a8b69c..0000000000 --- a/ros2/install/airsim_interfaces/lib/python3.8/site-packages/airsim_interfaces/srv/_takeoff_s.c +++ /dev/null @@ -1,193 +0,0 @@ -// generated from rosidl_generator_py/resource/_idl_support.c.em -// with input from airsim_interfaces:srv/Takeoff.idl -// generated code does not contain a copyright notice -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include -#include -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-function" -#endif -#include "numpy/ndarrayobject.h" -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -#include "rosidl_runtime_c/visibility_control.h" -#include "airsim_interfaces/srv/detail/takeoff__struct.h" -#include "airsim_interfaces/srv/detail/takeoff__functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__takeoff__request__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[47]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._takeoff.Takeoff_Request", full_classname_dest, 46) == 0); - } - airsim_interfaces__srv__Takeoff_Request * ros_message = _ros_message; - { // wait_on_last_task - PyObject * field = PyObject_GetAttrString(_pymsg, "wait_on_last_task"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->wait_on_last_task = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__takeoff__request__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of Takeoff_Request */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._takeoff"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Takeoff_Request"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__Takeoff_Request * ros_message = (airsim_interfaces__srv__Takeoff_Request *)raw_ros_message; - { // wait_on_last_task - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->wait_on_last_task ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "wait_on_last_task", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} - -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -// already included above -// #include -// already included above -// #include -// already included above -// #include "numpy/ndarrayobject.h" -// already included above -// #include "rosidl_runtime_c/visibility_control.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff__struct.h" -// already included above -// #include "airsim_interfaces/srv/detail/takeoff__functions.h" - - -ROSIDL_GENERATOR_C_EXPORT -bool airsim_interfaces__srv__takeoff__response__convert_from_py(PyObject * _pymsg, void * _ros_message) -{ - // check that the passed message is of the expected Python class - { - char full_classname_dest[48]; - { - char * class_name = NULL; - char * module_name = NULL; - { - PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); - if (class_attr) { - PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); - if (name_attr) { - class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); - Py_DECREF(name_attr); - } - PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); - if (module_attr) { - module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); - Py_DECREF(module_attr); - } - Py_DECREF(class_attr); - } - } - if (!class_name || !module_name) { - return false; - } - snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); - } - assert(strncmp("airsim_interfaces.srv._takeoff.Takeoff_Response", full_classname_dest, 47) == 0); - } - airsim_interfaces__srv__Takeoff_Response * ros_message = _ros_message; - { // success - PyObject * field = PyObject_GetAttrString(_pymsg, "success"); - if (!field) { - return false; - } - assert(PyBool_Check(field)); - ros_message->success = (Py_True == field); - Py_DECREF(field); - } - - return true; -} - -ROSIDL_GENERATOR_C_EXPORT -PyObject * airsim_interfaces__srv__takeoff__response__convert_to_py(void * raw_ros_message) -{ - /* NOTE(esteve): Call constructor of Takeoff_Response */ - PyObject * _pymessage = NULL; - { - PyObject * pymessage_module = PyImport_ImportModule("airsim_interfaces.srv._takeoff"); - assert(pymessage_module); - PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Takeoff_Response"); - assert(pymessage_class); - Py_DECREF(pymessage_module); - _pymessage = PyObject_CallObject(pymessage_class, NULL); - Py_DECREF(pymessage_class); - if (!_pymessage) { - return NULL; - } - } - airsim_interfaces__srv__Takeoff_Response * ros_message = (airsim_interfaces__srv__Takeoff_Response *)raw_ros_message; - { // success - PyObject * field = NULL; - field = PyBool_FromLong(ros_message->success ? 1 : 0); - { - int rc = PyObject_SetAttrString(_pymessage, "success", field); - Py_DECREF(field); - if (rc) { - return NULL; - } - } - } - - // ownership of _pymessage is transferred to the caller - return _pymessage; -} diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig-version.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig-version.cmake deleted file mode 100644 index dfe07300c3..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig-version.cmake +++ /dev/null @@ -1,14 +0,0 @@ -# generated from ament/cmake/core/templates/nameConfig-version.cmake.in -set(PACKAGE_VERSION "0.1.0") - -set(PACKAGE_VERSION_EXACT False) -set(PACKAGE_VERSION_COMPATIBLE False) - -if("${PACKAGE_FIND_VERSION}" VERSION_EQUAL "${PACKAGE_VERSION}") - set(PACKAGE_VERSION_EXACT True) - set(PACKAGE_VERSION_COMPATIBLE True) -endif() - -if("${PACKAGE_FIND_VERSION}" VERSION_LESS "${PACKAGE_VERSION}") - set(PACKAGE_VERSION_COMPATIBLE True) -endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig.cmake deleted file mode 100644 index 15b7f1a82c..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfacesConfig.cmake +++ /dev/null @@ -1,42 +0,0 @@ -# generated from ament/cmake/core/templates/nameConfig.cmake.in - -# prevent multiple inclusion -if(_airsim_interfaces_CONFIG_INCLUDED) - # ensure to keep the found flag the same - if(NOT DEFINED airsim_interfaces_FOUND) - # explicitly set it to FALSE, otherwise CMake will set it to TRUE - set(airsim_interfaces_FOUND FALSE) - elseif(NOT airsim_interfaces_FOUND) - # use separate condition to avoid uninitialized variable warning - set(airsim_interfaces_FOUND FALSE) - endif() - return() -endif() -set(_airsim_interfaces_CONFIG_INCLUDED TRUE) - -# output package information -if(NOT airsim_interfaces_FIND_QUIETLY) - message(STATUS "Found airsim_interfaces: 0.1.0 (${airsim_interfaces_DIR})") -endif() - -# warn when using a deprecated package -if(NOT "" STREQUAL "") - set(_msg "Package 'airsim_interfaces' is deprecated") - # append custom deprecation text if available - if(NOT "" STREQUAL "TRUE") - set(_msg "${_msg} ()") - endif() - # optionally quiet the deprecation message - if(NOT ${airsim_interfaces_DEPRECATED_QUIET}) - message(DEPRECATION "${_msg}") - endif() -endif() - -# flag package as ament-based to distinguish it after being find_package()-ed -set(airsim_interfaces_FOUND_AMENT_PACKAGE TRUE) - -# include all config extra files -set(_extras "rosidl_cmake-extras.cmake;ament_cmake_export_dependencies-extras.cmake;ament_cmake_export_libraries-extras.cmake;ament_cmake_export_targets-extras.cmake;ament_cmake_export_include_directories-extras.cmake;rosidl_cmake_export_typesupport_libraries-extras.cmake;rosidl_cmake_export_typesupport_targets-extras.cmake") -foreach(_extra ${_extras}) - include("${airsim_interfaces_DIR}/${_extra}") -endforeach() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport-noconfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport-noconfig.cmake deleted file mode 100644 index cabcb32647..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport-noconfig.cmake +++ /dev/null @@ -1,19 +0,0 @@ -#---------------------------------------------------------------- -# Generated CMake target import file. -#---------------------------------------------------------------- - -# Commands may need to know the format version. -set(CMAKE_IMPORT_FILE_VERSION 1) - -# Import target "airsim_interfaces::airsim_interfaces__rosidl_generator_c" for configuration "" -set_property(TARGET airsim_interfaces::airsim_interfaces__rosidl_generator_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) -set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_generator_c PROPERTIES - IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_generator_c.so" - IMPORTED_SONAME_NOCONFIG "libairsim_interfaces__rosidl_generator_c.so" - ) - -list(APPEND _IMPORT_CHECK_TARGETS airsim_interfaces::airsim_interfaces__rosidl_generator_c ) -list(APPEND _IMPORT_CHECK_FILES_FOR_airsim_interfaces::airsim_interfaces__rosidl_generator_c "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_generator_c.so" ) - -# Commands beyond this point should not need to know the version. -set(CMAKE_IMPORT_FILE_VERSION) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport.cmake deleted file mode 100644 index e45c7c0526..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cExport.cmake +++ /dev/null @@ -1,99 +0,0 @@ -# Generated by CMake - -if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) - message(FATAL_ERROR "CMake >= 2.6.0 required") -endif() -cmake_policy(PUSH) -cmake_policy(VERSION 2.6) -#---------------------------------------------------------------- -# Generated CMake target import file. -#---------------------------------------------------------------- - -# Commands may need to know the format version. -set(CMAKE_IMPORT_FILE_VERSION 1) - -# Protect against multiple inclusion, which would fail when already imported targets are added once more. -set(_targetsDefined) -set(_targetsNotDefined) -set(_expectedTargets) -foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_generator_c) - list(APPEND _expectedTargets ${_expectedTarget}) - if(NOT TARGET ${_expectedTarget}) - list(APPEND _targetsNotDefined ${_expectedTarget}) - endif() - if(TARGET ${_expectedTarget}) - list(APPEND _targetsDefined ${_expectedTarget}) - endif() -endforeach() -if("${_targetsDefined}" STREQUAL "${_expectedTargets}") - unset(_targetsDefined) - unset(_targetsNotDefined) - unset(_expectedTargets) - set(CMAKE_IMPORT_FILE_VERSION) - cmake_policy(POP) - return() -endif() -if(NOT "${_targetsDefined}" STREQUAL "") - message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") -endif() -unset(_targetsDefined) -unset(_targetsNotDefined) -unset(_expectedTargets) - - -# Compute the installation prefix relative to this file. -get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -if(_IMPORT_PREFIX STREQUAL "/") - set(_IMPORT_PREFIX "") -endif() - -# Create imported target airsim_interfaces::airsim_interfaces__rosidl_generator_c -add_library(airsim_interfaces::airsim_interfaces__rosidl_generator_c SHARED IMPORTED) - -set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_generator_c PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" - INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_interface::rosidl_typesupport_interface" -) - -if(CMAKE_VERSION VERSION_LESS 2.8.12) - message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") -endif() - -# Load information for each installed configuration. -get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_generator_cExport-*.cmake") -foreach(f ${CONFIG_FILES}) - include(${f}) -endforeach() - -# Cleanup temporary variables. -set(_IMPORT_PREFIX) - -# Loop over all imported files and verify that they actually exist -foreach(target ${_IMPORT_CHECK_TARGETS} ) - foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) - if(NOT EXISTS "${file}" ) - message(FATAL_ERROR "The imported target \"${target}\" references the file - \"${file}\" -but this file does not exist. Possible reasons include: -* The file was deleted, renamed, or moved to another location. -* An install or uninstall procedure did not complete successfully. -* The installation package was faulty and contained - \"${CMAKE_CURRENT_LIST_FILE}\" -but not all the files it references. -") - endif() - endforeach() - unset(_IMPORT_CHECK_FILES_FOR_${target}) -endforeach() -unset(_IMPORT_CHECK_TARGETS) - -# This file does not depend on other imported targets which have -# been exported from the same project but in a separate export set. - -# Commands beyond this point should not need to know the version. -set(CMAKE_IMPORT_FILE_VERSION) -cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cppExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cppExport.cmake deleted file mode 100644 index 6d4d3241f6..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_generator_cppExport.cmake +++ /dev/null @@ -1,99 +0,0 @@ -# Generated by CMake - -if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) - message(FATAL_ERROR "CMake >= 2.6.0 required") -endif() -cmake_policy(PUSH) -cmake_policy(VERSION 2.6) -#---------------------------------------------------------------- -# Generated CMake target import file. -#---------------------------------------------------------------- - -# Commands may need to know the format version. -set(CMAKE_IMPORT_FILE_VERSION 1) - -# Protect against multiple inclusion, which would fail when already imported targets are added once more. -set(_targetsDefined) -set(_targetsNotDefined) -set(_expectedTargets) -foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_generator_cpp) - list(APPEND _expectedTargets ${_expectedTarget}) - if(NOT TARGET ${_expectedTarget}) - list(APPEND _targetsNotDefined ${_expectedTarget}) - endif() - if(TARGET ${_expectedTarget}) - list(APPEND _targetsDefined ${_expectedTarget}) - endif() -endforeach() -if("${_targetsDefined}" STREQUAL "${_expectedTargets}") - unset(_targetsDefined) - unset(_targetsNotDefined) - unset(_expectedTargets) - set(CMAKE_IMPORT_FILE_VERSION) - cmake_policy(POP) - return() -endif() -if(NOT "${_targetsDefined}" STREQUAL "") - message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") -endif() -unset(_targetsDefined) -unset(_targetsNotDefined) -unset(_expectedTargets) - - -# Compute the installation prefix relative to this file. -get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -if(_IMPORT_PREFIX STREQUAL "/") - set(_IMPORT_PREFIX "") -endif() - -# Create imported target airsim_interfaces::airsim_interfaces__rosidl_generator_cpp -add_library(airsim_interfaces::airsim_interfaces__rosidl_generator_cpp INTERFACE IMPORTED) - -set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_generator_cpp PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" - INTERFACE_LINK_LIBRARIES "rosidl_runtime_cpp::rosidl_runtime_cpp" -) - -if(CMAKE_VERSION VERSION_LESS 3.0.0) - message(FATAL_ERROR "This file relies on consumers using CMake 3.0.0 or greater.") -endif() - -# Load information for each installed configuration. -get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_generator_cppExport-*.cmake") -foreach(f ${CONFIG_FILES}) - include(${f}) -endforeach() - -# Cleanup temporary variables. -set(_IMPORT_PREFIX) - -# Loop over all imported files and verify that they actually exist -foreach(target ${_IMPORT_CHECK_TARGETS} ) - foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) - if(NOT EXISTS "${file}" ) - message(FATAL_ERROR "The imported target \"${target}\" references the file - \"${file}\" -but this file does not exist. Possible reasons include: -* The file was deleted, renamed, or moved to another location. -* An install or uninstall procedure did not complete successfully. -* The installation package was faulty and contained - \"${CMAKE_CURRENT_LIST_FILE}\" -but not all the files it references. -") - endif() - endforeach() - unset(_IMPORT_CHECK_FILES_FOR_${target}) -endforeach() -unset(_IMPORT_CHECK_TARGETS) - -# This file does not depend on other imported targets which have -# been exported from the same project but in a separate export set. - -# Commands beyond this point should not need to know the version. -set(CMAKE_IMPORT_FILE_VERSION) -cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport-noconfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport-noconfig.cmake deleted file mode 100644 index 9cd49237c7..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport-noconfig.cmake +++ /dev/null @@ -1,19 +0,0 @@ -#---------------------------------------------------------------- -# Generated CMake target import file. -#---------------------------------------------------------------- - -# Commands may need to know the format version. -set(CMAKE_IMPORT_FILE_VERSION 1) - -# Import target "airsim_interfaces::airsim_interfaces__rosidl_typesupport_c" for configuration "" -set_property(TARGET airsim_interfaces::airsim_interfaces__rosidl_typesupport_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) -set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_c PROPERTIES - IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_c.so" - IMPORTED_SONAME_NOCONFIG "libairsim_interfaces__rosidl_typesupport_c.so" - ) - -list(APPEND _IMPORT_CHECK_TARGETS airsim_interfaces::airsim_interfaces__rosidl_typesupport_c ) -list(APPEND _IMPORT_CHECK_FILES_FOR_airsim_interfaces::airsim_interfaces__rosidl_typesupport_c "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_c.so" ) - -# Commands beyond this point should not need to know the version. -set(CMAKE_IMPORT_FILE_VERSION) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport.cmake deleted file mode 100644 index c14887633f..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cExport.cmake +++ /dev/null @@ -1,99 +0,0 @@ -# Generated by CMake - -if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) - message(FATAL_ERROR "CMake >= 2.6.0 required") -endif() -cmake_policy(PUSH) -cmake_policy(VERSION 2.6) -#---------------------------------------------------------------- -# Generated CMake target import file. -#---------------------------------------------------------------- - -# Commands may need to know the format version. -set(CMAKE_IMPORT_FILE_VERSION 1) - -# Protect against multiple inclusion, which would fail when already imported targets are added once more. -set(_targetsDefined) -set(_targetsNotDefined) -set(_expectedTargets) -foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_typesupport_c) - list(APPEND _expectedTargets ${_expectedTarget}) - if(NOT TARGET ${_expectedTarget}) - list(APPEND _targetsNotDefined ${_expectedTarget}) - endif() - if(TARGET ${_expectedTarget}) - list(APPEND _targetsDefined ${_expectedTarget}) - endif() -endforeach() -if("${_targetsDefined}" STREQUAL "${_expectedTargets}") - unset(_targetsDefined) - unset(_targetsNotDefined) - unset(_expectedTargets) - set(CMAKE_IMPORT_FILE_VERSION) - cmake_policy(POP) - return() -endif() -if(NOT "${_targetsDefined}" STREQUAL "") - message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") -endif() -unset(_targetsDefined) -unset(_targetsNotDefined) -unset(_expectedTargets) - - -# Compute the installation prefix relative to this file. -get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -if(_IMPORT_PREFIX STREQUAL "/") - set(_IMPORT_PREFIX "") -endif() - -# Create imported target airsim_interfaces::airsim_interfaces__rosidl_typesupport_c -add_library(airsim_interfaces::airsim_interfaces__rosidl_typesupport_c SHARED IMPORTED) - -set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_c PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" - INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_c::rosidl_typesupport_c;rosidl_typesupport_interface::rosidl_typesupport_interface" -) - -if(CMAKE_VERSION VERSION_LESS 2.8.12) - message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") -endif() - -# Load information for each installed configuration. -get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_typesupport_cExport-*.cmake") -foreach(f ${CONFIG_FILES}) - include(${f}) -endforeach() - -# Cleanup temporary variables. -set(_IMPORT_PREFIX) - -# Loop over all imported files and verify that they actually exist -foreach(target ${_IMPORT_CHECK_TARGETS} ) - foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) - if(NOT EXISTS "${file}" ) - message(FATAL_ERROR "The imported target \"${target}\" references the file - \"${file}\" -but this file does not exist. Possible reasons include: -* The file was deleted, renamed, or moved to another location. -* An install or uninstall procedure did not complete successfully. -* The installation package was faulty and contained - \"${CMAKE_CURRENT_LIST_FILE}\" -but not all the files it references. -") - endif() - endforeach() - unset(_IMPORT_CHECK_FILES_FOR_${target}) -endforeach() -unset(_IMPORT_CHECK_TARGETS) - -# This file does not depend on other imported targets which have -# been exported from the same project but in a separate export set. - -# Commands beyond this point should not need to know the version. -set(CMAKE_IMPORT_FILE_VERSION) -cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport-noconfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport-noconfig.cmake deleted file mode 100644 index 9bae46e97f..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport-noconfig.cmake +++ /dev/null @@ -1,19 +0,0 @@ -#---------------------------------------------------------------- -# Generated CMake target import file. -#---------------------------------------------------------------- - -# Commands may need to know the format version. -set(CMAKE_IMPORT_FILE_VERSION 1) - -# Import target "airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp" for configuration "" -set_property(TARGET airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) -set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp PROPERTIES - IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_cpp.so" - IMPORTED_SONAME_NOCONFIG "libairsim_interfaces__rosidl_typesupport_cpp.so" - ) - -list(APPEND _IMPORT_CHECK_TARGETS airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp ) -list(APPEND _IMPORT_CHECK_FILES_FOR_airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_cpp.so" ) - -# Commands beyond this point should not need to know the version. -set(CMAKE_IMPORT_FILE_VERSION) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport.cmake deleted file mode 100644 index bf01b3aae4..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_cppExport.cmake +++ /dev/null @@ -1,99 +0,0 @@ -# Generated by CMake - -if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) - message(FATAL_ERROR "CMake >= 2.6.0 required") -endif() -cmake_policy(PUSH) -cmake_policy(VERSION 2.6) -#---------------------------------------------------------------- -# Generated CMake target import file. -#---------------------------------------------------------------- - -# Commands may need to know the format version. -set(CMAKE_IMPORT_FILE_VERSION 1) - -# Protect against multiple inclusion, which would fail when already imported targets are added once more. -set(_targetsDefined) -set(_targetsNotDefined) -set(_expectedTargets) -foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp) - list(APPEND _expectedTargets ${_expectedTarget}) - if(NOT TARGET ${_expectedTarget}) - list(APPEND _targetsNotDefined ${_expectedTarget}) - endif() - if(TARGET ${_expectedTarget}) - list(APPEND _targetsDefined ${_expectedTarget}) - endif() -endforeach() -if("${_targetsDefined}" STREQUAL "${_expectedTargets}") - unset(_targetsDefined) - unset(_targetsNotDefined) - unset(_expectedTargets) - set(CMAKE_IMPORT_FILE_VERSION) - cmake_policy(POP) - return() -endif() -if(NOT "${_targetsDefined}" STREQUAL "") - message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") -endif() -unset(_targetsDefined) -unset(_targetsNotDefined) -unset(_expectedTargets) - - -# Compute the installation prefix relative to this file. -get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -if(_IMPORT_PREFIX STREQUAL "/") - set(_IMPORT_PREFIX "") -endif() - -# Create imported target airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp -add_library(airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp SHARED IMPORTED) - -set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_cpp PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" - INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_runtime_cpp::rosidl_runtime_cpp;rosidl_typesupport_cpp::rosidl_typesupport_cpp;rosidl_typesupport_interface::rosidl_typesupport_interface" -) - -if(CMAKE_VERSION VERSION_LESS 2.8.12) - message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") -endif() - -# Load information for each installed configuration. -get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_typesupport_cppExport-*.cmake") -foreach(f ${CONFIG_FILES}) - include(${f}) -endforeach() - -# Cleanup temporary variables. -set(_IMPORT_PREFIX) - -# Loop over all imported files and verify that they actually exist -foreach(target ${_IMPORT_CHECK_TARGETS} ) - foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) - if(NOT EXISTS "${file}" ) - message(FATAL_ERROR "The imported target \"${target}\" references the file - \"${file}\" -but this file does not exist. Possible reasons include: -* The file was deleted, renamed, or moved to another location. -* An install or uninstall procedure did not complete successfully. -* The installation package was faulty and contained - \"${CMAKE_CURRENT_LIST_FILE}\" -but not all the files it references. -") - endif() - endforeach() - unset(_IMPORT_CHECK_FILES_FOR_${target}) -endforeach() -unset(_IMPORT_CHECK_TARGETS) - -# This file does not depend on other imported targets which have -# been exported from the same project but in a separate export set. - -# Commands beyond this point should not need to know the version. -set(CMAKE_IMPORT_FILE_VERSION) -cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport-noconfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport-noconfig.cmake deleted file mode 100644 index 3e765c0dd8..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport-noconfig.cmake +++ /dev/null @@ -1,19 +0,0 @@ -#---------------------------------------------------------------- -# Generated CMake target import file. -#---------------------------------------------------------------- - -# Commands may need to know the format version. -set(CMAKE_IMPORT_FILE_VERSION 1) - -# Import target "airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c" for configuration "" -set_property(TARGET airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) -set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c PROPERTIES - IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_introspection_c.so" - IMPORTED_SONAME_NOCONFIG "libairsim_interfaces__rosidl_typesupport_introspection_c.so" - ) - -list(APPEND _IMPORT_CHECK_TARGETS airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c ) -list(APPEND _IMPORT_CHECK_FILES_FOR_airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_introspection_c.so" ) - -# Commands beyond this point should not need to know the version. -set(CMAKE_IMPORT_FILE_VERSION) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport.cmake deleted file mode 100644 index 5ee2665245..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cExport.cmake +++ /dev/null @@ -1,114 +0,0 @@ -# Generated by CMake - -if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) - message(FATAL_ERROR "CMake >= 2.6.0 required") -endif() -cmake_policy(PUSH) -cmake_policy(VERSION 2.6) -#---------------------------------------------------------------- -# Generated CMake target import file. -#---------------------------------------------------------------- - -# Commands may need to know the format version. -set(CMAKE_IMPORT_FILE_VERSION 1) - -# Protect against multiple inclusion, which would fail when already imported targets are added once more. -set(_targetsDefined) -set(_targetsNotDefined) -set(_expectedTargets) -foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c) - list(APPEND _expectedTargets ${_expectedTarget}) - if(NOT TARGET ${_expectedTarget}) - list(APPEND _targetsNotDefined ${_expectedTarget}) - endif() - if(TARGET ${_expectedTarget}) - list(APPEND _targetsDefined ${_expectedTarget}) - endif() -endforeach() -if("${_targetsDefined}" STREQUAL "${_expectedTargets}") - unset(_targetsDefined) - unset(_targetsNotDefined) - unset(_expectedTargets) - set(CMAKE_IMPORT_FILE_VERSION) - cmake_policy(POP) - return() -endif() -if(NOT "${_targetsDefined}" STREQUAL "") - message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") -endif() -unset(_targetsDefined) -unset(_targetsNotDefined) -unset(_expectedTargets) - - -# Compute the installation prefix relative to this file. -get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -if(_IMPORT_PREFIX STREQUAL "/") - set(_IMPORT_PREFIX "") -endif() - -# Create imported target airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c -add_library(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c SHARED IMPORTED) - -set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_c PROPERTIES - INTERFACE_LINK_LIBRARIES "airsim_interfaces::airsim_interfaces__rosidl_generator_c;rosidl_typesupport_introspection_c::rosidl_typesupport_introspection_c" -) - -if(CMAKE_VERSION VERSION_LESS 2.8.12) - message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") -endif() - -# Load information for each installed configuration. -get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_typesupport_introspection_cExport-*.cmake") -foreach(f ${CONFIG_FILES}) - include(${f}) -endforeach() - -# Cleanup temporary variables. -set(_IMPORT_PREFIX) - -# Loop over all imported files and verify that they actually exist -foreach(target ${_IMPORT_CHECK_TARGETS} ) - foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) - if(NOT EXISTS "${file}" ) - message(FATAL_ERROR "The imported target \"${target}\" references the file - \"${file}\" -but this file does not exist. Possible reasons include: -* The file was deleted, renamed, or moved to another location. -* An install or uninstall procedure did not complete successfully. -* The installation package was faulty and contained - \"${CMAKE_CURRENT_LIST_FILE}\" -but not all the files it references. -") - endif() - endforeach() - unset(_IMPORT_CHECK_FILES_FOR_${target}) -endforeach() -unset(_IMPORT_CHECK_TARGETS) - -# Make sure the targets which have been exported in some other -# export set exist. -unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) -foreach(_target "airsim_interfaces::airsim_interfaces__rosidl_generator_c" ) - if(NOT TARGET "${_target}" ) - set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}") - endif() -endforeach() - -if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) - if(CMAKE_FIND_PACKAGE_NAME) - set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) - set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}") - else() - message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}") - endif() -endif() -unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) - -# Commands beyond this point should not need to know the version. -set(CMAKE_IMPORT_FILE_VERSION) -cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport-noconfig.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport-noconfig.cmake deleted file mode 100644 index 8424f4c202..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport-noconfig.cmake +++ /dev/null @@ -1,19 +0,0 @@ -#---------------------------------------------------------------- -# Generated CMake target import file. -#---------------------------------------------------------------- - -# Commands may need to know the format version. -set(CMAKE_IMPORT_FILE_VERSION 1) - -# Import target "airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp" for configuration "" -set_property(TARGET airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) -set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp PROPERTIES - IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_introspection_cpp.so" - IMPORTED_SONAME_NOCONFIG "libairsim_interfaces__rosidl_typesupport_introspection_cpp.so" - ) - -list(APPEND _IMPORT_CHECK_TARGETS airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp ) -list(APPEND _IMPORT_CHECK_FILES_FOR_airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp "${_IMPORT_PREFIX}/lib/libairsim_interfaces__rosidl_typesupport_introspection_cpp.so" ) - -# Commands beyond this point should not need to know the version. -set(CMAKE_IMPORT_FILE_VERSION) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport.cmake deleted file mode 100644 index 64a6c051c2..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/airsim_interfaces__rosidl_typesupport_introspection_cppExport.cmake +++ /dev/null @@ -1,98 +0,0 @@ -# Generated by CMake - -if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) - message(FATAL_ERROR "CMake >= 2.6.0 required") -endif() -cmake_policy(PUSH) -cmake_policy(VERSION 2.6) -#---------------------------------------------------------------- -# Generated CMake target import file. -#---------------------------------------------------------------- - -# Commands may need to know the format version. -set(CMAKE_IMPORT_FILE_VERSION 1) - -# Protect against multiple inclusion, which would fail when already imported targets are added once more. -set(_targetsDefined) -set(_targetsNotDefined) -set(_expectedTargets) -foreach(_expectedTarget airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp) - list(APPEND _expectedTargets ${_expectedTarget}) - if(NOT TARGET ${_expectedTarget}) - list(APPEND _targetsNotDefined ${_expectedTarget}) - endif() - if(TARGET ${_expectedTarget}) - list(APPEND _targetsDefined ${_expectedTarget}) - endif() -endforeach() -if("${_targetsDefined}" STREQUAL "${_expectedTargets}") - unset(_targetsDefined) - unset(_targetsNotDefined) - unset(_expectedTargets) - set(CMAKE_IMPORT_FILE_VERSION) - cmake_policy(POP) - return() -endif() -if(NOT "${_targetsDefined}" STREQUAL "") - message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") -endif() -unset(_targetsDefined) -unset(_targetsNotDefined) -unset(_expectedTargets) - - -# Compute the installation prefix relative to this file. -get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -if(_IMPORT_PREFIX STREQUAL "/") - set(_IMPORT_PREFIX "") -endif() - -# Create imported target airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp -add_library(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp SHARED IMPORTED) - -set_target_properties(airsim_interfaces::airsim_interfaces__rosidl_typesupport_introspection_cpp PROPERTIES - INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_interface::rosidl_typesupport_interface;rosidl_typesupport_introspection_cpp::rosidl_typesupport_introspection_cpp" -) - -if(CMAKE_VERSION VERSION_LESS 2.8.12) - message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") -endif() - -# Load information for each installed configuration. -get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -file(GLOB CONFIG_FILES "${_DIR}/airsim_interfaces__rosidl_typesupport_introspection_cppExport-*.cmake") -foreach(f ${CONFIG_FILES}) - include(${f}) -endforeach() - -# Cleanup temporary variables. -set(_IMPORT_PREFIX) - -# Loop over all imported files and verify that they actually exist -foreach(target ${_IMPORT_CHECK_TARGETS} ) - foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) - if(NOT EXISTS "${file}" ) - message(FATAL_ERROR "The imported target \"${target}\" references the file - \"${file}\" -but this file does not exist. Possible reasons include: -* The file was deleted, renamed, or moved to another location. -* An install or uninstall procedure did not complete successfully. -* The installation package was faulty and contained - \"${CMAKE_CURRENT_LIST_FILE}\" -but not all the files it references. -") - endif() - endforeach() - unset(_IMPORT_CHECK_FILES_FOR_${target}) -endforeach() -unset(_IMPORT_CHECK_TARGETS) - -# This file does not depend on other imported targets which have -# been exported from the same project but in a separate export set. - -# Commands beyond this point should not need to know the version. -set(CMAKE_IMPORT_FILE_VERSION) -cmake_policy(POP) diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake deleted file mode 100644 index 37530a86af..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake +++ /dev/null @@ -1,80 +0,0 @@ -# generated from ament_cmake_export_dependencies/cmake/ament_cmake_export_dependencies-extras.cmake.in - -set(_exported_dependencies "rosidl_runtime_c;rosidl_typesupport_interface;rosidl_default_runtime") - -find_package(ament_cmake_libraries QUIET REQUIRED) - -# find_package() all dependencies -# and append their DEFINITIONS INCLUDE_DIRS, LIBRARIES, and LINK_FLAGS -# variables to airsim_interfaces_DEFINITIONS, airsim_interfaces_INCLUDE_DIRS, -# airsim_interfaces_LIBRARIES, and airsim_interfaces_LINK_FLAGS. -# Additionally collect the direct dependency names in -# airsim_interfaces_DEPENDENCIES as well as the recursive dependency names -# in airsim_interfaces_RECURSIVE_DEPENDENCIES. -if(NOT _exported_dependencies STREQUAL "") - find_package(ament_cmake_core QUIET REQUIRED) - set(airsim_interfaces_DEPENDENCIES ${_exported_dependencies}) - set(airsim_interfaces_RECURSIVE_DEPENDENCIES ${_exported_dependencies}) - set(_libraries) - foreach(_dep ${_exported_dependencies}) - if(NOT ${_dep}_FOUND) - find_package("${_dep}" QUIET REQUIRED) - endif() - # if a package provides modern CMake interface targets use them - # exclusively assuming the classic CMake variables only exist for - # backward compatibility - set(use_modern_cmake FALSE) - if(NOT "${${_dep}_TARGETS}" STREQUAL "") - foreach(_target ${${_dep}_TARGETS}) - # only use actual targets - # in case a package uses this variable for other content - if(TARGET "${_target}") - get_target_property(_include_dirs ${_target} INTERFACE_INCLUDE_DIRECTORIES) - if(_include_dirs) - list_append_unique(airsim_interfaces_INCLUDE_DIRS "${_include_dirs}") - endif() - - get_target_property(_imported_configurations ${_target} IMPORTED_CONFIGURATIONS) - if(_imported_configurations) - get_target_property(_imported_implib ${_target} IMPORTED_IMPLIB_${_imported_configurations}) - if(_imported_implib) - list(APPEND _libraries "${_imported_implib}") - else() - get_target_property(_imported_location ${_target} IMPORTED_LOCATION_${_imported_configurations}) - if(_imported_location) - list(APPEND _libraries "${_imported_location}") - endif() - endif() - endif() - - get_target_property(_link_libraries ${_target} INTERFACE_LINK_LIBRARIES) - if(_link_libraries) - list(APPEND _libraries "${_link_libraries}") - endif() - set(use_modern_cmake TRUE) - endif() - endforeach() - endif() - if(NOT use_modern_cmake) - if(${_dep}_DEFINITIONS) - list_append_unique(airsim_interfaces_DEFINITIONS "${${_dep}_DEFINITIONS}") - endif() - if(${_dep}_INCLUDE_DIRS) - list_append_unique(airsim_interfaces_INCLUDE_DIRS "${${_dep}_INCLUDE_DIRS}") - endif() - if(${_dep}_LIBRARIES) - list(APPEND _libraries "${${_dep}_LIBRARIES}") - endif() - if(${_dep}_LINK_FLAGS) - list_append_unique(airsim_interfaces_LINK_FLAGS "${${_dep}_LINK_FLAGS}") - endif() - if(${_dep}_RECURSIVE_DEPENDENCIES) - list_append_unique(airsim_interfaces_RECURSIVE_DEPENDENCIES "${${_dep}_RECURSIVE_DEPENDENCIES}") - endif() - endif() - if(_libraries) - ament_libraries_deduplicate(_libraries "${_libraries}") - list(APPEND airsim_interfaces_LIBRARIES "${_libraries}") - endif() - endforeach() -endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_include_directories-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_include_directories-extras.cmake deleted file mode 100644 index 2f41c26c92..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_include_directories-extras.cmake +++ /dev/null @@ -1,16 +0,0 @@ -# generated from ament_cmake_export_include_directories/cmake/ament_cmake_export_include_directories-extras.cmake.in - -set(_exported_include_dirs "${airsim_interfaces_DIR}/../../../include") - -# append include directories to airsim_interfaces_INCLUDE_DIRS -# warn about not existing paths -if(NOT _exported_include_dirs STREQUAL "") - find_package(ament_cmake_core QUIET REQUIRED) - foreach(_exported_include_dir ${_exported_include_dirs}) - if(NOT IS_DIRECTORY "${_exported_include_dir}") - message(WARNING "Package 'airsim_interfaces' exports the include directory '${_exported_include_dir}' which doesn't exist") - endif() - normalize_path(_exported_include_dir "${_exported_include_dir}") - list(APPEND airsim_interfaces_INCLUDE_DIRS "${_exported_include_dir}") - endforeach() -endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_libraries-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_libraries-extras.cmake deleted file mode 100644 index 541801295b..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_libraries-extras.cmake +++ /dev/null @@ -1,140 +0,0 @@ -# generated from ament_cmake_export_libraries/cmake/template/ament_cmake_export_libraries.cmake.in - -set(_exported_libraries "airsim_interfaces__rosidl_generator_c;airsim_interfaces__rosidl_typesupport_c;airsim_interfaces__rosidl_typesupport_cpp") -set(_exported_library_names "") - -# populate airsim_interfaces_LIBRARIES -if(NOT _exported_libraries STREQUAL "") - # loop over libraries, either target names or absolute paths - list(LENGTH _exported_libraries _length) - set(_i 0) - while(_i LESS _length) - list(GET _exported_libraries ${_i} _arg) - - # pass linker flags along - if("${_arg}" MATCHES "^-" AND NOT "${_arg}" MATCHES "^-[l|framework]") - list(APPEND airsim_interfaces_LIBRARIES "${_arg}") - math(EXPR _i "${_i} + 1") - continue() - endif() - - if("${_arg}" MATCHES "^(debug|optimized|general)$") - # remember build configuration keyword - # and get following library - set(_cfg "${_arg}") - math(EXPR _i "${_i} + 1") - if(_i EQUAL _length) - message(FATAL_ERROR "Package 'airsim_interfaces' passes the build configuration keyword '${_cfg}' as the last exported library") - endif() - list(GET _exported_libraries ${_i} _library) - else() - # the value is a library without a build configuration keyword - set(_cfg "") - set(_library "${_arg}") - endif() - math(EXPR _i "${_i} + 1") - - if(NOT IS_ABSOLUTE "${_library}") - # search for library target relative to this CMake file - set(_lib "NOTFOUND") - find_library( - _lib NAMES "${_library}" - PATHS "${airsim_interfaces_DIR}/../../../lib" - NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH - ) - - if(NOT _lib) - # warn about not existing library and ignore it - message(FATAL_ERROR "Package 'airsim_interfaces' exports the library '${_library}' which couldn't be found") - elseif(NOT IS_ABSOLUTE "${_lib}") - # the found library must be an absolute path - message(FATAL_ERROR "Package 'airsim_interfaces' found the library '${_library}' at '${_lib}' which is not an absolute path") - elseif(NOT EXISTS "${_lib}") - # the found library must exist - message(FATAL_ERROR "Package 'airsim_interfaces' found the library '${_lib}' which doesn't exist") - else() - list(APPEND airsim_interfaces_LIBRARIES ${_cfg} "${_lib}") - endif() - - else() - if(NOT EXISTS "${_library}") - # the found library must exist - message(WARNING "Package 'airsim_interfaces' exports the library '${_library}' which doesn't exist") - else() - list(APPEND airsim_interfaces_LIBRARIES ${_cfg} "${_library}") - endif() - endif() - endwhile() -endif() - -# find_library() library names with optional LIBRARY_DIRS -# and add the libraries to airsim_interfaces_LIBRARIES -if(NOT _exported_library_names STREQUAL "") - # loop over library names - # but remember related build configuration keyword if available - list(LENGTH _exported_library_names _length) - set(_i 0) - while(_i LESS _length) - list(GET _exported_library_names ${_i} _arg) - # pass linker flags along - if("${_arg}" MATCHES "^-" AND NOT "${_arg}" MATCHES "^-[l|framework]") - list(APPEND airsim_interfaces_LIBRARIES "${_arg}") - math(EXPR _i "${_i} + 1") - continue() - endif() - - if("${_arg}" MATCHES "^(debug|optimized|general)$") - # remember build configuration keyword - # and get following library name - set(_cfg "${_arg}") - math(EXPR _i "${_i} + 1") - if(_i EQUAL _length) - message(FATAL_ERROR "Package 'airsim_interfaces' passes the build configuration keyword '${_cfg}' as the last exported target") - endif() - list(GET _exported_library_names ${_i} _library) - else() - # the value is a library target without a build configuration keyword - set(_cfg "") - set(_library "${_arg}") - endif() - math(EXPR _i "${_i} + 1") - - # extract optional LIBRARY_DIRS from library name - string(REPLACE ":" ";" _library_dirs "${_library}") - list(GET _library_dirs 0 _library_name) - list(REMOVE_AT _library_dirs 0) - - set(_lib "NOTFOUND") - if(NOT _library_dirs) - # search for library in the common locations - find_library( - _lib - NAMES "${_library_name}" - ) - if(NOT _lib) - # warn about not existing library and later ignore it - message(WARNING "Package 'airsim_interfaces' exports library '${_library_name}' which couldn't be found") - endif() - else() - # search for library in the specified directories - find_library( - _lib - NAMES "${_library_name}" - PATHS ${_library_dirs} - NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH - ) - if(NOT _lib) - # warn about not existing library and later ignore it - message(WARNING "Package 'airsim_interfaces' exports library '${_library_name}' with LIBRARY_DIRS '${_library_dirs}' which couldn't be found") - endif() - endif() - if(_lib) - list(APPEND airsim_interfaces_LIBRARIES ${_cfg} "${_lib}") - endif() - endwhile() -endif() - -# TODO(dirk-thomas) deduplicate airsim_interfaces_LIBRARIES -# while maintaining library order -# as well as build configuration keywords -# as well as linker flags diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_targets-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_targets-extras.cmake deleted file mode 100644 index ac5f558419..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/ament_cmake_export_targets-extras.cmake +++ /dev/null @@ -1,27 +0,0 @@ -# generated from ament_cmake_export_targets/cmake/ament_cmake_export_targets-extras.cmake.in - -set(_exported_targets "airsim_interfaces__rosidl_generator_c;airsim_interfaces__rosidl_typesupport_introspection_c;airsim_interfaces__rosidl_typesupport_c;airsim_interfaces__rosidl_generator_cpp;airsim_interfaces__rosidl_typesupport_introspection_cpp;airsim_interfaces__rosidl_typesupport_cpp") - -# include all exported targets -if(NOT _exported_targets STREQUAL "") - foreach(_target ${_exported_targets}) - set(_export_file "${airsim_interfaces_DIR}/${_target}Export.cmake") - include("${_export_file}") - - # extract the target names associated with the export - set(_regex "foreach\\(_expectedTarget (.+)\\)") - file( - STRINGS "${_export_file}" _foreach_targets - REGEX "${_regex}") - list(LENGTH _foreach_targets _matches) - if(NOT _matches EQUAL 1) - message(FATAL_ERROR - "Failed to find exported target names in '${_export_file}'") - endif() - string(REGEX REPLACE "${_regex}" "\\1" _targets "${_foreach_targets}") - string(REPLACE " " ";" _targets "${_targets}") - list(LENGTH _targets _length) - - list(APPEND airsim_interfaces_TARGETS ${_targets}) - endforeach() -endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake-extras.cmake deleted file mode 100644 index 4c9131d939..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake-extras.cmake +++ /dev/null @@ -1,4 +0,0 @@ -# generated from rosidl_cmake/cmake/rosidl_cmake-extras.cmake.in - -set(airsim_interfaces_IDL_FILES "msg/GimbalAngleEulerCmd.idl;msg/GimbalAngleQuatCmd.idl;msg/GPSYaw.idl;msg/VelCmd.idl;msg/VelCmdGroup.idl;msg/CarControls.idl;msg/CarState.idl;msg/Altimeter.idl;msg/Environment.idl;srv/SetGPSPosition.idl;srv/Takeoff.idl;srv/TakeoffGroup.idl;srv/Land.idl;srv/LandGroup.idl;srv/Reset.idl;srv/SetLocalPosition.idl") -set(airsim_interfaces_INTERFACE_FILES "msg/GimbalAngleEulerCmd.msg;msg/GimbalAngleQuatCmd.msg;msg/GPSYaw.msg;msg/VelCmd.msg;msg/VelCmdGroup.msg;msg/CarControls.msg;msg/CarState.msg;msg/Altimeter.msg;msg/Environment.msg;srv/SetGPSPosition.srv;srv/SetGPSPosition_Request.msg;srv/SetGPSPosition_Response.msg;srv/Takeoff.srv;srv/Takeoff_Request.msg;srv/Takeoff_Response.msg;srv/TakeoffGroup.srv;srv/TakeoffGroup_Request.msg;srv/TakeoffGroup_Response.msg;srv/Land.srv;srv/Land_Request.msg;srv/Land_Response.msg;srv/LandGroup.srv;srv/LandGroup_Request.msg;srv/LandGroup_Response.msg;srv/Reset.srv;srv/Reset_Request.msg;srv/Reset_Response.msg;srv/SetLocalPosition.srv;srv/SetLocalPosition_Request.msg;srv/SetLocalPosition_Response.msg") diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake deleted file mode 100644 index 141ba7d08e..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake +++ /dev/null @@ -1,46 +0,0 @@ -# generated from -# rosidl_cmake/cmake/template/rosidl_cmake_export_typesupport_libraries.cmake.in - -set(_exported_typesupport_libraries - "__rosidl_typesupport_fastrtps_c:airsim_interfaces__rosidl_typesupport_fastrtps_c;__rosidl_typesupport_fastrtps_cpp:airsim_interfaces__rosidl_typesupport_fastrtps_cpp") - -# populate airsim_interfaces_LIBRARIES_ -if(NOT _exported_typesupport_libraries STREQUAL "") - # loop over typesupport libraries - foreach(_tuple ${_exported_typesupport_libraries}) - string(REPLACE ":" ";" _tuple "${_tuple}") - list(GET _tuple 0 _suffix) - list(GET _tuple 1 _library) - - if(NOT IS_ABSOLUTE "${_library}") - # search for library target relative to this CMake file - set(_lib "NOTFOUND") - find_library( - _lib NAMES "${_library}" - PATHS "${airsim_interfaces_DIR}/../../../lib" - NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH - ) - - if(NOT _lib) - # the library wasn't found - message(FATAL_ERROR "Package 'airsim_interfaces' exports the typesupport library '${_library}' which couldn't be found") - elseif(NOT IS_ABSOLUTE "${_lib}") - # the found library must be an absolute path - message(FATAL_ERROR "Package 'airsim_interfaces' found the typesupport library '${_library}' at '${_lib}' which is not an absolute path") - elseif(NOT EXISTS "${_lib}") - # the found library must exist - message(FATAL_ERROR "Package 'airsim_interfaces' found the typesupport library '${_lib}' which doesn't exist") - else() - list(APPEND airsim_interfaces_LIBRARIES${_suffix} ${_cfg} "${_lib}") - endif() - - else() - if(NOT EXISTS "${_library}") - # the found library must exist - message(WARNING "Package 'airsim_interfaces' exports the typesupport library '${_library}' which doesn't exist") - else() - list(APPEND airsim_interfaces_LIBRARIES${_suffix} "${_library}") - endif() - endif() - endforeach() -endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake b/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake deleted file mode 100644 index 1555273a4f..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# generated from -# rosidl_cmake/cmake/template/rosidl_cmake_export_typesupport_targets.cmake.in - -set(_exported_typesupport_targets - "__rosidl_typesupport_introspection_c:airsim_interfaces__rosidl_typesupport_introspection_c;__rosidl_typesupport_introspection_cpp:airsim_interfaces__rosidl_typesupport_introspection_cpp") - -# populate airsim_interfaces_TARGETS_ -if(NOT _exported_typesupport_targets STREQUAL "") - # loop over typesupport targets - foreach(_tuple ${_exported_typesupport_targets}) - string(REPLACE ":" ";" _tuple "${_tuple}") - list(GET _tuple 0 _suffix) - list(GET _tuple 1 _target) - - set(_target "airsim_interfaces::${_target}") - if(NOT TARGET "${_target}") - # the exported target must exist - message(WARNING "Package 'airsim_interfaces' exports the typesupport target '${_target}' which doesn't exist") - else() - list(APPEND airsim_interfaces_TARGETS${_suffix} "${_target}") - endif() - endforeach() -endif() diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.dsv deleted file mode 100644 index 79d4c95b55..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.dsv +++ /dev/null @@ -1 +0,0 @@ -prepend-non-duplicate;AMENT_PREFIX_PATH; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.sh deleted file mode 100644 index 02e441b753..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/ament_prefix_path.sh +++ /dev/null @@ -1,4 +0,0 @@ -# copied from -# ament_cmake_core/cmake/environment_hooks/environment/ament_prefix_path.sh - -ament_prepend_unique_value AMENT_PREFIX_PATH "$AMENT_CURRENT_PREFIX" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.dsv deleted file mode 100644 index 89bec935bf..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.dsv +++ /dev/null @@ -1 +0,0 @@ -prepend-non-duplicate;LD_LIBRARY_PATH;lib diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.sh deleted file mode 100644 index 292e518f11..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/library_path.sh +++ /dev/null @@ -1,16 +0,0 @@ -# copied from ament_package/template/environment_hook/library_path.sh - -# detect if running on Darwin platform -_UNAME=`uname -s` -_IS_DARWIN=0 -if [ "$_UNAME" = "Darwin" ]; then - _IS_DARWIN=1 -fi -unset _UNAME - -if [ $_IS_DARWIN -eq 0 ]; then - ament_prepend_unique_value LD_LIBRARY_PATH "$AMENT_CURRENT_PREFIX/lib" -else - ament_prepend_unique_value DYLD_LIBRARY_PATH "$AMENT_CURRENT_PREFIX/lib" -fi -unset _IS_DARWIN diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.dsv deleted file mode 100644 index b94426af08..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.dsv +++ /dev/null @@ -1 +0,0 @@ -prepend-non-duplicate-if-exists;PATH;bin diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.sh deleted file mode 100644 index e59b749a89..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/path.sh +++ /dev/null @@ -1,5 +0,0 @@ -# copied from ament_cmake_core/cmake/environment_hooks/environment/path.sh - -if [ -d "$AMENT_CURRENT_PREFIX/bin" ]; then - ament_prepend_unique_value PATH "$AMENT_CURRENT_PREFIX/bin" -fi diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.dsv deleted file mode 100644 index 84dbc4c7b0..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.dsv +++ /dev/null @@ -1 +0,0 @@ -prepend-non-duplicate;PYTHONPATH;lib/python3.8/site-packages diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.sh deleted file mode 100644 index 7fe2b2f6f6..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/environment/pythonpath.sh +++ /dev/null @@ -1,3 +0,0 @@ -# generated from ament_package/template/environment_hook/pythonpath.sh.in - -ament_prepend_unique_value PYTHONPATH "$AMENT_CURRENT_PREFIX/lib/python3.8/site-packages" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.dsv deleted file mode 100644 index e119f32cba..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.dsv +++ /dev/null @@ -1 +0,0 @@ -prepend-non-duplicate;CMAKE_PREFIX_PATH; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.ps1 b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.ps1 deleted file mode 100644 index d03facc1a4..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.ps1 +++ /dev/null @@ -1,3 +0,0 @@ -# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em - -colcon_prepend_unique_value CMAKE_PREFIX_PATH "$env:COLCON_CURRENT_PREFIX" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.sh deleted file mode 100644 index a948e685ba..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/cmake_prefix_path.sh +++ /dev/null @@ -1,3 +0,0 @@ -# generated from colcon_core/shell/template/hook_prepend_value.sh.em - -_colcon_prepend_unique_value CMAKE_PREFIX_PATH "$COLCON_CURRENT_PREFIX" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.dsv deleted file mode 100644 index 89bec935bf..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.dsv +++ /dev/null @@ -1 +0,0 @@ -prepend-non-duplicate;LD_LIBRARY_PATH;lib diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.ps1 b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.ps1 deleted file mode 100644 index f6df601d0c..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.ps1 +++ /dev/null @@ -1,3 +0,0 @@ -# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em - -colcon_prepend_unique_value LD_LIBRARY_PATH "$env:COLCON_CURRENT_PREFIX\lib" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.sh deleted file mode 100644 index ca3c1020bb..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/ld_library_path_lib.sh +++ /dev/null @@ -1,3 +0,0 @@ -# generated from colcon_core/shell/template/hook_prepend_value.sh.em - -_colcon_prepend_unique_value LD_LIBRARY_PATH "$COLCON_CURRENT_PREFIX/lib" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.dsv deleted file mode 100644 index 84dbc4c7b0..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.dsv +++ /dev/null @@ -1 +0,0 @@ -prepend-non-duplicate;PYTHONPATH;lib/python3.8/site-packages diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.ps1 b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.ps1 deleted file mode 100644 index 12877ef654..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.ps1 +++ /dev/null @@ -1,3 +0,0 @@ -# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em - -colcon_prepend_unique_value PYTHONPATH "$env:COLCON_CURRENT_PREFIX\lib/python3.8/site-packages" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.sh deleted file mode 100644 index ed8efd9c7b..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/hook/pythonpath.sh +++ /dev/null @@ -1,3 +0,0 @@ -# generated from colcon_core/shell/template/hook_prepend_value.sh.em - -_colcon_prepend_unique_value PYTHONPATH "$COLCON_CURRENT_PREFIX/lib/python3.8/site-packages" diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.bash b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.bash deleted file mode 100644 index 49782f2461..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.bash +++ /dev/null @@ -1,46 +0,0 @@ -# generated from ament_package/template/package_level/local_setup.bash.in - -# source local_setup.sh from same directory as this file -_this_path=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" && pwd) -# provide AMENT_CURRENT_PREFIX to shell script -AMENT_CURRENT_PREFIX=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." && pwd) -# store AMENT_CURRENT_PREFIX to restore it before each environment hook -_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX - -# trace output -if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then - echo "# . \"$_this_path/local_setup.sh\"" -fi -. "$_this_path/local_setup.sh" -unset _this_path - -# unset AMENT_ENVIRONMENT_HOOKS -# if not appending to them for return -if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then - unset AMENT_ENVIRONMENT_HOOKS -fi - -# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks -AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX -# list all environment hooks of this package - -# source all shell-specific environment hooks of this package -# if not returning them -if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then - _package_local_setup_IFS=$IFS - IFS=":" - for _hook in $AMENT_ENVIRONMENT_HOOKS; do - # restore AMENT_CURRENT_PREFIX for each environment hook - AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX - # restore IFS before sourcing other files - IFS=$_package_local_setup_IFS - . "$_hook" - done - unset _hook - IFS=$_package_local_setup_IFS - unset _package_local_setup_IFS - unset AMENT_ENVIRONMENT_HOOKS -fi - -unset _package_local_setup_AMENT_CURRENT_PREFIX -unset AMENT_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.dsv deleted file mode 100644 index 0aee8afe2e..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.dsv +++ /dev/null @@ -1,4 +0,0 @@ -source;share/airsim_interfaces/environment/ament_prefix_path.sh -source;share/airsim_interfaces/environment/library_path.sh -source;share/airsim_interfaces/environment/path.sh -source;share/airsim_interfaces/environment/pythonpath.sh diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.sh deleted file mode 100644 index 84e7333065..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.sh +++ /dev/null @@ -1,135 +0,0 @@ -# generated from ament_package/template/package_level/local_setup.sh.in - -# since this file is sourced use either the provided AMENT_CURRENT_PREFIX -# or fall back to the destination set at configure time -: ${AMENT_CURRENT_PREFIX:="/home/alon/AirSimRos/ros/install/airsim_interfaces"} -if [ ! -d "$AMENT_CURRENT_PREFIX" ]; then - if [ -z "$COLCON_CURRENT_PREFIX" ]; then - echo "The compile time prefix path '$AMENT_CURRENT_PREFIX' doesn't " \ - "exist. Consider sourcing a different extension than '.sh'." 1>&2 - else - AMENT_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" - fi -fi - -# function to append values to environment variables -# using colons as separators and avoiding leading separators -ament_append_value() { - # arguments - _listname="$1" - _value="$2" - #echo "listname $_listname" - #eval echo "list value \$$_listname" - #echo "value $_value" - - # avoid leading separator - eval _values=\"\$$_listname\" - if [ -z "$_values" ]; then - eval export $_listname=\"$_value\" - #eval echo "set list \$$_listname" - else - # field separator must not be a colon - _ament_append_value_IFS=$IFS - unset IFS - eval export $_listname=\"\$$_listname:$_value\" - #eval echo "append list \$$_listname" - IFS=$_ament_append_value_IFS - unset _ament_append_value_IFS - fi - unset _values - - unset _value - unset _listname -} - -# function to prepend non-duplicate values to environment variables -# using colons as separators and avoiding trailing separators -ament_prepend_unique_value() { - # arguments - _listname="$1" - _value="$2" - #echo "listname $_listname" - #eval echo "list value \$$_listname" - #echo "value $_value" - - # check if the list contains the value - eval _values=\"\$$_listname\" - _duplicate= - _ament_prepend_unique_value_IFS=$IFS - IFS=":" - if [ "$AMENT_SHELL" = "zsh" ]; then - ament_zsh_to_array _values - fi - for _item in $_values; do - # ignore empty strings - if [ -z "$_item" ]; then - continue - fi - if [ "$_item" = "$_value" ]; then - _duplicate=1 - fi - done - unset _item - - # prepend only non-duplicates - if [ -z "$_duplicate" ]; then - # avoid trailing separator - if [ -z "$_values" ]; then - eval export $_listname=\"$_value\" - #eval echo "set list \$$_listname" - else - # field separator must not be a colon - unset IFS - eval export $_listname=\"$_value:\$$_listname\" - #eval echo "prepend list \$$_listname" - fi - fi - IFS=$_ament_prepend_unique_value_IFS - unset _ament_prepend_unique_value_IFS - unset _duplicate - unset _values - - unset _value - unset _listname -} - -# unset AMENT_ENVIRONMENT_HOOKS -# if not appending to them for return -if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then - unset AMENT_ENVIRONMENT_HOOKS -fi - -# list all environment hooks of this package -ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/airsim_interfaces/environment/ament_prefix_path.sh" -ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/airsim_interfaces/environment/library_path.sh" -ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/airsim_interfaces/environment/path.sh" -ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/airsim_interfaces/environment/pythonpath.sh" - -# source all shell-specific environment hooks of this package -# if not returning them -if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then - _package_local_setup_IFS=$IFS - IFS=":" - if [ "$AMENT_SHELL" = "zsh" ]; then - ament_zsh_to_array AMENT_ENVIRONMENT_HOOKS - fi - for _hook in $AMENT_ENVIRONMENT_HOOKS; do - if [ -f "$_hook" ]; then - # restore IFS before sourcing other files - IFS=$_package_local_setup_IFS - # trace output - if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then - echo "# . \"$_hook\"" - fi - . "$_hook" - fi - done - unset _hook - IFS=$_package_local_setup_IFS - unset _package_local_setup_IFS - unset AMENT_ENVIRONMENT_HOOKS -fi - -# reset AMENT_CURRENT_PREFIX after each package -# allowing to source multiple package-level setup files -unset AMENT_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.zsh b/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.zsh deleted file mode 100644 index fe161be53d..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/local_setup.zsh +++ /dev/null @@ -1,59 +0,0 @@ -# generated from ament_package/template/package_level/local_setup.zsh.in - -AMENT_SHELL=zsh - -# source local_setup.sh from same directory as this file -_this_path=$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd) -# provide AMENT_CURRENT_PREFIX to shell script -AMENT_CURRENT_PREFIX=$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd) -# store AMENT_CURRENT_PREFIX to restore it before each environment hook -_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX - -# function to convert array-like strings into arrays -# to wordaround SH_WORD_SPLIT not being set -ament_zsh_to_array() { - local _listname=$1 - local _dollar="$" - local _split="{=" - local _to_array="(\"$_dollar$_split$_listname}\")" - eval $_listname=$_to_array -} - -# trace output -if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then - echo "# . \"$_this_path/local_setup.sh\"" -fi -# the package-level local_setup file unsets AMENT_CURRENT_PREFIX -. "$_this_path/local_setup.sh" -unset _this_path - -# unset AMENT_ENVIRONMENT_HOOKS -# if not appending to them for return -if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then - unset AMENT_ENVIRONMENT_HOOKS -fi - -# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks -AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX -# list all environment hooks of this package - -# source all shell-specific environment hooks of this package -# if not returning them -if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then - _package_local_setup_IFS=$IFS - IFS=":" - for _hook in $AMENT_ENVIRONMENT_HOOKS; do - # restore AMENT_CURRENT_PREFIX for each environment hook - AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX - # restore IFS before sourcing other files - IFS=$_package_local_setup_IFS - . "$_hook" - done - unset _hook - IFS=$_package_local_setup_IFS - unset _package_local_setup_IFS - unset AMENT_ENVIRONMENT_HOOKS -fi - -unset _package_local_setup_AMENT_CURRENT_PREFIX -unset AMENT_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.idl deleted file mode 100644 index 7ef5e810cb..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.idl +++ /dev/null @@ -1,19 +0,0 @@ -// generated from rosidl_adapter/resource/msg.idl.em -// with input from airsim_interfaces/msg/Altimeter.msg -// generated code does not contain a copyright notice - -#include "std_msgs/msg/Header.idl" - -module airsim_interfaces { - module msg { - struct Altimeter { - std_msgs::msg::Header header; - - float altitude; - - float pressure; - - float qnh; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.msg deleted file mode 100644 index 34e3dc1d70..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Altimeter.msg +++ /dev/null @@ -1,4 +0,0 @@ -std_msgs/Header header -float32 altitude -float32 pressure -float32 qnh \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.idl deleted file mode 100644 index 2844ec0965..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.idl +++ /dev/null @@ -1,27 +0,0 @@ -// generated from rosidl_adapter/resource/msg.idl.em -// with input from airsim_interfaces/msg/CarControls.msg -// generated code does not contain a copyright notice - -#include "std_msgs/msg/Header.idl" - -module airsim_interfaces { - module msg { - struct CarControls { - std_msgs::msg::Header header; - - float throttle; - - float brake; - - float steering; - - boolean handbrake; - - boolean manual; - - int8 manual_gear; - - boolean gear_immediate; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.msg deleted file mode 100644 index a6a2fd23c6..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarControls.msg +++ /dev/null @@ -1,8 +0,0 @@ -std_msgs/Header header -float32 throttle -float32 brake -float32 steering -bool handbrake -bool manual -int8 manual_gear -bool gear_immediate \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.idl deleted file mode 100644 index fbdc455124..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.idl +++ /dev/null @@ -1,29 +0,0 @@ -// generated from rosidl_adapter/resource/msg.idl.em -// with input from airsim_interfaces/msg/CarState.msg -// generated code does not contain a copyright notice - -#include "geometry_msgs/msg/PoseWithCovariance.idl" -#include "geometry_msgs/msg/TwistWithCovariance.idl" -#include "std_msgs/msg/Header.idl" - -module airsim_interfaces { - module msg { - struct CarState { - std_msgs::msg::Header header; - - geometry_msgs::msg::PoseWithCovariance pose; - - geometry_msgs::msg::TwistWithCovariance twist; - - float speed; - - int8 gear; - - float rpm; - - float maxrpm; - - boolean handbrake; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.msg deleted file mode 100644 index e5bde5a59d..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/CarState.msg +++ /dev/null @@ -1,8 +0,0 @@ -std_msgs/Header header -geometry_msgs/PoseWithCovariance pose -geometry_msgs/TwistWithCovariance twist -float32 speed -int8 gear -float32 rpm -float32 maxrpm -bool handbrake \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.idl deleted file mode 100644 index 14b191bc85..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.idl +++ /dev/null @@ -1,27 +0,0 @@ -// generated from rosidl_adapter/resource/msg.idl.em -// with input from airsim_interfaces/msg/Environment.msg -// generated code does not contain a copyright notice - -#include "geographic_msgs/msg/GeoPoint.idl" -#include "geometry_msgs/msg/Vector3.idl" -#include "std_msgs/msg/Header.idl" - -module airsim_interfaces { - module msg { - struct Environment { - std_msgs::msg::Header header; - - geometry_msgs::msg::Vector3 position; - - geographic_msgs::msg::GeoPoint geo_point; - - geometry_msgs::msg::Vector3 gravity; - - float air_pressure; - - float temperature; - - float air_density; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.msg deleted file mode 100644 index fdeed971cc..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/Environment.msg +++ /dev/null @@ -1,8 +0,0 @@ -std_msgs/Header header -geometry_msgs/Vector3 position -geographic_msgs/GeoPoint geo_point -geometry_msgs/Vector3 gravity -float32 air_pressure -float32 temperature -float32 air_density - diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.idl deleted file mode 100644 index b2bd1e9537..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.idl +++ /dev/null @@ -1,18 +0,0 @@ -// generated from rosidl_adapter/resource/msg.idl.em -// with input from airsim_interfaces/msg/GPSYaw.msg -// generated code does not contain a copyright notice - - -module airsim_interfaces { - module msg { - struct GPSYaw { - double latitude; - - double longitude; - - double altitude; - - double yaw; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.msg deleted file mode 100644 index 1e03ea33a4..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GPSYaw.msg +++ /dev/null @@ -1,4 +0,0 @@ -float64 latitude -float64 longitude -float64 altitude -float64 yaw \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.idl deleted file mode 100644 index ec0fd794f1..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.idl +++ /dev/null @@ -1,23 +0,0 @@ -// generated from rosidl_adapter/resource/msg.idl.em -// with input from airsim_interfaces/msg/GimbalAngleEulerCmd.msg -// generated code does not contain a copyright notice - -#include "std_msgs/msg/Header.idl" - -module airsim_interfaces { - module msg { - struct GimbalAngleEulerCmd { - std_msgs::msg::Header header; - - string camera_name; - - string vehicle_name; - - double roll; - - double pitch; - - double yaw; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.msg deleted file mode 100644 index cf3cdf4bc8..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleEulerCmd.msg +++ /dev/null @@ -1,6 +0,0 @@ -std_msgs/Header header -string camera_name -string vehicle_name -float64 roll -float64 pitch -float64 yaw \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.idl deleted file mode 100644 index 90ec46c028..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.idl +++ /dev/null @@ -1,20 +0,0 @@ -// generated from rosidl_adapter/resource/msg.idl.em -// with input from airsim_interfaces/msg/GimbalAngleQuatCmd.msg -// generated code does not contain a copyright notice - -#include "geometry_msgs/msg/Quaternion.idl" -#include "std_msgs/msg/Header.idl" - -module airsim_interfaces { - module msg { - struct GimbalAngleQuatCmd { - std_msgs::msg::Header header; - - string camera_name; - - string vehicle_name; - - geometry_msgs::msg::Quaternion orientation; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.msg deleted file mode 100644 index 819dd53c52..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/GimbalAngleQuatCmd.msg +++ /dev/null @@ -1,4 +0,0 @@ -std_msgs/Header header -string camera_name -string vehicle_name -geometry_msgs/Quaternion orientation \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.idl deleted file mode 100644 index da0ef1ad95..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.idl +++ /dev/null @@ -1,13 +0,0 @@ -// generated from rosidl_adapter/resource/msg.idl.em -// with input from airsim_interfaces/msg/VelCmd.msg -// generated code does not contain a copyright notice - -#include "geometry_msgs/msg/Twist.idl" - -module airsim_interfaces { - module msg { - struct VelCmd { - geometry_msgs::msg::Twist twist; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.msg deleted file mode 100644 index 6a63100193..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmd.msg +++ /dev/null @@ -1,2 +0,0 @@ -geometry_msgs/Twist twist -# string vehicle_name \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.idl deleted file mode 100644 index 106e91262c..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.idl +++ /dev/null @@ -1,15 +0,0 @@ -// generated from rosidl_adapter/resource/msg.idl.em -// with input from airsim_interfaces/msg/VelCmdGroup.msg -// generated code does not contain a copyright notice - -#include "geometry_msgs/msg/Twist.idl" - -module airsim_interfaces { - module msg { - struct VelCmdGroup { - geometry_msgs::msg::Twist twist; - - sequence vehicle_names; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.msg deleted file mode 100644 index 70abdce4ca..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/msg/VelCmdGroup.msg +++ /dev/null @@ -1,2 +0,0 @@ -geometry_msgs/Twist twist -string[] vehicle_names \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.bash b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.bash deleted file mode 100644 index c4c7a3a25a..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.bash +++ /dev/null @@ -1,39 +0,0 @@ -# generated from colcon_bash/shell/template/package.bash.em - -# This script extends the environment for this package. - -# a bash script is able to determine its own path if necessary -if [ -z "$COLCON_CURRENT_PREFIX" ]; then - # the prefix is two levels up from the package specific share directory - _colcon_package_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." > /dev/null && pwd)" -else - _colcon_package_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" -fi - -# function to source another script with conditional trace output -# first argument: the path of the script -# additional arguments: arguments to the script -_colcon_package_bash_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$@" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# source sh script of this package -_colcon_package_bash_source_script "$_colcon_package_bash_COLCON_CURRENT_PREFIX/share/airsim_interfaces/package.sh" - -# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts -COLCON_CURRENT_PREFIX="$_colcon_package_bash_COLCON_CURRENT_PREFIX" - -# source bash hooks -_colcon_package_bash_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/local_setup.bash" - -unset COLCON_CURRENT_PREFIX - -unset _colcon_package_bash_source_script -unset _colcon_package_bash_COLCON_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.dsv b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.dsv deleted file mode 100644 index efe7fb5d60..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.dsv +++ /dev/null @@ -1,14 +0,0 @@ -source;share/airsim_interfaces/hook/cmake_prefix_path.ps1 -source;share/airsim_interfaces/hook/cmake_prefix_path.dsv -source;share/airsim_interfaces/hook/cmake_prefix_path.sh -source;share/airsim_interfaces/hook/ld_library_path_lib.ps1 -source;share/airsim_interfaces/hook/ld_library_path_lib.dsv -source;share/airsim_interfaces/hook/ld_library_path_lib.sh -source;share/airsim_interfaces/hook/pythonpath.ps1 -source;share/airsim_interfaces/hook/pythonpath.dsv -source;share/airsim_interfaces/hook/pythonpath.sh -source;share/airsim_interfaces/local_setup.bash -source;share/airsim_interfaces/local_setup.dsv -source;share/airsim_interfaces/local_setup.ps1 -source;share/airsim_interfaces/local_setup.sh -source;share/airsim_interfaces/local_setup.zsh diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.ps1 b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.ps1 deleted file mode 100644 index 6e2fddacca..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.ps1 +++ /dev/null @@ -1,67 +0,0 @@ -# generated from colcon_powershell/shell/template/package.ps1.em - -# function to prepend a value to a variable -# which uses colons as separators -# duplicates as well as trailing separators are avoided -# first argument: the name of the result variable -# second argument: the value to be prepended -function colcon_prepend_unique_value { - param ( - $_listname, - $_value - ) - - # get values from variable - if (Test-Path Env:$_listname) { - $_values=(Get-Item env:$_listname).Value - } else { - $_values="" - } - # start with the new value - $_all_values="$_value" - # iterate over existing values in the variable - if ($_values) { - $_values.Split(";") | ForEach { - # not an empty string - if ($_) { - # not a duplicate of _value - if ($_ -ne $_value) { - # keep non-duplicate values - $_all_values="${_all_values};$_" - } - } - } - } - # export the updated variable - Set-Item env:\$_listname -Value "$_all_values" -} - -# function to source another script with conditional trace output -# first argument: the path of the script -# additional arguments: arguments to the script -function colcon_package_source_powershell_script { - param ( - $_colcon_package_source_powershell_script - ) - # source script with conditional trace output - if (Test-Path $_colcon_package_source_powershell_script) { - if ($env:COLCON_TRACE) { - echo ". '$_colcon_package_source_powershell_script'" - } - . "$_colcon_package_source_powershell_script" - } else { - Write-Error "not found: '$_colcon_package_source_powershell_script'" - } -} - - -# a powershell script is able to determine its own path -# the prefix is two levels up from the package specific share directory -$env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.FullName - -colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/airsim_interfaces/hook/cmake_prefix_path.ps1" -colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/airsim_interfaces/hook/ld_library_path_lib.ps1" -colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/airsim_interfaces/hook/pythonpath.ps1" -colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/airsim_interfaces/local_setup.ps1" - -Remove-Item Env:\COLCON_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.sh b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.sh deleted file mode 100644 index 7678837200..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.sh +++ /dev/null @@ -1,89 +0,0 @@ -# generated from colcon_core/shell/template/package.sh.em - -# This script extends the environment for this package. - -# function to prepend a value to a variable -# which uses colons as separators -# duplicates as well as trailing separators are avoided -# first argument: the name of the result variable -# second argument: the value to be prepended -_colcon_prepend_unique_value() { - # arguments - _listname="$1" - _value="$2" - - # get values from variable - eval _values=\"\$$_listname\" - # backup the field separator - _colcon_prepend_unique_value_IFS=$IFS - IFS=":" - # start with the new value - _all_values="$_value" - # workaround SH_WORD_SPLIT not being set in zsh - if [ "$(command -v colcon_zsh_convert_to_array)" ]; then - colcon_zsh_convert_to_array _values - fi - # iterate over existing values in the variable - for _item in $_values; do - # ignore empty strings - if [ -z "$_item" ]; then - continue - fi - # ignore duplicates of _value - if [ "$_item" = "$_value" ]; then - continue - fi - # keep non-duplicate values - _all_values="$_all_values:$_item" - done - unset _item - # restore the field separator - IFS=$_colcon_prepend_unique_value_IFS - unset _colcon_prepend_unique_value_IFS - # export the updated variable - eval export $_listname=\"$_all_values\" - unset _all_values - unset _values - - unset _value - unset _listname -} - -# since a plain shell script can't determine its own path when being sourced -# either use the provided COLCON_CURRENT_PREFIX -# or fall back to the build time prefix (if it exists) -_colcon_package_sh_COLCON_CURRENT_PREFIX="/home/alon/AirSimRos/ros/install/airsim_interfaces" -if [ -z "$COLCON_CURRENT_PREFIX" ]; then - if [ ! -d "$_colcon_package_sh_COLCON_CURRENT_PREFIX" ]; then - echo "The build time path \"$_colcon_package_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 - unset _colcon_package_sh_COLCON_CURRENT_PREFIX - return 1 - fi - COLCON_CURRENT_PREFIX="$_colcon_package_sh_COLCON_CURRENT_PREFIX" -fi -unset _colcon_package_sh_COLCON_CURRENT_PREFIX - -# function to source another script with conditional trace output -# first argument: the path of the script -# additional arguments: arguments to the script -_colcon_package_sh_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$@" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# source sh hooks -_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/hook/cmake_prefix_path.sh" -_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/hook/ld_library_path_lib.sh" -_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/hook/pythonpath.sh" -_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/local_setup.sh" - -unset _colcon_package_sh_source_script -unset COLCON_CURRENT_PREFIX - -# do not unset _colcon_prepend_unique_value since it might be used by non-primary shell hooks diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.xml b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.xml deleted file mode 100644 index 3771ad7403..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - airsim_interfaces - 0.1.0 - Contains message and service definitions used by the examples. - AAA - Apache License 2.0 - - AAA - - ament_cmake - - rosidl_default_generators - - action_msgs - - rosidl_default_runtime - - rosidl_interface_packages - - - ament_cmake - - diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.zsh b/ros2/install/airsim_interfaces/share/airsim_interfaces/package.zsh deleted file mode 100644 index 8cf5d0c0b5..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/package.zsh +++ /dev/null @@ -1,50 +0,0 @@ -# generated from colcon_zsh/shell/template/package.zsh.em - -# This script extends the environment for this package. - -# a zsh script is able to determine its own path if necessary -if [ -z "$COLCON_CURRENT_PREFIX" ]; then - # the prefix is two levels up from the package specific share directory - _colcon_package_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)" -else - _colcon_package_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" -fi - -# function to source another script with conditional trace output -# first argument: the path of the script -# additional arguments: arguments to the script -_colcon_package_zsh_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$@" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# function to convert array-like strings into arrays -# to workaround SH_WORD_SPLIT not being set -colcon_zsh_convert_to_array() { - local _listname=$1 - local _dollar="$" - local _split="{=" - local _to_array="(\"$_dollar$_split$_listname}\")" - eval $_listname=$_to_array -} - -# source sh script of this package -_colcon_package_zsh_source_script "$_colcon_package_zsh_COLCON_CURRENT_PREFIX/share/airsim_interfaces/package.sh" -unset convert_zsh_to_array - -# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts -COLCON_CURRENT_PREFIX="$_colcon_package_zsh_COLCON_CURRENT_PREFIX" - -# source zsh hooks -_colcon_package_zsh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_interfaces/local_setup.zsh" - -unset COLCON_CURRENT_PREFIX - -unset _colcon_package_zsh_source_script -unset _colcon_package_zsh_COLCON_CURRENT_PREFIX diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.idl deleted file mode 100644 index 8b01f542ca..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.idl +++ /dev/null @@ -1,15 +0,0 @@ -// generated from rosidl_adapter/resource/srv.idl.em -// with input from airsim_interfaces/srv/Land.srv -// generated code does not contain a copyright notice - - -module airsim_interfaces { - module srv { - struct Land_Request { - boolean wait_on_last_task; - }; - struct Land_Response { - boolean success; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.srv deleted file mode 100644 index 2100b641c0..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land.srv +++ /dev/null @@ -1,3 +0,0 @@ -bool wait_on_last_task ---- -bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.idl deleted file mode 100644 index 7bcfe2d3c5..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.idl +++ /dev/null @@ -1,17 +0,0 @@ -// generated from rosidl_adapter/resource/srv.idl.em -// with input from airsim_interfaces/srv/LandGroup.srv -// generated code does not contain a copyright notice - - -module airsim_interfaces { - module srv { - struct LandGroup_Request { - sequence vehicle_names; - - boolean wait_on_last_task; - }; - struct LandGroup_Response { - boolean success; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.srv deleted file mode 100644 index 1c900c14b8..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup.srv +++ /dev/null @@ -1,4 +0,0 @@ -string[] vehicle_names -bool wait_on_last_task ---- -bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Request.msg deleted file mode 100644 index bc7259465e..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Request.msg +++ /dev/null @@ -1,2 +0,0 @@ -string[] vehicle_names -bool wait_on_last_task diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Response.msg deleted file mode 100644 index 162f08df15..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/LandGroup_Response.msg +++ /dev/null @@ -1,2 +0,0 @@ - -bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Request.msg deleted file mode 100644 index 0fa8cd3fb8..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Request.msg +++ /dev/null @@ -1 +0,0 @@ -bool wait_on_last_task diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Response.msg deleted file mode 100644 index 162f08df15..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Land_Response.msg +++ /dev/null @@ -1,2 +0,0 @@ - -bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.idl deleted file mode 100644 index b5daa07900..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.idl +++ /dev/null @@ -1,17 +0,0 @@ -// generated from rosidl_adapter/resource/srv.idl.em -// with input from airsim_interfaces/srv/Reset.srv -// generated code does not contain a copyright notice - - -module airsim_interfaces { - module srv { - @verbatim (language="comment", text= - " string vehicle_name") - struct Reset_Request { - boolean wait_on_last_task; - }; - struct Reset_Response { - boolean success; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.srv deleted file mode 100644 index 3e754478e9..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset.srv +++ /dev/null @@ -1,4 +0,0 @@ -# string vehicle_name -bool wait_on_last_task ---- -bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Request.msg deleted file mode 100644 index c564a8e290..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Request.msg +++ /dev/null @@ -1,2 +0,0 @@ -# string vehicle_name -bool wait_on_last_task diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Response.msg deleted file mode 100644 index 162f08df15..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Reset_Response.msg +++ /dev/null @@ -1,2 +0,0 @@ - -bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.idl deleted file mode 100644 index 6be26b8104..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.idl +++ /dev/null @@ -1,25 +0,0 @@ -// generated from rosidl_adapter/resource/srv.idl.em -// with input from airsim_interfaces/srv/SetGPSPosition.srv -// generated code does not contain a copyright notice - - -module airsim_interfaces { - module srv { - struct SetGPSPosition_Request { - double latitude; - - double longitude; - - double altitude; - - double yaw; - - string vehicle_name; - }; - @verbatim (language="comment", text= - "Response : return success=true, (if async=false && if setpoint reached before timeout = 30sec) || (if async=true && command sent to autopilot)") - struct SetGPSPosition_Response { - boolean success; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.srv deleted file mode 100644 index 76cc2c081b..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition.srv +++ /dev/null @@ -1,8 +0,0 @@ -float64 latitude -float64 longitude -float64 altitude -float64 yaw -string vehicle_name ---- -#Response : return success=true, (if async=false && if setpoint reached before timeout = 30sec) || (if async=true && command sent to autopilot) -bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Request.msg deleted file mode 100644 index 0126c68115..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Request.msg +++ /dev/null @@ -1,5 +0,0 @@ -float64 latitude -float64 longitude -float64 altitude -float64 yaw -string vehicle_name diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Response.msg deleted file mode 100644 index 50358a928a..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetGPSPosition_Response.msg +++ /dev/null @@ -1,3 +0,0 @@ - -#Response : return success=true, (if async=false && if setpoint reached before timeout = 30sec) || (if async=true && command sent to autopilot) -bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.idl deleted file mode 100644 index 373b8638cd..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.idl +++ /dev/null @@ -1,30 +0,0 @@ -// generated from rosidl_adapter/resource/srv.idl.em -// with input from airsim_interfaces/srv/SetLocalPosition.srv -// generated code does not contain a copyright notice - - -module airsim_interfaces { - module srv { - @verbatim (language="comment", text= - "Request : expects position setpoint via x, y, z" "\n" - "Request : expects yaw setpoint via yaw (send yaw_valid=true)") - struct SetLocalPosition_Request { - double x; - - double y; - - double z; - - double yaw; - - string vehicle_name; - }; - @verbatim (language="comment", text= - "Response : success=true - (if async=false && if setpoint reached before timeout = 30sec) || (if async=true)") - struct SetLocalPosition_Response { - boolean success; - - string message; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.srv deleted file mode 100644 index f6293fc6e6..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition.srv +++ /dev/null @@ -1,11 +0,0 @@ -#Request : expects position setpoint via x, y, z -#Request : expects yaw setpoint via yaw (send yaw_valid=true) -float64 x -float64 y -float64 z -float64 yaw -string vehicle_name ---- -#Response : success=true - (if async=false && if setpoint reached before timeout = 30sec) || (if async=true) -bool success -string message \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Request.msg deleted file mode 100644 index a7e001a620..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Request.msg +++ /dev/null @@ -1,7 +0,0 @@ -#Request : expects position setpoint via x, y, z -#Request : expects yaw setpoint via yaw (send yaw_valid=true) -float64 x -float64 y -float64 z -float64 yaw -string vehicle_name diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Response.msg deleted file mode 100644 index 81c099d25d..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/SetLocalPosition_Response.msg +++ /dev/null @@ -1,4 +0,0 @@ - -#Response : success=true - (if async=false && if setpoint reached before timeout = 30sec) || (if async=true) -bool success -string message \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.idl deleted file mode 100644 index 28453017aa..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.idl +++ /dev/null @@ -1,15 +0,0 @@ -// generated from rosidl_adapter/resource/srv.idl.em -// with input from airsim_interfaces/srv/Takeoff.srv -// generated code does not contain a copyright notice - - -module airsim_interfaces { - module srv { - struct Takeoff_Request { - boolean wait_on_last_task; - }; - struct Takeoff_Response { - boolean success; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.srv deleted file mode 100644 index 55472170ea..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff.srv +++ /dev/null @@ -1,3 +0,0 @@ -bool wait_on_last_task ---- -bool success diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.idl b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.idl deleted file mode 100644 index 449fc56bab..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.idl +++ /dev/null @@ -1,17 +0,0 @@ -// generated from rosidl_adapter/resource/srv.idl.em -// with input from airsim_interfaces/srv/TakeoffGroup.srv -// generated code does not contain a copyright notice - - -module airsim_interfaces { - module srv { - struct TakeoffGroup_Request { - sequence vehicle_names; - - boolean wait_on_last_task; - }; - struct TakeoffGroup_Response { - boolean success; - }; - }; -}; diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.srv b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.srv deleted file mode 100644 index 1c900c14b8..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup.srv +++ /dev/null @@ -1,4 +0,0 @@ -string[] vehicle_names -bool wait_on_last_task ---- -bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Request.msg deleted file mode 100644 index bc7259465e..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Request.msg +++ /dev/null @@ -1,2 +0,0 @@ -string[] vehicle_names -bool wait_on_last_task diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Response.msg deleted file mode 100644 index 162f08df15..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/TakeoffGroup_Response.msg +++ /dev/null @@ -1,2 +0,0 @@ - -bool success \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Request.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Request.msg deleted file mode 100644 index 0fa8cd3fb8..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Request.msg +++ /dev/null @@ -1 +0,0 @@ -bool wait_on_last_task diff --git a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Response.msg b/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Response.msg deleted file mode 100644 index afff92900e..0000000000 --- a/ros2/install/airsim_interfaces/share/airsim_interfaces/srv/Takeoff_Response.msg +++ /dev/null @@ -1,2 +0,0 @@ - -bool success diff --git a/ros2/install/airsim_interfaces/share/ament_index/resource_index/package_run_dependencies/airsim_interfaces b/ros2/install/airsim_interfaces/share/ament_index/resource_index/package_run_dependencies/airsim_interfaces deleted file mode 100644 index 56d0687991..0000000000 --- a/ros2/install/airsim_interfaces/share/ament_index/resource_index/package_run_dependencies/airsim_interfaces +++ /dev/null @@ -1 +0,0 @@ -action_msgs;rosidl_default_runtime \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/ament_index/resource_index/parent_prefix_path/airsim_interfaces b/ros2/install/airsim_interfaces/share/ament_index/resource_index/parent_prefix_path/airsim_interfaces deleted file mode 100644 index dae8bb1730..0000000000 --- a/ros2/install/airsim_interfaces/share/ament_index/resource_index/parent_prefix_path/airsim_interfaces +++ /dev/null @@ -1 +0,0 @@ -/home/alon/AirSimRos/ros/install/airsim_interfaces:/opt/ros/foxy \ No newline at end of file diff --git a/ros2/install/airsim_interfaces/share/ament_index/resource_index/rosidl_interfaces/airsim_interfaces b/ros2/install/airsim_interfaces/share/ament_index/resource_index/rosidl_interfaces/airsim_interfaces deleted file mode 100644 index 814e20a43c..0000000000 --- a/ros2/install/airsim_interfaces/share/ament_index/resource_index/rosidl_interfaces/airsim_interfaces +++ /dev/null @@ -1,46 +0,0 @@ -msg/Altimeter.idl -msg/Altimeter.msg -msg/CarControls.idl -msg/CarControls.msg -msg/CarState.idl -msg/CarState.msg -msg/Environment.idl -msg/Environment.msg -msg/GPSYaw.idl -msg/GPSYaw.msg -msg/GimbalAngleEulerCmd.idl -msg/GimbalAngleEulerCmd.msg -msg/GimbalAngleQuatCmd.idl -msg/GimbalAngleQuatCmd.msg -msg/VelCmd.idl -msg/VelCmd.msg -msg/VelCmdGroup.idl -msg/VelCmdGroup.msg -srv/Land.idl -srv/Land.srv -srv/LandGroup.idl -srv/LandGroup.srv -srv/LandGroup_Request.msg -srv/LandGroup_Response.msg -srv/Land_Request.msg -srv/Land_Response.msg -srv/Reset.idl -srv/Reset.srv -srv/Reset_Request.msg -srv/Reset_Response.msg -srv/SetGPSPosition.idl -srv/SetGPSPosition.srv -srv/SetGPSPosition_Request.msg -srv/SetGPSPosition_Response.msg -srv/SetLocalPosition.idl -srv/SetLocalPosition.srv -srv/SetLocalPosition_Request.msg -srv/SetLocalPosition_Response.msg -srv/Takeoff.idl -srv/Takeoff.srv -srv/TakeoffGroup.idl -srv/TakeoffGroup.srv -srv/TakeoffGroup_Request.msg -srv/TakeoffGroup_Response.msg -srv/Takeoff_Request.msg -srv/Takeoff_Response.msg \ No newline at end of file diff --git a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.bash b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.bash deleted file mode 100644 index abf3e56507..0000000000 --- a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.bash +++ /dev/null @@ -1,39 +0,0 @@ -# generated from colcon_bash/shell/template/package.bash.em - -# This script extends the environment for this package. - -# a bash script is able to determine its own path if necessary -if [ -z "$COLCON_CURRENT_PREFIX" ]; then - # the prefix is two levels up from the package specific share directory - _colcon_package_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." > /dev/null && pwd)" -else - _colcon_package_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" -fi - -# function to source another script with conditional trace output -# first argument: the path of the script -# additional arguments: arguments to the script -_colcon_package_bash_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$@" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# source sh script of this package -_colcon_package_bash_source_script "$_colcon_package_bash_COLCON_CURRENT_PREFIX/share/airsim_ros_pkgs/package.sh" - -# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts -COLCON_CURRENT_PREFIX="$_colcon_package_bash_COLCON_CURRENT_PREFIX" - -# source bash hooks -_colcon_package_bash_source_script "$COLCON_CURRENT_PREFIX/share/airsim_ros_pkgs/local_setup.bash" - -unset COLCON_CURRENT_PREFIX - -unset _colcon_package_bash_source_script -unset _colcon_package_bash_COLCON_CURRENT_PREFIX diff --git a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.dsv b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.dsv deleted file mode 100644 index ce5073f4ee..0000000000 --- a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.dsv +++ /dev/null @@ -1,5 +0,0 @@ -source;share/airsim_ros_pkgs/local_setup.bash -source;share/airsim_ros_pkgs/local_setup.dsv -source;share/airsim_ros_pkgs/local_setup.ps1 -source;share/airsim_ros_pkgs/local_setup.sh -source;share/airsim_ros_pkgs/local_setup.zsh diff --git a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.ps1 b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.ps1 deleted file mode 100644 index 1c91e27b7a..0000000000 --- a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.ps1 +++ /dev/null @@ -1,64 +0,0 @@ -# generated from colcon_powershell/shell/template/package.ps1.em - -# function to prepend a value to a variable -# which uses colons as separators -# duplicates as well as trailing separators are avoided -# first argument: the name of the result variable -# second argument: the value to be prepended -function colcon_prepend_unique_value { - param ( - $_listname, - $_value - ) - - # get values from variable - if (Test-Path Env:$_listname) { - $_values=(Get-Item env:$_listname).Value - } else { - $_values="" - } - # start with the new value - $_all_values="$_value" - # iterate over existing values in the variable - if ($_values) { - $_values.Split(";") | ForEach { - # not an empty string - if ($_) { - # not a duplicate of _value - if ($_ -ne $_value) { - # keep non-duplicate values - $_all_values="${_all_values};$_" - } - } - } - } - # export the updated variable - Set-Item env:\$_listname -Value "$_all_values" -} - -# function to source another script with conditional trace output -# first argument: the path of the script -# additional arguments: arguments to the script -function colcon_package_source_powershell_script { - param ( - $_colcon_package_source_powershell_script - ) - # source script with conditional trace output - if (Test-Path $_colcon_package_source_powershell_script) { - if ($env:COLCON_TRACE) { - echo ". '$_colcon_package_source_powershell_script'" - } - . "$_colcon_package_source_powershell_script" - } else { - Write-Error "not found: '$_colcon_package_source_powershell_script'" - } -} - - -# a powershell script is able to determine its own path -# the prefix is two levels up from the package specific share directory -$env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.FullName - -colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/airsim_ros_pkgs/local_setup.ps1" - -Remove-Item Env:\COLCON_CURRENT_PREFIX diff --git a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.sh b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.sh deleted file mode 100644 index 1d51db8d23..0000000000 --- a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.sh +++ /dev/null @@ -1,86 +0,0 @@ -# generated from colcon_core/shell/template/package.sh.em - -# This script extends the environment for this package. - -# function to prepend a value to a variable -# which uses colons as separators -# duplicates as well as trailing separators are avoided -# first argument: the name of the result variable -# second argument: the value to be prepended -_colcon_prepend_unique_value() { - # arguments - _listname="$1" - _value="$2" - - # get values from variable - eval _values=\"\$$_listname\" - # backup the field separator - _colcon_prepend_unique_value_IFS=$IFS - IFS=":" - # start with the new value - _all_values="$_value" - # workaround SH_WORD_SPLIT not being set in zsh - if [ "$(command -v colcon_zsh_convert_to_array)" ]; then - colcon_zsh_convert_to_array _values - fi - # iterate over existing values in the variable - for _item in $_values; do - # ignore empty strings - if [ -z "$_item" ]; then - continue - fi - # ignore duplicates of _value - if [ "$_item" = "$_value" ]; then - continue - fi - # keep non-duplicate values - _all_values="$_all_values:$_item" - done - unset _item - # restore the field separator - IFS=$_colcon_prepend_unique_value_IFS - unset _colcon_prepend_unique_value_IFS - # export the updated variable - eval export $_listname=\"$_all_values\" - unset _all_values - unset _values - - unset _value - unset _listname -} - -# since a plain shell script can't determine its own path when being sourced -# either use the provided COLCON_CURRENT_PREFIX -# or fall back to the build time prefix (if it exists) -_colcon_package_sh_COLCON_CURRENT_PREFIX="/home/alon/AirSimRos/ros/install/airsim_ros_pkgs" -if [ -z "$COLCON_CURRENT_PREFIX" ]; then - if [ ! -d "$_colcon_package_sh_COLCON_CURRENT_PREFIX" ]; then - echo "The build time path \"$_colcon_package_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 - unset _colcon_package_sh_COLCON_CURRENT_PREFIX - return 1 - fi - COLCON_CURRENT_PREFIX="$_colcon_package_sh_COLCON_CURRENT_PREFIX" -fi -unset _colcon_package_sh_COLCON_CURRENT_PREFIX - -# function to source another script with conditional trace output -# first argument: the path of the script -# additional arguments: arguments to the script -_colcon_package_sh_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$@" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# source sh hooks -_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_ros_pkgs/local_setup.sh" - -unset _colcon_package_sh_source_script -unset COLCON_CURRENT_PREFIX - -# do not unset _colcon_prepend_unique_value since it might be used by non-primary shell hooks diff --git a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.zsh b/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.zsh deleted file mode 100644 index b95d7cc5a6..0000000000 --- a/ros2/install/airsim_ros_pkgs/share/airsim_ros_pkgs/package.zsh +++ /dev/null @@ -1,50 +0,0 @@ -# generated from colcon_zsh/shell/template/package.zsh.em - -# This script extends the environment for this package. - -# a zsh script is able to determine its own path if necessary -if [ -z "$COLCON_CURRENT_PREFIX" ]; then - # the prefix is two levels up from the package specific share directory - _colcon_package_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)" -else - _colcon_package_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" -fi - -# function to source another script with conditional trace output -# first argument: the path of the script -# additional arguments: arguments to the script -_colcon_package_zsh_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$@" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# function to convert array-like strings into arrays -# to workaround SH_WORD_SPLIT not being set -colcon_zsh_convert_to_array() { - local _listname=$1 - local _dollar="$" - local _split="{=" - local _to_array="(\"$_dollar$_split$_listname}\")" - eval $_listname=$_to_array -} - -# source sh script of this package -_colcon_package_zsh_source_script "$_colcon_package_zsh_COLCON_CURRENT_PREFIX/share/airsim_ros_pkgs/package.sh" -unset convert_zsh_to_array - -# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts -COLCON_CURRENT_PREFIX="$_colcon_package_zsh_COLCON_CURRENT_PREFIX" - -# source zsh hooks -_colcon_package_zsh_source_script "$COLCON_CURRENT_PREFIX/share/airsim_ros_pkgs/local_setup.zsh" - -unset COLCON_CURRENT_PREFIX - -unset _colcon_package_zsh_source_script -unset _colcon_package_zsh_COLCON_CURRENT_PREFIX diff --git a/ros2/install/local_setup.bash b/ros2/install/local_setup.bash deleted file mode 100644 index efd5f8c9e2..0000000000 --- a/ros2/install/local_setup.bash +++ /dev/null @@ -1,107 +0,0 @@ -# generated from colcon_bash/shell/template/prefix.bash.em - -# This script extends the environment with all packages contained in this -# prefix path. - -# a bash script is able to determine its own path if necessary -if [ -z "$COLCON_CURRENT_PREFIX" ]; then - _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" -else - _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" -fi - -# function to prepend a value to a variable -# which uses colons as separators -# duplicates as well as trailing separators are avoided -# first argument: the name of the result variable -# second argument: the value to be prepended -_colcon_prefix_bash_prepend_unique_value() { - # arguments - _listname="$1" - _value="$2" - - # get values from variable - eval _values=\"\$$_listname\" - # backup the field separator - _colcon_prefix_bash_prepend_unique_value_IFS="$IFS" - IFS=":" - # start with the new value - _all_values="$_value" - # iterate over existing values in the variable - for _item in $_values; do - # ignore empty strings - if [ -z "$_item" ]; then - continue - fi - # ignore duplicates of _value - if [ "$_item" = "$_value" ]; then - continue - fi - # keep non-duplicate values - _all_values="$_all_values:$_item" - done - unset _item - # restore the field separator - IFS="$_colcon_prefix_bash_prepend_unique_value_IFS" - unset _colcon_prefix_bash_prepend_unique_value_IFS - # export the updated variable - eval export $_listname=\"$_all_values\" - unset _all_values - unset _values - - unset _value - unset _listname -} - -# add this prefix to the COLCON_PREFIX_PATH -_colcon_prefix_bash_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX" -unset _colcon_prefix_bash_prepend_unique_value - -# check environment variable for custom Python executable -if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then - if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then - echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" - return 1 - fi - _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" -else - # try the Python executable known at configure time - _colcon_python_executable="/usr/bin/python3" - # if it doesn't exist try a fall back - if [ ! -f "$_colcon_python_executable" ]; then - if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then - echo "error: unable to find python3 executable" - return 1 - fi - _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` - fi -fi - -# function to source another script with conditional trace output -# first argument: the path of the script -_colcon_prefix_sh_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$1" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# get all commands in topological order -_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh bash)" -unset _colcon_python_executable -if [ -n "$COLCON_TRACE" ]; then - echo "Execute generated script:" - echo "<<<" - echo "${_colcon_ordered_commands}" - echo ">>>" -fi -eval "${_colcon_ordered_commands}" -unset _colcon_ordered_commands - -unset _colcon_prefix_sh_source_script - -unset _colcon_prefix_bash_COLCON_CURRENT_PREFIX diff --git a/ros2/install/local_setup.ps1 b/ros2/install/local_setup.ps1 deleted file mode 100644 index 229ea75370..0000000000 --- a/ros2/install/local_setup.ps1 +++ /dev/null @@ -1,53 +0,0 @@ -# generated from colcon_powershell/shell/template/prefix.ps1.em - -# This script extends the environment with all packages contained in this -# prefix path. - -# check environment variable for custom Python executable -if ($env:COLCON_PYTHON_EXECUTABLE) { - if (!(Test-Path "$env:COLCON_PYTHON_EXECUTABLE" -PathType Leaf)) { - echo "error: COLCON_PYTHON_EXECUTABLE '$env:COLCON_PYTHON_EXECUTABLE' doesn't exist" - exit 1 - } - $_colcon_python_executable="$env:COLCON_PYTHON_EXECUTABLE" -} else { - # use the Python executable known at configure time - $_colcon_python_executable="/usr/bin/python3" - # if it doesn't exist try a fall back - if (!(Test-Path "$_colcon_python_executable" -PathType Leaf)) { - if (!(Get-Command "python3" -ErrorAction SilentlyContinue)) { - echo "error: unable to find python3 executable" - exit 1 - } - $_colcon_python_executable="python3" - } -} - -# function to source another script with conditional trace output -# first argument: the path of the script -function _colcon_prefix_powershell_source_script { - param ( - $_colcon_prefix_powershell_source_script_param - ) - # source script with conditional trace output - if (Test-Path $_colcon_prefix_powershell_source_script_param) { - if ($env:COLCON_TRACE) { - echo ". '$_colcon_prefix_powershell_source_script_param'" - } - . "$_colcon_prefix_powershell_source_script_param" - } else { - Write-Error "not found: '$_colcon_prefix_powershell_source_script_param'" - } -} - -# get all commands in topological order -$_colcon_ordered_commands = & "$_colcon_python_executable" "$(Split-Path $PSCommandPath -Parent)/_local_setup_util_ps1.py" ps1 - -# execute all commands in topological order -if ($env:COLCON_TRACE) { - echo "Execute generated script:" - echo "<<<" - $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Write-Output - echo ">>>" -} -$_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Invoke-Expression diff --git a/ros2/install/local_setup.sh b/ros2/install/local_setup.sh deleted file mode 100644 index 635c25a2a4..0000000000 --- a/ros2/install/local_setup.sh +++ /dev/null @@ -1,114 +0,0 @@ -# generated from colcon_core/shell/template/prefix.sh.em - -# This script extends the environment with all packages contained in this -# prefix path. - -# since a plain shell script can't determine its own path when being sourced -# either use the provided COLCON_CURRENT_PREFIX -# or fall back to the build time prefix (if it exists) -_colcon_prefix_sh_COLCON_CURRENT_PREFIX="/home/alon/AirSimRos/ros/install" -if [ -z "$COLCON_CURRENT_PREFIX" ]; then - if [ ! -d "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" ]; then - echo "The build time path \"$_colcon_prefix_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 - unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX - return 1 - fi -else - _colcon_prefix_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" -fi - -# function to prepend a value to a variable -# which uses colons as separators -# duplicates as well as trailing separators are avoided -# first argument: the name of the result variable -# second argument: the value to be prepended -_colcon_prefix_sh_prepend_unique_value() { - # arguments - _listname="$1" - _value="$2" - - # get values from variable - eval _values=\"\$$_listname\" - # backup the field separator - _colcon_prefix_sh_prepend_unique_value_IFS="$IFS" - IFS=":" - # start with the new value - _all_values="$_value" - # iterate over existing values in the variable - for _item in $_values; do - # ignore empty strings - if [ -z "$_item" ]; then - continue - fi - # ignore duplicates of _value - if [ "$_item" = "$_value" ]; then - continue - fi - # keep non-duplicate values - _all_values="$_all_values:$_item" - done - unset _item - # restore the field separator - IFS="$_colcon_prefix_sh_prepend_unique_value_IFS" - unset _colcon_prefix_sh_prepend_unique_value_IFS - # export the updated variable - eval export $_listname=\"$_all_values\" - unset _all_values - unset _values - - unset _value - unset _listname -} - -# add this prefix to the COLCON_PREFIX_PATH -_colcon_prefix_sh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" -unset _colcon_prefix_sh_prepend_unique_value - -# check environment variable for custom Python executable -if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then - if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then - echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" - return 1 - fi - _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" -else - # try the Python executable known at configure time - _colcon_python_executable="/usr/bin/python3" - # if it doesn't exist try a fall back - if [ ! -f "$_colcon_python_executable" ]; then - if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then - echo "error: unable to find python3 executable" - return 1 - fi - _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` - fi -fi - -# function to source another script with conditional trace output -# first argument: the path of the script -_colcon_prefix_sh_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$1" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# get all commands in topological order -_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh)" -unset _colcon_python_executable -if [ -n "$COLCON_TRACE" ]; then - echo "Execute generated script:" - echo "<<<" - echo "${_colcon_ordered_commands}" - echo ">>>" -fi -eval "${_colcon_ordered_commands}" -unset _colcon_ordered_commands - -unset _colcon_prefix_sh_source_script - -unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX diff --git a/ros2/install/local_setup.zsh b/ros2/install/local_setup.zsh deleted file mode 100644 index f7a8d904f2..0000000000 --- a/ros2/install/local_setup.zsh +++ /dev/null @@ -1,120 +0,0 @@ -# generated from colcon_zsh/shell/template/prefix.zsh.em - -# This script extends the environment with all packages contained in this -# prefix path. - -# a zsh script is able to determine its own path if necessary -if [ -z "$COLCON_CURRENT_PREFIX" ]; then - _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" -else - _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" -fi - -# function to convert array-like strings into arrays -# to workaround SH_WORD_SPLIT not being set -_colcon_prefix_zsh_convert_to_array() { - local _listname=$1 - local _dollar="$" - local _split="{=" - local _to_array="(\"$_dollar$_split$_listname}\")" - eval $_listname=$_to_array -} - -# function to prepend a value to a variable -# which uses colons as separators -# duplicates as well as trailing separators are avoided -# first argument: the name of the result variable -# second argument: the value to be prepended -_colcon_prefix_zsh_prepend_unique_value() { - # arguments - _listname="$1" - _value="$2" - - # get values from variable - eval _values=\"\$$_listname\" - # backup the field separator - _colcon_prefix_zsh_prepend_unique_value_IFS="$IFS" - IFS=":" - # start with the new value - _all_values="$_value" - # workaround SH_WORD_SPLIT not being set - _colcon_prefix_zsh_convert_to_array _values - # iterate over existing values in the variable - for _item in $_values; do - # ignore empty strings - if [ -z "$_item" ]; then - continue - fi - # ignore duplicates of _value - if [ "$_item" = "$_value" ]; then - continue - fi - # keep non-duplicate values - _all_values="$_all_values:$_item" - done - unset _item - # restore the field separator - IFS="$_colcon_prefix_zsh_prepend_unique_value_IFS" - unset _colcon_prefix_zsh_prepend_unique_value_IFS - # export the updated variable - eval export $_listname=\"$_all_values\" - unset _all_values - unset _values - - unset _value - unset _listname -} - -# add this prefix to the COLCON_PREFIX_PATH -_colcon_prefix_zsh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX" -unset _colcon_prefix_zsh_prepend_unique_value -unset _colcon_prefix_zsh_convert_to_array - -# check environment variable for custom Python executable -if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then - if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then - echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" - return 1 - fi - _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" -else - # try the Python executable known at configure time - _colcon_python_executable="/usr/bin/python3" - # if it doesn't exist try a fall back - if [ ! -f "$_colcon_python_executable" ]; then - if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then - echo "error: unable to find python3 executable" - return 1 - fi - _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` - fi -fi - -# function to source another script with conditional trace output -# first argument: the path of the script -_colcon_prefix_sh_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$1" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# get all commands in topological order -_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh zsh)" -unset _colcon_python_executable -if [ -n "$COLCON_TRACE" ]; then - echo "Execute generated script:" - echo "<<<" - echo "${_colcon_ordered_commands}" - echo ">>>" -fi -eval "${_colcon_ordered_commands}" -unset _colcon_ordered_commands - -unset _colcon_prefix_sh_source_script - -unset _colcon_prefix_zsh_COLCON_CURRENT_PREFIX diff --git a/ros2/install/setup.bash b/ros2/install/setup.bash deleted file mode 100644 index b19cab0c50..0000000000 --- a/ros2/install/setup.bash +++ /dev/null @@ -1,31 +0,0 @@ -# generated from colcon_bash/shell/template/prefix_chain.bash.em - -# This script extends the environment with the environment of other prefix -# paths which were sourced when this file was generated as well as all packages -# contained in this prefix path. - -# function to source another script with conditional trace output -# first argument: the path of the script -_colcon_prefix_chain_bash_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$1" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# source chained prefixes -# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script -COLCON_CURRENT_PREFIX="/opt/ros/foxy" -_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" - -# source this prefix -# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script -COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" -_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" - -unset COLCON_CURRENT_PREFIX -unset _colcon_prefix_chain_bash_source_script diff --git a/ros2/install/setup.ps1 b/ros2/install/setup.ps1 deleted file mode 100644 index 412726f37d..0000000000 --- a/ros2/install/setup.ps1 +++ /dev/null @@ -1,29 +0,0 @@ -# generated from colcon_powershell/shell/template/prefix_chain.ps1.em - -# This script extends the environment with the environment of other prefix -# paths which were sourced when this file was generated as well as all packages -# contained in this prefix path. - -# function to source another script with conditional trace output -# first argument: the path of the script -function _colcon_prefix_chain_powershell_source_script { - param ( - $_colcon_prefix_chain_powershell_source_script_param - ) - # source script with conditional trace output - if (Test-Path $_colcon_prefix_chain_powershell_source_script_param) { - if ($env:COLCON_TRACE) { - echo ". '$_colcon_prefix_chain_powershell_source_script_param'" - } - . "$_colcon_prefix_chain_powershell_source_script_param" - } else { - Write-Error "not found: '$_colcon_prefix_chain_powershell_source_script_param'" - } -} - -# source chained prefixes -_colcon_prefix_chain_powershell_source_script "/opt/ros/foxy\local_setup.ps1" - -# source this prefix -$env:COLCON_CURRENT_PREFIX=(Split-Path $PSCommandPath -Parent) -_colcon_prefix_chain_powershell_source_script "$env:COLCON_CURRENT_PREFIX\local_setup.ps1" diff --git a/ros2/install/setup.sh b/ros2/install/setup.sh deleted file mode 100644 index fbde867030..0000000000 --- a/ros2/install/setup.sh +++ /dev/null @@ -1,45 +0,0 @@ -# generated from colcon_core/shell/template/prefix_chain.sh.em - -# This script extends the environment with the environment of other prefix -# paths which were sourced when this file was generated as well as all packages -# contained in this prefix path. - -# since a plain shell script can't determine its own path when being sourced -# either use the provided COLCON_CURRENT_PREFIX -# or fall back to the build time prefix (if it exists) -_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX=/home/alon/AirSimRos/ros/install -if [ ! -z "$COLCON_CURRENT_PREFIX" ]; then - _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" -elif [ ! -d "$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" ]; then - echo "The build time path \"$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 - unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX - return 1 -fi - -# function to source another script with conditional trace output -# first argument: the path of the script -_colcon_prefix_chain_sh_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$1" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# source chained prefixes -# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script -COLCON_CURRENT_PREFIX="/opt/ros/foxy" -_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" - - -# source this prefix -# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script -COLCON_CURRENT_PREFIX="$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" -_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" - -unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX -unset _colcon_prefix_chain_sh_source_script -unset COLCON_CURRENT_PREFIX diff --git a/ros2/install/setup.zsh b/ros2/install/setup.zsh deleted file mode 100644 index a98672a90b..0000000000 --- a/ros2/install/setup.zsh +++ /dev/null @@ -1,31 +0,0 @@ -# generated from colcon_zsh/shell/template/prefix_chain.zsh.em - -# This script extends the environment with the environment of other prefix -# paths which were sourced when this file was generated as well as all packages -# contained in this prefix path. - -# function to source another script with conditional trace output -# first argument: the path of the script -_colcon_prefix_chain_zsh_source_script() { - if [ -f "$1" ]; then - if [ -n "$COLCON_TRACE" ]; then - echo ". \"$1\"" - fi - . "$1" - else - echo "not found: \"$1\"" 1>&2 - fi -} - -# source chained prefixes -# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script -COLCON_CURRENT_PREFIX="/opt/ros/foxy" -_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" - -# source this prefix -# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script -COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" -_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" - -unset COLCON_CURRENT_PREFIX -unset _colcon_prefix_chain_zsh_source_script diff --git a/ros2/log/COLCON_IGNORE b/ros2/log/COLCON_IGNORE deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ros2/log/latest b/ros2/log/latest deleted file mode 120000 index b57d247c77..0000000000 --- a/ros2/log/latest +++ /dev/null @@ -1 +0,0 @@ -latest_build \ No newline at end of file diff --git a/ros2/log/latest_build b/ros2/log/latest_build deleted file mode 120000 index 8680d25e83..0000000000 --- a/ros2/log/latest_build +++ /dev/null @@ -1 +0,0 @@ -build_2021-08-12_08-31-56 \ No newline at end of file From c95f50c9350bd65524ba8691279f2aa6c1b9ecfc Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 00:46:48 -0700 Subject: [PATCH 050/123] - remove folder from tracking --- ros2/src/log/COLCON_IGNORE | 0 ros2/src/log/latest | 1 - ros2/src/log/latest_list | 1 - 3 files changed, 2 deletions(-) delete mode 100644 ros2/src/log/COLCON_IGNORE delete mode 120000 ros2/src/log/latest delete mode 120000 ros2/src/log/latest_list diff --git a/ros2/src/log/COLCON_IGNORE b/ros2/src/log/COLCON_IGNORE deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ros2/src/log/latest b/ros2/src/log/latest deleted file mode 120000 index 17156673ec..0000000000 --- a/ros2/src/log/latest +++ /dev/null @@ -1 +0,0 @@ -latest_list \ No newline at end of file diff --git a/ros2/src/log/latest_list b/ros2/src/log/latest_list deleted file mode 120000 index 37fb47d3a0..0000000000 --- a/ros2/src/log/latest_list +++ /dev/null @@ -1 +0,0 @@ -list_2021-08-12_08-17-18 \ No newline at end of file From a2bc00c83eba39d025f26ec7951f32bcd7e8e4ef Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 00:58:12 -0700 Subject: [PATCH 051/123] - remove file from tracking --- .../src/airsim_ros_pkgs/CMakeLists (copy).txt | 149 ------------------ 1 file changed, 149 deletions(-) delete mode 100644 ros2/src/airsim_ros_pkgs/CMakeLists (copy).txt diff --git a/ros2/src/airsim_ros_pkgs/CMakeLists (copy).txt b/ros2/src/airsim_ros_pkgs/CMakeLists (copy).txt deleted file mode 100644 index 06c2f3d003..0000000000 --- a/ros2/src/airsim_ros_pkgs/CMakeLists (copy).txt +++ /dev/null @@ -1,149 +0,0 @@ -cmake_minimum_required(VERSION 3.5) -project(airsim_ros_pkgs) - -# Add support for C++11 -#if(NOT CMAKE_CXX_STANDARD) -#set(CMAKE_CXX_STANDARD 11) -#endif() - -find_package(rclcpp REQUIRED) -find_package(nav_msgs REQUIRED) -find_package(geographic_msgs REQUIRED) -find_package(std_srvs REQUIRED) -find_package(tf2_ros REQUIRED) -find_package(tf2_sensor_msgs REQUIRED) -find_package(rclpy REQUIRED) -find_package(tf2 REQUIRED) -find_package(image_transport REQUIRED) -find_package(geometry_msgs REQUIRED) -find_package(cv_bridge REQUIRED) -find_package(tf2_geometry_msgs REQUIRED) -find_package(sensor_msgs REQUIRED) -find_package(mavros_msgs REQUIRED) -find_package(rosidl_default_generators REQUIRED) -find_package(ament_cmake REQUIRED) -find_package(std_msgs REQUIRED) -find_package(rosidl_typesupport_cpp REQUIRED) - -rosidl_generate_interfaces(${PROJECT_NAME} "msg/GimbalAngleEulerCmd.msg" - "msg/GimbalAngleQuatCmd.msg" "msg/GPSYaw.msg" "msg/VelCmd.msg" - "msg/VelCmdGroup.msg" "msg/CarControls.msg" "msg/CarState.msg" - "msg/Altimeter.msg" "msg/Environment.msg" "srv/SetGPSPosition.srv" - "srv/Takeoff.srv" "srv/TakeoffGroup.srv" "srv/Land.srv" "srv/LandGroup.srv" - "srv/Reset.srv" "srv/SetLocalPosition.srv" - DEPENDENCIES builtin_interfaces nav_msgs geographic_msgs std_srvs - tf2_sensor_msgs geometry_msgs tf2_geometry_msgs sensor_msgs mavros_msgs std_msgs "rosidl_typesupport_cpp") - - - -set(AIRSIM_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../) - -add_subdirectory("${AIRSIM_ROOT}/cmake/rpclib_wrapper" rpclib_wrapper) -add_subdirectory("${AIRSIM_ROOT}/cmake/AirLib" AirLib) -add_subdirectory("${AIRSIM_ROOT}/cmake/MavLinkCom" MavLinkCom) - -set(CMAKE_CXX_STANDARD 11) -set(CXX_EXP_LIB - "-nostdinc++ -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -nodefaultlibs --l/usr/lib/x86_64-linux-gnu/libc++.so -l/usr/lib/x86_64-linux-gnu/libc++abi.so --lm -lc -lgcc_s -lgcc --lstdc++fs -fmax-errors=10 -Wnoexcept -Wstrict-null-sentinel") -set(RPC_LIB_INCLUDES " ${AIRSIM_ROOT}/external/rpclib/rpclib-2.3.0/include") -set(RPC_LIB rpc) -message(STATUS "found RPC_LIB_INCLUDES=${RPC_LIB_INCLUDES}") - -set(INCLUDE_DIRS include ${rclcpp_INCLUDE_DIRS} ${nav_msgs_INCLUDE_DIRS} - ${geographic_msgs_INCLUDE_DIRS} ${std_srvs_INCLUDE_DIRS} ${tf2_ros_INCLUDE_DIRS} - ${tf2_sensor_msgs_INCLUDE_DIRS} ${rclpy_INCLUDE_DIRS} ${tf2_INCLUDE_DIRS} - ${image_transport_INCLUDE_DIRS} ${geometry_msgs_INCLUDE_DIRS} - ${cv_bridge_INCLUDE_DIRS} ${tf2_geometry_msgs_INCLUDE_DIRS} - ${sensor_msgs_INCLUDE_DIRS} ${mavros_msgs_INCLUDE_DIRS} - ${rosidl_default_generators_INCLUDE_DIRS} ${ament_cmake_INCLUDE_DIRS} - ${std_msgs_INCLUDE_DIRS} - ${AIRSIM_ROOT}/AirLib/deps/eigen3 - ${AIRSIM_ROOT}/AirLib/include - ${RPC_LIB_INCLUDES} - ${AIRSIM_ROOT}/MavLinkCom/include - ${AIRSIM_ROOT}/MavLinkCom/common_utils - ${OpenCV_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS}) -include_directories(${INCLUDE_DIRS}) - -set(LIBRARY_DIRS ${rclcpp_LIBRARY_DIRS} ${nav_msgs_LIBRARY_DIRS} - ${geographic_msgs_LIBRARY_DIRS} ${std_srvs_LIBRARY_DIRS} ${tf2_ros_LIBRARY_DIRS} - ${tf2_sensor_msgs_LIBRARY_DIRS} ${rclpy_LIBRARY_DIRS} ${tf2_LIBRARY_DIRS} - ${image_transport_LIBRARY_DIRS} ${geometry_msgs_LIBRARY_DIRS} - ${cv_bridge_LIBRARY_DIRS} ${tf2_geometry_msgs_LIBRARY_DIRS} - ${sensor_msgs_LIBRARY_DIRS} ${mavros_msgs_LIBRARY_DIRS} - ${rosidl_default_generators_LIBRARY_DIRS} ${ament_cmake_LIBRARY_DIRS} - ${std_msgs_LIBRARY_DIRS}) - -link_directories(${LIBRARY_DIRS}) - -set(LIBS ${rclcpp_LIBRARIES} ${nav_msgs_LIBRARIES} ${geographic_msgs_LIBRARIES} - ${std_srvs_LIBRARIES} ${tf2_ros_LIBRARIES} ${tf2_sensor_msgs_LIBRARIES} - ${rclpy_LIBRARIES} ${tf2_LIBRARIES} ${image_transport_LIBRARIES} - ${geometry_msgs_LIBRARIES} ${cv_bridge_LIBRARIES} ${tf2_geometry_msgs_LIBRARIES} - ${sensor_msgs_LIBRARIES} ${mavros_msgs_LIBRARIES} - ${rosidl_default_generators_LIBRARIES} ${ament_cmake_LIBRARIES} - ${std_msgs_LIBRARIES}) - - - - -find_package(Boost REQUIRED) -find_package(OpenCV REQUIRED) - -add_library(airsim_settings_parser src/airsim_settings_parser.cpp) -target_link_libraries(airsim_settings_parser ${LIBS} AirLib) - -add_library(pd_position_controller_simple src/pd_position_controller_simple.cpp) -target_link_libraries(pd_position_controller_simple ${LIBS} AirLib) - -add_library(airsim_ros src/airsim_ros_wrapper.cpp) -target_link_libraries(airsim_ros ${LIBS} ${OpenCV_LIBS} yaml-cpp AirLib - airsim_settings_parser) - -add_executable(airsim_node src/airsim_node.cpp) -target_link_libraries(airsim_node airsim_ros ${LIBS} AirLib) - -add_executable(pd_position_controller_simple_node - src/pd_position_controller_simple_node.cpp) -target_link_libraries(pd_position_controller_simple_node - pd_position_controller_simple airsim_ros ${LIBS} AirLib) - -install(TARGETS airsim_node pd_position_controller_simple_node - DESTINATION lib/${PROJECT_NAME}) - -install(TARGETS airsim_ros pd_position_controller_simple - ARCHIVE - DESTINATION lib - LIBRARY - DESTINATION lib) - -install(FILES README.md DESTINATION share/${PROJECT_NAME}) - -install(DIRECTORY launch rviz DESTINATION share/${PROJECT_NAME}) - -ament_export_dependencies(rclcpp) -ament_export_dependencies(nav_msgs) -ament_export_dependencies(geographic_msgs) -ament_export_dependencies(std_srvs) -ament_export_dependencies(tf2_ros) -ament_export_dependencies(tf2_sensor_msgs) -ament_export_dependencies(rclpy) -ament_export_dependencies(tf2) -ament_export_dependencies(image_transport) -ament_export_dependencies(geometry_msgs) -ament_export_dependencies(cv_bridge) -ament_export_dependencies(tf2_geometry_msgs) -ament_export_dependencies(sensor_msgs) -ament_export_dependencies(mavros_msgs) -ament_export_dependencies(rosidl_default_generators) -ament_export_dependencies(ament_cmake) -ament_export_dependencies(std_msgs) -ament_export_include_directories(${INCLUDE_DIRS}) -ament_export_libraries(airsim_settings_parser pd_position_controller_simple - airsim_ros)# ${LIBS}) - -ament_package() From 5fb70538df7956a52ad4c3abc4d0531d7bc0c603 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 00:58:38 -0700 Subject: [PATCH 052/123] - update gitignore --- .gitignore | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 1aaeb80d90..dc2606f195 100644 --- a/.gitignore +++ b/.gitignore @@ -382,11 +382,8 @@ ros/.catkin_workspace ros/src/CMakeLists.txt # ROS2 -ros2/.catkin_tools/ -ros/devel/ -ros/logs/ -ros/.catkin_workspace -ros/src/CMakeLists.txt +ros2/install/ +ros2/log/ # docs docs/README.md From 672cd52494ec26ee5ac427c893cb8c9513ffe530 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 01:00:29 -0700 Subject: [PATCH 053/123] - remove folder from tracking --- ros2/src/airsim_interfaces/example_interfaces | 1 - 1 file changed, 1 deletion(-) delete mode 160000 ros2/src/airsim_interfaces/example_interfaces diff --git a/ros2/src/airsim_interfaces/example_interfaces b/ros2/src/airsim_interfaces/example_interfaces deleted file mode 160000 index ae3df08ac1..0000000000 --- a/ros2/src/airsim_interfaces/example_interfaces +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ae3df08ac12cea293f53520c7c7dc67cb0cf5355 From b0ecd0c53603aa27d62fcddf83894b21376847c5 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 01:57:36 -0700 Subject: [PATCH 054/123] - add airsim_with_simple_PD_position_controller lauch --- ...th_simple_PD_position_controller.launch.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch.py diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch.py b/ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch.py new file mode 100644 index 0000000000..55ce609470 --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch.py @@ -0,0 +1,30 @@ +import os + +from launch import LaunchDescription +from launch.actions import IncludeLaunchDescription +from launch.launch_description_sources import PythonLaunchDescriptionSource +from ament_index_python.packages import get_package_share_directory + + +def generate_launch_description(): + ld = LaunchDescription([ + IncludeLaunchDescription( + PythonLaunchDescriptionSource( + os.path.join(get_package_share_directory( + 'airsim_ros_pkgs'), 'launch/airsim_node.launch.py') + ) + ), + IncludeLaunchDescription( + PythonLaunchDescriptionSource( + os.path.join(get_package_share_directory( + 'airsim_ros_pkgs'), 'launch/dynamic_constraints.launch.py') + ) + ), + IncludeLaunchDescription( + PythonLaunchDescriptionSource( + os.path.join(get_package_share_directory( + 'airsim_ros_pkgs'), 'launch/position_controller_simple.launch.py') + ) + ) + ]) + return ld From 2428e0a9fd2139b22b31438ad66896c9fe5b512f Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 01:58:08 -0700 Subject: [PATCH 055/123] - add dynamic_constraints.launch.py --- .../launch/dynamic_constraints.launch.py | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch.py diff --git a/ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch.py b/ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch.py new file mode 100644 index 0000000000..d8449582df --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch.py @@ -0,0 +1,46 @@ + +from launch import LaunchDescription +from launch.actions import DeclareLaunchArgument + +def generate_launch_description(): + ld = LaunchDescription([ + + DeclareLaunchArgument( + "max_vel_vert_abs", + default_value='10.0'), + + DeclareLaunchArgument( + "max_vel_horz_abs", + default_value='0.5'), + + DeclareLaunchArgument( + "max_yaw_rate_degree", + default_value='1.0'), + + DeclareLaunchArgument( + "gimbal_front_center_max_pitch", + default_value='40.0'), + + DeclareLaunchArgument( + "gimbal_front_center_min_pitch", + default_value='-130.0'), + + DeclareLaunchArgument( + "gimbal_front_center_max_yaw", + default_value='320.0'), + + DeclareLaunchArgument( + "gimbal_front_center_min_yaw", + default_value='-320.0'), + + DeclareLaunchArgument( + "gimbal_front_center_min_yaw", + default_value='20.0'), + + DeclareLaunchArgument( + "gimbal_front_center_min_yaw", + default_value='-20.0') + + ]) + + return ld From ff2c49a848f4ff550189ac74be40a62d4af0c6f7 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 01:58:25 -0700 Subject: [PATCH 056/123] - update static_transforms lauhc file --- ros2/src/airsim_ros_pkgs/launch/static_transforms.launch.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch.py b/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch.py index e5366582d4..420137977d 100644 --- a/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch.py +++ b/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch.py @@ -1,5 +1,3 @@ -import os -import sys import launch import launch_ros.actions @@ -15,7 +13,3 @@ def generate_launch_description(): ) ]) return ld - - -if __name__ == '__main__': - generate_launch_description() From 77eb8d07ecab5abfb4188d9e8944f48d82326c6d Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 02:15:39 -0700 Subject: [PATCH 057/123] - remove folder from tracking --- ros2/src/airsim_tutorial_pkgs/CMakeLists.txt | 29 -- ros2/src/airsim_tutorial_pkgs/README.md | 3 - .../front_stereo_and_center_mono/default.rviz | 285 ------------------ .../depth_to_pointcloud.launch | 18 -- .../front_stereo_and_center_mono.launch | 4 - .../front_stereo_and_center_mono/rviz.launch | 3 - .../two_drones_camera_lidar_imu/default.rviz | 280 ----------------- ros2/src/airsim_tutorial_pkgs/package.xml | 37 --- .../scripts/multi_drone_json_creator.py | 78 ----- .../airsim_tutorial_pkgs/settings/car.json | 108 ------- .../front_stereo_and_center_mono.json | 98 ------ .../settings/twenty_five_drones.json | 233 -------------- .../settings/two_drones_camera_lidar_imu.json | 100 ------ 13 files changed, 1276 deletions(-) delete mode 100755 ros2/src/airsim_tutorial_pkgs/CMakeLists.txt delete mode 100755 ros2/src/airsim_tutorial_pkgs/README.md delete mode 100755 ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/default.rviz delete mode 100755 ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/depth_to_pointcloud.launch delete mode 100755 ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/front_stereo_and_center_mono.launch delete mode 100755 ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/rviz.launch delete mode 100755 ros2/src/airsim_tutorial_pkgs/launch/two_drones_camera_lidar_imu/default.rviz delete mode 100755 ros2/src/airsim_tutorial_pkgs/package.xml delete mode 100755 ros2/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py delete mode 100755 ros2/src/airsim_tutorial_pkgs/settings/car.json delete mode 100755 ros2/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json delete mode 100755 ros2/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json delete mode 100755 ros2/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json diff --git a/ros2/src/airsim_tutorial_pkgs/CMakeLists.txt b/ros2/src/airsim_tutorial_pkgs/CMakeLists.txt deleted file mode 100755 index db27f90aa6..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -cmake_minimum_required(VERSION 3.10.0) -project(airsim_tutorial_pkgs) - -# todo eigen3 in AirLib already -find_package(catkin REQUIRED COMPONENTS - cv_bridge - image_transport - mavros_msgs - message_generation - nav_msgs - # nodelet - roscpp - rospy - sensor_msgs - std_msgs - std_srvs - tf2 - tf2_ros -) - -catkin_package( - INCLUDE_DIRS - CATKIN_DEPENDS message_runtime roscpp std_msgs airsim_ros_pkgs -) - -include_directories( - ${catkin_INCLUDE_DIRS} - ${airsim_ros_pkgs_INCLUDE_DIRS} -) \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/README.md b/ros2/src/airsim_tutorial_pkgs/README.md deleted file mode 100755 index 1022deb2a7..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# AirSim ROS Tutorials - -This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/airsim_tutorial_pkgs.md). \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/default.rviz b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/default.rviz deleted file mode 100755 index 04c25b6925..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/default.rviz +++ /dev/null @@ -1,285 +0,0 @@ -Panels: - - Class: rviz/Displays - Help Height: 78 - Name: Displays - Property Tree Widget: - Expanded: - - /TF1/Frames1 - - /Odometry1/Shape1 - Splitter Ratio: 0.87308532 - Tree Height: 775 - - Class: rviz/Selection - Name: Selection - - Class: rviz/Tool Properties - Expanded: - - /2D Pose Estimate1 - - /2D Nav Goal1 - - /Publish Point1 - Name: Tool Properties - Splitter Ratio: 0.588679016 - - Class: rviz/Views - Expanded: - - /Current View1 - Name: Views - Splitter Ratio: 0.5 - - Class: rviz/Time - Experimental: false - Name: Time - SyncMode: 0 - SyncSource: front_left_depth_planar_registered_point_cloud -Visualization Manager: - Class: "" - Displays: - - Alpha: 0.5 - Cell Size: 1 - Class: rviz/Grid - Color: 160; 160; 164 - Enabled: true - Line Style: - Line Width: 0.0299999993 - Value: Lines - Name: Grid - Normal Cell Count: 0 - Offset: - X: 0 - Y: 0 - Z: 0 - Plane: XY - Plane Cell Count: 10 - Reference Frame: - Value: true - - Class: rviz/TF - Enabled: true - Frame Timeout: 15 - Frames: - All Enabled: false - LidarCustom: - Value: true - drone_1: - Value: true - drone_1/odom_local_ned: - Value: true - front_center_custom_body: - Value: false - front_center_custom_body/static: - Value: false - front_center_custom_optical: - Value: true - front_center_custom_optical/static: - Value: true - front_left_custom_body: - Value: false - front_left_custom_body/static: - Value: false - front_left_custom_optical: - Value: true - front_left_custom_optical/static: - Value: true - front_right_custom_body: - Value: false - front_right_custom_body/static: - Value: false - front_right_custom_optical: - Value: true - front_right_custom_optical/static: - Value: true - world_enu: - Value: false - world_ned: - Value: true - Marker Scale: 1 - Name: TF - Show Arrows: true - Show Axes: true - Show Names: true - Tree: - world_ned: - drone_1: - drone_1/odom_local_ned: - LidarCustom: - {} - front_center_custom_body/static: - {} - front_center_custom_optical/static: - {} - front_left_custom_body/static: - {} - front_left_custom_optical/static: - {} - front_right_custom_body/static: - {} - front_right_custom_optical/static: - {} - front_center_custom_body: - {} - front_center_custom_optical: - {} - front_left_custom_body: - {} - front_left_custom_optical: - {} - front_right_custom_body: - {} - front_right_custom_optical: - {} - world_enu: - {} - Update Interval: 0 - Value: true - - Alpha: 1 - Autocompute Intensity Bounds: true - Autocompute Value Bounds: - Max Value: 10 - Min Value: -10 - Value: true - Axis: Z - Channel Name: intensity - Class: rviz/PointCloud2 - Color: 255; 255; 255 - Color Transformer: RGB8 - Decay Time: 0 - Enabled: true - Invert Rainbow: false - Max Color: 255; 255; 255 - Max Intensity: 4096 - Min Color: 0; 0; 0 - Min Intensity: 0 - Name: front_left_depth_planar_registered_point_cloud - Position Transformer: XYZ - Queue Size: 10 - Selectable: true - Size (Pixels): 3 - Size (m): 0.100000001 - Style: Flat Squares - Topic: /airsim_node/drone_1/front_left_custom/DepthPlanar/registered/points - Unreliable: false - Use Fixed Frame: true - Use rainbow: true - Value: true - - Angle Tolerance: 0.100000001 - Class: rviz/Odometry - Covariance: - Orientation: - Alpha: 0.5 - Color: 255; 255; 127 - Color Style: Unique - Frame: Local - Offset: 1 - Scale: 1 - Value: true - Position: - Alpha: 0.300000012 - Color: 204; 51; 204 - Scale: 1 - Value: true - Value: true - Enabled: true - Keep: 25 - Name: Odometry - Position Tolerance: 0.100000001 - Shape: - Alpha: 1 - Axes Length: 1 - Axes Radius: 0.100000001 - Color: 255; 25; 0 - Head Length: 0.200000003 - Head Radius: 0.0500000007 - Shaft Length: 0.200000003 - Shaft Radius: 0.0199999996 - Value: Arrow - Topic: /airsim_node/MyQuad/odom_local_ned - Unreliable: false - Value: true - - Alpha: 1 - Autocompute Intensity Bounds: true - Autocompute Value Bounds: - Max Value: 10 - Min Value: -10 - Value: true - Axis: Z - Channel Name: intensity - Class: rviz/PointCloud2 - Color: 255; 255; 255 - Color Transformer: Intensity - Decay Time: 0 - Enabled: true - Invert Rainbow: false - Max Color: 255; 255; 255 - Max Intensity: 4096 - Min Color: 0; 0; 0 - Min Intensity: 0 - Name: PointCloud2 - Position Transformer: XYZ - Queue Size: 10 - Selectable: true - Size (Pixels): 3 - Size (m): 0.100000001 - Style: Points - Topic: /airsim_node/drone_1/lidar/LidarCustom - Unreliable: false - Use Fixed Frame: true - Use rainbow: true - Value: true - Enabled: true - Global Options: - Background Color: 48; 48; 48 - Default Light: true - Fixed Frame: world_enu - Frame Rate: 30 - Name: root - Tools: - - Class: rviz/Interact - Hide Inactive Objects: true - - Class: rviz/MoveCamera - - Class: rviz/Select - - Class: rviz/FocusCamera - - Class: rviz/Measure - - Class: rviz/SetInitialPose - Topic: /initialpose - - Class: rviz/SetGoal - Topic: /move_base_simple/goal - - Class: rviz/PublishPoint - Single click: true - Topic: /clicked_point - Value: true - Views: - Current: - Class: rviz/Orbit - Distance: 30.6555023 - Enable Stereo Rendering: - Stereo Eye Separation: 0.0599999987 - Stereo Focal Distance: 1 - Swap Stereo Eyes: false - Value: false - Focal Point: - X: -0.525829852 - Y: 2.05633426 - Z: -0.726522326 - Focal Shape Fixed Size: false - Focal Shape Size: 0.0500000007 - Invert Z Axis: false - Name: Current View - Near Clip Distance: 0.00999999978 - Pitch: 0.309797317 - Target Frame: world_view - Value: Orbit (rviz) - Yaw: 4.59035587 - Saved: ~ -Window Geometry: - Displays: - collapsed: false - Height: 1056 - Hide Left Dock: false - Hide Right Dock: false - QMainWindow State: 000000ff00000000fd0000000400000000000001cb00000396fc020000000cfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006100fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afc0000002800000396000000d700fffffffa000000010100000002fb0000002000630061006d005f00660072006f006e0074005f00630065006e0074006500720000000000ffffffff0000000000000000fb000000100044006900730070006c0061007900730100000000000001a60000016a00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d006500720061010000038f000000160000000000000000fb0000003600630061006d005f00660072006f006e0074005f006c006500660074005f00640065007000740068005f0070006c0061006e006100720200000af40000014e0000031c00000231fb0000001c00630061006d005f00660072006f006e0074005f006c0065006600740200000ac00000010f000002d700000196fb0000001e00630061006d005f00660072006f006e0074005f007200690067006800740200000b400000017000000286000001a7000000010000010f00000396fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000002800000396000000ad00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007530000003efc0100000002fb0000000800540069006d00650100000000000007530000030000fffffffb0000000800540069006d006501000000000000045000000000000000000000046d0000039600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 - Selection: - collapsed: false - Time: - collapsed: false - Tool Properties: - collapsed: false - Views: - collapsed: false - Width: 1875 - X: 1965 - Y: 24 diff --git a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/depth_to_pointcloud.launch b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/depth_to_pointcloud.launch deleted file mode 100755 index 28b8fae8b2..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/depth_to_pointcloud.launch +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/front_stereo_and_center_mono.launch b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/front_stereo_and_center_mono.launch deleted file mode 100755 index 3aefe7b043..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/front_stereo_and_center_mono.launch +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/rviz.launch b/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/rviz.launch deleted file mode 100755 index b5e8d324a2..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/rviz.launch +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/launch/two_drones_camera_lidar_imu/default.rviz b/ros2/src/airsim_tutorial_pkgs/launch/two_drones_camera_lidar_imu/default.rviz deleted file mode 100755 index e8539e65c0..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/launch/two_drones_camera_lidar_imu/default.rviz +++ /dev/null @@ -1,280 +0,0 @@ -Panels: - - Class: rviz/Displays - Help Height: 78 - Name: Displays - Property Tree Widget: - Expanded: - - /TF1 - - /TF1/Frames1 - - /Odometry1/Shape1 - Splitter Ratio: 0.50515461 - Tree Height: 775 - - Class: rviz/Selection - Name: Selection - - Class: rviz/Tool Properties - Expanded: - - /2D Pose Estimate1 - - /2D Nav Goal1 - - /Publish Point1 - Name: Tool Properties - Splitter Ratio: 0.588679016 - - Class: rviz/Views - Expanded: - - /Current View1 - Name: Views - Splitter Ratio: 0.5 - - Class: rviz/Time - Experimental: false - Name: Time - SyncMode: 0 - SyncSource: "" -Visualization Manager: - Class: "" - Displays: - - Alpha: 0.5 - Cell Size: 1 - Class: rviz/Grid - Color: 160; 160; 164 - Enabled: true - Line Style: - Line Width: 0.0299999993 - Value: Lines - Name: Grid - Normal Cell Count: 0 - Offset: - X: 0 - Y: 0 - Z: 0 - Plane: XY - Plane Cell Count: 10 - Reference Frame: - Value: true - - Class: rviz/TF - Enabled: true - Frame Timeout: 15 - Frames: - All Enabled: false - Drone_1: - Value: true - Drone_1/odom_local_ned: - Value: true - Drone_2: - Value: true - Drone_2/odom_local_ned: - Value: true - camera_1_body: - Value: false - camera_1_body/static: - Value: false - camera_1_optical: - Value: true - camera_1_optical/static: - Value: true - camera_2_body: - Value: false - camera_2_body/static: - Value: false - camera_2_optical: - Value: true - camera_2_optical/static: - Value: true - lidar_1: - Value: true - lidar_2: - Value: true - world_enu: - Value: false - world_ned: - Value: true - Marker Scale: 1 - Name: TF - Show Arrows: true - Show Axes: true - Show Names: true - Tree: - world_ned: - Drone_1: - Drone_1/odom_local_ned: - camera_1_body/static: - {} - camera_1_optical/static: - {} - lidar_1: - {} - camera_1_body: - {} - camera_1_optical: - {} - Drone_2: - Drone_2/odom_local_ned: - camera_2_body/static: - {} - camera_2_optical/static: - {} - lidar_2: - {} - camera_2_body: - {} - camera_2_optical: - {} - world_enu: - {} - Update Interval: 0 - Value: true - - Alpha: 1 - Autocompute Intensity Bounds: true - Autocompute Value Bounds: - Max Value: 10 - Min Value: -10 - Value: true - Axis: Z - Channel Name: intensity - Class: rviz/PointCloud2 - Color: 255; 255; 255 - Color Transformer: RGB8 - Decay Time: 0 - Enabled: true - Invert Rainbow: false - Max Color: 255; 255; 255 - Max Intensity: 4096 - Min Color: 0; 0; 0 - Min Intensity: 0 - Name: front_left_depth_planar_registered_point_cloud - Position Transformer: XYZ - Queue Size: 10 - Selectable: true - Size (Pixels): 3 - Size (m): 0.100000001 - Style: Flat Squares - Topic: /airsim_node/front_left_custom/DepthPlanar/registered/points - Unreliable: false - Use Fixed Frame: true - Use rainbow: true - Value: true - - Angle Tolerance: 0.100000001 - Class: rviz/Odometry - Covariance: - Orientation: - Alpha: 0.5 - Color: 255; 255; 127 - Color Style: Unique - Frame: Local - Offset: 1 - Scale: 1 - Value: true - Position: - Alpha: 0.300000012 - Color: 204; 51; 204 - Scale: 1 - Value: true - Value: true - Enabled: true - Keep: 25 - Name: Odometry - Position Tolerance: 0.100000001 - Shape: - Alpha: 1 - Axes Length: 1 - Axes Radius: 0.100000001 - Color: 255; 25; 0 - Head Length: 0.200000003 - Head Radius: 0.0500000007 - Shaft Length: 0.200000003 - Shaft Radius: 0.0199999996 - Value: Arrow - Topic: /airsim_node/MyQuad/odom_local_ned - Unreliable: false - Value: true - - Alpha: 1 - Autocompute Intensity Bounds: true - Autocompute Value Bounds: - Max Value: 10 - Min Value: -10 - Value: true - Axis: Z - Channel Name: intensity - Class: rviz/PointCloud2 - Color: 255; 255; 255 - Color Transformer: Intensity - Decay Time: 0 - Enabled: true - Invert Rainbow: false - Max Color: 255; 255; 255 - Max Intensity: 4096 - Min Color: 0; 0; 0 - Min Intensity: 0 - Name: PointCloud2 - Position Transformer: XYZ - Queue Size: 10 - Selectable: true - Size (Pixels): 3 - Size (m): 0.00999999978 - Style: Flat Squares - Topic: /airsim_node/MyQuad/lidar/LidarCustom - Unreliable: false - Use Fixed Frame: true - Use rainbow: true - Value: true - Enabled: true - Global Options: - Background Color: 48; 48; 48 - Default Light: true - Fixed Frame: world_enu - Frame Rate: 30 - Name: root - Tools: - - Class: rviz/Interact - Hide Inactive Objects: true - - Class: rviz/MoveCamera - - Class: rviz/Select - - Class: rviz/FocusCamera - - Class: rviz/Measure - - Class: rviz/SetInitialPose - Topic: /initialpose - - Class: rviz/SetGoal - Topic: /move_base_simple/goal - - Class: rviz/PublishPoint - Single click: true - Topic: /clicked_point - Value: true - Views: - Current: - Class: rviz/Orbit - Distance: 2.11027455 - Enable Stereo Rendering: - Stereo Eye Separation: 0.0599999987 - Stereo Focal Distance: 1 - Swap Stereo Eyes: false - Value: false - Focal Point: - X: -2.6707468 - Y: -2.57372952 - Z: 3.92538261 - Focal Shape Fixed Size: false - Focal Shape Size: 0.0500000007 - Invert Z Axis: false - Name: Current View - Near Clip Distance: 0.00999999978 - Pitch: 0.435398638 - Target Frame: world_view - Value: Orbit (rviz) - Yaw: 4.2285943 - Saved: ~ -Window Geometry: - Displays: - collapsed: false - Height: 1056 - Hide Left Dock: false - Hide Right Dock: false - QMainWindow State: 000000ff00000000fd00000004000000000000025500000396fc020000000cfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006100fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afc0000002800000396000000d700fffffffa000000010100000002fb0000002000630061006d005f00660072006f006e0074005f00630065006e0074006500720000000000ffffffff0000000000000000fb000000100044006900730070006c0061007900730100000000000001a60000016a00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d006500720061010000038f000000160000000000000000fb0000003600630061006d005f00660072006f006e0074005f006c006500660074005f00640065007000740068005f0070006c0061006e006100720200000af40000014e0000031c00000231fb0000001c00630061006d005f00660072006f006e0074005f006c0065006600740200000ac00000010f000002d700000196fb0000001e00630061006d005f00660072006f006e0074005f007200690067006800740200000b400000017000000286000001a7000000010000010f00000396fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000002800000396000000ad00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007530000003efc0100000002fb0000000800540069006d00650100000000000007530000030000fffffffb0000000800540069006d00650100000000000004500000000000000000000003e30000039600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 - Selection: - collapsed: false - Time: - collapsed: false - Tool Properties: - collapsed: false - Views: - collapsed: false - Width: 1875 - X: 1965 - Y: 24 diff --git a/ros2/src/airsim_tutorial_pkgs/package.xml b/ros2/src/airsim_tutorial_pkgs/package.xml deleted file mode 100755 index b5d7009e7d..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/package.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - airsim_tutorial_pkgs - 0.0.1 - AirSim ROS tutorials - - Ratnesh Madaan - - MIT - - catkin - - - geometry_msgs - image_transport - message_generation - message_runtime - nav_msgs - roscpp - rospy - sensor_msgs - std_msgs - airsim_ros_pkgs - - - geometry_msgs - image_transport - message_generation - message_runtime - nav_msgs - roscpp - rospy - sensor_msgs - std_msgs - airsim_ros_pkgs - - \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py b/ros2/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py deleted file mode 100755 index dc1a89805e..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py +++ /dev/null @@ -1,78 +0,0 @@ -# import airsim -import json -import numpy as np -import pdb - -# todo expose airsimsettings.hpp via pybind11? this should be done for the full API *some*day -class Position(): - def __init__(self, x, y, z): - self.x = x - self.y = y - self.z = z - -class Rotation(): - def __init__(self, yaw, pitch, roll): - self.yaw = yaw - self.pitch = pitch - self.roll = roll - -class Pose(): - def __init__(self, position, rotation): - self.position = position - self.rotation = rotation - -class JSONSettingsCreator(object): - def __init__(self, sim_mode="Multirotor"): - # self.args = args - self.sim_mode = sim_mode - self.data = {} - - def add_minimal(self): - self.data["SeeDocsAt"] = "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md" - self.data["SettingsVersion"] = 1.2 - self.data["SimMode"] = self.sim_mode #"Multirotor" - self.data["ClockSpeed"] = 1 - - def set_pose(self, setting_key, pose): - setting_key["X"] = pose.position.x - setting_key["Y"] = pose.position.y - setting_key["Z"] = pose.position.z - setting_key["Pitch"] = pose.rotation.pitch - setting_key["Roll"] = pose.rotation.roll - setting_key["Yaw"] = pose.rotation.yaw - - def add_multirotor(self, vehicle_name, pose): - assert(self.data["SimMode"] == "Multirotor") - if "Vehicles" not in self.data.keys(): - self.data['Vehicles'] = {} - - self.data['Vehicles'][vehicle_name] = {} - self.data['Vehicles'][vehicle_name]["VehicleType"] = "SimpleFlight" - self.set_pose(self.data['Vehicles'][vehicle_name], pose) - -def main(): - json_setting_helper = JSONSettingsCreator(sim_mode="Multirotor") - json_setting_helper.add_minimal() - - # arrange drones in a rectangle. todo make classes for different swarm spawn shapes? - dist_between_drones = 2.0 - num_drones_x = 5 - num_drones_y = 5 - grid_width = (num_drones_x-1) * dist_between_drones - grid_length = (num_drones_y-1) * dist_between_drones - - x_vals = np.linspace(0, grid_width, num_drones_x) - y_vals = np.linspace(0, grid_length, num_drones_y) - x_grid, y_grid = np.meshgrid(x_vals, y_vals) - - # pdb.set_trace() - - for row_idx in range(x_grid.shape[0]): - for col_idx in range(x_grid.shape[1]): - json_setting_helper.add_multirotor("Drone"+str((row_idx * num_drones_x) + col_idx), - Pose(Position(x=y_grid[row_idx, col_idx], y=x_grid[row_idx, col_idx], z=0), Rotation(yaw=0, pitch=0, roll=0))) - with open("bla.json", "w") as f: - json.dump(json_setting_helper.data, f, indent=2, sort_keys=True) - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/settings/car.json b/ros2/src/airsim_tutorial_pkgs/settings/car.json deleted file mode 100755 index 5969b9dc96..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/settings/car.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", - "SettingsVersion": 1.2, - "SimMode": "Car", - "ViewMode": "SpringArmChase", - "ClockSpeed": 1.0, - "Vehicles": { - "drone_1": { - "VehicleType": "PhysXCar", - "DefaultVehicleState": "Armed", - "EnableCollisionPassthrogh": false, - "EnableCollisions": true, - "AllowAPIAlways": true, - "Sensors": { - "Gps": { - "SensorType": 3, - "Enabled" : true - }, - "Barometer": { - "SensorType": 1, - "Enabled" : true - }, - "Magnetometer": { - "SensorType": 4, - "Enabled" : true - }, - "Imu" : { - "SensorType": 2, - "Enabled": true - }, - "LidarCustom": { - "SensorType": 6, - "Enabled": true, - "NumberOfChannels": 16, - "PointsPerSecond": 10000, - "X": 0, - "Y": 0, - "Z": -1.5, - "DrawDebugPoints": true, - "DataFrame": "SensorLocalFrame" - } - }, - "Cameras": { - "front_center_custom": { - "CaptureSettings": [ - { - "PublishToRos": 1, - "ImageType": 0, - "Width": 640, - "Height": 480, - "FOV_Degrees": 27, - "DepthOfFieldFstop": 2.8, - "DepthOfFieldFocalDistance": 200.0, - "DepthOfFieldFocalRegion": 200.0, - "TargetGamma": 1.5 - } - ], - "X": 1.75, "Y": 0, "Z": -1.25, - "Pitch": 0, "Roll": 0, "Yaw": 0 - }, - "front_left_custom": { - "CaptureSettings": [ - { - "PublishToRos": 1, - "ImageType": 0, - "Width": 672, - "Height": 376, - "FOV_Degrees": 90, - "TargetGamma": 1.5 - }, - { - "PublishToRos": 1, - "ImageType": 1, - "Width": 672, - "Height": 376, - "FOV_Degrees": 90, - "TargetGamma": 1.5 - } - ], - "X": 1.75, "Y": -0.06, "Z": -1.25, - "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 - }, - "front_right_custom": { - "CaptureSettings": [ - { - "PublishToRos": 1, - "ImageType": 0, - "Width": 672, - "Height": 376, - "FOV_Degrees": 90, - "TargetGamma": 1.5 - } - ], - "X": 1.75, "Y": 0.06, "Z": -1.25, - "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 - } - }, - "X": 0, "Y": 0, "Z": 0, - "Pitch": 0, "Roll": 0, "Yaw": 0 - } - }, - "SubWindows": [ - {"WindowID": 0, "ImageType": 0, "CameraName": "front_left_custom", "Visible": true}, - {"WindowID": 1, "ImageType": 0, "CameraName": "front_center_custom", "Visible": false}, - {"WindowID": 2, "ImageType": 0, "CameraName": "front_right_custom", "Visible": true} - ] -} - diff --git a/ros2/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json b/ros2/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json deleted file mode 100755 index 5672ffa357..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", - "SettingsVersion": 1.2, - "SimMode": "Multirotor", - "ViewMode": "SpringArmChase", - "ClockSpeed": 1.0, - "Vehicles": { - "drone_1": { - "VehicleType": "SimpleFlight", - "DefaultVehicleState": "Armed", - "EnableCollisionPassthrogh": false, - "EnableCollisions": true, - "AllowAPIAlways": true, - "RC": { - "RemoteControlID": 0, - "AllowAPIWhenDisconnected": false - }, - "Sensors": { - "Imu" : { - "SensorType": 2, - "Enabled": true - }, - "LidarCustom": { - "SensorType": 6, - "Enabled": true, - "NumberOfChannels": 16, - "PointsPerSecond": 10000, - "X": 0, - "Y": 0, - "Z": -1, - "DrawDebugPoints": true - } - }, - "Cameras": { - "front_center_custom": { - "CaptureSettings": [ - { - "PublishToRos": 1, - "ImageType": 0, - "Width": 640, - "Height": 480, - "FOV_Degrees": 27, - "DepthOfFieldFstop": 2.8, - "DepthOfFieldFocalDistance": 200.0, - "DepthOfFieldFocalRegion": 200.0, - "TargetGamma": 1.5 - } - ], - "X": 0.50, "Y": 0, "Z": 0.10, - "Pitch": 0, "Roll": 0, "Yaw": 0 - }, - "front_left_custom": { - "CaptureSettings": [ - { - "PublishToRos": 1, - "ImageType": 0, - "Width": 672, - "Height": 376, - "FOV_Degrees": 90, - "TargetGamma": 1.5 - }, - { - "PublishToRos": 1, - "ImageType": 1, - "Width": 672, - "Height": 376, - "FOV_Degrees": 90, - "TargetGamma": 1.5 - } - ], - "X": 0.50, "Y": -0.06, "Z": 0.10, - "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 - }, - "front_right_custom": { - "CaptureSettings": [ - { - "PublishToRos": 1, - "ImageType": 0, - "Width": 672, - "Height": 376, - "FOV_Degrees": 90, - "TargetGamma": 1.5 - } - ], - "X": 0.50, "Y": 0.06, "Z": 0.10, - "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 - } - }, - "X": 2, "Y": 0, "Z": 0, - "Pitch": 0, "Roll": 0, "Yaw": 0 - } - }, - "SubWindows": [ - {"WindowID": 0, "ImageType": 0, "CameraName": "front_left_custom", "Visible": true}, - {"WindowID": 1, "ImageType": 0, "CameraName": "front_center_custom", "Visible": false}, - {"WindowID": 2, "ImageType": 0, "CameraName": "front_right_custom", "Visible": true} - ] -} diff --git a/ros2/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json b/ros2/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json deleted file mode 100755 index fae81ee115..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "ClockSpeed": 1, - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", - "SettingsVersion": 1.2, - "SimMode": "Multirotor", - "Vehicles": { - "Drone0": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 0.0, - "Y": 0.0, - "Yaw": 0, - "Z": 0 - }, - "Drone1": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 0.0, - "Y": 2.0, - "Yaw": 0, - "Z": 0 - }, - "Drone10": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 4.0, - "Y": 0.0, - "Yaw": 0, - "Z": 0 - }, - "Drone11": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 4.0, - "Y": 2.0, - "Yaw": 0, - "Z": 0 - }, - "Drone12": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 4.0, - "Y": 4.0, - "Yaw": 0, - "Z": 0 - }, - "Drone13": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 4.0, - "Y": 6.0, - "Yaw": 0, - "Z": 0 - }, - "Drone14": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 4.0, - "Y": 8.0, - "Yaw": 0, - "Z": 0 - }, - "Drone15": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 6.0, - "Y": 0.0, - "Yaw": 0, - "Z": 0 - }, - "Drone16": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 6.0, - "Y": 2.0, - "Yaw": 0, - "Z": 0 - }, - "Drone17": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 6.0, - "Y": 4.0, - "Yaw": 0, - "Z": 0 - }, - "Drone18": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 6.0, - "Y": 6.0, - "Yaw": 0, - "Z": 0 - }, - "Drone19": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 6.0, - "Y": 8.0, - "Yaw": 0, - "Z": 0 - }, - "Drone2": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 0.0, - "Y": 4.0, - "Yaw": 0, - "Z": 0 - }, - "Drone20": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 8.0, - "Y": 0.0, - "Yaw": 0, - "Z": 0 - }, - "Drone21": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 8.0, - "Y": 2.0, - "Yaw": 0, - "Z": 0 - }, - "Drone22": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 8.0, - "Y": 4.0, - "Yaw": 0, - "Z": 0 - }, - "Drone23": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 8.0, - "Y": 6.0, - "Yaw": 0, - "Z": 0 - }, - "Drone24": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 8.0, - "Y": 8.0, - "Yaw": 0, - "Z": 0 - }, - "Drone3": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 0.0, - "Y": 6.0, - "Yaw": 0, - "Z": 0 - }, - "Drone4": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 0.0, - "Y": 8.0, - "Yaw": 0, - "Z": 0 - }, - "Drone5": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 2.0, - "Y": 0.0, - "Yaw": 0, - "Z": 0 - }, - "Drone6": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 2.0, - "Y": 2.0, - "Yaw": 0, - "Z": 0 - }, - "Drone7": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 2.0, - "Y": 4.0, - "Yaw": 0, - "Z": 0 - }, - "Drone8": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 2.0, - "Y": 6.0, - "Yaw": 0, - "Z": 0 - }, - "Drone9": { - "Pitch": 0, - "Roll": 0, - "VehicleType": "SimpleFlight", - "X": 2.0, - "Y": 8.0, - "Yaw": 0, - "Z": 0 - } - } -} \ No newline at end of file diff --git a/ros2/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json b/ros2/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json deleted file mode 100755 index 8b57f7e909..0000000000 --- a/ros2/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "ClockSpeed": 1, - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", - "SettingsVersion": 1.2, - "SimMode": "Multirotor", - "Vehicles": { - "Drone_1": { - "VehicleType": "SimpleFlight", - "Sensors": { - "imu_1": { - "SensorType": 2, - "Enabled": true - }, - "lidar_1": { - "SensorType": 6, - "Range": 100, - "Enabled": true, - "NumberOfChannels": 64, - "PointsPerSecond": 100000, - "VerticalFOVUpper": 90, - "VerticalFOVLower": 0, - "HorizontalFOVStart": -90, - "HorizontalFOVEnd": 90, - "X": 0, "Y": 0, "Z": -0.1, - "DrawDebugPoints": true - } - }, - "Cameras": { - "camera_1": { - "CaptureSettings": [ - { - "ImageType": 0, - "Width": 672, - "Height": 376, - "FOV_Degrees": 90, - "TargetGamma": 1.5 - }, - { - "ImageType": 1, - "Width": 672, - "Height": 376, - "FOV_Degrees": 90, - "TargetGamma": 1.5 - } - ], - "X": 0.5, "Y": -0.06, "Z": 0.10, - "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 - } - }, - "X": 2.0, "Y": 0.0, "Z": 0, - "Pitch": 0, "Roll": 0, "Yaw": 0 - }, - "Drone_2": { - "VehicleType": "SimpleFlight", - "Sensors": { - "imu_2": { - "SensorType": 2, - "Enabled": true - }, - "lidar_2": { - "SensorType": 6, - "Range": 100, - "Enabled": true, - "NumberOfChannels": 64, - "PointsPerSecond": 100000, - "VerticalFOVUpper": 90, - "VerticalFOVLower": 0, - "HorizontalFOVStart": -90, - "HorizontalFOVEnd": 90, - "X": 0, "Y": 0, "Z": -0.1, - "DrawDebugPoints": true - } - }, - "Cameras": { - "camera_2": { - "CaptureSettings": [ - { - "ImageType": 0, - "Width": 672, - "Height": 376, - "FOV_Degrees": 90, - "TargetGamma": 1.5 - }, - { - "ImageType": 1, - "Width": 672, - "Height": 376, - "FOV_Degrees": 90, - "TargetGamma": 1.5 - } - ], - "X": 0.1, "Y": -0.06, "Z": 0.10, - "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0 - } - }, - "X": 4.0, "Y": 0.0, "Z": 0, - "Pitch": 0, "Roll": 0, "Yaw": 0 - } - } -} \ No newline at end of file From ef420fe410d9240941e70cf1d6c2d7b4b19bbec0 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 03:02:03 -0700 Subject: [PATCH 058/123] - remove priavte node handle - cleanup --- .../include/airsim_ros_wrapper.h | 12 +-- .../include/pd_position_controller_simple.h | 5 +- ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 5 +- .../src/airsim_ros_wrapper.cpp | 84 +++++++++---------- .../src/pd_position_controller_simple.cpp | 16 ++-- .../pd_position_controller_simple_node.cpp | 3 +- 6 files changed, 54 insertions(+), 71 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 6d9bb47413..f3cee1e9e1 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -141,15 +141,12 @@ class AirsimROSWrapper CAR }; - AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_private, const std::shared_ptr nh_img, const std::shared_ptr nh_lidar, const std::string& host_ip); + AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_img, const std::shared_ptr nh_lidar, const std::string& host_ip); ~AirsimROSWrapper(){}; void initialize_airsim(); void initialize_ros(); - // std::vector callback_queues_; - //ros::AsyncSpinner img_async_spinner_; - //ros::AsyncSpinner lidar_async_spinner_; bool is_used_lidar_timer_cb_queue_; bool is_used_img_timer_cb_queue_; @@ -174,9 +171,7 @@ class AirsimROSWrapper std::vector> distance_pubs; std::vector> lidar_pubs; - //std::vector sensor_pubs; // handle lidar seperately for max performance as data is collected on its own thread/callback - //std::vector lidar_pubs; nav_msgs::msg::Odometry curr_odom; sensor_msgs::msg::NavSatFix gps_sensor_msg; @@ -345,18 +340,13 @@ class AirsimROSWrapper msr::airlib::RpcLibClientBase airsim_client_lidar_; std::shared_ptr nh_; - std::shared_ptr nh_private_; std::shared_ptr nh_img_; std::shared_ptr nh_lidar_; - // ros::NodeHandle nh_; - // ros::NodeHandle nh_private_; // todo not sure if async spinners shuold be inside this class, or should be instantiated in airsim_node.cpp, and cb queues should be public // todo for multiple drones with multiple sensors, this won't scale. make it a part of VehicleROS? - //ros::CallbackQueue img_timer_cb_queue_; - //ros::CallbackQueue lidar_timer_cb_queue_; std::mutex drone_control_mutex_; diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h index 0ac3452747..8e15ec582d 100755 --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -78,7 +78,7 @@ class DynamicConstraints class PIDPositionController { public: - PIDPositionController(const std::shared_ptr nh, const std::shared_ptr nh_private); + PIDPositionController(const std::shared_ptr nh); // ROS service callbacks bool local_position_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response); @@ -105,9 +105,6 @@ class PIDPositionController bool use_eth_lib_for_geodetic_conv_; const std::shared_ptr nh_; - const std::shared_ptr nh_private_; -// rclcpp::Node ; - // ros::NodeHandle nh_private_; DynamicConstraints constraints_; PIDParams params_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp index 1fa35567a0..cced7d00a9 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -8,12 +8,11 @@ int main(int argc, char** argv) rclcpp::NodeOptions node_options; node_options.automatically_declare_parameters_from_overrides(true); std::shared_ptr nh = rclcpp::Node::make_shared("airsim_node", node_options); - // std::shared_ptr nh_private = nh->create_sub_node("~/"); std::shared_ptr nh_img = nh->create_sub_node("img"); std::shared_ptr nh_lidar = nh->create_sub_node("lidar"); std::string host_ip; - /* nh_private */nh->get_parameter("host_ip", host_ip); - AirsimROSWrapper airsim_ros_wrapper(nh, nh /* nh_private */, nh_img, nh_lidar, host_ip);//ToDo - do we really need nh_private? + nh->get_parameter("host_ip", host_ip); + AirsimROSWrapper airsim_ros_wrapper(nh, nh_img, nh_lidar, host_ip); if (airsim_ros_wrapper.is_used_img_timer_cb_queue_) { rclcpp::executors::SingleThreadedExecutor executor; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 2ef4e7a568..7cd4dd2b62 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -27,8 +27,8 @@ const std::unordered_map AirsimROSWrapper::image_type_int_to_s { 7, "Infrared" } }; -AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_private, const std::shared_ptr nh_img, const std::shared_ptr nh_lidar, const std::string& host_ip) - : nh_(nh), nh_private_(nh_private) +AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_img, const std::shared_ptr nh_lidar, const std::string& host_ip) + : nh_(nh) , nh_img_(nh_img), nh_lidar_(nh_lidar) // , img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ // lidar_async_spinner_(1, &lidar_timer_cb_queue_) @@ -96,32 +96,32 @@ void AirsimROSWrapper::initialize_ros() // ros params double update_airsim_control_every_n_sec; - nh_private_->get_parameter("is_vulkan", is_vulkan_); - nh_private_->get_parameter("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); - nh_private_->get_parameter("publish_clock", publish_clock_); - nh_private_->get_parameter_or("world_frame_id", world_frame_id_, world_frame_id_); + nh_->get_parameter("is_vulkan", is_vulkan_); + nh_->get_parameter("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); + nh_->get_parameter("publish_clock", publish_clock_); + nh_->get_parameter_or("world_frame_id", world_frame_id_, world_frame_id_); odom_frame_id_ = world_frame_id_ == AIRSIM_FRAME_ID ? AIRSIM_ODOM_FRAME_ID : ENU_ODOM_FRAME_ID; - nh_private_->get_parameter_or("odom_frame_id", odom_frame_id_, odom_frame_id_); + nh_->get_parameter_or("odom_frame_id", odom_frame_id_, odom_frame_id_); isENU_ = !(odom_frame_id_ == AIRSIM_ODOM_FRAME_ID); - nh_private_->get_parameter_or("coordinate_system_enu", isENU_, isENU_); + nh_->get_parameter_or("coordinate_system_enu", isENU_, isENU_); vel_cmd_duration_ = 0.05; // todo rosparam // todo enforce dynamics constraints in this node as well? // nh_->get_parameter("max_vert_vel_", max_vert_vel_); // nh_->get_parameter("max_horz_vel", max_horz_vel_) - nh_private_->declare_parameter("vehicle_name",rclcpp::ParameterValue("")); + nh_->declare_parameter("vehicle_name",rclcpp::ParameterValue("")); create_ros_pubs_from_settings_json(); - airsim_control_update_timer_ = nh_private_->create_wall_timer(std::chrono::duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); - // airsim_control_update_timer_ = nh_private_->createTimer(rclcpp::Duration (update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); + airsim_control_update_timer_ = nh_->create_wall_timer(std::chrono::duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); + // airsim_control_update_timer_ = nh_->createTimer(rclcpp::Duration (update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); } // XmlRpc::XmlRpcValue can't be const in this case void AirsimROSWrapper::create_ros_pubs_from_settings_json() { // subscribe to control commands on global nodehandle - gimbal_angle_quat_cmd_sub_ = nh_private_->create_subscription("~/gimbal_angle_quat_cmd", 50, std::bind(&AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this, _1)); - gimbal_angle_euler_cmd_sub_ = nh_private_->create_subscription("~/gimbal_angle_euler_cmd", 50, std::bind(&AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this, _1)); - origin_geo_point_pub_ = nh_private_->create_publisher("~/origin_geo_point", 10); + gimbal_angle_quat_cmd_sub_ = nh_->create_subscription("~/gimbal_angle_quat_cmd", 50, std::bind(&AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this, _1)); + gimbal_angle_euler_cmd_sub_ = nh_->create_subscription("~/gimbal_angle_euler_cmd", 50, std::bind(&AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this, _1)); + origin_geo_point_pub_ = nh_->create_publisher("~/origin_geo_point", 10); airsim_img_request_vehicle_name_pair_vec_.clear(); image_pub_vec_.clear(); @@ -130,7 +130,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() vehicle_name_ptr_map_.clear(); size_t lidar_cnt = 0; - image_transport::ImageTransport image_transporter(nh_private_); + image_transport::ImageTransport image_transporter(nh_); // iterate over std::map> vehicles; for (const auto& curr_vehicle_elem : AirSimSettings::singleton().vehicles) { @@ -155,11 +155,11 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); - vehicle_ros->odom_local_pub = nh_private_->create_publisher("~/" + curr_vehicle_name + "/" + odom_frame_id_, 10); + vehicle_ros->odom_local_pub = nh_->create_publisher("~/" + curr_vehicle_name + "/" + odom_frame_id_, 10); - vehicle_ros->env_pub = nh_private_->create_publisher("~/" + curr_vehicle_name + "/environment", 10); + vehicle_ros->env_pub = nh_->create_publisher("~/" + curr_vehicle_name + "/environment", 10); - vehicle_ros->global_gps_pub = nh_private_->create_publisher("~/" + curr_vehicle_name + "/global_gps", 10); + vehicle_ros->global_gps_pub = nh_->create_publisher("~/" + curr_vehicle_name + "/global_gps", 10); if (airsim_mode_ == AIRSIM_MODE::DRONE) { auto drone = static_cast(vehicle_ros.get()); @@ -167,23 +167,23 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // bind to a single callback. todo optimal subs queue length // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument std::function fcn_vel_cmd_body_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name); - drone->vel_cmd_body_frame_sub = nh_private_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_body_frame", 1, fcn_vel_cmd_body_frame_sub); // todo ros::TransportHints().tcpNoDelay(); + drone->vel_cmd_body_frame_sub = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_body_frame", 1, fcn_vel_cmd_body_frame_sub); // todo ros::TransportHints().tcpNoDelay(); std::function fcn_vel_cmd_world_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name); - drone->vel_cmd_world_frame_sub = nh_private_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_world_frame", 1, fcn_vel_cmd_world_frame_sub); + drone->vel_cmd_world_frame_sub = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_world_frame", 1, fcn_vel_cmd_world_frame_sub); std::function, std::shared_ptr)> fcn_takeoff_srvr = std::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name); - drone->takeoff_srvr = nh_private_->create_service("~/" + curr_vehicle_name + "/takeoff",fcn_takeoff_srvr); + drone->takeoff_srvr = nh_->create_service("~/" + curr_vehicle_name + "/takeoff",fcn_takeoff_srvr); std::function, std::shared_ptr)> fcn_land_srvr = std::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name); - drone->land_srvr = nh_private_->create_service("~/" + curr_vehicle_name + "/land", fcn_land_srvr); - // vehicle_ros.reset_srvr = nh_private_->create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); + drone->land_srvr = nh_->create_service("~/" + curr_vehicle_name + "/land", fcn_land_srvr); + // vehicle_ros.reset_srvr = nh_->create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); } else { auto car = static_cast(vehicle_ros.get()); std::function fcn_car_cmd_sub = std::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name); - car->car_cmd_sub = nh_private_->create_subscription("~/" + curr_vehicle_name + "/car_cmd", 1, fcn_car_cmd_sub); - car->car_state_pub = nh_private_->create_publisher("~/" + curr_vehicle_name + "/car_state", 10); + car->car_cmd_sub = nh_->create_subscription("~/" + curr_vehicle_name + "/car_cmd", 1, fcn_car_cmd_sub); + car->car_state_pub = nh_->create_publisher("~/" + curr_vehicle_name + "/car_state", 10); } // iterate over camera map std::map .cameras; @@ -215,7 +215,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() } image_pub_vec_.push_back(image_transporter.advertise("~/" + curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type), 1)); - cam_info_pub_vec_.push_back(nh_private_->create_publisher("~/" + curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); + cam_info_pub_vec_.push_back(nh_->create_publisher("~/" + curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); camera_info_msg_vec_.push_back(generate_cam_info(curr_camera_name, camera_setting, capture_setting)); } } @@ -303,35 +303,35 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // add takeoff and land all services if more than 2 drones if (vehicle_name_ptr_map_.size() > 1 && airsim_mode_ == AIRSIM_MODE::DRONE) { - takeoff_all_srvr_ = nh_private_->create_service("~/all_robots/takeoff", std::bind(&AirsimROSWrapper::takeoff_all_srv_cb, this, _1, _2)); - land_all_srvr_ = nh_private_->create_service("~/all_robots/land", std::bind(&AirsimROSWrapper::land_all_srv_cb, this, _1, _2)); + takeoff_all_srvr_ = nh_->create_service("~/all_robots/takeoff", std::bind(&AirsimROSWrapper::takeoff_all_srv_cb, this, _1, _2)); + land_all_srvr_ = nh_->create_service("~/all_robots/land", std::bind(&AirsimROSWrapper::land_all_srv_cb, this, _1, _2)); // gimbal_angle_quat_cmd_sub_ = nh_->create_subscription<>("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); - vel_cmd_all_body_frame_sub_ = nh_private_->create_subscription("~/all_robots/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_body_frame_cb, this, _1)); - vel_cmd_all_world_frame_sub_ = nh_private_->create_subscription("~/all_robots/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_world_frame_cb, this, _1)); + vel_cmd_all_body_frame_sub_ = nh_->create_subscription("~/all_robots/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_body_frame_cb, this, _1)); + vel_cmd_all_world_frame_sub_ = nh_->create_subscription("~/all_robots/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_world_frame_cb, this, _1)); - vel_cmd_group_body_frame_sub_ = nh_private_->create_subscription("~/group_of_robots/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_group_body_frame_cb, this, _1)); - vel_cmd_group_world_frame_sub_ = nh_private_->create_subscription("~/group_of_robots/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_group_world_frame_cb, this, _1)); + vel_cmd_group_body_frame_sub_ = nh_->create_subscription("~/group_of_robots/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_group_body_frame_cb, this, _1)); + vel_cmd_group_world_frame_sub_ = nh_->create_subscription("~/group_of_robots/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_group_world_frame_cb, this, _1)); - takeoff_group_srvr_ = nh_private_->create_service("~/group_of_robots/takeoff", std::bind(&AirsimROSWrapper::takeoff_group_srv_cb, this, _1, _2)); - land_group_srvr_ = nh_private_->create_service("~/group_of_robots/land", std::bind(&AirsimROSWrapper::land_group_srv_cb, this, _1, _2)); + takeoff_group_srvr_ = nh_->create_service("~/group_of_robots/takeoff", std::bind(&AirsimROSWrapper::takeoff_group_srv_cb, this, _1, _2)); + land_group_srvr_ = nh_->create_service("~/group_of_robots/land", std::bind(&AirsimROSWrapper::land_group_srv_cb, this, _1, _2)); } // todo add per vehicle reset in AirLib API - reset_srvr_ = nh_private_->create_service("~/reset", std::bind(&AirsimROSWrapper::reset_srv_cb, this, _1, _2)); + reset_srvr_ = nh_->create_service("~/reset", std::bind(&AirsimROSWrapper::reset_srv_cb, this, _1, _2)); if (publish_clock_) { - clock_pub_ = nh_private_->create_publisher("~/clock", 1); + clock_pub_ = nh_->create_publisher("~/clock", 1); } // if >0 cameras, add one more thread for img_request_timer_cb if (!airsim_img_request_vehicle_name_pair_vec_.empty()) { double update_airsim_img_response_every_n_sec; - nh_private_->get_parameter("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); + nh_->get_parameter("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); // ros::TimerOptions timer_options(rclcpp::Duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this), &img_timer_cb_queue_); - // airsim_img_response_timer_ = nh_private_->createTimer(timer_options); + // airsim_img_response_timer_ = nh_->createTimer(timer_options); airsim_img_response_timer_ = nh_img_->create_wall_timer(std::chrono::duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this)); is_used_img_timer_cb_queue_ = true; @@ -340,10 +340,10 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // lidars update on their own callback/thread at a given rate if (lidar_cnt > 0) { double update_lidar_every_n_sec; - nh_private_->get_parameter("update_lidar_every_n_sec", update_lidar_every_n_sec); - // nh_private_->setCallbackQueue(&lidar_timer_cb_queue_); + nh_->get_parameter("update_lidar_every_n_sec", update_lidar_every_n_sec); + // nh_->setCallbackQueue(&lidar_timer_cb_queue_); //ros::TimerOptions timer_options(rclcpp::Duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this), &lidar_timer_cb_queue_); - //airsim_lidar_update_timer_ = nh_private_->createTimer(timer_options); + //airsim_lidar_update_timer_ = nh_->createTimer(timer_options); airsim_lidar_update_timer_ = nh_lidar_->create_wall_timer(std::chrono::duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this)); is_used_lidar_timer_cb_queue_ = true; } @@ -358,7 +358,7 @@ const SensorPublisher AirsimROSWrapper::create_sensor_publisher(const string& SensorPublisher sensor_publisher; sensor_publisher.sensor_name = sensor_name; sensor_publisher.sensor_type = sensor_type; - sensor_publisher.publisher = nh_private_->create_publisher("~/" + topic_name, QoS); + sensor_publisher.publisher = nh_->create_publisher("~/" + topic_name, QoS); return sensor_publisher; } diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 16b7a0da23..7ea96dc3d7 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -32,10 +32,10 @@ bool DynamicConstraints::load_from_rosparams(const std::shared_ptr return found; } -PIDPositionController::PIDPositionController(const std::shared_ptr nh, const std::shared_ptr nh_private) - : nh_(nh), nh_private_(nh_private), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) +PIDPositionController::PIDPositionController(const std::shared_ptr nh) + : nh_(nh), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) { - params_.load_from_rosparams(nh_private_); + params_.load_from_rosparams(nh_); constraints_.load_from_rosparams(nh_); initialize_ros(); reset_errors(); @@ -54,9 +54,9 @@ void PIDPositionController::initialize_ros() vel_cmd_ = airsim_interfaces::msg::VelCmd(); // ROS params double update_control_every_n_sec; - nh_private_->get_parameter("update_control_every_n_sec", update_control_every_n_sec); + nh_->get_parameter("update_control_every_n_sec", update_control_every_n_sec); - auto parameters_client = std::make_shared(nh_private_, "/airsim_node"); + auto parameters_client = std::make_shared(nh_, "/airsim_node"); while (!parameters_client->wait_for_service(std::chrono::seconds(1))) { if (!rclcpp::ok()) @@ -71,12 +71,11 @@ void PIDPositionController::initialize_ros() while (vehicle_name == "") { vehicle_name = parameters_client->get_parameter("vehicle_name", vehicle_name); - //nh_private_->get_parameter("vehicle_name", vehicle_name); RCLCPP_INFO_STREAM(nh_->get_logger() ,"Waiting vehicle name"); } // ROS publishers - airsim_vel_cmd_world_frame_pub_ = nh_private_->create_publisher("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); + airsim_vel_cmd_world_frame_pub_ = nh_->create_publisher("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); // ROS subscribers airsim_odom_sub_ = nh_->create_subscription("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, std::bind(&PIDPositionController::airsim_odom_cb, this, _1)); @@ -88,8 +87,7 @@ void PIDPositionController::initialize_ros() gps_goal_override_srvr_ = nh_->create_service("/airsim_node/gps_goal/override", std::bind(&PIDPositionController::gps_goal_srv_override_cb, this, _1, _2)); // ROS timers - //update_control_cmd_timer_ = nh_private_->createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); - update_control_cmd_timer_ = nh_private_->create_wall_timer(std::chrono::duration(update_control_every_n_sec), std::bind(&PIDPositionController::update_control_cmd_timer_cb, this)); + update_control_cmd_timer_ = nh_->create_wall_timer(std::chrono::duration(update_control_every_n_sec), std::bind(&PIDPositionController::update_control_cmd_timer_cb, this)); } void PIDPositionController::airsim_odom_cb(const nav_msgs::msg::Odometry::SharedPtr odom_msg) diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp index 352bd8bbf6..619548fc09 100755 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple_node.cpp @@ -7,9 +7,8 @@ int main(int argc, char** argv) rclcpp::NodeOptions node_options; node_options.automatically_declare_parameters_from_overrides(true); std::shared_ptr nh = rclcpp::Node::make_shared("pid_position_controller_simple_node", node_options); - std::shared_ptr nh_private = nh->create_sub_node("private"); - PIDPositionController controller(nh, nh /* nh_private */); //ToDo - do we really need nh_private? + PIDPositionController controller(nh); // int num_threads = 1; // ros::MultiThreadedSpinner multi_thread(num_threads); From 98f223f398f0c44a6907a93458c26957950939dc Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 03:02:19 -0700 Subject: [PATCH 059/123] - update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index dc2606f195..2dadbe6731 100644 --- a/.gitignore +++ b/.gitignore @@ -384,6 +384,7 @@ ros/src/CMakeLists.txt # ROS2 ros2/install/ ros2/log/ +ros2/src/log # docs docs/README.md From 657da123bd3d568e1bd358b37cc476a25428a560 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 03:40:36 -0700 Subject: [PATCH 060/123] - apply clang format --- .../include/airsim_ros_wrapper.h | 6 +- .../include/pd_position_controller_simple.h | 3 +- ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 4 +- .../src/airsim_ros_wrapper.cpp | 87 +++++++++---------- .../src/pd_position_controller_simple.cpp | 12 ++- 5 files changed, 52 insertions(+), 60 deletions(-) mode change 100755 => 100644 ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h mode change 100755 => 100644 ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h mode change 100755 => 100644 ros2/src/airsim_ros_pkgs/src/airsim_node.cpp mode change 100755 => 100644 ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h old mode 100755 new mode 100644 index f3cee1e9e1..ac2efeafcf --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -170,7 +170,7 @@ class AirsimROSWrapper std::vector> magnetometer_pubs; std::vector> distance_pubs; std::vector> lidar_pubs; - + // handle lidar seperately for max performance as data is collected on its own thread/callback nav_msgs::msg::Odometry curr_odom; @@ -304,7 +304,7 @@ class AirsimROSWrapper rclcpp::Time airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const; rclcpp::Time chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const; - template + template const SensorPublisher create_sensor_publisher(const string& sensor_type_name, const string& sensor_name, SensorBase::SensorType sensor_type, const string& topic_name, int QoS); private: @@ -343,8 +343,6 @@ class AirsimROSWrapper std::shared_ptr nh_img_; std::shared_ptr nh_lidar_; - - // todo not sure if async spinners shuold be inside this class, or should be instantiated in airsim_node.cpp, and cb queues should be public // todo for multiple drones with multiple sensors, this won't scale. make it a part of VehicleROS? diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h old mode 100755 new mode 100644 index 8e15ec582d..e74d0440cd --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -127,13 +127,12 @@ class PIDPositionController rclcpp::Publisher::SharedPtr airsim_vel_cmd_world_frame_pub_; rclcpp::Subscription::SharedPtr airsim_odom_sub_; rclcpp::Subscription::SharedPtr home_geopoint_sub_; - + rclcpp::Service::SharedPtr local_position_goal_srvr_; rclcpp::Service::SharedPtr local_position_goal_override_srvr_; rclcpp::Service::SharedPtr gps_goal_srvr_; rclcpp::Service::SharedPtr gps_goal_override_srvr_; - // rclcpp::Service<>::SharedPtr local_position_goal_srvr_; // rclcpp::Service<>::SharedPtr local_position_goal_override_srvr_; // rclcpp::Service<>::SharedPtr gps_goal_srvr_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp old mode 100755 new mode 100644 index cced7d00a9..dda3edb8b9 --- a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -19,7 +19,7 @@ int main(int argc, char** argv) executor.add_node(nh_img); while (rclcpp::ok()) { executor.spin(); - } + } } if (airsim_ros_wrapper.is_used_lidar_timer_cb_queue_) { @@ -27,7 +27,7 @@ int main(int argc, char** argv) executor.add_node(nh_lidar); while (rclcpp::ok()) { executor.spin(); - } + } } rclcpp::spin(nh); diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 7cd4dd2b62..54f5e8cbdf 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -29,9 +29,10 @@ const std::unordered_map AirsimROSWrapper::image_type_int_to_s AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_img, const std::shared_ptr nh_lidar, const std::string& host_ip) : nh_(nh) - , nh_img_(nh_img), nh_lidar_(nh_lidar) - // , img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ - // lidar_async_spinner_(1, &lidar_timer_cb_queue_) + , nh_img_(nh_img) + , nh_lidar_(nh_lidar) + // , img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ + // lidar_async_spinner_(1, &lidar_timer_cb_queue_) , // same as above, but for lidar host_ip_(host_ip) , airsim_client_images_(host_ip) @@ -53,8 +54,10 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const } tf_buffer_ = std::make_shared(nh_->get_clock()); tf_listener_ = std::make_shared(*tf_buffer_); - tf_broadcaster_ = std::make_shared(nh_);; - static_tf_pub_= std::make_shared(nh_);; + tf_broadcaster_ = std::make_shared(nh_); + ; + static_tf_pub_ = std::make_shared(nh_); + ; initialize_ros(); std::cout << "AirsimROSWrapper Initialized!\n"; @@ -108,8 +111,8 @@ void AirsimROSWrapper::initialize_ros() // todo enforce dynamics constraints in this node as well? // nh_->get_parameter("max_vert_vel_", max_vert_vel_); // nh_->get_parameter("max_horz_vel", max_horz_vel_) - - nh_->declare_parameter("vehicle_name",rclcpp::ParameterValue("")); + + nh_->declare_parameter("vehicle_name", rclcpp::ParameterValue("")); create_ros_pubs_from_settings_json(); airsim_control_update_timer_ = nh_->create_wall_timer(std::chrono::duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); // airsim_control_update_timer_ = nh_->createTimer(rclcpp::Duration (update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); @@ -173,8 +176,8 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() drone->vel_cmd_world_frame_sub = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_world_frame", 1, fcn_vel_cmd_world_frame_sub); std::function, std::shared_ptr)> fcn_takeoff_srvr = std::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name); - drone->takeoff_srvr = nh_->create_service("~/" + curr_vehicle_name + "/takeoff",fcn_takeoff_srvr); - + drone->takeoff_srvr = nh_->create_service("~/" + curr_vehicle_name + "/takeoff", fcn_takeoff_srvr); + std::function, std::shared_ptr)> fcn_land_srvr = std::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name); drone->land_srvr = nh_->create_service("~/" + curr_vehicle_name + "/land", fcn_land_srvr); // vehicle_ros.reset_srvr = nh_->create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); @@ -224,47 +227,42 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() } // iterate over sensors - // std::vector sensors; + // std::vector sensors; for (auto& curr_sensor_map : vehicle_setting->sensors) { auto& sensor_name = curr_sensor_map.first; auto& sensor_setting = curr_sensor_map.second; - + if (sensor_setting->enabled) { switch (sensor_setting->sensor_type) { case SensorBase::SensorType::Barometer: { - SensorPublisher sensor_publisher = - create_sensor_publisher("Barometer",sensor_setting->sensor_name, sensor_setting->sensor_type, - curr_vehicle_name + "/altimeter/" + sensor_name, 10); + SensorPublisher sensor_publisher = + create_sensor_publisher("Barometer", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/altimeter/" + sensor_name, 10); vehicle_ros->barometer_pubs.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Imu: { - SensorPublisher sensor_publisher = - create_sensor_publisher("Imu",sensor_setting->sensor_name, sensor_setting->sensor_type, - curr_vehicle_name + "/imu/" + sensor_name, 10); + SensorPublisher sensor_publisher = + create_sensor_publisher("Imu", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/imu/" + sensor_name, 10); vehicle_ros->imu_pubs.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Gps: { - SensorPublisher sensor_publisher = - create_sensor_publisher("Gps",sensor_setting->sensor_name, sensor_setting->sensor_type, - curr_vehicle_name + "/gps/" + sensor_name, 10); - vehicle_ros->gps_pubs.emplace_back(sensor_publisher); + SensorPublisher sensor_publisher = + create_sensor_publisher("Gps", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/gps/" + sensor_name, 10); + vehicle_ros->gps_pubs.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Magnetometer: { - SensorPublisher sensor_publisher = - create_sensor_publisher("Magnetometer",sensor_setting->sensor_name, sensor_setting->sensor_type, - curr_vehicle_name + "/magnetometer/" + sensor_name, 10); - vehicle_ros->magnetometer_pubs.emplace_back(sensor_publisher); + SensorPublisher sensor_publisher = + create_sensor_publisher("Magnetometer", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/magnetometer/" + sensor_name, 10); + vehicle_ros->magnetometer_pubs.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Distance: { - SensorPublisher sensor_publisher = - create_sensor_publisher("Distance",sensor_setting->sensor_name, sensor_setting->sensor_type, - curr_vehicle_name + "/distance/" + sensor_name, 10); - vehicle_ros->distance_pubs.emplace_back(sensor_publisher); + SensorPublisher sensor_publisher = + create_sensor_publisher("Distance", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/distance/" + sensor_name, 10); + vehicle_ros->distance_pubs.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Lidar: { @@ -272,10 +270,9 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() msr::airlib::LidarSimpleParams params; params.initializeFromSettings(lidar_setting); append_static_lidar_tf(vehicle_ros.get(), sensor_name, params); - - SensorPublisher sensor_publisher = - create_sensor_publisher("Lidar",sensor_setting->sensor_name, sensor_setting->sensor_type, - curr_vehicle_name + "/lidar/" + sensor_name, 10); + + SensorPublisher sensor_publisher = + create_sensor_publisher("Lidar", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/lidar/" + sensor_name, 10); vehicle_ros->lidar_pubs.emplace_back(sensor_publisher); lidar_cnt += 1; break; @@ -284,7 +281,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() throw std::invalid_argument("Unexpected sensor type"); } } - // sensors.emplace_back(sensor_publisher); + // sensors.emplace_back(sensor_publisher); } } @@ -928,11 +925,11 @@ sensor_msgs::msg::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo rclcpp::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const { - + auto dur = std::chrono::duration_cast(stamp.time_since_epoch()); - // auto dur = std::chrono::duration(stamp.time_since_epoch()); + // auto dur = std::chrono::duration(stamp.time_since_epoch()); rclcpp::Time cur_time(dur.count()); //ToDo - is the right conversion? -// cur_time.fromSec(dur.count()); + // cur_time.fromSec(dur.count()); return cur_time; } @@ -1086,7 +1083,7 @@ void AirsimROSWrapper::publish_vehicle_state() alt_msg.header.frame_id = vehicle_ros->vehicle_name; sensor_publisher.publisher->publish(alt_msg); } - + for (auto& sensor_publisher : vehicle_ros->imu_pubs) { auto imu_data = airsim_client_->getImuData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); sensor_msgs::msg::Imu imu_msg = get_imu_msg_from_airsim(imu_data); @@ -1340,10 +1337,10 @@ cv::Mat AirsimROSWrapper::manual_decode_depth(const ImageResponse& img_response) } std::shared_ptr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, - const rclcpp::Time curr_ros_time, - const std::string frame_id) + const rclcpp::Time curr_ros_time, + const std::string frame_id) { - std::shared_ptr img_msg_ptr = std::make_shared();//boost::make_shared(); + std::shared_ptr img_msg_ptr = std::make_shared(); //boost::make_shared(); img_msg_ptr->data = img_response.image_data_uint8; img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes img_msg_ptr->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); @@ -1358,8 +1355,8 @@ std::shared_ptr AirsimROSWrapper::get_img_msg_from_resp } std::shared_ptr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, - const rclcpp::Time curr_ros_time, - const std::string frame_id) + const rclcpp::Time curr_ros_time, + const std::string frame_id) { // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, // hence the dependency on opencv and cv_bridge. however, this is an extremely fast op, so no big deal. @@ -1372,8 +1369,8 @@ std::shared_ptr AirsimROSWrapper::get_depth_img_msg_fro // todo have a special stereo pair mode and get projection matrix by calculating offset wrt drone body frame? sensor_msgs::msg::CameraInfo AirsimROSWrapper::generate_cam_info(const std::string& camera_name, - const CameraSetting& camera_setting, - const CaptureSetting& capture_setting) const + const CameraSetting& camera_setting, + const CaptureSetting& capture_setting) const { sensor_msgs::msg::CameraInfo cam_info_msg; cam_info_msg.header.frame_id = camera_name + "_optical"; diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp old mode 100755 new mode 100644 index 7ea96dc3d7..3c46462d3e --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -57,10 +57,8 @@ void PIDPositionController::initialize_ros() nh_->get_parameter("update_control_every_n_sec", update_control_every_n_sec); auto parameters_client = std::make_shared(nh_, "/airsim_node"); - while (!parameters_client->wait_for_service(std::chrono::seconds(1))) - { - if (!rclcpp::ok()) - { + while (!parameters_client->wait_for_service(std::chrono::seconds(1))) { + if (!rclcpp::ok()) { RCLCPP_ERROR(nh_->get_logger(), "Interrupted while waiting for the service. Exiting."); rclcpp::shutdown(); } @@ -71,7 +69,7 @@ void PIDPositionController::initialize_ros() while (vehicle_name == "") { vehicle_name = parameters_client->get_parameter("vehicle_name", vehicle_name); - RCLCPP_INFO_STREAM(nh_->get_logger() ,"Waiting vehicle name"); + RCLCPP_INFO_STREAM(nh_->get_logger(), "Waiting vehicle name"); } // ROS publishers @@ -203,7 +201,7 @@ bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptrget_logger(), "[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); + << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; target_position_.y = ned_goal[1]; @@ -253,7 +251,7 @@ bool PIDPositionController::gps_goal_srv_override_cb(const std::shared_ptrget_logger(), "[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); + << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; target_position_.y = ned_goal[1]; From 3b8b71cdd10f4f11ebbdc21948deaa304ebe6f3b Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 03:59:47 -0700 Subject: [PATCH 061/123] - apply clang --- ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 2e9a6ac44a..72f7d2a376 100644 --- a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -191,7 +191,7 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Req else // use airlib::GeodeticToNedFast { RCLCPP_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); + << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; target_position_.y = ned_goal[1]; @@ -241,7 +241,7 @@ bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosi else // use airlib::GeodeticToNedFast { RCLCPP_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); + << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; target_position_.y = ned_goal[1]; From 74e5e2f2155daca032ff6cdf5f77c96d2b3b8b62 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 04:54:56 -0700 Subject: [PATCH 062/123] - undo changes in ros1 src files --- .../src/airsim_ros_wrapper.cpp | 4 +- .../src/pd_position_controller_simple.cpp | 40 +++++++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index a97df9b1e3..518d757d77 100644 --- a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -41,11 +41,11 @@ AirsimROSWrapper::AirsimROSWrapper(const ros::NodeHandle& nh, const ros::NodeHan if (AirSimSettings::singleton().simmode_name != AirSimSettings::kSimModeTypeCar) { airsim_mode_ = AIRSIM_MODE::DRONE; - RCLCPP_INFO("Setting ROS wrapper to DRONE mode"); + ROS_INFO("Setting ROS wrapper to DRONE mode"); } else { airsim_mode_ = AIRSIM_MODE::CAR; - RCLCPP_INFO("Setting ROS wrapper to CAR mode"); + ROS_INFO("Setting ROS wrapper to CAR mode"); } initialize_ros(); diff --git a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 72f7d2a376..561c186fd5 100644 --- a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -59,7 +59,7 @@ void PIDPositionController::initialize_ros() while (vehicle_name == "") { nh_private_.getParam("/vehicle_name", vehicle_name); - RCLCPP_INFO_STREAM("Waiting vehicle name"); + ROS_INFO_STREAM("Waiting vehicle name"); } // ROS publishers @@ -110,7 +110,7 @@ bool PIDPositionController::local_position_goal_srv_cb(airsim_ros_pkgs::SetLocal if (has_goal_ && !reached_goal_) { // todo maintain array of position goals - RCLCPP_ERROR_STREAM("[PIDPositionController] denying position goal request. I am still following the previous goal"); + ROS_ERROR_STREAM("[PIDPositionController] denying position goal request. I am still following the previous goal"); return false; } @@ -119,7 +119,7 @@ bool PIDPositionController::local_position_goal_srv_cb(airsim_ros_pkgs::SetLocal target_position_.y = request.y; target_position_.z = request.z; target_position_.yaw = request.yaw; - RCLCPP_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -130,7 +130,7 @@ bool PIDPositionController::local_position_goal_srv_cb(airsim_ros_pkgs::SetLocal } // Already have goal, and have reached it - RCLCPP_INFO_STREAM("[PIDPositionController] Already have goal and have reached it"); + ROS_INFO_STREAM("[PIDPositionController] Already have goal and have reached it"); return false; } @@ -144,7 +144,7 @@ bool PIDPositionController::local_position_goal_srv_override_cb(airsim_ros_pkgs: target_position_.y = request.y; target_position_.z = request.z; target_position_.yaw = request.yaw; - RCLCPP_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -160,7 +160,7 @@ void PIDPositionController::home_geopoint_cb(const airsim_ros_pkgs::GPSYaw& gps_ return; gps_home_msg_ = gps_msg; has_home_geo_ = true; - RCLCPP_INFO_STREAM("[PIDPositionController] GPS reference initializing " << gps_msg.latitude << ", " << gps_msg.longitude << ", " << gps_msg.altitude); + ROS_INFO_STREAM("[PIDPositionController] GPS reference initializing " << gps_msg.latitude << ", " << gps_msg.longitude << ", " << gps_msg.altitude); geodetic_converter_.initialiseReference(gps_msg.latitude, gps_msg.longitude, gps_msg.altitude); } @@ -168,7 +168,7 @@ void PIDPositionController::home_geopoint_cb(const airsim_ros_pkgs::GPSYaw& gps_ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) { if (!has_home_geo_) { - RCLCPP_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); response.success = false; } @@ -183,14 +183,14 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Req geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); double n, e, d; geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); - // RCLCPP_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); target_position_.x = n; target_position_.y = e; target_position_.z = d; } else // use airlib::GeodeticToNedFast { - RCLCPP_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; @@ -199,8 +199,8 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Req } target_position_.yaw = request.yaw; // todo - RCLCPP_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - RCLCPP_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -211,7 +211,7 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Req } // Already have goal, this shouldn't happen - RCLCPP_INFO_STREAM("[PIDPositionController] Goal already received, ignoring!"); + ROS_INFO_STREAM("[PIDPositionController] Goal already received, ignoring!"); return false; } @@ -219,7 +219,7 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Req bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) { if (!has_home_geo_) { - RCLCPP_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); response.success = false; } @@ -233,14 +233,14 @@ bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosi geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); double n, e, d; geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); - // RCLCPP_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); target_position_.x = n; target_position_.y = e; target_position_.z = d; } else // use airlib::GeodeticToNedFast { - RCLCPP_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; @@ -249,8 +249,8 @@ bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosi } target_position_.yaw = request.yaw; // todo - RCLCPP_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - RCLCPP_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -265,19 +265,19 @@ void PIDPositionController::update_control_cmd_timer_cb(const ros::TimerEvent& e // todo check if odometry is too old!! // if no odom, don't do anything. if (!has_odom_) { - RCLCPP_ERROR_STREAM("[PIDPositionController] Waiting for odometry!"); + ROS_ERROR_STREAM("[PIDPositionController] Waiting for odometry!"); return; } if (has_goal_) { check_reached_goal(); if (reached_goal_) { - RCLCPP_INFO_STREAM("[PIDPositionController] Reached goal! Hovering at position."); + ROS_INFO_STREAM("[PIDPositionController] Reached goal! Hovering at position."); has_goal_ = false; // dear future self, this function doesn't return coz we need to keep on actively hovering at last goal pose. don't act smart } else { - RCLCPP_INFO_STREAM("[PIDPositionController] Moving to goal."); + ROS_INFO_STREAM("[PIDPositionController] Moving to goal."); } } From 0427c94e6b97c7fa08ad5589bc99fc4c4ea52c46 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 04:56:51 -0700 Subject: [PATCH 063/123] - apply clang --- ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 561c186fd5..676330df71 100644 --- a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -191,7 +191,7 @@ bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Req else // use airlib::GeodeticToNedFast { ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); + << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; target_position_.y = ned_goal[1]; @@ -241,7 +241,7 @@ bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosi else // use airlib::GeodeticToNedFast { ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); + << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; target_position_.y = ned_goal[1]; From cc69f61f55ce6068cbcbd36d9e7c1a8026742bd5 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 05:10:10 -0700 Subject: [PATCH 064/123] - revert change in ros1 --- .../src/pd_position_controller_simple.cpp | 682 +++++++++--------- 1 file changed, 341 insertions(+), 341 deletions(-) diff --git a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index 676330df71..b9bc353b27 100644 --- a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -1,342 +1,342 @@ -#include "pd_position_controller_simple.h" - -bool PIDParams::load_from_rosparams(const ros::NodeHandle& nh) -{ - bool found = true; - - found = found && nh.getParam("kp_x", kp_x); - found = found && nh.getParam("kp_y", kp_y); - found = found && nh.getParam("kp_z", kp_z); - found = found && nh.getParam("kp_yaw", kp_yaw); - - found = found && nh.getParam("kd_x", kd_x); - found = found && nh.getParam("kd_y", kd_y); - found = found && nh.getParam("kd_z", kd_z); - found = found && nh.getParam("kd_yaw", kd_yaw); - - found = found && nh.getParam("reached_thresh_xyz", reached_thresh_xyz); - found = found && nh.getParam("reached_yaw_degrees", reached_yaw_degrees); - - return found; -} - -bool DynamicConstraints::load_from_rosparams(const ros::NodeHandle& nh) -{ - bool found = true; - - found = found && nh.getParam("max_vel_horz_abs", max_vel_horz_abs); - found = found && nh.getParam("max_vel_vert_abs", max_vel_vert_abs); - found = found && nh.getParam("max_yaw_rate_degree", max_yaw_rate_degree); - - return found; -} - -PIDPositionController::PIDPositionController(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private) - : nh_(nh), nh_private_(nh_private), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) -{ - params_.load_from_rosparams(nh_private_); - constraints_.load_from_rosparams(nh_); - initialize_ros(); - reset_errors(); -} - -void PIDPositionController::reset_errors() -{ - prev_error_.x = 0.0; - prev_error_.y = 0.0; - prev_error_.z = 0.0; - prev_error_.yaw = 0.0; -} - -void PIDPositionController::initialize_ros() -{ - vel_cmd_ = airsim_ros_pkgs::VelCmd(); - // ROS params - double update_control_every_n_sec; - nh_private_.getParam("update_control_every_n_sec", update_control_every_n_sec); - - std::string vehicle_name; - - while (vehicle_name == "") { - nh_private_.getParam("/vehicle_name", vehicle_name); - ROS_INFO_STREAM("Waiting vehicle name"); - } - - // ROS publishers - airsim_vel_cmd_world_frame_pub_ = nh_private_.advertise("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); - - // ROS subscribers - airsim_odom_sub_ = nh_.subscribe("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, &PIDPositionController::airsim_odom_cb, this); - home_geopoint_sub_ = nh_.subscribe("/airsim_node/home_geo_point", 50, &PIDPositionController::home_geopoint_cb, this); - // todo publish this under global nodehandle / "airsim node" and hide it from user - local_position_goal_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal", &PIDPositionController::local_position_goal_srv_cb, this); - local_position_goal_override_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal/override", &PIDPositionController::local_position_goal_srv_override_cb, this); - gps_goal_srvr_ = nh_.advertiseService("/airsim_node/gps_goal", &PIDPositionController::gps_goal_srv_cb, this); - gps_goal_override_srvr_ = nh_.advertiseService("/airsim_node/gps_goal/override", &PIDPositionController::gps_goal_srv_override_cb, this); - - // ROS timers - update_control_cmd_timer_ = nh_private_.createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); -} - -void PIDPositionController::airsim_odom_cb(const nav_msgs::Odometry& odom_msg) -{ - has_odom_ = true; - curr_odom_ = odom_msg; - curr_position_.x = odom_msg.pose.pose.position.x; - curr_position_.y = odom_msg.pose.pose.position.y; - curr_position_.z = odom_msg.pose.pose.position.z; - curr_position_.yaw = utils::get_yaw_from_quat_msg(odom_msg.pose.pose.orientation); -} - -// todo maintain internal representation as eigen vec? -// todo check if low velocity if within thresh? -// todo maintain separate errors for XY and Z -void PIDPositionController::check_reached_goal() -{ - double diff_xyz = sqrt((target_position_.x - curr_position_.x) * (target_position_.x - curr_position_.x) + (target_position_.y - curr_position_.y) * (target_position_.y - curr_position_.y) + (target_position_.z - curr_position_.z) * (target_position_.z - curr_position_.z)); - - double diff_yaw = math_common::angular_dist(target_position_.yaw, curr_position_.yaw); - - // todo save this in degrees somewhere to avoid repeated conversion - if (diff_xyz < params_.reached_thresh_xyz && diff_yaw < math_common::deg2rad(params_.reached_yaw_degrees)) - reached_goal_ = true; -} - -bool PIDPositionController::local_position_goal_srv_cb(airsim_ros_pkgs::SetLocalPosition::Request& request, airsim_ros_pkgs::SetLocalPosition::Response& response) -{ - // this tells the update timer callback to not do active hovering - if (!got_goal_once_) - got_goal_once_ = true; - - if (has_goal_ && !reached_goal_) { - // todo maintain array of position goals - ROS_ERROR_STREAM("[PIDPositionController] denying position goal request. I am still following the previous goal"); - return false; - } - - if (!has_goal_) { - target_position_.x = request.x; - target_position_.y = request.y; - target_position_.z = request.z; - target_position_.yaw = request.yaw; - ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); - - // todo error checks - // todo fill response - has_goal_ = true; - reached_goal_ = false; - reset_errors(); // todo - return true; - } - - // Already have goal, and have reached it - ROS_INFO_STREAM("[PIDPositionController] Already have goal and have reached it"); - return false; -} - -bool PIDPositionController::local_position_goal_srv_override_cb(airsim_ros_pkgs::SetLocalPosition::Request& request, airsim_ros_pkgs::SetLocalPosition::Response& response) -{ - // this tells the update timer callback to not do active hovering - if (!got_goal_once_) - got_goal_once_ = true; - - target_position_.x = request.x; - target_position_.y = request.y; - target_position_.z = request.z; - target_position_.yaw = request.yaw; - ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); - - // todo error checks - // todo fill response - has_goal_ = true; - reached_goal_ = false; - reset_errors(); // todo - return true; -} - -void PIDPositionController::home_geopoint_cb(const airsim_ros_pkgs::GPSYaw& gps_msg) -{ - if (has_home_geo_) - return; - gps_home_msg_ = gps_msg; - has_home_geo_ = true; - ROS_INFO_STREAM("[PIDPositionController] GPS reference initializing " << gps_msg.latitude << ", " << gps_msg.longitude << ", " << gps_msg.altitude); - geodetic_converter_.initialiseReference(gps_msg.latitude, gps_msg.longitude, gps_msg.altitude); -} - -// todo do relative altitude, or add an option for the same? -bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) -{ - if (!has_home_geo_) { - ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); - response.success = false; - } - - // convert GPS goal to NED goal - - if (!has_goal_) { - msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); - msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); - bool use_eth_lib = true; - if (use_eth_lib_for_geodetic_conv_) { - double initial_latitude, initial_longitude, initial_altitude; - geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); - double n, e, d; - geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); - // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); - target_position_.x = n; - target_position_.y = e; - target_position_.z = d; - } - else // use airlib::GeodeticToNedFast - { - ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); - msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); - target_position_.x = ned_goal[0]; - target_position_.y = ned_goal[1]; - target_position_.z = ned_goal[2]; - } - - target_position_.yaw = request.yaw; // todo - ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); - - // todo error checks - // todo fill response - has_goal_ = true; - reached_goal_ = false; - reset_errors(); // todo - return true; - } - - // Already have goal, this shouldn't happen - ROS_INFO_STREAM("[PIDPositionController] Goal already received, ignoring!"); - return false; -} - -// todo do relative altitude, or add an option for the same? -bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) -{ - if (!has_home_geo_) { - ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); - response.success = false; - } - - // convert GPS goal to NED goal - - msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); - msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); - bool use_eth_lib = true; - if (use_eth_lib_for_geodetic_conv_) { - double initial_latitude, initial_longitude, initial_altitude; - geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); - double n, e, d; - geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); - // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); - target_position_.x = n; - target_position_.y = e; - target_position_.z = d; - } - else // use airlib::GeodeticToNedFast - { - ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); - msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); - target_position_.x = ned_goal[0]; - target_position_.y = ned_goal[1]; - target_position_.z = ned_goal[2]; - } - - target_position_.yaw = request.yaw; // todo - ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); - - // todo error checks - // todo fill response - has_goal_ = true; - reached_goal_ = false; - reset_errors(); // todo - return true; -} - -void PIDPositionController::update_control_cmd_timer_cb(const ros::TimerEvent& event) -{ - // todo check if odometry is too old!! - // if no odom, don't do anything. - if (!has_odom_) { - ROS_ERROR_STREAM("[PIDPositionController] Waiting for odometry!"); - return; - } - - if (has_goal_) { - check_reached_goal(); - if (reached_goal_) { - ROS_INFO_STREAM("[PIDPositionController] Reached goal! Hovering at position."); - has_goal_ = false; - // dear future self, this function doesn't return coz we need to keep on actively hovering at last goal pose. don't act smart - } - else { - ROS_INFO_STREAM("[PIDPositionController] Moving to goal."); - } - } - - // only compute and send control commands for hovering / moving to pose, if we received a goal at least once in the past - if (got_goal_once_) { - compute_control_cmd(); - enforce_dynamic_constraints(); - publish_control_cmd(); - } -} - -void PIDPositionController::compute_control_cmd() -{ - curr_error_.x = target_position_.x - curr_position_.x; - curr_error_.y = target_position_.y - curr_position_.y; - curr_error_.z = target_position_.z - curr_position_.z; - curr_error_.yaw = math_common::angular_dist(curr_position_.yaw, target_position_.yaw); - - double p_term_x = params_.kp_x * curr_error_.x; - double p_term_y = params_.kp_y * curr_error_.y; - double p_term_z = params_.kp_z * curr_error_.z; - double p_term_yaw = params_.kp_yaw * curr_error_.yaw; - - double d_term_x = params_.kd_x * prev_error_.x; - double d_term_y = params_.kd_y * prev_error_.y; - double d_term_z = params_.kd_z * prev_error_.z; - double d_term_yaw = params_.kp_yaw * prev_error_.yaw; - - prev_error_ = curr_error_; - - vel_cmd_.twist.linear.x = p_term_x + d_term_x; - vel_cmd_.twist.linear.y = p_term_y + d_term_y; - vel_cmd_.twist.linear.z = p_term_z + d_term_z; - vel_cmd_.twist.angular.z = p_term_yaw + d_term_yaw; // todo -} - -void PIDPositionController::enforce_dynamic_constraints() -{ - double vel_norm_horz = sqrt((vel_cmd_.twist.linear.x * vel_cmd_.twist.linear.x) + (vel_cmd_.twist.linear.y * vel_cmd_.twist.linear.y)); - - if (vel_norm_horz > constraints_.max_vel_horz_abs) { - vel_cmd_.twist.linear.x = (vel_cmd_.twist.linear.x / vel_norm_horz) * constraints_.max_vel_horz_abs; - vel_cmd_.twist.linear.y = (vel_cmd_.twist.linear.y / vel_norm_horz) * constraints_.max_vel_horz_abs; - } - - if (std::fabs(vel_cmd_.twist.linear.z) > constraints_.max_vel_vert_abs) { - // todo just add a sgn funciton in common utils? return double to be safe. - // template double sgn(T val) { return (T(0) < val) - (val < T(0)); } - vel_cmd_.twist.linear.z = (vel_cmd_.twist.linear.z / std::fabs(vel_cmd_.twist.linear.z)) * constraints_.max_vel_vert_abs; - } - // todo yaw limits - if (std::fabs(vel_cmd_.twist.linear.z) > constraints_.max_yaw_rate_degree) { - // todo just add a sgn funciton in common utils? return double to be safe. - // template double sgn(T val) { return (T(0) < val) - (val < T(0)); } - vel_cmd_.twist.linear.z = (vel_cmd_.twist.linear.z / std::fabs(vel_cmd_.twist.linear.z)) * constraints_.max_yaw_rate_degree; - } -} - -void PIDPositionController::publish_control_cmd() -{ - airsim_vel_cmd_world_frame_pub_.publish(vel_cmd_); +#include "pd_position_controller_simple.h" + +bool PIDParams::load_from_rosparams(const ros::NodeHandle& nh) +{ + bool found = true; + + found = found && nh.getParam("kp_x", kp_x); + found = found && nh.getParam("kp_y", kp_y); + found = found && nh.getParam("kp_z", kp_z); + found = found && nh.getParam("kp_yaw", kp_yaw); + + found = found && nh.getParam("kd_x", kd_x); + found = found && nh.getParam("kd_y", kd_y); + found = found && nh.getParam("kd_z", kd_z); + found = found && nh.getParam("kd_yaw", kd_yaw); + + found = found && nh.getParam("reached_thresh_xyz", reached_thresh_xyz); + found = found && nh.getParam("reached_yaw_degrees", reached_yaw_degrees); + + return found; +} + +bool DynamicConstraints::load_from_rosparams(const ros::NodeHandle& nh) +{ + bool found = true; + + found = found && nh.getParam("max_vel_horz_abs", max_vel_horz_abs); + found = found && nh.getParam("max_vel_vert_abs", max_vel_vert_abs); + found = found && nh.getParam("max_yaw_rate_degree", max_yaw_rate_degree); + + return found; +} + +PIDPositionController::PIDPositionController(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private) + : nh_(nh), nh_private_(nh_private), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) +{ + params_.load_from_rosparams(nh_private_); + constraints_.load_from_rosparams(nh_); + initialize_ros(); + reset_errors(); +} + +void PIDPositionController::reset_errors() +{ + prev_error_.x = 0.0; + prev_error_.y = 0.0; + prev_error_.z = 0.0; + prev_error_.yaw = 0.0; +} + +void PIDPositionController::initialize_ros() +{ + vel_cmd_ = airsim_ros_pkgs::VelCmd(); + // ROS params + double update_control_every_n_sec; + nh_private_.getParam("update_control_every_n_sec", update_control_every_n_sec); + + std::string vehicle_name; + + while (vehicle_name == "") { + nh_private_.getParam("/vehicle_name", vehicle_name); + ROS_INFO_STREAM("Waiting vehicle name"); + } + + // ROS publishers + airsim_vel_cmd_world_frame_pub_ = nh_private_.advertise("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); + + // ROS subscribers + airsim_odom_sub_ = nh_.subscribe("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, &PIDPositionController::airsim_odom_cb, this); + home_geopoint_sub_ = nh_.subscribe("/airsim_node/home_geo_point", 50, &PIDPositionController::home_geopoint_cb, this); + // todo publish this under global nodehandle / "airsim node" and hide it from user + local_position_goal_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal", &PIDPositionController::local_position_goal_srv_cb, this); + local_position_goal_override_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal/override", &PIDPositionController::local_position_goal_srv_override_cb, this); + gps_goal_srvr_ = nh_.advertiseService("/airsim_node/gps_goal", &PIDPositionController::gps_goal_srv_cb, this); + gps_goal_override_srvr_ = nh_.advertiseService("/airsim_node/gps_goal/override", &PIDPositionController::gps_goal_srv_override_cb, this); + + // ROS timers + update_control_cmd_timer_ = nh_private_.createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); +} + +void PIDPositionController::airsim_odom_cb(const nav_msgs::Odometry& odom_msg) +{ + has_odom_ = true; + curr_odom_ = odom_msg; + curr_position_.x = odom_msg.pose.pose.position.x; + curr_position_.y = odom_msg.pose.pose.position.y; + curr_position_.z = odom_msg.pose.pose.position.z; + curr_position_.yaw = utils::get_yaw_from_quat_msg(odom_msg.pose.pose.orientation); +} + +// todo maintain internal representation as eigen vec? +// todo check if low velocity if within thresh? +// todo maintain separate errors for XY and Z +void PIDPositionController::check_reached_goal() +{ + double diff_xyz = sqrt((target_position_.x - curr_position_.x) * (target_position_.x - curr_position_.x) + (target_position_.y - curr_position_.y) * (target_position_.y - curr_position_.y) + (target_position_.z - curr_position_.z) * (target_position_.z - curr_position_.z)); + + double diff_yaw = math_common::angular_dist(target_position_.yaw, curr_position_.yaw); + + // todo save this in degrees somewhere to avoid repeated conversion + if (diff_xyz < params_.reached_thresh_xyz && diff_yaw < math_common::deg2rad(params_.reached_yaw_degrees)) + reached_goal_ = true; +} + +bool PIDPositionController::local_position_goal_srv_cb(airsim_ros_pkgs::SetLocalPosition::Request& request, airsim_ros_pkgs::SetLocalPosition::Response& response) +{ + // this tells the update timer callback to not do active hovering + if (!got_goal_once_) + got_goal_once_ = true; + + if (has_goal_ && !reached_goal_) { + // todo maintain array of position goals + ROS_ERROR_STREAM("[PIDPositionController] denying position goal request. I am still following the previous goal"); + return false; + } + + if (!has_goal_) { + target_position_.x = request.x; + target_position_.y = request.y; + target_position_.z = request.z; + target_position_.yaw = request.yaw; + ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; + } + + // Already have goal, and have reached it + ROS_INFO_STREAM("[PIDPositionController] Already have goal and have reached it"); + return false; +} + +bool PIDPositionController::local_position_goal_srv_override_cb(airsim_ros_pkgs::SetLocalPosition::Request& request, airsim_ros_pkgs::SetLocalPosition::Response& response) +{ + // this tells the update timer callback to not do active hovering + if (!got_goal_once_) + got_goal_once_ = true; + + target_position_.x = request.x; + target_position_.y = request.y; + target_position_.z = request.z; + target_position_.yaw = request.yaw; + ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; +} + +void PIDPositionController::home_geopoint_cb(const airsim_ros_pkgs::GPSYaw& gps_msg) +{ + if (has_home_geo_) + return; + gps_home_msg_ = gps_msg; + has_home_geo_ = true; + ROS_INFO_STREAM("[PIDPositionController] GPS reference initializing " << gps_msg.latitude << ", " << gps_msg.longitude << ", " << gps_msg.altitude); + geodetic_converter_.initialiseReference(gps_msg.latitude, gps_msg.longitude, gps_msg.altitude); +} + +// todo do relative altitude, or add an option for the same? +bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) +{ + if (!has_home_geo_) { + ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + response.success = false; + } + + // convert GPS goal to NED goal + + if (!has_goal_) { + msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); + msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); + bool use_eth_lib = true; + if (use_eth_lib_for_geodetic_conv_) { + double initial_latitude, initial_longitude, initial_altitude; + geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); + double n, e, d; + geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); + // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + target_position_.x = n; + target_position_.y = e; + target_position_.z = d; + } + else // use airlib::GeodeticToNedFast + { + ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + << "todo"); + msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); + target_position_.x = ned_goal[0]; + target_position_.y = ned_goal[1]; + target_position_.z = ned_goal[2]; + } + + target_position_.yaw = request.yaw; // todo + ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; + } + + // Already have goal, this shouldn't happen + ROS_INFO_STREAM("[PIDPositionController] Goal already received, ignoring!"); + return false; +} + +// todo do relative altitude, or add an option for the same? +bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) +{ + if (!has_home_geo_) { + ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + response.success = false; + } + + // convert GPS goal to NED goal + + msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); + msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); + bool use_eth_lib = true; + if (use_eth_lib_for_geodetic_conv_) { + double initial_latitude, initial_longitude, initial_altitude; + geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); + double n, e, d; + geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); + // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + target_position_.x = n; + target_position_.y = e; + target_position_.z = d; + } + else // use airlib::GeodeticToNedFast + { + ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + << "todo"); + msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); + target_position_.x = ned_goal[0]; + target_position_.y = ned_goal[1]; + target_position_.z = ned_goal[2]; + } + + target_position_.yaw = request.yaw; // todo + ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; +} + +void PIDPositionController::update_control_cmd_timer_cb(const ros::TimerEvent& event) +{ + // todo check if odometry is too old!! + // if no odom, don't do anything. + if (!has_odom_) { + ROS_ERROR_STREAM("[PIDPositionController] Waiting for odometry!"); + return; + } + + if (has_goal_) { + check_reached_goal(); + if (reached_goal_) { + ROS_INFO_STREAM("[PIDPositionController] Reached goal! Hovering at position."); + has_goal_ = false; + // dear future self, this function doesn't return coz we need to keep on actively hovering at last goal pose. don't act smart + } + else { + ROS_INFO_STREAM("[PIDPositionController] Moving to goal."); + } + } + + // only compute and send control commands for hovering / moving to pose, if we received a goal at least once in the past + if (got_goal_once_) { + compute_control_cmd(); + enforce_dynamic_constraints(); + publish_control_cmd(); + } +} + +void PIDPositionController::compute_control_cmd() +{ + curr_error_.x = target_position_.x - curr_position_.x; + curr_error_.y = target_position_.y - curr_position_.y; + curr_error_.z = target_position_.z - curr_position_.z; + curr_error_.yaw = math_common::angular_dist(curr_position_.yaw, target_position_.yaw); + + double p_term_x = params_.kp_x * curr_error_.x; + double p_term_y = params_.kp_y * curr_error_.y; + double p_term_z = params_.kp_z * curr_error_.z; + double p_term_yaw = params_.kp_yaw * curr_error_.yaw; + + double d_term_x = params_.kd_x * prev_error_.x; + double d_term_y = params_.kd_y * prev_error_.y; + double d_term_z = params_.kd_z * prev_error_.z; + double d_term_yaw = params_.kp_yaw * prev_error_.yaw; + + prev_error_ = curr_error_; + + vel_cmd_.twist.linear.x = p_term_x + d_term_x; + vel_cmd_.twist.linear.y = p_term_y + d_term_y; + vel_cmd_.twist.linear.z = p_term_z + d_term_z; + vel_cmd_.twist.angular.z = p_term_yaw + d_term_yaw; // todo +} + +void PIDPositionController::enforce_dynamic_constraints() +{ + double vel_norm_horz = sqrt((vel_cmd_.twist.linear.x * vel_cmd_.twist.linear.x) + (vel_cmd_.twist.linear.y * vel_cmd_.twist.linear.y)); + + if (vel_norm_horz > constraints_.max_vel_horz_abs) { + vel_cmd_.twist.linear.x = (vel_cmd_.twist.linear.x / vel_norm_horz) * constraints_.max_vel_horz_abs; + vel_cmd_.twist.linear.y = (vel_cmd_.twist.linear.y / vel_norm_horz) * constraints_.max_vel_horz_abs; + } + + if (std::fabs(vel_cmd_.twist.linear.z) > constraints_.max_vel_vert_abs) { + // todo just add a sgn funciton in common utils? return double to be safe. + // template double sgn(T val) { return (T(0) < val) - (val < T(0)); } + vel_cmd_.twist.linear.z = (vel_cmd_.twist.linear.z / std::fabs(vel_cmd_.twist.linear.z)) * constraints_.max_vel_vert_abs; + } + // todo yaw limits + if (std::fabs(vel_cmd_.twist.linear.z) > constraints_.max_yaw_rate_degree) { + // todo just add a sgn funciton in common utils? return double to be safe. + // template double sgn(T val) { return (T(0) < val) - (val < T(0)); } + vel_cmd_.twist.linear.z = (vel_cmd_.twist.linear.z / std::fabs(vel_cmd_.twist.linear.z)) * constraints_.max_yaw_rate_degree; + } +} + +void PIDPositionController::publish_control_cmd() +{ + airsim_vel_cmd_world_frame_pub_.publish(vel_cmd_); } \ No newline at end of file From 05e3c322288c6ed343a872bb7c710cd4545f5bc6 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 05:19:56 -0700 Subject: [PATCH 065/123] - revert change in ros1 --- .../src/airsim_ros_wrapper.cpp | 2950 ++++++++--------- 1 file changed, 1475 insertions(+), 1475 deletions(-) diff --git a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 518d757d77..a948bea600 100644 --- a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -1,1476 +1,1476 @@ -#include -#include -// #include -// PLUGINLIB_EXPORT_CLASS(AirsimROSWrapper, nodelet::Nodelet) -#include "common/AirSimSettings.hpp" -#include - -constexpr char AirsimROSWrapper::CAM_YML_NAME[]; -constexpr char AirsimROSWrapper::WIDTH_YML_NAME[]; -constexpr char AirsimROSWrapper::HEIGHT_YML_NAME[]; -constexpr char AirsimROSWrapper::K_YML_NAME[]; -constexpr char AirsimROSWrapper::D_YML_NAME[]; -constexpr char AirsimROSWrapper::R_YML_NAME[]; -constexpr char AirsimROSWrapper::P_YML_NAME[]; -constexpr char AirsimROSWrapper::DMODEL_YML_NAME[]; - -const std::unordered_map AirsimROSWrapper::image_type_int_to_string_map_ = { - { 0, "Scene" }, - { 1, "DepthPlanar" }, - { 2, "DepthPerspective" }, - { 3, "DepthVis" }, - { 4, "DisparityNormalized" }, - { 5, "Segmentation" }, - { 6, "SurfaceNormals" }, - { 7, "Infrared" } -}; - -AirsimROSWrapper::AirsimROSWrapper(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private, const std::string& host_ip) - : nh_(nh), nh_private_(nh_private), img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ - lidar_async_spinner_(1, &lidar_timer_cb_queue_) - , // same as above, but for lidar - host_ip_(host_ip) - , airsim_client_images_(host_ip) - , airsim_client_lidar_(host_ip) - , airsim_settings_parser_(host_ip) - , tf_listener_(tf_buffer_) -{ - ros_clock_.clock.fromSec(0); - is_used_lidar_timer_cb_queue_ = false; - is_used_img_timer_cb_queue_ = false; - - if (AirSimSettings::singleton().simmode_name != AirSimSettings::kSimModeTypeCar) { - airsim_mode_ = AIRSIM_MODE::DRONE; - ROS_INFO("Setting ROS wrapper to DRONE mode"); - } - else { - airsim_mode_ = AIRSIM_MODE::CAR; - ROS_INFO("Setting ROS wrapper to CAR mode"); - } - - initialize_ros(); - - std::cout << "AirsimROSWrapper Initialized!\n"; -} - -void AirsimROSWrapper::initialize_airsim() -{ - // todo do not reset if already in air? - try { - - if (airsim_mode_ == AIRSIM_MODE::DRONE) { - airsim_client_ = std::unique_ptr(new msr::airlib::MultirotorRpcLibClient(host_ip_)); - } - else { - airsim_client_ = std::unique_ptr(new msr::airlib::CarRpcLibClient(host_ip_)); - } - airsim_client_->confirmConnection(); - airsim_client_images_.confirmConnection(); - airsim_client_lidar_.confirmConnection(); - - for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - airsim_client_->enableApiControl(true, vehicle_name_ptr_pair.first); // todo expose as rosservice? - airsim_client_->armDisarm(true, vehicle_name_ptr_pair.first); // todo exposes as rosservice? - } - - origin_geo_point_ = airsim_client_->getHomeGeoPoint(""); - // todo there's only one global origin geopoint for environment. but airsim API accept a parameter vehicle_name? inside carsimpawnapi.cpp, there's a geopoint being assigned in the constructor. by? - origin_geo_point_msg_ = get_gps_msg_from_airsim_geo_point(origin_geo_point_); - } - catch (rpc::rpc_error& e) { - std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API, something went wrong." << std::endl - << msg << std::endl; - } -} - -void AirsimROSWrapper::initialize_ros() -{ - - // ros params - double update_airsim_control_every_n_sec; - nh_private_.getParam("is_vulkan", is_vulkan_); - nh_private_.getParam("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); - nh_private_.getParam("publish_clock", publish_clock_); - nh_private_.param("world_frame_id", world_frame_id_, world_frame_id_); - odom_frame_id_ = world_frame_id_ == AIRSIM_FRAME_ID ? AIRSIM_ODOM_FRAME_ID : ENU_ODOM_FRAME_ID; - nh_private_.param("odom_frame_id", odom_frame_id_, odom_frame_id_); - isENU_ = !(odom_frame_id_ == AIRSIM_ODOM_FRAME_ID); - nh_private_.param("coordinate_system_enu", isENU_, isENU_); - vel_cmd_duration_ = 0.05; // todo rosparam - // todo enforce dynamics constraints in this node as well? - // nh_.getParam("max_vert_vel_", max_vert_vel_); - // nh_.getParam("max_horz_vel", max_horz_vel_) - - create_ros_pubs_from_settings_json(); - airsim_control_update_timer_ = nh_private_.createTimer(ros::Duration(update_airsim_control_every_n_sec), &AirsimROSWrapper::drone_state_timer_cb, this); -} - -// XmlRpc::XmlRpcValue can't be const in this case -void AirsimROSWrapper::create_ros_pubs_from_settings_json() -{ - // subscribe to control commands on global nodehandle - gimbal_angle_quat_cmd_sub_ = nh_private_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); - gimbal_angle_euler_cmd_sub_ = nh_private_.subscribe("gimbal_angle_euler_cmd", 50, &AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this); - origin_geo_point_pub_ = nh_private_.advertise("origin_geo_point", 10); - - airsim_img_request_vehicle_name_pair_vec_.clear(); - image_pub_vec_.clear(); - cam_info_pub_vec_.clear(); - camera_info_msg_vec_.clear(); - vehicle_name_ptr_map_.clear(); - size_t lidar_cnt = 0; - - image_transport::ImageTransport image_transporter(nh_private_); - - // iterate over std::map> vehicles; - for (const auto& curr_vehicle_elem : AirSimSettings::singleton().vehicles) { - auto& vehicle_setting = curr_vehicle_elem.second; - auto curr_vehicle_name = curr_vehicle_elem.first; - - nh_.setParam("/vehicle_name", curr_vehicle_name); - - set_nans_to_zeros_in_pose(*vehicle_setting); - - std::unique_ptr vehicle_ros = nullptr; - - if (airsim_mode_ == AIRSIM_MODE::DRONE) { - vehicle_ros = std::unique_ptr(new MultiRotorROS()); - } - else { - vehicle_ros = std::unique_ptr(new CarROS()); - } - - vehicle_ros->odom_frame_id = curr_vehicle_name + "/" + odom_frame_id_; - vehicle_ros->vehicle_name = curr_vehicle_name; - - append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); - - vehicle_ros->odom_local_pub = nh_private_.advertise(curr_vehicle_name + "/" + odom_frame_id_, 10); - - vehicle_ros->env_pub = nh_private_.advertise(curr_vehicle_name + "/environment", 10); - - vehicle_ros->global_gps_pub = nh_private_.advertise(curr_vehicle_name + "/global_gps", 10); - - if (airsim_mode_ == AIRSIM_MODE::DRONE) { - auto drone = static_cast(vehicle_ros.get()); - - // bind to a single callback. todo optimal subs queue length - // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument - drone->vel_cmd_body_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_body_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name)); // todo ros::TransportHints().tcpNoDelay(); - drone->vel_cmd_world_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_world_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name)); - - drone->takeoff_srvr = nh_private_.advertiseService(curr_vehicle_name + "/takeoff", - boost::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); - drone->land_srvr = nh_private_.advertiseService(curr_vehicle_name + "/land", - boost::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); - // vehicle_ros.reset_srvr = nh_private_.advertiseService(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); - } - else { - auto car = static_cast(vehicle_ros.get()); - car->car_cmd_sub = nh_private_.subscribe(curr_vehicle_name + "/car_cmd", 1, boost::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name)); - car->car_state_pub = nh_private_.advertise(curr_vehicle_name + "/car_state", 10); - } - - // iterate over camera map std::map .cameras; - for (auto& curr_camera_elem : vehicle_setting->cameras) { - auto& camera_setting = curr_camera_elem.second; - auto& curr_camera_name = curr_camera_elem.first; - - set_nans_to_zeros_in_pose(*vehicle_setting, camera_setting); - append_static_camera_tf(vehicle_ros.get(), curr_camera_name, camera_setting); - // camera_setting.gimbal - std::vector current_image_request_vec; - current_image_request_vec.clear(); - - // iterate over capture_setting std::map capture_settings - for (const auto& curr_capture_elem : camera_setting.capture_settings) { - auto& capture_setting = curr_capture_elem.second; - - // todo why does AirSimSettings::loadCaptureSettings calls AirSimSettings::initializeCaptureSettings() - // which initializes default capture settings for _all_ NINE msr::airlib::ImageCaptureBase::ImageType - if (!(std::isnan(capture_setting.fov_degrees))) { - ImageType curr_image_type = msr::airlib::Utils::toEnum(capture_setting.image_type); - // if scene / segmentation / surface normals / infrared, get uncompressed image with pixels_as_floats = false - if (capture_setting.image_type == 0 || capture_setting.image_type == 5 || capture_setting.image_type == 6 || capture_setting.image_type == 7) { - current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, false, false)); - } - // if {DepthPlanar, DepthPerspective,DepthVis, DisparityNormalized}, get float image - else { - current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, true)); - } - - image_pub_vec_.push_back(image_transporter.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type), 1)); - cam_info_pub_vec_.push_back(nh_private_.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); - camera_info_msg_vec_.push_back(generate_cam_info(curr_camera_name, camera_setting, capture_setting)); - } - } - // push back pair (vector of image captures, current vehicle name) - airsim_img_request_vehicle_name_pair_vec_.push_back(std::make_pair(current_image_request_vec, curr_vehicle_name)); - } - - // iterate over sensors - std::vector sensors; - for (auto& curr_sensor_map : vehicle_setting->sensors) { - auto& sensor_name = curr_sensor_map.first; - auto& sensor_setting = curr_sensor_map.second; - - if (sensor_setting->enabled) { - SensorPublisher sensor_publisher; - sensor_publisher.sensor_name = sensor_setting->sensor_name; - sensor_publisher.sensor_type = sensor_setting->sensor_type; - switch (sensor_setting->sensor_type) { - case SensorBase::SensorType::Barometer: { - std::cout << "Barometer" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/altimeter/" + sensor_name, 10); - break; - } - case SensorBase::SensorType::Imu: { - std::cout << "Imu" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/imu/" + sensor_name, 10); - break; - } - case SensorBase::SensorType::Gps: { - std::cout << "Gps" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/gps/" + sensor_name, 10); - break; - } - case SensorBase::SensorType::Magnetometer: { - std::cout << "Magnetometer" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/magnetometer/" + sensor_name, 10); - break; - } - case SensorBase::SensorType::Distance: { - std::cout << "Distance" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/distance/" + sensor_name, 10); - break; - } - case SensorBase::SensorType::Lidar: { - std::cout << "Lidar" << std::endl; - auto lidar_setting = *static_cast(sensor_setting.get()); - msr::airlib::LidarSimpleParams params; - params.initializeFromSettings(lidar_setting); - append_static_lidar_tf(vehicle_ros.get(), sensor_name, params); - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/lidar/" + sensor_name, 10); - break; - } - default: { - throw std::invalid_argument("Unexpected sensor type"); - } - } - sensors.emplace_back(sensor_publisher); - } - } - - // we want fast access to the lidar sensors for callback handling, sort them out now - auto isLidar = std::function([](const SensorPublisher& pub) { - return pub.sensor_type == SensorBase::SensorType::Lidar; - }); - size_t cnt = std::count_if(sensors.begin(), sensors.end(), isLidar); - lidar_cnt += cnt; - vehicle_ros->lidar_pubs.resize(cnt); - vehicle_ros->sensor_pubs.resize(sensors.size() - cnt); - std::partition_copy(sensors.begin(), sensors.end(), vehicle_ros->lidar_pubs.begin(), vehicle_ros->sensor_pubs.begin(), isLidar); - - vehicle_name_ptr_map_.emplace(curr_vehicle_name, std::move(vehicle_ros)); // allows fast lookup in command callbacks in case of a lot of drones - } - - // add takeoff and land all services if more than 2 drones - if (vehicle_name_ptr_map_.size() > 1 && airsim_mode_ == AIRSIM_MODE::DRONE) { - takeoff_all_srvr_ = nh_private_.advertiseService("all_robots/takeoff", &AirsimROSWrapper::takeoff_all_srv_cb, this); - land_all_srvr_ = nh_private_.advertiseService("all_robots/land", &AirsimROSWrapper::land_all_srv_cb, this); - - // gimbal_angle_quat_cmd_sub_ = nh_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); - - vel_cmd_all_body_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_all_body_frame_cb, this); - vel_cmd_all_world_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_all_world_frame_cb, this); - - vel_cmd_group_body_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_group_body_frame_cb, this); - vel_cmd_group_world_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_group_world_frame_cb, this); - - takeoff_group_srvr_ = nh_private_.advertiseService("group_of_robots/takeoff", &AirsimROSWrapper::takeoff_group_srv_cb, this); - land_group_srvr_ = nh_private_.advertiseService("group_of_robots/land", &AirsimROSWrapper::land_group_srv_cb, this); - } - - // todo add per vehicle reset in AirLib API - reset_srvr_ = nh_private_.advertiseService("reset", &AirsimROSWrapper::reset_srv_cb, this); - - if (publish_clock_) { - clock_pub_ = nh_private_.advertise("clock", 1); - } - - // if >0 cameras, add one more thread for img_request_timer_cb - if (!airsim_img_request_vehicle_name_pair_vec_.empty()) { - double update_airsim_img_response_every_n_sec; - nh_private_.getParam("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); - - ros::TimerOptions timer_options(ros::Duration(update_airsim_img_response_every_n_sec), boost::bind(&AirsimROSWrapper::img_response_timer_cb, this, _1), &img_timer_cb_queue_); - airsim_img_response_timer_ = nh_private_.createTimer(timer_options); - is_used_img_timer_cb_queue_ = true; - } - - // lidars update on their own callback/thread at a given rate - if (lidar_cnt > 0) { - double update_lidar_every_n_sec; - nh_private_.getParam("update_lidar_every_n_sec", update_lidar_every_n_sec); - // nh_private_.setCallbackQueue(&lidar_timer_cb_queue_); - ros::TimerOptions timer_options(ros::Duration(update_lidar_every_n_sec), boost::bind(&AirsimROSWrapper::lidar_timer_cb, this, _1), &lidar_timer_cb_queue_); - airsim_lidar_update_timer_ = nh_private_.createTimer(timer_options); - is_used_lidar_timer_cb_queue_ = true; - } - - initialize_airsim(); -} - -// todo: error check. if state is not landed, return error. -bool AirsimROSWrapper::takeoff_srv_cb(airsim_ros_pkgs::Takeoff::Request& request, airsim_ros_pkgs::Takeoff::Response& response, const std::string& vehicle_name) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? - // response.success = - else - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); - // response.success = - - return true; -} - -bool AirsimROSWrapper::takeoff_group_srv_cb(airsim_ros_pkgs::TakeoffGroup::Request& request, airsim_ros_pkgs::TakeoffGroup::Response& response) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - for (const auto& vehicle_name : request.vehicle_names) - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? - // response.success = - else - for (const auto& vehicle_name : request.vehicle_names) - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); - // response.success = - - return true; -} - -bool AirsimROSWrapper::takeoff_all_srv_cb(airsim_ros_pkgs::Takeoff::Request& request, airsim_ros_pkgs::Takeoff::Response& response) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first)->waitOnLastTask(); // todo value for timeout_sec? - // response.success = - else - for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first); - // response.success = - - return true; -} - -bool AirsimROSWrapper::land_srv_cb(airsim_ros_pkgs::Land::Request& request, airsim_ros_pkgs::Land::Response& response, const std::string& vehicle_name) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); - else - static_cast(airsim_client_.get())->landAsync(60, vehicle_name); - - return true; //todo -} - -bool AirsimROSWrapper::land_group_srv_cb(airsim_ros_pkgs::LandGroup::Request& request, airsim_ros_pkgs::LandGroup::Response& response) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - for (const auto& vehicle_name : request.vehicle_names) - static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); - else - for (const auto& vehicle_name : request.vehicle_names) - static_cast(airsim_client_.get())->landAsync(60, vehicle_name); - - return true; //todo -} - -bool AirsimROSWrapper::land_all_srv_cb(airsim_ros_pkgs::Land::Request& request, airsim_ros_pkgs::Land::Response& response) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) - static_cast(airsim_client_.get())->landAsync(60, vehicle_name_ptr_pair.first)->waitOnLastTask(); - else - for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) - static_cast(airsim_client_.get())->landAsync(60, vehicle_name_ptr_pair.first); - - return true; //todo -} - -// todo add reset by vehicle_name API to airlib -// todo not async remove waitonlasttask -bool AirsimROSWrapper::reset_srv_cb(airsim_ros_pkgs::Reset::Request& request, airsim_ros_pkgs::Reset::Response& response) -{ - std::lock_guard guard(drone_control_mutex_); - - airsim_client_.reset(); - return true; //todo -} - -tf2::Quaternion AirsimROSWrapper::get_tf2_quat(const msr::airlib::Quaternionr& airlib_quat) const -{ - return tf2::Quaternion(airlib_quat.x(), airlib_quat.y(), airlib_quat.z(), airlib_quat.w()); -} - -msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const geometry_msgs::Quaternion& geometry_msgs_quat) const -{ - return msr::airlib::Quaternionr(geometry_msgs_quat.w, geometry_msgs_quat.x, geometry_msgs_quat.y, geometry_msgs_quat.z); -} - -msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const tf2::Quaternion& tf2_quat) const -{ - return msr::airlib::Quaternionr(tf2_quat.w(), tf2_quat.x(), tf2_quat.y(), tf2_quat.z()); -} - -void AirsimROSWrapper::car_cmd_cb(const airsim_ros_pkgs::CarControls::ConstPtr& msg, const std::string& vehicle_name) -{ - std::lock_guard guard(drone_control_mutex_); - - auto car = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - car->car_cmd.throttle = msg->throttle; - car->car_cmd.steering = msg->steering; - car->car_cmd.brake = msg->brake; - car->car_cmd.handbrake = msg->handbrake; - car->car_cmd.is_manual_gear = msg->manual; - car->car_cmd.manual_gear = msg->manual_gear; - car->car_cmd.gear_immediate = msg->gear_immediate; - - car->has_car_cmd = true; -} - -msr::airlib::Pose AirsimROSWrapper::get_airlib_pose(const float& x, const float& y, const float& z, const msr::airlib::Quaternionr& airlib_quat) const -{ - return msr::airlib::Pose(msr::airlib::Vector3r(x, y, z), airlib_quat); -} - -// void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_ros_pkgs::VelCmd& msg, const std::string& vehicle_name) -void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg, const std::string& vehicle_name) -{ - std::lock_guard guard(drone_control_mutex_); - - auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw - - // todo do actual body frame? - drone->vel_cmd.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd.z = msg->twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - // airsim uses degrees - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); - drone->has_vel_cmd = true; -} - -void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_ros_pkgs::VelCmdGroup& msg) -{ - std::lock_guard guard(drone_control_mutex_); - - for (const auto& vehicle_name : msg.vehicle_names) { - auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw - - // todo do actual body frame? - drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd.z = msg.twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - // airsim uses degrees - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); - drone->has_vel_cmd = true; - } -} - -// void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg) -void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_ros_pkgs::VelCmd& msg) -{ - std::lock_guard guard(drone_control_mutex_); - - // todo expose waitOnLastTask or nah? - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - auto drone = static_cast(vehicle_name_ptr_pair.second.get()); - - double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw - - // todo do actual body frame? - drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd.z = msg.twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - // airsim uses degrees - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); - drone->has_vel_cmd = true; - } -} - -void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg, const std::string& vehicle_name) -{ - std::lock_guard guard(drone_control_mutex_); - - auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - drone->vel_cmd.x = msg->twist.linear.x; - drone->vel_cmd.y = msg->twist.linear.y; - drone->vel_cmd.z = msg->twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); - drone->has_vel_cmd = true; -} - -// this is kinda unnecessary but maybe it makes life easier for the end user. -void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_ros_pkgs::VelCmdGroup& msg) -{ - std::lock_guard guard(drone_control_mutex_); - - for (const auto& vehicle_name : msg.vehicle_names) { - auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - drone->vel_cmd.x = msg.twist.linear.x; - drone->vel_cmd.y = msg.twist.linear.y; - drone->vel_cmd.z = msg.twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); - drone->has_vel_cmd = true; - } -} - -void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_ros_pkgs::VelCmd& msg) -{ - std::lock_guard guard(drone_control_mutex_); - - // todo expose waitOnLastTask or nah? - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - auto drone = static_cast(vehicle_name_ptr_pair.second.get()); - - drone->vel_cmd.x = msg.twist.linear.x; - drone->vel_cmd.y = msg.twist.linear.y; - drone->vel_cmd.z = msg.twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); - drone->has_vel_cmd = true; - } -} - -// todo support multiple gimbal commands -void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_ros_pkgs::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg) -{ - tf2::Quaternion quat_control_cmd; - try { - tf2::convert(gimbal_angle_quat_cmd_msg.orientation, quat_control_cmd); - quat_control_cmd.normalize(); - gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); // airsim uses wxyz - gimbal_cmd_.camera_name = gimbal_angle_quat_cmd_msg.camera_name; - gimbal_cmd_.vehicle_name = gimbal_angle_quat_cmd_msg.vehicle_name; - has_gimbal_cmd_ = true; - } - catch (tf2::TransformException& ex) { - RCLCPP_WARN("%s", ex.what()); - } -} - -// todo support multiple gimbal commands -// 1. find quaternion of default gimbal pose -// 2. forward multiply with quaternion equivalent to desired euler commands (in degrees) -// 3. call airsim client's setCameraPose which sets camera pose wrt world (or takeoff?) ned frame. todo -void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_ros_pkgs::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg) -{ - try { - tf2::Quaternion quat_control_cmd; - quat_control_cmd.setRPY(math_common::deg2rad(gimbal_angle_euler_cmd_msg.roll), math_common::deg2rad(gimbal_angle_euler_cmd_msg.pitch), math_common::deg2rad(gimbal_angle_euler_cmd_msg.yaw)); - quat_control_cmd.normalize(); - gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); - gimbal_cmd_.camera_name = gimbal_angle_euler_cmd_msg.camera_name; - gimbal_cmd_.vehicle_name = gimbal_angle_euler_cmd_msg.vehicle_name; - has_gimbal_cmd_ = true; - } - catch (tf2::TransformException& ex) { - RCLCPP_WARN("%s", ex.what()); - } -} - -airsim_ros_pkgs::CarState AirsimROSWrapper::get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const -{ - airsim_ros_pkgs::CarState state_msg; - const auto odo = get_odom_msg_from_car_state(car_state); - - state_msg.pose = odo.pose; - state_msg.twist = odo.twist; - state_msg.speed = car_state.speed; - state_msg.gear = car_state.gear; - state_msg.rpm = car_state.rpm; - state_msg.maxrpm = car_state.maxrpm; - state_msg.handbrake = car_state.handbrake; - state_msg.header.stamp = airsim_timestamp_to_ros(car_state.timestamp); - - return state_msg; -} - -nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const -{ - nav_msgs::Odometry odom_msg; - - odom_msg.pose.pose.position.x = car_state.getPosition().x(); - odom_msg.pose.pose.position.y = car_state.getPosition().y(); - odom_msg.pose.pose.position.z = car_state.getPosition().z(); - odom_msg.pose.pose.orientation.x = car_state.getOrientation().x(); - odom_msg.pose.pose.orientation.y = car_state.getOrientation().y(); - odom_msg.pose.pose.orientation.z = car_state.getOrientation().z(); - odom_msg.pose.pose.orientation.w = car_state.getOrientation().w(); - - odom_msg.twist.twist.linear.x = car_state.kinematics_estimated.twist.linear.x(); - odom_msg.twist.twist.linear.y = car_state.kinematics_estimated.twist.linear.y(); - odom_msg.twist.twist.linear.z = car_state.kinematics_estimated.twist.linear.z(); - odom_msg.twist.twist.angular.x = car_state.kinematics_estimated.twist.angular.x(); - odom_msg.twist.twist.angular.y = car_state.kinematics_estimated.twist.angular.y(); - odom_msg.twist.twist.angular.z = car_state.kinematics_estimated.twist.angular.z(); - - if (isENU_) { - std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); - odom_msg.pose.pose.position.z = -odom_msg.pose.pose.position.z; - std::swap(odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y); - odom_msg.pose.pose.orientation.z = -odom_msg.pose.pose.orientation.z; - std::swap(odom_msg.twist.twist.linear.x, odom_msg.twist.twist.linear.y); - odom_msg.twist.twist.linear.z = -odom_msg.twist.twist.linear.z; - std::swap(odom_msg.twist.twist.angular.x, odom_msg.twist.twist.angular.y); - odom_msg.twist.twist.angular.z = -odom_msg.twist.twist.angular.z; - } - - return odom_msg; -} - -nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const -{ - nav_msgs::Odometry odom_msg; - - odom_msg.pose.pose.position.x = drone_state.getPosition().x(); - odom_msg.pose.pose.position.y = drone_state.getPosition().y(); - odom_msg.pose.pose.position.z = drone_state.getPosition().z(); - odom_msg.pose.pose.orientation.x = drone_state.getOrientation().x(); - odom_msg.pose.pose.orientation.y = drone_state.getOrientation().y(); - odom_msg.pose.pose.orientation.z = drone_state.getOrientation().z(); - odom_msg.pose.pose.orientation.w = drone_state.getOrientation().w(); - - odom_msg.twist.twist.linear.x = drone_state.kinematics_estimated.twist.linear.x(); - odom_msg.twist.twist.linear.y = drone_state.kinematics_estimated.twist.linear.y(); - odom_msg.twist.twist.linear.z = drone_state.kinematics_estimated.twist.linear.z(); - odom_msg.twist.twist.angular.x = drone_state.kinematics_estimated.twist.angular.x(); - odom_msg.twist.twist.angular.y = drone_state.kinematics_estimated.twist.angular.y(); - odom_msg.twist.twist.angular.z = drone_state.kinematics_estimated.twist.angular.z(); - - if (isENU_) { - std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); - odom_msg.pose.pose.position.z = -odom_msg.pose.pose.position.z; - std::swap(odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y); - odom_msg.pose.pose.orientation.z = -odom_msg.pose.pose.orientation.z; - std::swap(odom_msg.twist.twist.linear.x, odom_msg.twist.twist.linear.y); - odom_msg.twist.twist.linear.z = -odom_msg.twist.twist.linear.z; - std::swap(odom_msg.twist.twist.angular.x, odom_msg.twist.twist.angular.y); - odom_msg.twist.twist.angular.z = -odom_msg.twist.twist.angular.z; - } - - return odom_msg; -} - -// https://docs.ros.org/jade/api/sensor_msgs/html/point__cloud__conversion_8h_source.html#l00066 -// look at UnrealLidarSensor.cpp UnrealLidarSensor::getPointCloud() for math -// read this carefully https://docs.ros.org/kinetic/api/sensor_msgs/html/msg/PointCloud2.html -sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const -{ - sensor_msgs::PointCloud2 lidar_msg; - lidar_msg.header.stamp = ros::Time::now(); - lidar_msg.header.frame_id = vehicle_name; - - if (lidar_data.point_cloud.size() > 3) { - lidar_msg.height = 1; - lidar_msg.width = lidar_data.point_cloud.size() / 3; - - lidar_msg.fields.resize(3); - lidar_msg.fields[0].name = "x"; - lidar_msg.fields[1].name = "y"; - lidar_msg.fields[2].name = "z"; - - int offset = 0; - - for (size_t d = 0; d < lidar_msg.fields.size(); ++d, offset += 4) { - lidar_msg.fields[d].offset = offset; - lidar_msg.fields[d].datatype = sensor_msgs::PointField::FLOAT32; - lidar_msg.fields[d].count = 1; - } - - lidar_msg.is_bigendian = false; - lidar_msg.point_step = offset; // 4 * num fields - lidar_msg.row_step = lidar_msg.point_step * lidar_msg.width; - - lidar_msg.is_dense = true; // todo - std::vector data_std = lidar_data.point_cloud; - - const unsigned char* bytes = reinterpret_cast(data_std.data()); - vector lidar_msg_data(bytes, bytes + sizeof(float) * data_std.size()); - lidar_msg.data = std::move(lidar_msg_data); - } - else { - // msg = [] - } - - if (isENU_) { - try { - sensor_msgs::PointCloud2 lidar_msg_enu; - auto transformStampedENU = tf_buffer_.lookupTransform(AIRSIM_FRAME_ID, vehicle_name, ros::Time(0), ros::Duration(1)); - tf2::doTransform(lidar_msg, lidar_msg_enu, transformStampedENU); - - lidar_msg_enu.header.stamp = lidar_msg.header.stamp; - lidar_msg_enu.header.frame_id = lidar_msg.header.frame_id; - - lidar_msg = std::move(lidar_msg_enu); - } - catch (tf2::TransformException& ex) { - RCLCPP_WARN("%s", ex.what()); - ros::Duration(1.0).sleep(); - } - } - - return lidar_msg; -} - -airsim_ros_pkgs::Environment AirsimROSWrapper::get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const -{ - airsim_ros_pkgs::Environment env_msg; - env_msg.position.x = env_data.position.x(); - env_msg.position.y = env_data.position.y(); - env_msg.position.z = env_data.position.z(); - env_msg.geo_point.latitude = env_data.geo_point.latitude; - env_msg.geo_point.longitude = env_data.geo_point.longitude; - env_msg.geo_point.altitude = env_data.geo_point.altitude; - env_msg.gravity.x = env_data.gravity.x(); - env_msg.gravity.y = env_data.gravity.y(); - env_msg.gravity.z = env_data.gravity.z(); - env_msg.air_pressure = env_data.air_pressure; - env_msg.temperature = env_data.temperature; - env_msg.air_density = env_data.temperature; - - return env_msg; -} - -sensor_msgs::MagneticField AirsimROSWrapper::get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const -{ - sensor_msgs::MagneticField mag_msg; - mag_msg.magnetic_field.x = mag_data.magnetic_field_body.x(); - mag_msg.magnetic_field.y = mag_data.magnetic_field_body.y(); - mag_msg.magnetic_field.z = mag_data.magnetic_field_body.z(); - std::copy(std::begin(mag_data.magnetic_field_covariance), - std::end(mag_data.magnetic_field_covariance), - std::begin(mag_msg.magnetic_field_covariance)); - mag_msg.header.stamp = airsim_timestamp_to_ros(mag_data.time_stamp); - - return mag_msg; -} - -// todo covariances -sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const -{ - sensor_msgs::NavSatFix gps_msg; - gps_msg.header.stamp = airsim_timestamp_to_ros(gps_data.time_stamp); - gps_msg.latitude = gps_data.gnss.geo_point.latitude; - gps_msg.longitude = gps_data.gnss.geo_point.longitude; - gps_msg.altitude = gps_data.gnss.geo_point.altitude; - gps_msg.status.service = sensor_msgs::NavSatStatus::SERVICE_GLONASS; - gps_msg.status.status = gps_data.gnss.fix_type; - // gps_msg.position_covariance_type = - // gps_msg.position_covariance = - - return gps_msg; -} - -sensor_msgs::Range AirsimROSWrapper::get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const -{ - sensor_msgs::Range dist_msg; - dist_msg.header.stamp = airsim_timestamp_to_ros(dist_data.time_stamp); - dist_msg.range = dist_data.distance; - dist_msg.min_range = dist_data.min_distance; - dist_msg.max_range = dist_data.min_distance; - - return dist_msg; -} - -airsim_ros_pkgs::Altimeter AirsimROSWrapper::get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const -{ - airsim_ros_pkgs::Altimeter alt_msg; - alt_msg.header.stamp = airsim_timestamp_to_ros(alt_data.time_stamp); - alt_msg.altitude = alt_data.altitude; - alt_msg.pressure = alt_data.pressure; - alt_msg.qnh = alt_data.qnh; - - return alt_msg; -} - -// todo covariances -sensor_msgs::Imu AirsimROSWrapper::get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const -{ - sensor_msgs::Imu imu_msg; - // imu_msg.header.frame_id = "/airsim/odom_local_ned";// todo multiple drones - imu_msg.header.stamp = airsim_timestamp_to_ros(imu_data.time_stamp); - imu_msg.orientation.x = imu_data.orientation.x(); - imu_msg.orientation.y = imu_data.orientation.y(); - imu_msg.orientation.z = imu_data.orientation.z(); - imu_msg.orientation.w = imu_data.orientation.w(); - - // todo radians per second - imu_msg.angular_velocity.x = imu_data.angular_velocity.x(); - imu_msg.angular_velocity.y = imu_data.angular_velocity.y(); - imu_msg.angular_velocity.z = imu_data.angular_velocity.z(); - - // meters/s2^m - imu_msg.linear_acceleration.x = imu_data.linear_acceleration.x(); - imu_msg.linear_acceleration.y = imu_data.linear_acceleration.y(); - imu_msg.linear_acceleration.z = imu_data.linear_acceleration.z(); - - // imu_msg.orientation_covariance = ; - // imu_msg.angular_velocity_covariance = ; - // imu_msg.linear_acceleration_covariance = ; - - return imu_msg; -} - -void AirsimROSWrapper::publish_odom_tf(const nav_msgs::Odometry& odom_msg) -{ - geometry_msgs::TransformStamped odom_tf; - odom_tf.header = odom_msg.header; - odom_tf.child_frame_id = odom_msg.child_frame_id; - odom_tf.transform.translation.x = odom_msg.pose.pose.position.x; - odom_tf.transform.translation.y = odom_msg.pose.pose.position.y; - odom_tf.transform.translation.z = odom_msg.pose.pose.position.z; - odom_tf.transform.rotation.x = odom_msg.pose.pose.orientation.x; - odom_tf.transform.rotation.y = odom_msg.pose.pose.orientation.y; - odom_tf.transform.rotation.z = odom_msg.pose.pose.orientation.z; - odom_tf.transform.rotation.w = odom_msg.pose.pose.orientation.w; - tf_broadcaster_.sendTransform(odom_tf); -} - -airsim_ros_pkgs::GPSYaw AirsimROSWrapper::get_gps_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const -{ - airsim_ros_pkgs::GPSYaw gps_msg; - gps_msg.latitude = geo_point.latitude; - gps_msg.longitude = geo_point.longitude; - gps_msg.altitude = geo_point.altitude; - return gps_msg; -} - -sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const -{ - sensor_msgs::NavSatFix gps_msg; - gps_msg.latitude = geo_point.latitude; - gps_msg.longitude = geo_point.longitude; - gps_msg.altitude = geo_point.altitude; - return gps_msg; -} - -ros::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const -{ - auto dur = std::chrono::duration(stamp.time_since_epoch()); - ros::Time cur_time; - cur_time.fromSec(dur.count()); - return cur_time; -} - -ros::Time AirsimROSWrapper::airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const -{ - // airsim appears to use chrono::system_clock with nanosecond precision - std::chrono::nanoseconds dur(stamp); - std::chrono::time_point tp(dur); - ros::Time cur_time = chrono_timestamp_to_ros(tp); - return cur_time; -} - -void AirsimROSWrapper::drone_state_timer_cb(const ros::TimerEvent& event) -{ - try { - // todo this is global origin - origin_geo_point_pub_.publish(origin_geo_point_msg_); - - // get the basic vehicle pose and environmental state - const auto now = update_state(); - - // on init, will publish 0 to /clock as expected for use_sim_time compatibility - if (!airsim_client_->simIsPaused()) { - // airsim_client needs to provide the simulation time in a future version of the API - ros_clock_.clock = now; - } - // publish the simulation clock - if (publish_clock_) { - clock_pub_.publish(ros_clock_); - } - - // publish vehicle state, odom, and all basic sensor types - publish_vehicle_state(); - - // send any commands out to the vehicles - update_commands(); - } - catch (rpc::rpc_error& e) { - std::cout << "error" << std::endl; - std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API:" << std::endl - << msg << std::endl; - } -} - -void AirsimROSWrapper::update_and_publish_static_transforms(VehicleROS* vehicle_ros) -{ - if (vehicle_ros && !vehicle_ros->static_tf_msg_vec.empty()) { - for (auto& static_tf_msg : vehicle_ros->static_tf_msg_vec) { - static_tf_msg.header.stamp = vehicle_ros->stamp; - static_tf_pub_.sendTransform(static_tf_msg); - } - } -} - -ros::Time AirsimROSWrapper::update_state() -{ - bool got_sim_time = false; - ros::Time curr_ros_time = ros::Time::now(); - - //should be easier way to get the sim time through API, something like: - //msr::airlib::Environment::State env = airsim_client_->simGetGroundTruthEnvironment(""); - //curr_ros_time = airsim_timestamp_to_ros(env.clock().nowNanos()); - - // iterate over drones - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - ros::Time vehicle_time; - // get drone state from airsim - auto& vehicle_ros = vehicle_name_ptr_pair.second; - - // vehicle environment, we can get ambient temperature here and other truths - auto env_data = airsim_client_->simGetGroundTruthEnvironment(vehicle_ros->vehicle_name); - - if (airsim_mode_ == AIRSIM_MODE::DRONE) { - auto drone = static_cast(vehicle_ros.get()); - auto rpc = static_cast(airsim_client_.get()); - drone->curr_drone_state = rpc->getMultirotorState(vehicle_ros->vehicle_name); - - vehicle_time = airsim_timestamp_to_ros(drone->curr_drone_state.timestamp); - if (!got_sim_time) { - curr_ros_time = vehicle_time; - got_sim_time = true; - } - - vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(drone->curr_drone_state.gps_location); - vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; - - vehicle_ros->curr_odom = get_odom_msg_from_multirotor_state(drone->curr_drone_state); - } - else { - auto car = static_cast(vehicle_ros.get()); - auto rpc = static_cast(airsim_client_.get()); - car->curr_car_state = rpc->getCarState(vehicle_ros->vehicle_name); - - vehicle_time = airsim_timestamp_to_ros(car->curr_car_state.timestamp); - if (!got_sim_time) { - curr_ros_time = vehicle_time; - got_sim_time = true; - } - - vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(env_data.geo_point); - vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; - - vehicle_ros->curr_odom = get_odom_msg_from_car_state(car->curr_car_state); - - airsim_ros_pkgs::CarState state_msg = get_roscarstate_msg_from_car_state(car->curr_car_state); - state_msg.header.frame_id = vehicle_ros->vehicle_name; - car->car_state_msg = state_msg; - } - - vehicle_ros->stamp = vehicle_time; - - airsim_ros_pkgs::Environment env_msg = get_environment_msg_from_airsim(env_data); - env_msg.header.frame_id = vehicle_ros->vehicle_name; - env_msg.header.stamp = vehicle_time; - vehicle_ros->env_msg = env_msg; - - // convert airsim drone state to ROS msgs - vehicle_ros->curr_odom.header.frame_id = vehicle_ros->vehicle_name; - vehicle_ros->curr_odom.child_frame_id = vehicle_ros->odom_frame_id; - vehicle_ros->curr_odom.header.stamp = vehicle_time; - } - - return curr_ros_time; -} - -void AirsimROSWrapper::publish_vehicle_state() -{ - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - auto& vehicle_ros = vehicle_name_ptr_pair.second; - - // simulation environment truth - vehicle_ros->env_pub.publish(vehicle_ros->env_msg); - - if (airsim_mode_ == AIRSIM_MODE::CAR) { - // dashboard reading from car, RPM, gear, etc - auto car = static_cast(vehicle_ros.get()); - car->car_state_pub.publish(car->car_state_msg); - } - - // odom and transforms - vehicle_ros->odom_local_pub.publish(vehicle_ros->curr_odom); - publish_odom_tf(vehicle_ros->curr_odom); - - // ground truth GPS position from sim/HITL - vehicle_ros->global_gps_pub.publish(vehicle_ros->gps_sensor_msg); - - for (auto& sensor_publisher : vehicle_ros->sensor_pubs) { - switch (sensor_publisher.sensor_type) { - case SensorBase::SensorType::Barometer: { - auto baro_data = airsim_client_->getBarometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - airsim_ros_pkgs::Altimeter alt_msg = get_altimeter_msg_from_airsim(baro_data); - alt_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(alt_msg); - break; - } - case SensorBase::SensorType::Imu: { - auto imu_data = airsim_client_->getImuData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::Imu imu_msg = get_imu_msg_from_airsim(imu_data); - imu_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(imu_msg); - break; - } - case SensorBase::SensorType::Distance: { - auto distance_data = airsim_client_->getDistanceSensorData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::Range dist_msg = get_range_from_airsim(distance_data); - dist_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(dist_msg); - break; - } - case SensorBase::SensorType::Gps: { - auto gps_data = airsim_client_->getGpsData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::NavSatFix gps_msg = get_gps_msg_from_airsim(gps_data); - gps_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(gps_msg); - break; - } - case SensorBase::SensorType::Lidar: { - // handled via callback - break; - } - case SensorBase::SensorType::Magnetometer: { - auto mag_data = airsim_client_->getMagnetometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::MagneticField mag_msg = get_mag_msg_from_airsim(mag_data); - mag_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(mag_msg); - break; - } - } - } - - update_and_publish_static_transforms(vehicle_ros.get()); - } -} - -void AirsimROSWrapper::update_commands() -{ - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - auto& vehicle_ros = vehicle_name_ptr_pair.second; - - if (airsim_mode_ == AIRSIM_MODE::DRONE) { - auto drone = static_cast(vehicle_ros.get()); - - // send control commands from the last callback to airsim - if (drone->has_vel_cmd) { - std::lock_guard guard(drone_control_mutex_); - static_cast(airsim_client_.get())->moveByVelocityAsync(drone->vel_cmd.x, drone->vel_cmd.y, drone->vel_cmd.z, vel_cmd_duration_, msr::airlib::DrivetrainType::MaxDegreeOfFreedom, drone->vel_cmd.yaw_mode, drone->vehicle_name); - } - drone->has_vel_cmd = false; - } - else { - // send control commands from the last callback to airsim - auto car = static_cast(vehicle_ros.get()); - if (car->has_car_cmd) { - std::lock_guard guard(drone_control_mutex_); - static_cast(airsim_client_.get())->setCarControls(car->car_cmd, vehicle_ros->vehicle_name); - } - car->has_car_cmd = false; - } - } - - // Only camera rotation, no translation movement of camera - if (has_gimbal_cmd_) { - std::lock_guard guard(drone_control_mutex_); - airsim_client_->simSetCameraPose(gimbal_cmd_.camera_name, get_airlib_pose(0, 0, 0, gimbal_cmd_.target_quat), gimbal_cmd_.vehicle_name); - } - - has_gimbal_cmd_ = false; -} - -// airsim uses nans for zeros in settings.json. we set them to zeros here for handling tfs in ROS -void AirsimROSWrapper::set_nans_to_zeros_in_pose(VehicleSetting& vehicle_setting) const -{ - if (std::isnan(vehicle_setting.position.x())) - vehicle_setting.position.x() = 0.0; - - if (std::isnan(vehicle_setting.position.y())) - vehicle_setting.position.y() = 0.0; - - if (std::isnan(vehicle_setting.position.z())) - vehicle_setting.position.z() = 0.0; - - if (std::isnan(vehicle_setting.rotation.yaw)) - vehicle_setting.rotation.yaw = 0.0; - - if (std::isnan(vehicle_setting.rotation.pitch)) - vehicle_setting.rotation.pitch = 0.0; - - if (std::isnan(vehicle_setting.rotation.roll)) - vehicle_setting.rotation.roll = 0.0; -} - -// if any nan's in camera pose, set them to match vehicle pose (which has already converted any potential nans to zeros) -void AirsimROSWrapper::set_nans_to_zeros_in_pose(const VehicleSetting& vehicle_setting, CameraSetting& camera_setting) const -{ - if (std::isnan(camera_setting.position.x())) - camera_setting.position.x() = vehicle_setting.position.x(); - - if (std::isnan(camera_setting.position.y())) - camera_setting.position.y() = vehicle_setting.position.y(); - - if (std::isnan(camera_setting.position.z())) - camera_setting.position.z() = vehicle_setting.position.z(); - - if (std::isnan(camera_setting.rotation.yaw)) - camera_setting.rotation.yaw = vehicle_setting.rotation.yaw; - - if (std::isnan(camera_setting.rotation.pitch)) - camera_setting.rotation.pitch = vehicle_setting.rotation.pitch; - - if (std::isnan(camera_setting.rotation.roll)) - camera_setting.rotation.roll = vehicle_setting.rotation.roll; -} - -void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const VehicleSetting& vehicle_setting) -{ - geometry_msgs::TransformStamped vehicle_tf_msg; - vehicle_tf_msg.header.frame_id = world_frame_id_; - vehicle_tf_msg.header.stamp = ros::Time::now(); - vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name; - vehicle_tf_msg.transform.translation.x = vehicle_setting.position.x(); - vehicle_tf_msg.transform.translation.y = vehicle_setting.position.y(); - vehicle_tf_msg.transform.translation.z = vehicle_setting.position.z(); - tf2::Quaternion quat; - quat.setRPY(vehicle_setting.rotation.roll, vehicle_setting.rotation.pitch, vehicle_setting.rotation.yaw); - vehicle_tf_msg.transform.rotation.x = quat.x(); - vehicle_tf_msg.transform.rotation.y = quat.y(); - vehicle_tf_msg.transform.rotation.z = quat.z(); - vehicle_tf_msg.transform.rotation.w = quat.w(); - - if (isENU_) { - std::swap(vehicle_tf_msg.transform.translation.x, vehicle_tf_msg.transform.translation.y); - std::swap(vehicle_tf_msg.transform.rotation.x, vehicle_tf_msg.transform.rotation.y); - vehicle_tf_msg.transform.translation.z = -vehicle_tf_msg.transform.translation.z; - vehicle_tf_msg.transform.rotation.z = -vehicle_tf_msg.transform.rotation.z; - } - - vehicle_ros->static_tf_msg_vec.emplace_back(vehicle_tf_msg); -} - -void AirsimROSWrapper::append_static_lidar_tf(VehicleROS* vehicle_ros, const std::string& lidar_name, const msr::airlib::LidarSimpleParams& lidar_setting) -{ - geometry_msgs::TransformStamped lidar_tf_msg; - lidar_tf_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; - lidar_tf_msg.child_frame_id = vehicle_ros->vehicle_name + "/" + lidar_name; - lidar_tf_msg.transform.translation.x = lidar_setting.relative_pose.position.x(); - lidar_tf_msg.transform.translation.y = lidar_setting.relative_pose.position.y(); - lidar_tf_msg.transform.translation.z = lidar_setting.relative_pose.position.z(); - lidar_tf_msg.transform.rotation.x = lidar_setting.relative_pose.orientation.x(); - lidar_tf_msg.transform.rotation.y = lidar_setting.relative_pose.orientation.y(); - lidar_tf_msg.transform.rotation.z = lidar_setting.relative_pose.orientation.z(); - lidar_tf_msg.transform.rotation.w = lidar_setting.relative_pose.orientation.w(); - - if (isENU_) { - std::swap(lidar_tf_msg.transform.translation.x, lidar_tf_msg.transform.translation.y); - std::swap(lidar_tf_msg.transform.rotation.x, lidar_tf_msg.transform.rotation.y); - lidar_tf_msg.transform.translation.z = -lidar_tf_msg.transform.translation.z; - lidar_tf_msg.transform.rotation.z = -lidar_tf_msg.transform.rotation.z; - } - - vehicle_ros->static_tf_msg_vec.emplace_back(lidar_tf_msg); -} - -void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const std::string& camera_name, const CameraSetting& camera_setting) -{ - geometry_msgs::TransformStamped static_cam_tf_body_msg; - static_cam_tf_body_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; - static_cam_tf_body_msg.child_frame_id = camera_name + "_body/static"; - static_cam_tf_body_msg.transform.translation.x = camera_setting.position.x(); - static_cam_tf_body_msg.transform.translation.y = camera_setting.position.y(); - static_cam_tf_body_msg.transform.translation.z = camera_setting.position.z(); - tf2::Quaternion quat; - quat.setRPY(camera_setting.rotation.roll, camera_setting.rotation.pitch, camera_setting.rotation.yaw); - static_cam_tf_body_msg.transform.rotation.x = quat.x(); - static_cam_tf_body_msg.transform.rotation.y = quat.y(); - static_cam_tf_body_msg.transform.rotation.z = quat.z(); - static_cam_tf_body_msg.transform.rotation.w = quat.w(); - - if (isENU_) { - std::swap(static_cam_tf_body_msg.transform.translation.x, static_cam_tf_body_msg.transform.translation.y); - std::swap(static_cam_tf_body_msg.transform.rotation.x, static_cam_tf_body_msg.transform.rotation.y); - static_cam_tf_body_msg.transform.translation.z = -static_cam_tf_body_msg.transform.translation.z; - static_cam_tf_body_msg.transform.rotation.z = -static_cam_tf_body_msg.transform.rotation.z; - } - - geometry_msgs::TransformStamped static_cam_tf_optical_msg = static_cam_tf_body_msg; - static_cam_tf_optical_msg.child_frame_id = camera_name + "_optical/static"; - - tf2::Quaternion quat_cam_body; - tf2::Quaternion quat_cam_optical; - tf2::convert(static_cam_tf_body_msg.transform.rotation, quat_cam_body); - tf2::Matrix3x3 mat_cam_body(quat_cam_body); - tf2::Matrix3x3 mat_cam_optical; - mat_cam_optical.setValue(mat_cam_body.getColumn(1).getX(), mat_cam_body.getColumn(2).getX(), mat_cam_body.getColumn(0).getX(), mat_cam_body.getColumn(1).getY(), mat_cam_body.getColumn(2).getY(), mat_cam_body.getColumn(0).getY(), mat_cam_body.getColumn(1).getZ(), mat_cam_body.getColumn(2).getZ(), mat_cam_body.getColumn(0).getZ()); - mat_cam_optical.getRotation(quat_cam_optical); - quat_cam_optical.normalize(); - tf2::convert(quat_cam_optical, static_cam_tf_optical_msg.transform.rotation); - - vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_body_msg); - vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_optical_msg); -} - -void AirsimROSWrapper::img_response_timer_cb(const ros::TimerEvent& event) -{ - try { - int image_response_idx = 0; - for (const auto& airsim_img_request_vehicle_name_pair : airsim_img_request_vehicle_name_pair_vec_) { - const std::vector& img_response = airsim_client_images_.simGetImages(airsim_img_request_vehicle_name_pair.first, airsim_img_request_vehicle_name_pair.second); - - if (img_response.size() == airsim_img_request_vehicle_name_pair.first.size()) { - process_and_publish_img_response(img_response, image_response_idx, airsim_img_request_vehicle_name_pair.second); - image_response_idx += img_response.size(); - } - } - } - - catch (rpc::rpc_error& e) { - std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API, didn't get image response." << std::endl - << msg << std::endl; - } -} - -void AirsimROSWrapper::lidar_timer_cb(const ros::TimerEvent& event) -{ - try { - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - if (!vehicle_name_ptr_pair.second->lidar_pubs.empty()) { - for (auto& lidar_publisher : vehicle_name_ptr_pair.second->lidar_pubs) { - auto lidar_data = airsim_client_lidar_.getLidarData(lidar_publisher.sensor_name, vehicle_name_ptr_pair.first); - sensor_msgs::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first); - lidar_publisher.publisher.publish(lidar_msg); - } - } - } - } - catch (rpc::rpc_error& e) { - std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API, didn't get image response." << std::endl - << msg << std::endl; - } -} - -cv::Mat AirsimROSWrapper::manual_decode_depth(const ImageResponse& img_response) const -{ - cv::Mat mat(img_response.height, img_response.width, CV_32FC1, cv::Scalar(0)); - int img_width = img_response.width; - - for (int row = 0; row < img_response.height; row++) - for (int col = 0; col < img_width; col++) - mat.at(row, col) = img_response.image_data_float[row * img_width + col]; - return mat; -} - -sensor_msgs::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, - const ros::Time curr_ros_time, - const std::string frame_id) -{ - sensor_msgs::ImagePtr img_msg_ptr = boost::make_shared(); - img_msg_ptr->data = img_response.image_data_uint8; - img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes - img_msg_ptr->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); - img_msg_ptr->header.frame_id = frame_id; - img_msg_ptr->height = img_response.height; - img_msg_ptr->width = img_response.width; - img_msg_ptr->encoding = "bgr8"; - if (is_vulkan_) - img_msg_ptr->encoding = "rgb8"; - img_msg_ptr->is_bigendian = 0; - return img_msg_ptr; -} - -sensor_msgs::ImagePtr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, - const ros::Time curr_ros_time, - const std::string frame_id) -{ - // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, - // hence the dependency on opencv and cv_bridge. however, this is an extremely fast op, so no big deal. - cv::Mat depth_img = manual_decode_depth(img_response); - sensor_msgs::ImagePtr depth_img_msg = cv_bridge::CvImage(std_msgs::Header(), "32FC1", depth_img).toImageMsg(); - depth_img_msg->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); - depth_img_msg->header.frame_id = frame_id; - return depth_img_msg; -} - -// todo have a special stereo pair mode and get projection matrix by calculating offset wrt drone body frame? -sensor_msgs::CameraInfo AirsimROSWrapper::generate_cam_info(const std::string& camera_name, - const CameraSetting& camera_setting, - const CaptureSetting& capture_setting) const -{ - sensor_msgs::CameraInfo cam_info_msg; - cam_info_msg.header.frame_id = camera_name + "_optical"; - cam_info_msg.height = capture_setting.height; - cam_info_msg.width = capture_setting.width; - float f_x = (capture_setting.width / 2.0) / tan(math_common::deg2rad(capture_setting.fov_degrees / 2.0)); - // todo focal length in Y direction should be same as X it seems. this can change in future a scene capture component which exactly correponds to a cine camera - // float f_y = (capture_setting.height / 2.0) / tan(math_common::deg2rad(fov_degrees / 2.0)); - cam_info_msg.K = { f_x, 0.0, capture_setting.width / 2.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 1.0 }; - cam_info_msg.P = { f_x, 0.0, capture_setting.width / 2.0, 0.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 0.0, 1.0, 0.0 }; - return cam_info_msg; -} - -void AirsimROSWrapper::process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name) -{ - // todo add option to use airsim time (image_response.TTimePoint) like Gazebo /use_sim_time param - ros::Time curr_ros_time = ros::Time::now(); - int img_response_idx_internal = img_response_idx; - - for (const auto& curr_img_response : img_response_vec) { - // todo publishing a tf for each capture type seems stupid. but it foolproofs us against render thread's async stuff, I hope. - // Ideally, we should loop over cameras and then captures, and publish only one tf. - publish_camera_tf(curr_img_response, curr_ros_time, vehicle_name, curr_img_response.camera_name); - - // todo simGetCameraInfo is wrong + also it's only for image type -1. - // msr::airlib::CameraInfo camera_info = airsim_client_.simGetCameraInfo(curr_img_response.camera_name); - - // update timestamp of saved cam info msgs - - camera_info_msg_vec_[img_response_idx_internal].header.stamp = airsim_timestamp_to_ros(curr_img_response.time_stamp); - cam_info_pub_vec_[img_response_idx_internal].publish(camera_info_msg_vec_[img_response_idx_internal]); - - // DepthPlanar / DepthPerspective / DepthVis / DisparityNormalized - if (curr_img_response.pixels_as_float) { - image_pub_vec_[img_response_idx_internal].publish(get_depth_img_msg_from_response(curr_img_response, - curr_ros_time, - curr_img_response.camera_name + "_optical")); - } - // Scene / Segmentation / SurfaceNormals / Infrared - else { - image_pub_vec_[img_response_idx_internal].publish(get_img_msg_from_response(curr_img_response, - curr_ros_time, - curr_img_response.camera_name + "_optical")); - } - img_response_idx_internal++; - } -} - -// publish camera transforms -// camera poses are obtained from airsim's client API which are in (local) NED frame. -// We first do a change of basis to camera optical frame (Z forward, X right, Y down) -void AirsimROSWrapper::publish_camera_tf(const ImageResponse& img_response, const ros::Time& ros_time, const std::string& frame_id, const std::string& child_frame_id) -{ - geometry_msgs::TransformStamped cam_tf_body_msg; - cam_tf_body_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); - cam_tf_body_msg.header.frame_id = frame_id; - cam_tf_body_msg.child_frame_id = child_frame_id + "_body"; - cam_tf_body_msg.transform.translation.x = img_response.camera_position.x(); - cam_tf_body_msg.transform.translation.y = img_response.camera_position.y(); - cam_tf_body_msg.transform.translation.z = img_response.camera_position.z(); - cam_tf_body_msg.transform.rotation.x = img_response.camera_orientation.x(); - cam_tf_body_msg.transform.rotation.y = img_response.camera_orientation.y(); - cam_tf_body_msg.transform.rotation.z = img_response.camera_orientation.z(); - cam_tf_body_msg.transform.rotation.w = img_response.camera_orientation.w(); - - if (isENU_) { - std::swap(cam_tf_body_msg.transform.translation.x, cam_tf_body_msg.transform.translation.y); - std::swap(cam_tf_body_msg.transform.rotation.x, cam_tf_body_msg.transform.rotation.y); - cam_tf_body_msg.transform.translation.z = -cam_tf_body_msg.transform.translation.z; - cam_tf_body_msg.transform.rotation.z = -cam_tf_body_msg.transform.rotation.z; - } - - geometry_msgs::TransformStamped cam_tf_optical_msg; - cam_tf_optical_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); - cam_tf_optical_msg.header.frame_id = frame_id; - cam_tf_optical_msg.child_frame_id = child_frame_id + "_optical"; - cam_tf_optical_msg.transform.translation.x = cam_tf_body_msg.transform.translation.x; - cam_tf_optical_msg.transform.translation.y = cam_tf_body_msg.transform.translation.y; - cam_tf_optical_msg.transform.translation.z = cam_tf_body_msg.transform.translation.z; - - tf2::Quaternion quat_cam_body; - tf2::Quaternion quat_cam_optical; - tf2::convert(cam_tf_body_msg.transform.rotation, quat_cam_body); - tf2::Matrix3x3 mat_cam_body(quat_cam_body); - // tf2::Matrix3x3 mat_cam_optical = matrix_cam_body_to_optical_ * mat_cam_body * matrix_cam_body_to_optical_inverse_; - // tf2::Matrix3x3 mat_cam_optical = matrix_cam_body_to_optical_ * mat_cam_body; - tf2::Matrix3x3 mat_cam_optical; - mat_cam_optical.setValue(mat_cam_body.getColumn(1).getX(), mat_cam_body.getColumn(2).getX(), mat_cam_body.getColumn(0).getX(), mat_cam_body.getColumn(1).getY(), mat_cam_body.getColumn(2).getY(), mat_cam_body.getColumn(0).getY(), mat_cam_body.getColumn(1).getZ(), mat_cam_body.getColumn(2).getZ(), mat_cam_body.getColumn(0).getZ()); - mat_cam_optical.getRotation(quat_cam_optical); - quat_cam_optical.normalize(); - tf2::convert(quat_cam_optical, cam_tf_optical_msg.transform.rotation); - - tf_broadcaster_.sendTransform(cam_tf_body_msg); - tf_broadcaster_.sendTransform(cam_tf_optical_msg); -} - -void AirsimROSWrapper::convert_yaml_to_simple_mat(const YAML::Node& node, SimpleMatrix& m) const -{ - int rows, cols; - rows = node["rows"].as(); - cols = node["cols"].as(); - const YAML::Node& data = node["data"]; - for (int i = 0; i < rows * cols; ++i) { - m.data[i] = data[i].as(); - } -} - -void AirsimROSWrapper::read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::CameraInfo& cam_info) const -{ - std::ifstream fin(file_name.c_str()); - YAML::Node doc = YAML::Load(fin); - - cam_info.width = doc[WIDTH_YML_NAME].as(); - cam_info.height = doc[HEIGHT_YML_NAME].as(); - - SimpleMatrix K_(3, 3, &cam_info.K[0]); - convert_yaml_to_simple_mat(doc[K_YML_NAME], K_); - SimpleMatrix R_(3, 3, &cam_info.R[0]); - convert_yaml_to_simple_mat(doc[R_YML_NAME], R_); - SimpleMatrix P_(3, 4, &cam_info.P[0]); - convert_yaml_to_simple_mat(doc[P_YML_NAME], P_); - - cam_info.distortion_model = doc[DMODEL_YML_NAME].as(); - - const YAML::Node& D_node = doc[D_YML_NAME]; - int D_rows, D_cols; - D_rows = D_node["rows"].as(); - D_cols = D_node["cols"].as(); - const YAML::Node& D_data = D_node["data"]; - cam_info.D.resize(D_rows * D_cols); - for (int i = 0; i < D_rows * D_cols; ++i) { - cam_info.D[i] = D_data[i].as(); - } +#include +#include +// #include +// PLUGINLIB_EXPORT_CLASS(AirsimROSWrapper, nodelet::Nodelet) +#include "common/AirSimSettings.hpp" +#include + +constexpr char AirsimROSWrapper::CAM_YML_NAME[]; +constexpr char AirsimROSWrapper::WIDTH_YML_NAME[]; +constexpr char AirsimROSWrapper::HEIGHT_YML_NAME[]; +constexpr char AirsimROSWrapper::K_YML_NAME[]; +constexpr char AirsimROSWrapper::D_YML_NAME[]; +constexpr char AirsimROSWrapper::R_YML_NAME[]; +constexpr char AirsimROSWrapper::P_YML_NAME[]; +constexpr char AirsimROSWrapper::DMODEL_YML_NAME[]; + +const std::unordered_map AirsimROSWrapper::image_type_int_to_string_map_ = { + { 0, "Scene" }, + { 1, "DepthPlanar" }, + { 2, "DepthPerspective" }, + { 3, "DepthVis" }, + { 4, "DisparityNormalized" }, + { 5, "Segmentation" }, + { 6, "SurfaceNormals" }, + { 7, "Infrared" } +}; + +AirsimROSWrapper::AirsimROSWrapper(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private, const std::string& host_ip) + : nh_(nh), nh_private_(nh_private), img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ + lidar_async_spinner_(1, &lidar_timer_cb_queue_) + , // same as above, but for lidar + host_ip_(host_ip) + , airsim_client_images_(host_ip) + , airsim_client_lidar_(host_ip) + , airsim_settings_parser_(host_ip) + , tf_listener_(tf_buffer_) +{ + ros_clock_.clock.fromSec(0); + is_used_lidar_timer_cb_queue_ = false; + is_used_img_timer_cb_queue_ = false; + + if (AirSimSettings::singleton().simmode_name != AirSimSettings::kSimModeTypeCar) { + airsim_mode_ = AIRSIM_MODE::DRONE; + ROS_INFO("Setting ROS wrapper to DRONE mode"); + } + else { + airsim_mode_ = AIRSIM_MODE::CAR; + ROS_INFO("Setting ROS wrapper to CAR mode"); + } + + initialize_ros(); + + std::cout << "AirsimROSWrapper Initialized!\n"; +} + +void AirsimROSWrapper::initialize_airsim() +{ + // todo do not reset if already in air? + try { + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + airsim_client_ = std::unique_ptr(new msr::airlib::MultirotorRpcLibClient(host_ip_)); + } + else { + airsim_client_ = std::unique_ptr(new msr::airlib::CarRpcLibClient(host_ip_)); + } + airsim_client_->confirmConnection(); + airsim_client_images_.confirmConnection(); + airsim_client_lidar_.confirmConnection(); + + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + airsim_client_->enableApiControl(true, vehicle_name_ptr_pair.first); // todo expose as rosservice? + airsim_client_->armDisarm(true, vehicle_name_ptr_pair.first); // todo exposes as rosservice? + } + + origin_geo_point_ = airsim_client_->getHomeGeoPoint(""); + // todo there's only one global origin geopoint for environment. but airsim API accept a parameter vehicle_name? inside carsimpawnapi.cpp, there's a geopoint being assigned in the constructor. by? + origin_geo_point_msg_ = get_gps_msg_from_airsim_geo_point(origin_geo_point_); + } + catch (rpc::rpc_error& e) { + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API, something went wrong." << std::endl + << msg << std::endl; + } +} + +void AirsimROSWrapper::initialize_ros() +{ + + // ros params + double update_airsim_control_every_n_sec; + nh_private_.getParam("is_vulkan", is_vulkan_); + nh_private_.getParam("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); + nh_private_.getParam("publish_clock", publish_clock_); + nh_private_.param("world_frame_id", world_frame_id_, world_frame_id_); + odom_frame_id_ = world_frame_id_ == AIRSIM_FRAME_ID ? AIRSIM_ODOM_FRAME_ID : ENU_ODOM_FRAME_ID; + nh_private_.param("odom_frame_id", odom_frame_id_, odom_frame_id_); + isENU_ = !(odom_frame_id_ == AIRSIM_ODOM_FRAME_ID); + nh_private_.param("coordinate_system_enu", isENU_, isENU_); + vel_cmd_duration_ = 0.05; // todo rosparam + // todo enforce dynamics constraints in this node as well? + // nh_.getParam("max_vert_vel_", max_vert_vel_); + // nh_.getParam("max_horz_vel", max_horz_vel_) + + create_ros_pubs_from_settings_json(); + airsim_control_update_timer_ = nh_private_.createTimer(ros::Duration(update_airsim_control_every_n_sec), &AirsimROSWrapper::drone_state_timer_cb, this); +} + +// XmlRpc::XmlRpcValue can't be const in this case +void AirsimROSWrapper::create_ros_pubs_from_settings_json() +{ + // subscribe to control commands on global nodehandle + gimbal_angle_quat_cmd_sub_ = nh_private_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); + gimbal_angle_euler_cmd_sub_ = nh_private_.subscribe("gimbal_angle_euler_cmd", 50, &AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this); + origin_geo_point_pub_ = nh_private_.advertise("origin_geo_point", 10); + + airsim_img_request_vehicle_name_pair_vec_.clear(); + image_pub_vec_.clear(); + cam_info_pub_vec_.clear(); + camera_info_msg_vec_.clear(); + vehicle_name_ptr_map_.clear(); + size_t lidar_cnt = 0; + + image_transport::ImageTransport image_transporter(nh_private_); + + // iterate over std::map> vehicles; + for (const auto& curr_vehicle_elem : AirSimSettings::singleton().vehicles) { + auto& vehicle_setting = curr_vehicle_elem.second; + auto curr_vehicle_name = curr_vehicle_elem.first; + + nh_.setParam("/vehicle_name", curr_vehicle_name); + + set_nans_to_zeros_in_pose(*vehicle_setting); + + std::unique_ptr vehicle_ros = nullptr; + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + vehicle_ros = std::unique_ptr(new MultiRotorROS()); + } + else { + vehicle_ros = std::unique_ptr(new CarROS()); + } + + vehicle_ros->odom_frame_id = curr_vehicle_name + "/" + odom_frame_id_; + vehicle_ros->vehicle_name = curr_vehicle_name; + + append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); + + vehicle_ros->odom_local_pub = nh_private_.advertise(curr_vehicle_name + "/" + odom_frame_id_, 10); + + vehicle_ros->env_pub = nh_private_.advertise(curr_vehicle_name + "/environment", 10); + + vehicle_ros->global_gps_pub = nh_private_.advertise(curr_vehicle_name + "/global_gps", 10); + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + auto drone = static_cast(vehicle_ros.get()); + + // bind to a single callback. todo optimal subs queue length + // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument + drone->vel_cmd_body_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_body_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name)); // todo ros::TransportHints().tcpNoDelay(); + drone->vel_cmd_world_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_world_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name)); + + drone->takeoff_srvr = nh_private_.advertiseService(curr_vehicle_name + "/takeoff", + boost::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); + drone->land_srvr = nh_private_.advertiseService(curr_vehicle_name + "/land", + boost::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); + // vehicle_ros.reset_srvr = nh_private_.advertiseService(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); + } + else { + auto car = static_cast(vehicle_ros.get()); + car->car_cmd_sub = nh_private_.subscribe(curr_vehicle_name + "/car_cmd", 1, boost::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name)); + car->car_state_pub = nh_private_.advertise(curr_vehicle_name + "/car_state", 10); + } + + // iterate over camera map std::map .cameras; + for (auto& curr_camera_elem : vehicle_setting->cameras) { + auto& camera_setting = curr_camera_elem.second; + auto& curr_camera_name = curr_camera_elem.first; + + set_nans_to_zeros_in_pose(*vehicle_setting, camera_setting); + append_static_camera_tf(vehicle_ros.get(), curr_camera_name, camera_setting); + // camera_setting.gimbal + std::vector current_image_request_vec; + current_image_request_vec.clear(); + + // iterate over capture_setting std::map capture_settings + for (const auto& curr_capture_elem : camera_setting.capture_settings) { + auto& capture_setting = curr_capture_elem.second; + + // todo why does AirSimSettings::loadCaptureSettings calls AirSimSettings::initializeCaptureSettings() + // which initializes default capture settings for _all_ NINE msr::airlib::ImageCaptureBase::ImageType + if (!(std::isnan(capture_setting.fov_degrees))) { + ImageType curr_image_type = msr::airlib::Utils::toEnum(capture_setting.image_type); + // if scene / segmentation / surface normals / infrared, get uncompressed image with pixels_as_floats = false + if (capture_setting.image_type == 0 || capture_setting.image_type == 5 || capture_setting.image_type == 6 || capture_setting.image_type == 7) { + current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, false, false)); + } + // if {DepthPlanar, DepthPerspective,DepthVis, DisparityNormalized}, get float image + else { + current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, true)); + } + + image_pub_vec_.push_back(image_transporter.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type), 1)); + cam_info_pub_vec_.push_back(nh_private_.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); + camera_info_msg_vec_.push_back(generate_cam_info(curr_camera_name, camera_setting, capture_setting)); + } + } + // push back pair (vector of image captures, current vehicle name) + airsim_img_request_vehicle_name_pair_vec_.push_back(std::make_pair(current_image_request_vec, curr_vehicle_name)); + } + + // iterate over sensors + std::vector sensors; + for (auto& curr_sensor_map : vehicle_setting->sensors) { + auto& sensor_name = curr_sensor_map.first; + auto& sensor_setting = curr_sensor_map.second; + + if (sensor_setting->enabled) { + SensorPublisher sensor_publisher; + sensor_publisher.sensor_name = sensor_setting->sensor_name; + sensor_publisher.sensor_type = sensor_setting->sensor_type; + switch (sensor_setting->sensor_type) { + case SensorBase::SensorType::Barometer: { + std::cout << "Barometer" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/altimeter/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Imu: { + std::cout << "Imu" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/imu/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Gps: { + std::cout << "Gps" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/gps/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Magnetometer: { + std::cout << "Magnetometer" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/magnetometer/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Distance: { + std::cout << "Distance" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/distance/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Lidar: { + std::cout << "Lidar" << std::endl; + auto lidar_setting = *static_cast(sensor_setting.get()); + msr::airlib::LidarSimpleParams params; + params.initializeFromSettings(lidar_setting); + append_static_lidar_tf(vehicle_ros.get(), sensor_name, params); + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/lidar/" + sensor_name, 10); + break; + } + default: { + throw std::invalid_argument("Unexpected sensor type"); + } + } + sensors.emplace_back(sensor_publisher); + } + } + + // we want fast access to the lidar sensors for callback handling, sort them out now + auto isLidar = std::function([](const SensorPublisher& pub) { + return pub.sensor_type == SensorBase::SensorType::Lidar; + }); + size_t cnt = std::count_if(sensors.begin(), sensors.end(), isLidar); + lidar_cnt += cnt; + vehicle_ros->lidar_pubs.resize(cnt); + vehicle_ros->sensor_pubs.resize(sensors.size() - cnt); + std::partition_copy(sensors.begin(), sensors.end(), vehicle_ros->lidar_pubs.begin(), vehicle_ros->sensor_pubs.begin(), isLidar); + + vehicle_name_ptr_map_.emplace(curr_vehicle_name, std::move(vehicle_ros)); // allows fast lookup in command callbacks in case of a lot of drones + } + + // add takeoff and land all services if more than 2 drones + if (vehicle_name_ptr_map_.size() > 1 && airsim_mode_ == AIRSIM_MODE::DRONE) { + takeoff_all_srvr_ = nh_private_.advertiseService("all_robots/takeoff", &AirsimROSWrapper::takeoff_all_srv_cb, this); + land_all_srvr_ = nh_private_.advertiseService("all_robots/land", &AirsimROSWrapper::land_all_srv_cb, this); + + // gimbal_angle_quat_cmd_sub_ = nh_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); + + vel_cmd_all_body_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_all_body_frame_cb, this); + vel_cmd_all_world_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_all_world_frame_cb, this); + + vel_cmd_group_body_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_group_body_frame_cb, this); + vel_cmd_group_world_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_group_world_frame_cb, this); + + takeoff_group_srvr_ = nh_private_.advertiseService("group_of_robots/takeoff", &AirsimROSWrapper::takeoff_group_srv_cb, this); + land_group_srvr_ = nh_private_.advertiseService("group_of_robots/land", &AirsimROSWrapper::land_group_srv_cb, this); + } + + // todo add per vehicle reset in AirLib API + reset_srvr_ = nh_private_.advertiseService("reset", &AirsimROSWrapper::reset_srv_cb, this); + + if (publish_clock_) { + clock_pub_ = nh_private_.advertise("clock", 1); + } + + // if >0 cameras, add one more thread for img_request_timer_cb + if (!airsim_img_request_vehicle_name_pair_vec_.empty()) { + double update_airsim_img_response_every_n_sec; + nh_private_.getParam("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); + + ros::TimerOptions timer_options(ros::Duration(update_airsim_img_response_every_n_sec), boost::bind(&AirsimROSWrapper::img_response_timer_cb, this, _1), &img_timer_cb_queue_); + airsim_img_response_timer_ = nh_private_.createTimer(timer_options); + is_used_img_timer_cb_queue_ = true; + } + + // lidars update on their own callback/thread at a given rate + if (lidar_cnt > 0) { + double update_lidar_every_n_sec; + nh_private_.getParam("update_lidar_every_n_sec", update_lidar_every_n_sec); + // nh_private_.setCallbackQueue(&lidar_timer_cb_queue_); + ros::TimerOptions timer_options(ros::Duration(update_lidar_every_n_sec), boost::bind(&AirsimROSWrapper::lidar_timer_cb, this, _1), &lidar_timer_cb_queue_); + airsim_lidar_update_timer_ = nh_private_.createTimer(timer_options); + is_used_lidar_timer_cb_queue_ = true; + } + + initialize_airsim(); +} + +// todo: error check. if state is not landed, return error. +bool AirsimROSWrapper::takeoff_srv_cb(airsim_ros_pkgs::Takeoff::Request& request, airsim_ros_pkgs::Takeoff::Response& response, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? + // response.success = + else + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); + // response.success = + + return true; +} + +bool AirsimROSWrapper::takeoff_group_srv_cb(airsim_ros_pkgs::TakeoffGroup::Request& request, airsim_ros_pkgs::TakeoffGroup::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? + // response.success = + else + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); + // response.success = + + return true; +} + +bool AirsimROSWrapper::takeoff_all_srv_cb(airsim_ros_pkgs::Takeoff::Request& request, airsim_ros_pkgs::Takeoff::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first)->waitOnLastTask(); // todo value for timeout_sec? + // response.success = + else + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first); + // response.success = + + return true; +} + +bool AirsimROSWrapper::land_srv_cb(airsim_ros_pkgs::Land::Request& request, airsim_ros_pkgs::Land::Response& response, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); + else + static_cast(airsim_client_.get())->landAsync(60, vehicle_name); + + return true; //todo +} + +bool AirsimROSWrapper::land_group_srv_cb(airsim_ros_pkgs::LandGroup::Request& request, airsim_ros_pkgs::LandGroup::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); + else + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name); + + return true; //todo +} + +bool AirsimROSWrapper::land_all_srv_cb(airsim_ros_pkgs::Land::Request& request, airsim_ros_pkgs::Land::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name_ptr_pair.first)->waitOnLastTask(); + else + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name_ptr_pair.first); + + return true; //todo +} + +// todo add reset by vehicle_name API to airlib +// todo not async remove waitonlasttask +bool AirsimROSWrapper::reset_srv_cb(airsim_ros_pkgs::Reset::Request& request, airsim_ros_pkgs::Reset::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + airsim_client_.reset(); + return true; //todo +} + +tf2::Quaternion AirsimROSWrapper::get_tf2_quat(const msr::airlib::Quaternionr& airlib_quat) const +{ + return tf2::Quaternion(airlib_quat.x(), airlib_quat.y(), airlib_quat.z(), airlib_quat.w()); +} + +msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const geometry_msgs::Quaternion& geometry_msgs_quat) const +{ + return msr::airlib::Quaternionr(geometry_msgs_quat.w, geometry_msgs_quat.x, geometry_msgs_quat.y, geometry_msgs_quat.z); +} + +msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const tf2::Quaternion& tf2_quat) const +{ + return msr::airlib::Quaternionr(tf2_quat.w(), tf2_quat.x(), tf2_quat.y(), tf2_quat.z()); +} + +void AirsimROSWrapper::car_cmd_cb(const airsim_ros_pkgs::CarControls::ConstPtr& msg, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + auto car = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + car->car_cmd.throttle = msg->throttle; + car->car_cmd.steering = msg->steering; + car->car_cmd.brake = msg->brake; + car->car_cmd.handbrake = msg->handbrake; + car->car_cmd.is_manual_gear = msg->manual; + car->car_cmd.manual_gear = msg->manual_gear; + car->car_cmd.gear_immediate = msg->gear_immediate; + + car->has_car_cmd = true; +} + +msr::airlib::Pose AirsimROSWrapper::get_airlib_pose(const float& x, const float& y, const float& z, const msr::airlib::Quaternionr& airlib_quat) const +{ + return msr::airlib::Pose(msr::airlib::Vector3r(x, y, z), airlib_quat); +} + +// void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_ros_pkgs::VelCmd& msg, const std::string& vehicle_name) +void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + double roll, pitch, yaw; + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + + // todo do actual body frame? + drone->vel_cmd.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd.z = msg->twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + // airsim uses degrees + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd = true; +} + +void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_ros_pkgs::VelCmdGroup& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + for (const auto& vehicle_name : msg.vehicle_names) { + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + double roll, pitch, yaw; + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + + // todo do actual body frame? + drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + // airsim uses degrees + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +// void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg) +void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_ros_pkgs::VelCmd& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + // todo expose waitOnLastTask or nah? + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto drone = static_cast(vehicle_name_ptr_pair.second.get()); + + double roll, pitch, yaw; + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + + // todo do actual body frame? + drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + // airsim uses degrees + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + drone->vel_cmd.x = msg->twist.linear.x; + drone->vel_cmd.y = msg->twist.linear.y; + drone->vel_cmd.z = msg->twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd = true; +} + +// this is kinda unnecessary but maybe it makes life easier for the end user. +void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_ros_pkgs::VelCmdGroup& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + for (const auto& vehicle_name : msg.vehicle_names) { + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + drone->vel_cmd.x = msg.twist.linear.x; + drone->vel_cmd.y = msg.twist.linear.y; + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_ros_pkgs::VelCmd& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + // todo expose waitOnLastTask or nah? + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto drone = static_cast(vehicle_name_ptr_pair.second.get()); + + drone->vel_cmd.x = msg.twist.linear.x; + drone->vel_cmd.y = msg.twist.linear.y; + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +// todo support multiple gimbal commands +void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_ros_pkgs::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg) +{ + tf2::Quaternion quat_control_cmd; + try { + tf2::convert(gimbal_angle_quat_cmd_msg.orientation, quat_control_cmd); + quat_control_cmd.normalize(); + gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); // airsim uses wxyz + gimbal_cmd_.camera_name = gimbal_angle_quat_cmd_msg.camera_name; + gimbal_cmd_.vehicle_name = gimbal_angle_quat_cmd_msg.vehicle_name; + has_gimbal_cmd_ = true; + } + catch (tf2::TransformException& ex) { + ROS_WARN("%s", ex.what()); + } +} + +// todo support multiple gimbal commands +// 1. find quaternion of default gimbal pose +// 2. forward multiply with quaternion equivalent to desired euler commands (in degrees) +// 3. call airsim client's setCameraPose which sets camera pose wrt world (or takeoff?) ned frame. todo +void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_ros_pkgs::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg) +{ + try { + tf2::Quaternion quat_control_cmd; + quat_control_cmd.setRPY(math_common::deg2rad(gimbal_angle_euler_cmd_msg.roll), math_common::deg2rad(gimbal_angle_euler_cmd_msg.pitch), math_common::deg2rad(gimbal_angle_euler_cmd_msg.yaw)); + quat_control_cmd.normalize(); + gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); + gimbal_cmd_.camera_name = gimbal_angle_euler_cmd_msg.camera_name; + gimbal_cmd_.vehicle_name = gimbal_angle_euler_cmd_msg.vehicle_name; + has_gimbal_cmd_ = true; + } + catch (tf2::TransformException& ex) { + ROS_WARN("%s", ex.what()); + } +} + +airsim_ros_pkgs::CarState AirsimROSWrapper::get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const +{ + airsim_ros_pkgs::CarState state_msg; + const auto odo = get_odom_msg_from_car_state(car_state); + + state_msg.pose = odo.pose; + state_msg.twist = odo.twist; + state_msg.speed = car_state.speed; + state_msg.gear = car_state.gear; + state_msg.rpm = car_state.rpm; + state_msg.maxrpm = car_state.maxrpm; + state_msg.handbrake = car_state.handbrake; + state_msg.header.stamp = airsim_timestamp_to_ros(car_state.timestamp); + + return state_msg; +} + +nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const +{ + nav_msgs::Odometry odom_msg; + + odom_msg.pose.pose.position.x = car_state.getPosition().x(); + odom_msg.pose.pose.position.y = car_state.getPosition().y(); + odom_msg.pose.pose.position.z = car_state.getPosition().z(); + odom_msg.pose.pose.orientation.x = car_state.getOrientation().x(); + odom_msg.pose.pose.orientation.y = car_state.getOrientation().y(); + odom_msg.pose.pose.orientation.z = car_state.getOrientation().z(); + odom_msg.pose.pose.orientation.w = car_state.getOrientation().w(); + + odom_msg.twist.twist.linear.x = car_state.kinematics_estimated.twist.linear.x(); + odom_msg.twist.twist.linear.y = car_state.kinematics_estimated.twist.linear.y(); + odom_msg.twist.twist.linear.z = car_state.kinematics_estimated.twist.linear.z(); + odom_msg.twist.twist.angular.x = car_state.kinematics_estimated.twist.angular.x(); + odom_msg.twist.twist.angular.y = car_state.kinematics_estimated.twist.angular.y(); + odom_msg.twist.twist.angular.z = car_state.kinematics_estimated.twist.angular.z(); + + if (isENU_) { + std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); + odom_msg.pose.pose.position.z = -odom_msg.pose.pose.position.z; + std::swap(odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y); + odom_msg.pose.pose.orientation.z = -odom_msg.pose.pose.orientation.z; + std::swap(odom_msg.twist.twist.linear.x, odom_msg.twist.twist.linear.y); + odom_msg.twist.twist.linear.z = -odom_msg.twist.twist.linear.z; + std::swap(odom_msg.twist.twist.angular.x, odom_msg.twist.twist.angular.y); + odom_msg.twist.twist.angular.z = -odom_msg.twist.twist.angular.z; + } + + return odom_msg; +} + +nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const +{ + nav_msgs::Odometry odom_msg; + + odom_msg.pose.pose.position.x = drone_state.getPosition().x(); + odom_msg.pose.pose.position.y = drone_state.getPosition().y(); + odom_msg.pose.pose.position.z = drone_state.getPosition().z(); + odom_msg.pose.pose.orientation.x = drone_state.getOrientation().x(); + odom_msg.pose.pose.orientation.y = drone_state.getOrientation().y(); + odom_msg.pose.pose.orientation.z = drone_state.getOrientation().z(); + odom_msg.pose.pose.orientation.w = drone_state.getOrientation().w(); + + odom_msg.twist.twist.linear.x = drone_state.kinematics_estimated.twist.linear.x(); + odom_msg.twist.twist.linear.y = drone_state.kinematics_estimated.twist.linear.y(); + odom_msg.twist.twist.linear.z = drone_state.kinematics_estimated.twist.linear.z(); + odom_msg.twist.twist.angular.x = drone_state.kinematics_estimated.twist.angular.x(); + odom_msg.twist.twist.angular.y = drone_state.kinematics_estimated.twist.angular.y(); + odom_msg.twist.twist.angular.z = drone_state.kinematics_estimated.twist.angular.z(); + + if (isENU_) { + std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); + odom_msg.pose.pose.position.z = -odom_msg.pose.pose.position.z; + std::swap(odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y); + odom_msg.pose.pose.orientation.z = -odom_msg.pose.pose.orientation.z; + std::swap(odom_msg.twist.twist.linear.x, odom_msg.twist.twist.linear.y); + odom_msg.twist.twist.linear.z = -odom_msg.twist.twist.linear.z; + std::swap(odom_msg.twist.twist.angular.x, odom_msg.twist.twist.angular.y); + odom_msg.twist.twist.angular.z = -odom_msg.twist.twist.angular.z; + } + + return odom_msg; +} + +// https://docs.ros.org/jade/api/sensor_msgs/html/point__cloud__conversion_8h_source.html#l00066 +// look at UnrealLidarSensor.cpp UnrealLidarSensor::getPointCloud() for math +// read this carefully https://docs.ros.org/kinetic/api/sensor_msgs/html/msg/PointCloud2.html +sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const +{ + sensor_msgs::PointCloud2 lidar_msg; + lidar_msg.header.stamp = ros::Time::now(); + lidar_msg.header.frame_id = vehicle_name; + + if (lidar_data.point_cloud.size() > 3) { + lidar_msg.height = 1; + lidar_msg.width = lidar_data.point_cloud.size() / 3; + + lidar_msg.fields.resize(3); + lidar_msg.fields[0].name = "x"; + lidar_msg.fields[1].name = "y"; + lidar_msg.fields[2].name = "z"; + + int offset = 0; + + for (size_t d = 0; d < lidar_msg.fields.size(); ++d, offset += 4) { + lidar_msg.fields[d].offset = offset; + lidar_msg.fields[d].datatype = sensor_msgs::PointField::FLOAT32; + lidar_msg.fields[d].count = 1; + } + + lidar_msg.is_bigendian = false; + lidar_msg.point_step = offset; // 4 * num fields + lidar_msg.row_step = lidar_msg.point_step * lidar_msg.width; + + lidar_msg.is_dense = true; // todo + std::vector data_std = lidar_data.point_cloud; + + const unsigned char* bytes = reinterpret_cast(data_std.data()); + vector lidar_msg_data(bytes, bytes + sizeof(float) * data_std.size()); + lidar_msg.data = std::move(lidar_msg_data); + } + else { + // msg = [] + } + + if (isENU_) { + try { + sensor_msgs::PointCloud2 lidar_msg_enu; + auto transformStampedENU = tf_buffer_.lookupTransform(AIRSIM_FRAME_ID, vehicle_name, ros::Time(0), ros::Duration(1)); + tf2::doTransform(lidar_msg, lidar_msg_enu, transformStampedENU); + + lidar_msg_enu.header.stamp = lidar_msg.header.stamp; + lidar_msg_enu.header.frame_id = lidar_msg.header.frame_id; + + lidar_msg = std::move(lidar_msg_enu); + } + catch (tf2::TransformException& ex) { + ROS_WARN("%s", ex.what()); + ros::Duration(1.0).sleep(); + } + } + + return lidar_msg; +} + +airsim_ros_pkgs::Environment AirsimROSWrapper::get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const +{ + airsim_ros_pkgs::Environment env_msg; + env_msg.position.x = env_data.position.x(); + env_msg.position.y = env_data.position.y(); + env_msg.position.z = env_data.position.z(); + env_msg.geo_point.latitude = env_data.geo_point.latitude; + env_msg.geo_point.longitude = env_data.geo_point.longitude; + env_msg.geo_point.altitude = env_data.geo_point.altitude; + env_msg.gravity.x = env_data.gravity.x(); + env_msg.gravity.y = env_data.gravity.y(); + env_msg.gravity.z = env_data.gravity.z(); + env_msg.air_pressure = env_data.air_pressure; + env_msg.temperature = env_data.temperature; + env_msg.air_density = env_data.temperature; + + return env_msg; +} + +sensor_msgs::MagneticField AirsimROSWrapper::get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const +{ + sensor_msgs::MagneticField mag_msg; + mag_msg.magnetic_field.x = mag_data.magnetic_field_body.x(); + mag_msg.magnetic_field.y = mag_data.magnetic_field_body.y(); + mag_msg.magnetic_field.z = mag_data.magnetic_field_body.z(); + std::copy(std::begin(mag_data.magnetic_field_covariance), + std::end(mag_data.magnetic_field_covariance), + std::begin(mag_msg.magnetic_field_covariance)); + mag_msg.header.stamp = airsim_timestamp_to_ros(mag_data.time_stamp); + + return mag_msg; +} + +// todo covariances +sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const +{ + sensor_msgs::NavSatFix gps_msg; + gps_msg.header.stamp = airsim_timestamp_to_ros(gps_data.time_stamp); + gps_msg.latitude = gps_data.gnss.geo_point.latitude; + gps_msg.longitude = gps_data.gnss.geo_point.longitude; + gps_msg.altitude = gps_data.gnss.geo_point.altitude; + gps_msg.status.service = sensor_msgs::NavSatStatus::SERVICE_GLONASS; + gps_msg.status.status = gps_data.gnss.fix_type; + // gps_msg.position_covariance_type = + // gps_msg.position_covariance = + + return gps_msg; +} + +sensor_msgs::Range AirsimROSWrapper::get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const +{ + sensor_msgs::Range dist_msg; + dist_msg.header.stamp = airsim_timestamp_to_ros(dist_data.time_stamp); + dist_msg.range = dist_data.distance; + dist_msg.min_range = dist_data.min_distance; + dist_msg.max_range = dist_data.min_distance; + + return dist_msg; +} + +airsim_ros_pkgs::Altimeter AirsimROSWrapper::get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const +{ + airsim_ros_pkgs::Altimeter alt_msg; + alt_msg.header.stamp = airsim_timestamp_to_ros(alt_data.time_stamp); + alt_msg.altitude = alt_data.altitude; + alt_msg.pressure = alt_data.pressure; + alt_msg.qnh = alt_data.qnh; + + return alt_msg; +} + +// todo covariances +sensor_msgs::Imu AirsimROSWrapper::get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const +{ + sensor_msgs::Imu imu_msg; + // imu_msg.header.frame_id = "/airsim/odom_local_ned";// todo multiple drones + imu_msg.header.stamp = airsim_timestamp_to_ros(imu_data.time_stamp); + imu_msg.orientation.x = imu_data.orientation.x(); + imu_msg.orientation.y = imu_data.orientation.y(); + imu_msg.orientation.z = imu_data.orientation.z(); + imu_msg.orientation.w = imu_data.orientation.w(); + + // todo radians per second + imu_msg.angular_velocity.x = imu_data.angular_velocity.x(); + imu_msg.angular_velocity.y = imu_data.angular_velocity.y(); + imu_msg.angular_velocity.z = imu_data.angular_velocity.z(); + + // meters/s2^m + imu_msg.linear_acceleration.x = imu_data.linear_acceleration.x(); + imu_msg.linear_acceleration.y = imu_data.linear_acceleration.y(); + imu_msg.linear_acceleration.z = imu_data.linear_acceleration.z(); + + // imu_msg.orientation_covariance = ; + // imu_msg.angular_velocity_covariance = ; + // imu_msg.linear_acceleration_covariance = ; + + return imu_msg; +} + +void AirsimROSWrapper::publish_odom_tf(const nav_msgs::Odometry& odom_msg) +{ + geometry_msgs::TransformStamped odom_tf; + odom_tf.header = odom_msg.header; + odom_tf.child_frame_id = odom_msg.child_frame_id; + odom_tf.transform.translation.x = odom_msg.pose.pose.position.x; + odom_tf.transform.translation.y = odom_msg.pose.pose.position.y; + odom_tf.transform.translation.z = odom_msg.pose.pose.position.z; + odom_tf.transform.rotation.x = odom_msg.pose.pose.orientation.x; + odom_tf.transform.rotation.y = odom_msg.pose.pose.orientation.y; + odom_tf.transform.rotation.z = odom_msg.pose.pose.orientation.z; + odom_tf.transform.rotation.w = odom_msg.pose.pose.orientation.w; + tf_broadcaster_.sendTransform(odom_tf); +} + +airsim_ros_pkgs::GPSYaw AirsimROSWrapper::get_gps_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const +{ + airsim_ros_pkgs::GPSYaw gps_msg; + gps_msg.latitude = geo_point.latitude; + gps_msg.longitude = geo_point.longitude; + gps_msg.altitude = geo_point.altitude; + return gps_msg; +} + +sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const +{ + sensor_msgs::NavSatFix gps_msg; + gps_msg.latitude = geo_point.latitude; + gps_msg.longitude = geo_point.longitude; + gps_msg.altitude = geo_point.altitude; + return gps_msg; +} + +ros::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const +{ + auto dur = std::chrono::duration(stamp.time_since_epoch()); + ros::Time cur_time; + cur_time.fromSec(dur.count()); + return cur_time; +} + +ros::Time AirsimROSWrapper::airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const +{ + // airsim appears to use chrono::system_clock with nanosecond precision + std::chrono::nanoseconds dur(stamp); + std::chrono::time_point tp(dur); + ros::Time cur_time = chrono_timestamp_to_ros(tp); + return cur_time; +} + +void AirsimROSWrapper::drone_state_timer_cb(const ros::TimerEvent& event) +{ + try { + // todo this is global origin + origin_geo_point_pub_.publish(origin_geo_point_msg_); + + // get the basic vehicle pose and environmental state + const auto now = update_state(); + + // on init, will publish 0 to /clock as expected for use_sim_time compatibility + if (!airsim_client_->simIsPaused()) { + // airsim_client needs to provide the simulation time in a future version of the API + ros_clock_.clock = now; + } + // publish the simulation clock + if (publish_clock_) { + clock_pub_.publish(ros_clock_); + } + + // publish vehicle state, odom, and all basic sensor types + publish_vehicle_state(); + + // send any commands out to the vehicles + update_commands(); + } + catch (rpc::rpc_error& e) { + std::cout << "error" << std::endl; + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API:" << std::endl + << msg << std::endl; + } +} + +void AirsimROSWrapper::update_and_publish_static_transforms(VehicleROS* vehicle_ros) +{ + if (vehicle_ros && !vehicle_ros->static_tf_msg_vec.empty()) { + for (auto& static_tf_msg : vehicle_ros->static_tf_msg_vec) { + static_tf_msg.header.stamp = vehicle_ros->stamp; + static_tf_pub_.sendTransform(static_tf_msg); + } + } +} + +ros::Time AirsimROSWrapper::update_state() +{ + bool got_sim_time = false; + ros::Time curr_ros_time = ros::Time::now(); + + //should be easier way to get the sim time through API, something like: + //msr::airlib::Environment::State env = airsim_client_->simGetGroundTruthEnvironment(""); + //curr_ros_time = airsim_timestamp_to_ros(env.clock().nowNanos()); + + // iterate over drones + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + ros::Time vehicle_time; + // get drone state from airsim + auto& vehicle_ros = vehicle_name_ptr_pair.second; + + // vehicle environment, we can get ambient temperature here and other truths + auto env_data = airsim_client_->simGetGroundTruthEnvironment(vehicle_ros->vehicle_name); + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + auto drone = static_cast(vehicle_ros.get()); + auto rpc = static_cast(airsim_client_.get()); + drone->curr_drone_state = rpc->getMultirotorState(vehicle_ros->vehicle_name); + + vehicle_time = airsim_timestamp_to_ros(drone->curr_drone_state.timestamp); + if (!got_sim_time) { + curr_ros_time = vehicle_time; + got_sim_time = true; + } + + vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(drone->curr_drone_state.gps_location); + vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; + + vehicle_ros->curr_odom = get_odom_msg_from_multirotor_state(drone->curr_drone_state); + } + else { + auto car = static_cast(vehicle_ros.get()); + auto rpc = static_cast(airsim_client_.get()); + car->curr_car_state = rpc->getCarState(vehicle_ros->vehicle_name); + + vehicle_time = airsim_timestamp_to_ros(car->curr_car_state.timestamp); + if (!got_sim_time) { + curr_ros_time = vehicle_time; + got_sim_time = true; + } + + vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(env_data.geo_point); + vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; + + vehicle_ros->curr_odom = get_odom_msg_from_car_state(car->curr_car_state); + + airsim_ros_pkgs::CarState state_msg = get_roscarstate_msg_from_car_state(car->curr_car_state); + state_msg.header.frame_id = vehicle_ros->vehicle_name; + car->car_state_msg = state_msg; + } + + vehicle_ros->stamp = vehicle_time; + + airsim_ros_pkgs::Environment env_msg = get_environment_msg_from_airsim(env_data); + env_msg.header.frame_id = vehicle_ros->vehicle_name; + env_msg.header.stamp = vehicle_time; + vehicle_ros->env_msg = env_msg; + + // convert airsim drone state to ROS msgs + vehicle_ros->curr_odom.header.frame_id = vehicle_ros->vehicle_name; + vehicle_ros->curr_odom.child_frame_id = vehicle_ros->odom_frame_id; + vehicle_ros->curr_odom.header.stamp = vehicle_time; + } + + return curr_ros_time; +} + +void AirsimROSWrapper::publish_vehicle_state() +{ + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto& vehicle_ros = vehicle_name_ptr_pair.second; + + // simulation environment truth + vehicle_ros->env_pub.publish(vehicle_ros->env_msg); + + if (airsim_mode_ == AIRSIM_MODE::CAR) { + // dashboard reading from car, RPM, gear, etc + auto car = static_cast(vehicle_ros.get()); + car->car_state_pub.publish(car->car_state_msg); + } + + // odom and transforms + vehicle_ros->odom_local_pub.publish(vehicle_ros->curr_odom); + publish_odom_tf(vehicle_ros->curr_odom); + + // ground truth GPS position from sim/HITL + vehicle_ros->global_gps_pub.publish(vehicle_ros->gps_sensor_msg); + + for (auto& sensor_publisher : vehicle_ros->sensor_pubs) { + switch (sensor_publisher.sensor_type) { + case SensorBase::SensorType::Barometer: { + auto baro_data = airsim_client_->getBarometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + airsim_ros_pkgs::Altimeter alt_msg = get_altimeter_msg_from_airsim(baro_data); + alt_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(alt_msg); + break; + } + case SensorBase::SensorType::Imu: { + auto imu_data = airsim_client_->getImuData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::Imu imu_msg = get_imu_msg_from_airsim(imu_data); + imu_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(imu_msg); + break; + } + case SensorBase::SensorType::Distance: { + auto distance_data = airsim_client_->getDistanceSensorData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::Range dist_msg = get_range_from_airsim(distance_data); + dist_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(dist_msg); + break; + } + case SensorBase::SensorType::Gps: { + auto gps_data = airsim_client_->getGpsData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::NavSatFix gps_msg = get_gps_msg_from_airsim(gps_data); + gps_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(gps_msg); + break; + } + case SensorBase::SensorType::Lidar: { + // handled via callback + break; + } + case SensorBase::SensorType::Magnetometer: { + auto mag_data = airsim_client_->getMagnetometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::MagneticField mag_msg = get_mag_msg_from_airsim(mag_data); + mag_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(mag_msg); + break; + } + } + } + + update_and_publish_static_transforms(vehicle_ros.get()); + } +} + +void AirsimROSWrapper::update_commands() +{ + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto& vehicle_ros = vehicle_name_ptr_pair.second; + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + auto drone = static_cast(vehicle_ros.get()); + + // send control commands from the last callback to airsim + if (drone->has_vel_cmd) { + std::lock_guard guard(drone_control_mutex_); + static_cast(airsim_client_.get())->moveByVelocityAsync(drone->vel_cmd.x, drone->vel_cmd.y, drone->vel_cmd.z, vel_cmd_duration_, msr::airlib::DrivetrainType::MaxDegreeOfFreedom, drone->vel_cmd.yaw_mode, drone->vehicle_name); + } + drone->has_vel_cmd = false; + } + else { + // send control commands from the last callback to airsim + auto car = static_cast(vehicle_ros.get()); + if (car->has_car_cmd) { + std::lock_guard guard(drone_control_mutex_); + static_cast(airsim_client_.get())->setCarControls(car->car_cmd, vehicle_ros->vehicle_name); + } + car->has_car_cmd = false; + } + } + + // Only camera rotation, no translation movement of camera + if (has_gimbal_cmd_) { + std::lock_guard guard(drone_control_mutex_); + airsim_client_->simSetCameraPose(gimbal_cmd_.camera_name, get_airlib_pose(0, 0, 0, gimbal_cmd_.target_quat), gimbal_cmd_.vehicle_name); + } + + has_gimbal_cmd_ = false; +} + +// airsim uses nans for zeros in settings.json. we set them to zeros here for handling tfs in ROS +void AirsimROSWrapper::set_nans_to_zeros_in_pose(VehicleSetting& vehicle_setting) const +{ + if (std::isnan(vehicle_setting.position.x())) + vehicle_setting.position.x() = 0.0; + + if (std::isnan(vehicle_setting.position.y())) + vehicle_setting.position.y() = 0.0; + + if (std::isnan(vehicle_setting.position.z())) + vehicle_setting.position.z() = 0.0; + + if (std::isnan(vehicle_setting.rotation.yaw)) + vehicle_setting.rotation.yaw = 0.0; + + if (std::isnan(vehicle_setting.rotation.pitch)) + vehicle_setting.rotation.pitch = 0.0; + + if (std::isnan(vehicle_setting.rotation.roll)) + vehicle_setting.rotation.roll = 0.0; +} + +// if any nan's in camera pose, set them to match vehicle pose (which has already converted any potential nans to zeros) +void AirsimROSWrapper::set_nans_to_zeros_in_pose(const VehicleSetting& vehicle_setting, CameraSetting& camera_setting) const +{ + if (std::isnan(camera_setting.position.x())) + camera_setting.position.x() = vehicle_setting.position.x(); + + if (std::isnan(camera_setting.position.y())) + camera_setting.position.y() = vehicle_setting.position.y(); + + if (std::isnan(camera_setting.position.z())) + camera_setting.position.z() = vehicle_setting.position.z(); + + if (std::isnan(camera_setting.rotation.yaw)) + camera_setting.rotation.yaw = vehicle_setting.rotation.yaw; + + if (std::isnan(camera_setting.rotation.pitch)) + camera_setting.rotation.pitch = vehicle_setting.rotation.pitch; + + if (std::isnan(camera_setting.rotation.roll)) + camera_setting.rotation.roll = vehicle_setting.rotation.roll; +} + +void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const VehicleSetting& vehicle_setting) +{ + geometry_msgs::TransformStamped vehicle_tf_msg; + vehicle_tf_msg.header.frame_id = world_frame_id_; + vehicle_tf_msg.header.stamp = ros::Time::now(); + vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name; + vehicle_tf_msg.transform.translation.x = vehicle_setting.position.x(); + vehicle_tf_msg.transform.translation.y = vehicle_setting.position.y(); + vehicle_tf_msg.transform.translation.z = vehicle_setting.position.z(); + tf2::Quaternion quat; + quat.setRPY(vehicle_setting.rotation.roll, vehicle_setting.rotation.pitch, vehicle_setting.rotation.yaw); + vehicle_tf_msg.transform.rotation.x = quat.x(); + vehicle_tf_msg.transform.rotation.y = quat.y(); + vehicle_tf_msg.transform.rotation.z = quat.z(); + vehicle_tf_msg.transform.rotation.w = quat.w(); + + if (isENU_) { + std::swap(vehicle_tf_msg.transform.translation.x, vehicle_tf_msg.transform.translation.y); + std::swap(vehicle_tf_msg.transform.rotation.x, vehicle_tf_msg.transform.rotation.y); + vehicle_tf_msg.transform.translation.z = -vehicle_tf_msg.transform.translation.z; + vehicle_tf_msg.transform.rotation.z = -vehicle_tf_msg.transform.rotation.z; + } + + vehicle_ros->static_tf_msg_vec.emplace_back(vehicle_tf_msg); +} + +void AirsimROSWrapper::append_static_lidar_tf(VehicleROS* vehicle_ros, const std::string& lidar_name, const msr::airlib::LidarSimpleParams& lidar_setting) +{ + geometry_msgs::TransformStamped lidar_tf_msg; + lidar_tf_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; + lidar_tf_msg.child_frame_id = vehicle_ros->vehicle_name + "/" + lidar_name; + lidar_tf_msg.transform.translation.x = lidar_setting.relative_pose.position.x(); + lidar_tf_msg.transform.translation.y = lidar_setting.relative_pose.position.y(); + lidar_tf_msg.transform.translation.z = lidar_setting.relative_pose.position.z(); + lidar_tf_msg.transform.rotation.x = lidar_setting.relative_pose.orientation.x(); + lidar_tf_msg.transform.rotation.y = lidar_setting.relative_pose.orientation.y(); + lidar_tf_msg.transform.rotation.z = lidar_setting.relative_pose.orientation.z(); + lidar_tf_msg.transform.rotation.w = lidar_setting.relative_pose.orientation.w(); + + if (isENU_) { + std::swap(lidar_tf_msg.transform.translation.x, lidar_tf_msg.transform.translation.y); + std::swap(lidar_tf_msg.transform.rotation.x, lidar_tf_msg.transform.rotation.y); + lidar_tf_msg.transform.translation.z = -lidar_tf_msg.transform.translation.z; + lidar_tf_msg.transform.rotation.z = -lidar_tf_msg.transform.rotation.z; + } + + vehicle_ros->static_tf_msg_vec.emplace_back(lidar_tf_msg); +} + +void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const std::string& camera_name, const CameraSetting& camera_setting) +{ + geometry_msgs::TransformStamped static_cam_tf_body_msg; + static_cam_tf_body_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; + static_cam_tf_body_msg.child_frame_id = camera_name + "_body/static"; + static_cam_tf_body_msg.transform.translation.x = camera_setting.position.x(); + static_cam_tf_body_msg.transform.translation.y = camera_setting.position.y(); + static_cam_tf_body_msg.transform.translation.z = camera_setting.position.z(); + tf2::Quaternion quat; + quat.setRPY(camera_setting.rotation.roll, camera_setting.rotation.pitch, camera_setting.rotation.yaw); + static_cam_tf_body_msg.transform.rotation.x = quat.x(); + static_cam_tf_body_msg.transform.rotation.y = quat.y(); + static_cam_tf_body_msg.transform.rotation.z = quat.z(); + static_cam_tf_body_msg.transform.rotation.w = quat.w(); + + if (isENU_) { + std::swap(static_cam_tf_body_msg.transform.translation.x, static_cam_tf_body_msg.transform.translation.y); + std::swap(static_cam_tf_body_msg.transform.rotation.x, static_cam_tf_body_msg.transform.rotation.y); + static_cam_tf_body_msg.transform.translation.z = -static_cam_tf_body_msg.transform.translation.z; + static_cam_tf_body_msg.transform.rotation.z = -static_cam_tf_body_msg.transform.rotation.z; + } + + geometry_msgs::TransformStamped static_cam_tf_optical_msg = static_cam_tf_body_msg; + static_cam_tf_optical_msg.child_frame_id = camera_name + "_optical/static"; + + tf2::Quaternion quat_cam_body; + tf2::Quaternion quat_cam_optical; + tf2::convert(static_cam_tf_body_msg.transform.rotation, quat_cam_body); + tf2::Matrix3x3 mat_cam_body(quat_cam_body); + tf2::Matrix3x3 mat_cam_optical; + mat_cam_optical.setValue(mat_cam_body.getColumn(1).getX(), mat_cam_body.getColumn(2).getX(), mat_cam_body.getColumn(0).getX(), mat_cam_body.getColumn(1).getY(), mat_cam_body.getColumn(2).getY(), mat_cam_body.getColumn(0).getY(), mat_cam_body.getColumn(1).getZ(), mat_cam_body.getColumn(2).getZ(), mat_cam_body.getColumn(0).getZ()); + mat_cam_optical.getRotation(quat_cam_optical); + quat_cam_optical.normalize(); + tf2::convert(quat_cam_optical, static_cam_tf_optical_msg.transform.rotation); + + vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_body_msg); + vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_optical_msg); +} + +void AirsimROSWrapper::img_response_timer_cb(const ros::TimerEvent& event) +{ + try { + int image_response_idx = 0; + for (const auto& airsim_img_request_vehicle_name_pair : airsim_img_request_vehicle_name_pair_vec_) { + const std::vector& img_response = airsim_client_images_.simGetImages(airsim_img_request_vehicle_name_pair.first, airsim_img_request_vehicle_name_pair.second); + + if (img_response.size() == airsim_img_request_vehicle_name_pair.first.size()) { + process_and_publish_img_response(img_response, image_response_idx, airsim_img_request_vehicle_name_pair.second); + image_response_idx += img_response.size(); + } + } + } + + catch (rpc::rpc_error& e) { + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API, didn't get image response." << std::endl + << msg << std::endl; + } +} + +void AirsimROSWrapper::lidar_timer_cb(const ros::TimerEvent& event) +{ + try { + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + if (!vehicle_name_ptr_pair.second->lidar_pubs.empty()) { + for (auto& lidar_publisher : vehicle_name_ptr_pair.second->lidar_pubs) { + auto lidar_data = airsim_client_lidar_.getLidarData(lidar_publisher.sensor_name, vehicle_name_ptr_pair.first); + sensor_msgs::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first); + lidar_publisher.publisher.publish(lidar_msg); + } + } + } + } + catch (rpc::rpc_error& e) { + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API, didn't get image response." << std::endl + << msg << std::endl; + } +} + +cv::Mat AirsimROSWrapper::manual_decode_depth(const ImageResponse& img_response) const +{ + cv::Mat mat(img_response.height, img_response.width, CV_32FC1, cv::Scalar(0)); + int img_width = img_response.width; + + for (int row = 0; row < img_response.height; row++) + for (int col = 0; col < img_width; col++) + mat.at(row, col) = img_response.image_data_float[row * img_width + col]; + return mat; +} + +sensor_msgs::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, + const ros::Time curr_ros_time, + const std::string frame_id) +{ + sensor_msgs::ImagePtr img_msg_ptr = boost::make_shared(); + img_msg_ptr->data = img_response.image_data_uint8; + img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes + img_msg_ptr->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + img_msg_ptr->header.frame_id = frame_id; + img_msg_ptr->height = img_response.height; + img_msg_ptr->width = img_response.width; + img_msg_ptr->encoding = "bgr8"; + if (is_vulkan_) + img_msg_ptr->encoding = "rgb8"; + img_msg_ptr->is_bigendian = 0; + return img_msg_ptr; +} + +sensor_msgs::ImagePtr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, + const ros::Time curr_ros_time, + const std::string frame_id) +{ + // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, + // hence the dependency on opencv and cv_bridge. however, this is an extremely fast op, so no big deal. + cv::Mat depth_img = manual_decode_depth(img_response); + sensor_msgs::ImagePtr depth_img_msg = cv_bridge::CvImage(std_msgs::Header(), "32FC1", depth_img).toImageMsg(); + depth_img_msg->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + depth_img_msg->header.frame_id = frame_id; + return depth_img_msg; +} + +// todo have a special stereo pair mode and get projection matrix by calculating offset wrt drone body frame? +sensor_msgs::CameraInfo AirsimROSWrapper::generate_cam_info(const std::string& camera_name, + const CameraSetting& camera_setting, + const CaptureSetting& capture_setting) const +{ + sensor_msgs::CameraInfo cam_info_msg; + cam_info_msg.header.frame_id = camera_name + "_optical"; + cam_info_msg.height = capture_setting.height; + cam_info_msg.width = capture_setting.width; + float f_x = (capture_setting.width / 2.0) / tan(math_common::deg2rad(capture_setting.fov_degrees / 2.0)); + // todo focal length in Y direction should be same as X it seems. this can change in future a scene capture component which exactly correponds to a cine camera + // float f_y = (capture_setting.height / 2.0) / tan(math_common::deg2rad(fov_degrees / 2.0)); + cam_info_msg.K = { f_x, 0.0, capture_setting.width / 2.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 1.0 }; + cam_info_msg.P = { f_x, 0.0, capture_setting.width / 2.0, 0.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 0.0, 1.0, 0.0 }; + return cam_info_msg; +} + +void AirsimROSWrapper::process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name) +{ + // todo add option to use airsim time (image_response.TTimePoint) like Gazebo /use_sim_time param + ros::Time curr_ros_time = ros::Time::now(); + int img_response_idx_internal = img_response_idx; + + for (const auto& curr_img_response : img_response_vec) { + // todo publishing a tf for each capture type seems stupid. but it foolproofs us against render thread's async stuff, I hope. + // Ideally, we should loop over cameras and then captures, and publish only one tf. + publish_camera_tf(curr_img_response, curr_ros_time, vehicle_name, curr_img_response.camera_name); + + // todo simGetCameraInfo is wrong + also it's only for image type -1. + // msr::airlib::CameraInfo camera_info = airsim_client_.simGetCameraInfo(curr_img_response.camera_name); + + // update timestamp of saved cam info msgs + + camera_info_msg_vec_[img_response_idx_internal].header.stamp = airsim_timestamp_to_ros(curr_img_response.time_stamp); + cam_info_pub_vec_[img_response_idx_internal].publish(camera_info_msg_vec_[img_response_idx_internal]); + + // DepthPlanar / DepthPerspective / DepthVis / DisparityNormalized + if (curr_img_response.pixels_as_float) { + image_pub_vec_[img_response_idx_internal].publish(get_depth_img_msg_from_response(curr_img_response, + curr_ros_time, + curr_img_response.camera_name + "_optical")); + } + // Scene / Segmentation / SurfaceNormals / Infrared + else { + image_pub_vec_[img_response_idx_internal].publish(get_img_msg_from_response(curr_img_response, + curr_ros_time, + curr_img_response.camera_name + "_optical")); + } + img_response_idx_internal++; + } +} + +// publish camera transforms +// camera poses are obtained from airsim's client API which are in (local) NED frame. +// We first do a change of basis to camera optical frame (Z forward, X right, Y down) +void AirsimROSWrapper::publish_camera_tf(const ImageResponse& img_response, const ros::Time& ros_time, const std::string& frame_id, const std::string& child_frame_id) +{ + geometry_msgs::TransformStamped cam_tf_body_msg; + cam_tf_body_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + cam_tf_body_msg.header.frame_id = frame_id; + cam_tf_body_msg.child_frame_id = child_frame_id + "_body"; + cam_tf_body_msg.transform.translation.x = img_response.camera_position.x(); + cam_tf_body_msg.transform.translation.y = img_response.camera_position.y(); + cam_tf_body_msg.transform.translation.z = img_response.camera_position.z(); + cam_tf_body_msg.transform.rotation.x = img_response.camera_orientation.x(); + cam_tf_body_msg.transform.rotation.y = img_response.camera_orientation.y(); + cam_tf_body_msg.transform.rotation.z = img_response.camera_orientation.z(); + cam_tf_body_msg.transform.rotation.w = img_response.camera_orientation.w(); + + if (isENU_) { + std::swap(cam_tf_body_msg.transform.translation.x, cam_tf_body_msg.transform.translation.y); + std::swap(cam_tf_body_msg.transform.rotation.x, cam_tf_body_msg.transform.rotation.y); + cam_tf_body_msg.transform.translation.z = -cam_tf_body_msg.transform.translation.z; + cam_tf_body_msg.transform.rotation.z = -cam_tf_body_msg.transform.rotation.z; + } + + geometry_msgs::TransformStamped cam_tf_optical_msg; + cam_tf_optical_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + cam_tf_optical_msg.header.frame_id = frame_id; + cam_tf_optical_msg.child_frame_id = child_frame_id + "_optical"; + cam_tf_optical_msg.transform.translation.x = cam_tf_body_msg.transform.translation.x; + cam_tf_optical_msg.transform.translation.y = cam_tf_body_msg.transform.translation.y; + cam_tf_optical_msg.transform.translation.z = cam_tf_body_msg.transform.translation.z; + + tf2::Quaternion quat_cam_body; + tf2::Quaternion quat_cam_optical; + tf2::convert(cam_tf_body_msg.transform.rotation, quat_cam_body); + tf2::Matrix3x3 mat_cam_body(quat_cam_body); + // tf2::Matrix3x3 mat_cam_optical = matrix_cam_body_to_optical_ * mat_cam_body * matrix_cam_body_to_optical_inverse_; + // tf2::Matrix3x3 mat_cam_optical = matrix_cam_body_to_optical_ * mat_cam_body; + tf2::Matrix3x3 mat_cam_optical; + mat_cam_optical.setValue(mat_cam_body.getColumn(1).getX(), mat_cam_body.getColumn(2).getX(), mat_cam_body.getColumn(0).getX(), mat_cam_body.getColumn(1).getY(), mat_cam_body.getColumn(2).getY(), mat_cam_body.getColumn(0).getY(), mat_cam_body.getColumn(1).getZ(), mat_cam_body.getColumn(2).getZ(), mat_cam_body.getColumn(0).getZ()); + mat_cam_optical.getRotation(quat_cam_optical); + quat_cam_optical.normalize(); + tf2::convert(quat_cam_optical, cam_tf_optical_msg.transform.rotation); + + tf_broadcaster_.sendTransform(cam_tf_body_msg); + tf_broadcaster_.sendTransform(cam_tf_optical_msg); +} + +void AirsimROSWrapper::convert_yaml_to_simple_mat(const YAML::Node& node, SimpleMatrix& m) const +{ + int rows, cols; + rows = node["rows"].as(); + cols = node["cols"].as(); + const YAML::Node& data = node["data"]; + for (int i = 0; i < rows * cols; ++i) { + m.data[i] = data[i].as(); + } +} + +void AirsimROSWrapper::read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::CameraInfo& cam_info) const +{ + std::ifstream fin(file_name.c_str()); + YAML::Node doc = YAML::Load(fin); + + cam_info.width = doc[WIDTH_YML_NAME].as(); + cam_info.height = doc[HEIGHT_YML_NAME].as(); + + SimpleMatrix K_(3, 3, &cam_info.K[0]); + convert_yaml_to_simple_mat(doc[K_YML_NAME], K_); + SimpleMatrix R_(3, 3, &cam_info.R[0]); + convert_yaml_to_simple_mat(doc[R_YML_NAME], R_); + SimpleMatrix P_(3, 4, &cam_info.P[0]); + convert_yaml_to_simple_mat(doc[P_YML_NAME], P_); + + cam_info.distortion_model = doc[DMODEL_YML_NAME].as(); + + const YAML::Node& D_node = doc[D_YML_NAME]; + int D_rows, D_cols; + D_rows = D_node["rows"].as(); + D_cols = D_node["cols"].as(); + const YAML::Node& D_data = D_node["data"]; + cam_info.D.resize(D_rows * D_cols); + for (int i = 0; i < D_rows * D_cols; ++i) { + cam_info.D[i] = D_data[i].as(); + } } \ No newline at end of file From 39665bd4075de2b1915e496b80aa6ad1b688168e Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 08:10:55 -0700 Subject: [PATCH 066/123] - add rviz launch file --- .../src/airsim_ros_pkgs/launch/rviz.launch.py | 21 + ros2/src/airsim_ros_pkgs/rviz/default.rviz | 569 +++++++++--------- 2 files changed, 297 insertions(+), 293 deletions(-) create mode 100644 ros2/src/airsim_ros_pkgs/launch/rviz.launch.py diff --git a/ros2/src/airsim_ros_pkgs/launch/rviz.launch.py b/ros2/src/airsim_ros_pkgs/launch/rviz.launch.py new file mode 100644 index 0000000000..19a83d48fe --- /dev/null +++ b/ros2/src/airsim_ros_pkgs/launch/rviz.launch.py @@ -0,0 +1,21 @@ +import os + +import launch +import launch_ros.actions +from ament_index_python.packages import get_package_share_directory + + +def generate_launch_description(): + + pkg_share = get_package_share_directory('airsim_ros_pkgs') + default_rviz_path = os.path.join(pkg_share, 'rviz/default.rviz') + + ld = launch.LaunchDescription([ + launch_ros.actions.Node( + package='rviz2', + executable='rviz2', + name='rviz2', + arguments=['-d', default_rviz_path] + ) + ]) + return ld \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/rviz/default.rviz b/ros2/src/airsim_ros_pkgs/rviz/default.rviz index fc81576ade..7f68da5d14 100755 --- a/ros2/src/airsim_ros_pkgs/rviz/default.rviz +++ b/ros2/src/airsim_ros_pkgs/rviz/default.rviz @@ -1,293 +1,276 @@ -Panels: - - Class: rviz/Displays - Help Height: 78 - Name: Displays - Property Tree Widget: - Expanded: - - /TF1 - - /TF1/Frames1 - - /Odometry1/Shape1 - - /PointCloud21 - Splitter Ratio: 0.5051546096801758 - Tree Height: 847 - - Class: rviz/Selection - Name: Selection - - Class: rviz/Tool Properties - Expanded: - - /2D Pose Estimate1 - - /2D Nav Goal1 - - /Publish Point1 - Name: Tool Properties - Splitter Ratio: 0.5886790156364441 - - Class: rviz/Views - Expanded: - - /Current View1 - Name: Views - Splitter Ratio: 0.5 - - Class: rviz/Time - Experimental: false - Name: Time - SyncMode: 0 - SyncSource: PointCloud2 -Preferences: - PromptSaveOnExit: true -Toolbars: - toolButtonStyle: 2 -Visualization Manager: - Class: "" - Displays: - - Alpha: 0.5 - Cell Size: 1 - Class: rviz/Grid - Color: 160; 160; 164 - Enabled: true - Line Style: - Line Width: 0.029999999329447746 - Value: Lines - Name: Grid - Normal Cell Count: 0 - Offset: - X: 0 - Y: 0 - Z: 0 - Plane: XY - Plane Cell Count: 10 - Reference Frame: - Value: true - - Class: rviz/TF - Enabled: true - Frame Timeout: 15 - Frames: - All Enabled: false - drone_1: - Value: true - drone_1/LidarCustom: - Value: true - drone_1/odom_local_enu: - Value: true - front_center_custom_body: - Value: false - front_center_custom_body/static: - Value: true - front_center_custom_optical: - Value: true - front_center_custom_optical/static: - Value: true - front_left_custom_body: - Value: false - front_left_custom_body/static: - Value: true - front_left_custom_optical: - Value: true - front_left_custom_optical/static: - Value: true - front_right_custom_body: - Value: false - front_right_custom_body/static: - Value: true - front_right_custom_optical: - Value: true - front_right_custom_optical/static: - Value: true - world_enu: - Value: false - world_ned: - Value: true - Marker Scale: 1 - Name: TF - Show Arrows: true - Show Axes: true - Show Names: true - Tree: - world_ned: - world_enu: - drone_1: - drone_1/odom_local_enu: - drone_1/LidarCustom: - {} - front_center_custom_body/static: - {} - front_center_custom_optical/static: - {} - front_left_custom_body/static: - {} - front_left_custom_optical/static: - {} - front_right_custom_body/static: - {} - front_right_custom_optical/static: - {} - front_center_custom_body: - {} - front_center_custom_optical: - {} - front_left_custom_body: - {} - front_left_custom_optical: - {} - front_right_custom_body: - {} - front_right_custom_optical: - {} - Update Interval: 0 - Value: true - - Alpha: 1 - Autocompute Intensity Bounds: true - Autocompute Value Bounds: - Max Value: 10 - Min Value: -10 - Value: true - Axis: Z - Channel Name: intensity - Class: rviz/PointCloud2 - Color: 255; 255; 255 - Color Transformer: RGB8 - Decay Time: 0 - Enabled: true - Invert Rainbow: false - Max Color: 255; 255; 255 - Max Intensity: 4096 - Min Color: 0; 0; 0 - Min Intensity: 0 - Name: front_left_depth_planar_registered_point_cloud - Position Transformer: XYZ - Queue Size: 10 - Selectable: true - Size (Pixels): 3 - Size (m): 0.10000000149011612 - Style: Flat Squares - Topic: /airsim_node/front_left_custom/DepthPlanar/registered/points - Unreliable: false - Use Fixed Frame: true - Use rainbow: true - Value: true - - Angle Tolerance: 0.10000000149011612 - Class: rviz/Odometry - Covariance: - Orientation: - Alpha: 0.5 - Color: 255; 255; 127 - Color Style: Unique - Frame: Local - Offset: 1 - Scale: 1 - Value: true - Position: - Alpha: 0.30000001192092896 - Color: 204; 51; 204 - Scale: 1 - Value: true - Value: true - Enabled: true - Keep: 25 - Name: Odometry - Position Tolerance: 0.10000000149011612 - Shape: - Alpha: 1 - Axes Length: 1 - Axes Radius: 0.10000000149011612 - Color: 255; 25; 0 - Head Length: 0.20000000298023224 - Head Radius: 0.05000000074505806 - Shaft Length: 0.20000000298023224 - Shaft Radius: 0.019999999552965164 - Value: Arrow - Topic: /airsim_node/MyQuad/odom_local_ned - Unreliable: false - Value: true - - Alpha: 1 - Autocompute Intensity Bounds: true - Autocompute Value Bounds: - Max Value: 10 - Min Value: -10 - Value: true - Axis: Z - Channel Name: intensity - Class: rviz/PointCloud2 - Color: 255; 255; 255 - Color Transformer: Intensity - Decay Time: 0 - Enabled: true - Invert Rainbow: false - Max Color: 255; 255; 255 - Max Intensity: 4096 - Min Color: 0; 0; 0 - Min Intensity: 0 - Name: PointCloud2 - Position Transformer: XYZ - Queue Size: 10 - Selectable: true - Size (Pixels): 3 - Size (m): 0.009999999776482582 - Style: Flat Squares - Topic: /airsim_node/drone_1/lidar/LidarCustom - Unreliable: false - Use Fixed Frame: true - Use rainbow: true - Value: true - Enabled: true - Global Options: - Background Color: 48; 48; 48 - Default Light: true - Fixed Frame: world_enu - Frame Rate: 30 - Name: root - Tools: - - Class: rviz/Interact - Hide Inactive Objects: true - - Class: rviz/MoveCamera - - Class: rviz/Select - - Class: rviz/FocusCamera - - Class: rviz/Measure - - Class: rviz/SetInitialPose - Theta std deviation: 0.2617993950843811 - Topic: /initialpose - X std deviation: 0.5 - Y std deviation: 0.5 - - Class: rviz/SetGoal - Topic: /move_base_simple/goal - - Class: rviz/PublishPoint - Single click: true - Topic: /clicked_point - Value: true - Views: - Current: - Class: rviz/Orbit - Distance: 34.531036376953125 - Enable Stereo Rendering: - Stereo Eye Separation: 0.05999999865889549 - Stereo Focal Distance: 1 - Swap Stereo Eyes: false - Value: false - Focal Point: - X: 0.08613172918558121 - Y: 0.2811238765716553 - Z: -0.7929707169532776 - Focal Shape Fixed Size: false - Focal Shape Size: 0.05000000074505806 - Invert Z Axis: false - Name: Current View - Near Clip Distance: 0.009999999776482582 - Pitch: 0.34479764103889465 - Target Frame: world_view - Value: Orbit (rviz) - Yaw: 3.170380115509033 - Saved: ~ -Window Geometry: - Displays: - collapsed: false - Height: 1138 - Hide Left Dock: false - Hide Right Dock: false - QMainWindow State: 000000ff00000000fd000000040000000000000255000003d8fc020000000cfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afc0000003b000003d8000000c700fffffffa000000010100000002fb0000002000630061006d005f00660072006f006e0074005f00630065006e0074006500720000000000ffffffff0000000000000000fb000000100044006900730070006c0061007900730100000000000001a60000015600fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d006500720061010000038f000000160000000000000000fb0000003600630061006d005f00660072006f006e0074005f006c006500660074005f00640065007000740068005f0070006c0061006e006100720200000af40000014e0000031c00000231fb0000001c00630061006d005f00660072006f006e0074005f006c0065006600740200000ac00000010f000002d700000196fb0000001e00630061006d005f00660072006f006e0074005f007200690067006800740200000b400000017000000286000001a7000000010000010f000003d8fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003b000003d8000000a000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000077e0000003efc0100000002fb0000000800540069006d006501000000000000077e0000024400fffffffb0000000800540069006d006501000000000000045000000000000000000000040e000003d800000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 - Selection: - collapsed: false - Time: - collapsed: false - Tool Properties: - collapsed: false - Views: - collapsed: false - Width: 1918 - X: 1050 - Y: 278 +Panels: + - Class: rviz_common/Displays + Help Height: 78 + Name: Displays + Property Tree Widget: + Expanded: + - /TF1 + - /TF1/Frames1 + - /Odometry1 + - /Odometry1/Shape1 + - /PointCloud21 + Splitter Ratio: 0.5051546096801758 + Tree Height: 635 + - Class: rviz_common/Selection + Name: Selection + - Class: rviz_common/Tool Properties + Expanded: + - /2D Pose Estimate1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.5886790156364441 + - Class: rviz_common/Views + Expanded: + - /Current View1 + Name: Time + Splitter Ratio: 0.5 +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz_default_plugins/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.029999999329447746 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Class: rviz_default_plugins/TF + Enabled: true + Frame Timeout: 15 + Frames: + All Enabled: false + SimpleFlight: + Value: true + SimpleFlight/LidarCustom: + Value: true + SimpleFlight/odom_local_ned: + Value: true + front_camera_body: + Value: true + front_camera_body/static: + Value: true + front_camera_optical: + Value: true + front_camera_optical/static: + Value: true + world_enu: + Value: false + world_ned: + Value: true + Marker Scale: 1 + Name: TF + Show Arrows: true + Show Axes: true + Show Names: true + Tree: + world_ned: + SimpleFlight: + SimpleFlight/odom_local_ned: + SimpleFlight/LidarCustom: + {} + front_camera_body/static: + {} + front_camera_optical/static: + {} + front_camera_body: + {} + front_camera_optical: + {} + world_enu: + {} + Update Interval: 0 + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz_default_plugins/PointCloud2 + Color: 255; 255; 255 + Color Transformer: RGB8 + Decay Time: 0 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Max Intensity: 4096 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: front_left_depth_planar_registered_point_cloud + Position Transformer: XYZ + Selectable: true + Size (Pixels): 3 + Size (m): 0.10000000149011612 + Style: Flat Squares + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /airsim_node/front_left_custom/DepthPlanar/registered/points + Use Fixed Frame: true + Use rainbow: true + Value: true + - Angle Tolerance: 0.10000000149011612 + Class: rviz_default_plugins/Odometry + Covariance: + Orientation: + Alpha: 0.5 + Color: 255; 255; 127 + Color Style: Unique + Frame: Local + Offset: 1 + Scale: 1 + Value: true + Position: + Alpha: 0.30000001192092896 + Color: 204; 51; 204 + Scale: 1 + Value: true + Value: true + Enabled: true + Keep: 25 + Name: Odometry + Position Tolerance: 0.10000000149011612 + Shape: + Alpha: 1 + Axes Length: 1 + Axes Radius: 0.10000000149011612 + Color: 255; 25; 0 + Head Length: 0.20000000298023224 + Head Radius: 0.05000000074505806 + Shaft Length: 0.20000000298023224 + Shaft Radius: 0.019999999552965164 + Value: Arrow + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /airsim_node/MyQuad/odom_local_ned + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz_default_plugins/PointCloud2 + Color: 255; 255; 255 + Color Transformer: Intensity + Decay Time: 0 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Max Intensity: 4096 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: PointCloud2 + Position Transformer: XYZ + Selectable: true + Size (Pixels): 3 + Size (m): 0.009999999776482582 + Style: Flat Squares + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /airsim_node/drone_1/lidar/LidarCustom + Use Fixed Frame: true + Use rainbow: true + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Fixed Frame: world_enu + Frame Rate: 30 + Name: root + Tools: + - Class: rviz_default_plugins/Interact + Hide Inactive Objects: true + - Class: rviz_default_plugins/MoveCamera + - Class: rviz_default_plugins/Select + - Class: rviz_default_plugins/FocusCamera + - Class: rviz_default_plugins/Measure + Line color: 128; 128; 0 + - Class: rviz_default_plugins/SetInitialPose + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /initialpose + - Class: rviz_default_plugins/SetGoal + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /move_base_simple/goal + - Class: rviz_default_plugins/PublishPoint + Single click: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /clicked_point + Transformation: + Current: + Class: rviz_default_plugins/TF + Value: true + Views: + Current: + Class: rviz_default_plugins/Orbit + Distance: 10 + Enable Stereo Rendering: + Stereo Eye Separation: 0.05999999865889549 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: 0 + Y: 0 + Z: 0 + Focal Shape Fixed Size: true + Focal Shape Size: 0.05000000074505806 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.009999999776482582 + Pitch: 0.785398006439209 + Target Frame: + Value: Orbit (rviz) + Yaw: 0.785398006439209 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 864 + Hide Left Dock: false + Hide Right Dock: false + QMainWindow State: 000000ff00000000fd00000004000000000000025500000306fc020000000cfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afc0000003d00000306000000c900fffffffa000000010100000002fb0000002000630061006d005f00660072006f006e0074005f00630065006e0074006500720000000000ffffffff0000000000000000fb000000100044006900730070006c0061007900730100000000000001a60000015600fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d006500720061010000038f000000160000000000000000fb0000003600630061006d005f00660072006f006e0074005f006c006500660074005f00640065007000740068005f0070006c0061006e006100720200000af40000014e0000031c00000231fb0000001c00630061006d005f00660072006f006e0074005f006c0065006600740200000ac00000010f000002d700000196fb0000001e00630061006d005f00660072006f006e0074005f007200690067006800740200000b400000017000000286000001a7000000010000010f00000306fc0200000004fb0000000800540069006d0065010000003d00000306000000a400fffffffb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003b000003d80000000000000000fb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e1000001970000000300000736000000a4fc0100000001fb0000000800540069006d00650100000000000004500000000000000000000003c60000030600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Time: + collapsed: false + Tool Properties: + collapsed: false + Width: 1846 + X: 72 + Y: 27 From 9306d9ef97ecdcd4c17666adfe9c965863a61513 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 22 Aug 2021 08:12:36 -0700 Subject: [PATCH 067/123] - delete old launch files --- .../airsim_ros_pkgs/launch/airsim_node.launch | 19 --------------- ..._with_simple_PD_position_controller.launch | 9 ------- .../launch/dynamic_constraints.launch | 24 ------------------- .../launch/position_controller_simple.launch | 20 ---------------- ros2/src/airsim_ros_pkgs/launch/rviz.launch | 3 --- .../launch/static_transforms.launch | 3 --- 6 files changed, 78 deletions(-) delete mode 100755 ros2/src/airsim_ros_pkgs/launch/airsim_node.launch delete mode 100755 ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch delete mode 100755 ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch delete mode 100755 ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch delete mode 100755 ros2/src/airsim_ros_pkgs/launch/rviz.launch delete mode 100755 ros2/src/airsim_ros_pkgs/launch/static_transforms.launch diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch b/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch deleted file mode 100755 index 9a6b3493e3..0000000000 --- a/ros2/src/airsim_ros_pkgs/launch/airsim_node.launch +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch b/ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch deleted file mode 100755 index 5146c0c6f7..0000000000 --- a/ros2/src/airsim_ros_pkgs/launch/airsim_with_simple_PD_position_controller.launch +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch b/ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch deleted file mode 100755 index 6dff530228..0000000000 --- a/ros2/src/airsim_ros_pkgs/launch/dynamic_constraints.launch +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch b/ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch deleted file mode 100755 index 41db9894f9..0000000000 --- a/ros2/src/airsim_ros_pkgs/launch/position_controller_simple.launch +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/rviz.launch b/ros2/src/airsim_ros_pkgs/launch/rviz.launch deleted file mode 100755 index 6a39c5e639..0000000000 --- a/ros2/src/airsim_ros_pkgs/launch/rviz.launch +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch b/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch deleted file mode 100755 index 1f09bbadf3..0000000000 --- a/ros2/src/airsim_ros_pkgs/launch/static_transforms.launch +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file From a7e3efe6849940fd2716a9c04970c1d44143d52c Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Mon, 23 Aug 2021 00:36:38 -0700 Subject: [PATCH 068/123] - cleanup --- .../include/pd_position_controller_simple.h | 8 +--- .../src/airsim_ros_wrapper.cpp | 38 ++----------------- 2 files changed, 4 insertions(+), 42 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h index e74d0440cd..2a68a2eaac 100644 --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -90,7 +90,7 @@ class PIDPositionController void airsim_odom_cb(const nav_msgs::msg::Odometry::SharedPtr odom_msg); void home_geopoint_cb(const airsim_interfaces::msg::GPSYaw::SharedPtr gps_msg); - void update_control_cmd_timer_cb(/* const ros::TimerEvent& event */); + void update_control_cmd_timer_cb(); void reset_errors(); @@ -133,13 +133,7 @@ class PIDPositionController rclcpp::Service::SharedPtr gps_goal_srvr_; rclcpp::Service::SharedPtr gps_goal_override_srvr_; - // rclcpp::Service<>::SharedPtr local_position_goal_srvr_; - // rclcpp::Service<>::SharedPtr local_position_goal_override_srvr_; - // rclcpp::Service<>::SharedPtr gps_goal_srvr_; - // rclcpp::Service<>::SharedPtr gps_goal_override_srvr_; - rclcpp::TimerBase::SharedPtr update_control_cmd_timer_; - //ros::Timer update_control_cmd_timer_; }; #endif /* _PID_POSITION_CONTROLLER_SIMPLE_ */ \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 54f5e8cbdf..dd403bdf62 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -31,16 +31,12 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const : nh_(nh) , nh_img_(nh_img) , nh_lidar_(nh_lidar) - // , img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ - // lidar_async_spinner_(1, &lidar_timer_cb_queue_) - , // same as above, but for lidar - host_ip_(host_ip) + , host_ip_(host_ip) , airsim_client_images_(host_ip) , airsim_client_lidar_(host_ip) , airsim_settings_parser_(host_ip) { - // ros_clock_.clock.fromSec(0); - ros_clock_.clock = rclcpp::Time(0); //ToDo - is it the right conversion? + ros_clock_.clock = rclcpp::Time(0); is_used_lidar_timer_cb_queue_ = false; is_used_img_timer_cb_queue_ = false; @@ -227,7 +223,6 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() } // iterate over sensors - // std::vector sensors; for (auto& curr_sensor_map : vehicle_setting->sensors) { auto& sensor_name = curr_sensor_map.first; auto& sensor_setting = curr_sensor_map.second; @@ -281,20 +276,9 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() throw std::invalid_argument("Unexpected sensor type"); } } - // sensors.emplace_back(sensor_publisher); } } - // // we want fast access to the lidar sensors for callback handling, sort them out now - // auto isLidar = std::function([](const SensorPublisher& pub) { - // return pub.sensor_type == SensorBase::SensorType::Lidar; - // }); - // size_t cnt = std::count_if(sensors.begin(), sensors.end(), isLidar); - // lidar_cnt += cnt; - // vehicle_ros->lidar_pubs.resize(cnt); - // vehicle_ros->sensor_pubs.resize(sensors.size() - cnt); - // std::partition_copy(sensors.begin(), sensors.end(), vehicle_ros->lidar_pubs.begin(), vehicle_ros->sensor_pubs.begin(), isLidar); - vehicle_name_ptr_map_.emplace(curr_vehicle_name, std::move(vehicle_ros)); // allows fast lookup in command callbacks in case of a lot of drones } @@ -303,8 +287,6 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() takeoff_all_srvr_ = nh_->create_service("~/all_robots/takeoff", std::bind(&AirsimROSWrapper::takeoff_all_srv_cb, this, _1, _2)); land_all_srvr_ = nh_->create_service("~/all_robots/land", std::bind(&AirsimROSWrapper::land_all_srv_cb, this, _1, _2)); - // gimbal_angle_quat_cmd_sub_ = nh_->create_subscription<>("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); - vel_cmd_all_body_frame_sub_ = nh_->create_subscription("~/all_robots/vel_cmd_body_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_body_frame_cb, this, _1)); vel_cmd_all_world_frame_sub_ = nh_->create_subscription("~/all_robots/vel_cmd_world_frame", 1, std::bind(&AirsimROSWrapper::vel_cmd_all_world_frame_cb, this, _1)); @@ -327,9 +309,6 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() double update_airsim_img_response_every_n_sec; nh_->get_parameter("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); - // ros::TimerOptions timer_options(rclcpp::Duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this), &img_timer_cb_queue_); - // airsim_img_response_timer_ = nh_->createTimer(timer_options); - airsim_img_response_timer_ = nh_img_->create_wall_timer(std::chrono::duration(update_airsim_img_response_every_n_sec), std::bind(&AirsimROSWrapper::img_response_timer_cb, this)); is_used_img_timer_cb_queue_ = true; } @@ -338,9 +317,6 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() if (lidar_cnt > 0) { double update_lidar_every_n_sec; nh_->get_parameter("update_lidar_every_n_sec", update_lidar_every_n_sec); - // nh_->setCallbackQueue(&lidar_timer_cb_queue_); - //ros::TimerOptions timer_options(rclcpp::Duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this), &lidar_timer_cb_queue_); - //airsim_lidar_update_timer_ = nh_->createTimer(timer_options); airsim_lidar_update_timer_ = nh_lidar_->create_wall_timer(std::chrono::duration(update_lidar_every_n_sec), std::bind(&AirsimROSWrapper::lidar_timer_cb, this)); is_used_lidar_timer_cb_queue_ = true; } @@ -492,7 +468,6 @@ msr::airlib::Pose AirsimROSWrapper::get_airlib_pose(const float& x, const float& return msr::airlib::Pose(msr::airlib::Vector3r(x, y, z), airlib_quat); } -// void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd& msg, const std::string& vehicle_name) void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg, const std::string& vehicle_name) { std::lock_guard guard(drone_control_mutex_); @@ -535,7 +510,6 @@ void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg: } } -// void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd::ConstPtr& msg) void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg) { std::lock_guard guard(drone_control_mutex_); @@ -927,9 +901,7 @@ rclcpp::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system { auto dur = std::chrono::duration_cast(stamp.time_since_epoch()); - // auto dur = std::chrono::duration(stamp.time_since_epoch()); - rclcpp::Time cur_time(dur.count()); //ToDo - is the right conversion? - // cur_time.fromSec(dur.count()); + rclcpp::Time cur_time(dur.count()); return cur_time; } @@ -1102,10 +1074,6 @@ void AirsimROSWrapper::publish_vehicle_state() gps_msg.header.frame_id = vehicle_ros->vehicle_name; sensor_publisher.publisher->publish(gps_msg); } - // case SensorBase::SensorType::Lidar: { - // // handled via callback - // break; - // } for (auto& sensor_publisher : vehicle_ros->magnetometer_pubs) { auto mag_data = airsim_client_->getMagnetometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); sensor_msgs::msg::MagneticField mag_msg = get_mag_msg_from_airsim(mag_data); From 7e60c728604a8b11793f601702471f441469c4f6 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Wed, 25 Aug 2021 00:59:52 -0700 Subject: [PATCH 069/123] - update airsim_interfaces package.xml --- ros2/src/airsim_interfaces/CMakeLists.txt | 2 -- ros2/src/airsim_interfaces/package.xml | 4 +++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ros2/src/airsim_interfaces/CMakeLists.txt b/ros2/src/airsim_interfaces/CMakeLists.txt index 854c13dd23..7a5edbb03b 100644 --- a/ros2/src/airsim_interfaces/CMakeLists.txt +++ b/ros2/src/airsim_interfaces/CMakeLists.txt @@ -35,7 +35,5 @@ rosidl_generate_interfaces(${PROJECT_NAME} "srv/SetLocalPosition.srv" DEPENDENCIES std_msgs geometry_msgs geographic_msgs ) -#install(FILES mapping_rules.yaml DESTINATION share/${PROJECT_NAME}) - ament_export_dependencies(rosidl_default_runtime) ament_package() diff --git a/ros2/src/airsim_interfaces/package.xml b/ros2/src/airsim_interfaces/package.xml index 3771ad7403..9b19439500 100644 --- a/ros2/src/airsim_interfaces/package.xml +++ b/ros2/src/airsim_interfaces/package.xml @@ -12,7 +12,9 @@ rosidl_default_generators - action_msgs + std_msgs + geometry_msgs + geographic_msgs rosidl_default_runtime From 7e6654283fd4e44bd9d307bc73403fe9fb5b25f3 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Wed, 25 Aug 2021 04:51:06 -0700 Subject: [PATCH 070/123] - cleanup --- ros2/src/airsim_ros_pkgs/CMakeLists.txt | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/CMakeLists.txt b/ros2/src/airsim_ros_pkgs/CMakeLists.txt index 1432f10219..22680d3815 100644 --- a/ros2/src/airsim_ros_pkgs/CMakeLists.txt +++ b/ros2/src/airsim_ros_pkgs/CMakeLists.txt @@ -27,17 +27,6 @@ find_package(rosidl_typesupport_cpp REQUIRED) find_package(rosidl_default_runtime REQUIRED) find_package(airsim_interfaces REQUIRED) -# rosidl_generate_interfaces(${PROJECT_NAME} "msg/GimbalAngleEulerCmd.msg" -# "msg/GimbalAngleQuatCmd.msg" "msg/GPSYaw.msg" "msg/VelCmd.msg" -# "msg/VelCmdGroup.msg" "msg/CarControls.msg" "msg/CarState.msg" -# "msg/Altimeter.msg" "msg/Environment.msg" "srv/SetGPSPosition.srv" -# "srv/Takeoff.srv" "srv/TakeoffGroup.srv" "srv/Land.srv" "srv/LandGroup.srv" -# "srv/Reset.srv" "srv/SetLocalPosition.srv" -# DEPENDENCIES builtin_interfaces nav_msgs geographic_msgs std_srvs -# tf2_sensor_msgs geometry_msgs tf2_geometry_msgs sensor_msgs mavros_msgs std_msgs) - - - set(AIRSIM_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../) add_subdirectory("${AIRSIM_ROOT}/cmake/rpclib_wrapper" rpclib_wrapper) From 75cfe800e4c2c987f7ecc785c141086c4878839a Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Wed, 25 Aug 2021 05:39:09 -0700 Subject: [PATCH 071/123] - remove ros pkgs from include - use ament_target_dependencies() for ros pkgs - cleanup --- ros2/src/airsim_ros_pkgs/CMakeLists.txt | 53 ++++++++++++++----------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/CMakeLists.txt b/ros2/src/airsim_ros_pkgs/CMakeLists.txt index 22680d3815..9a5f6fda42 100644 --- a/ros2/src/airsim_ros_pkgs/CMakeLists.txt +++ b/ros2/src/airsim_ros_pkgs/CMakeLists.txt @@ -1,11 +1,6 @@ cmake_minimum_required(VERSION 3.5) project(airsim_ros_pkgs) -# Add support for C++11 -#if(NOT CMAKE_CXX_STANDARD) -#set(CMAKE_CXX_STANDARD 11) -#endif() - find_package(rclcpp REQUIRED) find_package(nav_msgs REQUIRED) find_package(geographic_msgs REQUIRED) @@ -43,22 +38,14 @@ set(RPC_LIB_INCLUDES " ${AIRSIM_ROOT}/external/rpclib/rpclib-2.3.0/include") set(RPC_LIB rpc) message(STATUS "found RPC_LIB_INCLUDES=${RPC_LIB_INCLUDES}") -set(INCLUDE_DIRS include ${rclcpp_INCLUDE_DIRS} ${nav_msgs_INCLUDE_DIRS} - ${geographic_msgs_INCLUDE_DIRS} ${std_srvs_INCLUDE_DIRS} ${tf2_ros_INCLUDE_DIRS} - ${tf2_sensor_msgs_INCLUDE_DIRS} ${rclpy_INCLUDE_DIRS} ${tf2_INCLUDE_DIRS} - ${image_transport_INCLUDE_DIRS} ${geometry_msgs_INCLUDE_DIRS} - ${cv_bridge_INCLUDE_DIRS} ${tf2_geometry_msgs_INCLUDE_DIRS} - ${sensor_msgs_INCLUDE_DIRS} ${mavros_msgs_INCLUDE_DIRS} - ${rosidl_default_generators_INCLUDE_DIRS} ${ament_cmake_INCLUDE_DIRS} - ${std_msgs_INCLUDE_DIRS} +set(INCLUDE_DIRS include ${AIRSIM_ROOT}/AirLib/deps/eigen3 ${AIRSIM_ROOT}/AirLib/include ${RPC_LIB_INCLUDES} ${AIRSIM_ROOT}/MavLinkCom/include ${AIRSIM_ROOT}/MavLinkCom/common_utils ${OpenCV_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} - ${airsim_interfaces_INCLUDE_DIRS}) + ${Boost_INCLUDE_DIRS}) include_directories(${INCLUDE_DIRS}) set(LIBRARY_DIRS ${rclcpp_LIBRARY_DIRS} ${nav_msgs_LIBRARY_DIRS} @@ -86,23 +73,43 @@ find_package(Boost REQUIRED) find_package(OpenCV REQUIRED) add_library(airsim_settings_parser src/airsim_settings_parser.cpp) -target_link_libraries(airsim_settings_parser ${LIBS} AirLib) +target_link_libraries(airsim_settings_parser AirLib) add_library(pd_position_controller_simple src/pd_position_controller_simple.cpp) -target_link_libraries(pd_position_controller_simple ${LIBS} AirLib) - +target_link_libraries(pd_position_controller_simple AirLib) +ament_target_dependencies(pd_position_controller_simple + rclcpp + nav_msgs + geometry_msgs + airsim_interfaces +) add_library(airsim_ros src/airsim_ros_wrapper.cpp) -target_link_libraries(airsim_ros ${LIBS} ${OpenCV_LIBS} yaml-cpp AirLib - airsim_settings_parser) +target_link_libraries(airsim_ros ${OpenCV_LIBS} yaml-cpp AirLib airsim_settings_parser) +ament_target_dependencies(airsim_ros + rclcpp + sensor_msgs + geometry_msgs + nav_msgs + image_transport + tf2_ros + cv_bridge + airsim_interfaces +) add_executable(airsim_node src/airsim_node.cpp) -target_link_libraries(airsim_node airsim_ros ${LIBS} AirLib) +target_link_libraries(airsim_node airsim_ros AirLib) +ament_target_dependencies(airsim_node + rclcpp +) add_executable(pd_position_controller_simple_node src/pd_position_controller_simple_node.cpp) target_link_libraries(pd_position_controller_simple_node - pd_position_controller_simple airsim_ros ${LIBS} AirLib) + pd_position_controller_simple airsim_ros AirLib) +ament_target_dependencies(pd_position_controller_simple_node + rclcpp +) # rosidl_target_interfaces(airsim_node # ${PROJECT_NAME} "rosidl_typesupport_cpp") @@ -147,6 +154,6 @@ ament_export_dependencies(airsim_interfaces) ament_export_include_directories(${INCLUDE_DIRS}) ament_export_libraries(airsim_settings_parser pd_position_controller_simple - airsim_ros)# ${LIBS}) + airsim_ros) ament_package() From f4b5e0cfa1f4235d1fa81bd101492fa884ddac18 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 26 Aug 2021 01:04:17 -0700 Subject: [PATCH 072/123] - cleanup --- ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index ac2efeafcf..a2c0e6990f 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -40,8 +40,6 @@ STRICT_MODE_OFF //todo what does this do? #include #include #include -//#include -//#include #include #include #include @@ -63,7 +61,6 @@ STRICT_MODE_OFF //todo what does this do? #include #include #include - // #include "nodelet/nodelet.h" // todo move airlib typedefs to separate header file? typedef msr::airlib::ImageCaptureBase::ImageRequest ImageRequest; From 2645426320f8bfe2d9283d613041503e26be0a5a Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 26 Aug 2021 05:15:01 -0700 Subject: [PATCH 073/123] - enable complier warnings --- ros2/src/airsim_ros_pkgs/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/CMakeLists.txt b/ros2/src/airsim_ros_pkgs/CMakeLists.txt index 9a5f6fda42..60e2e57af6 100644 --- a/ros2/src/airsim_ros_pkgs/CMakeLists.txt +++ b/ros2/src/airsim_ros_pkgs/CMakeLists.txt @@ -29,11 +29,11 @@ add_subdirectory("${AIRSIM_ROOT}/cmake/AirLib" AirLib) add_subdirectory("${AIRSIM_ROOT}/cmake/MavLinkCom" MavLinkCom) set(CMAKE_CXX_STANDARD 14) -set(CXX_EXP_LIB - "-nostdinc++ -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -nodefaultlibs +set(CMAKE_CXX_FLAGS "-O3 -Wall -Wextra -Wnoexcept -Wstrict-null-sentinel") +set(CXX_EXP_LIB "-nostdinc++ -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -nodefaultlibs -l/usr/lib/x86_64-linux-gnu/libc++.so -l/usr/lib/x86_64-linux-gnu/libc++abi.so --lm -lc -lgcc_s -lgcc -g --lstdc++fs -fmax-errors=10 -Wnoexcept -Wstrict-null-sentinel") +-lm -lc -lgcc_s -lgcc -g +-lstdc++fs -fmax-errors=10") set(RPC_LIB_INCLUDES " ${AIRSIM_ROOT}/external/rpclib/rpclib-2.3.0/include") set(RPC_LIB rpc) message(STATUS "found RPC_LIB_INCLUDES=${RPC_LIB_INCLUDES}") From b15040213050c530fe52cf0b411b2eb06042a86b Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 26 Aug 2021 05:15:37 -0700 Subject: [PATCH 074/123] - fix compiler warnings - init order, unused params --- ros2/src/airsim_ros_pkgs/src/airsim_node.cpp | 3 +-- .../src/airsim_ros_wrapper.cpp | 20 +++++++++++++++---- .../src/pd_position_controller_simple.cpp | 8 ++++---- .../pd_position_controller_simple_node.cpp | 10 +--------- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp index dda3edb8b9..1003f8556a 100644 --- a/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_node.cpp @@ -1,6 +1,5 @@ -#include "rclcpp/rclcpp.hpp" +#include #include "airsim_ros_wrapper.h" -//#include int main(int argc, char** argv) { diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index dd403bdf62..24736d8dfa 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -28,13 +28,13 @@ const std::unordered_map AirsimROSWrapper::image_type_int_to_s }; AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_img, const std::shared_ptr nh_lidar, const std::string& host_ip) - : nh_(nh) - , nh_img_(nh_img) - , nh_lidar_(nh_lidar) + : airsim_settings_parser_(host_ip) , host_ip_(host_ip) , airsim_client_images_(host_ip) , airsim_client_lidar_(host_ip) - , airsim_settings_parser_(host_ip) + , nh_(nh) + , nh_img_(nh_img) + , nh_lidar_(nh_lidar) { ros_clock_.clock = rclcpp::Time(0); is_used_lidar_timer_cb_queue_ = false; @@ -338,6 +338,7 @@ const SensorPublisher AirsimROSWrapper::create_sensor_publisher(const string& // todo: error check. if state is not landed, return error. bool AirsimROSWrapper::takeoff_srv_cb(std::shared_ptr request, std::shared_ptr response, const std::string& vehicle_name) { + unused(response); std::lock_guard guard(drone_control_mutex_); if (request->wait_on_last_task) @@ -352,6 +353,7 @@ bool AirsimROSWrapper::takeoff_srv_cb(std::shared_ptr request, std::shared_ptr response) { + unused(response); std::lock_guard guard(drone_control_mutex_); if (request->wait_on_last_task) @@ -368,6 +370,7 @@ bool AirsimROSWrapper::takeoff_group_srv_cb(std::shared_ptr request, std::shared_ptr response) { + unused(response); std::lock_guard guard(drone_control_mutex_); if (request->wait_on_last_task) @@ -384,6 +387,7 @@ bool AirsimROSWrapper::takeoff_all_srv_cb(std::shared_ptr request, std::shared_ptr response, const std::string& vehicle_name) { + unused(response); std::lock_guard guard(drone_control_mutex_); if (request->wait_on_last_task) @@ -396,6 +400,7 @@ bool AirsimROSWrapper::land_srv_cb(std::shared_ptr request, std::shared_ptr response) { + unused(response); std::lock_guard guard(drone_control_mutex_); if (request->wait_on_last_task) @@ -410,6 +415,7 @@ bool AirsimROSWrapper::land_group_srv_cb(std::shared_ptr request, std::shared_ptr response) { + unused(response); std::lock_guard guard(drone_control_mutex_); if (request->wait_on_last_task) @@ -426,6 +432,8 @@ bool AirsimROSWrapper::land_all_srv_cb(std::shared_ptr request, std::shared_ptr response) { + unused(request); + unused(response); std::lock_guard guard(drone_control_mutex_); airsim_client_.reset(); @@ -1308,6 +1316,7 @@ std::shared_ptr AirsimROSWrapper::get_img_msg_from_resp const rclcpp::Time curr_ros_time, const std::string frame_id) { + unused(curr_ros_time); std::shared_ptr img_msg_ptr = std::make_shared(); //boost::make_shared(); img_msg_ptr->data = img_response.image_data_uint8; img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes @@ -1326,6 +1335,7 @@ std::shared_ptr AirsimROSWrapper::get_depth_img_msg_fro const rclcpp::Time curr_ros_time, const std::string frame_id) { + unused(curr_ros_time); // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, // hence the dependency on opencv and cv_bridge. however, this is an extremely fast op, so no big deal. cv::Mat depth_img = manual_decode_depth(img_response); @@ -1340,6 +1350,7 @@ sensor_msgs::msg::CameraInfo AirsimROSWrapper::generate_cam_info(const std::stri const CameraSetting& camera_setting, const CaptureSetting& capture_setting) const { + unused(camera_setting); sensor_msgs::msg::CameraInfo cam_info_msg; cam_info_msg.header.frame_id = camera_name + "_optical"; cam_info_msg.height = capture_setting.height; @@ -1392,6 +1403,7 @@ void AirsimROSWrapper::process_and_publish_img_response(const std::vector } PIDPositionController::PIDPositionController(const std::shared_ptr nh) - : nh_(nh), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) + : use_eth_lib_for_geodetic_conv_(true), nh_(nh), has_home_geo_(false), reached_goal_(false), has_goal_(false), has_odom_(false), got_goal_once_(false) { params_.load_from_rosparams(nh_); constraints_.load_from_rosparams(nh_); @@ -114,6 +114,7 @@ void PIDPositionController::check_reached_goal() bool PIDPositionController::local_position_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response) { + unused(response); // this tells the update timer callback to not do active hovering if (!got_goal_once_) got_goal_once_ = true; @@ -146,6 +147,7 @@ bool PIDPositionController::local_position_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response) { + unused(response); // this tells the update timer callback to not do active hovering if (!got_goal_once_) got_goal_once_ = true; @@ -187,7 +189,6 @@ bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptrlatitude, request->longitude, request->altitude); msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); - bool use_eth_lib = true; if (use_eth_lib_for_geodetic_conv_) { double initial_latitude, initial_longitude, initial_altitude; geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); @@ -237,7 +238,6 @@ bool PIDPositionController::gps_goal_srv_override_cb(const std::shared_ptrlatitude, request->longitude, request->altitude); msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); - bool use_eth_lib = true; if (use_eth_lib_for_geodetic_conv_) { double initial_latitude, initial_longitude, initial_altitude; geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); @@ -270,7 +270,7 @@ bool PIDPositionController::gps_goal_srv_override_cb(const std::shared_ptr #include "pd_position_controller_simple.h" int main(int argc, char** argv) @@ -10,14 +10,6 @@ int main(int argc, char** argv) PIDPositionController controller(nh); - // int num_threads = 1; - // ros::MultiThreadedSpinner multi_thread(num_threads); - // multi_thread.spin(); - - // ros::AsyncSpinner async_spinner(num_threads); - // async_spinner.start(); - - // single threaded spinner rclcpp::spin(nh); return 0; } \ No newline at end of file From a5991ee5b0f463ebbc2ad28059a32ff74e10c598 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 26 Aug 2021 05:32:16 -0700 Subject: [PATCH 075/123] - remove '-g' from compiler args --- ros2/src/airsim_ros_pkgs/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/CMakeLists.txt b/ros2/src/airsim_ros_pkgs/CMakeLists.txt index 60e2e57af6..819120460b 100644 --- a/ros2/src/airsim_ros_pkgs/CMakeLists.txt +++ b/ros2/src/airsim_ros_pkgs/CMakeLists.txt @@ -32,7 +32,7 @@ set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_FLAGS "-O3 -Wall -Wextra -Wnoexcept -Wstrict-null-sentinel") set(CXX_EXP_LIB "-nostdinc++ -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -nodefaultlibs -l/usr/lib/x86_64-linux-gnu/libc++.so -l/usr/lib/x86_64-linux-gnu/libc++abi.so --lm -lc -lgcc_s -lgcc -g +-lm -lc -lgcc_s -lgcc -lstdc++fs -fmax-errors=10") set(RPC_LIB_INCLUDES " ${AIRSIM_ROOT}/external/rpclib/rpclib-2.3.0/include") set(RPC_LIB rpc) From ccaf873ecbf6fd6f950c9f230532abac233ae9fc Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Tue, 31 Aug 2021 11:05:38 +0300 Subject: [PATCH 076/123] - remove boost dependencies --- ros2/src/airsim_ros_pkgs/CMakeLists.txt | 3 +-- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/CMakeLists.txt b/ros2/src/airsim_ros_pkgs/CMakeLists.txt index 819120460b..4e196dacff 100644 --- a/ros2/src/airsim_ros_pkgs/CMakeLists.txt +++ b/ros2/src/airsim_ros_pkgs/CMakeLists.txt @@ -45,7 +45,7 @@ set(INCLUDE_DIRS include ${AIRSIM_ROOT}/MavLinkCom/include ${AIRSIM_ROOT}/MavLinkCom/common_utils ${OpenCV_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS}) + ) include_directories(${INCLUDE_DIRS}) set(LIBRARY_DIRS ${rclcpp_LIBRARY_DIRS} ${nav_msgs_LIBRARY_DIRS} @@ -69,7 +69,6 @@ set(LIBS ${rclcpp_LIBRARIES} ${nav_msgs_LIBRARIES} ${geographic_msgs_LIBRARIES} ${std_msgs_LIBRARIES} ${airsim_interfaces_LIBRARIES}) -find_package(Boost REQUIRED) find_package(OpenCV REQUIRED) add_library(airsim_settings_parser src/airsim_settings_parser.cpp) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 24736d8dfa..5d90aafc7b 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -1,5 +1,4 @@ #include -#include // #include // PLUGINLIB_EXPORT_CLASS(AirsimROSWrapper, nodelet::Nodelet) #include "common/AirSimSettings.hpp" From 6c285d25ab941af9cabb1827b48962b28753e014 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Tue, 31 Aug 2021 11:08:22 +0300 Subject: [PATCH 077/123] - reorder find_package(OpenCV REQUIRED) --- ros2/src/airsim_ros_pkgs/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/CMakeLists.txt b/ros2/src/airsim_ros_pkgs/CMakeLists.txt index 4e196dacff..7d853a97ff 100644 --- a/ros2/src/airsim_ros_pkgs/CMakeLists.txt +++ b/ros2/src/airsim_ros_pkgs/CMakeLists.txt @@ -21,6 +21,7 @@ find_package(std_msgs REQUIRED) find_package(rosidl_typesupport_cpp REQUIRED) find_package(rosidl_default_runtime REQUIRED) find_package(airsim_interfaces REQUIRED) +find_package(OpenCV REQUIRED) set(AIRSIM_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../) @@ -69,8 +70,6 @@ set(LIBS ${rclcpp_LIBRARIES} ${nav_msgs_LIBRARIES} ${geographic_msgs_LIBRARIES} ${std_msgs_LIBRARIES} ${airsim_interfaces_LIBRARIES}) -find_package(OpenCV REQUIRED) - add_library(airsim_settings_parser src/airsim_settings_parser.cpp) target_link_libraries(airsim_settings_parser AirLib) From 4c0b602d87549608ae970e8df81809aea9b0e519 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Tue, 31 Aug 2021 11:16:43 +0300 Subject: [PATCH 078/123] - remove set LIBRARY_DIRS, LIBS and link_directories --- ros2/src/airsim_ros_pkgs/CMakeLists.txt | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/CMakeLists.txt b/ros2/src/airsim_ros_pkgs/CMakeLists.txt index 7d853a97ff..6d961a430f 100644 --- a/ros2/src/airsim_ros_pkgs/CMakeLists.txt +++ b/ros2/src/airsim_ros_pkgs/CMakeLists.txt @@ -49,27 +49,6 @@ set(INCLUDE_DIRS include ) include_directories(${INCLUDE_DIRS}) -set(LIBRARY_DIRS ${rclcpp_LIBRARY_DIRS} ${nav_msgs_LIBRARY_DIRS} - ${geographic_msgs_LIBRARY_DIRS} ${std_srvs_LIBRARY_DIRS} ${tf2_ros_LIBRARY_DIRS} - ${tf2_sensor_msgs_LIBRARY_DIRS} ${rclpy_LIBRARY_DIRS} ${tf2_LIBRARY_DIRS} - ${image_transport_LIBRARY_DIRS} ${geometry_msgs_LIBRARY_DIRS} - ${cv_bridge_LIBRARY_DIRS} ${tf2_geometry_msgs_LIBRARY_DIRS} - ${sensor_msgs_LIBRARY_DIRS} ${mavros_msgs_LIBRARY_DIRS} - ${rosidl_default_generators_LIBRARY_DIRS} ${ament_cmake_LIBRARY_DIRS} - ${std_msgs_LIBRARY_DIRS} - ${airsim_interfaces_LIBRARY_DIRS}) - -link_directories(${LIBRARY_DIRS}) - -set(LIBS ${rclcpp_LIBRARIES} ${nav_msgs_LIBRARIES} ${geographic_msgs_LIBRARIES} - ${std_srvs_LIBRARIES} ${tf2_ros_LIBRARIES} ${tf2_sensor_msgs_LIBRARIES} - ${rclpy_LIBRARIES} ${tf2_LIBRARIES} ${image_transport_LIBRARIES} - ${geometry_msgs_LIBRARIES} ${cv_bridge_LIBRARIES} ${tf2_geometry_msgs_LIBRARIES} - ${sensor_msgs_LIBRARIES} ${mavros_msgs_LIBRARIES} - ${rosidl_default_generators_LIBRARIES} ${ament_cmake_LIBRARIES} - ${std_msgs_LIBRARIES} - ${airsim_interfaces_LIBRARIES}) - add_library(airsim_settings_parser src/airsim_settings_parser.cpp) target_link_libraries(airsim_settings_parser AirLib) From d9453697c01282c46db4d70c949eb52f65a12d46 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 12 Sep 2021 10:22:56 +0300 Subject: [PATCH 079/123] - remove stray semicolons --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 5d90aafc7b..24f78e53c9 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -50,9 +50,8 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const tf_buffer_ = std::make_shared(nh_->get_clock()); tf_listener_ = std::make_shared(*tf_buffer_); tf_broadcaster_ = std::make_shared(nh_); - ; static_tf_pub_ = std::make_shared(nh_); - ; + initialize_ros(); std::cout << "AirsimROSWrapper Initialized!\n"; From ec808f1e45daa6245ce52aa8c5c0096be5497590 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 12 Sep 2021 10:34:32 +0300 Subject: [PATCH 080/123] - move members initialization --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 24f78e53c9..8804033e99 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -27,7 +27,9 @@ const std::unordered_map AirsimROSWrapper::image_type_int_to_s }; AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const std::shared_ptr nh_img, const std::shared_ptr nh_lidar, const std::string& host_ip) - : airsim_settings_parser_(host_ip) + : is_used_lidar_timer_cb_queue_(false) + , is_used_img_timer_cb_queue_(false) + , airsim_settings_parser_(host_ip) , host_ip_(host_ip) , airsim_client_images_(host_ip) , airsim_client_lidar_(host_ip) @@ -36,8 +38,6 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const , nh_lidar_(nh_lidar) { ros_clock_.clock = rclcpp::Time(0); - is_used_lidar_timer_cb_queue_ = false; - is_used_img_timer_cb_queue_ = false; if (AirSimSettings::singleton().simmode_name != AirSimSettings::kSimModeTypeCar) { airsim_mode_ = AIRSIM_MODE::DRONE; From 753d8b0cedbe603e33c71a284158593286a3225d Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 12 Sep 2021 10:38:07 +0300 Subject: [PATCH 081/123] - change member to const --- .../src/airsim_ros_pkgs/include/pd_position_controller_simple.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h index 2a68a2eaac..b2424b27f3 100644 --- a/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h +++ b/ros2/src/airsim_ros_pkgs/include/pd_position_controller_simple.h @@ -102,7 +102,7 @@ class PIDPositionController private: geodetic_converter::GeodeticConverter geodetic_converter_; - bool use_eth_lib_for_geodetic_conv_; + const bool use_eth_lib_for_geodetic_conv_; const std::shared_ptr nh_; From 13bbb27a4212ff0e729eb96ae815456e39cbc6c8 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 12 Sep 2021 10:55:29 +0300 Subject: [PATCH 082/123] - marl dtor as defualt --- ros2/src/airsim_ros_pkgs/include/airsim_settings_parser.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_settings_parser.h b/ros2/src/airsim_ros_pkgs/include/airsim_settings_parser.h index e035beaee0..2124ddff5e 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_settings_parser.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_settings_parser.h @@ -20,7 +20,7 @@ class AirSimSettingsParser public: AirSimSettingsParser(const std::string& host_ip); - ~AirSimSettingsParser(){}; + ~AirSimSettingsParser() = default; bool success(); From 991e7dde32c20d697db92cd16882e3827f928ec4 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 12 Sep 2021 10:57:12 +0300 Subject: [PATCH 083/123] - apply clang --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 8804033e99..0c19835f32 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -51,7 +51,7 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const tf_listener_ = std::make_shared(*tf_buffer_); tf_broadcaster_ = std::make_shared(nh_); static_tf_pub_ = std::make_shared(nh_); - + initialize_ros(); std::cout << "AirsimROSWrapper Initialized!\n"; From b8582320e25e668d24ba4e8b1825bfafca4af282 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 12 Sep 2021 12:49:36 +0300 Subject: [PATCH 084/123] - convert std::cout to RCLCPP logger --- .../src/airsim_ros_wrapper.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 0c19835f32..b7cc79fcce 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -54,7 +54,7 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const initialize_ros(); - std::cout << "AirsimROSWrapper Initialized!\n"; + RCLCPP_INFO(nh_->get_logger(), "AirsimROSWrapper Initialized!"); } void AirsimROSWrapper::initialize_airsim() @@ -83,8 +83,7 @@ void AirsimROSWrapper::initialize_airsim() } catch (rpc::rpc_error& e) { std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API, something went wrong." << std::endl - << msg << std::endl; + RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API, something went wrong.\n%s", msg); } } @@ -325,7 +324,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() template const SensorPublisher AirsimROSWrapper::create_sensor_publisher(const string& sensor_type_name, const string& sensor_name, SensorBase::SensorType sensor_type, const string& topic_name, int QoS) { - std::cout << sensor_type_name << std::endl; + RCLCPP_INFO_STREAM(nh_->get_logger() ,sensor_type_name); SensorPublisher sensor_publisher; sensor_publisher.sensor_name = sensor_name; sensor_publisher.sensor_type = sensor_type; @@ -946,10 +945,8 @@ void AirsimROSWrapper::drone_state_timer_cb() update_commands(); } catch (rpc::rpc_error& e) { - std::cout << "error" << std::endl; std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API:" << std::endl - << msg << std::endl; + RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API:\n%s", msg); } } @@ -1274,8 +1271,7 @@ void AirsimROSWrapper::img_response_timer_cb() catch (rpc::rpc_error& e) { std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API, didn't get image response." << std::endl - << msg << std::endl; + RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API, didn't get image response.\n%s", msg); } } @@ -1294,8 +1290,7 @@ void AirsimROSWrapper::lidar_timer_cb() } catch (rpc::rpc_error& e) { std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API, didn't get image response." << std::endl - << msg << std::endl; + RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API, didn't get image response.\n%s", msg); } } @@ -1315,7 +1310,7 @@ std::shared_ptr AirsimROSWrapper::get_img_msg_from_resp const std::string frame_id) { unused(curr_ros_time); - std::shared_ptr img_msg_ptr = std::make_shared(); //boost::make_shared(); + std::shared_ptr img_msg_ptr = std::make_shared(); img_msg_ptr->data = img_response.image_data_uint8; img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes img_msg_ptr->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); From f5607b12b936993eb940e005d0391e83bfe584f3 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Sun, 12 Sep 2021 12:49:55 +0300 Subject: [PATCH 085/123] - clang --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index b7cc79fcce..ecfbe44d5e 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -324,7 +324,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() template const SensorPublisher AirsimROSWrapper::create_sensor_publisher(const string& sensor_type_name, const string& sensor_name, SensorBase::SensorType sensor_type, const string& topic_name, int QoS) { - RCLCPP_INFO_STREAM(nh_->get_logger() ,sensor_type_name); + RCLCPP_INFO_STREAM(nh_->get_logger(), sensor_type_name); SensorPublisher sensor_publisher; sensor_publisher.sensor_name = sensor_name; sensor_publisher.sensor_type = sensor_type; From c50021fc1e519f25b033b73e109d3608587c8bdf Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Mon, 13 Sep 2021 11:15:41 +0300 Subject: [PATCH 086/123] - change check isENU_ --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index ecfbe44d5e..1f91b868ed 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -98,7 +98,7 @@ void AirsimROSWrapper::initialize_ros() nh_->get_parameter_or("world_frame_id", world_frame_id_, world_frame_id_); odom_frame_id_ = world_frame_id_ == AIRSIM_FRAME_ID ? AIRSIM_ODOM_FRAME_ID : ENU_ODOM_FRAME_ID; nh_->get_parameter_or("odom_frame_id", odom_frame_id_, odom_frame_id_); - isENU_ = !(odom_frame_id_ == AIRSIM_ODOM_FRAME_ID); + isENU_ = (odom_frame_id_ == ENU_ODOM_FRAME_ID); nh_->get_parameter_or("coordinate_system_enu", isENU_, isENU_); vel_cmd_duration_ = 0.05; // todo rosparam // todo enforce dynamics constraints in this node as well? From 3e665c55ed22d17c6ee14a25f1efeaf6ac932cee Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Mon, 13 Sep 2021 12:03:14 +0300 Subject: [PATCH 087/123] - move odom msg generation to unified function --- .../include/airsim_ros_wrapper.h | 3 +- .../src/airsim_ros_wrapper.cpp | 66 +++++++------------ 2 files changed, 24 insertions(+), 45 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index a2c0e6990f..8f64cad6ad 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -279,6 +279,7 @@ class AirsimROSWrapper tf2::Quaternion get_tf2_quat(const msr::airlib::Quaternionr& airlib_quat) const; msr::airlib::Quaternionr get_airlib_quat(const geometry_msgs::msg::Quaternion& geometry_msgs_quat) const; msr::airlib::Quaternionr get_airlib_quat(const tf2::Quaternion& tf2_quat) const; + nav_msgs::msg::Odometry get_odom_msg_from_kinematic_state(const msr::airlib::Kinematics::State& kinematics_estimated) const; nav_msgs::msg::Odometry get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const; nav_msgs::msg::Odometry get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const; airsim_interfaces::msg::CarState get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const; @@ -358,7 +359,7 @@ class AirsimROSWrapper std::shared_ptr tf_broadcaster_; std::shared_ptr static_tf_pub_; - bool isENU_ = false; + bool isENU_; std::shared_ptr tf_buffer_; std::shared_ptr tf_listener_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 1f91b868ed..0451cc268c 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -36,6 +36,7 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const , nh_(nh) , nh_img_(nh_img) , nh_lidar_(nh_lidar) + , isENU_(false) { ros_clock_.clock = rclcpp::Time(0); @@ -643,24 +644,24 @@ airsim_interfaces::msg::CarState AirsimROSWrapper::get_roscarstate_msg_from_car_ return state_msg; } -nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const +nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_kinematic_state(const msr::airlib::Kinematics::State& kinematics_estimated) const { nav_msgs::msg::Odometry odom_msg; - odom_msg.pose.pose.position.x = car_state.getPosition().x(); - odom_msg.pose.pose.position.y = car_state.getPosition().y(); - odom_msg.pose.pose.position.z = car_state.getPosition().z(); - odom_msg.pose.pose.orientation.x = car_state.getOrientation().x(); - odom_msg.pose.pose.orientation.y = car_state.getOrientation().y(); - odom_msg.pose.pose.orientation.z = car_state.getOrientation().z(); - odom_msg.pose.pose.orientation.w = car_state.getOrientation().w(); - - odom_msg.twist.twist.linear.x = car_state.kinematics_estimated.twist.linear.x(); - odom_msg.twist.twist.linear.y = car_state.kinematics_estimated.twist.linear.y(); - odom_msg.twist.twist.linear.z = car_state.kinematics_estimated.twist.linear.z(); - odom_msg.twist.twist.angular.x = car_state.kinematics_estimated.twist.angular.x(); - odom_msg.twist.twist.angular.y = car_state.kinematics_estimated.twist.angular.y(); - odom_msg.twist.twist.angular.z = car_state.kinematics_estimated.twist.angular.z(); + odom_msg.pose.pose.position.x = kinematics_estimated.pose.position.x(); + odom_msg.pose.pose.position.y = kinematics_estimated.pose.position.y(); + odom_msg.pose.pose.position.z = kinematics_estimated.pose.position.z(); + odom_msg.pose.pose.orientation.x = kinematics_estimated.pose.orientation.x(); + odom_msg.pose.pose.orientation.y = kinematics_estimated.pose.orientation.y(); + odom_msg.pose.pose.orientation.z = kinematics_estimated.pose.orientation.z(); + odom_msg.pose.pose.orientation.w = kinematics_estimated.pose.orientation.w(); + + odom_msg.twist.twist.linear.x = kinematics_estimated.twist.linear.x(); + odom_msg.twist.twist.linear.y = kinematics_estimated.twist.linear.y(); + odom_msg.twist.twist.linear.z = kinematics_estimated.twist.linear.z(); + odom_msg.twist.twist.angular.x = kinematics_estimated.twist.angular.x(); + odom_msg.twist.twist.angular.y = kinematics_estimated.twist.angular.y(); + odom_msg.twist.twist.angular.z = kinematics_estimated.twist.angular.z(); if (isENU_) { std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); @@ -676,37 +677,14 @@ nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_car_state(const msr: return odom_msg; } -nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const +nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const { - nav_msgs::msg::Odometry odom_msg; - - odom_msg.pose.pose.position.x = drone_state.getPosition().x(); - odom_msg.pose.pose.position.y = drone_state.getPosition().y(); - odom_msg.pose.pose.position.z = drone_state.getPosition().z(); - odom_msg.pose.pose.orientation.x = drone_state.getOrientation().x(); - odom_msg.pose.pose.orientation.y = drone_state.getOrientation().y(); - odom_msg.pose.pose.orientation.z = drone_state.getOrientation().z(); - odom_msg.pose.pose.orientation.w = drone_state.getOrientation().w(); - - odom_msg.twist.twist.linear.x = drone_state.kinematics_estimated.twist.linear.x(); - odom_msg.twist.twist.linear.y = drone_state.kinematics_estimated.twist.linear.y(); - odom_msg.twist.twist.linear.z = drone_state.kinematics_estimated.twist.linear.z(); - odom_msg.twist.twist.angular.x = drone_state.kinematics_estimated.twist.angular.x(); - odom_msg.twist.twist.angular.y = drone_state.kinematics_estimated.twist.angular.y(); - odom_msg.twist.twist.angular.z = drone_state.kinematics_estimated.twist.angular.z(); - - if (isENU_) { - std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); - odom_msg.pose.pose.position.z = -odom_msg.pose.pose.position.z; - std::swap(odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y); - odom_msg.pose.pose.orientation.z = -odom_msg.pose.pose.orientation.z; - std::swap(odom_msg.twist.twist.linear.x, odom_msg.twist.twist.linear.y); - odom_msg.twist.twist.linear.z = -odom_msg.twist.twist.linear.z; - std::swap(odom_msg.twist.twist.angular.x, odom_msg.twist.twist.angular.y); - odom_msg.twist.twist.angular.z = -odom_msg.twist.twist.angular.z; - } + return get_odom_msg_from_kinematic_state(car_state.kinematics_estimated); +} - return odom_msg; +nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const +{ + return get_odom_msg_from_kinematic_state(drone_state.kinematics_estimated); } // https://docs.ros.org/jade/api/sensor_msgs/html/point__cloud__conversion_8h_source.html#l00066 From c6c7ea17855053ef550854157dc8370913127b37 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Mon, 13 Sep 2021 12:39:19 +0300 Subject: [PATCH 088/123] - add convert_tf_msg_to_enu() to avoid code duplication --- .../include/airsim_ros_wrapper.h | 1 + .../src/airsim_ros_wrapper.cpp | 28 ++++++++----------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 8f64cad6ad..a37df45ebf 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -268,6 +268,7 @@ class AirsimROSWrapper // methods which parse setting json ang generate ros pubsubsrv void create_ros_pubs_from_settings_json(); + void convert_tf_msg_to_enu(geometry_msgs::msg::TransformStamped& tf_msg); void append_static_camera_tf(VehicleROS* vehicle_ros, const std::string& camera_name, const CameraSetting& camera_setting); void append_static_lidar_tf(VehicleROS* vehicle_ros, const std::string& lidar_name, const msr::airlib::LidarSimpleParams& lidar_setting); void append_static_vehicle_tf(VehicleROS* vehicle_ros, const VehicleSetting& vehicle_setting); diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 0451cc268c..ac8c52f12e 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -1145,6 +1145,14 @@ void AirsimROSWrapper::set_nans_to_zeros_in_pose(const VehicleSetting& vehicle_s camera_setting.rotation.roll = vehicle_setting.rotation.roll; } +void AirsimROSWrapper::convert_tf_msg_to_enu(geometry_msgs::msg::TransformStamped& tf_msg) +{ + std::swap(tf_msg.transform.translation.x, tf_msg.transform.translation.y); + std::swap(tf_msg.transform.rotation.x, tf_msg.transform.rotation.y); + tf_msg.transform.translation.z = -tf_msg.transform.translation.z; + tf_msg.transform.rotation.z = -tf_msg.transform.rotation.z; +} + void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const VehicleSetting& vehicle_setting) { geometry_msgs::msg::TransformStamped vehicle_tf_msg; @@ -1162,10 +1170,7 @@ void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const V vehicle_tf_msg.transform.rotation.w = quat.w(); if (isENU_) { - std::swap(vehicle_tf_msg.transform.translation.x, vehicle_tf_msg.transform.translation.y); - std::swap(vehicle_tf_msg.transform.rotation.x, vehicle_tf_msg.transform.rotation.y); - vehicle_tf_msg.transform.translation.z = -vehicle_tf_msg.transform.translation.z; - vehicle_tf_msg.transform.rotation.z = -vehicle_tf_msg.transform.rotation.z; + convert_tf_msg_to_enu(vehicle_tf_msg); } vehicle_ros->static_tf_msg_vec.emplace_back(vehicle_tf_msg); @@ -1185,10 +1190,7 @@ void AirsimROSWrapper::append_static_lidar_tf(VehicleROS* vehicle_ros, const std lidar_tf_msg.transform.rotation.w = lidar_setting.relative_pose.orientation.w(); if (isENU_) { - std::swap(lidar_tf_msg.transform.translation.x, lidar_tf_msg.transform.translation.y); - std::swap(lidar_tf_msg.transform.rotation.x, lidar_tf_msg.transform.rotation.y); - lidar_tf_msg.transform.translation.z = -lidar_tf_msg.transform.translation.z; - lidar_tf_msg.transform.rotation.z = -lidar_tf_msg.transform.rotation.z; + convert_tf_msg_to_enu(lidar_tf_msg); } vehicle_ros->static_tf_msg_vec.emplace_back(lidar_tf_msg); @@ -1210,10 +1212,7 @@ void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const st static_cam_tf_body_msg.transform.rotation.w = quat.w(); if (isENU_) { - std::swap(static_cam_tf_body_msg.transform.translation.x, static_cam_tf_body_msg.transform.translation.y); - std::swap(static_cam_tf_body_msg.transform.rotation.x, static_cam_tf_body_msg.transform.rotation.y); - static_cam_tf_body_msg.transform.translation.z = -static_cam_tf_body_msg.transform.translation.z; - static_cam_tf_body_msg.transform.rotation.z = -static_cam_tf_body_msg.transform.rotation.z; + convert_tf_msg_to_enu(static_cam_tf_body_msg); } geometry_msgs::msg::TransformStamped static_cam_tf_optical_msg = static_cam_tf_body_msg; @@ -1388,10 +1387,7 @@ void AirsimROSWrapper::publish_camera_tf(const ImageResponse& img_response, cons cam_tf_body_msg.transform.rotation.w = img_response.camera_orientation.w(); if (isENU_) { - std::swap(cam_tf_body_msg.transform.translation.x, cam_tf_body_msg.transform.translation.y); - std::swap(cam_tf_body_msg.transform.rotation.x, cam_tf_body_msg.transform.rotation.y); - cam_tf_body_msg.transform.translation.z = -cam_tf_body_msg.transform.translation.z; - cam_tf_body_msg.transform.rotation.z = -cam_tf_body_msg.transform.rotation.z; + convert_tf_msg_to_enu(cam_tf_body_msg); } geometry_msgs::msg::TransformStamped cam_tf_optical_msg; From a1ba52a4905228febe8c3d2f681d02e0ced7eeb7 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Wed, 20 Oct 2021 12:14:26 +0300 Subject: [PATCH 089/123] - add ROS2 dockerfile --- tools/Dockerfile-ROS2 | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tools/Dockerfile-ROS2 diff --git a/tools/Dockerfile-ROS2 b/tools/Dockerfile-ROS2 new file mode 100644 index 0000000000..fd182467fe --- /dev/null +++ b/tools/Dockerfile-ROS2 @@ -0,0 +1,20 @@ +FROM ros:foxy-ros-base + +ARG UNAME=testuser + +RUN DEBIAN_FRONTEND=noninteractive apt-get update &&\ + apt-get install -y\ + apt-utils \ + gcc-8 g++-8 \ + ros-$ROS_DISTRO-tf2-sensor-msgs ros-$ROS_DISTRO-tf2-geometry-msgs ros-$ROS_DISTRO-mavros* \ + ros-$ROS_DISTRO-vision-opencv ros-$ROS_DISTRO-image-transport \ + libyaml-cpp-dev &&\ + echo 'source /opt/ros/$ROS_DISTRO/setup.bash' >> ~/.bashrc &&\ + rm -rf /var/lib/apt/lists/* &&\ + apt-get clean &&\ + adduser --disabled-password --gecos '' $UNAME &&\ + adduser $UNAME sudo &&\ + echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + +USER $UNAME +WORKDIR /home/${UNAME} \ No newline at end of file From 80b488c420f2789ea9611cf26eeeb91497fabade Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 7 Nov 2021 18:26:22 +0200 Subject: [PATCH 090/123] - add tf2_ros/buffer.h to fix galactic build --- ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 1 + 1 file changed, 1 insertion(+) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index a37df45ebf..36c1ba0e81 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -55,6 +55,7 @@ STRICT_MODE_OFF //todo what does this do? #include #include #include +#include #include #include #include From 7cd73f0ebe11a8011c4e163ed2cf3ea109029e70 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 11:25:26 +0200 Subject: [PATCH 091/123] - cleanup --- ros2/src/airsim_interfaces/msg/VelCmd.msg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ros2/src/airsim_interfaces/msg/VelCmd.msg b/ros2/src/airsim_interfaces/msg/VelCmd.msg index 6a63100193..060f1e2873 100755 --- a/ros2/src/airsim_interfaces/msg/VelCmd.msg +++ b/ros2/src/airsim_interfaces/msg/VelCmd.msg @@ -1,2 +1 @@ -geometry_msgs/Twist twist -# string vehicle_name \ No newline at end of file +geometry_msgs/Twist twist \ No newline at end of file From c6c17b1a00dc3e1dd1a4b24c3a174f302a78f637 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 11:25:46 +0200 Subject: [PATCH 092/123] - clean commented out code --- .../include/airsim_ros_wrapper.h | 34 ++----------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 36c1ba0e81..da7420dbc1 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -4,7 +4,7 @@ STRICT_MODE_OFF //todo what does this do? #define RPCLIB_MSGPACK clmdep_msgpack #endif // !RPCLIB_MSGPACK #include "rpc/rpc_error.h" - STRICT_MODE_ON +STRICT_MODE_ON #include "airsim_settings_parser.h" #include "common/AirSimSettings.hpp" @@ -63,8 +63,8 @@ STRICT_MODE_OFF //todo what does this do? #include #include - // todo move airlib typedefs to separate header file? - typedef msr::airlib::ImageCaptureBase::ImageRequest ImageRequest; +// todo move airlib typedefs to separate header file? +typedef msr::airlib::ImageCaptureBase::ImageRequest ImageRequest; typedef msr::airlib::ImageCaptureBase::ImageResponse ImageResponse; typedef msr::airlib::ImageCaptureBase::ImageType ImageType; typedef msr::airlib::AirSimSettings::CaptureSetting CaptureSetting; @@ -92,20 +92,6 @@ struct VelCmd msr::airlib::DrivetrainType drivetrain; msr::airlib::YawMode yaw_mode; std::string vehicle_name; - - // VelCmd() : - // x(0), y(0), z(0), - // vehicle_name("") {drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - // yaw_mode = msr::airlib::YawMode();}; - - // VelCmd(const double& x, const double& y, const double& z, - // msr::airlib::DrivetrainType drivetrain, - // const msr::airlib::YawMode& yaw_mode, - // const std::string& vehicle_name) : - // x(x), y(y), z(z), - // drivetrain(drivetrain), - // yaw_mode(yaw_mode), - // vehicle_name(vehicle_name) {}; }; struct GimbalCmd @@ -113,13 +99,6 @@ struct GimbalCmd std::string vehicle_name; std::string camera_name; msr::airlib::Quaternionr target_quat; - - // GimbalCmd() : vehicle_name(vehicle_name), camera_name(camera_name), target_quat(msr::airlib::Quaternionr(1,0,0,0)) {} - - // GimbalCmd(const std::string& vehicle_name, - // const std::string& camera_name, - // const msr::airlib::Quaternionr& target_quat) : - // vehicle_name(vehicle_name), camera_name(camera_name), target_quat(target_quat) {}; }; template @@ -179,9 +158,6 @@ class AirsimROSWrapper rclcpp::Time stamp; std::string odom_frame_id; - /// Status - // bool is_armed_; - // std::string mode_; }; class CarROS : public VehicleROS @@ -202,7 +178,6 @@ class AirsimROSWrapper public: /// State msr::airlib::MultirotorState curr_drone_state; - // bool in_air_; // todo change to "status" and keep track of this rclcpp::Subscription::SharedPtr vel_cmd_body_frame_sub; rclcpp::Subscription::SharedPtr vel_cmd_world_frame_sub; @@ -212,9 +187,6 @@ class AirsimROSWrapper bool has_vel_cmd; VelCmd vel_cmd; - - /// Status - // bool in_air_; // todo change to "status" and keep track of this }; /// ROS timer callbacks From ff3bf754734cd1085014ede11bf74cdb9c1aa6c8 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 12:11:49 +0200 Subject: [PATCH 093/123] - change member variables to under_scored_with_ --- .../include/airsim_ros_wrapper.h | 46 ++--- .../src/airsim_ros_wrapper.cpp | 166 +++++++++--------- 2 files changed, 106 insertions(+), 106 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index da7420dbc1..9198d41aff 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -133,44 +133,44 @@ class AirsimROSWrapper { public: virtual ~VehicleROS() {} - std::string vehicle_name; + std::string vehicle_name_; /// All things ROS - rclcpp::Publisher::SharedPtr odom_local_pub; - rclcpp::Publisher::SharedPtr global_gps_pub; - rclcpp::Publisher::SharedPtr env_pub; - airsim_interfaces::msg::Environment env_msg; - - std::vector> barometer_pubs; - std::vector> imu_pubs; - std::vector> gps_pubs; - std::vector> magnetometer_pubs; - std::vector> distance_pubs; - std::vector> lidar_pubs; + rclcpp::Publisher::SharedPtr odom_local_pub_; + rclcpp::Publisher::SharedPtr global_gps_pub_; + rclcpp::Publisher::SharedPtr env_pub_; + airsim_interfaces::msg::Environment env_msg_; + + std::vector> barometer_pubs_; + std::vector> imu_pubs_; + std::vector> gps_pubs_; + std::vector> magnetometer_pubs_; + std::vector> distance_pubs_; + std::vector> lidar_pubs_; // handle lidar seperately for max performance as data is collected on its own thread/callback - nav_msgs::msg::Odometry curr_odom; - sensor_msgs::msg::NavSatFix gps_sensor_msg; + nav_msgs::msg::Odometry curr_odom_; + sensor_msgs::msg::NavSatFix gps_sensor_msg_; - std::vector static_tf_msg_vec; + std::vector static_tf_msg_vec_; - rclcpp::Time stamp; + rclcpp::Time stamp_; - std::string odom_frame_id; + std::string odom_frame_id_; }; class CarROS : public VehicleROS { public: - msr::airlib::CarApiBase::CarState curr_car_state; + msr::airlib::CarApiBase::CarState curr_car_state_; - rclcpp::Subscription::SharedPtr car_cmd_sub; - rclcpp::Publisher::SharedPtr car_state_pub; - airsim_interfaces::msg::CarState car_state_msg; + rclcpp::Subscription::SharedPtr car_cmd_sub_; + rclcpp::Publisher::SharedPtr car_state_pub_; + airsim_interfaces::msg::CarState car_state_msg_; - bool has_car_cmd; - msr::airlib::CarApiBase::CarControls car_cmd; + bool has_car_cmd_; + msr::airlib::CarApiBase::CarControls car_cmd_; }; class MultiRotorROS : public VehicleROS diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index ac8c52f12e..2b71dbe565 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -147,40 +147,40 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() vehicle_ros = std::unique_ptr(new CarROS()); } - vehicle_ros->odom_frame_id = curr_vehicle_name + "/" + odom_frame_id_; - vehicle_ros->vehicle_name = curr_vehicle_name; + vehicle_ros->odom_frame_id_ = curr_vehicle_name + "/" + odom_frame_id_; + vehicle_ros->vehicle_name_ = curr_vehicle_name; append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); - vehicle_ros->odom_local_pub = nh_->create_publisher("~/" + curr_vehicle_name + "/" + odom_frame_id_, 10); + vehicle_ros->odom_local_pub_ = nh_->create_publisher("~/" + curr_vehicle_name + "/" + odom_frame_id_, 10); - vehicle_ros->env_pub = nh_->create_publisher("~/" + curr_vehicle_name + "/environment", 10); + vehicle_ros->env_pub_ = nh_->create_publisher("~/" + curr_vehicle_name + "/environment", 10); - vehicle_ros->global_gps_pub = nh_->create_publisher("~/" + curr_vehicle_name + "/global_gps", 10); + vehicle_ros->global_gps_pub_ = nh_->create_publisher("~/" + curr_vehicle_name + "/global_gps", 10); if (airsim_mode_ == AIRSIM_MODE::DRONE) { auto drone = static_cast(vehicle_ros.get()); // bind to a single callback. todo optimal subs queue length // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument - std::function fcn_vel_cmd_body_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name); + std::function fcn_vel_cmd_body_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name_); drone->vel_cmd_body_frame_sub = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_body_frame", 1, fcn_vel_cmd_body_frame_sub); // todo ros::TransportHints().tcpNoDelay(); - std::function fcn_vel_cmd_world_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name); + std::function fcn_vel_cmd_world_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name_); drone->vel_cmd_world_frame_sub = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_world_frame", 1, fcn_vel_cmd_world_frame_sub); - std::function, std::shared_ptr)> fcn_takeoff_srvr = std::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name); + std::function, std::shared_ptr)> fcn_takeoff_srvr = std::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name_); drone->takeoff_srvr = nh_->create_service("~/" + curr_vehicle_name + "/takeoff", fcn_takeoff_srvr); - std::function, std::shared_ptr)> fcn_land_srvr = std::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name); + std::function, std::shared_ptr)> fcn_land_srvr = std::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name_); drone->land_srvr = nh_->create_service("~/" + curr_vehicle_name + "/land", fcn_land_srvr); // vehicle_ros.reset_srvr = nh_->create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); } else { auto car = static_cast(vehicle_ros.get()); - std::function fcn_car_cmd_sub = std::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name); - car->car_cmd_sub = nh_->create_subscription("~/" + curr_vehicle_name + "/car_cmd", 1, fcn_car_cmd_sub); - car->car_state_pub = nh_->create_publisher("~/" + curr_vehicle_name + "/car_state", 10); + std::function fcn_car_cmd_sub = std::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name_); + car->car_cmd_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/car_cmd", 1, fcn_car_cmd_sub); + car->car_state_pub_ = nh_->create_publisher("~/" + curr_vehicle_name + "/car_state", 10); } // iterate over camera map std::map .cameras; @@ -231,31 +231,31 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() case SensorBase::SensorType::Barometer: { SensorPublisher sensor_publisher = create_sensor_publisher("Barometer", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/altimeter/" + sensor_name, 10); - vehicle_ros->barometer_pubs.emplace_back(sensor_publisher); + vehicle_ros->barometer_pubs_.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Imu: { SensorPublisher sensor_publisher = create_sensor_publisher("Imu", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/imu/" + sensor_name, 10); - vehicle_ros->imu_pubs.emplace_back(sensor_publisher); + vehicle_ros->imu_pubs_.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Gps: { SensorPublisher sensor_publisher = create_sensor_publisher("Gps", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/gps/" + sensor_name, 10); - vehicle_ros->gps_pubs.emplace_back(sensor_publisher); + vehicle_ros->gps_pubs_.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Magnetometer: { SensorPublisher sensor_publisher = create_sensor_publisher("Magnetometer", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/magnetometer/" + sensor_name, 10); - vehicle_ros->magnetometer_pubs.emplace_back(sensor_publisher); + vehicle_ros->magnetometer_pubs_.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Distance: { SensorPublisher sensor_publisher = create_sensor_publisher("Distance", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/distance/" + sensor_name, 10); - vehicle_ros->distance_pubs.emplace_back(sensor_publisher); + vehicle_ros->distance_pubs_.emplace_back(sensor_publisher); break; } case SensorBase::SensorType::Lidar: { @@ -266,7 +266,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() SensorPublisher sensor_publisher = create_sensor_publisher("Lidar", sensor_setting->sensor_name, sensor_setting->sensor_type, curr_vehicle_name + "/lidar/" + sensor_name, 10); - vehicle_ros->lidar_pubs.emplace_back(sensor_publisher); + vehicle_ros->lidar_pubs_.emplace_back(sensor_publisher); lidar_cnt += 1; break; } @@ -458,15 +458,15 @@ void AirsimROSWrapper::car_cmd_cb(const airsim_interfaces::msg::CarControls::Sha std::lock_guard guard(drone_control_mutex_); auto car = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - car->car_cmd.throttle = msg->throttle; - car->car_cmd.steering = msg->steering; - car->car_cmd.brake = msg->brake; - car->car_cmd.handbrake = msg->handbrake; - car->car_cmd.is_manual_gear = msg->manual; - car->car_cmd.manual_gear = msg->manual_gear; - car->car_cmd.gear_immediate = msg->gear_immediate; - - car->has_car_cmd = true; + car->car_cmd_.throttle = msg->throttle; + car->car_cmd_.steering = msg->steering; + car->car_cmd_.brake = msg->brake; + car->car_cmd_.handbrake = msg->handbrake; + car->car_cmd_.is_manual_gear = msg->manual; + car->car_cmd_.manual_gear = msg->manual_gear; + car->car_cmd_.gear_immediate = msg->gear_immediate; + + car->has_car_cmd_ = true; } msr::airlib::Pose AirsimROSWrapper::get_airlib_pose(const float& x, const float& y, const float& z, const msr::airlib::Quaternionr& airlib_quat) const @@ -930,9 +930,9 @@ void AirsimROSWrapper::drone_state_timer_cb() void AirsimROSWrapper::update_and_publish_static_transforms(VehicleROS* vehicle_ros) { - if (vehicle_ros && !vehicle_ros->static_tf_msg_vec.empty()) { - for (auto& static_tf_msg : vehicle_ros->static_tf_msg_vec) { - static_tf_msg.header.stamp = vehicle_ros->stamp; + if (vehicle_ros && !vehicle_ros->static_tf_msg_vec_.empty()) { + for (auto& static_tf_msg : vehicle_ros->static_tf_msg_vec_) { + static_tf_msg.header.stamp = vehicle_ros->stamp_; static_tf_pub_->sendTransform(static_tf_msg); } } @@ -954,12 +954,12 @@ rclcpp::Time AirsimROSWrapper::update_state() auto& vehicle_ros = vehicle_name_ptr_pair.second; // vehicle environment, we can get ambient temperature here and other truths - auto env_data = airsim_client_->simGetGroundTruthEnvironment(vehicle_ros->vehicle_name); + auto env_data = airsim_client_->simGetGroundTruthEnvironment(vehicle_ros->vehicle_name_); if (airsim_mode_ == AIRSIM_MODE::DRONE) { auto drone = static_cast(vehicle_ros.get()); auto rpc = static_cast(airsim_client_.get()); - drone->curr_drone_state = rpc->getMultirotorState(vehicle_ros->vehicle_name); + drone->curr_drone_state = rpc->getMultirotorState(vehicle_ros->vehicle_name_); vehicle_time = airsim_timestamp_to_ros(drone->curr_drone_state.timestamp); if (!got_sim_time) { @@ -967,43 +967,43 @@ rclcpp::Time AirsimROSWrapper::update_state() got_sim_time = true; } - vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(drone->curr_drone_state.gps_location); - vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; + vehicle_ros->gps_sensor_msg_ = get_gps_sensor_msg_from_airsim_geo_point(drone->curr_drone_state.gps_location); + vehicle_ros->gps_sensor_msg_.header.stamp = vehicle_time; - vehicle_ros->curr_odom = get_odom_msg_from_multirotor_state(drone->curr_drone_state); + vehicle_ros->curr_odom_ = get_odom_msg_from_multirotor_state(drone->curr_drone_state); } else { auto car = static_cast(vehicle_ros.get()); auto rpc = static_cast(airsim_client_.get()); - car->curr_car_state = rpc->getCarState(vehicle_ros->vehicle_name); + car->curr_car_state_ = rpc->getCarState(vehicle_ros->vehicle_name_); - vehicle_time = airsim_timestamp_to_ros(car->curr_car_state.timestamp); + vehicle_time = airsim_timestamp_to_ros(car->curr_car_state_.timestamp); if (!got_sim_time) { curr_ros_time = vehicle_time; got_sim_time = true; } - vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(env_data.geo_point); - vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; + vehicle_ros->gps_sensor_msg_ = get_gps_sensor_msg_from_airsim_geo_point(env_data.geo_point); + vehicle_ros->gps_sensor_msg_.header.stamp = vehicle_time; - vehicle_ros->curr_odom = get_odom_msg_from_car_state(car->curr_car_state); + vehicle_ros->curr_odom_ = get_odom_msg_from_car_state(car->curr_car_state_); - airsim_interfaces::msg::CarState state_msg = get_roscarstate_msg_from_car_state(car->curr_car_state); - state_msg.header.frame_id = vehicle_ros->vehicle_name; - car->car_state_msg = state_msg; + airsim_interfaces::msg::CarState state_msg = get_roscarstate_msg_from_car_state(car->curr_car_state_); + state_msg.header.frame_id = vehicle_ros->vehicle_name_; + car->car_state_msg_ = state_msg; } - vehicle_ros->stamp = vehicle_time; + vehicle_ros->stamp_ = vehicle_time; airsim_interfaces::msg::Environment env_msg = get_environment_msg_from_airsim(env_data); - env_msg.header.frame_id = vehicle_ros->vehicle_name; + env_msg.header.frame_id = vehicle_ros->vehicle_name_; env_msg.header.stamp = vehicle_time; - vehicle_ros->env_msg = env_msg; + vehicle_ros->env_msg_ = env_msg; // convert airsim drone state to ROS msgs - vehicle_ros->curr_odom.header.frame_id = vehicle_ros->vehicle_name; - vehicle_ros->curr_odom.child_frame_id = vehicle_ros->odom_frame_id; - vehicle_ros->curr_odom.header.stamp = vehicle_time; + vehicle_ros->curr_odom_.header.frame_id = vehicle_ros->vehicle_name_; + vehicle_ros->curr_odom_.child_frame_id = vehicle_ros->odom_frame_id_; + vehicle_ros->curr_odom_.header.stamp = vehicle_time; } return curr_ros_time; @@ -1015,50 +1015,50 @@ void AirsimROSWrapper::publish_vehicle_state() auto& vehicle_ros = vehicle_name_ptr_pair.second; // simulation environment truth - vehicle_ros->env_pub->publish(vehicle_ros->env_msg); + vehicle_ros->env_pub_->publish(vehicle_ros->env_msg_); if (airsim_mode_ == AIRSIM_MODE::CAR) { // dashboard reading from car, RPM, gear, etc auto car = static_cast(vehicle_ros.get()); - car->car_state_pub->publish(car->car_state_msg); + car->car_state_pub_->publish(car->car_state_msg_); } // odom and transforms - vehicle_ros->odom_local_pub->publish(vehicle_ros->curr_odom); - publish_odom_tf(vehicle_ros->curr_odom); + vehicle_ros->odom_local_pub_->publish(vehicle_ros->curr_odom_); + publish_odom_tf(vehicle_ros->curr_odom_); // ground truth GPS position from sim/HITL - vehicle_ros->global_gps_pub->publish(vehicle_ros->gps_sensor_msg); + vehicle_ros->global_gps_pub_->publish(vehicle_ros->gps_sensor_msg_); - for (auto& sensor_publisher : vehicle_ros->barometer_pubs) { - auto baro_data = airsim_client_->getBarometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + for (auto& sensor_publisher : vehicle_ros->barometer_pubs_) { + auto baro_data = airsim_client_->getBarometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name_); airsim_interfaces::msg::Altimeter alt_msg = get_altimeter_msg_from_airsim(baro_data); - alt_msg.header.frame_id = vehicle_ros->vehicle_name; + alt_msg.header.frame_id = vehicle_ros->vehicle_name_; sensor_publisher.publisher->publish(alt_msg); } - for (auto& sensor_publisher : vehicle_ros->imu_pubs) { - auto imu_data = airsim_client_->getImuData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + for (auto& sensor_publisher : vehicle_ros->imu_pubs_) { + auto imu_data = airsim_client_->getImuData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name_); sensor_msgs::msg::Imu imu_msg = get_imu_msg_from_airsim(imu_data); - imu_msg.header.frame_id = vehicle_ros->vehicle_name; + imu_msg.header.frame_id = vehicle_ros->vehicle_name_; sensor_publisher.publisher->publish(imu_msg); } - for (auto& sensor_publisher : vehicle_ros->distance_pubs) { - auto distance_data = airsim_client_->getDistanceSensorData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + for (auto& sensor_publisher : vehicle_ros->distance_pubs_) { + auto distance_data = airsim_client_->getDistanceSensorData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name_); sensor_msgs::msg::Range dist_msg = get_range_from_airsim(distance_data); - dist_msg.header.frame_id = vehicle_ros->vehicle_name; + dist_msg.header.frame_id = vehicle_ros->vehicle_name_; sensor_publisher.publisher->publish(dist_msg); } - for (auto& sensor_publisher : vehicle_ros->gps_pubs) { - auto gps_data = airsim_client_->getGpsData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + for (auto& sensor_publisher : vehicle_ros->gps_pubs_) { + auto gps_data = airsim_client_->getGpsData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name_); sensor_msgs::msg::NavSatFix gps_msg = get_gps_msg_from_airsim(gps_data); - gps_msg.header.frame_id = vehicle_ros->vehicle_name; + gps_msg.header.frame_id = vehicle_ros->vehicle_name_; sensor_publisher.publisher->publish(gps_msg); } - for (auto& sensor_publisher : vehicle_ros->magnetometer_pubs) { - auto mag_data = airsim_client_->getMagnetometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + for (auto& sensor_publisher : vehicle_ros->magnetometer_pubs_) { + auto mag_data = airsim_client_->getMagnetometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name_); sensor_msgs::msg::MagneticField mag_msg = get_mag_msg_from_airsim(mag_data); - mag_msg.header.frame_id = vehicle_ros->vehicle_name; + mag_msg.header.frame_id = vehicle_ros->vehicle_name_; sensor_publisher.publisher->publish(mag_msg); } @@ -1077,18 +1077,18 @@ void AirsimROSWrapper::update_commands() // send control commands from the last callback to airsim if (drone->has_vel_cmd) { std::lock_guard guard(drone_control_mutex_); - static_cast(airsim_client_.get())->moveByVelocityAsync(drone->vel_cmd.x, drone->vel_cmd.y, drone->vel_cmd.z, vel_cmd_duration_, msr::airlib::DrivetrainType::MaxDegreeOfFreedom, drone->vel_cmd.yaw_mode, drone->vehicle_name); + static_cast(airsim_client_.get())->moveByVelocityAsync(drone->vel_cmd.x, drone->vel_cmd.y, drone->vel_cmd.z, vel_cmd_duration_, msr::airlib::DrivetrainType::MaxDegreeOfFreedom, drone->vel_cmd.yaw_mode, drone->vehicle_name_); } drone->has_vel_cmd = false; } else { // send control commands from the last callback to airsim auto car = static_cast(vehicle_ros.get()); - if (car->has_car_cmd) { + if (car->has_car_cmd_) { std::lock_guard guard(drone_control_mutex_); - static_cast(airsim_client_.get())->setCarControls(car->car_cmd, vehicle_ros->vehicle_name); + static_cast(airsim_client_.get())->setCarControls(car->car_cmd_, vehicle_ros->vehicle_name_); } - car->has_car_cmd = false; + car->has_car_cmd_ = false; } } @@ -1158,7 +1158,7 @@ void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const V geometry_msgs::msg::TransformStamped vehicle_tf_msg; vehicle_tf_msg.header.frame_id = world_frame_id_; vehicle_tf_msg.header.stamp = nh_->now(); - vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name; + vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name_; vehicle_tf_msg.transform.translation.x = vehicle_setting.position.x(); vehicle_tf_msg.transform.translation.y = vehicle_setting.position.y(); vehicle_tf_msg.transform.translation.z = vehicle_setting.position.z(); @@ -1173,14 +1173,14 @@ void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const V convert_tf_msg_to_enu(vehicle_tf_msg); } - vehicle_ros->static_tf_msg_vec.emplace_back(vehicle_tf_msg); + vehicle_ros->static_tf_msg_vec_.emplace_back(vehicle_tf_msg); } void AirsimROSWrapper::append_static_lidar_tf(VehicleROS* vehicle_ros, const std::string& lidar_name, const msr::airlib::LidarSimpleParams& lidar_setting) { geometry_msgs::msg::TransformStamped lidar_tf_msg; - lidar_tf_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; - lidar_tf_msg.child_frame_id = vehicle_ros->vehicle_name + "/" + lidar_name; + lidar_tf_msg.header.frame_id = vehicle_ros->vehicle_name_ + "/" + odom_frame_id_; + lidar_tf_msg.child_frame_id = vehicle_ros->vehicle_name_ + "/" + lidar_name; lidar_tf_msg.transform.translation.x = lidar_setting.relative_pose.position.x(); lidar_tf_msg.transform.translation.y = lidar_setting.relative_pose.position.y(); lidar_tf_msg.transform.translation.z = lidar_setting.relative_pose.position.z(); @@ -1193,13 +1193,13 @@ void AirsimROSWrapper::append_static_lidar_tf(VehicleROS* vehicle_ros, const std convert_tf_msg_to_enu(lidar_tf_msg); } - vehicle_ros->static_tf_msg_vec.emplace_back(lidar_tf_msg); + vehicle_ros->static_tf_msg_vec_.emplace_back(lidar_tf_msg); } void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const std::string& camera_name, const CameraSetting& camera_setting) { geometry_msgs::msg::TransformStamped static_cam_tf_body_msg; - static_cam_tf_body_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; + static_cam_tf_body_msg.header.frame_id = vehicle_ros->vehicle_name_ + "/" + odom_frame_id_; static_cam_tf_body_msg.child_frame_id = camera_name + "_body/static"; static_cam_tf_body_msg.transform.translation.x = camera_setting.position.x(); static_cam_tf_body_msg.transform.translation.y = camera_setting.position.y(); @@ -1228,8 +1228,8 @@ void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const st quat_cam_optical.normalize(); tf2::convert(quat_cam_optical, static_cam_tf_optical_msg.transform.rotation); - vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_body_msg); - vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_optical_msg); + vehicle_ros->static_tf_msg_vec_.emplace_back(static_cam_tf_body_msg); + vehicle_ros->static_tf_msg_vec_.emplace_back(static_cam_tf_optical_msg); } void AirsimROSWrapper::img_response_timer_cb() @@ -1256,8 +1256,8 @@ void AirsimROSWrapper::lidar_timer_cb() { try { for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - if (!vehicle_name_ptr_pair.second->lidar_pubs.empty()) { - for (auto& lidar_publisher : vehicle_name_ptr_pair.second->lidar_pubs) { + if (!vehicle_name_ptr_pair.second->lidar_pubs_.empty()) { + for (auto& lidar_publisher : vehicle_name_ptr_pair.second->lidar_pubs_) { auto lidar_data = airsim_client_lidar_.getLidarData(lidar_publisher.sensor_name, vehicle_name_ptr_pair.first); sensor_msgs::msg::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first); lidar_publisher.publisher->publish(lidar_msg); From 3f5ea2dfb29662edfe5296820dd233ef271929a3 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 12:15:42 +0200 Subject: [PATCH 094/123] - change member variables to under_scored_with_ --- .../include/airsim_ros_wrapper.h | 14 +-- .../src/airsim_ros_wrapper.cpp | 112 +++++++++--------- 2 files changed, 63 insertions(+), 63 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 9198d41aff..d6417b647e 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -177,16 +177,16 @@ class AirsimROSWrapper { public: /// State - msr::airlib::MultirotorState curr_drone_state; + msr::airlib::MultirotorState curr_drone_state_; - rclcpp::Subscription::SharedPtr vel_cmd_body_frame_sub; - rclcpp::Subscription::SharedPtr vel_cmd_world_frame_sub; + rclcpp::Subscription::SharedPtr vel_cmd_body_frame_sub_; + rclcpp::Subscription::SharedPtr vel_cmd_world_frame_sub_; - rclcpp::Service::SharedPtr takeoff_srvr; - rclcpp::Service::SharedPtr land_srvr; + rclcpp::Service::SharedPtr takeoff_srvr_; + rclcpp::Service::SharedPtr land_srvr_; - bool has_vel_cmd; - VelCmd vel_cmd; + bool has_vel_cmd_; + VelCmd vel_cmd_; }; /// ROS timer callbacks diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 2b71dbe565..de78e5abd2 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -164,16 +164,16 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // bind to a single callback. todo optimal subs queue length // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument std::function fcn_vel_cmd_body_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name_); - drone->vel_cmd_body_frame_sub = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_body_frame", 1, fcn_vel_cmd_body_frame_sub); // todo ros::TransportHints().tcpNoDelay(); + drone->vel_cmd_body_frame_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_body_frame", 1, fcn_vel_cmd_body_frame_sub); // todo ros::TransportHints().tcpNoDelay(); std::function fcn_vel_cmd_world_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name_); - drone->vel_cmd_world_frame_sub = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_world_frame", 1, fcn_vel_cmd_world_frame_sub); + drone->vel_cmd_world_frame_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_world_frame", 1, fcn_vel_cmd_world_frame_sub); std::function, std::shared_ptr)> fcn_takeoff_srvr = std::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name_); - drone->takeoff_srvr = nh_->create_service("~/" + curr_vehicle_name + "/takeoff", fcn_takeoff_srvr); + drone->takeoff_srvr_ = nh_->create_service("~/" + curr_vehicle_name + "/takeoff", fcn_takeoff_srvr); std::function, std::shared_ptr)> fcn_land_srvr = std::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name_); - drone->land_srvr = nh_->create_service("~/" + curr_vehicle_name + "/land", fcn_land_srvr); + drone->land_srvr_ = nh_->create_service("~/" + curr_vehicle_name + "/land", fcn_land_srvr); // vehicle_ros.reset_srvr = nh_->create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); } else { @@ -481,17 +481,17 @@ void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCm auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state_.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw // todo do actual body frame? - drone->vel_cmd.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd.z = msg->twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd_.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd_.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd_.z = msg->twist.linear.z; + drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd_.yaw_mode.is_rate = true; // airsim uses degrees - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); - drone->has_vel_cmd = true; + drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd_ = true; } void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg::VelCmdGroup::SharedPtr msg) @@ -502,17 +502,17 @@ void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg: auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state_.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw // todo do actual body frame? - drone->vel_cmd.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd.z = msg->twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd_.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd_.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd_.z = msg->twist.linear.z; + drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd_.yaw_mode.is_rate = true; // airsim uses degrees - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); - drone->has_vel_cmd = true; + drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd_ = true; } } @@ -525,17 +525,17 @@ void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::V auto drone = static_cast(vehicle_name_ptr_pair.second.get()); double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state_.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw // todo do actual body frame? - drone->vel_cmd.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd.z = msg->twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd_.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd_.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd_.z = msg->twist.linear.z; + drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd_.yaw_mode.is_rate = true; // airsim uses degrees - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); - drone->has_vel_cmd = true; + drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd_ = true; } } @@ -545,13 +545,13 @@ void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelC auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - drone->vel_cmd.x = msg->twist.linear.x; - drone->vel_cmd.y = msg->twist.linear.y; - drone->vel_cmd.z = msg->twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); - drone->has_vel_cmd = true; + drone->vel_cmd_.x = msg->twist.linear.x; + drone->vel_cmd_.y = msg->twist.linear.y; + drone->vel_cmd_.z = msg->twist.linear.z; + drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd_.yaw_mode.is_rate = true; + drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd_ = true; } // this is kinda unnecessary but maybe it makes life easier for the end user. @@ -562,13 +562,13 @@ void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_interfaces::msg for (const auto& vehicle_name : msg->vehicle_names) { auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - drone->vel_cmd.x = msg->twist.linear.x; - drone->vel_cmd.y = msg->twist.linear.y; - drone->vel_cmd.z = msg->twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); - drone->has_vel_cmd = true; + drone->vel_cmd_.x = msg->twist.linear.x; + drone->vel_cmd_.y = msg->twist.linear.y; + drone->vel_cmd_.z = msg->twist.linear.z; + drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd_.yaw_mode.is_rate = true; + drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd_ = true; } } @@ -580,13 +580,13 @@ void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_interfaces::msg:: for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { auto drone = static_cast(vehicle_name_ptr_pair.second.get()); - drone->vel_cmd.x = msg->twist.linear.x; - drone->vel_cmd.y = msg->twist.linear.y; - drone->vel_cmd.z = msg->twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); - drone->has_vel_cmd = true; + drone->vel_cmd_.x = msg->twist.linear.x; + drone->vel_cmd_.y = msg->twist.linear.y; + drone->vel_cmd_.z = msg->twist.linear.z; + drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd_.yaw_mode.is_rate = true; + drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd_ = true; } } @@ -959,18 +959,18 @@ rclcpp::Time AirsimROSWrapper::update_state() if (airsim_mode_ == AIRSIM_MODE::DRONE) { auto drone = static_cast(vehicle_ros.get()); auto rpc = static_cast(airsim_client_.get()); - drone->curr_drone_state = rpc->getMultirotorState(vehicle_ros->vehicle_name_); + drone->curr_drone_state_ = rpc->getMultirotorState(vehicle_ros->vehicle_name_); - vehicle_time = airsim_timestamp_to_ros(drone->curr_drone_state.timestamp); + vehicle_time = airsim_timestamp_to_ros(drone->curr_drone_state_.timestamp); if (!got_sim_time) { curr_ros_time = vehicle_time; got_sim_time = true; } - vehicle_ros->gps_sensor_msg_ = get_gps_sensor_msg_from_airsim_geo_point(drone->curr_drone_state.gps_location); + vehicle_ros->gps_sensor_msg_ = get_gps_sensor_msg_from_airsim_geo_point(drone->curr_drone_state_.gps_location); vehicle_ros->gps_sensor_msg_.header.stamp = vehicle_time; - vehicle_ros->curr_odom_ = get_odom_msg_from_multirotor_state(drone->curr_drone_state); + vehicle_ros->curr_odom_ = get_odom_msg_from_multirotor_state(drone->curr_drone_state_); } else { auto car = static_cast(vehicle_ros.get()); @@ -1075,11 +1075,11 @@ void AirsimROSWrapper::update_commands() auto drone = static_cast(vehicle_ros.get()); // send control commands from the last callback to airsim - if (drone->has_vel_cmd) { + if (drone->has_vel_cmd_) { std::lock_guard guard(drone_control_mutex_); - static_cast(airsim_client_.get())->moveByVelocityAsync(drone->vel_cmd.x, drone->vel_cmd.y, drone->vel_cmd.z, vel_cmd_duration_, msr::airlib::DrivetrainType::MaxDegreeOfFreedom, drone->vel_cmd.yaw_mode, drone->vehicle_name_); + static_cast(airsim_client_.get())->moveByVelocityAsync(drone->vel_cmd_.x, drone->vel_cmd_.y, drone->vel_cmd_.z, vel_cmd_duration_, msr::airlib::DrivetrainType::MaxDegreeOfFreedom, drone->vel_cmd_.yaw_mode, drone->vehicle_name_); } - drone->has_vel_cmd = false; + drone->has_vel_cmd_ = false; } else { // send control commands from the last callback to airsim From a43d29968d0f33a3e7b2efa7af24e8b9440dd71c Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 12:18:42 +0200 Subject: [PATCH 095/123] - move publish_clock_ init to ctor --- ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 2 +- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index d6417b647e..4cb14270b5 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -355,7 +355,7 @@ class AirsimROSWrapper /// ROS other publishers rclcpp::Publisher::SharedPtr clock_pub_; rosgraph_msgs::msg::Clock ros_clock_; - bool publish_clock_ = false; + bool publish_clock_; rclcpp::Subscription::SharedPtr gimbal_angle_quat_cmd_sub_; rclcpp::Subscription::SharedPtr gimbal_angle_euler_cmd_sub_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index de78e5abd2..9b57c2bc12 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -37,6 +37,7 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const , nh_img_(nh_img) , nh_lidar_(nh_lidar) , isENU_(false) + , publish_clock_(false) { ros_clock_.clock = rclcpp::Time(0); From 52e79aa9f14520dab03cbcae4c15735cdca5ddb8 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 12:21:00 +0200 Subject: [PATCH 096/123] - cleanup --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 9b57c2bc12..77fb0f4c8b 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -1,6 +1,4 @@ #include -// #include -// PLUGINLIB_EXPORT_CLASS(AirsimROSWrapper, nodelet::Nodelet) #include "common/AirSimSettings.hpp" #include From 819ed8842a1457e5a4c52804e17e36da70edc16d Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 12:26:06 +0200 Subject: [PATCH 097/123] - remove ros1 launch files --- .../airsim_ros_pkgs/launch/airsim_all.launch | 9 ------- .../launch/airsim_car_with_joy_control.launch | 25 ----------------- .../airsim_car_with_joy_control_auto.launch | 27 ------------------- 3 files changed, 61 deletions(-) delete mode 100755 ros2/src/airsim_ros_pkgs/launch/airsim_all.launch delete mode 100755 ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control.launch delete mode 100755 ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control_auto.launch diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_all.launch b/ros2/src/airsim_ros_pkgs/launch/airsim_all.launch deleted file mode 100755 index 2345de5b74..0000000000 --- a/ros2/src/airsim_ros_pkgs/launch/airsim_all.launch +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control.launch b/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control.launch deleted file mode 100755 index 1b5a58a348..0000000000 --- a/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control.launch +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control_auto.launch b/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control_auto.launch deleted file mode 100755 index 385159fcaf..0000000000 --- a/ros2/src/airsim_ros_pkgs/launch/airsim_car_with_joy_control_auto.launch +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 27c33149b4a6f4566e208cd3fe0ba61c3785b4fb Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 12:54:19 +0200 Subject: [PATCH 098/123] - apply clang --- ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 4cb14270b5..5f9b78c455 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -4,7 +4,7 @@ STRICT_MODE_OFF //todo what does this do? #define RPCLIB_MSGPACK clmdep_msgpack #endif // !RPCLIB_MSGPACK #include "rpc/rpc_error.h" -STRICT_MODE_ON + STRICT_MODE_ON #include "airsim_settings_parser.h" #include "common/AirSimSettings.hpp" @@ -63,8 +63,8 @@ STRICT_MODE_ON #include #include -// todo move airlib typedefs to separate header file? -typedef msr::airlib::ImageCaptureBase::ImageRequest ImageRequest; + // todo move airlib typedefs to separate header file? + typedef msr::airlib::ImageCaptureBase::ImageRequest ImageRequest; typedef msr::airlib::ImageCaptureBase::ImageResponse ImageResponse; typedef msr::airlib::ImageCaptureBase::ImageType ImageType; typedef msr::airlib::AirSimSettings::CaptureSetting CaptureSetting; From 3e99415902f99b78a3a4a6d86bec1b596de57ca8 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 13:42:27 +0200 Subject: [PATCH 099/123] - get GeoPoint directly from AirSimSettings --- ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 1 + ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 5f9b78c455..93cd6c8157 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -267,6 +267,7 @@ class AirsimROSWrapper sensor_msgs::msg::NavSatFix get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const; sensor_msgs::msg::MagneticField get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const; airsim_interfaces::msg::Environment get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const; + msr::airlib::GeoPoint get_origin_geo_point() const; // not used anymore, but can be useful in future with an unreal camera calibration environment void read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::msg::CameraInfo& cam_info) const; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 77fb0f4c8b..c4e1cccb76 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -77,7 +77,7 @@ void AirsimROSWrapper::initialize_airsim() airsim_client_->armDisarm(true, vehicle_name_ptr_pair.first); // todo exposes as rosservice? } - origin_geo_point_ = airsim_client_->getHomeGeoPoint(""); + origin_geo_point_ = get_origin_geo_point(); // todo there's only one global origin geopoint for environment. but airsim API accept a parameter vehicle_name? inside carsimpawnapi.cpp, there's a geopoint being assigned in the constructor. by? origin_geo_point_msg_ = get_gps_msg_from_airsim_geo_point(origin_geo_point_); } @@ -879,6 +879,12 @@ sensor_msgs::msg::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo return gps_msg; } +msr::airlib::GeoPoint AirsimROSWrapper::get_origin_geo_point() const +{ + HomeGeoPoint geo_point = AirSimSettings::singleton().origin_geopoint; + return geo_point.home_geo_point; +} + rclcpp::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const { From 4bceece1b67549d2ad0abd3581900370b98315da Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 13:48:52 +0200 Subject: [PATCH 100/123] - add more details about QoS --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index c4e1cccb76..e62b605bdb 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -321,6 +321,8 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() initialize_airsim(); } +// QoS - The depth of the publisher message queue. +// more details here - https://docs.ros.org/en/foxy/Concepts/About-Quality-of-Service-Settings.html template const SensorPublisher AirsimROSWrapper::create_sensor_publisher(const string& sensor_type_name, const string& sensor_name, SensorBase::SensorType sensor_type, const string& topic_name, int QoS) { From 26096b5a97ac2c7043e6c25905f878ea19a7ad4e Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 13:55:39 +0200 Subject: [PATCH 101/123] - rename member drone_control_mutex_ to control_mutex_ --- .../include/airsim_ros_wrapper.h | 2 +- .../src/airsim_ros_wrapper.cpp | 34 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 93cd6c8157..b583b30473 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -319,7 +319,7 @@ class AirsimROSWrapper // todo not sure if async spinners shuold be inside this class, or should be instantiated in airsim_node.cpp, and cb queues should be public // todo for multiple drones with multiple sensors, this won't scale. make it a part of VehicleROS? - std::mutex drone_control_mutex_; + std::mutex control_mutex_ ; // gimbal control bool has_gimbal_cmd_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index e62b605bdb..e267b6da26 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -338,7 +338,7 @@ const SensorPublisher AirsimROSWrapper::create_sensor_publisher(const string& bool AirsimROSWrapper::takeoff_srv_cb(std::shared_ptr request, std::shared_ptr response, const std::string& vehicle_name) { unused(response); - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); if (request->wait_on_last_task) static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? @@ -353,7 +353,7 @@ bool AirsimROSWrapper::takeoff_srv_cb(std::shared_ptr request, std::shared_ptr response) { unused(response); - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); if (request->wait_on_last_task) for (const auto& vehicle_name : request->vehicle_names) @@ -370,7 +370,7 @@ bool AirsimROSWrapper::takeoff_group_srv_cb(std::shared_ptr request, std::shared_ptr response) { unused(response); - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); if (request->wait_on_last_task) for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) @@ -387,7 +387,7 @@ bool AirsimROSWrapper::takeoff_all_srv_cb(std::shared_ptr request, std::shared_ptr response, const std::string& vehicle_name) { unused(response); - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); if (request->wait_on_last_task) static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); @@ -400,7 +400,7 @@ bool AirsimROSWrapper::land_srv_cb(std::shared_ptr request, std::shared_ptr response) { unused(response); - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); if (request->wait_on_last_task) for (const auto& vehicle_name : request->vehicle_names) @@ -415,7 +415,7 @@ bool AirsimROSWrapper::land_group_srv_cb(std::shared_ptr request, std::shared_ptr response) { unused(response); - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); if (request->wait_on_last_task) for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) @@ -433,7 +433,7 @@ bool AirsimROSWrapper::reset_srv_cb(std::shared_ptr guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); airsim_client_.reset(); return true; //todo @@ -456,7 +456,7 @@ msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const tf2::Quaternion void AirsimROSWrapper::car_cmd_cb(const airsim_interfaces::msg::CarControls::SharedPtr msg, const std::string& vehicle_name) { - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); auto car = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); car->car_cmd_.throttle = msg->throttle; @@ -477,7 +477,7 @@ msr::airlib::Pose AirsimROSWrapper::get_airlib_pose(const float& x, const float& void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg, const std::string& vehicle_name) { - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); @@ -497,7 +497,7 @@ void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCm void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg::VelCmdGroup::SharedPtr msg) { - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); for (const auto& vehicle_name : msg->vehicle_names) { auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); @@ -519,7 +519,7 @@ void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg: void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg) { - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); // todo expose wait_on_last_task or nah? for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { @@ -542,7 +542,7 @@ void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::V void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg, const std::string& vehicle_name) { - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); @@ -558,7 +558,7 @@ void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelC // this is kinda unnecessary but maybe it makes life easier for the end user. void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_interfaces::msg::VelCmdGroup::SharedPtr msg) { - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); for (const auto& vehicle_name : msg->vehicle_names) { auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); @@ -575,7 +575,7 @@ void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_interfaces::msg void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg) { - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); // todo expose wait_on_last_task or nah? for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { @@ -1083,7 +1083,7 @@ void AirsimROSWrapper::update_commands() // send control commands from the last callback to airsim if (drone->has_vel_cmd_) { - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); static_cast(airsim_client_.get())->moveByVelocityAsync(drone->vel_cmd_.x, drone->vel_cmd_.y, drone->vel_cmd_.z, vel_cmd_duration_, msr::airlib::DrivetrainType::MaxDegreeOfFreedom, drone->vel_cmd_.yaw_mode, drone->vehicle_name_); } drone->has_vel_cmd_ = false; @@ -1092,7 +1092,7 @@ void AirsimROSWrapper::update_commands() // send control commands from the last callback to airsim auto car = static_cast(vehicle_ros.get()); if (car->has_car_cmd_) { - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); static_cast(airsim_client_.get())->setCarControls(car->car_cmd_, vehicle_ros->vehicle_name_); } car->has_car_cmd_ = false; @@ -1101,7 +1101,7 @@ void AirsimROSWrapper::update_commands() // Only camera rotation, no translation movement of camera if (has_gimbal_cmd_) { - std::lock_guard guard(drone_control_mutex_); + std::lock_guard guard(control_mutex_ ); airsim_client_->simSetCameraPose(gimbal_cmd_.camera_name, get_airlib_pose(0, 0, 0, gimbal_cmd_.target_quat), gimbal_cmd_.vehicle_name); } From 87d3eaf7266bd56258b46a49c81fb0afd32a7b0e Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 13:57:35 +0200 Subject: [PATCH 102/123] - apply clang --- .../include/airsim_ros_wrapper.h | 2 +- .../src/airsim_ros_wrapper.cpp | 34 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index b583b30473..f27f45c00a 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -319,7 +319,7 @@ class AirsimROSWrapper // todo not sure if async spinners shuold be inside this class, or should be instantiated in airsim_node.cpp, and cb queues should be public // todo for multiple drones with multiple sensors, this won't scale. make it a part of VehicleROS? - std::mutex control_mutex_ ; + std::mutex control_mutex_; // gimbal control bool has_gimbal_cmd_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index e267b6da26..f5045b7779 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -338,7 +338,7 @@ const SensorPublisher AirsimROSWrapper::create_sensor_publisher(const string& bool AirsimROSWrapper::takeoff_srv_cb(std::shared_ptr request, std::shared_ptr response, const std::string& vehicle_name) { unused(response); - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); if (request->wait_on_last_task) static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? @@ -353,7 +353,7 @@ bool AirsimROSWrapper::takeoff_srv_cb(std::shared_ptr request, std::shared_ptr response) { unused(response); - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); if (request->wait_on_last_task) for (const auto& vehicle_name : request->vehicle_names) @@ -370,7 +370,7 @@ bool AirsimROSWrapper::takeoff_group_srv_cb(std::shared_ptr request, std::shared_ptr response) { unused(response); - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); if (request->wait_on_last_task) for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) @@ -387,7 +387,7 @@ bool AirsimROSWrapper::takeoff_all_srv_cb(std::shared_ptr request, std::shared_ptr response, const std::string& vehicle_name) { unused(response); - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); if (request->wait_on_last_task) static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); @@ -400,7 +400,7 @@ bool AirsimROSWrapper::land_srv_cb(std::shared_ptr request, std::shared_ptr response) { unused(response); - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); if (request->wait_on_last_task) for (const auto& vehicle_name : request->vehicle_names) @@ -415,7 +415,7 @@ bool AirsimROSWrapper::land_group_srv_cb(std::shared_ptr request, std::shared_ptr response) { unused(response); - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); if (request->wait_on_last_task) for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) @@ -433,7 +433,7 @@ bool AirsimROSWrapper::reset_srv_cb(std::shared_ptr guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); airsim_client_.reset(); return true; //todo @@ -456,7 +456,7 @@ msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const tf2::Quaternion void AirsimROSWrapper::car_cmd_cb(const airsim_interfaces::msg::CarControls::SharedPtr msg, const std::string& vehicle_name) { - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); auto car = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); car->car_cmd_.throttle = msg->throttle; @@ -477,7 +477,7 @@ msr::airlib::Pose AirsimROSWrapper::get_airlib_pose(const float& x, const float& void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg, const std::string& vehicle_name) { - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); @@ -497,7 +497,7 @@ void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCm void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg::VelCmdGroup::SharedPtr msg) { - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); for (const auto& vehicle_name : msg->vehicle_names) { auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); @@ -519,7 +519,7 @@ void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg: void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg) { - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); // todo expose wait_on_last_task or nah? for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { @@ -542,7 +542,7 @@ void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::V void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg, const std::string& vehicle_name) { - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); @@ -558,7 +558,7 @@ void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelC // this is kinda unnecessary but maybe it makes life easier for the end user. void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_interfaces::msg::VelCmdGroup::SharedPtr msg) { - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); for (const auto& vehicle_name : msg->vehicle_names) { auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); @@ -575,7 +575,7 @@ void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_interfaces::msg void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_interfaces::msg::VelCmd::SharedPtr msg) { - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); // todo expose wait_on_last_task or nah? for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { @@ -1083,7 +1083,7 @@ void AirsimROSWrapper::update_commands() // send control commands from the last callback to airsim if (drone->has_vel_cmd_) { - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); static_cast(airsim_client_.get())->moveByVelocityAsync(drone->vel_cmd_.x, drone->vel_cmd_.y, drone->vel_cmd_.z, vel_cmd_duration_, msr::airlib::DrivetrainType::MaxDegreeOfFreedom, drone->vel_cmd_.yaw_mode, drone->vehicle_name_); } drone->has_vel_cmd_ = false; @@ -1092,7 +1092,7 @@ void AirsimROSWrapper::update_commands() // send control commands from the last callback to airsim auto car = static_cast(vehicle_ros.get()); if (car->has_car_cmd_) { - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); static_cast(airsim_client_.get())->setCarControls(car->car_cmd_, vehicle_ros->vehicle_name_); } car->has_car_cmd_ = false; @@ -1101,7 +1101,7 @@ void AirsimROSWrapper::update_commands() // Only camera rotation, no translation movement of camera if (has_gimbal_cmd_) { - std::lock_guard guard(control_mutex_ ); + std::lock_guard guard(control_mutex_); airsim_client_->simSetCameraPose(gimbal_cmd_.camera_name, get_airlib_pose(0, 0, 0, gimbal_cmd_.target_quat), gimbal_cmd_.vehicle_name); } From cd25854e3922bdd79a0ff4e954e39656af046f1e Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 15:09:50 +0200 Subject: [PATCH 103/123] - change std::function to one-liner lambda --- .../src/airsim_ros_wrapper.cpp | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index f5045b7779..0e658ee6d5 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -162,23 +162,25 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // bind to a single callback. todo optimal subs queue length // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument - std::function fcn_vel_cmd_body_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name_); - drone->vel_cmd_body_frame_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_body_frame", 1, fcn_vel_cmd_body_frame_sub); // todo ros::TransportHints().tcpNoDelay(); + drone->vel_cmd_body_frame_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_body_frame", 1, [&](const airsim_interfaces::msg::VelCmd::SharedPtr msg) { this->vel_cmd_body_frame_cb(msg, vehicle_ros->vehicle_name_); }); // todo ros::TransportHints().tcpNoDelay(); - std::function fcn_vel_cmd_world_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name_); - drone->vel_cmd_world_frame_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_world_frame", 1, fcn_vel_cmd_world_frame_sub); + drone->vel_cmd_world_frame_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_world_frame", 1, [&](const airsim_interfaces::msg::VelCmd::SharedPtr msg) { this->vel_cmd_world_frame_cb(msg, vehicle_ros->vehicle_name_); }); - std::function, std::shared_ptr)> fcn_takeoff_srvr = std::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name_); - drone->takeoff_srvr_ = nh_->create_service("~/" + curr_vehicle_name + "/takeoff", fcn_takeoff_srvr); + drone->takeoff_srvr_ = nh_->create_service("~/" + curr_vehicle_name + "/takeoff", + [&](std::shared_ptr request, + std::shared_ptr + response) { this->takeoff_srv_cb(request, response, vehicle_ros->vehicle_name_); }); + + drone->land_srvr_ = nh_->create_service("~/" + curr_vehicle_name + "/land", + [&](std::shared_ptr request, + std::shared_ptr + response) { this->land_srv_cb(request, response, vehicle_ros->vehicle_name_); }); - std::function, std::shared_ptr)> fcn_land_srvr = std::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name_); - drone->land_srvr_ = nh_->create_service("~/" + curr_vehicle_name + "/land", fcn_land_srvr); // vehicle_ros.reset_srvr = nh_->create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); } else { auto car = static_cast(vehicle_ros.get()); - std::function fcn_car_cmd_sub = std::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name_); - car->car_cmd_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/car_cmd", 1, fcn_car_cmd_sub); + car->car_cmd_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/car_cmd", 1, [&](const airsim_interfaces::msg::CarControls::SharedPtr msg) { this->car_cmd_cb(msg, vehicle_ros->vehicle_name_); }); car->car_state_pub_ = nh_->create_publisher("~/" + curr_vehicle_name + "/car_state", 10); } From 92c7ae39c82179ee03ff27809b0e2cf1edd735ac Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 16:20:12 +0200 Subject: [PATCH 104/123] - chnage VelCmdGroup to use VelCmd msg instead of duplicate --- ros2/src/airsim_interfaces/msg/VelCmdGroup.msg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_interfaces/msg/VelCmdGroup.msg b/ros2/src/airsim_interfaces/msg/VelCmdGroup.msg index 70abdce4ca..1be795d0a7 100755 --- a/ros2/src/airsim_interfaces/msg/VelCmdGroup.msg +++ b/ros2/src/airsim_interfaces/msg/VelCmdGroup.msg @@ -1,2 +1,2 @@ -geometry_msgs/Twist twist +airsim_interfaces/VelCmd vel_cmd string[] vehicle_names \ No newline at end of file From 2b0e47f7720936da0d6078a5072093dbaa817e77 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 16:20:50 +0200 Subject: [PATCH 105/123] - unified generate VelCmd msg logic --- .../include/airsim_ros_wrapper.h | 1 + .../src/airsim_ros_wrapper.cpp | 65 ++++++++++++------- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index f27f45c00a..74fe45e4a0 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -268,6 +268,7 @@ class AirsimROSWrapper sensor_msgs::msg::MagneticField get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const; airsim_interfaces::msg::Environment get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const; msr::airlib::GeoPoint get_origin_geo_point() const; + VelCmd get_airlib_vel_cmd(const airsim_interfaces::msg::VelCmd& msg) const; // not used anymore, but can be useful in future with an unreal camera calibration environment void read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::msg::CameraInfo& cam_info) const; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 0e658ee6d5..e67834b5aa 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -508,13 +508,13 @@ void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg: tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state_.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw // todo do actual body frame? - drone->vel_cmd_.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd_.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd_.z = msg->twist.linear.z; + drone->vel_cmd_.x = (msg->vel_cmd.twist.linear.x * cos(yaw)) - (msg->vel_cmd.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd_.y = (msg->vel_cmd.twist.linear.x * sin(yaw)) + (msg->vel_cmd.twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd_.z = msg->vel_cmd.twist.linear.z; drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; drone->vel_cmd_.yaw_mode.is_rate = true; // airsim uses degrees - drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->vel_cmd.twist.angular.z); drone->has_vel_cmd_ = true; } } @@ -547,13 +547,14 @@ void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelC std::lock_guard guard(control_mutex_); auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - drone->vel_cmd_.x = msg->twist.linear.x; - drone->vel_cmd_.y = msg->twist.linear.y; - drone->vel_cmd_.z = msg->twist.linear.z; - drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd_.yaw_mode.is_rate = true; - drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->vel_cmd_ = get_airlib_vel_cmd(*msg); + // drone->vel_cmd_ = get_airlib_vel_cmd(msg); + // drone->vel_cmd_.x = msg->twist.linear.x; + // drone->vel_cmd_.y = msg->twist.linear.y; + // drone->vel_cmd_.z = msg->twist.linear.z; + // drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + // drone->vel_cmd_.yaw_mode.is_rate = true; + // drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); drone->has_vel_cmd_ = true; } @@ -564,13 +565,14 @@ void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_interfaces::msg for (const auto& vehicle_name : msg->vehicle_names) { auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - drone->vel_cmd_.x = msg->twist.linear.x; - drone->vel_cmd_.y = msg->twist.linear.y; - drone->vel_cmd_.z = msg->twist.linear.z; - drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd_.yaw_mode.is_rate = true; - drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->vel_cmd_ = get_airlib_vel_cmd(msg->vel_cmd); + + // drone->vel_cmd_.x = msg->twist.linear.x; + // drone->vel_cmd_.y = msg->twist.linear.y; + // drone->vel_cmd_.z = msg->twist.linear.z; + // drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + // drone->vel_cmd_.yaw_mode.is_rate = true; + // drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); drone->has_vel_cmd_ = true; } } @@ -582,13 +584,14 @@ void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_interfaces::msg:: // todo expose wait_on_last_task or nah? for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { auto drone = static_cast(vehicle_name_ptr_pair.second.get()); - - drone->vel_cmd_.x = msg->twist.linear.x; - drone->vel_cmd_.y = msg->twist.linear.y; - drone->vel_cmd_.z = msg->twist.linear.z; - drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd_.yaw_mode.is_rate = true; - drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->vel_cmd_ = get_airlib_vel_cmd(*msg); + + // drone->vel_cmd_.x = msg->twist.linear.x; + // drone->vel_cmd_.y = msg->twist.linear.y; + // drone->vel_cmd_.z = msg->twist.linear.z; + // drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + // drone->vel_cmd_.yaw_mode.is_rate = true; + // drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); drone->has_vel_cmd_ = true; } } @@ -889,6 +892,18 @@ msr::airlib::GeoPoint AirsimROSWrapper::get_origin_geo_point() const return geo_point.home_geo_point; } +VelCmd AirsimROSWrapper::get_airlib_vel_cmd(const airsim_interfaces::msg::VelCmd& msg) const +{ + VelCmd vel_cmd; + vel_cmd.x = msg.twist.linear.x; + vel_cmd.y = msg.twist.linear.y; + vel_cmd.z = msg.twist.linear.z; + vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + vel_cmd.yaw_mode.is_rate = true; + vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + return vel_cmd; +} + rclcpp::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const { From d5c72edcfec3d7c6d9c9e62de149c29dd5ddc7f9 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 16:21:56 +0200 Subject: [PATCH 106/123] - cleanup --- .../src/airsim_ros_wrapper.cpp | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index e67834b5aa..da1099583a 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -548,13 +548,6 @@ void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelC auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); drone->vel_cmd_ = get_airlib_vel_cmd(*msg); - // drone->vel_cmd_ = get_airlib_vel_cmd(msg); - // drone->vel_cmd_.x = msg->twist.linear.x; - // drone->vel_cmd_.y = msg->twist.linear.y; - // drone->vel_cmd_.z = msg->twist.linear.z; - // drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - // drone->vel_cmd_.yaw_mode.is_rate = true; - // drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); drone->has_vel_cmd_ = true; } @@ -566,13 +559,6 @@ void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_interfaces::msg for (const auto& vehicle_name : msg->vehicle_names) { auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); drone->vel_cmd_ = get_airlib_vel_cmd(msg->vel_cmd); - - // drone->vel_cmd_.x = msg->twist.linear.x; - // drone->vel_cmd_.y = msg->twist.linear.y; - // drone->vel_cmd_.z = msg->twist.linear.z; - // drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - // drone->vel_cmd_.yaw_mode.is_rate = true; - // drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); drone->has_vel_cmd_ = true; } } @@ -585,13 +571,6 @@ void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_interfaces::msg:: for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { auto drone = static_cast(vehicle_name_ptr_pair.second.get()); drone->vel_cmd_ = get_airlib_vel_cmd(*msg); - - // drone->vel_cmd_.x = msg->twist.linear.x; - // drone->vel_cmd_.y = msg->twist.linear.y; - // drone->vel_cmd_.z = msg->twist.linear.z; - // drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - // drone->vel_cmd_.yaw_mode.is_rate = true; - // drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); drone->has_vel_cmd_ = true; } } From 2f43573de2ee3108ca8675261d6fa4be42d157ea Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 16:26:45 +0200 Subject: [PATCH 107/123] - shutdown node in case initialize_airsim() failed --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index da1099583a..14b64b4036 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -84,6 +84,7 @@ void AirsimROSWrapper::initialize_airsim() catch (rpc::rpc_error& e) { std::string msg = e.get_error().as(); RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API, something went wrong.\n%s", msg); + rclcpp::shutdown(); } } From ca6fccdeabf2cbb067f18716021bf48f6a764083 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 11 Nov 2021 16:34:27 +0200 Subject: [PATCH 108/123] - change the image step calculation to avoid hard coded --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 14b64b4036..90c05ee3f3 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -1293,7 +1293,7 @@ std::shared_ptr AirsimROSWrapper::get_img_msg_from_resp unused(curr_ros_time); std::shared_ptr img_msg_ptr = std::make_shared(); img_msg_ptr->data = img_response.image_data_uint8; - img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes + img_msg_ptr->step = img_response.image_data_uint8.size() / img_response.height; img_msg_ptr->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); img_msg_ptr->header.frame_id = frame_id; img_msg_ptr->height = img_response.height; From 0ebec3c8be345b75cd1c570a32861420e1b337ae Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 14 Nov 2021 10:27:14 +0200 Subject: [PATCH 109/123] removed a modified file from PR --- .../src/airsim_ros_wrapper.cpp | 2950 ++++++++--------- 1 file changed, 1475 insertions(+), 1475 deletions(-) diff --git a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index a948bea600..dc8ac68294 100644 --- a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -1,1476 +1,1476 @@ -#include -#include -// #include -// PLUGINLIB_EXPORT_CLASS(AirsimROSWrapper, nodelet::Nodelet) -#include "common/AirSimSettings.hpp" -#include - -constexpr char AirsimROSWrapper::CAM_YML_NAME[]; -constexpr char AirsimROSWrapper::WIDTH_YML_NAME[]; -constexpr char AirsimROSWrapper::HEIGHT_YML_NAME[]; -constexpr char AirsimROSWrapper::K_YML_NAME[]; -constexpr char AirsimROSWrapper::D_YML_NAME[]; -constexpr char AirsimROSWrapper::R_YML_NAME[]; -constexpr char AirsimROSWrapper::P_YML_NAME[]; -constexpr char AirsimROSWrapper::DMODEL_YML_NAME[]; - -const std::unordered_map AirsimROSWrapper::image_type_int_to_string_map_ = { - { 0, "Scene" }, - { 1, "DepthPlanar" }, - { 2, "DepthPerspective" }, - { 3, "DepthVis" }, - { 4, "DisparityNormalized" }, - { 5, "Segmentation" }, - { 6, "SurfaceNormals" }, - { 7, "Infrared" } -}; - -AirsimROSWrapper::AirsimROSWrapper(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private, const std::string& host_ip) - : nh_(nh), nh_private_(nh_private), img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ - lidar_async_spinner_(1, &lidar_timer_cb_queue_) - , // same as above, but for lidar - host_ip_(host_ip) - , airsim_client_images_(host_ip) - , airsim_client_lidar_(host_ip) - , airsim_settings_parser_(host_ip) - , tf_listener_(tf_buffer_) -{ - ros_clock_.clock.fromSec(0); - is_used_lidar_timer_cb_queue_ = false; - is_used_img_timer_cb_queue_ = false; - - if (AirSimSettings::singleton().simmode_name != AirSimSettings::kSimModeTypeCar) { - airsim_mode_ = AIRSIM_MODE::DRONE; - ROS_INFO("Setting ROS wrapper to DRONE mode"); - } - else { - airsim_mode_ = AIRSIM_MODE::CAR; - ROS_INFO("Setting ROS wrapper to CAR mode"); - } - - initialize_ros(); - - std::cout << "AirsimROSWrapper Initialized!\n"; -} - -void AirsimROSWrapper::initialize_airsim() -{ - // todo do not reset if already in air? - try { - - if (airsim_mode_ == AIRSIM_MODE::DRONE) { - airsim_client_ = std::unique_ptr(new msr::airlib::MultirotorRpcLibClient(host_ip_)); - } - else { - airsim_client_ = std::unique_ptr(new msr::airlib::CarRpcLibClient(host_ip_)); - } - airsim_client_->confirmConnection(); - airsim_client_images_.confirmConnection(); - airsim_client_lidar_.confirmConnection(); - - for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - airsim_client_->enableApiControl(true, vehicle_name_ptr_pair.first); // todo expose as rosservice? - airsim_client_->armDisarm(true, vehicle_name_ptr_pair.first); // todo exposes as rosservice? - } - - origin_geo_point_ = airsim_client_->getHomeGeoPoint(""); - // todo there's only one global origin geopoint for environment. but airsim API accept a parameter vehicle_name? inside carsimpawnapi.cpp, there's a geopoint being assigned in the constructor. by? - origin_geo_point_msg_ = get_gps_msg_from_airsim_geo_point(origin_geo_point_); - } - catch (rpc::rpc_error& e) { - std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API, something went wrong." << std::endl - << msg << std::endl; - } -} - -void AirsimROSWrapper::initialize_ros() -{ - - // ros params - double update_airsim_control_every_n_sec; - nh_private_.getParam("is_vulkan", is_vulkan_); - nh_private_.getParam("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); - nh_private_.getParam("publish_clock", publish_clock_); - nh_private_.param("world_frame_id", world_frame_id_, world_frame_id_); - odom_frame_id_ = world_frame_id_ == AIRSIM_FRAME_ID ? AIRSIM_ODOM_FRAME_ID : ENU_ODOM_FRAME_ID; - nh_private_.param("odom_frame_id", odom_frame_id_, odom_frame_id_); - isENU_ = !(odom_frame_id_ == AIRSIM_ODOM_FRAME_ID); - nh_private_.param("coordinate_system_enu", isENU_, isENU_); - vel_cmd_duration_ = 0.05; // todo rosparam - // todo enforce dynamics constraints in this node as well? - // nh_.getParam("max_vert_vel_", max_vert_vel_); - // nh_.getParam("max_horz_vel", max_horz_vel_) - - create_ros_pubs_from_settings_json(); - airsim_control_update_timer_ = nh_private_.createTimer(ros::Duration(update_airsim_control_every_n_sec), &AirsimROSWrapper::drone_state_timer_cb, this); -} - -// XmlRpc::XmlRpcValue can't be const in this case -void AirsimROSWrapper::create_ros_pubs_from_settings_json() -{ - // subscribe to control commands on global nodehandle - gimbal_angle_quat_cmd_sub_ = nh_private_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); - gimbal_angle_euler_cmd_sub_ = nh_private_.subscribe("gimbal_angle_euler_cmd", 50, &AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this); - origin_geo_point_pub_ = nh_private_.advertise("origin_geo_point", 10); - - airsim_img_request_vehicle_name_pair_vec_.clear(); - image_pub_vec_.clear(); - cam_info_pub_vec_.clear(); - camera_info_msg_vec_.clear(); - vehicle_name_ptr_map_.clear(); - size_t lidar_cnt = 0; - - image_transport::ImageTransport image_transporter(nh_private_); - - // iterate over std::map> vehicles; - for (const auto& curr_vehicle_elem : AirSimSettings::singleton().vehicles) { - auto& vehicle_setting = curr_vehicle_elem.second; - auto curr_vehicle_name = curr_vehicle_elem.first; - - nh_.setParam("/vehicle_name", curr_vehicle_name); - - set_nans_to_zeros_in_pose(*vehicle_setting); - - std::unique_ptr vehicle_ros = nullptr; - - if (airsim_mode_ == AIRSIM_MODE::DRONE) { - vehicle_ros = std::unique_ptr(new MultiRotorROS()); - } - else { - vehicle_ros = std::unique_ptr(new CarROS()); - } - - vehicle_ros->odom_frame_id = curr_vehicle_name + "/" + odom_frame_id_; - vehicle_ros->vehicle_name = curr_vehicle_name; - - append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); - - vehicle_ros->odom_local_pub = nh_private_.advertise(curr_vehicle_name + "/" + odom_frame_id_, 10); - - vehicle_ros->env_pub = nh_private_.advertise(curr_vehicle_name + "/environment", 10); - - vehicle_ros->global_gps_pub = nh_private_.advertise(curr_vehicle_name + "/global_gps", 10); - - if (airsim_mode_ == AIRSIM_MODE::DRONE) { - auto drone = static_cast(vehicle_ros.get()); - - // bind to a single callback. todo optimal subs queue length - // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument - drone->vel_cmd_body_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_body_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name)); // todo ros::TransportHints().tcpNoDelay(); - drone->vel_cmd_world_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_world_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name)); - - drone->takeoff_srvr = nh_private_.advertiseService(curr_vehicle_name + "/takeoff", - boost::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); - drone->land_srvr = nh_private_.advertiseService(curr_vehicle_name + "/land", - boost::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); - // vehicle_ros.reset_srvr = nh_private_.advertiseService(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); - } - else { - auto car = static_cast(vehicle_ros.get()); - car->car_cmd_sub = nh_private_.subscribe(curr_vehicle_name + "/car_cmd", 1, boost::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name)); - car->car_state_pub = nh_private_.advertise(curr_vehicle_name + "/car_state", 10); - } - - // iterate over camera map std::map .cameras; - for (auto& curr_camera_elem : vehicle_setting->cameras) { - auto& camera_setting = curr_camera_elem.second; - auto& curr_camera_name = curr_camera_elem.first; - - set_nans_to_zeros_in_pose(*vehicle_setting, camera_setting); - append_static_camera_tf(vehicle_ros.get(), curr_camera_name, camera_setting); - // camera_setting.gimbal - std::vector current_image_request_vec; - current_image_request_vec.clear(); - - // iterate over capture_setting std::map capture_settings - for (const auto& curr_capture_elem : camera_setting.capture_settings) { - auto& capture_setting = curr_capture_elem.second; - - // todo why does AirSimSettings::loadCaptureSettings calls AirSimSettings::initializeCaptureSettings() - // which initializes default capture settings for _all_ NINE msr::airlib::ImageCaptureBase::ImageType - if (!(std::isnan(capture_setting.fov_degrees))) { - ImageType curr_image_type = msr::airlib::Utils::toEnum(capture_setting.image_type); - // if scene / segmentation / surface normals / infrared, get uncompressed image with pixels_as_floats = false - if (capture_setting.image_type == 0 || capture_setting.image_type == 5 || capture_setting.image_type == 6 || capture_setting.image_type == 7) { - current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, false, false)); - } - // if {DepthPlanar, DepthPerspective,DepthVis, DisparityNormalized}, get float image - else { - current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, true)); - } - - image_pub_vec_.push_back(image_transporter.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type), 1)); - cam_info_pub_vec_.push_back(nh_private_.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); - camera_info_msg_vec_.push_back(generate_cam_info(curr_camera_name, camera_setting, capture_setting)); - } - } - // push back pair (vector of image captures, current vehicle name) - airsim_img_request_vehicle_name_pair_vec_.push_back(std::make_pair(current_image_request_vec, curr_vehicle_name)); - } - - // iterate over sensors - std::vector sensors; - for (auto& curr_sensor_map : vehicle_setting->sensors) { - auto& sensor_name = curr_sensor_map.first; - auto& sensor_setting = curr_sensor_map.second; - - if (sensor_setting->enabled) { - SensorPublisher sensor_publisher; - sensor_publisher.sensor_name = sensor_setting->sensor_name; - sensor_publisher.sensor_type = sensor_setting->sensor_type; - switch (sensor_setting->sensor_type) { - case SensorBase::SensorType::Barometer: { - std::cout << "Barometer" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/altimeter/" + sensor_name, 10); - break; - } - case SensorBase::SensorType::Imu: { - std::cout << "Imu" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/imu/" + sensor_name, 10); - break; - } - case SensorBase::SensorType::Gps: { - std::cout << "Gps" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/gps/" + sensor_name, 10); - break; - } - case SensorBase::SensorType::Magnetometer: { - std::cout << "Magnetometer" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/magnetometer/" + sensor_name, 10); - break; - } - case SensorBase::SensorType::Distance: { - std::cout << "Distance" << std::endl; - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/distance/" + sensor_name, 10); - break; - } - case SensorBase::SensorType::Lidar: { - std::cout << "Lidar" << std::endl; - auto lidar_setting = *static_cast(sensor_setting.get()); - msr::airlib::LidarSimpleParams params; - params.initializeFromSettings(lidar_setting); - append_static_lidar_tf(vehicle_ros.get(), sensor_name, params); - sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/lidar/" + sensor_name, 10); - break; - } - default: { - throw std::invalid_argument("Unexpected sensor type"); - } - } - sensors.emplace_back(sensor_publisher); - } - } - - // we want fast access to the lidar sensors for callback handling, sort them out now - auto isLidar = std::function([](const SensorPublisher& pub) { - return pub.sensor_type == SensorBase::SensorType::Lidar; - }); - size_t cnt = std::count_if(sensors.begin(), sensors.end(), isLidar); - lidar_cnt += cnt; - vehicle_ros->lidar_pubs.resize(cnt); - vehicle_ros->sensor_pubs.resize(sensors.size() - cnt); - std::partition_copy(sensors.begin(), sensors.end(), vehicle_ros->lidar_pubs.begin(), vehicle_ros->sensor_pubs.begin(), isLidar); - - vehicle_name_ptr_map_.emplace(curr_vehicle_name, std::move(vehicle_ros)); // allows fast lookup in command callbacks in case of a lot of drones - } - - // add takeoff and land all services if more than 2 drones - if (vehicle_name_ptr_map_.size() > 1 && airsim_mode_ == AIRSIM_MODE::DRONE) { - takeoff_all_srvr_ = nh_private_.advertiseService("all_robots/takeoff", &AirsimROSWrapper::takeoff_all_srv_cb, this); - land_all_srvr_ = nh_private_.advertiseService("all_robots/land", &AirsimROSWrapper::land_all_srv_cb, this); - - // gimbal_angle_quat_cmd_sub_ = nh_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); - - vel_cmd_all_body_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_all_body_frame_cb, this); - vel_cmd_all_world_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_all_world_frame_cb, this); - - vel_cmd_group_body_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_group_body_frame_cb, this); - vel_cmd_group_world_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_group_world_frame_cb, this); - - takeoff_group_srvr_ = nh_private_.advertiseService("group_of_robots/takeoff", &AirsimROSWrapper::takeoff_group_srv_cb, this); - land_group_srvr_ = nh_private_.advertiseService("group_of_robots/land", &AirsimROSWrapper::land_group_srv_cb, this); - } - - // todo add per vehicle reset in AirLib API - reset_srvr_ = nh_private_.advertiseService("reset", &AirsimROSWrapper::reset_srv_cb, this); - - if (publish_clock_) { - clock_pub_ = nh_private_.advertise("clock", 1); - } - - // if >0 cameras, add one more thread for img_request_timer_cb - if (!airsim_img_request_vehicle_name_pair_vec_.empty()) { - double update_airsim_img_response_every_n_sec; - nh_private_.getParam("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); - - ros::TimerOptions timer_options(ros::Duration(update_airsim_img_response_every_n_sec), boost::bind(&AirsimROSWrapper::img_response_timer_cb, this, _1), &img_timer_cb_queue_); - airsim_img_response_timer_ = nh_private_.createTimer(timer_options); - is_used_img_timer_cb_queue_ = true; - } - - // lidars update on their own callback/thread at a given rate - if (lidar_cnt > 0) { - double update_lidar_every_n_sec; - nh_private_.getParam("update_lidar_every_n_sec", update_lidar_every_n_sec); - // nh_private_.setCallbackQueue(&lidar_timer_cb_queue_); - ros::TimerOptions timer_options(ros::Duration(update_lidar_every_n_sec), boost::bind(&AirsimROSWrapper::lidar_timer_cb, this, _1), &lidar_timer_cb_queue_); - airsim_lidar_update_timer_ = nh_private_.createTimer(timer_options); - is_used_lidar_timer_cb_queue_ = true; - } - - initialize_airsim(); -} - -// todo: error check. if state is not landed, return error. -bool AirsimROSWrapper::takeoff_srv_cb(airsim_ros_pkgs::Takeoff::Request& request, airsim_ros_pkgs::Takeoff::Response& response, const std::string& vehicle_name) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? - // response.success = - else - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); - // response.success = - - return true; -} - -bool AirsimROSWrapper::takeoff_group_srv_cb(airsim_ros_pkgs::TakeoffGroup::Request& request, airsim_ros_pkgs::TakeoffGroup::Response& response) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - for (const auto& vehicle_name : request.vehicle_names) - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? - // response.success = - else - for (const auto& vehicle_name : request.vehicle_names) - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); - // response.success = - - return true; -} - -bool AirsimROSWrapper::takeoff_all_srv_cb(airsim_ros_pkgs::Takeoff::Request& request, airsim_ros_pkgs::Takeoff::Response& response) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first)->waitOnLastTask(); // todo value for timeout_sec? - // response.success = - else - for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) - static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first); - // response.success = - - return true; -} - -bool AirsimROSWrapper::land_srv_cb(airsim_ros_pkgs::Land::Request& request, airsim_ros_pkgs::Land::Response& response, const std::string& vehicle_name) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); - else - static_cast(airsim_client_.get())->landAsync(60, vehicle_name); - - return true; //todo -} - -bool AirsimROSWrapper::land_group_srv_cb(airsim_ros_pkgs::LandGroup::Request& request, airsim_ros_pkgs::LandGroup::Response& response) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - for (const auto& vehicle_name : request.vehicle_names) - static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); - else - for (const auto& vehicle_name : request.vehicle_names) - static_cast(airsim_client_.get())->landAsync(60, vehicle_name); - - return true; //todo -} - -bool AirsimROSWrapper::land_all_srv_cb(airsim_ros_pkgs::Land::Request& request, airsim_ros_pkgs::Land::Response& response) -{ - std::lock_guard guard(drone_control_mutex_); - - if (request.waitOnLastTask) - for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) - static_cast(airsim_client_.get())->landAsync(60, vehicle_name_ptr_pair.first)->waitOnLastTask(); - else - for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) - static_cast(airsim_client_.get())->landAsync(60, vehicle_name_ptr_pair.first); - - return true; //todo -} - -// todo add reset by vehicle_name API to airlib -// todo not async remove waitonlasttask -bool AirsimROSWrapper::reset_srv_cb(airsim_ros_pkgs::Reset::Request& request, airsim_ros_pkgs::Reset::Response& response) -{ - std::lock_guard guard(drone_control_mutex_); - - airsim_client_.reset(); - return true; //todo -} - -tf2::Quaternion AirsimROSWrapper::get_tf2_quat(const msr::airlib::Quaternionr& airlib_quat) const -{ - return tf2::Quaternion(airlib_quat.x(), airlib_quat.y(), airlib_quat.z(), airlib_quat.w()); -} - -msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const geometry_msgs::Quaternion& geometry_msgs_quat) const -{ - return msr::airlib::Quaternionr(geometry_msgs_quat.w, geometry_msgs_quat.x, geometry_msgs_quat.y, geometry_msgs_quat.z); -} - -msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const tf2::Quaternion& tf2_quat) const -{ - return msr::airlib::Quaternionr(tf2_quat.w(), tf2_quat.x(), tf2_quat.y(), tf2_quat.z()); -} - -void AirsimROSWrapper::car_cmd_cb(const airsim_ros_pkgs::CarControls::ConstPtr& msg, const std::string& vehicle_name) -{ - std::lock_guard guard(drone_control_mutex_); - - auto car = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - car->car_cmd.throttle = msg->throttle; - car->car_cmd.steering = msg->steering; - car->car_cmd.brake = msg->brake; - car->car_cmd.handbrake = msg->handbrake; - car->car_cmd.is_manual_gear = msg->manual; - car->car_cmd.manual_gear = msg->manual_gear; - car->car_cmd.gear_immediate = msg->gear_immediate; - - car->has_car_cmd = true; -} - -msr::airlib::Pose AirsimROSWrapper::get_airlib_pose(const float& x, const float& y, const float& z, const msr::airlib::Quaternionr& airlib_quat) const -{ - return msr::airlib::Pose(msr::airlib::Vector3r(x, y, z), airlib_quat); -} - -// void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_ros_pkgs::VelCmd& msg, const std::string& vehicle_name) -void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg, const std::string& vehicle_name) -{ - std::lock_guard guard(drone_control_mutex_); - - auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw - - // todo do actual body frame? - drone->vel_cmd.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd.z = msg->twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - // airsim uses degrees - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); - drone->has_vel_cmd = true; -} - -void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_ros_pkgs::VelCmdGroup& msg) -{ - std::lock_guard guard(drone_control_mutex_); - - for (const auto& vehicle_name : msg.vehicle_names) { - auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw - - // todo do actual body frame? - drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd.z = msg.twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - // airsim uses degrees - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); - drone->has_vel_cmd = true; - } -} - -// void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg) -void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_ros_pkgs::VelCmd& msg) -{ - std::lock_guard guard(drone_control_mutex_); - - // todo expose waitOnLastTask or nah? - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - auto drone = static_cast(vehicle_name_ptr_pair.second.get()); - - double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw - - // todo do actual body frame? - drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd.z = msg.twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - // airsim uses degrees - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); - drone->has_vel_cmd = true; - } -} - -void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg, const std::string& vehicle_name) -{ - std::lock_guard guard(drone_control_mutex_); - - auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - drone->vel_cmd.x = msg->twist.linear.x; - drone->vel_cmd.y = msg->twist.linear.y; - drone->vel_cmd.z = msg->twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); - drone->has_vel_cmd = true; -} - -// this is kinda unnecessary but maybe it makes life easier for the end user. -void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_ros_pkgs::VelCmdGroup& msg) -{ - std::lock_guard guard(drone_control_mutex_); - - for (const auto& vehicle_name : msg.vehicle_names) { - auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - drone->vel_cmd.x = msg.twist.linear.x; - drone->vel_cmd.y = msg.twist.linear.y; - drone->vel_cmd.z = msg.twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); - drone->has_vel_cmd = true; - } -} - -void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_ros_pkgs::VelCmd& msg) -{ - std::lock_guard guard(drone_control_mutex_); - - // todo expose waitOnLastTask or nah? - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - auto drone = static_cast(vehicle_name_ptr_pair.second.get()); - - drone->vel_cmd.x = msg.twist.linear.x; - drone->vel_cmd.y = msg.twist.linear.y; - drone->vel_cmd.z = msg.twist.linear.z; - drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd.yaw_mode.is_rate = true; - drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); - drone->has_vel_cmd = true; - } -} - -// todo support multiple gimbal commands -void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_ros_pkgs::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg) -{ - tf2::Quaternion quat_control_cmd; - try { - tf2::convert(gimbal_angle_quat_cmd_msg.orientation, quat_control_cmd); - quat_control_cmd.normalize(); - gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); // airsim uses wxyz - gimbal_cmd_.camera_name = gimbal_angle_quat_cmd_msg.camera_name; - gimbal_cmd_.vehicle_name = gimbal_angle_quat_cmd_msg.vehicle_name; - has_gimbal_cmd_ = true; - } - catch (tf2::TransformException& ex) { - ROS_WARN("%s", ex.what()); - } -} - -// todo support multiple gimbal commands -// 1. find quaternion of default gimbal pose -// 2. forward multiply with quaternion equivalent to desired euler commands (in degrees) -// 3. call airsim client's setCameraPose which sets camera pose wrt world (or takeoff?) ned frame. todo -void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_ros_pkgs::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg) -{ - try { - tf2::Quaternion quat_control_cmd; - quat_control_cmd.setRPY(math_common::deg2rad(gimbal_angle_euler_cmd_msg.roll), math_common::deg2rad(gimbal_angle_euler_cmd_msg.pitch), math_common::deg2rad(gimbal_angle_euler_cmd_msg.yaw)); - quat_control_cmd.normalize(); - gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); - gimbal_cmd_.camera_name = gimbal_angle_euler_cmd_msg.camera_name; - gimbal_cmd_.vehicle_name = gimbal_angle_euler_cmd_msg.vehicle_name; - has_gimbal_cmd_ = true; - } - catch (tf2::TransformException& ex) { - ROS_WARN("%s", ex.what()); - } -} - -airsim_ros_pkgs::CarState AirsimROSWrapper::get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const -{ - airsim_ros_pkgs::CarState state_msg; - const auto odo = get_odom_msg_from_car_state(car_state); - - state_msg.pose = odo.pose; - state_msg.twist = odo.twist; - state_msg.speed = car_state.speed; - state_msg.gear = car_state.gear; - state_msg.rpm = car_state.rpm; - state_msg.maxrpm = car_state.maxrpm; - state_msg.handbrake = car_state.handbrake; - state_msg.header.stamp = airsim_timestamp_to_ros(car_state.timestamp); - - return state_msg; -} - -nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const -{ - nav_msgs::Odometry odom_msg; - - odom_msg.pose.pose.position.x = car_state.getPosition().x(); - odom_msg.pose.pose.position.y = car_state.getPosition().y(); - odom_msg.pose.pose.position.z = car_state.getPosition().z(); - odom_msg.pose.pose.orientation.x = car_state.getOrientation().x(); - odom_msg.pose.pose.orientation.y = car_state.getOrientation().y(); - odom_msg.pose.pose.orientation.z = car_state.getOrientation().z(); - odom_msg.pose.pose.orientation.w = car_state.getOrientation().w(); - - odom_msg.twist.twist.linear.x = car_state.kinematics_estimated.twist.linear.x(); - odom_msg.twist.twist.linear.y = car_state.kinematics_estimated.twist.linear.y(); - odom_msg.twist.twist.linear.z = car_state.kinematics_estimated.twist.linear.z(); - odom_msg.twist.twist.angular.x = car_state.kinematics_estimated.twist.angular.x(); - odom_msg.twist.twist.angular.y = car_state.kinematics_estimated.twist.angular.y(); - odom_msg.twist.twist.angular.z = car_state.kinematics_estimated.twist.angular.z(); - - if (isENU_) { - std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); - odom_msg.pose.pose.position.z = -odom_msg.pose.pose.position.z; - std::swap(odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y); - odom_msg.pose.pose.orientation.z = -odom_msg.pose.pose.orientation.z; - std::swap(odom_msg.twist.twist.linear.x, odom_msg.twist.twist.linear.y); - odom_msg.twist.twist.linear.z = -odom_msg.twist.twist.linear.z; - std::swap(odom_msg.twist.twist.angular.x, odom_msg.twist.twist.angular.y); - odom_msg.twist.twist.angular.z = -odom_msg.twist.twist.angular.z; - } - - return odom_msg; -} - -nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const -{ - nav_msgs::Odometry odom_msg; - - odom_msg.pose.pose.position.x = drone_state.getPosition().x(); - odom_msg.pose.pose.position.y = drone_state.getPosition().y(); - odom_msg.pose.pose.position.z = drone_state.getPosition().z(); - odom_msg.pose.pose.orientation.x = drone_state.getOrientation().x(); - odom_msg.pose.pose.orientation.y = drone_state.getOrientation().y(); - odom_msg.pose.pose.orientation.z = drone_state.getOrientation().z(); - odom_msg.pose.pose.orientation.w = drone_state.getOrientation().w(); - - odom_msg.twist.twist.linear.x = drone_state.kinematics_estimated.twist.linear.x(); - odom_msg.twist.twist.linear.y = drone_state.kinematics_estimated.twist.linear.y(); - odom_msg.twist.twist.linear.z = drone_state.kinematics_estimated.twist.linear.z(); - odom_msg.twist.twist.angular.x = drone_state.kinematics_estimated.twist.angular.x(); - odom_msg.twist.twist.angular.y = drone_state.kinematics_estimated.twist.angular.y(); - odom_msg.twist.twist.angular.z = drone_state.kinematics_estimated.twist.angular.z(); - - if (isENU_) { - std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); - odom_msg.pose.pose.position.z = -odom_msg.pose.pose.position.z; - std::swap(odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y); - odom_msg.pose.pose.orientation.z = -odom_msg.pose.pose.orientation.z; - std::swap(odom_msg.twist.twist.linear.x, odom_msg.twist.twist.linear.y); - odom_msg.twist.twist.linear.z = -odom_msg.twist.twist.linear.z; - std::swap(odom_msg.twist.twist.angular.x, odom_msg.twist.twist.angular.y); - odom_msg.twist.twist.angular.z = -odom_msg.twist.twist.angular.z; - } - - return odom_msg; -} - -// https://docs.ros.org/jade/api/sensor_msgs/html/point__cloud__conversion_8h_source.html#l00066 -// look at UnrealLidarSensor.cpp UnrealLidarSensor::getPointCloud() for math -// read this carefully https://docs.ros.org/kinetic/api/sensor_msgs/html/msg/PointCloud2.html -sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const -{ - sensor_msgs::PointCloud2 lidar_msg; - lidar_msg.header.stamp = ros::Time::now(); - lidar_msg.header.frame_id = vehicle_name; - - if (lidar_data.point_cloud.size() > 3) { - lidar_msg.height = 1; - lidar_msg.width = lidar_data.point_cloud.size() / 3; - - lidar_msg.fields.resize(3); - lidar_msg.fields[0].name = "x"; - lidar_msg.fields[1].name = "y"; - lidar_msg.fields[2].name = "z"; - - int offset = 0; - - for (size_t d = 0; d < lidar_msg.fields.size(); ++d, offset += 4) { - lidar_msg.fields[d].offset = offset; - lidar_msg.fields[d].datatype = sensor_msgs::PointField::FLOAT32; - lidar_msg.fields[d].count = 1; - } - - lidar_msg.is_bigendian = false; - lidar_msg.point_step = offset; // 4 * num fields - lidar_msg.row_step = lidar_msg.point_step * lidar_msg.width; - - lidar_msg.is_dense = true; // todo - std::vector data_std = lidar_data.point_cloud; - - const unsigned char* bytes = reinterpret_cast(data_std.data()); - vector lidar_msg_data(bytes, bytes + sizeof(float) * data_std.size()); - lidar_msg.data = std::move(lidar_msg_data); - } - else { - // msg = [] - } - - if (isENU_) { - try { - sensor_msgs::PointCloud2 lidar_msg_enu; - auto transformStampedENU = tf_buffer_.lookupTransform(AIRSIM_FRAME_ID, vehicle_name, ros::Time(0), ros::Duration(1)); - tf2::doTransform(lidar_msg, lidar_msg_enu, transformStampedENU); - - lidar_msg_enu.header.stamp = lidar_msg.header.stamp; - lidar_msg_enu.header.frame_id = lidar_msg.header.frame_id; - - lidar_msg = std::move(lidar_msg_enu); - } - catch (tf2::TransformException& ex) { - ROS_WARN("%s", ex.what()); - ros::Duration(1.0).sleep(); - } - } - - return lidar_msg; -} - -airsim_ros_pkgs::Environment AirsimROSWrapper::get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const -{ - airsim_ros_pkgs::Environment env_msg; - env_msg.position.x = env_data.position.x(); - env_msg.position.y = env_data.position.y(); - env_msg.position.z = env_data.position.z(); - env_msg.geo_point.latitude = env_data.geo_point.latitude; - env_msg.geo_point.longitude = env_data.geo_point.longitude; - env_msg.geo_point.altitude = env_data.geo_point.altitude; - env_msg.gravity.x = env_data.gravity.x(); - env_msg.gravity.y = env_data.gravity.y(); - env_msg.gravity.z = env_data.gravity.z(); - env_msg.air_pressure = env_data.air_pressure; - env_msg.temperature = env_data.temperature; - env_msg.air_density = env_data.temperature; - - return env_msg; -} - -sensor_msgs::MagneticField AirsimROSWrapper::get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const -{ - sensor_msgs::MagneticField mag_msg; - mag_msg.magnetic_field.x = mag_data.magnetic_field_body.x(); - mag_msg.magnetic_field.y = mag_data.magnetic_field_body.y(); - mag_msg.magnetic_field.z = mag_data.magnetic_field_body.z(); - std::copy(std::begin(mag_data.magnetic_field_covariance), - std::end(mag_data.magnetic_field_covariance), - std::begin(mag_msg.magnetic_field_covariance)); - mag_msg.header.stamp = airsim_timestamp_to_ros(mag_data.time_stamp); - - return mag_msg; -} - -// todo covariances -sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const -{ - sensor_msgs::NavSatFix gps_msg; - gps_msg.header.stamp = airsim_timestamp_to_ros(gps_data.time_stamp); - gps_msg.latitude = gps_data.gnss.geo_point.latitude; - gps_msg.longitude = gps_data.gnss.geo_point.longitude; - gps_msg.altitude = gps_data.gnss.geo_point.altitude; - gps_msg.status.service = sensor_msgs::NavSatStatus::SERVICE_GLONASS; - gps_msg.status.status = gps_data.gnss.fix_type; - // gps_msg.position_covariance_type = - // gps_msg.position_covariance = - - return gps_msg; -} - -sensor_msgs::Range AirsimROSWrapper::get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const -{ - sensor_msgs::Range dist_msg; - dist_msg.header.stamp = airsim_timestamp_to_ros(dist_data.time_stamp); - dist_msg.range = dist_data.distance; - dist_msg.min_range = dist_data.min_distance; - dist_msg.max_range = dist_data.min_distance; - - return dist_msg; -} - -airsim_ros_pkgs::Altimeter AirsimROSWrapper::get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const -{ - airsim_ros_pkgs::Altimeter alt_msg; - alt_msg.header.stamp = airsim_timestamp_to_ros(alt_data.time_stamp); - alt_msg.altitude = alt_data.altitude; - alt_msg.pressure = alt_data.pressure; - alt_msg.qnh = alt_data.qnh; - - return alt_msg; -} - -// todo covariances -sensor_msgs::Imu AirsimROSWrapper::get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const -{ - sensor_msgs::Imu imu_msg; - // imu_msg.header.frame_id = "/airsim/odom_local_ned";// todo multiple drones - imu_msg.header.stamp = airsim_timestamp_to_ros(imu_data.time_stamp); - imu_msg.orientation.x = imu_data.orientation.x(); - imu_msg.orientation.y = imu_data.orientation.y(); - imu_msg.orientation.z = imu_data.orientation.z(); - imu_msg.orientation.w = imu_data.orientation.w(); - - // todo radians per second - imu_msg.angular_velocity.x = imu_data.angular_velocity.x(); - imu_msg.angular_velocity.y = imu_data.angular_velocity.y(); - imu_msg.angular_velocity.z = imu_data.angular_velocity.z(); - - // meters/s2^m - imu_msg.linear_acceleration.x = imu_data.linear_acceleration.x(); - imu_msg.linear_acceleration.y = imu_data.linear_acceleration.y(); - imu_msg.linear_acceleration.z = imu_data.linear_acceleration.z(); - - // imu_msg.orientation_covariance = ; - // imu_msg.angular_velocity_covariance = ; - // imu_msg.linear_acceleration_covariance = ; - - return imu_msg; -} - -void AirsimROSWrapper::publish_odom_tf(const nav_msgs::Odometry& odom_msg) -{ - geometry_msgs::TransformStamped odom_tf; - odom_tf.header = odom_msg.header; - odom_tf.child_frame_id = odom_msg.child_frame_id; - odom_tf.transform.translation.x = odom_msg.pose.pose.position.x; - odom_tf.transform.translation.y = odom_msg.pose.pose.position.y; - odom_tf.transform.translation.z = odom_msg.pose.pose.position.z; - odom_tf.transform.rotation.x = odom_msg.pose.pose.orientation.x; - odom_tf.transform.rotation.y = odom_msg.pose.pose.orientation.y; - odom_tf.transform.rotation.z = odom_msg.pose.pose.orientation.z; - odom_tf.transform.rotation.w = odom_msg.pose.pose.orientation.w; - tf_broadcaster_.sendTransform(odom_tf); -} - -airsim_ros_pkgs::GPSYaw AirsimROSWrapper::get_gps_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const -{ - airsim_ros_pkgs::GPSYaw gps_msg; - gps_msg.latitude = geo_point.latitude; - gps_msg.longitude = geo_point.longitude; - gps_msg.altitude = geo_point.altitude; - return gps_msg; -} - -sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const -{ - sensor_msgs::NavSatFix gps_msg; - gps_msg.latitude = geo_point.latitude; - gps_msg.longitude = geo_point.longitude; - gps_msg.altitude = geo_point.altitude; - return gps_msg; -} - -ros::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const -{ - auto dur = std::chrono::duration(stamp.time_since_epoch()); - ros::Time cur_time; - cur_time.fromSec(dur.count()); - return cur_time; -} - -ros::Time AirsimROSWrapper::airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const -{ - // airsim appears to use chrono::system_clock with nanosecond precision - std::chrono::nanoseconds dur(stamp); - std::chrono::time_point tp(dur); - ros::Time cur_time = chrono_timestamp_to_ros(tp); - return cur_time; -} - -void AirsimROSWrapper::drone_state_timer_cb(const ros::TimerEvent& event) -{ - try { - // todo this is global origin - origin_geo_point_pub_.publish(origin_geo_point_msg_); - - // get the basic vehicle pose and environmental state - const auto now = update_state(); - - // on init, will publish 0 to /clock as expected for use_sim_time compatibility - if (!airsim_client_->simIsPaused()) { - // airsim_client needs to provide the simulation time in a future version of the API - ros_clock_.clock = now; - } - // publish the simulation clock - if (publish_clock_) { - clock_pub_.publish(ros_clock_); - } - - // publish vehicle state, odom, and all basic sensor types - publish_vehicle_state(); - - // send any commands out to the vehicles - update_commands(); - } - catch (rpc::rpc_error& e) { - std::cout << "error" << std::endl; - std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API:" << std::endl - << msg << std::endl; - } -} - -void AirsimROSWrapper::update_and_publish_static_transforms(VehicleROS* vehicle_ros) -{ - if (vehicle_ros && !vehicle_ros->static_tf_msg_vec.empty()) { - for (auto& static_tf_msg : vehicle_ros->static_tf_msg_vec) { - static_tf_msg.header.stamp = vehicle_ros->stamp; - static_tf_pub_.sendTransform(static_tf_msg); - } - } -} - -ros::Time AirsimROSWrapper::update_state() -{ - bool got_sim_time = false; - ros::Time curr_ros_time = ros::Time::now(); - - //should be easier way to get the sim time through API, something like: - //msr::airlib::Environment::State env = airsim_client_->simGetGroundTruthEnvironment(""); - //curr_ros_time = airsim_timestamp_to_ros(env.clock().nowNanos()); - - // iterate over drones - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - ros::Time vehicle_time; - // get drone state from airsim - auto& vehicle_ros = vehicle_name_ptr_pair.second; - - // vehicle environment, we can get ambient temperature here and other truths - auto env_data = airsim_client_->simGetGroundTruthEnvironment(vehicle_ros->vehicle_name); - - if (airsim_mode_ == AIRSIM_MODE::DRONE) { - auto drone = static_cast(vehicle_ros.get()); - auto rpc = static_cast(airsim_client_.get()); - drone->curr_drone_state = rpc->getMultirotorState(vehicle_ros->vehicle_name); - - vehicle_time = airsim_timestamp_to_ros(drone->curr_drone_state.timestamp); - if (!got_sim_time) { - curr_ros_time = vehicle_time; - got_sim_time = true; - } - - vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(drone->curr_drone_state.gps_location); - vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; - - vehicle_ros->curr_odom = get_odom_msg_from_multirotor_state(drone->curr_drone_state); - } - else { - auto car = static_cast(vehicle_ros.get()); - auto rpc = static_cast(airsim_client_.get()); - car->curr_car_state = rpc->getCarState(vehicle_ros->vehicle_name); - - vehicle_time = airsim_timestamp_to_ros(car->curr_car_state.timestamp); - if (!got_sim_time) { - curr_ros_time = vehicle_time; - got_sim_time = true; - } - - vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(env_data.geo_point); - vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; - - vehicle_ros->curr_odom = get_odom_msg_from_car_state(car->curr_car_state); - - airsim_ros_pkgs::CarState state_msg = get_roscarstate_msg_from_car_state(car->curr_car_state); - state_msg.header.frame_id = vehicle_ros->vehicle_name; - car->car_state_msg = state_msg; - } - - vehicle_ros->stamp = vehicle_time; - - airsim_ros_pkgs::Environment env_msg = get_environment_msg_from_airsim(env_data); - env_msg.header.frame_id = vehicle_ros->vehicle_name; - env_msg.header.stamp = vehicle_time; - vehicle_ros->env_msg = env_msg; - - // convert airsim drone state to ROS msgs - vehicle_ros->curr_odom.header.frame_id = vehicle_ros->vehicle_name; - vehicle_ros->curr_odom.child_frame_id = vehicle_ros->odom_frame_id; - vehicle_ros->curr_odom.header.stamp = vehicle_time; - } - - return curr_ros_time; -} - -void AirsimROSWrapper::publish_vehicle_state() -{ - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - auto& vehicle_ros = vehicle_name_ptr_pair.second; - - // simulation environment truth - vehicle_ros->env_pub.publish(vehicle_ros->env_msg); - - if (airsim_mode_ == AIRSIM_MODE::CAR) { - // dashboard reading from car, RPM, gear, etc - auto car = static_cast(vehicle_ros.get()); - car->car_state_pub.publish(car->car_state_msg); - } - - // odom and transforms - vehicle_ros->odom_local_pub.publish(vehicle_ros->curr_odom); - publish_odom_tf(vehicle_ros->curr_odom); - - // ground truth GPS position from sim/HITL - vehicle_ros->global_gps_pub.publish(vehicle_ros->gps_sensor_msg); - - for (auto& sensor_publisher : vehicle_ros->sensor_pubs) { - switch (sensor_publisher.sensor_type) { - case SensorBase::SensorType::Barometer: { - auto baro_data = airsim_client_->getBarometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - airsim_ros_pkgs::Altimeter alt_msg = get_altimeter_msg_from_airsim(baro_data); - alt_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(alt_msg); - break; - } - case SensorBase::SensorType::Imu: { - auto imu_data = airsim_client_->getImuData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::Imu imu_msg = get_imu_msg_from_airsim(imu_data); - imu_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(imu_msg); - break; - } - case SensorBase::SensorType::Distance: { - auto distance_data = airsim_client_->getDistanceSensorData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::Range dist_msg = get_range_from_airsim(distance_data); - dist_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(dist_msg); - break; - } - case SensorBase::SensorType::Gps: { - auto gps_data = airsim_client_->getGpsData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::NavSatFix gps_msg = get_gps_msg_from_airsim(gps_data); - gps_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(gps_msg); - break; - } - case SensorBase::SensorType::Lidar: { - // handled via callback - break; - } - case SensorBase::SensorType::Magnetometer: { - auto mag_data = airsim_client_->getMagnetometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); - sensor_msgs::MagneticField mag_msg = get_mag_msg_from_airsim(mag_data); - mag_msg.header.frame_id = vehicle_ros->vehicle_name; - sensor_publisher.publisher.publish(mag_msg); - break; - } - } - } - - update_and_publish_static_transforms(vehicle_ros.get()); - } -} - -void AirsimROSWrapper::update_commands() -{ - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - auto& vehicle_ros = vehicle_name_ptr_pair.second; - - if (airsim_mode_ == AIRSIM_MODE::DRONE) { - auto drone = static_cast(vehicle_ros.get()); - - // send control commands from the last callback to airsim - if (drone->has_vel_cmd) { - std::lock_guard guard(drone_control_mutex_); - static_cast(airsim_client_.get())->moveByVelocityAsync(drone->vel_cmd.x, drone->vel_cmd.y, drone->vel_cmd.z, vel_cmd_duration_, msr::airlib::DrivetrainType::MaxDegreeOfFreedom, drone->vel_cmd.yaw_mode, drone->vehicle_name); - } - drone->has_vel_cmd = false; - } - else { - // send control commands from the last callback to airsim - auto car = static_cast(vehicle_ros.get()); - if (car->has_car_cmd) { - std::lock_guard guard(drone_control_mutex_); - static_cast(airsim_client_.get())->setCarControls(car->car_cmd, vehicle_ros->vehicle_name); - } - car->has_car_cmd = false; - } - } - - // Only camera rotation, no translation movement of camera - if (has_gimbal_cmd_) { - std::lock_guard guard(drone_control_mutex_); - airsim_client_->simSetCameraPose(gimbal_cmd_.camera_name, get_airlib_pose(0, 0, 0, gimbal_cmd_.target_quat), gimbal_cmd_.vehicle_name); - } - - has_gimbal_cmd_ = false; -} - -// airsim uses nans for zeros in settings.json. we set them to zeros here for handling tfs in ROS -void AirsimROSWrapper::set_nans_to_zeros_in_pose(VehicleSetting& vehicle_setting) const -{ - if (std::isnan(vehicle_setting.position.x())) - vehicle_setting.position.x() = 0.0; - - if (std::isnan(vehicle_setting.position.y())) - vehicle_setting.position.y() = 0.0; - - if (std::isnan(vehicle_setting.position.z())) - vehicle_setting.position.z() = 0.0; - - if (std::isnan(vehicle_setting.rotation.yaw)) - vehicle_setting.rotation.yaw = 0.0; - - if (std::isnan(vehicle_setting.rotation.pitch)) - vehicle_setting.rotation.pitch = 0.0; - - if (std::isnan(vehicle_setting.rotation.roll)) - vehicle_setting.rotation.roll = 0.0; -} - -// if any nan's in camera pose, set them to match vehicle pose (which has already converted any potential nans to zeros) -void AirsimROSWrapper::set_nans_to_zeros_in_pose(const VehicleSetting& vehicle_setting, CameraSetting& camera_setting) const -{ - if (std::isnan(camera_setting.position.x())) - camera_setting.position.x() = vehicle_setting.position.x(); - - if (std::isnan(camera_setting.position.y())) - camera_setting.position.y() = vehicle_setting.position.y(); - - if (std::isnan(camera_setting.position.z())) - camera_setting.position.z() = vehicle_setting.position.z(); - - if (std::isnan(camera_setting.rotation.yaw)) - camera_setting.rotation.yaw = vehicle_setting.rotation.yaw; - - if (std::isnan(camera_setting.rotation.pitch)) - camera_setting.rotation.pitch = vehicle_setting.rotation.pitch; - - if (std::isnan(camera_setting.rotation.roll)) - camera_setting.rotation.roll = vehicle_setting.rotation.roll; -} - -void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const VehicleSetting& vehicle_setting) -{ - geometry_msgs::TransformStamped vehicle_tf_msg; - vehicle_tf_msg.header.frame_id = world_frame_id_; - vehicle_tf_msg.header.stamp = ros::Time::now(); - vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name; - vehicle_tf_msg.transform.translation.x = vehicle_setting.position.x(); - vehicle_tf_msg.transform.translation.y = vehicle_setting.position.y(); - vehicle_tf_msg.transform.translation.z = vehicle_setting.position.z(); - tf2::Quaternion quat; - quat.setRPY(vehicle_setting.rotation.roll, vehicle_setting.rotation.pitch, vehicle_setting.rotation.yaw); - vehicle_tf_msg.transform.rotation.x = quat.x(); - vehicle_tf_msg.transform.rotation.y = quat.y(); - vehicle_tf_msg.transform.rotation.z = quat.z(); - vehicle_tf_msg.transform.rotation.w = quat.w(); - - if (isENU_) { - std::swap(vehicle_tf_msg.transform.translation.x, vehicle_tf_msg.transform.translation.y); - std::swap(vehicle_tf_msg.transform.rotation.x, vehicle_tf_msg.transform.rotation.y); - vehicle_tf_msg.transform.translation.z = -vehicle_tf_msg.transform.translation.z; - vehicle_tf_msg.transform.rotation.z = -vehicle_tf_msg.transform.rotation.z; - } - - vehicle_ros->static_tf_msg_vec.emplace_back(vehicle_tf_msg); -} - -void AirsimROSWrapper::append_static_lidar_tf(VehicleROS* vehicle_ros, const std::string& lidar_name, const msr::airlib::LidarSimpleParams& lidar_setting) -{ - geometry_msgs::TransformStamped lidar_tf_msg; - lidar_tf_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; - lidar_tf_msg.child_frame_id = vehicle_ros->vehicle_name + "/" + lidar_name; - lidar_tf_msg.transform.translation.x = lidar_setting.relative_pose.position.x(); - lidar_tf_msg.transform.translation.y = lidar_setting.relative_pose.position.y(); - lidar_tf_msg.transform.translation.z = lidar_setting.relative_pose.position.z(); - lidar_tf_msg.transform.rotation.x = lidar_setting.relative_pose.orientation.x(); - lidar_tf_msg.transform.rotation.y = lidar_setting.relative_pose.orientation.y(); - lidar_tf_msg.transform.rotation.z = lidar_setting.relative_pose.orientation.z(); - lidar_tf_msg.transform.rotation.w = lidar_setting.relative_pose.orientation.w(); - - if (isENU_) { - std::swap(lidar_tf_msg.transform.translation.x, lidar_tf_msg.transform.translation.y); - std::swap(lidar_tf_msg.transform.rotation.x, lidar_tf_msg.transform.rotation.y); - lidar_tf_msg.transform.translation.z = -lidar_tf_msg.transform.translation.z; - lidar_tf_msg.transform.rotation.z = -lidar_tf_msg.transform.rotation.z; - } - - vehicle_ros->static_tf_msg_vec.emplace_back(lidar_tf_msg); -} - -void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const std::string& camera_name, const CameraSetting& camera_setting) -{ - geometry_msgs::TransformStamped static_cam_tf_body_msg; - static_cam_tf_body_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; - static_cam_tf_body_msg.child_frame_id = camera_name + "_body/static"; - static_cam_tf_body_msg.transform.translation.x = camera_setting.position.x(); - static_cam_tf_body_msg.transform.translation.y = camera_setting.position.y(); - static_cam_tf_body_msg.transform.translation.z = camera_setting.position.z(); - tf2::Quaternion quat; - quat.setRPY(camera_setting.rotation.roll, camera_setting.rotation.pitch, camera_setting.rotation.yaw); - static_cam_tf_body_msg.transform.rotation.x = quat.x(); - static_cam_tf_body_msg.transform.rotation.y = quat.y(); - static_cam_tf_body_msg.transform.rotation.z = quat.z(); - static_cam_tf_body_msg.transform.rotation.w = quat.w(); - - if (isENU_) { - std::swap(static_cam_tf_body_msg.transform.translation.x, static_cam_tf_body_msg.transform.translation.y); - std::swap(static_cam_tf_body_msg.transform.rotation.x, static_cam_tf_body_msg.transform.rotation.y); - static_cam_tf_body_msg.transform.translation.z = -static_cam_tf_body_msg.transform.translation.z; - static_cam_tf_body_msg.transform.rotation.z = -static_cam_tf_body_msg.transform.rotation.z; - } - - geometry_msgs::TransformStamped static_cam_tf_optical_msg = static_cam_tf_body_msg; - static_cam_tf_optical_msg.child_frame_id = camera_name + "_optical/static"; - - tf2::Quaternion quat_cam_body; - tf2::Quaternion quat_cam_optical; - tf2::convert(static_cam_tf_body_msg.transform.rotation, quat_cam_body); - tf2::Matrix3x3 mat_cam_body(quat_cam_body); - tf2::Matrix3x3 mat_cam_optical; - mat_cam_optical.setValue(mat_cam_body.getColumn(1).getX(), mat_cam_body.getColumn(2).getX(), mat_cam_body.getColumn(0).getX(), mat_cam_body.getColumn(1).getY(), mat_cam_body.getColumn(2).getY(), mat_cam_body.getColumn(0).getY(), mat_cam_body.getColumn(1).getZ(), mat_cam_body.getColumn(2).getZ(), mat_cam_body.getColumn(0).getZ()); - mat_cam_optical.getRotation(quat_cam_optical); - quat_cam_optical.normalize(); - tf2::convert(quat_cam_optical, static_cam_tf_optical_msg.transform.rotation); - - vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_body_msg); - vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_optical_msg); -} - -void AirsimROSWrapper::img_response_timer_cb(const ros::TimerEvent& event) -{ - try { - int image_response_idx = 0; - for (const auto& airsim_img_request_vehicle_name_pair : airsim_img_request_vehicle_name_pair_vec_) { - const std::vector& img_response = airsim_client_images_.simGetImages(airsim_img_request_vehicle_name_pair.first, airsim_img_request_vehicle_name_pair.second); - - if (img_response.size() == airsim_img_request_vehicle_name_pair.first.size()) { - process_and_publish_img_response(img_response, image_response_idx, airsim_img_request_vehicle_name_pair.second); - image_response_idx += img_response.size(); - } - } - } - - catch (rpc::rpc_error& e) { - std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API, didn't get image response." << std::endl - << msg << std::endl; - } -} - -void AirsimROSWrapper::lidar_timer_cb(const ros::TimerEvent& event) -{ - try { - for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { - if (!vehicle_name_ptr_pair.second->lidar_pubs.empty()) { - for (auto& lidar_publisher : vehicle_name_ptr_pair.second->lidar_pubs) { - auto lidar_data = airsim_client_lidar_.getLidarData(lidar_publisher.sensor_name, vehicle_name_ptr_pair.first); - sensor_msgs::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first); - lidar_publisher.publisher.publish(lidar_msg); - } - } - } - } - catch (rpc::rpc_error& e) { - std::string msg = e.get_error().as(); - std::cout << "Exception raised by the API, didn't get image response." << std::endl - << msg << std::endl; - } -} - -cv::Mat AirsimROSWrapper::manual_decode_depth(const ImageResponse& img_response) const -{ - cv::Mat mat(img_response.height, img_response.width, CV_32FC1, cv::Scalar(0)); - int img_width = img_response.width; - - for (int row = 0; row < img_response.height; row++) - for (int col = 0; col < img_width; col++) - mat.at(row, col) = img_response.image_data_float[row * img_width + col]; - return mat; -} - -sensor_msgs::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, - const ros::Time curr_ros_time, - const std::string frame_id) -{ - sensor_msgs::ImagePtr img_msg_ptr = boost::make_shared(); - img_msg_ptr->data = img_response.image_data_uint8; - img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes - img_msg_ptr->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); - img_msg_ptr->header.frame_id = frame_id; - img_msg_ptr->height = img_response.height; - img_msg_ptr->width = img_response.width; - img_msg_ptr->encoding = "bgr8"; - if (is_vulkan_) - img_msg_ptr->encoding = "rgb8"; - img_msg_ptr->is_bigendian = 0; - return img_msg_ptr; -} - -sensor_msgs::ImagePtr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, - const ros::Time curr_ros_time, - const std::string frame_id) -{ - // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, - // hence the dependency on opencv and cv_bridge. however, this is an extremely fast op, so no big deal. - cv::Mat depth_img = manual_decode_depth(img_response); - sensor_msgs::ImagePtr depth_img_msg = cv_bridge::CvImage(std_msgs::Header(), "32FC1", depth_img).toImageMsg(); - depth_img_msg->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); - depth_img_msg->header.frame_id = frame_id; - return depth_img_msg; -} - -// todo have a special stereo pair mode and get projection matrix by calculating offset wrt drone body frame? -sensor_msgs::CameraInfo AirsimROSWrapper::generate_cam_info(const std::string& camera_name, - const CameraSetting& camera_setting, - const CaptureSetting& capture_setting) const -{ - sensor_msgs::CameraInfo cam_info_msg; - cam_info_msg.header.frame_id = camera_name + "_optical"; - cam_info_msg.height = capture_setting.height; - cam_info_msg.width = capture_setting.width; - float f_x = (capture_setting.width / 2.0) / tan(math_common::deg2rad(capture_setting.fov_degrees / 2.0)); - // todo focal length in Y direction should be same as X it seems. this can change in future a scene capture component which exactly correponds to a cine camera - // float f_y = (capture_setting.height / 2.0) / tan(math_common::deg2rad(fov_degrees / 2.0)); - cam_info_msg.K = { f_x, 0.0, capture_setting.width / 2.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 1.0 }; - cam_info_msg.P = { f_x, 0.0, capture_setting.width / 2.0, 0.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 0.0, 1.0, 0.0 }; - return cam_info_msg; -} - -void AirsimROSWrapper::process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name) -{ - // todo add option to use airsim time (image_response.TTimePoint) like Gazebo /use_sim_time param - ros::Time curr_ros_time = ros::Time::now(); - int img_response_idx_internal = img_response_idx; - - for (const auto& curr_img_response : img_response_vec) { - // todo publishing a tf for each capture type seems stupid. but it foolproofs us against render thread's async stuff, I hope. - // Ideally, we should loop over cameras and then captures, and publish only one tf. - publish_camera_tf(curr_img_response, curr_ros_time, vehicle_name, curr_img_response.camera_name); - - // todo simGetCameraInfo is wrong + also it's only for image type -1. - // msr::airlib::CameraInfo camera_info = airsim_client_.simGetCameraInfo(curr_img_response.camera_name); - - // update timestamp of saved cam info msgs - - camera_info_msg_vec_[img_response_idx_internal].header.stamp = airsim_timestamp_to_ros(curr_img_response.time_stamp); - cam_info_pub_vec_[img_response_idx_internal].publish(camera_info_msg_vec_[img_response_idx_internal]); - - // DepthPlanar / DepthPerspective / DepthVis / DisparityNormalized - if (curr_img_response.pixels_as_float) { - image_pub_vec_[img_response_idx_internal].publish(get_depth_img_msg_from_response(curr_img_response, - curr_ros_time, - curr_img_response.camera_name + "_optical")); - } - // Scene / Segmentation / SurfaceNormals / Infrared - else { - image_pub_vec_[img_response_idx_internal].publish(get_img_msg_from_response(curr_img_response, - curr_ros_time, - curr_img_response.camera_name + "_optical")); - } - img_response_idx_internal++; - } -} - -// publish camera transforms -// camera poses are obtained from airsim's client API which are in (local) NED frame. -// We first do a change of basis to camera optical frame (Z forward, X right, Y down) -void AirsimROSWrapper::publish_camera_tf(const ImageResponse& img_response, const ros::Time& ros_time, const std::string& frame_id, const std::string& child_frame_id) -{ - geometry_msgs::TransformStamped cam_tf_body_msg; - cam_tf_body_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); - cam_tf_body_msg.header.frame_id = frame_id; - cam_tf_body_msg.child_frame_id = child_frame_id + "_body"; - cam_tf_body_msg.transform.translation.x = img_response.camera_position.x(); - cam_tf_body_msg.transform.translation.y = img_response.camera_position.y(); - cam_tf_body_msg.transform.translation.z = img_response.camera_position.z(); - cam_tf_body_msg.transform.rotation.x = img_response.camera_orientation.x(); - cam_tf_body_msg.transform.rotation.y = img_response.camera_orientation.y(); - cam_tf_body_msg.transform.rotation.z = img_response.camera_orientation.z(); - cam_tf_body_msg.transform.rotation.w = img_response.camera_orientation.w(); - - if (isENU_) { - std::swap(cam_tf_body_msg.transform.translation.x, cam_tf_body_msg.transform.translation.y); - std::swap(cam_tf_body_msg.transform.rotation.x, cam_tf_body_msg.transform.rotation.y); - cam_tf_body_msg.transform.translation.z = -cam_tf_body_msg.transform.translation.z; - cam_tf_body_msg.transform.rotation.z = -cam_tf_body_msg.transform.rotation.z; - } - - geometry_msgs::TransformStamped cam_tf_optical_msg; - cam_tf_optical_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); - cam_tf_optical_msg.header.frame_id = frame_id; - cam_tf_optical_msg.child_frame_id = child_frame_id + "_optical"; - cam_tf_optical_msg.transform.translation.x = cam_tf_body_msg.transform.translation.x; - cam_tf_optical_msg.transform.translation.y = cam_tf_body_msg.transform.translation.y; - cam_tf_optical_msg.transform.translation.z = cam_tf_body_msg.transform.translation.z; - - tf2::Quaternion quat_cam_body; - tf2::Quaternion quat_cam_optical; - tf2::convert(cam_tf_body_msg.transform.rotation, quat_cam_body); - tf2::Matrix3x3 mat_cam_body(quat_cam_body); - // tf2::Matrix3x3 mat_cam_optical = matrix_cam_body_to_optical_ * mat_cam_body * matrix_cam_body_to_optical_inverse_; - // tf2::Matrix3x3 mat_cam_optical = matrix_cam_body_to_optical_ * mat_cam_body; - tf2::Matrix3x3 mat_cam_optical; - mat_cam_optical.setValue(mat_cam_body.getColumn(1).getX(), mat_cam_body.getColumn(2).getX(), mat_cam_body.getColumn(0).getX(), mat_cam_body.getColumn(1).getY(), mat_cam_body.getColumn(2).getY(), mat_cam_body.getColumn(0).getY(), mat_cam_body.getColumn(1).getZ(), mat_cam_body.getColumn(2).getZ(), mat_cam_body.getColumn(0).getZ()); - mat_cam_optical.getRotation(quat_cam_optical); - quat_cam_optical.normalize(); - tf2::convert(quat_cam_optical, cam_tf_optical_msg.transform.rotation); - - tf_broadcaster_.sendTransform(cam_tf_body_msg); - tf_broadcaster_.sendTransform(cam_tf_optical_msg); -} - -void AirsimROSWrapper::convert_yaml_to_simple_mat(const YAML::Node& node, SimpleMatrix& m) const -{ - int rows, cols; - rows = node["rows"].as(); - cols = node["cols"].as(); - const YAML::Node& data = node["data"]; - for (int i = 0; i < rows * cols; ++i) { - m.data[i] = data[i].as(); - } -} - -void AirsimROSWrapper::read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::CameraInfo& cam_info) const -{ - std::ifstream fin(file_name.c_str()); - YAML::Node doc = YAML::Load(fin); - - cam_info.width = doc[WIDTH_YML_NAME].as(); - cam_info.height = doc[HEIGHT_YML_NAME].as(); - - SimpleMatrix K_(3, 3, &cam_info.K[0]); - convert_yaml_to_simple_mat(doc[K_YML_NAME], K_); - SimpleMatrix R_(3, 3, &cam_info.R[0]); - convert_yaml_to_simple_mat(doc[R_YML_NAME], R_); - SimpleMatrix P_(3, 4, &cam_info.P[0]); - convert_yaml_to_simple_mat(doc[P_YML_NAME], P_); - - cam_info.distortion_model = doc[DMODEL_YML_NAME].as(); - - const YAML::Node& D_node = doc[D_YML_NAME]; - int D_rows, D_cols; - D_rows = D_node["rows"].as(); - D_cols = D_node["cols"].as(); - const YAML::Node& D_data = D_node["data"]; - cam_info.D.resize(D_rows * D_cols); - for (int i = 0; i < D_rows * D_cols; ++i) { - cam_info.D[i] = D_data[i].as(); - } +#include +#include +// #include +// PLUGINLIB_EXPORT_CLASS(AirsimROSWrapper, nodelet::Nodelet) +#include "common/AirSimSettings.hpp" +#include + +constexpr char AirsimROSWrapper::CAM_YML_NAME[]; +constexpr char AirsimROSWrapper::WIDTH_YML_NAME[]; +constexpr char AirsimROSWrapper::HEIGHT_YML_NAME[]; +constexpr char AirsimROSWrapper::K_YML_NAME[]; +constexpr char AirsimROSWrapper::D_YML_NAME[]; +constexpr char AirsimROSWrapper::R_YML_NAME[]; +constexpr char AirsimROSWrapper::P_YML_NAME[]; +constexpr char AirsimROSWrapper::DMODEL_YML_NAME[]; + +const std::unordered_map AirsimROSWrapper::image_type_int_to_string_map_ = { + { 0, "Scene" }, + { 1, "DepthPlanar" }, + { 2, "DepthPerspective" }, + { 3, "DepthVis" }, + { 4, "DisparityNormalized" }, + { 5, "Segmentation" }, + { 6, "SurfaceNormals" }, + { 7, "Infrared" } +}; + +AirsimROSWrapper::AirsimROSWrapper(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private, const std::string& host_ip) + : nh_(nh), nh_private_(nh_private), img_async_spinner_(1, &img_timer_cb_queue_), // a thread for image callbacks to be 'spun' by img_async_spinner_ + lidar_async_spinner_(1, &lidar_timer_cb_queue_) + , // same as above, but for lidar + host_ip_(host_ip) + , airsim_client_images_(host_ip) + , airsim_client_lidar_(host_ip) + , airsim_settings_parser_(host_ip) + , tf_listener_(tf_buffer_) +{ + ros_clock_.clock.fromSec(0); + is_used_lidar_timer_cb_queue_ = false; + is_used_img_timer_cb_queue_ = false; + + if (AirSimSettings::singleton().simmode_name != AirSimSettings::kSimModeTypeCar) { + airsim_mode_ = AIRSIM_MODE::DRONE; + ROS_INFO("Setting ROS wrapper to DRONE mode"); + } + else { + airsim_mode_ = AIRSIM_MODE::CAR; + ROS_INFO("Setting ROS wrapper to CAR mode"); + } + + initialize_ros(); + + std::cout << "AirsimROSWrapper Initialized!\n"; +} + +void AirsimROSWrapper::initialize_airsim() +{ + // todo do not reset if already in air? + try { + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + airsim_client_ = std::unique_ptr(new msr::airlib::MultirotorRpcLibClient(host_ip_)); + } + else { + airsim_client_ = std::unique_ptr(new msr::airlib::CarRpcLibClient(host_ip_)); + } + airsim_client_->confirmConnection(); + airsim_client_images_.confirmConnection(); + airsim_client_lidar_.confirmConnection(); + + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + airsim_client_->enableApiControl(true, vehicle_name_ptr_pair.first); // todo expose as rosservice? + airsim_client_->armDisarm(true, vehicle_name_ptr_pair.first); // todo exposes as rosservice? + } + + origin_geo_point_ = airsim_client_->getHomeGeoPoint(""); + // todo there's only one global origin geopoint for environment. but airsim API accept a parameter vehicle_name? inside carsimpawnapi.cpp, there's a geopoint being assigned in the constructor. by? + origin_geo_point_msg_ = get_gps_msg_from_airsim_geo_point(origin_geo_point_); + } + catch (rpc::rpc_error& e) { + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API, something went wrong." << std::endl + << msg << std::endl; + } +} + +void AirsimROSWrapper::initialize_ros() +{ + + // ros params + double update_airsim_control_every_n_sec; + nh_private_.getParam("is_vulkan", is_vulkan_); + nh_private_.getParam("update_airsim_control_every_n_sec", update_airsim_control_every_n_sec); + nh_private_.getParam("publish_clock", publish_clock_); + nh_private_.param("world_frame_id", world_frame_id_, world_frame_id_); + odom_frame_id_ = world_frame_id_ == AIRSIM_FRAME_ID ? AIRSIM_ODOM_FRAME_ID : ENU_ODOM_FRAME_ID; + nh_private_.param("odom_frame_id", odom_frame_id_, odom_frame_id_); + isENU_ = !(odom_frame_id_ == AIRSIM_ODOM_FRAME_ID); + nh_private_.param("coordinate_system_enu", isENU_, isENU_); + vel_cmd_duration_ = 0.05; // todo rosparam + // todo enforce dynamics constraints in this node as well? + // nh_.getParam("max_vert_vel_", max_vert_vel_); + // nh_.getParam("max_horz_vel", max_horz_vel_) + + create_ros_pubs_from_settings_json(); + airsim_control_update_timer_ = nh_private_.createTimer(ros::Duration(update_airsim_control_every_n_sec), &AirsimROSWrapper::drone_state_timer_cb, this); +} + +// XmlRpc::XmlRpcValue can't be const in this case +void AirsimROSWrapper::create_ros_pubs_from_settings_json() +{ + // subscribe to control commands on global nodehandle + gimbal_angle_quat_cmd_sub_ = nh_private_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); + gimbal_angle_euler_cmd_sub_ = nh_private_.subscribe("gimbal_angle_euler_cmd", 50, &AirsimROSWrapper::gimbal_angle_euler_cmd_cb, this); + origin_geo_point_pub_ = nh_private_.advertise("origin_geo_point", 10); + + airsim_img_request_vehicle_name_pair_vec_.clear(); + image_pub_vec_.clear(); + cam_info_pub_vec_.clear(); + camera_info_msg_vec_.clear(); + vehicle_name_ptr_map_.clear(); + size_t lidar_cnt = 0; + + image_transport::ImageTransport image_transporter(nh_private_); + + // iterate over std::map> vehicles; + for (const auto& curr_vehicle_elem : AirSimSettings::singleton().vehicles) { + auto& vehicle_setting = curr_vehicle_elem.second; + auto curr_vehicle_name = curr_vehicle_elem.first; + + nh_.setParam("/vehicle_name", curr_vehicle_name); + + set_nans_to_zeros_in_pose(*vehicle_setting); + + std::unique_ptr vehicle_ros = nullptr; + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + vehicle_ros = std::unique_ptr(new MultiRotorROS()); + } + else { + vehicle_ros = std::unique_ptr(new CarROS()); + } + + vehicle_ros->odom_frame_id = curr_vehicle_name + "/" + odom_frame_id_; + vehicle_ros->vehicle_name = curr_vehicle_name; + + append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); + + vehicle_ros->odom_local_pub = nh_private_.advertise(curr_vehicle_name + "/" + odom_frame_id_, 10); + + vehicle_ros->env_pub = nh_private_.advertise(curr_vehicle_name + "/environment", 10); + + vehicle_ros->global_gps_pub = nh_private_.advertise(curr_vehicle_name + "/global_gps", 10); + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + auto drone = static_cast(vehicle_ros.get()); + + // bind to a single callback. todo optimal subs queue length + // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument + drone->vel_cmd_body_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_body_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name)); // todo ros::TransportHints().tcpNoDelay(); + drone->vel_cmd_world_frame_sub = nh_private_.subscribe(curr_vehicle_name + "/vel_cmd_world_frame", 1, boost::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name)); + + drone->takeoff_srvr = nh_private_.advertiseService(curr_vehicle_name + "/takeoff", + boost::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); + drone->land_srvr = nh_private_.advertiseService(curr_vehicle_name + "/land", + boost::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name)); + // vehicle_ros.reset_srvr = nh_private_.advertiseService(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); + } + else { + auto car = static_cast(vehicle_ros.get()); + car->car_cmd_sub = nh_private_.subscribe(curr_vehicle_name + "/car_cmd", 1, boost::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name)); + car->car_state_pub = nh_private_.advertise(curr_vehicle_name + "/car_state", 10); + } + + // iterate over camera map std::map .cameras; + for (auto& curr_camera_elem : vehicle_setting->cameras) { + auto& camera_setting = curr_camera_elem.second; + auto& curr_camera_name = curr_camera_elem.first; + + set_nans_to_zeros_in_pose(*vehicle_setting, camera_setting); + append_static_camera_tf(vehicle_ros.get(), curr_camera_name, camera_setting); + // camera_setting.gimbal + std::vector current_image_request_vec; + current_image_request_vec.clear(); + + // iterate over capture_setting std::map capture_settings + for (const auto& curr_capture_elem : camera_setting.capture_settings) { + auto& capture_setting = curr_capture_elem.second; + + // todo why does AirSimSettings::loadCaptureSettings calls AirSimSettings::initializeCaptureSettings() + // which initializes default capture settings for _all_ NINE msr::airlib::ImageCaptureBase::ImageType + if (!(std::isnan(capture_setting.fov_degrees))) { + ImageType curr_image_type = msr::airlib::Utils::toEnum(capture_setting.image_type); + // if scene / segmentation / surface normals / infrared, get uncompressed image with pixels_as_floats = false + if (capture_setting.image_type == 0 || capture_setting.image_type == 5 || capture_setting.image_type == 6 || capture_setting.image_type == 7) { + current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, false, false)); + } + // if {DepthPlanar, DepthPerspective,DepthVis, DisparityNormalized}, get float image + else { + current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, true)); + } + + image_pub_vec_.push_back(image_transporter.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type), 1)); + cam_info_pub_vec_.push_back(nh_private_.advertise(curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); + camera_info_msg_vec_.push_back(generate_cam_info(curr_camera_name, camera_setting, capture_setting)); + } + } + // push back pair (vector of image captures, current vehicle name) + airsim_img_request_vehicle_name_pair_vec_.push_back(std::make_pair(current_image_request_vec, curr_vehicle_name)); + } + + // iterate over sensors + std::vector sensors; + for (auto& curr_sensor_map : vehicle_setting->sensors) { + auto& sensor_name = curr_sensor_map.first; + auto& sensor_setting = curr_sensor_map.second; + + if (sensor_setting->enabled) { + SensorPublisher sensor_publisher; + sensor_publisher.sensor_name = sensor_setting->sensor_name; + sensor_publisher.sensor_type = sensor_setting->sensor_type; + switch (sensor_setting->sensor_type) { + case SensorBase::SensorType::Barometer: { + std::cout << "Barometer" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/altimeter/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Imu: { + std::cout << "Imu" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/imu/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Gps: { + std::cout << "Gps" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/gps/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Magnetometer: { + std::cout << "Magnetometer" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/magnetometer/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Distance: { + std::cout << "Distance" << std::endl; + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/distance/" + sensor_name, 10); + break; + } + case SensorBase::SensorType::Lidar: { + std::cout << "Lidar" << std::endl; + auto lidar_setting = *static_cast(sensor_setting.get()); + msr::airlib::LidarSimpleParams params; + params.initializeFromSettings(lidar_setting); + append_static_lidar_tf(vehicle_ros.get(), sensor_name, params); + sensor_publisher.publisher = nh_private_.advertise(curr_vehicle_name + "/lidar/" + sensor_name, 10); + break; + } + default: { + throw std::invalid_argument("Unexpected sensor type"); + } + } + sensors.emplace_back(sensor_publisher); + } + } + + // we want fast access to the lidar sensors for callback handling, sort them out now + auto isLidar = std::function([](const SensorPublisher& pub) { + return pub.sensor_type == SensorBase::SensorType::Lidar; + }); + size_t cnt = std::count_if(sensors.begin(), sensors.end(), isLidar); + lidar_cnt += cnt; + vehicle_ros->lidar_pubs.resize(cnt); + vehicle_ros->sensor_pubs.resize(sensors.size() - cnt); + std::partition_copy(sensors.begin(), sensors.end(), vehicle_ros->lidar_pubs.begin(), vehicle_ros->sensor_pubs.begin(), isLidar); + + vehicle_name_ptr_map_.emplace(curr_vehicle_name, std::move(vehicle_ros)); // allows fast lookup in command callbacks in case of a lot of drones + } + + // add takeoff and land all services if more than 2 drones + if (vehicle_name_ptr_map_.size() > 1 && airsim_mode_ == AIRSIM_MODE::DRONE) { + takeoff_all_srvr_ = nh_private_.advertiseService("all_robots/takeoff", &AirsimROSWrapper::takeoff_all_srv_cb, this); + land_all_srvr_ = nh_private_.advertiseService("all_robots/land", &AirsimROSWrapper::land_all_srv_cb, this); + + // gimbal_angle_quat_cmd_sub_ = nh_.subscribe("gimbal_angle_quat_cmd", 50, &AirsimROSWrapper::gimbal_angle_quat_cmd_cb, this); + + vel_cmd_all_body_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_all_body_frame_cb, this); + vel_cmd_all_world_frame_sub_ = nh_private_.subscribe("all_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_all_world_frame_cb, this); + + vel_cmd_group_body_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_body_frame", 1, &AirsimROSWrapper::vel_cmd_group_body_frame_cb, this); + vel_cmd_group_world_frame_sub_ = nh_private_.subscribe("group_of_robots/vel_cmd_world_frame", 1, &AirsimROSWrapper::vel_cmd_group_world_frame_cb, this); + + takeoff_group_srvr_ = nh_private_.advertiseService("group_of_robots/takeoff", &AirsimROSWrapper::takeoff_group_srv_cb, this); + land_group_srvr_ = nh_private_.advertiseService("group_of_robots/land", &AirsimROSWrapper::land_group_srv_cb, this); + } + + // todo add per vehicle reset in AirLib API + reset_srvr_ = nh_private_.advertiseService("reset", &AirsimROSWrapper::reset_srv_cb, this); + + if (publish_clock_) { + clock_pub_ = nh_private_.advertise("clock", 1); + } + + // if >0 cameras, add one more thread for img_request_timer_cb + if (!airsim_img_request_vehicle_name_pair_vec_.empty()) { + double update_airsim_img_response_every_n_sec; + nh_private_.getParam("update_airsim_img_response_every_n_sec", update_airsim_img_response_every_n_sec); + + ros::TimerOptions timer_options(ros::Duration(update_airsim_img_response_every_n_sec), boost::bind(&AirsimROSWrapper::img_response_timer_cb, this, _1), &img_timer_cb_queue_); + airsim_img_response_timer_ = nh_private_.createTimer(timer_options); + is_used_img_timer_cb_queue_ = true; + } + + // lidars update on their own callback/thread at a given rate + if (lidar_cnt > 0) { + double update_lidar_every_n_sec; + nh_private_.getParam("update_lidar_every_n_sec", update_lidar_every_n_sec); + // nh_private_.setCallbackQueue(&lidar_timer_cb_queue_); + ros::TimerOptions timer_options(ros::Duration(update_lidar_every_n_sec), boost::bind(&AirsimROSWrapper::lidar_timer_cb, this, _1), &lidar_timer_cb_queue_); + airsim_lidar_update_timer_ = nh_private_.createTimer(timer_options); + is_used_lidar_timer_cb_queue_ = true; + } + + initialize_airsim(); +} + +// todo: error check. if state is not landed, return error. +bool AirsimROSWrapper::takeoff_srv_cb(airsim_ros_pkgs::Takeoff::Request& request, airsim_ros_pkgs::Takeoff::Response& response, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? + // response.success = + else + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); + // response.success = + + return true; +} + +bool AirsimROSWrapper::takeoff_group_srv_cb(airsim_ros_pkgs::TakeoffGroup::Request& request, airsim_ros_pkgs::TakeoffGroup::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name)->waitOnLastTask(); // todo value for timeout_sec? + // response.success = + else + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name); + // response.success = + + return true; +} + +bool AirsimROSWrapper::takeoff_all_srv_cb(airsim_ros_pkgs::Takeoff::Request& request, airsim_ros_pkgs::Takeoff::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first)->waitOnLastTask(); // todo value for timeout_sec? + // response.success = + else + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->takeoffAsync(20, vehicle_name_ptr_pair.first); + // response.success = + + return true; +} + +bool AirsimROSWrapper::land_srv_cb(airsim_ros_pkgs::Land::Request& request, airsim_ros_pkgs::Land::Response& response, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); + else + static_cast(airsim_client_.get())->landAsync(60, vehicle_name); + + return true; //todo +} + +bool AirsimROSWrapper::land_group_srv_cb(airsim_ros_pkgs::LandGroup::Request& request, airsim_ros_pkgs::LandGroup::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name)->waitOnLastTask(); + else + for (const auto& vehicle_name : request.vehicle_names) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name); + + return true; //todo +} + +bool AirsimROSWrapper::land_all_srv_cb(airsim_ros_pkgs::Land::Request& request, airsim_ros_pkgs::Land::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + if (request.waitOnLastTask) + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name_ptr_pair.first)->waitOnLastTask(); + else + for (const auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) + static_cast(airsim_client_.get())->landAsync(60, vehicle_name_ptr_pair.first); + + return true; //todo +} + +// todo add reset by vehicle_name API to airlib +// todo not async remove waitonlasttask +bool AirsimROSWrapper::reset_srv_cb(airsim_ros_pkgs::Reset::Request& request, airsim_ros_pkgs::Reset::Response& response) +{ + std::lock_guard guard(drone_control_mutex_); + + airsim_client_.reset(); + return true; //todo +} + +tf2::Quaternion AirsimROSWrapper::get_tf2_quat(const msr::airlib::Quaternionr& airlib_quat) const +{ + return tf2::Quaternion(airlib_quat.x(), airlib_quat.y(), airlib_quat.z(), airlib_quat.w()); +} + +msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const geometry_msgs::Quaternion& geometry_msgs_quat) const +{ + return msr::airlib::Quaternionr(geometry_msgs_quat.w, geometry_msgs_quat.x, geometry_msgs_quat.y, geometry_msgs_quat.z); +} + +msr::airlib::Quaternionr AirsimROSWrapper::get_airlib_quat(const tf2::Quaternion& tf2_quat) const +{ + return msr::airlib::Quaternionr(tf2_quat.w(), tf2_quat.x(), tf2_quat.y(), tf2_quat.z()); +} + +void AirsimROSWrapper::car_cmd_cb(const airsim_ros_pkgs::CarControls::ConstPtr& msg, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + auto car = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + car->car_cmd.throttle = msg->throttle; + car->car_cmd.steering = msg->steering; + car->car_cmd.brake = msg->brake; + car->car_cmd.handbrake = msg->handbrake; + car->car_cmd.is_manual_gear = msg->manual; + car->car_cmd.manual_gear = msg->manual_gear; + car->car_cmd.gear_immediate = msg->gear_immediate; + + car->has_car_cmd = true; +} + +msr::airlib::Pose AirsimROSWrapper::get_airlib_pose(const float& x, const float& y, const float& z, const msr::airlib::Quaternionr& airlib_quat) const +{ + return msr::airlib::Pose(msr::airlib::Vector3r(x, y, z), airlib_quat); +} + +// void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_ros_pkgs::VelCmd& msg, const std::string& vehicle_name) +void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + double roll, pitch, yaw; + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + + // todo do actual body frame? + drone->vel_cmd.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd.z = msg->twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + // airsim uses degrees + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd = true; +} + +void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_ros_pkgs::VelCmdGroup& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + for (const auto& vehicle_name : msg.vehicle_names) { + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + double roll, pitch, yaw; + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + + // todo do actual body frame? + drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + // airsim uses degrees + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +// void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg) +void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_ros_pkgs::VelCmd& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + // todo expose waitOnLastTask or nah? + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto drone = static_cast(vehicle_name_ptr_pair.second.get()); + + double roll, pitch, yaw; + tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw + + // todo do actual body frame? + drone->vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + drone->vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + // airsim uses degrees + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_ros_pkgs::VelCmd::ConstPtr& msg, const std::string& vehicle_name) +{ + std::lock_guard guard(drone_control_mutex_); + + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + drone->vel_cmd.x = msg->twist.linear.x; + drone->vel_cmd.y = msg->twist.linear.y; + drone->vel_cmd.z = msg->twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->has_vel_cmd = true; +} + +// this is kinda unnecessary but maybe it makes life easier for the end user. +void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_ros_pkgs::VelCmdGroup& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + for (const auto& vehicle_name : msg.vehicle_names) { + auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); + + drone->vel_cmd.x = msg.twist.linear.x; + drone->vel_cmd.y = msg.twist.linear.y; + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_ros_pkgs::VelCmd& msg) +{ + std::lock_guard guard(drone_control_mutex_); + + // todo expose waitOnLastTask or nah? + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto drone = static_cast(vehicle_name_ptr_pair.second.get()); + + drone->vel_cmd.x = msg.twist.linear.x; + drone->vel_cmd.y = msg.twist.linear.y; + drone->vel_cmd.z = msg.twist.linear.z; + drone->vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + drone->vel_cmd.yaw_mode.is_rate = true; + drone->vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + drone->has_vel_cmd = true; + } +} + +// todo support multiple gimbal commands +void AirsimROSWrapper::gimbal_angle_quat_cmd_cb(const airsim_ros_pkgs::GimbalAngleQuatCmd& gimbal_angle_quat_cmd_msg) +{ + tf2::Quaternion quat_control_cmd; + try { + tf2::convert(gimbal_angle_quat_cmd_msg.orientation, quat_control_cmd); + quat_control_cmd.normalize(); + gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); // airsim uses wxyz + gimbal_cmd_.camera_name = gimbal_angle_quat_cmd_msg.camera_name; + gimbal_cmd_.vehicle_name = gimbal_angle_quat_cmd_msg.vehicle_name; + has_gimbal_cmd_ = true; + } + catch (tf2::TransformException& ex) { + ROS_WARN("%s", ex.what()); + } +} + +// todo support multiple gimbal commands +// 1. find quaternion of default gimbal pose +// 2. forward multiply with quaternion equivalent to desired euler commands (in degrees) +// 3. call airsim client's setCameraPose which sets camera pose wrt world (or takeoff?) ned frame. todo +void AirsimROSWrapper::gimbal_angle_euler_cmd_cb(const airsim_ros_pkgs::GimbalAngleEulerCmd& gimbal_angle_euler_cmd_msg) +{ + try { + tf2::Quaternion quat_control_cmd; + quat_control_cmd.setRPY(math_common::deg2rad(gimbal_angle_euler_cmd_msg.roll), math_common::deg2rad(gimbal_angle_euler_cmd_msg.pitch), math_common::deg2rad(gimbal_angle_euler_cmd_msg.yaw)); + quat_control_cmd.normalize(); + gimbal_cmd_.target_quat = get_airlib_quat(quat_control_cmd); + gimbal_cmd_.camera_name = gimbal_angle_euler_cmd_msg.camera_name; + gimbal_cmd_.vehicle_name = gimbal_angle_euler_cmd_msg.vehicle_name; + has_gimbal_cmd_ = true; + } + catch (tf2::TransformException& ex) { + ROS_WARN("%s", ex.what()); + } +} + +airsim_ros_pkgs::CarState AirsimROSWrapper::get_roscarstate_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const +{ + airsim_ros_pkgs::CarState state_msg; + const auto odo = get_odom_msg_from_car_state(car_state); + + state_msg.pose = odo.pose; + state_msg.twist = odo.twist; + state_msg.speed = car_state.speed; + state_msg.gear = car_state.gear; + state_msg.rpm = car_state.rpm; + state_msg.maxrpm = car_state.maxrpm; + state_msg.handbrake = car_state.handbrake; + state_msg.header.stamp = airsim_timestamp_to_ros(car_state.timestamp); + + return state_msg; +} + +nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_car_state(const msr::airlib::CarApiBase::CarState& car_state) const +{ + nav_msgs::Odometry odom_msg; + + odom_msg.pose.pose.position.x = car_state.getPosition().x(); + odom_msg.pose.pose.position.y = car_state.getPosition().y(); + odom_msg.pose.pose.position.z = car_state.getPosition().z(); + odom_msg.pose.pose.orientation.x = car_state.getOrientation().x(); + odom_msg.pose.pose.orientation.y = car_state.getOrientation().y(); + odom_msg.pose.pose.orientation.z = car_state.getOrientation().z(); + odom_msg.pose.pose.orientation.w = car_state.getOrientation().w(); + + odom_msg.twist.twist.linear.x = car_state.kinematics_estimated.twist.linear.x(); + odom_msg.twist.twist.linear.y = car_state.kinematics_estimated.twist.linear.y(); + odom_msg.twist.twist.linear.z = car_state.kinematics_estimated.twist.linear.z(); + odom_msg.twist.twist.angular.x = car_state.kinematics_estimated.twist.angular.x(); + odom_msg.twist.twist.angular.y = car_state.kinematics_estimated.twist.angular.y(); + odom_msg.twist.twist.angular.z = car_state.kinematics_estimated.twist.angular.z(); + + if (isENU_) { + std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); + odom_msg.pose.pose.position.z = -odom_msg.pose.pose.position.z; + std::swap(odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y); + odom_msg.pose.pose.orientation.z = -odom_msg.pose.pose.orientation.z; + std::swap(odom_msg.twist.twist.linear.x, odom_msg.twist.twist.linear.y); + odom_msg.twist.twist.linear.z = -odom_msg.twist.twist.linear.z; + std::swap(odom_msg.twist.twist.angular.x, odom_msg.twist.twist.angular.y); + odom_msg.twist.twist.angular.z = -odom_msg.twist.twist.angular.z; + } + + return odom_msg; +} + +nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(const msr::airlib::MultirotorState& drone_state) const +{ + nav_msgs::Odometry odom_msg; + + odom_msg.pose.pose.position.x = drone_state.getPosition().x(); + odom_msg.pose.pose.position.y = drone_state.getPosition().y(); + odom_msg.pose.pose.position.z = drone_state.getPosition().z(); + odom_msg.pose.pose.orientation.x = drone_state.getOrientation().x(); + odom_msg.pose.pose.orientation.y = drone_state.getOrientation().y(); + odom_msg.pose.pose.orientation.z = drone_state.getOrientation().z(); + odom_msg.pose.pose.orientation.w = drone_state.getOrientation().w(); + + odom_msg.twist.twist.linear.x = drone_state.kinematics_estimated.twist.linear.x(); + odom_msg.twist.twist.linear.y = drone_state.kinematics_estimated.twist.linear.y(); + odom_msg.twist.twist.linear.z = drone_state.kinematics_estimated.twist.linear.z(); + odom_msg.twist.twist.angular.x = drone_state.kinematics_estimated.twist.angular.x(); + odom_msg.twist.twist.angular.y = drone_state.kinematics_estimated.twist.angular.y(); + odom_msg.twist.twist.angular.z = drone_state.kinematics_estimated.twist.angular.z(); + + if (isENU_) { + std::swap(odom_msg.pose.pose.position.x, odom_msg.pose.pose.position.y); + odom_msg.pose.pose.position.z = -odom_msg.pose.pose.position.z; + std::swap(odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y); + odom_msg.pose.pose.orientation.z = -odom_msg.pose.pose.orientation.z; + std::swap(odom_msg.twist.twist.linear.x, odom_msg.twist.twist.linear.y); + odom_msg.twist.twist.linear.z = -odom_msg.twist.twist.linear.z; + std::swap(odom_msg.twist.twist.angular.x, odom_msg.twist.twist.angular.y); + odom_msg.twist.twist.angular.z = -odom_msg.twist.twist.angular.z; + } + + return odom_msg; +} + +// https://docs.ros.org/jade/api/sensor_msgs/html/point__cloud__conversion_8h_source.html#l00066 +// look at UnrealLidarSensor.cpp UnrealLidarSensor::getPointCloud() for math +// read this carefully https://docs.ros.org/kinetic/api/sensor_msgs/html/msg/PointCloud2.html +sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const +{ + sensor_msgs::PointCloud2 lidar_msg; + lidar_msg.header.stamp = ros::Time::now(); + lidar_msg.header.frame_id = vehicle_name; + + if (lidar_data.point_cloud.size() > 3) { + lidar_msg.height = 1; + lidar_msg.width = lidar_data.point_cloud.size() / 3; + + lidar_msg.fields.resize(3); + lidar_msg.fields[0].name = "x"; + lidar_msg.fields[1].name = "y"; + lidar_msg.fields[2].name = "z"; + + int offset = 0; + + for (size_t d = 0; d < lidar_msg.fields.size(); ++d, offset += 4) { + lidar_msg.fields[d].offset = offset; + lidar_msg.fields[d].datatype = sensor_msgs::PointField::FLOAT32; + lidar_msg.fields[d].count = 1; + } + + lidar_msg.is_bigendian = false; + lidar_msg.point_step = offset; // 4 * num fields + lidar_msg.row_step = lidar_msg.point_step * lidar_msg.width; + + lidar_msg.is_dense = true; // todo + std::vector data_std = lidar_data.point_cloud; + + const unsigned char* bytes = reinterpret_cast(data_std.data()); + vector lidar_msg_data(bytes, bytes + sizeof(float) * data_std.size()); + lidar_msg.data = std::move(lidar_msg_data); + } + else { + // msg = [] + } + + if (isENU_) { + try { + sensor_msgs::PointCloud2 lidar_msg_enu; + auto transformStampedENU = tf_buffer_.lookupTransform(AIRSIM_FRAME_ID, vehicle_name, ros::Time(0), ros::Duration(1)); + tf2::doTransform(lidar_msg, lidar_msg_enu, transformStampedENU); + + lidar_msg_enu.header.stamp = lidar_msg.header.stamp; + lidar_msg_enu.header.frame_id = lidar_msg.header.frame_id; + + lidar_msg = std::move(lidar_msg_enu); + } + catch (tf2::TransformException& ex) { + ROS_WARN("%s", ex.what()); + ros::Duration(1.0).sleep(); + } + } + + return lidar_msg; +} + +airsim_ros_pkgs::Environment AirsimROSWrapper::get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const +{ + airsim_ros_pkgs::Environment env_msg; + env_msg.position.x = env_data.position.x(); + env_msg.position.y = env_data.position.y(); + env_msg.position.z = env_data.position.z(); + env_msg.geo_point.latitude = env_data.geo_point.latitude; + env_msg.geo_point.longitude = env_data.geo_point.longitude; + env_msg.geo_point.altitude = env_data.geo_point.altitude; + env_msg.gravity.x = env_data.gravity.x(); + env_msg.gravity.y = env_data.gravity.y(); + env_msg.gravity.z = env_data.gravity.z(); + env_msg.air_pressure = env_data.air_pressure; + env_msg.temperature = env_data.temperature; + env_msg.air_density = env_data.temperature; + + return env_msg; +} + +sensor_msgs::MagneticField AirsimROSWrapper::get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const +{ + sensor_msgs::MagneticField mag_msg; + mag_msg.magnetic_field.x = mag_data.magnetic_field_body.x(); + mag_msg.magnetic_field.y = mag_data.magnetic_field_body.y(); + mag_msg.magnetic_field.z = mag_data.magnetic_field_body.z(); + std::copy(std::begin(mag_data.magnetic_field_covariance), + std::end(mag_data.magnetic_field_covariance), + std::begin(mag_msg.magnetic_field_covariance)); + mag_msg.header.stamp = airsim_timestamp_to_ros(mag_data.time_stamp); + + return mag_msg; +} + +// todo covariances +sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const +{ + sensor_msgs::NavSatFix gps_msg; + gps_msg.header.stamp = airsim_timestamp_to_ros(gps_data.time_stamp); + gps_msg.latitude = gps_data.gnss.geo_point.latitude; + gps_msg.longitude = gps_data.gnss.geo_point.longitude; + gps_msg.altitude = gps_data.gnss.geo_point.altitude; + gps_msg.status.service = sensor_msgs::NavSatStatus::SERVICE_GLONASS; + gps_msg.status.status = gps_data.gnss.fix_type; + // gps_msg.position_covariance_type = + // gps_msg.position_covariance = + + return gps_msg; +} + +sensor_msgs::Range AirsimROSWrapper::get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const +{ + sensor_msgs::Range dist_msg; + dist_msg.header.stamp = airsim_timestamp_to_ros(dist_data.time_stamp); + dist_msg.range = dist_data.distance; + dist_msg.min_range = dist_data.min_distance; + dist_msg.max_range = dist_data.min_distance; + + return dist_msg; +} + +airsim_ros_pkgs::Altimeter AirsimROSWrapper::get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const +{ + airsim_ros_pkgs::Altimeter alt_msg; + alt_msg.header.stamp = airsim_timestamp_to_ros(alt_data.time_stamp); + alt_msg.altitude = alt_data.altitude; + alt_msg.pressure = alt_data.pressure; + alt_msg.qnh = alt_data.qnh; + + return alt_msg; +} + +// todo covariances +sensor_msgs::Imu AirsimROSWrapper::get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const +{ + sensor_msgs::Imu imu_msg; + // imu_msg.header.frame_id = "/airsim/odom_local_ned";// todo multiple drones + imu_msg.header.stamp = airsim_timestamp_to_ros(imu_data.time_stamp); + imu_msg.orientation.x = imu_data.orientation.x(); + imu_msg.orientation.y = imu_data.orientation.y(); + imu_msg.orientation.z = imu_data.orientation.z(); + imu_msg.orientation.w = imu_data.orientation.w(); + + // todo radians per second + imu_msg.angular_velocity.x = imu_data.angular_velocity.x(); + imu_msg.angular_velocity.y = imu_data.angular_velocity.y(); + imu_msg.angular_velocity.z = imu_data.angular_velocity.z(); + + // meters/s2^m + imu_msg.linear_acceleration.x = imu_data.linear_acceleration.x(); + imu_msg.linear_acceleration.y = imu_data.linear_acceleration.y(); + imu_msg.linear_acceleration.z = imu_data.linear_acceleration.z(); + + // imu_msg.orientation_covariance = ; + // imu_msg.angular_velocity_covariance = ; + // imu_msg.linear_acceleration_covariance = ; + + return imu_msg; +} + +void AirsimROSWrapper::publish_odom_tf(const nav_msgs::Odometry& odom_msg) +{ + geometry_msgs::TransformStamped odom_tf; + odom_tf.header = odom_msg.header; + odom_tf.child_frame_id = odom_msg.child_frame_id; + odom_tf.transform.translation.x = odom_msg.pose.pose.position.x; + odom_tf.transform.translation.y = odom_msg.pose.pose.position.y; + odom_tf.transform.translation.z = odom_msg.pose.pose.position.z; + odom_tf.transform.rotation.x = odom_msg.pose.pose.orientation.x; + odom_tf.transform.rotation.y = odom_msg.pose.pose.orientation.y; + odom_tf.transform.rotation.z = odom_msg.pose.pose.orientation.z; + odom_tf.transform.rotation.w = odom_msg.pose.pose.orientation.w; + tf_broadcaster_.sendTransform(odom_tf); +} + +airsim_ros_pkgs::GPSYaw AirsimROSWrapper::get_gps_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const +{ + airsim_ros_pkgs::GPSYaw gps_msg; + gps_msg.latitude = geo_point.latitude; + gps_msg.longitude = geo_point.longitude; + gps_msg.altitude = geo_point.altitude; + return gps_msg; +} + +sensor_msgs::NavSatFix AirsimROSWrapper::get_gps_sensor_msg_from_airsim_geo_point(const msr::airlib::GeoPoint& geo_point) const +{ + sensor_msgs::NavSatFix gps_msg; + gps_msg.latitude = geo_point.latitude; + gps_msg.longitude = geo_point.longitude; + gps_msg.altitude = geo_point.altitude; + return gps_msg; +} + +ros::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const +{ + auto dur = std::chrono::duration(stamp.time_since_epoch()); + ros::Time cur_time; + cur_time.fromSec(dur.count()); + return cur_time; +} + +ros::Time AirsimROSWrapper::airsim_timestamp_to_ros(const msr::airlib::TTimePoint& stamp) const +{ + // airsim appears to use chrono::system_clock with nanosecond precision + std::chrono::nanoseconds dur(stamp); + std::chrono::time_point tp(dur); + ros::Time cur_time = chrono_timestamp_to_ros(tp); + return cur_time; +} + +void AirsimROSWrapper::drone_state_timer_cb(const ros::TimerEvent& event) +{ + try { + // todo this is global origin + origin_geo_point_pub_.publish(origin_geo_point_msg_); + + // get the basic vehicle pose and environmental state + const auto now = update_state(); + + // on init, will publish 0 to /clock as expected for use_sim_time compatibility + if (!airsim_client_->simIsPaused()) { + // airsim_client needs to provide the simulation time in a future version of the API + ros_clock_.clock = now; + } + // publish the simulation clock + if (publish_clock_) { + clock_pub_.publish(ros_clock_); + } + + // publish vehicle state, odom, and all basic sensor types + publish_vehicle_state(); + + // send any commands out to the vehicles + update_commands(); + } + catch (rpc::rpc_error& e) { + std::cout << "error" << std::endl; + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API:" << std::endl + << msg << std::endl; + } +} + +void AirsimROSWrapper::update_and_publish_static_transforms(VehicleROS* vehicle_ros) +{ + if (vehicle_ros && !vehicle_ros->static_tf_msg_vec.empty()) { + for (auto& static_tf_msg : vehicle_ros->static_tf_msg_vec) { + static_tf_msg.header.stamp = vehicle_ros->stamp; + static_tf_pub_.sendTransform(static_tf_msg); + } + } +} + +ros::Time AirsimROSWrapper::update_state() +{ + bool got_sim_time = false; + ros::Time curr_ros_time = ros::Time::now(); + + //should be easier way to get the sim time through API, something like: + //msr::airlib::Environment::State env = airsim_client_->simGetGroundTruthEnvironment(""); + //curr_ros_time = airsim_timestamp_to_ros(env.clock().nowNanos()); + + // iterate over drones + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + ros::Time vehicle_time; + // get drone state from airsim + auto& vehicle_ros = vehicle_name_ptr_pair.second; + + // vehicle environment, we can get ambient temperature here and other truths + auto env_data = airsim_client_->simGetGroundTruthEnvironment(vehicle_ros->vehicle_name); + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + auto drone = static_cast(vehicle_ros.get()); + auto rpc = static_cast(airsim_client_.get()); + drone->curr_drone_state = rpc->getMultirotorState(vehicle_ros->vehicle_name); + + vehicle_time = airsim_timestamp_to_ros(drone->curr_drone_state.timestamp); + if (!got_sim_time) { + curr_ros_time = vehicle_time; + got_sim_time = true; + } + + vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(drone->curr_drone_state.gps_location); + vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; + + vehicle_ros->curr_odom = get_odom_msg_from_multirotor_state(drone->curr_drone_state); + } + else { + auto car = static_cast(vehicle_ros.get()); + auto rpc = static_cast(airsim_client_.get()); + car->curr_car_state = rpc->getCarState(vehicle_ros->vehicle_name); + + vehicle_time = airsim_timestamp_to_ros(car->curr_car_state.timestamp); + if (!got_sim_time) { + curr_ros_time = vehicle_time; + got_sim_time = true; + } + + vehicle_ros->gps_sensor_msg = get_gps_sensor_msg_from_airsim_geo_point(env_data.geo_point); + vehicle_ros->gps_sensor_msg.header.stamp = vehicle_time; + + vehicle_ros->curr_odom = get_odom_msg_from_car_state(car->curr_car_state); + + airsim_ros_pkgs::CarState state_msg = get_roscarstate_msg_from_car_state(car->curr_car_state); + state_msg.header.frame_id = vehicle_ros->vehicle_name; + car->car_state_msg = state_msg; + } + + vehicle_ros->stamp = vehicle_time; + + airsim_ros_pkgs::Environment env_msg = get_environment_msg_from_airsim(env_data); + env_msg.header.frame_id = vehicle_ros->vehicle_name; + env_msg.header.stamp = vehicle_time; + vehicle_ros->env_msg = env_msg; + + // convert airsim drone state to ROS msgs + vehicle_ros->curr_odom.header.frame_id = vehicle_ros->vehicle_name; + vehicle_ros->curr_odom.child_frame_id = vehicle_ros->odom_frame_id; + vehicle_ros->curr_odom.header.stamp = vehicle_time; + } + + return curr_ros_time; +} + +void AirsimROSWrapper::publish_vehicle_state() +{ + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto& vehicle_ros = vehicle_name_ptr_pair.second; + + // simulation environment truth + vehicle_ros->env_pub.publish(vehicle_ros->env_msg); + + if (airsim_mode_ == AIRSIM_MODE::CAR) { + // dashboard reading from car, RPM, gear, etc + auto car = static_cast(vehicle_ros.get()); + car->car_state_pub.publish(car->car_state_msg); + } + + // odom and transforms + vehicle_ros->odom_local_pub.publish(vehicle_ros->curr_odom); + publish_odom_tf(vehicle_ros->curr_odom); + + // ground truth GPS position from sim/HITL + vehicle_ros->global_gps_pub.publish(vehicle_ros->gps_sensor_msg); + + for (auto& sensor_publisher : vehicle_ros->sensor_pubs) { + switch (sensor_publisher.sensor_type) { + case SensorBase::SensorType::Barometer: { + auto baro_data = airsim_client_->getBarometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + airsim_ros_pkgs::Altimeter alt_msg = get_altimeter_msg_from_airsim(baro_data); + alt_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(alt_msg); + break; + } + case SensorBase::SensorType::Imu: { + auto imu_data = airsim_client_->getImuData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::Imu imu_msg = get_imu_msg_from_airsim(imu_data); + imu_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(imu_msg); + break; + } + case SensorBase::SensorType::Distance: { + auto distance_data = airsim_client_->getDistanceSensorData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::Range dist_msg = get_range_from_airsim(distance_data); + dist_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(dist_msg); + break; + } + case SensorBase::SensorType::Gps: { + auto gps_data = airsim_client_->getGpsData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::NavSatFix gps_msg = get_gps_msg_from_airsim(gps_data); + gps_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(gps_msg); + break; + } + case SensorBase::SensorType::Lidar: { + // handled via callback + break; + } + case SensorBase::SensorType::Magnetometer: { + auto mag_data = airsim_client_->getMagnetometerData(sensor_publisher.sensor_name, vehicle_ros->vehicle_name); + sensor_msgs::MagneticField mag_msg = get_mag_msg_from_airsim(mag_data); + mag_msg.header.frame_id = vehicle_ros->vehicle_name; + sensor_publisher.publisher.publish(mag_msg); + break; + } + } + } + + update_and_publish_static_transforms(vehicle_ros.get()); + } +} + +void AirsimROSWrapper::update_commands() +{ + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + auto& vehicle_ros = vehicle_name_ptr_pair.second; + + if (airsim_mode_ == AIRSIM_MODE::DRONE) { + auto drone = static_cast(vehicle_ros.get()); + + // send control commands from the last callback to airsim + if (drone->has_vel_cmd) { + std::lock_guard guard(drone_control_mutex_); + static_cast(airsim_client_.get())->moveByVelocityAsync(drone->vel_cmd.x, drone->vel_cmd.y, drone->vel_cmd.z, vel_cmd_duration_, msr::airlib::DrivetrainType::MaxDegreeOfFreedom, drone->vel_cmd.yaw_mode, drone->vehicle_name); + } + drone->has_vel_cmd = false; + } + else { + // send control commands from the last callback to airsim + auto car = static_cast(vehicle_ros.get()); + if (car->has_car_cmd) { + std::lock_guard guard(drone_control_mutex_); + static_cast(airsim_client_.get())->setCarControls(car->car_cmd, vehicle_ros->vehicle_name); + } + car->has_car_cmd = false; + } + } + + // Only camera rotation, no translation movement of camera + if (has_gimbal_cmd_) { + std::lock_guard guard(drone_control_mutex_); + airsim_client_->simSetCameraPose(gimbal_cmd_.camera_name, get_airlib_pose(0, 0, 0, gimbal_cmd_.target_quat), gimbal_cmd_.vehicle_name); + } + + has_gimbal_cmd_ = false; +} + +// airsim uses nans for zeros in settings.json. we set them to zeros here for handling tfs in ROS +void AirsimROSWrapper::set_nans_to_zeros_in_pose(VehicleSetting& vehicle_setting) const +{ + if (std::isnan(vehicle_setting.position.x())) + vehicle_setting.position.x() = 0.0; + + if (std::isnan(vehicle_setting.position.y())) + vehicle_setting.position.y() = 0.0; + + if (std::isnan(vehicle_setting.position.z())) + vehicle_setting.position.z() = 0.0; + + if (std::isnan(vehicle_setting.rotation.yaw)) + vehicle_setting.rotation.yaw = 0.0; + + if (std::isnan(vehicle_setting.rotation.pitch)) + vehicle_setting.rotation.pitch = 0.0; + + if (std::isnan(vehicle_setting.rotation.roll)) + vehicle_setting.rotation.roll = 0.0; +} + +// if any nan's in camera pose, set them to match vehicle pose (which has already converted any potential nans to zeros) +void AirsimROSWrapper::set_nans_to_zeros_in_pose(const VehicleSetting& vehicle_setting, CameraSetting& camera_setting) const +{ + if (std::isnan(camera_setting.position.x())) + camera_setting.position.x() = vehicle_setting.position.x(); + + if (std::isnan(camera_setting.position.y())) + camera_setting.position.y() = vehicle_setting.position.y(); + + if (std::isnan(camera_setting.position.z())) + camera_setting.position.z() = vehicle_setting.position.z(); + + if (std::isnan(camera_setting.rotation.yaw)) + camera_setting.rotation.yaw = vehicle_setting.rotation.yaw; + + if (std::isnan(camera_setting.rotation.pitch)) + camera_setting.rotation.pitch = vehicle_setting.rotation.pitch; + + if (std::isnan(camera_setting.rotation.roll)) + camera_setting.rotation.roll = vehicle_setting.rotation.roll; +} + +void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const VehicleSetting& vehicle_setting) +{ + geometry_msgs::TransformStamped vehicle_tf_msg; + vehicle_tf_msg.header.frame_id = world_frame_id_; + vehicle_tf_msg.header.stamp = ros::Time::now(); + vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name; + vehicle_tf_msg.transform.translation.x = vehicle_setting.position.x(); + vehicle_tf_msg.transform.translation.y = vehicle_setting.position.y(); + vehicle_tf_msg.transform.translation.z = vehicle_setting.position.z(); + tf2::Quaternion quat; + quat.setRPY(vehicle_setting.rotation.roll, vehicle_setting.rotation.pitch, vehicle_setting.rotation.yaw); + vehicle_tf_msg.transform.rotation.x = quat.x(); + vehicle_tf_msg.transform.rotation.y = quat.y(); + vehicle_tf_msg.transform.rotation.z = quat.z(); + vehicle_tf_msg.transform.rotation.w = quat.w(); + + if (isENU_) { + std::swap(vehicle_tf_msg.transform.translation.x, vehicle_tf_msg.transform.translation.y); + std::swap(vehicle_tf_msg.transform.rotation.x, vehicle_tf_msg.transform.rotation.y); + vehicle_tf_msg.transform.translation.z = -vehicle_tf_msg.transform.translation.z; + vehicle_tf_msg.transform.rotation.z = -vehicle_tf_msg.transform.rotation.z; + } + + vehicle_ros->static_tf_msg_vec.emplace_back(vehicle_tf_msg); +} + +void AirsimROSWrapper::append_static_lidar_tf(VehicleROS* vehicle_ros, const std::string& lidar_name, const msr::airlib::LidarSimpleParams& lidar_setting) +{ + geometry_msgs::TransformStamped lidar_tf_msg; + lidar_tf_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; + lidar_tf_msg.child_frame_id = vehicle_ros->vehicle_name + "/" + lidar_name; + lidar_tf_msg.transform.translation.x = lidar_setting.relative_pose.position.x(); + lidar_tf_msg.transform.translation.y = lidar_setting.relative_pose.position.y(); + lidar_tf_msg.transform.translation.z = lidar_setting.relative_pose.position.z(); + lidar_tf_msg.transform.rotation.x = lidar_setting.relative_pose.orientation.x(); + lidar_tf_msg.transform.rotation.y = lidar_setting.relative_pose.orientation.y(); + lidar_tf_msg.transform.rotation.z = lidar_setting.relative_pose.orientation.z(); + lidar_tf_msg.transform.rotation.w = lidar_setting.relative_pose.orientation.w(); + + if (isENU_) { + std::swap(lidar_tf_msg.transform.translation.x, lidar_tf_msg.transform.translation.y); + std::swap(lidar_tf_msg.transform.rotation.x, lidar_tf_msg.transform.rotation.y); + lidar_tf_msg.transform.translation.z = -lidar_tf_msg.transform.translation.z; + lidar_tf_msg.transform.rotation.z = -lidar_tf_msg.transform.rotation.z; + } + + vehicle_ros->static_tf_msg_vec.emplace_back(lidar_tf_msg); +} + +void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const std::string& camera_name, const CameraSetting& camera_setting) +{ + geometry_msgs::TransformStamped static_cam_tf_body_msg; + static_cam_tf_body_msg.header.frame_id = vehicle_ros->vehicle_name + "/" + odom_frame_id_; + static_cam_tf_body_msg.child_frame_id = camera_name + "_body/static"; + static_cam_tf_body_msg.transform.translation.x = camera_setting.position.x(); + static_cam_tf_body_msg.transform.translation.y = camera_setting.position.y(); + static_cam_tf_body_msg.transform.translation.z = camera_setting.position.z(); + tf2::Quaternion quat; + quat.setRPY(camera_setting.rotation.roll, camera_setting.rotation.pitch, camera_setting.rotation.yaw); + static_cam_tf_body_msg.transform.rotation.x = quat.x(); + static_cam_tf_body_msg.transform.rotation.y = quat.y(); + static_cam_tf_body_msg.transform.rotation.z = quat.z(); + static_cam_tf_body_msg.transform.rotation.w = quat.w(); + + if (isENU_) { + std::swap(static_cam_tf_body_msg.transform.translation.x, static_cam_tf_body_msg.transform.translation.y); + std::swap(static_cam_tf_body_msg.transform.rotation.x, static_cam_tf_body_msg.transform.rotation.y); + static_cam_tf_body_msg.transform.translation.z = -static_cam_tf_body_msg.transform.translation.z; + static_cam_tf_body_msg.transform.rotation.z = -static_cam_tf_body_msg.transform.rotation.z; + } + + geometry_msgs::TransformStamped static_cam_tf_optical_msg = static_cam_tf_body_msg; + static_cam_tf_optical_msg.child_frame_id = camera_name + "_optical/static"; + + tf2::Quaternion quat_cam_body; + tf2::Quaternion quat_cam_optical; + tf2::convert(static_cam_tf_body_msg.transform.rotation, quat_cam_body); + tf2::Matrix3x3 mat_cam_body(quat_cam_body); + tf2::Matrix3x3 mat_cam_optical; + mat_cam_optical.setValue(mat_cam_body.getColumn(1).getX(), mat_cam_body.getColumn(2).getX(), mat_cam_body.getColumn(0).getX(), mat_cam_body.getColumn(1).getY(), mat_cam_body.getColumn(2).getY(), mat_cam_body.getColumn(0).getY(), mat_cam_body.getColumn(1).getZ(), mat_cam_body.getColumn(2).getZ(), mat_cam_body.getColumn(0).getZ()); + mat_cam_optical.getRotation(quat_cam_optical); + quat_cam_optical.normalize(); + tf2::convert(quat_cam_optical, static_cam_tf_optical_msg.transform.rotation); + + vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_body_msg); + vehicle_ros->static_tf_msg_vec.emplace_back(static_cam_tf_optical_msg); +} + +void AirsimROSWrapper::img_response_timer_cb(const ros::TimerEvent& event) +{ + try { + int image_response_idx = 0; + for (const auto& airsim_img_request_vehicle_name_pair : airsim_img_request_vehicle_name_pair_vec_) { + const std::vector& img_response = airsim_client_images_.simGetImages(airsim_img_request_vehicle_name_pair.first, airsim_img_request_vehicle_name_pair.second); + + if (img_response.size() == airsim_img_request_vehicle_name_pair.first.size()) { + process_and_publish_img_response(img_response, image_response_idx, airsim_img_request_vehicle_name_pair.second); + image_response_idx += img_response.size(); + } + } + } + + catch (rpc::rpc_error& e) { + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API, didn't get image response." << std::endl + << msg << std::endl; + } +} + +void AirsimROSWrapper::lidar_timer_cb(const ros::TimerEvent& event) +{ + try { + for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { + if (!vehicle_name_ptr_pair.second->lidar_pubs.empty()) { + for (auto& lidar_publisher : vehicle_name_ptr_pair.second->lidar_pubs) { + auto lidar_data = airsim_client_lidar_.getLidarData(lidar_publisher.sensor_name, vehicle_name_ptr_pair.first); + sensor_msgs::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first); + lidar_publisher.publisher.publish(lidar_msg); + } + } + } + } + catch (rpc::rpc_error& e) { + std::string msg = e.get_error().as(); + std::cout << "Exception raised by the API, didn't get image response." << std::endl + << msg << std::endl; + } +} + +cv::Mat AirsimROSWrapper::manual_decode_depth(const ImageResponse& img_response) const +{ + cv::Mat mat(img_response.height, img_response.width, CV_32FC1, cv::Scalar(0)); + int img_width = img_response.width; + + for (int row = 0; row < img_response.height; row++) + for (int col = 0; col < img_width; col++) + mat.at(row, col) = img_response.image_data_float[row * img_width + col]; + return mat; +} + +sensor_msgs::ImagePtr AirsimROSWrapper::get_img_msg_from_response(const ImageResponse& img_response, + const ros::Time curr_ros_time, + const std::string frame_id) +{ + sensor_msgs::ImagePtr img_msg_ptr = boost::make_shared(); + img_msg_ptr->data = img_response.image_data_uint8; + img_msg_ptr->step = img_response.width * 3; // todo un-hardcode. image_width*num_bytes + img_msg_ptr->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + img_msg_ptr->header.frame_id = frame_id; + img_msg_ptr->height = img_response.height; + img_msg_ptr->width = img_response.width; + img_msg_ptr->encoding = "bgr8"; + if (is_vulkan_) + img_msg_ptr->encoding = "rgb8"; + img_msg_ptr->is_bigendian = 0; + return img_msg_ptr; +} + +sensor_msgs::ImagePtr AirsimROSWrapper::get_depth_img_msg_from_response(const ImageResponse& img_response, + const ros::Time curr_ros_time, + const std::string frame_id) +{ + // todo using img_response.image_data_float direclty as done get_img_msg_from_response() throws an error, + // hence the dependency on opencv and cv_bridge. however, this is an extremely fast op, so no big deal. + cv::Mat depth_img = manual_decode_depth(img_response); + sensor_msgs::ImagePtr depth_img_msg = cv_bridge::CvImage(std_msgs::Header(), "32FC1", depth_img).toImageMsg(); + depth_img_msg->header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + depth_img_msg->header.frame_id = frame_id; + return depth_img_msg; +} + +// todo have a special stereo pair mode and get projection matrix by calculating offset wrt drone body frame? +sensor_msgs::CameraInfo AirsimROSWrapper::generate_cam_info(const std::string& camera_name, + const CameraSetting& camera_setting, + const CaptureSetting& capture_setting) const +{ + sensor_msgs::CameraInfo cam_info_msg; + cam_info_msg.header.frame_id = camera_name + "_optical"; + cam_info_msg.height = capture_setting.height; + cam_info_msg.width = capture_setting.width; + float f_x = (capture_setting.width / 2.0) / tan(math_common::deg2rad(capture_setting.fov_degrees / 2.0)); + // todo focal length in Y direction should be same as X it seems. this can change in future a scene capture component which exactly correponds to a cine camera + // float f_y = (capture_setting.height / 2.0) / tan(math_common::deg2rad(fov_degrees / 2.0)); + cam_info_msg.K = { f_x, 0.0, capture_setting.width / 2.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 1.0 }; + cam_info_msg.P = { f_x, 0.0, capture_setting.width / 2.0, 0.0, 0.0, f_x, capture_setting.height / 2.0, 0.0, 0.0, 0.0, 1.0, 0.0 }; + return cam_info_msg; +} + +void AirsimROSWrapper::process_and_publish_img_response(const std::vector& img_response_vec, const int img_response_idx, const std::string& vehicle_name) +{ + // todo add option to use airsim time (image_response.TTimePoint) like Gazebo /use_sim_time param + ros::Time curr_ros_time = ros::Time::now(); + int img_response_idx_internal = img_response_idx; + + for (const auto& curr_img_response : img_response_vec) { + // todo publishing a tf for each capture type seems stupid. but it foolproofs us against render thread's async stuff, I hope. + // Ideally, we should loop over cameras and then captures, and publish only one tf. + publish_camera_tf(curr_img_response, curr_ros_time, vehicle_name, curr_img_response.camera_name); + + // todo simGetCameraInfo is wrong + also it's only for image type -1. + // msr::airlib::CameraInfo camera_info = airsim_client_.simGetCameraInfo(curr_img_response.camera_name); + + // update timestamp of saved cam info msgs + + camera_info_msg_vec_[img_response_idx_internal].header.stamp = airsim_timestamp_to_ros(curr_img_response.time_stamp); + cam_info_pub_vec_[img_response_idx_internal].publish(camera_info_msg_vec_[img_response_idx_internal]); + + // DepthPlanar / DepthPerspective / DepthVis / DisparityNormalized + if (curr_img_response.pixels_as_float) { + image_pub_vec_[img_response_idx_internal].publish(get_depth_img_msg_from_response(curr_img_response, + curr_ros_time, + curr_img_response.camera_name + "_optical")); + } + // Scene / Segmentation / SurfaceNormals / Infrared + else { + image_pub_vec_[img_response_idx_internal].publish(get_img_msg_from_response(curr_img_response, + curr_ros_time, + curr_img_response.camera_name + "_optical")); + } + img_response_idx_internal++; + } +} + +// publish camera transforms +// camera poses are obtained from airsim's client API which are in (local) NED frame. +// We first do a change of basis to camera optical frame (Z forward, X right, Y down) +void AirsimROSWrapper::publish_camera_tf(const ImageResponse& img_response, const ros::Time& ros_time, const std::string& frame_id, const std::string& child_frame_id) +{ + geometry_msgs::TransformStamped cam_tf_body_msg; + cam_tf_body_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + cam_tf_body_msg.header.frame_id = frame_id; + cam_tf_body_msg.child_frame_id = child_frame_id + "_body"; + cam_tf_body_msg.transform.translation.x = img_response.camera_position.x(); + cam_tf_body_msg.transform.translation.y = img_response.camera_position.y(); + cam_tf_body_msg.transform.translation.z = img_response.camera_position.z(); + cam_tf_body_msg.transform.rotation.x = img_response.camera_orientation.x(); + cam_tf_body_msg.transform.rotation.y = img_response.camera_orientation.y(); + cam_tf_body_msg.transform.rotation.z = img_response.camera_orientation.z(); + cam_tf_body_msg.transform.rotation.w = img_response.camera_orientation.w(); + + if (isENU_) { + std::swap(cam_tf_body_msg.transform.translation.x, cam_tf_body_msg.transform.translation.y); + std::swap(cam_tf_body_msg.transform.rotation.x, cam_tf_body_msg.transform.rotation.y); + cam_tf_body_msg.transform.translation.z = -cam_tf_body_msg.transform.translation.z; + cam_tf_body_msg.transform.rotation.z = -cam_tf_body_msg.transform.rotation.z; + } + + geometry_msgs::TransformStamped cam_tf_optical_msg; + cam_tf_optical_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); + cam_tf_optical_msg.header.frame_id = frame_id; + cam_tf_optical_msg.child_frame_id = child_frame_id + "_optical"; + cam_tf_optical_msg.transform.translation.x = cam_tf_body_msg.transform.translation.x; + cam_tf_optical_msg.transform.translation.y = cam_tf_body_msg.transform.translation.y; + cam_tf_optical_msg.transform.translation.z = cam_tf_body_msg.transform.translation.z; + + tf2::Quaternion quat_cam_body; + tf2::Quaternion quat_cam_optical; + tf2::convert(cam_tf_body_msg.transform.rotation, quat_cam_body); + tf2::Matrix3x3 mat_cam_body(quat_cam_body); + // tf2::Matrix3x3 mat_cam_optical = matrix_cam_body_to_optical_ * mat_cam_body * matrix_cam_body_to_optical_inverse_; + // tf2::Matrix3x3 mat_cam_optical = matrix_cam_body_to_optical_ * mat_cam_body; + tf2::Matrix3x3 mat_cam_optical; + mat_cam_optical.setValue(mat_cam_body.getColumn(1).getX(), mat_cam_body.getColumn(2).getX(), mat_cam_body.getColumn(0).getX(), mat_cam_body.getColumn(1).getY(), mat_cam_body.getColumn(2).getY(), mat_cam_body.getColumn(0).getY(), mat_cam_body.getColumn(1).getZ(), mat_cam_body.getColumn(2).getZ(), mat_cam_body.getColumn(0).getZ()); + mat_cam_optical.getRotation(quat_cam_optical); + quat_cam_optical.normalize(); + tf2::convert(quat_cam_optical, cam_tf_optical_msg.transform.rotation); + + tf_broadcaster_.sendTransform(cam_tf_body_msg); + tf_broadcaster_.sendTransform(cam_tf_optical_msg); +} + +void AirsimROSWrapper::convert_yaml_to_simple_mat(const YAML::Node& node, SimpleMatrix& m) const +{ + int rows, cols; + rows = node["rows"].as(); + cols = node["cols"].as(); + const YAML::Node& data = node["data"]; + for (int i = 0; i < rows * cols; ++i) { + m.data[i] = data[i].as(); + } +} + +void AirsimROSWrapper::read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::CameraInfo& cam_info) const +{ + std::ifstream fin(file_name.c_str()); + YAML::Node doc = YAML::Load(fin); + + cam_info.width = doc[WIDTH_YML_NAME].as(); + cam_info.height = doc[HEIGHT_YML_NAME].as(); + + SimpleMatrix K_(3, 3, &cam_info.K[0]); + convert_yaml_to_simple_mat(doc[K_YML_NAME], K_); + SimpleMatrix R_(3, 3, &cam_info.R[0]); + convert_yaml_to_simple_mat(doc[R_YML_NAME], R_); + SimpleMatrix P_(3, 4, &cam_info.P[0]); + convert_yaml_to_simple_mat(doc[P_YML_NAME], P_); + + cam_info.distortion_model = doc[DMODEL_YML_NAME].as(); + + const YAML::Node& D_node = doc[D_YML_NAME]; + int D_rows, D_cols; + D_rows = D_node["rows"].as(); + D_cols = D_node["cols"].as(); + const YAML::Node& D_data = D_node["data"]; + cam_info.D.resize(D_rows * D_cols); + for (int i = 0; i < D_rows * D_cols; ++i) { + cam_info.D[i] = D_data[i].as(); + } } \ No newline at end of file From 98428ffbed3b77223f3047c2313f97b439af56a7 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 14 Nov 2021 10:31:20 +0200 Subject: [PATCH 110/123] - removed a modified file from PR --- .../src/pd_position_controller_simple.cpp | 682 +++++++++--------- 1 file changed, 341 insertions(+), 341 deletions(-) diff --git a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index b9bc353b27..f03e49074d 100644 --- a/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -1,342 +1,342 @@ -#include "pd_position_controller_simple.h" - -bool PIDParams::load_from_rosparams(const ros::NodeHandle& nh) -{ - bool found = true; - - found = found && nh.getParam("kp_x", kp_x); - found = found && nh.getParam("kp_y", kp_y); - found = found && nh.getParam("kp_z", kp_z); - found = found && nh.getParam("kp_yaw", kp_yaw); - - found = found && nh.getParam("kd_x", kd_x); - found = found && nh.getParam("kd_y", kd_y); - found = found && nh.getParam("kd_z", kd_z); - found = found && nh.getParam("kd_yaw", kd_yaw); - - found = found && nh.getParam("reached_thresh_xyz", reached_thresh_xyz); - found = found && nh.getParam("reached_yaw_degrees", reached_yaw_degrees); - - return found; -} - -bool DynamicConstraints::load_from_rosparams(const ros::NodeHandle& nh) -{ - bool found = true; - - found = found && nh.getParam("max_vel_horz_abs", max_vel_horz_abs); - found = found && nh.getParam("max_vel_vert_abs", max_vel_vert_abs); - found = found && nh.getParam("max_yaw_rate_degree", max_yaw_rate_degree); - - return found; -} - -PIDPositionController::PIDPositionController(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private) - : nh_(nh), nh_private_(nh_private), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) -{ - params_.load_from_rosparams(nh_private_); - constraints_.load_from_rosparams(nh_); - initialize_ros(); - reset_errors(); -} - -void PIDPositionController::reset_errors() -{ - prev_error_.x = 0.0; - prev_error_.y = 0.0; - prev_error_.z = 0.0; - prev_error_.yaw = 0.0; -} - -void PIDPositionController::initialize_ros() -{ - vel_cmd_ = airsim_ros_pkgs::VelCmd(); - // ROS params - double update_control_every_n_sec; - nh_private_.getParam("update_control_every_n_sec", update_control_every_n_sec); - - std::string vehicle_name; - - while (vehicle_name == "") { - nh_private_.getParam("/vehicle_name", vehicle_name); - ROS_INFO_STREAM("Waiting vehicle name"); - } - - // ROS publishers - airsim_vel_cmd_world_frame_pub_ = nh_private_.advertise("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); - - // ROS subscribers - airsim_odom_sub_ = nh_.subscribe("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, &PIDPositionController::airsim_odom_cb, this); - home_geopoint_sub_ = nh_.subscribe("/airsim_node/home_geo_point", 50, &PIDPositionController::home_geopoint_cb, this); - // todo publish this under global nodehandle / "airsim node" and hide it from user - local_position_goal_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal", &PIDPositionController::local_position_goal_srv_cb, this); - local_position_goal_override_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal/override", &PIDPositionController::local_position_goal_srv_override_cb, this); - gps_goal_srvr_ = nh_.advertiseService("/airsim_node/gps_goal", &PIDPositionController::gps_goal_srv_cb, this); - gps_goal_override_srvr_ = nh_.advertiseService("/airsim_node/gps_goal/override", &PIDPositionController::gps_goal_srv_override_cb, this); - - // ROS timers - update_control_cmd_timer_ = nh_private_.createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); -} - -void PIDPositionController::airsim_odom_cb(const nav_msgs::Odometry& odom_msg) -{ - has_odom_ = true; - curr_odom_ = odom_msg; - curr_position_.x = odom_msg.pose.pose.position.x; - curr_position_.y = odom_msg.pose.pose.position.y; - curr_position_.z = odom_msg.pose.pose.position.z; - curr_position_.yaw = utils::get_yaw_from_quat_msg(odom_msg.pose.pose.orientation); -} - -// todo maintain internal representation as eigen vec? -// todo check if low velocity if within thresh? -// todo maintain separate errors for XY and Z -void PIDPositionController::check_reached_goal() -{ - double diff_xyz = sqrt((target_position_.x - curr_position_.x) * (target_position_.x - curr_position_.x) + (target_position_.y - curr_position_.y) * (target_position_.y - curr_position_.y) + (target_position_.z - curr_position_.z) * (target_position_.z - curr_position_.z)); - - double diff_yaw = math_common::angular_dist(target_position_.yaw, curr_position_.yaw); - - // todo save this in degrees somewhere to avoid repeated conversion - if (diff_xyz < params_.reached_thresh_xyz && diff_yaw < math_common::deg2rad(params_.reached_yaw_degrees)) - reached_goal_ = true; -} - -bool PIDPositionController::local_position_goal_srv_cb(airsim_ros_pkgs::SetLocalPosition::Request& request, airsim_ros_pkgs::SetLocalPosition::Response& response) -{ - // this tells the update timer callback to not do active hovering - if (!got_goal_once_) - got_goal_once_ = true; - - if (has_goal_ && !reached_goal_) { - // todo maintain array of position goals - ROS_ERROR_STREAM("[PIDPositionController] denying position goal request. I am still following the previous goal"); - return false; - } - - if (!has_goal_) { - target_position_.x = request.x; - target_position_.y = request.y; - target_position_.z = request.z; - target_position_.yaw = request.yaw; - ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); - - // todo error checks - // todo fill response - has_goal_ = true; - reached_goal_ = false; - reset_errors(); // todo - return true; - } - - // Already have goal, and have reached it - ROS_INFO_STREAM("[PIDPositionController] Already have goal and have reached it"); - return false; -} - -bool PIDPositionController::local_position_goal_srv_override_cb(airsim_ros_pkgs::SetLocalPosition::Request& request, airsim_ros_pkgs::SetLocalPosition::Response& response) -{ - // this tells the update timer callback to not do active hovering - if (!got_goal_once_) - got_goal_once_ = true; - - target_position_.x = request.x; - target_position_.y = request.y; - target_position_.z = request.z; - target_position_.yaw = request.yaw; - ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); - - // todo error checks - // todo fill response - has_goal_ = true; - reached_goal_ = false; - reset_errors(); // todo - return true; -} - -void PIDPositionController::home_geopoint_cb(const airsim_ros_pkgs::GPSYaw& gps_msg) -{ - if (has_home_geo_) - return; - gps_home_msg_ = gps_msg; - has_home_geo_ = true; - ROS_INFO_STREAM("[PIDPositionController] GPS reference initializing " << gps_msg.latitude << ", " << gps_msg.longitude << ", " << gps_msg.altitude); - geodetic_converter_.initialiseReference(gps_msg.latitude, gps_msg.longitude, gps_msg.altitude); -} - -// todo do relative altitude, or add an option for the same? -bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) -{ - if (!has_home_geo_) { - ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); - response.success = false; - } - - // convert GPS goal to NED goal - - if (!has_goal_) { - msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); - msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); - bool use_eth_lib = true; - if (use_eth_lib_for_geodetic_conv_) { - double initial_latitude, initial_longitude, initial_altitude; - geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); - double n, e, d; - geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); - // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); - target_position_.x = n; - target_position_.y = e; - target_position_.z = d; - } - else // use airlib::GeodeticToNedFast - { - ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); - msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); - target_position_.x = ned_goal[0]; - target_position_.y = ned_goal[1]; - target_position_.z = ned_goal[2]; - } - - target_position_.yaw = request.yaw; // todo - ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); - - // todo error checks - // todo fill response - has_goal_ = true; - reached_goal_ = false; - reset_errors(); // todo - return true; - } - - // Already have goal, this shouldn't happen - ROS_INFO_STREAM("[PIDPositionController] Goal already received, ignoring!"); - return false; -} - -// todo do relative altitude, or add an option for the same? -bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) -{ - if (!has_home_geo_) { - ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); - response.success = false; - } - - // convert GPS goal to NED goal - - msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); - msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); - bool use_eth_lib = true; - if (use_eth_lib_for_geodetic_conv_) { - double initial_latitude, initial_longitude, initial_altitude; - geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); - double n, e, d; - geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); - // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); - target_position_.x = n; - target_position_.y = e; - target_position_.z = d; - } - else // use airlib::GeodeticToNedFast - { - ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); - msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); - target_position_.x = ned_goal[0]; - target_position_.y = ned_goal[1]; - target_position_.z = ned_goal[2]; - } - - target_position_.yaw = request.yaw; // todo - ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); - - // todo error checks - // todo fill response - has_goal_ = true; - reached_goal_ = false; - reset_errors(); // todo - return true; -} - -void PIDPositionController::update_control_cmd_timer_cb(const ros::TimerEvent& event) -{ - // todo check if odometry is too old!! - // if no odom, don't do anything. - if (!has_odom_) { - ROS_ERROR_STREAM("[PIDPositionController] Waiting for odometry!"); - return; - } - - if (has_goal_) { - check_reached_goal(); - if (reached_goal_) { - ROS_INFO_STREAM("[PIDPositionController] Reached goal! Hovering at position."); - has_goal_ = false; - // dear future self, this function doesn't return coz we need to keep on actively hovering at last goal pose. don't act smart - } - else { - ROS_INFO_STREAM("[PIDPositionController] Moving to goal."); - } - } - - // only compute and send control commands for hovering / moving to pose, if we received a goal at least once in the past - if (got_goal_once_) { - compute_control_cmd(); - enforce_dynamic_constraints(); - publish_control_cmd(); - } -} - -void PIDPositionController::compute_control_cmd() -{ - curr_error_.x = target_position_.x - curr_position_.x; - curr_error_.y = target_position_.y - curr_position_.y; - curr_error_.z = target_position_.z - curr_position_.z; - curr_error_.yaw = math_common::angular_dist(curr_position_.yaw, target_position_.yaw); - - double p_term_x = params_.kp_x * curr_error_.x; - double p_term_y = params_.kp_y * curr_error_.y; - double p_term_z = params_.kp_z * curr_error_.z; - double p_term_yaw = params_.kp_yaw * curr_error_.yaw; - - double d_term_x = params_.kd_x * prev_error_.x; - double d_term_y = params_.kd_y * prev_error_.y; - double d_term_z = params_.kd_z * prev_error_.z; - double d_term_yaw = params_.kp_yaw * prev_error_.yaw; - - prev_error_ = curr_error_; - - vel_cmd_.twist.linear.x = p_term_x + d_term_x; - vel_cmd_.twist.linear.y = p_term_y + d_term_y; - vel_cmd_.twist.linear.z = p_term_z + d_term_z; - vel_cmd_.twist.angular.z = p_term_yaw + d_term_yaw; // todo -} - -void PIDPositionController::enforce_dynamic_constraints() -{ - double vel_norm_horz = sqrt((vel_cmd_.twist.linear.x * vel_cmd_.twist.linear.x) + (vel_cmd_.twist.linear.y * vel_cmd_.twist.linear.y)); - - if (vel_norm_horz > constraints_.max_vel_horz_abs) { - vel_cmd_.twist.linear.x = (vel_cmd_.twist.linear.x / vel_norm_horz) * constraints_.max_vel_horz_abs; - vel_cmd_.twist.linear.y = (vel_cmd_.twist.linear.y / vel_norm_horz) * constraints_.max_vel_horz_abs; - } - - if (std::fabs(vel_cmd_.twist.linear.z) > constraints_.max_vel_vert_abs) { - // todo just add a sgn funciton in common utils? return double to be safe. - // template double sgn(T val) { return (T(0) < val) - (val < T(0)); } - vel_cmd_.twist.linear.z = (vel_cmd_.twist.linear.z / std::fabs(vel_cmd_.twist.linear.z)) * constraints_.max_vel_vert_abs; - } - // todo yaw limits - if (std::fabs(vel_cmd_.twist.linear.z) > constraints_.max_yaw_rate_degree) { - // todo just add a sgn funciton in common utils? return double to be safe. - // template double sgn(T val) { return (T(0) < val) - (val < T(0)); } - vel_cmd_.twist.linear.z = (vel_cmd_.twist.linear.z / std::fabs(vel_cmd_.twist.linear.z)) * constraints_.max_yaw_rate_degree; - } -} - -void PIDPositionController::publish_control_cmd() -{ - airsim_vel_cmd_world_frame_pub_.publish(vel_cmd_); +#include "pd_position_controller_simple.h" + +bool PIDParams::load_from_rosparams(const ros::NodeHandle& nh) +{ + bool found = true; + + found = found && nh.getParam("kp_x", kp_x); + found = found && nh.getParam("kp_y", kp_y); + found = found && nh.getParam("kp_z", kp_z); + found = found && nh.getParam("kp_yaw", kp_yaw); + + found = found && nh.getParam("kd_x", kd_x); + found = found && nh.getParam("kd_y", kd_y); + found = found && nh.getParam("kd_z", kd_z); + found = found && nh.getParam("kd_yaw", kd_yaw); + + found = found && nh.getParam("reached_thresh_xyz", reached_thresh_xyz); + found = found && nh.getParam("reached_yaw_degrees", reached_yaw_degrees); + + return found; +} + +bool DynamicConstraints::load_from_rosparams(const ros::NodeHandle& nh) +{ + bool found = true; + + found = found && nh.getParam("max_vel_horz_abs", max_vel_horz_abs); + found = found && nh.getParam("max_vel_vert_abs", max_vel_vert_abs); + found = found && nh.getParam("max_yaw_rate_degree", max_yaw_rate_degree); + + return found; +} + +PIDPositionController::PIDPositionController(const ros::NodeHandle& nh, const ros::NodeHandle& nh_private) + : nh_(nh), nh_private_(nh_private), has_odom_(false), has_goal_(false), reached_goal_(false), got_goal_once_(false), has_home_geo_(false), use_eth_lib_for_geodetic_conv_(true) +{ + params_.load_from_rosparams(nh_private_); + constraints_.load_from_rosparams(nh_); + initialize_ros(); + reset_errors(); +} + +void PIDPositionController::reset_errors() +{ + prev_error_.x = 0.0; + prev_error_.y = 0.0; + prev_error_.z = 0.0; + prev_error_.yaw = 0.0; +} + +void PIDPositionController::initialize_ros() +{ + vel_cmd_ = airsim_ros_pkgs::VelCmd(); + // ROS params + double update_control_every_n_sec; + nh_private_.getParam("update_control_every_n_sec", update_control_every_n_sec); + + std::string vehicle_name; + + while (vehicle_name == "") { + nh_private_.getParam("/vehicle_name", vehicle_name); + ROS_INFO_STREAM("Waiting vehicle name"); + } + + // ROS publishers + airsim_vel_cmd_world_frame_pub_ = nh_private_.advertise("/airsim_node/" + vehicle_name + "/vel_cmd_world_frame", 1); + + // ROS subscribers + airsim_odom_sub_ = nh_.subscribe("/airsim_node/" + vehicle_name + "/odom_local_ned", 50, &PIDPositionController::airsim_odom_cb, this); + home_geopoint_sub_ = nh_.subscribe("/airsim_node/home_geo_point", 50, &PIDPositionController::home_geopoint_cb, this); + // todo publish this under global nodehandle / "airsim node" and hide it from user + local_position_goal_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal", &PIDPositionController::local_position_goal_srv_cb, this); + local_position_goal_override_srvr_ = nh_.advertiseService("/airsim_node/local_position_goal/override", &PIDPositionController::local_position_goal_srv_override_cb, this); + gps_goal_srvr_ = nh_.advertiseService("/airsim_node/gps_goal", &PIDPositionController::gps_goal_srv_cb, this); + gps_goal_override_srvr_ = nh_.advertiseService("/airsim_node/gps_goal/override", &PIDPositionController::gps_goal_srv_override_cb, this); + + // ROS timers + update_control_cmd_timer_ = nh_private_.createTimer(ros::Duration(update_control_every_n_sec), &PIDPositionController::update_control_cmd_timer_cb, this); +} + +void PIDPositionController::airsim_odom_cb(const nav_msgs::Odometry& odom_msg) +{ + has_odom_ = true; + curr_odom_ = odom_msg; + curr_position_.x = odom_msg.pose.pose.position.x; + curr_position_.y = odom_msg.pose.pose.position.y; + curr_position_.z = odom_msg.pose.pose.position.z; + curr_position_.yaw = utils::get_yaw_from_quat_msg(odom_msg.pose.pose.orientation); +} + +// todo maintain internal representation as eigen vec? +// todo check if low velocity if within thresh? +// todo maintain separate errors for XY and Z +void PIDPositionController::check_reached_goal() +{ + double diff_xyz = sqrt((target_position_.x - curr_position_.x) * (target_position_.x - curr_position_.x) + (target_position_.y - curr_position_.y) * (target_position_.y - curr_position_.y) + (target_position_.z - curr_position_.z) * (target_position_.z - curr_position_.z)); + + double diff_yaw = math_common::angular_dist(target_position_.yaw, curr_position_.yaw); + + // todo save this in degrees somewhere to avoid repeated conversion + if (diff_xyz < params_.reached_thresh_xyz && diff_yaw < math_common::deg2rad(params_.reached_yaw_degrees)) + reached_goal_ = true; +} + +bool PIDPositionController::local_position_goal_srv_cb(airsim_ros_pkgs::SetLocalPosition::Request& request, airsim_ros_pkgs::SetLocalPosition::Response& response) +{ + // this tells the update timer callback to not do active hovering + if (!got_goal_once_) + got_goal_once_ = true; + + if (has_goal_ && !reached_goal_) { + // todo maintain array of position goals + ROS_ERROR_STREAM("[PIDPositionController] denying position goal request. I am still following the previous goal"); + return false; + } + + if (!has_goal_) { + target_position_.x = request.x; + target_position_.y = request.y; + target_position_.z = request.z; + target_position_.yaw = request.yaw; + ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; + } + + // Already have goal, and have reached it + ROS_INFO_STREAM("[PIDPositionController] Already have goal and have reached it"); + return false; +} + +bool PIDPositionController::local_position_goal_srv_override_cb(airsim_ros_pkgs::SetLocalPosition::Request& request, airsim_ros_pkgs::SetLocalPosition::Response& response) +{ + // this tells the update timer callback to not do active hovering + if (!got_goal_once_) + got_goal_once_ = true; + + target_position_.x = request.x; + target_position_.y = request.y; + target_position_.z = request.z; + target_position_.yaw = request.yaw; + ROS_INFO_STREAM("[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; +} + +void PIDPositionController::home_geopoint_cb(const airsim_ros_pkgs::GPSYaw& gps_msg) +{ + if (has_home_geo_) + return; + gps_home_msg_ = gps_msg; + has_home_geo_ = true; + ROS_INFO_STREAM("[PIDPositionController] GPS reference initializing " << gps_msg.latitude << ", " << gps_msg.longitude << ", " << gps_msg.altitude); + geodetic_converter_.initialiseReference(gps_msg.latitude, gps_msg.longitude, gps_msg.altitude); +} + +// todo do relative altitude, or add an option for the same? +bool PIDPositionController::gps_goal_srv_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) +{ + if (!has_home_geo_) { + ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + response.success = false; + } + + // convert GPS goal to NED goal + + if (!has_goal_) { + msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); + msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); + bool use_eth_lib = true; + if (use_eth_lib_for_geodetic_conv_) { + double initial_latitude, initial_longitude, initial_altitude; + geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); + double n, e, d; + geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); + // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + target_position_.x = n; + target_position_.y = e; + target_position_.z = d; + } + else // use airlib::GeodeticToNedFast + { + ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + << "todo"); + msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); + target_position_.x = ned_goal[0]; + target_position_.y = ned_goal[1]; + target_position_.z = ned_goal[2]; + } + + target_position_.yaw = request.yaw; // todo + ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; + } + + // Already have goal, this shouldn't happen + ROS_INFO_STREAM("[PIDPositionController] Goal already received, ignoring!"); + return false; +} + +// todo do relative altitude, or add an option for the same? +bool PIDPositionController::gps_goal_srv_override_cb(airsim_ros_pkgs::SetGPSPosition::Request& request, airsim_ros_pkgs::SetGPSPosition::Response& response) +{ + if (!has_home_geo_) { + ROS_ERROR_STREAM("[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + response.success = false; + } + + // convert GPS goal to NED goal + + msr::airlib::GeoPoint goal_gps_point(request.latitude, request.longitude, request.altitude); + msr::airlib::GeoPoint gps_home(gps_home_msg_.latitude, gps_home_msg_.longitude, gps_home_msg_.altitude); + bool use_eth_lib = true; + if (use_eth_lib_for_geodetic_conv_) { + double initial_latitude, initial_longitude, initial_altitude; + geodetic_converter_.getReference(&initial_latitude, &initial_longitude, &initial_altitude); + double n, e, d; + geodetic_converter_.geodetic2Ned(request.latitude, request.longitude, request.altitude, &n, &e, &d); + // ROS_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + target_position_.x = n; + target_position_.y = e; + target_position_.z = d; + } + else // use airlib::GeodeticToNedFast + { + ROS_INFO_STREAM("[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + << "todo"); + msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); + target_position_.x = ned_goal[0]; + target_position_.y = ned_goal[1]; + target_position_.z = ned_goal[2]; + } + + target_position_.yaw = request.yaw; // todo + ROS_INFO_STREAM("[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + ROS_INFO_STREAM("[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + + // todo error checks + // todo fill response + has_goal_ = true; + reached_goal_ = false; + reset_errors(); // todo + return true; +} + +void PIDPositionController::update_control_cmd_timer_cb(const ros::TimerEvent& event) +{ + // todo check if odometry is too old!! + // if no odom, don't do anything. + if (!has_odom_) { + ROS_ERROR_STREAM("[PIDPositionController] Waiting for odometry!"); + return; + } + + if (has_goal_) { + check_reached_goal(); + if (reached_goal_) { + ROS_INFO_STREAM("[PIDPositionController] Reached goal! Hovering at position."); + has_goal_ = false; + // dear future self, this function doesn't return coz we need to keep on actively hovering at last goal pose. don't act smart + } + else { + ROS_INFO_STREAM("[PIDPositionController] Moving to goal."); + } + } + + // only compute and send control commands for hovering / moving to pose, if we received a goal at least once in the past + if (got_goal_once_) { + compute_control_cmd(); + enforce_dynamic_constraints(); + publish_control_cmd(); + } +} + +void PIDPositionController::compute_control_cmd() +{ + curr_error_.x = target_position_.x - curr_position_.x; + curr_error_.y = target_position_.y - curr_position_.y; + curr_error_.z = target_position_.z - curr_position_.z; + curr_error_.yaw = math_common::angular_dist(curr_position_.yaw, target_position_.yaw); + + double p_term_x = params_.kp_x * curr_error_.x; + double p_term_y = params_.kp_y * curr_error_.y; + double p_term_z = params_.kp_z * curr_error_.z; + double p_term_yaw = params_.kp_yaw * curr_error_.yaw; + + double d_term_x = params_.kd_x * prev_error_.x; + double d_term_y = params_.kd_y * prev_error_.y; + double d_term_z = params_.kd_z * prev_error_.z; + double d_term_yaw = params_.kp_yaw * prev_error_.yaw; + + prev_error_ = curr_error_; + + vel_cmd_.twist.linear.x = p_term_x + d_term_x; + vel_cmd_.twist.linear.y = p_term_y + d_term_y; + vel_cmd_.twist.linear.z = p_term_z + d_term_z; + vel_cmd_.twist.angular.z = p_term_yaw + d_term_yaw; // todo +} + +void PIDPositionController::enforce_dynamic_constraints() +{ + double vel_norm_horz = sqrt((vel_cmd_.twist.linear.x * vel_cmd_.twist.linear.x) + (vel_cmd_.twist.linear.y * vel_cmd_.twist.linear.y)); + + if (vel_norm_horz > constraints_.max_vel_horz_abs) { + vel_cmd_.twist.linear.x = (vel_cmd_.twist.linear.x / vel_norm_horz) * constraints_.max_vel_horz_abs; + vel_cmd_.twist.linear.y = (vel_cmd_.twist.linear.y / vel_norm_horz) * constraints_.max_vel_horz_abs; + } + + if (std::fabs(vel_cmd_.twist.linear.z) > constraints_.max_vel_vert_abs) { + // todo just add a sgn funciton in common utils? return double to be safe. + // template double sgn(T val) { return (T(0) < val) - (val < T(0)); } + vel_cmd_.twist.linear.z = (vel_cmd_.twist.linear.z / std::fabs(vel_cmd_.twist.linear.z)) * constraints_.max_vel_vert_abs; + } + // todo yaw limits + if (std::fabs(vel_cmd_.twist.linear.z) > constraints_.max_yaw_rate_degree) { + // todo just add a sgn funciton in common utils? return double to be safe. + // template double sgn(T val) { return (T(0) < val) - (val < T(0)); } + vel_cmd_.twist.linear.z = (vel_cmd_.twist.linear.z / std::fabs(vel_cmd_.twist.linear.z)) * constraints_.max_yaw_rate_degree; + } +} + +void PIDPositionController::publish_control_cmd() +{ + airsim_vel_cmd_world_frame_pub_.publish(vel_cmd_); } \ No newline at end of file From ef87585cfb8ccc882fa15ccac620bb2e9a93c2cd Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 14 Nov 2021 14:47:13 +0200 Subject: [PATCH 111/123] add get_transform_msg_from_airsim() ro reduce code duplication --- .../include/airsim_ros_wrapper.h | 1 + .../src/airsim_ros_wrapper.cpp | 36 +++++++++---------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 74fe45e4a0..99db3a4d99 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -269,6 +269,7 @@ class AirsimROSWrapper airsim_interfaces::msg::Environment get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const; msr::airlib::GeoPoint get_origin_geo_point() const; VelCmd get_airlib_vel_cmd(const airsim_interfaces::msg::VelCmd& msg) const; + geometry_msgs::msg::Transform get_transform_msg_from_airsim(const msr::airlib::Vector3r& position, const msr::airlib::AirSimSettings::Rotation& rotation); // not used anymore, but can be useful in future with an unreal camera calibration environment void read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::msg::CameraInfo& cam_info) const; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 90c05ee3f3..084a23ae2b 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -884,6 +884,22 @@ VelCmd AirsimROSWrapper::get_airlib_vel_cmd(const airsim_interfaces::msg::VelCmd return vel_cmd; } +geometry_msgs::msg::Transform AirsimROSWrapper::get_transform_msg_from_airsim(const msr::airlib::Vector3r& position, const msr::airlib::AirSimSettings::Rotation& rotation) +{ + geometry_msgs::msg::Transform transform; + transform.translation.x = position.x(); + transform.translation.y = position.y(); + transform.translation.z = position.z(); + tf2::Quaternion quat; + quat.setRPY(rotation.roll, rotation.pitch, rotation.yaw); + transform.rotation.x = quat.x(); + transform.rotation.y = quat.y(); + transform.rotation.z = quat.z(); + transform.rotation.w = quat.w(); + + return transform; +} + rclcpp::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const { @@ -1163,15 +1179,7 @@ void AirsimROSWrapper::append_static_vehicle_tf(VehicleROS* vehicle_ros, const V vehicle_tf_msg.header.frame_id = world_frame_id_; vehicle_tf_msg.header.stamp = nh_->now(); vehicle_tf_msg.child_frame_id = vehicle_ros->vehicle_name_; - vehicle_tf_msg.transform.translation.x = vehicle_setting.position.x(); - vehicle_tf_msg.transform.translation.y = vehicle_setting.position.y(); - vehicle_tf_msg.transform.translation.z = vehicle_setting.position.z(); - tf2::Quaternion quat; - quat.setRPY(vehicle_setting.rotation.roll, vehicle_setting.rotation.pitch, vehicle_setting.rotation.yaw); - vehicle_tf_msg.transform.rotation.x = quat.x(); - vehicle_tf_msg.transform.rotation.y = quat.y(); - vehicle_tf_msg.transform.rotation.z = quat.z(); - vehicle_tf_msg.transform.rotation.w = quat.w(); + vehicle_tf_msg.transform = get_transform_msg_from_airsim(vehicle_setting.position, vehicle_setting.rotation); if (isENU_) { convert_tf_msg_to_enu(vehicle_tf_msg); @@ -1205,15 +1213,7 @@ void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const st geometry_msgs::msg::TransformStamped static_cam_tf_body_msg; static_cam_tf_body_msg.header.frame_id = vehicle_ros->vehicle_name_ + "/" + odom_frame_id_; static_cam_tf_body_msg.child_frame_id = camera_name + "_body/static"; - static_cam_tf_body_msg.transform.translation.x = camera_setting.position.x(); - static_cam_tf_body_msg.transform.translation.y = camera_setting.position.y(); - static_cam_tf_body_msg.transform.translation.z = camera_setting.position.z(); - tf2::Quaternion quat; - quat.setRPY(camera_setting.rotation.roll, camera_setting.rotation.pitch, camera_setting.rotation.yaw); - static_cam_tf_body_msg.transform.rotation.x = quat.x(); - static_cam_tf_body_msg.transform.rotation.y = quat.y(); - static_cam_tf_body_msg.transform.rotation.z = quat.z(); - static_cam_tf_body_msg.transform.rotation.w = quat.w(); + static_cam_tf_body_msg.transform = get_transform_msg_from_airsim(camera_setting.position, camera_setting.rotation); if (isENU_) { convert_tf_msg_to_enu(static_cam_tf_body_msg); From 9734b4891262ffb9b60dd19a55326fe2a37aca13 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 14 Nov 2021 15:30:38 +0200 Subject: [PATCH 112/123] - get_transform_msg_from_airsim overload to use with Quaternionr --- .../include/airsim_ros_wrapper.h | 1 + .../src/airsim_ros_wrapper.cpp | 30 ++++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 99db3a4d99..545635a4ac 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -270,6 +270,7 @@ class AirsimROSWrapper msr::airlib::GeoPoint get_origin_geo_point() const; VelCmd get_airlib_vel_cmd(const airsim_interfaces::msg::VelCmd& msg) const; geometry_msgs::msg::Transform get_transform_msg_from_airsim(const msr::airlib::Vector3r& position, const msr::airlib::AirSimSettings::Rotation& rotation); + geometry_msgs::msg::Transform get_transform_msg_from_airsim(const msr::airlib::Vector3r& position, const msr::airlib::Quaternionr& quaternion); // not used anymore, but can be useful in future with an unreal camera calibration environment void read_params_from_yaml_and_fill_cam_info_msg(const std::string& file_name, sensor_msgs::msg::CameraInfo& cam_info) const; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 084a23ae2b..30517b7a42 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -900,6 +900,20 @@ geometry_msgs::msg::Transform AirsimROSWrapper::get_transform_msg_from_airsim(co return transform; } +geometry_msgs::msg::Transform AirsimROSWrapper::get_transform_msg_from_airsim(const msr::airlib::Vector3r& position, const msr::airlib::Quaternionr& quaternion) +{ + geometry_msgs::msg::Transform transform; + transform.translation.x = position.x(); + transform.translation.y = position.y(); + transform.translation.z = position.z(); + transform.rotation.x = quaternion.x(); + transform.rotation.y = quaternion.y(); + transform.rotation.z = quaternion.z(); + transform.rotation.w = quaternion.w(); + + return transform; +} + rclcpp::Time AirsimROSWrapper::chrono_timestamp_to_ros(const std::chrono::system_clock::time_point& stamp) const { @@ -1193,13 +1207,7 @@ void AirsimROSWrapper::append_static_lidar_tf(VehicleROS* vehicle_ros, const std geometry_msgs::msg::TransformStamped lidar_tf_msg; lidar_tf_msg.header.frame_id = vehicle_ros->vehicle_name_ + "/" + odom_frame_id_; lidar_tf_msg.child_frame_id = vehicle_ros->vehicle_name_ + "/" + lidar_name; - lidar_tf_msg.transform.translation.x = lidar_setting.relative_pose.position.x(); - lidar_tf_msg.transform.translation.y = lidar_setting.relative_pose.position.y(); - lidar_tf_msg.transform.translation.z = lidar_setting.relative_pose.position.z(); - lidar_tf_msg.transform.rotation.x = lidar_setting.relative_pose.orientation.x(); - lidar_tf_msg.transform.rotation.y = lidar_setting.relative_pose.orientation.y(); - lidar_tf_msg.transform.rotation.z = lidar_setting.relative_pose.orientation.z(); - lidar_tf_msg.transform.rotation.w = lidar_setting.relative_pose.orientation.w(); + lidar_tf_msg.transform = get_transform_msg_from_airsim(lidar_setting.relative_pose.position, lidar_setting.relative_pose.orientation); if (isENU_) { convert_tf_msg_to_enu(lidar_tf_msg); @@ -1382,13 +1390,7 @@ void AirsimROSWrapper::publish_camera_tf(const ImageResponse& img_response, cons cam_tf_body_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); cam_tf_body_msg.header.frame_id = frame_id; cam_tf_body_msg.child_frame_id = child_frame_id + "_body"; - cam_tf_body_msg.transform.translation.x = img_response.camera_position.x(); - cam_tf_body_msg.transform.translation.y = img_response.camera_position.y(); - cam_tf_body_msg.transform.translation.z = img_response.camera_position.z(); - cam_tf_body_msg.transform.rotation.x = img_response.camera_orientation.x(); - cam_tf_body_msg.transform.rotation.y = img_response.camera_orientation.y(); - cam_tf_body_msg.transform.rotation.z = img_response.camera_orientation.z(); - cam_tf_body_msg.transform.rotation.w = img_response.camera_orientation.w(); + cam_tf_body_msg.transform = get_transform_msg_from_airsim(img_response.camera_position, img_response.camera_orientation); if (isENU_) { convert_tf_msg_to_enu(cam_tf_body_msg); From ce98edbea08de28ae2fd377c6782aa6757badec6 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 14 Nov 2021 15:35:38 +0200 Subject: [PATCH 113/123] - move airsim_client_ init to ctor --- ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 2 +- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 545635a4ac..5cff3b7bc9 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -310,7 +310,7 @@ class AirsimROSWrapper bool is_vulkan_; // rosparam obtained from launch file. If vulkan is being used, we BGR encoding instead of RGB std::string host_ip_; - std::unique_ptr airsim_client_ = nullptr; + std::unique_ptr airsim_client_; // seperate busy connections to airsim, update in their own thread msr::airlib::RpcLibClientBase airsim_client_images_; msr::airlib::RpcLibClientBase airsim_client_lidar_; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 30517b7a42..f643394489 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -29,6 +29,7 @@ AirsimROSWrapper::AirsimROSWrapper(const std::shared_ptr nh, const , is_used_img_timer_cb_queue_(false) , airsim_settings_parser_(host_ip) , host_ip_(host_ip) + , airsim_client_(nullptr) , airsim_client_images_(host_ip) , airsim_client_lidar_(host_ip) , nh_(nh) From 041c652b542841dff1db00663504b495be4ef3b4 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Mon, 15 Nov 2021 12:47:37 +0200 Subject: [PATCH 114/123] - remove [PIDPositionController] from log, it's already printed by ROS --- .../src/pd_position_controller_simple.cpp | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp index e7cb4b02b5..51fa4d565c 100644 --- a/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp +++ b/ros2/src/airsim_ros_pkgs/src/pd_position_controller_simple.cpp @@ -121,7 +121,7 @@ bool PIDPositionController::local_position_goal_srv_cb(const std::shared_ptrget_logger(), "[PIDPositionController] denying position goal request-> I am still following the previous goal"); + RCLCPP_ERROR_STREAM(nh_->get_logger(), "denying position goal request-> I am still following the previous goal"); return false; } @@ -130,7 +130,7 @@ bool PIDPositionController::local_position_goal_srv_cb(const std::shared_ptry; target_position_.z = request->z; target_position_.yaw = request->yaw; - RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -141,7 +141,7 @@ bool PIDPositionController::local_position_goal_srv_cb(const std::shared_ptrget_logger(), "[PIDPositionController] Already have goal and have reached it"); + RCLCPP_INFO_STREAM(nh_->get_logger(), "Already have goal and have reached it"); return false; } @@ -156,7 +156,7 @@ bool PIDPositionController::local_position_goal_srv_override_cb(const std::share target_position_.y = request->y; target_position_.z = request->z; target_position_.yaw = request->yaw; - RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "got goal: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -172,7 +172,7 @@ void PIDPositionController::home_geopoint_cb(const airsim_interfaces::msg::GPSYa return; gps_home_msg_ = *gps_msg; has_home_geo_ = true; - RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] GPS reference initializing " << gps_msg->latitude << ", " << gps_msg->longitude << ", " << gps_msg->altitude); + RCLCPP_INFO_STREAM(nh_->get_logger(), "GPS reference initializing " << gps_msg->latitude << ", " << gps_msg->longitude << ", " << gps_msg->altitude); geodetic_converter_.initialiseReference(gps_msg->latitude, gps_msg->longitude, gps_msg->altitude); } @@ -180,7 +180,7 @@ void PIDPositionController::home_geopoint_cb(const airsim_interfaces::msg::GPSYa bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response) { if (!has_home_geo_) { - RCLCPP_ERROR_STREAM(nh_->get_logger(), "[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + RCLCPP_ERROR_STREAM(nh_->get_logger(), "I don't have home GPS coord. Can't go to GPS goal!"); response->success = false; } @@ -194,15 +194,15 @@ bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptrlatitude, request->longitude, request->altitude, &n, &e, &d); - // RCLCPP_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + // RCLCPP_INFO_STREAM("geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); target_position_.x = n; target_position_.y = e; target_position_.z = d; } else // use airlib::GeodeticToNedFast { - RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); + RCLCPP_INFO_STREAM(nh_->get_logger(), "home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; target_position_.y = ned_goal[1]; @@ -210,8 +210,8 @@ bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptryaw; // todo - RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -222,7 +222,7 @@ bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptrget_logger(), "[PIDPositionController] Goal already received, ignoring!"); + RCLCPP_INFO_STREAM(nh_->get_logger(), "Goal already received, ignoring!"); return false; } @@ -230,7 +230,7 @@ bool PIDPositionController::gps_goal_srv_cb(const std::shared_ptr request, std::shared_ptr response) { if (!has_home_geo_) { - RCLCPP_ERROR_STREAM(nh_->get_logger(), "[PIDPositionController] I don't have home GPS coord. Can't go to GPS goal!"); + RCLCPP_ERROR_STREAM(nh_->get_logger(), "I don't have home GPS coord. Can't go to GPS goal!"); response->success = false; } @@ -243,15 +243,15 @@ bool PIDPositionController::gps_goal_srv_override_cb(const std::shared_ptrlatitude, request->longitude, request->altitude, &n, &e, &d); - // RCLCPP_INFO_STREAM("[PIDPositionController] geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); + // RCLCPP_INFO_STREAM("geodetic_converter_ GPS reference initialized correctly (lat long in radians) " << initial_latitude << ", "<< initial_longitude << ", " << initial_altitude); target_position_.x = n; target_position_.y = e; target_position_.z = d; } else // use airlib::GeodeticToNedFast { - RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" - << "todo"); + RCLCPP_INFO_STREAM(nh_->get_logger(), "home geopoint: lat=" << gps_home.latitude << " long=" << gps_home.longitude << " alt=" << gps_home.altitude << " yaw=" + << "todo"); msr::airlib::Vector3r ned_goal = msr::airlib::EarthUtils::GeodeticToNedFast(goal_gps_point, gps_home); target_position_.x = ned_goal[0]; target_position_.y = ned_goal[1]; @@ -259,8 +259,8 @@ bool PIDPositionController::gps_goal_srv_override_cb(const std::shared_ptryaw; // todo - RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); - RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "got GPS goal: lat=" << goal_gps_point.latitude << " long=" << goal_gps_point.longitude << " alt=" << goal_gps_point.altitude << " yaw=" << target_position_.yaw); + RCLCPP_INFO_STREAM(nh_->get_logger(), "converted NED goal is: x=" << target_position_.x << " y=" << target_position_.y << " z=" << target_position_.z << " yaw=" << target_position_.yaw); // todo error checks // todo fill response @@ -275,19 +275,19 @@ void PIDPositionController::update_control_cmd_timer_cb() // todo check if odometry is too old!! // if no odom, don't do anything. if (!has_odom_) { - RCLCPP_ERROR_STREAM(nh_->get_logger(), "[PIDPositionController] Waiting for odometry!"); + RCLCPP_ERROR_STREAM(nh_->get_logger(), "Waiting for odometry!"); return; } if (has_goal_) { check_reached_goal(); if (reached_goal_) { - RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] Reached goal! Hovering at position."); + RCLCPP_INFO_STREAM(nh_->get_logger(), "Reached goal! Hovering at position."); has_goal_ = false; // dear future self, this function doesn't return coz we need to keep on actively hovering at last goal pose. don't act smart } else { - RCLCPP_INFO_STREAM(nh_->get_logger(), "[PIDPositionController] Moving to goal."); + RCLCPP_INFO_STREAM(nh_->get_logger(), "Moving to goal."); } } From 54a89a6ac2d985deab6676f2cdda30e486b6a621 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Mon, 15 Nov 2021 13:12:51 +0200 Subject: [PATCH 115/123] - add get_airlib_body_vel_cmd() to avoid code duplicate --- .../include/airsim_ros_wrapper.h | 3 +- .../src/airsim_ros_wrapper.cpp | 65 +++++++------------ 2 files changed, 27 insertions(+), 41 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 5cff3b7bc9..cf94c080d9 100644 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -268,7 +268,8 @@ class AirsimROSWrapper sensor_msgs::msg::MagneticField get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const; airsim_interfaces::msg::Environment get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const; msr::airlib::GeoPoint get_origin_geo_point() const; - VelCmd get_airlib_vel_cmd(const airsim_interfaces::msg::VelCmd& msg) const; + VelCmd get_airlib_world_vel_cmd(const airsim_interfaces::msg::VelCmd& msg) const; + VelCmd get_airlib_body_vel_cmd(const airsim_interfaces::msg::VelCmd& msg, const msr::airlib::Quaternionr& airlib_quat) const; geometry_msgs::msg::Transform get_transform_msg_from_airsim(const msr::airlib::Vector3r& position, const msr::airlib::AirSimSettings::Rotation& rotation); geometry_msgs::msg::Transform get_transform_msg_from_airsim(const msr::airlib::Vector3r& position, const msr::airlib::Quaternionr& quaternion); diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index f643394489..632c1b8c86 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -484,18 +484,7 @@ void AirsimROSWrapper::vel_cmd_body_frame_cb(const airsim_interfaces::msg::VelCm std::lock_guard guard(control_mutex_); auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state_.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw - - // todo do actual body frame? - drone->vel_cmd_.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd_.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd_.z = msg->twist.linear.z; - drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd_.yaw_mode.is_rate = true; - // airsim uses degrees - drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->vel_cmd_ = get_airlib_body_vel_cmd(*msg, drone->curr_drone_state_.kinematics_estimated.pose.orientation); drone->has_vel_cmd_ = true; } @@ -505,18 +494,7 @@ void AirsimROSWrapper::vel_cmd_group_body_frame_cb(const airsim_interfaces::msg: for (const auto& vehicle_name : msg->vehicle_names) { auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - - double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state_.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw - - // todo do actual body frame? - drone->vel_cmd_.x = (msg->vel_cmd.twist.linear.x * cos(yaw)) - (msg->vel_cmd.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd_.y = (msg->vel_cmd.twist.linear.x * sin(yaw)) + (msg->vel_cmd.twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd_.z = msg->vel_cmd.twist.linear.z; - drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd_.yaw_mode.is_rate = true; - // airsim uses degrees - drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->vel_cmd.twist.angular.z); + drone->vel_cmd_ = get_airlib_body_vel_cmd(msg->vel_cmd, drone->curr_drone_state_.kinematics_estimated.pose.orientation); drone->has_vel_cmd_ = true; } } @@ -528,18 +506,7 @@ void AirsimROSWrapper::vel_cmd_all_body_frame_cb(const airsim_interfaces::msg::V // todo expose wait_on_last_task or nah? for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { auto drone = static_cast(vehicle_name_ptr_pair.second.get()); - - double roll, pitch, yaw; - tf2::Matrix3x3(get_tf2_quat(drone->curr_drone_state_.kinematics_estimated.pose.orientation)).getRPY(roll, pitch, yaw); // ros uses xyzw - - // todo do actual body frame? - drone->vel_cmd_.x = (msg->twist.linear.x * cos(yaw)) - (msg->twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll - drone->vel_cmd_.y = (msg->twist.linear.x * sin(yaw)) + (msg->twist.linear.y * cos(yaw)); //body frame - drone->vel_cmd_.z = msg->twist.linear.z; - drone->vel_cmd_.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; - drone->vel_cmd_.yaw_mode.is_rate = true; - // airsim uses degrees - drone->vel_cmd_.yaw_mode.yaw_or_rate = math_common::rad2deg(msg->twist.angular.z); + drone->vel_cmd_ = get_airlib_body_vel_cmd(*msg, drone->curr_drone_state_.kinematics_estimated.pose.orientation); drone->has_vel_cmd_ = true; } } @@ -549,7 +516,7 @@ void AirsimROSWrapper::vel_cmd_world_frame_cb(const airsim_interfaces::msg::VelC std::lock_guard guard(control_mutex_); auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - drone->vel_cmd_ = get_airlib_vel_cmd(*msg); + drone->vel_cmd_ = get_airlib_world_vel_cmd(*msg); drone->has_vel_cmd_ = true; } @@ -560,7 +527,7 @@ void AirsimROSWrapper::vel_cmd_group_world_frame_cb(const airsim_interfaces::msg for (const auto& vehicle_name : msg->vehicle_names) { auto drone = static_cast(vehicle_name_ptr_map_[vehicle_name].get()); - drone->vel_cmd_ = get_airlib_vel_cmd(msg->vel_cmd); + drone->vel_cmd_ = get_airlib_world_vel_cmd(msg->vel_cmd); drone->has_vel_cmd_ = true; } } @@ -572,7 +539,7 @@ void AirsimROSWrapper::vel_cmd_all_world_frame_cb(const airsim_interfaces::msg:: // todo expose wait_on_last_task or nah? for (auto& vehicle_name_ptr_pair : vehicle_name_ptr_map_) { auto drone = static_cast(vehicle_name_ptr_pair.second.get()); - drone->vel_cmd_ = get_airlib_vel_cmd(*msg); + drone->vel_cmd_ = get_airlib_world_vel_cmd(*msg); drone->has_vel_cmd_ = true; } } @@ -873,7 +840,7 @@ msr::airlib::GeoPoint AirsimROSWrapper::get_origin_geo_point() const return geo_point.home_geo_point; } -VelCmd AirsimROSWrapper::get_airlib_vel_cmd(const airsim_interfaces::msg::VelCmd& msg) const +VelCmd AirsimROSWrapper::get_airlib_world_vel_cmd(const airsim_interfaces::msg::VelCmd& msg) const { VelCmd vel_cmd; vel_cmd.x = msg.twist.linear.x; @@ -885,6 +852,24 @@ VelCmd AirsimROSWrapper::get_airlib_vel_cmd(const airsim_interfaces::msg::VelCmd return vel_cmd; } +VelCmd AirsimROSWrapper::get_airlib_body_vel_cmd(const airsim_interfaces::msg::VelCmd& msg, const msr::airlib::Quaternionr& airlib_quat) const +{ + VelCmd vel_cmd; + double roll, pitch, yaw; + tf2::Matrix3x3(get_tf2_quat(airlib_quat)).getRPY(roll, pitch, yaw); // ros uses xyzw + + // todo do actual body frame? + vel_cmd.x = (msg.twist.linear.x * cos(yaw)) - (msg.twist.linear.y * sin(yaw)); //body frame assuming zero pitch roll + vel_cmd.y = (msg.twist.linear.x * sin(yaw)) + (msg.twist.linear.y * cos(yaw)); //body frame + vel_cmd.z = msg.twist.linear.z; + vel_cmd.drivetrain = msr::airlib::DrivetrainType::MaxDegreeOfFreedom; + vel_cmd.yaw_mode.is_rate = true; + // airsim uses degrees + vel_cmd.yaw_mode.yaw_or_rate = math_common::rad2deg(msg.twist.angular.z); + + return vel_cmd; +} + geometry_msgs::msg::Transform AirsimROSWrapper::get_transform_msg_from_airsim(const msr::airlib::Vector3r& position, const msr::airlib::AirSimSettings::Rotation& rotation) { geometry_msgs::msg::Transform transform; From e28cb2e0b021671272a3d9d26a37be45a47a9aed Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Mon, 15 Nov 2021 17:10:10 +0200 Subject: [PATCH 116/123] - assign structs directly instead of members --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 632c1b8c86..09a6ac3198 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -809,10 +809,7 @@ void AirsimROSWrapper::publish_odom_tf(const nav_msgs::msg::Odometry& odom_msg) odom_tf.transform.translation.x = odom_msg.pose.pose.position.x; odom_tf.transform.translation.y = odom_msg.pose.pose.position.y; odom_tf.transform.translation.z = odom_msg.pose.pose.position.z; - odom_tf.transform.rotation.x = odom_msg.pose.pose.orientation.x; - odom_tf.transform.rotation.y = odom_msg.pose.pose.orientation.y; - odom_tf.transform.rotation.z = odom_msg.pose.pose.orientation.z; - odom_tf.transform.rotation.w = odom_msg.pose.pose.orientation.w; + odom_tf.transform.rotation = odom_msg.pose.pose.orientation; tf_broadcaster_->sendTransform(odom_tf); } @@ -1386,9 +1383,7 @@ void AirsimROSWrapper::publish_camera_tf(const ImageResponse& img_response, cons cam_tf_optical_msg.header.stamp = airsim_timestamp_to_ros(img_response.time_stamp); cam_tf_optical_msg.header.frame_id = frame_id; cam_tf_optical_msg.child_frame_id = child_frame_id + "_optical"; - cam_tf_optical_msg.transform.translation.x = cam_tf_body_msg.transform.translation.x; - cam_tf_optical_msg.transform.translation.y = cam_tf_body_msg.transform.translation.y; - cam_tf_optical_msg.transform.translation.z = cam_tf_body_msg.transform.translation.z; + cam_tf_optical_msg.transform.translation = cam_tf_body_msg.transform.translation; tf2::Quaternion quat_cam_body; tf2::Quaternion quat_cam_optical; From a90e5f31c4a51d8c4000151731559f9c1d2a833a Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 21 Nov 2021 10:26:36 +0200 Subject: [PATCH 117/123] - check image type against Enum instead int --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 09a6ac3198..a4edb41977 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -206,7 +206,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() if (!(std::isnan(capture_setting.fov_degrees))) { ImageType curr_image_type = msr::airlib::Utils::toEnum(capture_setting.image_type); // if scene / segmentation / surface normals / infrared, get uncompressed image with pixels_as_floats = false - if (capture_setting.image_type == 0 || capture_setting.image_type == 5 || capture_setting.image_type == 6 || capture_setting.image_type == 7) { + if (curr_image_type == ImageType::Scene || curr_image_type == ImageType::Segmentation || curr_image_type == ImageType::SurfaceNormals || curr_image_type == ImageType::Infrared) { current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, false, false)); } // if {DepthPlanar, DepthPerspective,DepthVis, DisparityNormalized}, get float image From 51751cb9700c9e7ae65e21e235c86171158f0a57 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 21 Nov 2021 10:30:06 +0200 Subject: [PATCH 118/123] - move camera topic to seperate string to avoid duplicate --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index a4edb41977..a710e2fb58 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -214,8 +214,9 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, true)); } - image_pub_vec_.push_back(image_transporter.advertise("~/" + curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type), 1)); - cam_info_pub_vec_.push_back(nh_->create_publisher("~/" + curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type) + "/camera_info", 10)); + const std::string camera_topic = "~/" + curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type); + image_pub_vec_.push_back(image_transporter.advertise(camera_topic, 1)); + cam_info_pub_vec_.push_back(nh_->create_publisher(camera_topic + "/camera_info", 10)); camera_info_msg_vec_.push_back(generate_cam_info(curr_camera_name, camera_setting, capture_setting)); } } From 08d1d2dd7bafa22b5e296373f8f2f22a1ee4c416 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 21 Nov 2021 10:31:24 +0200 Subject: [PATCH 119/123] - cleanup --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index a710e2fb58..19ef73d480 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -110,10 +110,8 @@ void AirsimROSWrapper::initialize_ros() nh_->declare_parameter("vehicle_name", rclcpp::ParameterValue("")); create_ros_pubs_from_settings_json(); airsim_control_update_timer_ = nh_->create_wall_timer(std::chrono::duration(update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); - // airsim_control_update_timer_ = nh_->createTimer(rclcpp::Duration (update_airsim_control_every_n_sec), std::bind(&AirsimROSWrapper::drone_state_timer_cb, this)); } -// XmlRpc::XmlRpcValue can't be const in this case void AirsimROSWrapper::create_ros_pubs_from_settings_json() { // subscribe to control commands on global nodehandle From b07033692896ce4a64c24944e7b739240a567757 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 21 Nov 2021 11:13:28 +0200 Subject: [PATCH 120/123] - move common topic prefix to string variable --- .../src/airsim_ros_wrapper.cpp | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 19ef73d480..1facc07247 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -151,27 +151,28 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() append_static_vehicle_tf(vehicle_ros.get(), *vehicle_setting); - vehicle_ros->odom_local_pub_ = nh_->create_publisher("~/" + curr_vehicle_name + "/" + odom_frame_id_, 10); + const std::string topic_prefix = "~/" + curr_vehicle_name; + vehicle_ros->odom_local_pub_ = nh_->create_publisher(topic_prefix + "/" + odom_frame_id_, 10); - vehicle_ros->env_pub_ = nh_->create_publisher("~/" + curr_vehicle_name + "/environment", 10); + vehicle_ros->env_pub_ = nh_->create_publisher(topic_prefix + "/environment", 10); - vehicle_ros->global_gps_pub_ = nh_->create_publisher("~/" + curr_vehicle_name + "/global_gps", 10); + vehicle_ros->global_gps_pub_ = nh_->create_publisher(topic_prefix + "/global_gps", 10); if (airsim_mode_ == AIRSIM_MODE::DRONE) { auto drone = static_cast(vehicle_ros.get()); // bind to a single callback. todo optimal subs queue length // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument - drone->vel_cmd_body_frame_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_body_frame", 1, [&](const airsim_interfaces::msg::VelCmd::SharedPtr msg) { this->vel_cmd_body_frame_cb(msg, vehicle_ros->vehicle_name_); }); // todo ros::TransportHints().tcpNoDelay(); + drone->vel_cmd_body_frame_sub_ = nh_->create_subscription(topic_prefix + "/vel_cmd_body_frame", 1, [&](const airsim_interfaces::msg::VelCmd::SharedPtr msg) { this->vel_cmd_body_frame_cb(msg, vehicle_ros->vehicle_name_); }); // todo ros::TransportHints().tcpNoDelay(); - drone->vel_cmd_world_frame_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/vel_cmd_world_frame", 1, [&](const airsim_interfaces::msg::VelCmd::SharedPtr msg) { this->vel_cmd_world_frame_cb(msg, vehicle_ros->vehicle_name_); }); + drone->vel_cmd_world_frame_sub_ = nh_->create_subscription(topic_prefix + "/vel_cmd_world_frame", 1, [&](const airsim_interfaces::msg::VelCmd::SharedPtr msg) { this->vel_cmd_world_frame_cb(msg, vehicle_ros->vehicle_name_); }); - drone->takeoff_srvr_ = nh_->create_service("~/" + curr_vehicle_name + "/takeoff", + drone->takeoff_srvr_ = nh_->create_service(topic_prefix + "/takeoff", [&](std::shared_ptr request, std::shared_ptr response) { this->takeoff_srv_cb(request, response, vehicle_ros->vehicle_name_); }); - drone->land_srvr_ = nh_->create_service("~/" + curr_vehicle_name + "/land", + drone->land_srvr_ = nh_->create_service(topic_prefix + "/land", [&](std::shared_ptr request, std::shared_ptr response) { this->land_srv_cb(request, response, vehicle_ros->vehicle_name_); }); @@ -180,8 +181,8 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() } else { auto car = static_cast(vehicle_ros.get()); - car->car_cmd_sub_ = nh_->create_subscription("~/" + curr_vehicle_name + "/car_cmd", 1, [&](const airsim_interfaces::msg::CarControls::SharedPtr msg) { this->car_cmd_cb(msg, vehicle_ros->vehicle_name_); }); - car->car_state_pub_ = nh_->create_publisher("~/" + curr_vehicle_name + "/car_state", 10); + car->car_cmd_sub_ = nh_->create_subscription(topic_prefix + "/car_cmd", 1, [&](const airsim_interfaces::msg::CarControls::SharedPtr msg) { this->car_cmd_cb(msg, vehicle_ros->vehicle_name_); }); + car->car_state_pub_ = nh_->create_publisher(topic_prefix + "/car_state", 10); } // iterate over camera map std::map .cameras; @@ -212,7 +213,7 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() current_image_request_vec.push_back(ImageRequest(curr_camera_name, curr_image_type, true)); } - const std::string camera_topic = "~/" + curr_vehicle_name + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type); + const std::string camera_topic = topic_prefix + "/" + curr_camera_name + "/" + image_type_int_to_string_map_.at(capture_setting.image_type); image_pub_vec_.push_back(image_transporter.advertise(camera_topic, 1)); cam_info_pub_vec_.push_back(nh_->create_publisher(camera_topic + "/camera_info", 10)); camera_info_msg_vec_.push_back(generate_cam_info(curr_camera_name, camera_setting, capture_setting)); From a4605bda8208bade87879a8f2a735d8adac9debe Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 21 Nov 2021 11:47:20 +0200 Subject: [PATCH 121/123] - simplify Dockerfile --- tools/Dockerfile-ROS2 | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/tools/Dockerfile-ROS2 b/tools/Dockerfile-ROS2 index fd182467fe..02c6bea83d 100644 --- a/tools/Dockerfile-ROS2 +++ b/tools/Dockerfile-ROS2 @@ -1,7 +1,5 @@ FROM ros:foxy-ros-base -ARG UNAME=testuser - RUN DEBIAN_FRONTEND=noninteractive apt-get update &&\ apt-get install -y\ apt-utils \ @@ -11,10 +9,4 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update &&\ libyaml-cpp-dev &&\ echo 'source /opt/ros/$ROS_DISTRO/setup.bash' >> ~/.bashrc &&\ rm -rf /var/lib/apt/lists/* &&\ - apt-get clean &&\ - adduser --disabled-password --gecos '' $UNAME &&\ - adduser $UNAME sudo &&\ - echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers - -USER $UNAME -WORKDIR /home/${UNAME} \ No newline at end of file + apt-get clean \ No newline at end of file From 4946fa6eb7f4d9172097428fcfb5cbded3274ea8 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Sun, 21 Nov 2021 18:23:02 +0200 Subject: [PATCH 122/123] - remove DEBIAN_FRONTEND from Dockerfile --- tools/Dockerfile-ROS2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/Dockerfile-ROS2 b/tools/Dockerfile-ROS2 index 02c6bea83d..73f801043e 100644 --- a/tools/Dockerfile-ROS2 +++ b/tools/Dockerfile-ROS2 @@ -1,6 +1,6 @@ FROM ros:foxy-ros-base -RUN DEBIAN_FRONTEND=noninteractive apt-get update &&\ +RUN apt-get update &&\ apt-get install -y\ apt-utils \ gcc-8 g++-8 \ From 8f5f6603573e63811f1ba1134d0ef42dc81c9802 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Wed, 1 Dec 2021 17:47:08 +0200 Subject: [PATCH 123/123] - revert using lambda, it cause a crash so leave it with std::function for now --- .../src/airsim_ros_wrapper.cpp | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 1facc07247..0d8aeb0328 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -163,25 +163,25 @@ void AirsimROSWrapper::create_ros_pubs_from_settings_json() // bind to a single callback. todo optimal subs queue length // bind multiple topics to a single callback, but keep track of which vehicle name it was by passing curr_vehicle_name as the 2nd argument - drone->vel_cmd_body_frame_sub_ = nh_->create_subscription(topic_prefix + "/vel_cmd_body_frame", 1, [&](const airsim_interfaces::msg::VelCmd::SharedPtr msg) { this->vel_cmd_body_frame_cb(msg, vehicle_ros->vehicle_name_); }); // todo ros::TransportHints().tcpNoDelay(); - drone->vel_cmd_world_frame_sub_ = nh_->create_subscription(topic_prefix + "/vel_cmd_world_frame", 1, [&](const airsim_interfaces::msg::VelCmd::SharedPtr msg) { this->vel_cmd_world_frame_cb(msg, vehicle_ros->vehicle_name_); }); + std::function fcn_vel_cmd_body_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_body_frame_cb, this, _1, vehicle_ros->vehicle_name_); + drone->vel_cmd_body_frame_sub_ = nh_->create_subscription(topic_prefix + "/vel_cmd_body_frame", 1, fcn_vel_cmd_body_frame_sub); // todo ros::TransportHints().tcpNoDelay(); - drone->takeoff_srvr_ = nh_->create_service(topic_prefix + "/takeoff", - [&](std::shared_ptr request, - std::shared_ptr - response) { this->takeoff_srv_cb(request, response, vehicle_ros->vehicle_name_); }); + std::function fcn_vel_cmd_world_frame_sub = std::bind(&AirsimROSWrapper::vel_cmd_world_frame_cb, this, _1, vehicle_ros->vehicle_name_); + drone->vel_cmd_world_frame_sub_ = nh_->create_subscription(topic_prefix + "/vel_cmd_world_frame", 1, fcn_vel_cmd_world_frame_sub); - drone->land_srvr_ = nh_->create_service(topic_prefix + "/land", - [&](std::shared_ptr request, - std::shared_ptr - response) { this->land_srv_cb(request, response, vehicle_ros->vehicle_name_); }); + std::function, std::shared_ptr)> fcn_takeoff_srvr = std::bind(&AirsimROSWrapper::takeoff_srv_cb, this, _1, _2, vehicle_ros->vehicle_name_); + drone->takeoff_srvr_ = nh_->create_service(topic_prefix + "/takeoff", fcn_takeoff_srvr); + + std::function, std::shared_ptr)> fcn_land_srvr = std::bind(&AirsimROSWrapper::land_srv_cb, this, _1, _2, vehicle_ros->vehicle_name_); + drone->land_srvr_ = nh_->create_service(topic_prefix + "/land", fcn_land_srvr); // vehicle_ros.reset_srvr = nh_->create_service(curr_vehicle_name + "/reset",&AirsimROSWrapper::reset_srv_cb, this); } else { auto car = static_cast(vehicle_ros.get()); - car->car_cmd_sub_ = nh_->create_subscription(topic_prefix + "/car_cmd", 1, [&](const airsim_interfaces::msg::CarControls::SharedPtr msg) { this->car_cmd_cb(msg, vehicle_ros->vehicle_name_); }); + std::function fcn_car_cmd_sub = std::bind(&AirsimROSWrapper::car_cmd_cb, this, _1, vehicle_ros->vehicle_name_); + car->car_cmd_sub_ = nh_->create_subscription(topic_prefix + "/car_cmd", 1, fcn_car_cmd_sub); car->car_state_pub_ = nh_->create_publisher(topic_prefix + "/car_state", 10); }