diff --git a/.cspell-partial.json b/.cspell-partial.json
index f45ae8961c56b..e231eddd712ea 100644
--- a/.cspell-partial.json
+++ b/.cspell-partial.json
@@ -5,5 +5,5 @@
"perception/bytetrack/lib/**"
],
"ignoreRegExpList": [],
- "words": []
+ "words": ["dltype", "tvmgen", "quantizer", "imageio", "mimsave"]
}
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 9de27f82ffcef..e298dccefd827 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -88,13 +88,15 @@ launch/tier4_system_launch/** akihiro.sakurai@tier4.jp fumihito.ito@tier4.jp
launch/tier4_vehicle_launch/** yukihiro.saito@tier4.jp
localization/ekf_localizer/** koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp takamasa.horibe@tier4.jp takeshi.ishita@tier4.jp yamato.ando@tier4.jp
localization/gyro_odometer/** masahiro.sakamoto@tier4.jp yamato.ando@tier4.jp
-localization/landmark_based_localizer/ar_tag_based_localizer/** masahiro.sakamoto@tier4.jp shintaro.sakoda@tier4.jp
-localization/landmark_based_localizer/landmark_tf_caster/** masahiro.sakamoto@tier4.jp shintaro.sakoda@tier4.jp
+localization/landmark_based_localizer/ar_tag_based_localizer/** kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp shintaro.sakoda@tier4.jp yamato.ando@tier4.jp
+localization/landmark_based_localizer/landmark_parser/** kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp shintaro.sakoda@tier4.jp yamato.ando@tier4.jp
localization/localization_error_monitor/** koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp yamato.ando@tier4.jp
+localization/localization_util/** kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp shintaro.sakoda@tier4.jp yamato.ando@tier4.jp
localization/ndt_scan_matcher/** kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp yamato.ando@tier4.jp
localization/pose2twist/** masahiro.sakamoto@tier4.jp yamato.ando@tier4.jp
localization/pose_initializer/** isamu.takagi@tier4.jp masahiro.sakamoto@tier4.jp yamato.ando@tier4.jp
localization/stop_filter/** koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp yamato.ando@tier4.jp
+localization/tree_structured_parzen_estimator/** kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp shintaro.sakoda@tier4.jp yamato.ando@tier4.jp
localization/twist2accel/** koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp yamato.ando@tier4.jp
localization/yabloc/yabloc_common/** kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp
localization/yabloc/yabloc_image_processing/** kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp
@@ -152,7 +154,7 @@ perception/traffic_light_ssd_fine_detector/** daisuke.nishimatsu@tier4.jp
perception/traffic_light_visualization/** yukihiro.saito@tier4.jp
planning/behavior_path_planner/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yutaka.shimizu@tier4.jp zulfaqar.azmi@tier4.jp
planning/behavior_velocity_blind_spot_module/** mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
-planning/behavior_velocity_crosswalk_module/** satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
+planning/behavior_velocity_crosswalk_module/** kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
planning/behavior_velocity_detection_area_module/** kyoichi.sugahara@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
planning/behavior_velocity_intersection_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
planning/behavior_velocity_no_drivable_lane_module/** ahmed.ebrahim@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
@@ -179,7 +181,7 @@ planning/obstacle_cruise_planner/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.j
planning/obstacle_stop_planner/** berkay@leodrive.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp
planning/obstacle_velocity_limiter/** maxime.clement@tier4.jp
planning/path_smoother/** maxime.clement@tier4.jp takayuki.murooka@tier4.jp
-planning/planning_debug_tools/** taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp
+planning/planning_debug_tools/** taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
planning/planning_test_utils/** kyoichi.sugahara@tier4.jp takamasa.horibe@tier4.jp
planning/planning_validator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp
planning/route_handler/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp takayuki.murooka@tier4.jp yutaka.shimizu@tier4.jp zulfaqar.azmi@tier4.jp
@@ -221,7 +223,6 @@ system/emergency_handler/** makoto.kurihara@tier4.jp
system/mrm_comfortable_stop_operator/** makoto.kurihara@tier4.jp
system/mrm_emergency_stop_operator/** makoto.kurihara@tier4.jp
system/system_diagnostic_graph/** isamu.takagi@tier4.jp
-system/system_diagnostic_monitor/** isamu.takagi@tier4.jp
system/system_error_monitor/** fumihito.ito@tier4.jp
system/system_monitor/** akihiro.sakurai@tier4.jp fumihito.ito@tier4.jp
system/topic_state_monitor/** ryohsuke.mitsudome@tier4.jp
diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml
index 3f3bf243f639d..0264c035357bd 100644
--- a/.github/dependabot.yaml
+++ b/.github/dependabot.yaml
@@ -6,5 +6,5 @@ updates:
interval: daily
open-pull-requests-limit: 1
labels:
- - bot
- - github-actions
+ - tag:bot
+ - type:github-actions
diff --git a/.github/labeler.yaml b/.github/labeler.yaml
index 205a24fc7e8f6..c3efa2a1a2b15 100644
--- a/.github/labeler.yaml
+++ b/.github/labeler.yaml
@@ -1,4 +1,4 @@
-ci:
+"type:ci":
- .github/**/*
- "*.json"
- "*.yaml"
@@ -6,36 +6,36 @@ ci:
- .clang-format
- .gitignore
- .prettierignore
-documentation:
+"type:documentation":
- docs/**/*
- "**/*.md"
- "**/*.rst"
- "**/*.jpg"
- "**/*.png"
- "**/*.svg"
-common:
+"component:common":
- common/**/*
-control:
+"component:control":
- control/**/*
-evaluator:
+"component:evaluator":
- evaluator/**/*
-launch:
+"component:launch":
- launch/**/*
-localization:
+"component:localization":
- localization/**/*
-map:
+"component:map":
- map/**/*
-perception:
+"component:perception":
- perception/**/*
-planning:
+"component:planning":
- planning/**/*
-sensing:
+"component:sensing":
- sensing/**/*
-simulator:
+"component:simulator":
- simulator/**/*
-system:
+"component:system":
- system/**/*
-tools:
+"component:tools":
- tools/**/*
-vehicle:
+"component:vehicle":
- vehicle/**/*
diff --git a/.github/stale.yml b/.github/stale.yml
index 84928d1b815ee..bc99e4383cafd 100644
--- a/.github/stale.yml
+++ b/.github/stale.yml
@@ -4,7 +4,7 @@
daysUntilClose: false
# Label to use when marking as stale
-staleLabel: stale
+staleLabel: status:stale
# Comment to post when marking as stale
markComment: >
diff --git a/.github/sync-files.yaml b/.github/sync-files.yaml
index f9cb3065f12a7..4d316b9fb2481 100644
--- a/.github/sync-files.yaml
+++ b/.github/sync-files.yaml
@@ -12,6 +12,8 @@
- source: .github/PULL_REQUEST_TEMPLATE/standard-change.md
- source: .github/dependabot.yaml
- source: .github/stale.yml
+ pre-commands: |
+ sd "staleLabel: stale" "staleLabel: status:stale" {source}
- source: .github/workflows/cancel-previous-workflows.yaml
- source: .github/workflows/github-release.yaml
- source: .github/workflows/pre-commit.yaml
@@ -84,4 +86,8 @@
sd "/edit/main/docs/" "/edit/main/" {source}
sd "docs_dir: .*" "docs_dir: ." {source}
sd "assets/(\w+)" "docs/assets/\$1" {source}
+ sd -- \
+ " - macros" \
+ " - macros:
+ module_name: mkdocs_macros" {source}
- source: docs/assets/js/mathjax.js
diff --git a/.github/workflows/build-and-test-differential.yaml b/.github/workflows/build-and-test-differential.yaml
index e32dccda70b25..e95f4d46a147b 100644
--- a/.github/workflows/build-and-test-differential.yaml
+++ b/.github/workflows/build-and-test-differential.yaml
@@ -11,7 +11,7 @@ jobs:
prevent-no-label-execution:
uses: autowarefoundation/autoware-github-actions/.github/workflows/prevent-no-label-execution.yaml@v1
with:
- label: run-build-and-test-differential
+ label: tag:run-build-and-test-differential
build-and-test-differential:
needs: prevent-no-label-execution
diff --git a/.github/workflows/deploy-docs.yaml b/.github/workflows/deploy-docs.yaml
index 5f2d09d414806..b48d70dbacb0c 100644
--- a/.github/workflows/deploy-docs.yaml
+++ b/.github/workflows/deploy-docs.yaml
@@ -22,7 +22,7 @@ jobs:
prevent-no-label-execution:
uses: autowarefoundation/autoware-github-actions/.github/workflows/prevent-no-label-execution.yaml@v1
with:
- label: deploy-docs
+ label: tag:deploy-docs
deploy-docs:
needs: prevent-no-label-execution
diff --git a/.github/workflows/openai-pr-reviewer.yaml b/.github/workflows/openai-pr-reviewer.yaml
index 0ba732b580204..4ecbd93198276 100644
--- a/.github/workflows/openai-pr-reviewer.yaml
+++ b/.github/workflows/openai-pr-reviewer.yaml
@@ -21,7 +21,7 @@ jobs:
prevent-no-label-execution:
uses: autowarefoundation/autoware-github-actions/.github/workflows/prevent-no-label-execution.yaml@v1
with:
- label: openai-pr-reviewer
+ label: tag:openai-pr-reviewer
review:
needs: prevent-no-label-execution
if: ${{ needs.prevent-no-label-execution.outputs.run == 'true' }}
diff --git a/.github/workflows/sync-files.yaml b/.github/workflows/sync-files.yaml
index b9dc5907a50c4..5025e6c8bd7a7 100644
--- a/.github/workflows/sync-files.yaml
+++ b/.github/workflows/sync-files.yaml
@@ -28,6 +28,6 @@ jobs:
with:
token: ${{ steps.generate-token.outputs.token }}
pr-labels: |
- bot
- sync-files
+ tag:bot
+ tag:sync-files
auto-merge-method: squash
diff --git a/.github/workflows/update-codeowners-from-packages.yaml b/.github/workflows/update-codeowners-from-packages.yaml
index 055d2b02a799a..7898dfe09177a 100644
--- a/.github/workflows/update-codeowners-from-packages.yaml
+++ b/.github/workflows/update-codeowners-from-packages.yaml
@@ -28,6 +28,6 @@ jobs:
with:
token: ${{ steps.generate-token.outputs.token }}
pr-labels: |
- bot
- update-codeowners-from-packages
+ tag:bot
+ tag:update-codeowners-from-packages
auto-merge-method: squash
diff --git a/common/interpolation/package.xml b/common/interpolation/package.xml
index e5d2c7af8d06e..6be04482da3ee 100644
--- a/common/interpolation/package.xml
+++ b/common/interpolation/package.xml
@@ -6,7 +6,6 @@
The spline interpolation package
Fumiya Watanabe
Takayuki Murooka
- Yutaka Shimizu
Apache License 2.0
ament_cmake_auto
diff --git a/common/kalman_filter/include/kalman_filter/kalman_filter.hpp b/common/kalman_filter/include/kalman_filter/kalman_filter.hpp
index 79a47bde3a1b2..b500cffb92279 100644
--- a/common/kalman_filter/include/kalman_filter/kalman_filter.hpp
+++ b/common/kalman_filter/include/kalman_filter/kalman_filter.hpp
@@ -109,20 +109,20 @@ class KalmanFilter
* @brief get current kalman filter state
* @param x kalman filter state
*/
- void getX(Eigen::MatrixXd & x);
+ void getX(Eigen::MatrixXd & x) const;
/**
* @brief get current kalman filter covariance
* @param P kalman filter covariance
*/
- void getP(Eigen::MatrixXd & P);
+ void getP(Eigen::MatrixXd & P) const;
/**
* @brief get component of current kalman filter state
* @param i index of kalman filter state
* @return value of i's component of the kalman filter state x[i]
*/
- double getXelement(unsigned int i);
+ double getXelement(unsigned int i) const;
/**
* @brief calculate kalman filter state and covariance by prediction model with A, B, Q matrix.
diff --git a/common/kalman_filter/src/kalman_filter.cpp b/common/kalman_filter/src/kalman_filter.cpp
index 937819ffb0275..450d40936db2e 100644
--- a/common/kalman_filter/src/kalman_filter.cpp
+++ b/common/kalman_filter/src/kalman_filter.cpp
@@ -77,15 +77,15 @@ void KalmanFilter::setR(const Eigen::MatrixXd & R)
{
R_ = R;
}
-void KalmanFilter::getX(Eigen::MatrixXd & x)
+void KalmanFilter::getX(Eigen::MatrixXd & x) const
{
x = x_;
}
-void KalmanFilter::getP(Eigen::MatrixXd & P)
+void KalmanFilter::getP(Eigen::MatrixXd & P) const
{
P = P_;
}
-double KalmanFilter::getXelement(unsigned int i)
+double KalmanFilter::getXelement(unsigned int i) const
{
return x_(i);
}
diff --git a/common/motion_utils/package.xml b/common/motion_utils/package.xml
index 334b023f7f29a..5f630572c061c 100644
--- a/common/motion_utils/package.xml
+++ b/common/motion_utils/package.xml
@@ -4,7 +4,6 @@
motion_utils
0.1.0
The motion_utils package
- Yutaka Shimizu
Satoshi Ota
Takayuki Murooka
@@ -16,7 +15,6 @@
Mamoru Sobue
Apache License 2.0
- Yutaka Shimizu
Takayuki Murooka
Satoshi Ota
diff --git a/common/tier4_autoware_utils/package.xml b/common/tier4_autoware_utils/package.xml
index 701907929ecc0..e37cd0cc33975 100644
--- a/common/tier4_autoware_utils/package.xml
+++ b/common/tier4_autoware_utils/package.xml
@@ -6,7 +6,6 @@
The tier4_autoware_utils package
Takamasa Horibe
Takayuki Murooka
- Yutaka Shimizu
Mamoru Sobue
Apache License 2.0
diff --git a/common/tier4_camera_view_rviz_plugin/CMakeLists.txt b/common/tier4_camera_view_rviz_plugin/CMakeLists.txt
new file mode 100644
index 0000000000000..8ae8efef1e4b9
--- /dev/null
+++ b/common/tier4_camera_view_rviz_plugin/CMakeLists.txt
@@ -0,0 +1,30 @@
+cmake_minimum_required(VERSION 3.14)
+project(tier4_camera_view_rviz_plugin)
+
+find_package(autoware_cmake REQUIRED)
+autoware_package()
+
+find_package(Qt5 REQUIRED Core Widgets)
+set(QT_LIBRARIES Qt5::Widgets)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ add_compile_options(-Wall -Wextra -Wpedantic)
+ add_compile_options(-Wno-unused-parameter)
+endif()
+
+ament_auto_add_library(${PROJECT_NAME} SHARED
+ src/third_person_view_controller.cpp
+ src/third_person_view_tool.cpp
+ src/bird_eye_view_tool.cpp
+ src/bird_eye_view_controller.cpp
+)
+
+target_link_libraries(${PROJECT_NAME}
+ ${QT_LIBRARIES}
+)
+
+pluginlib_export_plugin_description_file(rviz_common plugins/plugin_description.xml)
+
+ament_auto_package(INSTALL_TO_SHARE icons)
diff --git a/common/tier4_camera_view_rviz_plugin/README.md b/common/tier4_camera_view_rviz_plugin/README.md
new file mode 100644
index 0000000000000..99480d5a92e1c
--- /dev/null
+++ b/common/tier4_camera_view_rviz_plugin/README.md
@@ -0,0 +1,9 @@
+# tier4_camera_view_rviz_plugin
+
+## ThirdPersonView Tool
+
+Add the `tier4_camera_view_rviz_plugin/ThirdPersonViewTool` tool to the RViz. Push the button, the camera will focus on the vehicle and set the target frame to `base_link`. Short cut key 'o'.
+
+## BirdEyeView Tool
+
+Add the `tier4_camera_view_rviz_plugin/BirdEyeViewTool` tool to the RViz. Push the button, the camera will turn to the BEV view, the target frame is consistent with the latest frame. Short cut key 'r'.
diff --git a/common/tier4_camera_view_rviz_plugin/icons/classes/BirdEyeViewTool.png b/common/tier4_camera_view_rviz_plugin/icons/classes/BirdEyeViewTool.png
new file mode 100644
index 0000000000000..6a67573717ae1
Binary files /dev/null and b/common/tier4_camera_view_rviz_plugin/icons/classes/BirdEyeViewTool.png differ
diff --git a/common/tier4_camera_view_rviz_plugin/icons/classes/ThirdPersonViewTool.png b/common/tier4_camera_view_rviz_plugin/icons/classes/ThirdPersonViewTool.png
new file mode 100644
index 0000000000000..6a67573717ae1
Binary files /dev/null and b/common/tier4_camera_view_rviz_plugin/icons/classes/ThirdPersonViewTool.png differ
diff --git a/common/tier4_camera_view_rviz_plugin/package.xml b/common/tier4_camera_view_rviz_plugin/package.xml
new file mode 100644
index 0000000000000..0ede5e37b8287
--- /dev/null
+++ b/common/tier4_camera_view_rviz_plugin/package.xml
@@ -0,0 +1,31 @@
+
+
+
+ tier4_camera_view_rviz_plugin
+ 0.0.0
+ The autoware camera view rviz plugin package
+ Yuxuan Liu
+ Makoto Yabuta
+ Apache License 2.0
+
+ ament_cmake_auto
+ autoware_cmake
+
+ autoware_ad_api_specs
+ component_interface_utils
+ geometry_msgs
+ libqt5-core
+ libqt5-gui
+ libqt5-widgets
+ rclcpp
+ rviz_common
+ rviz_default_plugins
+
+ ament_lint_auto
+ autoware_lint_common
+
+
+ ament_cmake
+
+
+
diff --git a/common/tier4_camera_view_rviz_plugin/plugins/plugin_description.xml b/common/tier4_camera_view_rviz_plugin/plugins/plugin_description.xml
new file mode 100644
index 0000000000000..ab522b80de26a
--- /dev/null
+++ b/common/tier4_camera_view_rviz_plugin/plugins/plugin_description.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ Control the camera for bird-eye view.
+
+
+
+
+ Bird-eye-view Tool. This tool requires the corresponding BirdEyeViewController.
+
+
+
+
+ Control the camera for third-person view.
+
+
+
+
+ Third-person-view Tool. This tool requires the corresponding ThirdPersonViewController.
+
+
+
+
diff --git a/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_controller.cpp b/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_controller.cpp
new file mode 100644
index 0000000000000..bd5c3349d3c35
--- /dev/null
+++ b/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_controller.cpp
@@ -0,0 +1,242 @@
+// Copyright 2023 Autoware Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+/*
+ * Copyright (c) 2009, Willow Garage, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Willow Garage, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "bird_eye_view_controller.hpp"
+
+#include "rviz_common/display_context.hpp"
+#include "rviz_common/properties/bool_property.hpp"
+#include "rviz_common/properties/float_property.hpp"
+#include "rviz_common/viewport_mouse_event.hpp"
+#include "rviz_rendering/objects/shape.hpp"
+#include "rviz_rendering/orthographic.hpp"
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace tier4_camera_view_rviz_plugin
+{
+static const Ogre::Quaternion ROBOT_TO_CAMERA_ROTATION =
+ Ogre::Quaternion(Ogre::Radian(-Ogre::Math::HALF_PI), Ogre::Vector3::UNIT_Y) *
+ Ogre::Quaternion(Ogre::Radian(-Ogre::Math::HALF_PI), Ogre::Vector3::UNIT_Z);
+
+static const float PITCH_LIMIT_LOW = -Ogre::Math::HALF_PI + 0.001;
+static const float PITCH_LIMIT_HIGH = Ogre::Math::HALF_PI - 0.001;
+
+BirdEyeViewController::BirdEyeViewController() : dragging_(false)
+{
+ scale_property_ = new rviz_common::properties::FloatProperty(
+ "Scale", 10, "How much to scale up the size of things in the scene.", this);
+ angle_property_ = new rviz_common::properties::FloatProperty(
+ "Angle", 0, "Angle around the Z axis to rotate.", this);
+ x_property_ =
+ new rviz_common::properties::FloatProperty("X", 0, "X component of camera position.", this);
+ y_property_ =
+ new rviz_common::properties::FloatProperty("Y", 0, "Y component of camera position.", this);
+}
+
+BirdEyeViewController::~BirdEyeViewController()
+{
+}
+
+void BirdEyeViewController::onInitialize()
+{
+ FramePositionTrackingViewController::onInitialize();
+
+ camera_->setProjectionType(Ogre::PT_ORTHOGRAPHIC);
+ auto camera_parent = getCameraParent(camera_);
+ camera_parent->setFixedYawAxis(false);
+ invert_z_->hide();
+}
+
+void BirdEyeViewController::reset()
+{
+ scale_property_->setFloat(10);
+ angle_property_->setFloat(0);
+ x_property_->setFloat(0);
+ y_property_->setFloat(0);
+}
+
+void BirdEyeViewController::handleMouseEvent(rviz_common::ViewportMouseEvent & event)
+{
+ if (event.shift()) {
+ setStatus("Left-Click: Move X/Y.");
+ } else {
+ setStatus(
+ "Left-Click: Rotate. Middle-Click: Move X/Y. Right-Click:: Zoom. "
+ "Shift: More options.");
+ }
+
+ bool moved = false;
+
+ int32_t diff_x = 0;
+ int32_t diff_y = 0;
+
+ if (event.type == QEvent::MouseButtonPress) {
+ dragging_ = true;
+ } else if (event.type == QEvent::MouseButtonRelease) {
+ dragging_ = false;
+ } else if (dragging_ && event.type == QEvent::MouseMove) {
+ diff_x = event.x - event.last_x;
+ diff_y = event.y - event.last_y;
+ moved = true;
+ }
+
+ if (event.left() && !event.shift()) {
+ setCursor(Rotate2D);
+ angle_property_->add(diff_x * 0.005);
+ orientCamera();
+ } else if (event.middle() || (event.shift() && event.left())) {
+ setCursor(MoveXY);
+ float scale = scale_property_->getFloat();
+ move_camera(-diff_x / scale, diff_y / scale);
+ } else if (event.right()) {
+ setCursor(Zoom);
+ scale_property_->multiply(1.0 - diff_y * 0.01);
+ } else {
+ setCursor(event.shift() ? MoveXY : Rotate2D);
+ }
+
+ if (event.wheel_delta != 0) {
+ int diff = event.wheel_delta;
+ scale_property_->multiply(1.0 - (-diff) * 0.001);
+
+ moved = true;
+ }
+
+ if (moved) {
+ context_->queueRender();
+ emitConfigChanged();
+ }
+}
+
+void BirdEyeViewController::orientCamera()
+{
+ camera_->setOrientation(
+ Ogre::Quaternion(Ogre::Radian(angle_property_->getFloat()), Ogre::Vector3::UNIT_Z));
+}
+
+void BirdEyeViewController::mimic(rviz_common::ViewController * source_view)
+{
+ FramePositionTrackingViewController::mimic(source_view);
+
+ if (BirdEyeViewController * source_ortho = qobject_cast(source_view)) {
+ scale_property_->setFloat(source_ortho->scale_property_->getFloat());
+ angle_property_->setFloat(source_ortho->angle_property_->getFloat());
+ x_property_->setFloat(source_ortho->x_property_->getFloat());
+ y_property_->setFloat(source_ortho->y_property_->getFloat());
+ } else {
+ auto source_camera_parent = getCameraParent(source_view->getCamera());
+ setPosition(source_camera_parent->getPosition());
+ }
+}
+void BirdEyeViewController::update(float dt, float ros_dt)
+{
+ FramePositionTrackingViewController::update(dt, ros_dt);
+ updateCamera();
+}
+
+void BirdEyeViewController::lookAt(const Ogre::Vector3 & point)
+{
+ setPosition(point - target_scene_node_->getPosition());
+}
+
+void BirdEyeViewController::onTargetFrameChanged(
+ const Ogre::Vector3 & old_reference_position,
+ const Ogre::Quaternion & /*old_reference_orientation*/)
+{
+ move_camera(
+ old_reference_position.x - reference_position_.x,
+ old_reference_position.y - reference_position_.y);
+}
+
+void BirdEyeViewController::updateCamera()
+{
+ orientCamera();
+
+ float width = camera_->getViewport()->getActualWidth();
+ float height = camera_->getViewport()->getActualHeight();
+
+ float scale = scale_property_->getFloat();
+ Ogre::Matrix4 proj = rviz_rendering::buildScaledOrthoMatrix(
+ -width / scale / 2, width / scale / 2, -height / scale / 2, height / scale / 2,
+ camera_->getNearClipDistance(), camera_->getFarClipDistance());
+ camera_->setCustomProjectionMatrix(true, proj);
+
+ // For Z, we use half of the far-clip distance set in
+ // selection_context.cpp, so that the shader program which computes
+ // depth can see equal distances above and below the Z=0 plane.
+ auto camera_parent = getCameraParent(camera_);
+ camera_parent->setPosition(x_property_->getFloat(), y_property_->getFloat(), 500);
+}
+
+Ogre::SceneNode * BirdEyeViewController::getCameraParent(Ogre::Camera * camera)
+{
+ auto camera_parent = camera->getParentSceneNode();
+
+ if (!camera_parent) {
+ throw std::runtime_error("camera's parent scene node pointer unexpectedly nullptr");
+ }
+ return camera_parent;
+}
+
+void BirdEyeViewController::setPosition(const Ogre::Vector3 & pos_rel_target)
+{
+ x_property_->setFloat(pos_rel_target.x);
+ y_property_->setFloat(pos_rel_target.y);
+}
+
+void BirdEyeViewController::move_camera(float dx, float dy)
+{
+ float angle = angle_property_->getFloat();
+ x_property_->add(dx * cos(angle) - dy * sin(angle));
+ y_property_->add(dx * sin(angle) + dy * cos(angle));
+}
+
+} // namespace tier4_camera_view_rviz_plugin
+
+#include
+PLUGINLIB_EXPORT_CLASS(
+ tier4_camera_view_rviz_plugin::BirdEyeViewController, rviz_common::ViewController)
diff --git a/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_controller.hpp b/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_controller.hpp
new file mode 100644
index 0000000000000..3c0091740bd59
--- /dev/null
+++ b/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_controller.hpp
@@ -0,0 +1,112 @@
+// Copyright 2023 Autoware Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+/*
+ * Copyright (c) 2012, Willow Garage, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Willow Garage, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef BIRD_EYE_VIEW_CONTROLLER_HPP_
+#define BIRD_EYE_VIEW_CONTROLLER_HPP_
+
+#include "rviz_common/frame_position_tracking_view_controller.hpp"
+
+#include
+#include
+
+namespace rviz_common
+{
+namespace properties
+{
+class FloatProperty;
+class Shape;
+class VectorProperty;
+} // namespace properties
+} // namespace rviz_common
+
+namespace tier4_camera_view_rviz_plugin
+{
+/** @brief A first-person camera, controlled by yaw, pitch, and position. */
+class BirdEyeViewController : public rviz_common::FramePositionTrackingViewController
+{
+ Q_OBJECT
+
+public:
+ BirdEyeViewController();
+
+ ~BirdEyeViewController() override;
+
+ void onInitialize() override;
+
+ void handleMouseEvent(rviz_common::ViewportMouseEvent & evt) override;
+
+ void lookAt(const Ogre::Vector3 & point) override;
+
+ void reset() override;
+
+ /** @brief Configure the settings of this view controller to give,
+ * as much as possible, a similar view as that given by the
+ * @param source_view.
+ *
+ * @param source_view must return a valid @c Ogre::Camera* from getCamera(). */
+ void mimic(rviz_common::ViewController * source_view) override;
+
+ void update(float dt, float ros_dt) override;
+
+protected:
+ void onTargetFrameChanged(
+ const Ogre::Vector3 & old_reference_position,
+ const Ogre::Quaternion & old_reference_orientation) override;
+
+ /** Set the camera orientation based on angle_. */
+ void orientCamera();
+
+ void setPosition(const Ogre::Vector3 & pos_rel_target);
+ void move_camera(float x, float y);
+ void updateCamera();
+ Ogre::SceneNode * getCameraParent(Ogre::Camera * camera);
+
+ rviz_common::properties::FloatProperty * scale_property_;
+ rviz_common::properties::FloatProperty * angle_property_;
+ rviz_common::properties::FloatProperty * x_property_;
+ rviz_common::properties::FloatProperty * y_property_;
+ bool dragging_;
+};
+
+} // namespace tier4_camera_view_rviz_plugin
+
+#endif // BIRD_EYE_VIEW_CONTROLLER_HPP_
diff --git a/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_tool.cpp b/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_tool.cpp
new file mode 100644
index 0000000000000..0c50f1ae1a0f4
--- /dev/null
+++ b/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_tool.cpp
@@ -0,0 +1,167 @@
+// Copyright 2023 Autoware Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+/*
+ * UOS-ROS packages - Robot Operating System code by the University of Osnabrück
+ * Copyright (C) 2014 University of Osnabrück
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are permitted
+ * provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of conditions
+ * and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other materials provided with
+ * the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+ * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * route_set_tool.cpp
+ *
+ * Author: Henning Deeken {hdeeken@uos.de}
+ *
+ */
+
+#include "bird_eye_view_tool.hpp"
+
+#include "rviz_common/display_context.hpp"
+#include "rviz_common/view_manager.hpp"
+
+#include
+
+namespace tier4_camera_view_rviz_plugin
+{
+BirdEyeViewTool::BirdEyeViewTool()
+{
+ shortcut_key_ = 'r';
+}
+
+BirdEyeViewTool::~BirdEyeViewTool()
+{
+}
+
+void BirdEyeViewTool::onInitialize()
+{
+ setName("Bird Eye View");
+
+ step_length_property_ = new rviz_common::properties::FloatProperty(
+ "Step Length", 0.1, "The length by with the position is updated on each step.",
+ getPropertyContainer(), SLOT(setOffset()), this);
+
+ boost_property_ = new rviz_common::properties::FloatProperty(
+ "Boost Property", 0.5, "Gives the boost factor which is applied if pressing shift.",
+ getPropertyContainer(), SLOT(setBoost()), this);
+
+ fly_property_ = new rviz_common::properties::BoolProperty(
+ "Fly Mode", false, "In fly mode it is possible to move along the z axis as well.",
+ getPropertyContainer(), SLOT(setFlyMode()), this);
+
+ left_hand_property_ = new rviz_common::properties::BoolProperty(
+ "Left Hand Mode", false, "In left hand mode one uses the arrows to move around",
+ getPropertyContainer(), SLOT(setLeftHandMode()), this);
+
+ fallback_view_controller_property_ = new rviz_common::properties::EnumProperty(
+ "Fallback ViewController", QString("tier4_camera_view_rviz_plugin/BirdEyeView"),
+ "Determines to which view controller the control switches, if the tool is deactivated.",
+ getPropertyContainer(), SLOT(setFallbackViewController()), this);
+
+ m_pos_offset = 0.1;
+ m_boost = 0.5;
+ m_fly_mode = false;
+ m_left_hand_mode = false;
+
+ // temporarily disabled
+ // setFallbackToolProperty();
+ setFallbackViewControllerProperty();
+}
+
+void BirdEyeViewTool::setFallbackViewControllerProperty()
+{
+ fallback_view_controller_property_->clearOptions();
+ m_view_controller_classes.clear();
+
+ m_view_controller_classes = context_->getViewManager()->getDeclaredClassIdsFromFactory();
+
+ for (int i = 0; i < m_view_controller_classes.size(); i++) {
+ if (m_view_controller_classes[i] != QString("tier4_camera_view_rviz_plugin/BirdEyeView")) {
+ fallback_view_controller_property_->addOption(m_view_controller_classes[i], i);
+ m_view_controller.push_back(context_->getViewManager()->getViewAt(i));
+ }
+ }
+
+ fallback_view_controller_property_->show();
+ setFallbackViewController();
+}
+
+// temporarily disabled
+// void BirdEyeViewTool::setFallbackToolProperty()
+// {
+// fallback_tool_property_->clearOptions();
+// m_tools.clear();
+
+// m_tool_classes = context_->getToolManager()->getToolClasses();
+
+// for (int i = 0; i < m_tool_classes.size(); i++) {
+// if (m_tool_classes[i] != getClassId()) {
+// fallback_tool_property_->addOption(m_tool_classes[i], i);
+// m_tools.push_back(context_->getToolManager()->getTool(i));
+// }
+// }
+
+// fallback_tool_property_->show();
+// setFallbackTool();
+// }
+
+void BirdEyeViewTool::activate()
+{
+ context_->getViewManager()->setCurrentViewControllerType(
+ QString("tier4_camera_view_rviz_plugin/BirdEyeView"));
+ context_->getViewManager()->getCurrent()->reset();
+
+ // temporarily disabled
+ // setFallbackToolProperty();
+ setFallbackViewControllerProperty();
+}
+
+void BirdEyeViewTool::deactivate()
+{
+}
+
+int BirdEyeViewTool::processKeyEvent(QKeyEvent * event, rviz_common::RenderPanel * panel)
+{
+ return 0;
+}
+
+int BirdEyeViewTool::processMouseEvent(rviz_common::ViewportMouseEvent & event)
+{
+ if (event.panel->getViewController()) {
+ event.panel->getViewController()->handleMouseEvent(event);
+ setCursor(event.panel->getViewController()->getCursor());
+ }
+ return 0;
+}
+
+} // namespace tier4_camera_view_rviz_plugin
+
+#include
+PLUGINLIB_EXPORT_CLASS(tier4_camera_view_rviz_plugin::BirdEyeViewTool, rviz_common::Tool)
diff --git a/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_tool.hpp b/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_tool.hpp
new file mode 100644
index 0000000000000..212cdd49c13bd
--- /dev/null
+++ b/common/tier4_camera_view_rviz_plugin/src/bird_eye_view_tool.hpp
@@ -0,0 +1,144 @@
+// Copyright 2023 Autoware Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+/*
+ * UOS-ROS packages - Robot Operating System code by the University of Osnabrück
+ * Copyright (C) 2014 University of Osnabrück
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are permitted
+ * provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of conditions
+ * and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other materials provided with
+ * the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * route_set_tool.h
+ *
+ * Author: Henning Deeken
+ *
+ */
+
+#ifndef BIRD_EYE_VIEW_TOOL_HPP_
+#define BIRD_EYE_VIEW_TOOL_HPP_
+
+#include "bird_eye_view_controller.hpp"
+#include "rviz_common/properties/bool_property.hpp"
+#include "rviz_common/properties/enum_property.hpp"
+#include "rviz_common/properties/float_property.hpp"
+#include "rviz_common/render_panel.hpp"
+#include "rviz_common/tool.hpp"
+#include "rviz_common/viewport_mouse_event.hpp"
+
+#include
+#include
+#include
+
+#include