From fe1195e667848f4d52b920ccf2fca3c30f1ded5b Mon Sep 17 00:00:00 2001 From: Takeshi Miura <57553950+1222-takeshi@users.noreply.github.com> Date: Fri, 3 Dec 2021 12:02:37 +0900 Subject: [PATCH] feat: add pointcloud packages (#39) * release v0.4.0 * add convertToXYZCloud (#706) * Fix/concat mutex bug (#711) * modify defautl value Signed-off-by: Yamato Ando * fix bug Signed-off-by: Yamato Ando * fix mutex bug Signed-off-by: Yamato Ando * bug fix and reduce calc cost (#708) * bug fix and reduce calc cost Signed-off-by: Yukihiro Saito * fixed bug Signed-off-by: Yukihiro Saito * Revert "bug fix and reduce calc cost (#708)" (#719) This reverts commit e69564a4071a0849435ac8ffe54fe4e49d8e3974. * Avoid setting CMAKE_BUILD_TYPE=Release in each CMakeLists.txt (#720) * remove set CMAKE_BUILD_TYPE Release in each CMakeLists.txt * remove set CMAKE_BUILD_TYPE Release in ndt_pcl_modified * set compile options for debug in ndt_omp * Fix indent * add warning if -DCMAKE_BUILD_TYPE=Release is not set in ndt_omp Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> * ring_outlier_filter: fix bug, and check azimuth (#727) * fix bug, and check azimuth Signed-off-by: Yamato Ando * reduce calc cost Signed-off-by: Yukihiro Saito Co-authored-by: Yukihiro Saito * Fix/ring outlier filter bug (#762) * fix bug, and check azimuth Signed-off-by: Yamato Ando * reduce calc cost Signed-off-by: Yukihiro Saito * fix bug Signed-off-by: Yukihiro Saito * change default param Signed-off-by: Yukihiro Saito Co-authored-by: Yamato Ando * remove ROS1 packages temporarily Signed-off-by: mitsudome-r * Revert "remove ROS1 packages temporarily" This reverts commit bcab06f1790bbe6d2441ad18a6430fde31ca483e. Signed-off-by: mitsudome-r * add COLCON_IGNORE to ros1 packages Signed-off-by: mitsudome-r * Rename launch files to launch.xml (#28) * Port points preprocessor (#114) * Add pcl_component.h. - originally from Willow Garage. - Ported to ROS2 component class by SImon Thompson. Signed-off-by: Takamasa Horibe * Port CMakelists & package.xml & concatenate_data - timer frequency handing is not ported (the logic is changed) - remove dependency and functions of NodeletLazy Signed-off-by: Takamasa Horibe * move required functions from pcl_component.h to filter.h, port rayground_filter Signed-off-by: Takamasa Horibe * add crop box filter Signed-off-by: Takamasa Horibe * arrange make order Signed-off-by: Takamasa Horibe * port voxel grid downsample filter Signed-off-by: Takamasa Horibe * port pointcloud accumulator Signed-off-by: Takamasa Horibe * port compare map filters Signed-off-by: Takamasa Horibe * port outlier filters Signed-off-by: Takamasa Horibe * port passthrough filters Signed-off-by: Takamasa Horibe * fix pcl deprecates: - replace pcl::uint16_t -> std::uint16_t - replace pcl_isfinite -> std::isfinite - replace pcl::getFieldIndex(input, name, fields) -> pcl::getFieldIndex(name, fields) Signed-off-by: Takamasa Horibe * add parameter service callback (port dynamic reconfigure) Signed-off-by: Takamasa Horibe * remove unused file Signed-off-by: Takamasa Horibe * fix: add missing return Signed-off-by: Takamasa Horibe * add input/output_frame parameter service callback in Filter class Signed-off-by: Takamasa Horibe * message_filter : boost::shared_ptr -> std::shared_ptr Signed-off-by: Takamasa Horibe * fix pcl::getPointCloudDifference deprecate Signed-off-by: Takamasa Horibe * add License Signed-off-by: Takamasa Horibe * fix cmake compile options Signed-off-by: Takamasa Horibe * fix warning Signed-off-by: Takamasa Horibe * move init & subscribe functions to constructor Signed-off-by: Takamasa Horibe * port ring_passthrough_filter.launch.xml Signed-off-by: Takamasa Horibe * fix component register plugin name Signed-off-by: Takamasa Horibe * add default param, remove duplicated node name for debug print Signed-off-by: Takamasa Horibe * add default value for concat_data args Signed-off-by: Takamasa Horibe * add preprocessor.launch.py Signed-off-by: Takamasa Horibe * remove old file Signed-off-by: Takamasa Horibe * add ros parameter initialization Signed-off-by: Takamasa Horibe * remove unused files Signed-off-by: Takamasa Horibe * apply clang format Signed-off-by: Takamasa Horibe * replace _exe to _node for executable Signed-off-by: Takamasa Horibe * remove unused main.cpp Signed-off-by: Takamasa Horibe * minor fix: change param name Signed-off-by: Takamasa Horibe * add preprocessor.launch.xml launch (#123) Signed-off-by: Takamasa Horibe * [pointcloud-preprocessor] Link missing opencv libraries (#133) to fix linker error in downstream package * Rename h files to hpp (#142) * Change includes * Rename files * Adjustments to make things compile * Other packages * Adjust copyright notice on 532 out of 699 source files (#143) * Use quotes for includes where appropriate (#144) * Use quotes for includes where appropriate * Fix lint tests * Make tests pass hopefully * Run uncrustify on the entire Pilot.Auto codebase (#151) * Run uncrustify on the entire Pilot.Auto codebase * Exclude open PRs * ROS2 Linting: pointcloud_preprocessor (#180) * Add linter tests * Run cppcheck and fix errors * Address PR Comments: - Remove the impl file and merge the two header files * Remove colcon build warning for PCL libraries - #129 issue * Address PR comment: - Reorder calls to find package and build dependencies to suppress build warnings * [ray_ground_filter] overwrite frame_id of output_msg with base_frame_ (#216) Signed-off-by: Autoware Co-authored-by: Autoware * fix tf (#232) Signed-off-by: mitsudome-r * apply env_var to use_sim_time (#222) * Ros2 v0.8.0 pointcloud preprocessor (#293) * fix height threshold bug (#1102) (#371) Signed-off-by: mitsudome-r Co-authored-by: Taichi Higashide * Add livox_tag_filter (#368) * Add livox_tag_filter (#1140) * Add livox_tag_filter Signed-off-by: Kenji Miyake * Remove dependency of livox_ros_driver Signed-off-by: Kenji Miyake [livox_tag_filter] port to ROS2 Signed-off-by: mitsudome-r * fix test failures Signed-off-by: mitsudome-r * Move livox_tag_filter under livox/ directory Signed-off-by: mitsudome-r * address review comments Signed-off-by: mitsudome-r * fix lint test error Signed-off-by: mitsudome-r * make livox_tag_filter_node to component Signed-off-by: mitsudome-r Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> * Add tier4_pcl_extensions (#1162) (#377) * Add tier4_pcl_extensions (#1162) * Add tier4_pcl_extensions Signed-off-by: Kenji Miyake * Move to sensing/preprocessor/pointcloud Signed-off-by: Kenji Miyake port to ROS2 Signed-off-by: mitsudome-r * fix lint errors Signed-off-by: mitsudome-r * fix include brackets Signed-off-by: mitsudome-r * add dependency to pcl Signed-off-by: mitsudome-r Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> * Sync with Ros2 v0.8.0 beta (#393) * add nullptr check when publish concatenate data (#369) * Add warning msg when concat pointcloud is not published (#388) Signed-off-by: Kenji Miyake * add timeout notification stamp msgs (#363) * add timeout notification stamp msgs * fix uncursify * delete timeout notification stamped * Revert "delete timeout notification stamped" This reverts commit 365d29209f6a7f5ec75eb80c5d8c2ef38daeae79. * fix message Co-authored-by: Taichi Higashide Co-authored-by: taikitanaka3 <65527974+taikitanaka3@users.noreply.github.com> * Add approximate voxel grid filter (#1144) (#378) * add approximate downsample filter nodelet * add pcl_voxel_grid_modified package * fixed cmake list * use approximate voxel grid filter * rename packages * rename voxel grid filter class Co-authored-by: RyuYamamoto * Fix concatenate data (#396) * Remove std msgs from concatenate data Signed-off-by: wep21 * Adaptive timer Signed-off-by: wep21 * Fix lint Signed-off-by: wep21 * Sensor data qos (#407) * Use sensor data qos for pointcloud preprocessor Signed-off-by: Autoware * Use sensor data qos for pointcloud Signed-off-by: Autoware * Fix lint Signed-off-by: wep21 * Use sensor data qos for livox tag filter and vector map filter Signed-off-by: wep21 * Fix lint Signed-off-by: wep21 Co-authored-by: Autoware * Fix topic name in pointcloud preprocessor (#422) Signed-off-by: wep21 * Fix typo in sensing module (#436) * Import v0.9.1 (#431) * add local optimal solution ocillation check to ndt_scan_matcher (#1182) * Add obstacle_crush diagnostic (#1186) Signed-off-by: Kenji Miyake * Fix diagnostics api (#1185) * Fix diagnostics api Signed-off-by: Kenji Miyake * Don't overwrite level Signed-off-by: Kenji Miyake * Overwrite level of No Fault diagnostics Signed-off-by: Kenji Miyake * Add missing diag in autoware_error_monitor.yaml (#1187) Signed-off-by: Kenji Miyake * Filter hazard_status (#1191) * Filter hazard_status Signed-off-by: Kenji Miyake * Filter leaf diagnostics Signed-off-by: Kenji Miyake * Fix wrong calculation of available memory. (#1168) * Fixed wrong calculation of available memory. * Added comments about output example of free -tb command. * Change monitoring method to get HDD temperature and usage per specified device. (#1195) * Changed monitoring method to get temperature and usage per specified device. * Fixed test codes. * Removed unnecessary (void) parameter. * return input pointcloud when ground plane not found (#1190) * fix yaw-smoothing bug (#1198) * Fix lint Signed-off-by: Kenji Miyake Co-authored-by: Taichi Higashide Co-authored-by: ito-san <57388357+ito-san@users.noreply.github.com> Co-authored-by: tkimura4 * add use_sim-time option (#454) * Format launch files (#1219) Signed-off-by: Kenji Miyake * Fix for rolling (#1226) * Replace doc by description Signed-off-by: Kenji Miyake * Replace ns by push-ros-namespace Signed-off-by: Kenji Miyake * Use unique ptr publish in filters (#1240) Signed-off-by: wep21 * Remove invalid warning of concatenate data (#1245) Signed-off-by: wep21 * Unify Apache-2.0 license name (#1242) * Refine BSD license name (#1244) * Fix issues in downsample filter (#1253) * Add missing return statement * Add override to overridden virtual functions * Add explicit to the constructor callable with a single argument * Use using instead of typedef * Comment out unused function parameters * Fix cpplint warnings (include-what-you-use) * Fix uncrustify warnings (except warnings on inclusion guard) * Add reason why uncrustify excluded * Add override to overridden virtual function * change clock of tf_buffer to RCL_ROS_TIME from RCL_SYSTEM_TIME (#1261) Signed-off-by: Azumi Suzuki * Remove use_sim_time for set_parameter (#1260) Signed-off-by: wep21 * Porting small fix (#1288) * Delete unused code (#1183) * Fix control topic name of closest_velocity_checker.py (#1174) Signed-off-by: Kenji Miyake * Add comments for livox tag (#1188) Signed-off-by: Kenji Miyake * Clear return value (#1193) * Change tracker model of unknown object (#1204) * treat polygon points as relative (#1205) Signed-off-by: Kosuke Murakami * hotfix: reference velocity in consideration of vehicle gear (#1213) * fix reference velocity for vehicle gear * add initialization * revert * add comment * change max area param (#1218) * Fix an identical code for different branches (#1230) * Update livox_tag_filter.launch.xml * Fixup Signed-off-by: Kenji Miyake Co-authored-by: shin <8327162+0x126@users.noreply.github.com> Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> Co-authored-by: Fumiya Watanabe Co-authored-by: Yukihiro Saito Co-authored-by: Kosuke Murakami Co-authored-by: Hiroki OTA Co-authored-by: tkimura4 Co-authored-by: Kazuki Miyahara Co-authored-by: Kenji Miyake * Fix lint errors (#1378) * Fix lint errors Signed-off-by: Kenji Miyake * Fix variable names Signed-off-by: Kenji Miyake * Use transient_local sub for compare_map_filter (#1437) * Use transient_local sub for compare_map_filter Signed-off-by: kosuke55 * Rename nn_dists Signed-off-by: kosuke55 * Remove pointcloud_to_laserscan (#1508) Signed-off-by: wep21 * Feature/compare elevation map (#1488) * suppress warnings for sensing packages (#1729) * add Werror for tier4_pcl_extensions * use std::type instead of pcl::type * use std::isfinite instead of pcl_isfinite * fix getFieldIndex * add Werror * fix uninitialized * add Werror * fix string to char* * Fix dependency type of rosidl_default_generators (#1801) * Fix dependency type of rosidl_default_generators Signed-off-by: Kenji Miyake * Remove unnecessary depends Signed-off-by: Kenji Miyake * Use ament_cmake_auto Signed-off-by: Kenji Miyake * Add concatenate_date diagnostic (#1808) * Add concatenate_date diagnostic Signed-off-by: kosuke55 * Fix spell transed -> transformed Signed-off-by: kosuke55 * Remove unused functions Signed-off-by: kosuke55 * Fix output topic name Signed-off-by: kosuke55 * Remove pub_concat_status Signed-off-by: kosuke55 * Remove concat_num and not_subscribed_topic_names publisher Signed-off-by: kosuke55 * Use set insted of vector * Refactor daignostics function * Add const * Use empty insted of size * Remove updater_ constructor * Initialize not_subscribed_topic_names_with input_topics and remove concat_num key-value * Use ternary operator for diag level and message * Clarify to use std::string instead of auto * Use ternary operator for subscribe status * Add const * Fix ternary operator * Change order of diag stat * Change to subscribe_status * Fix ternary operator * Add include set for include_what_you_use * Fix subscribe_status * Fix -Wunused-parameter (#1836) * Fix -Wunused-parameter Signed-off-by: Kenji Miyake * Fix mistake Signed-off-by: Kenji Miyake * fix spell * Fix lint issues Signed-off-by: Kenji Miyake * Ignore flake8 warnings Signed-off-by: Kenji Miyake Co-authored-by: Hiroki OTA * Fix compiler warnings (#1837) * Fix -Wunused-private-field Signed-off-by: Kenji Miyake * Fix -Wunused-variable Signed-off-by: Kenji Miyake * Fix -Wformat-security Signed-off-by: Kenji Miyake * Fix -Winvalid-constexpr Signed-off-by: Kenji Miyake * Fix -Wdelete-non-abstract-non-virtual-dtor Signed-off-by: Kenji Miyake * Fix -Wdelete-abstract-non-virtual-dtor Signed-off-by: Kenji Miyake * Fix -Winconsistent-missing-override Signed-off-by: Kenji Miyake * Fix -Wrange-loop-construct Signed-off-by: Kenji Miyake * Fix "invalid application of 'sizeof' to an incomplete type" Signed-off-by: Kenji Miyake * Ignore -Wgnu-anonymous-struct and -Wnested-anon-types Signed-off-by: Kenji Miyake * Fix lint Signed-off-by: Kenji Miyake * Ignore -Wno-deprecated-declarations in CUDA-related packages Signed-off-by: Kenji Miyake * Fix mistake Signed-off-by: Kenji Miyake * Fix -Wunused-parameter Signed-off-by: Kenji Miyake * Fix vector_map_filter downsample (#1847) * Fix vector_map_filter downsample Signed-off-by: kosuke55 * Fix spell Signed-off-by: kosuke55 * Reserve centralized_cloud Signed-off-by: kosuke55 * Move returning to downsample original coords lines * Return to the original coords when creating filtered_cloud * Remove voxel_size_z * Fix spell * Remove unnecessary comment * Remove unnecessary index check * Remove voxel_size_z in header * Fix spellcheck fail for some packages (#1842) * fix transed -> transformed * fix Urefex to Uref_ex * fix spell * Yrefex -> Yref_ex * add space * fix for spellcheck * fix for lint * fix feedbacked to feedback * delete Yref_ex * fix some typos (#1941) * fix some typos * fix typo * Fix typo Signed-off-by: Kenji Miyake Co-authored-by: Kenji Miyake * Invoke code formatter at pre-commit (#1935) * Run ament_uncrustify at pre-commit * Reformat existing files * Fix copyright and cpplint errors Signed-off-by: Kenji Miyake Co-authored-by: Kenji Miyake * add sort-package-xml hook in pre-commit (#1881) * add sort xml hook in pre-commit * change retval to exit_status * rename * add prettier plugin-xml * use early return * add license note * add tier4 license * restore prettier * change license order * move local hooks to public repo * move prettier-xml to pre-commit-hooks-ros * update version for bug-fix * apply pre-commit * Port filter subscribe and unsbscribe (#2048) * Port filter subscribe and unsbscribe Signed-off-by: kosuke55 * Add message_filters unsubscribe * Use filter unsubscribe for compare_elevation_map (#2049) * Use filter unsubscribe for compare_elevation_map Signed-off-by: kosuke55 * Use override instead of virtual * Add including header for clang-tidy * Add missing dependencies of diagnostic_updater (#2242) Signed-off-by: Kenji Miyake * Feature/porting occupancy grid (#1621) * probabilistic occupancy grid map for blind spot (#1124) * add probabilistic occupancy grid map * cosmetic change * bug fix * bug fix * cosmetic change * cosmetic change * cosmetic change * bug fix * modify topic name and launch * fix typo * improve occupancy grid map (#1498) * use obstacle pointcloud * fix bug * update Signed-off-by: Yukihiro Saito * add readme * modify license and fix bug * change param * fix typo * fix typo * disable roslint * cosmetic change * modify readme * bug fix (#1514) * Fix occupancy grid map (#1524) * bug fix * cosmetic change * refactor and bug fix * Porting occupancy grid to ros2 Signed-off-by: wep21 * Fix typo Signed-off-by: wep21 * Fix file name in README Signed-off-by: wep21 * pre-commit fixes Signed-off-by: wep21 Co-authored-by: Yukihiro Saito * Feature/porting occupancy grid filter (#1721) * Feature/occupancy grid map based outlier filter (#1555) * bug fix * add occupancy grid map based outlier filter * cosmetic change * update occupancy grid map launch * modify license * cosmetic change * disable debug * fix definition of wrong function * cosmetic change Signed-off-by: wep21 * pre-commit fixes Signed-off-by: wep21 * Update build_depend.repos Signed-off-by: wep21 * Fix message type in readme Signed-off-by: wep21 * Fix topic name in readme Signed-off-by: wep21 * Fix lint Signed-off-by: wep21 Co-authored-by: Yukihiro Saito * Add a new ground filter node (#1509) (#1691) * Add a new ground filter node (#1509) * Initial commit * Implement simple classification method * Update classification algorithm * Change virtual ground point to front wheel center * Update classification algorithm (classify from center of ground points cluster) * Remove unused code and add some comments. * Add document and sample launch file * Fix typo * Fix typo * change variable name * Fix bug * Fix typo, Fix coding style * Update params in launch file * Use autoware_utils::calcDistance3d to calculate distance between two points * Use radians instead of degrees * Change default param config * Add more description about the algorithm Signed-off-by: wep21 * Feature/occupancy grid map based outlier filter (#1555) * bug fix * add occupancy grid map based outlier filter * cosmetic change * update occupancy grid map launch * modify license * cosmetic change * disable debug * fix definition of wrong function * cosmetic change * pre-commit fixes Signed-off-by: wep21 * Fix lint Signed-off-by: wep21 Co-authored-by: Shunsuke Miura <37187849+miursh@users.noreply.github.com> Co-authored-by: Yukihiro Saito * Fix build warning (#1745) Signed-off-by: wep21 * Feature/porting occlusion spot (#1740) * Feature/occlusion_spot safety planner public road (#1594) * add blind spot safety planner public road * remove duplicated procesing * remove unused private param * renaming fix typo add comments * fix spell check * velocity -> relative velocity * calc2d, To param, simplify search, To original * add the num possible collision gurd * computational cost reduction * Cosmetic change for PossibleCollisionInfo * add interpolation to possible collision value * refactor codes * fix details * invalid point gurd * To Param * refacotor to occlusion spot util * cosmetic change * clean up blindspot * To Occlusion Spot * revise readme * refactor drawing * for better explanation * fix velocity profile * clean up details * cosmetic change for debug marker * use max velocity in obstacle info instead * add gtest for Too Many Possible Collision case * change case * refactor readme * minor fix * add more occlusion spot explanation * replace svg * add gtest build path lanelet * hotfix lateral distance and searching method * update g test for lateral distance * use faster search * set more realistic param * add lanelet subtype highway * cosmetic change of reviews * add occlusion spot module in private area (#1640) * add occlusion spot in private * For debugging change * add spline interpolation to path * add review changes * adding minor change * cosmetic change * Vector to retval * Blindspot To OcclusionSpot1 * To Occlusion Spot 2 * To Occlusions spot3 * update gtest with unified anchor * remove anchor * add test slice * simplify interpolation * Too Occlusion spot4 * add test buffer * To Occlusion spot * namespace gurd * correct slice and add interpolation first * handle self crossing with check for invation * to ros debug stream * removed unused interpolation * add readme to plant uml * cosmetic change * minor change * update readme * review change * change occlusion spot text color * To Offset no Throw * better debug marker * catch only inversion error * skip return in case of inversion * for better grid * simplify path lanelet at first * remove std::cout * for better path * limit ego path inside target lanelet location * remove last points * cosmetic change for markers * apply module for limited scene * fix interpolation gurd * for better params * do not includes path behind * remove dummy perception publisher * Revert "remove dummy perception publisher" This reverts commit 4acad985fe31dd9befaa21a16631495de6c3a117. * replace hard coded occupancy grid option in psim * remove respawn * add arg to params and remove redundunt launch * fix spell check * fix default value Co-authored-by: tkimura4 * Feature/occlusion spot private slice size param (#1703) * add min slice size * for a bit narrow lateral distance * Update planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/config/occlusion_spot_param.yaml Co-authored-by: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Co-authored-by: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> * Rename files Signed-off-by: wep21 * Porting to ros2 Signed-off-by: wep21 * pre-commit fixes Signed-off-by: wep21 * Fix typo Signed-off-by: wep21 * Fix launch namespace Co-authored-by: tkimura4 * Fix parameter type Co-authored-by: tkimura4 * Update planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/src/scene_module/occlusion_spot/scene_occlusion_spot_in_private_road.cpp Co-authored-by: tkimura4 Co-authored-by: taikitanaka3 <65527974+taikitanaka3@users.noreply.github.com> Co-authored-by: tkimura4 Co-authored-by: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> * Fix out of range because of float cast (#1753) Signed-off-by: wep21 * catch exception at look up transform and fix index ROS2 (#1761) * catch exception at look up transform * add return to exception case * fix ament lint * fix typo and index * add catch and fix lint * use catch partly * error to warn and fix indent * add child info to logger * add throttle and return * Fix compile warnings (#1852) Fix -Wunused-parameter Signed-off-by: Kenji Miyake Fix -Wunused-private-field Signed-off-by: Kenji Miyake Fix -Wunused-lambda-capture Signed-off-by: Kenji Miyake Fix -Wdelete-non-abstract-non-virtual-dtor Signed-off-by: Kenji Miyake Fix -Wrange-loop-construct Signed-off-by: Kenji Miyake Ignore lint error Signed-off-by: Kenji Miyake * Feature/distortion corrector (#1782) * Fix/preprocessor format (#1921) * Enable uncrustify Signed-off-by: wep21 * Apply uncrustify Signed-off-by: wep21 * Feature/left intensity (#1912) * left intensity * apply formatting rules * leave as it is * rename function * Update occ grid docs (#1991) * update docs * cosmetic change * update readme (#1992) * Apply format (#1999) Signed-off-by: Kenji Miyake Fix cpplint Signed-off-by: Kenji Miyake * Fix/ground filter classification algorithm (#2038) * Check the distance from object cluster for non ground following points to calculate the slope * fix cpplint error * fix cpplint error * Fix package.xml (#2056) Signed-off-by: Kenji Miyake * Feature/port dual return filter (#2020) * Original commit, with basic weak first filtering * Add simple diagnostic, ring outlier for normal points, format * Separate weak first and normal point ring outlier filter parameters, update published topics for investigation * rename header * porting * add config file * add launch * visiblity and noise * add missing subscribe function * remove unnecessary subscriber * add publishing topic * add visiblity diag * enable image transport * minor fix * uncrusify * add image transport * add visiblity thresh param * typo fix * add dynamic reconf param * tmp_dual_echo * point cloud type fix * cosmetic change * precommit * Update sensing/preprocessor/pointcloud/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/dual_return_outlier_filter_nodelet.hpp Co-authored-by: davidw Co-authored-by: Shinnosuke Hirakawa * add key value (#2209) * add key value * Update sensing/preprocessor/pointcloud/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> * cosmetic change Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> * Change formatter to clang-format and black (#2332) * Revert "Temporarily comment out pre-commit hooks" This reverts commit 748e9cdb145ce12f8b520bcbd97f5ff899fc28a3. * Replace ament_lint_common with autoware_lint_common Signed-off-by: Kenji Miyake * Remove ament_cmake_uncrustify and ament_clang_format Signed-off-by: Kenji Miyake * Apply Black Signed-off-by: Kenji Miyake * Apply clang-format Signed-off-by: Kenji Miyake * Fix build errors Signed-off-by: Kenji Miyake * Fix for cpplint * Fix include double quotes to angle brackets Signed-off-by: Kenji Miyake * Apply clang-format Signed-off-by: Kenji Miyake * Fix build errors Signed-off-by: Kenji Miyake * Add COLCON_IGNORE (#500) Signed-off-by: Kenji Miyake * port vector map filter (#507) * remove COLCON_IGNORE * use HADMapBin.idl * remove COLCON_IGNORE (#515) * port ground/compare map filter for perception as segmentation stack (#490) * move ground filter to perception from sensing * cleanup ground filter launch file * remove ground filter from sensing * refer pointclound_preprocessor/filter.hpp * rename package ground_filter -> ground_segmentation * add compare_map_filter into object_segmentation as compare_map_segmentation * fix include guard in ground segmentation * cleanup readme * remove compare map filter from sensing stack * remove unnecessary dependency * remove more depends * remove std_msgs from pkg depends * [ polar grid ] add readme polar grid remove colcon ignore (#559) * remove ignore * add readme * fix invalid link * [vehicle_info_util] add readme (#560) * add readme * fix typo * replace to valid link * doc livox tag filter (#594) * add minimal doc * fix doc * doc tier4 pcl extensions (#598) * use velocity report (#596) * use velocity report * remove velocity report porting from gyro_odometor Co-authored-by: Takayuki Murooka * Remove template comments from node documents (#608) * rename document file * remove template comment * Auto/document pointclound preprocessor (#607) * add document template * minimal doc * rm dust * fix path * add minimal description * update parameter description * update porpose * update document title * fix typo * fix outlier filter doc * update crop-box-filter & concatenate-data * fix typo * add distortion corrector * fix topic type * add passthrough filter doc * add vector map filter doc * add point cloud preprocessor doc * add downsampling doc * fix broken link * fix wrong input topic (#647) * update to support velocity report header (#655) * update to support velocity report header Signed-off-by: Takamasa Horibe * Update simulator/simple_planning_simulator/src/simple_planning_simulator/simple_planning_simulator_core.cpp Co-authored-by: tkimura4 * use maybe_unused Signed-off-by: Takamasa Horibe * fix precommit Signed-off-by: Takamasa Horibe Co-authored-by: tkimura4 * adapt to actuation cmd/status as control msg (#646) * adapt to actuation cmd/status as control msg * fix readme * fix topics * fix remaing topics * as to pacmod interface * fix vehicle status * add header to twist * revert gyro_odometer_change * revert twist topic change * revert unchanged package * initialize pointer (#660) * add tf2_geometry_msgs include to distorction_filter (#664) * add tf2_geometry_msgs include * add tf2_geometry_msgs pkg depend * Sync .auto branch with the latest branch in internal repository (#691) * add trajectory point offset in rviz plugin (#2270) * sync rc rc/v0.23.0 (#2258) * fix interpolation for insert point (#2228) * fix interpolation for insert point * to prev interpolation pkg * Revert "to prev interpolation pkg" This reverts commit 9eb145b5d36e297186015fb17c267ccd5b3c21ef. Co-authored-by: taikitanaka3 <65527974+taikitanaka3@users.noreply.github.com> Co-authored-by: taikitanaka * fix topic name (#2266) Signed-off-by: Takamasa Horibe * Add namespace to diag for dual_return_filter (#2269) * Add a function to make 'geometry_msgs::msg::TransformStamped' (#2250) * Add a function to make 'geometry_msgs::msg::TransformStamped' * Add 'child_frame_id' as an argument of 'pose2transform' * Simplify marker scale initialization (#2286) * Fix/crosswalk polygon (#2279) * extend crosswalk polygon * improve readability * fix polygon shape * Add warning when decel distance calculation fails (#2289) Signed-off-by: Makoto Kurihara * [motion_velocity_smoother] ignore debug print (#2292) * cosmetic change Signed-off-by: Takamasa Horibe * cahnge severity from WARN to DEBUG for debug info Signed-off-by: Takamasa Horibe * use util for stop_watch Signed-off-by: Takamasa Horibe * fix map based prediction (#2200) * fix map based prediction * fix format * change map based prediction * fix spells * fix spells in comments * fix for cpplint * fix some problems * fix format and code for clang-tidy * fix space for cpplint * Update Readme.md * Update perception/object_recognition/prediction/map_based_prediction/Readme.md * Update perception/object_recognition/prediction/map_based_prediction/Readme.md * Update perception/object_recognition/prediction/map_based_prediction/Readme.md * Update perception/object_recognition/prediction/map_based_prediction/Readme.md * Update perception/object_recognition/prediction/map_based_prediction/Readme.md * Update perception/object_recognition/prediction/map_based_prediction/Readme.md * fix vector access method * fix readme format * add parameter * Update perception/object_recognition/prediction/map_based_prediction/Readme.md Co-authored-by: Kazuki Miyahara * Update perception/object_recognition/prediction/map_based_prediction/Readme.md Co-authored-by: Kazuki Miyahara * Update perception/object_recognition/prediction/map_based_prediction/Readme.md Co-authored-by: Kazuki Miyahara * Update Readme.md * Update perception/object_recognition/prediction/map_based_prediction/Readme.md Co-authored-by: Kazuki Miyahara Co-authored-by: tkimura4 Co-authored-by: Kazuki Miyahara * remove failure condition for 0 velocity trajectory (#2295) Signed-off-by: Takamasa Horibe * [mpc_follower] remove stop distance condition from stopState decision (#1916) * [mpc_follower] remove stop distance condition from stopState decision Signed-off-by: Takamasa Horibe * add invalid index handling Signed-off-by: Takamasa Horibe * Move the debug marker initialization part to another file (#2288) * Move the debug marker initialization part to 'debug.cpp' * Make 'isLocalOptimalSolutionOscillation' independent from 'NDTScanMatcher' (#2300) * Remove an unused function 'getTransform' (#2301) * Simplify iteration of initial poses (#2310) * Make a transform object const (#2311) * Represent poses in 'std::vector' instead of 'geometry_msgs::msg::PoseArray' (#2312) * Feature/no stopping area (#2163) * add no stopping area module to behavior velocity planner * apply utils * add polygon interpolation module order stopline around area is considered * devide jpass udge with stop line polygon * update docs * rename file name * update to latest * minor change for marker * update license Co-authored-by: Yukihiro Saito * update license Co-authored-by: Yukihiro Saito * update license Co-authored-by: Yukihiro Saito * update license Co-authored-by: Yukihiro Saito * minor fix * add parameter tuning at experiment * update readme * format doc * apply comments * add exception gurd * cosmetic change * fix ament * fix typo and remove for statement * & to " " * better ns * return pass judge param * add missing stoppable condition * add clear pass judge and stoppable flag * add comment * precommit fix * cpplint Co-authored-by: Yukihiro Saito * sync rc rc/v0.23.0 (#2281) * Fix side shift planner (#2171) (#2172) * add print debug Signed-off-by: TakaHoribe * remove forward shift points when adding new point Signed-off-by: TakaHoribe * remove debug print Signed-off-by: TakaHoribe * format Signed-off-by: TakaHoribe * Fix remove threshold Co-authored-by: Fumiya Watanabe Co-authored-by: Takamasa Horibe * Fix/pull out and pull over (#2175) * delete unnecessary check * fix condition of starting pull out * Add emergency status API (#2174) (#2182) * Fix/mpc reset prev result (#2185) (#2195) * reset prev result * clean code * reset only raw_steer_cmd * Update control/mpc_follower/src/mpc_follower_core.cpp Co-authored-by: Takamasa Horibe Co-authored-by: Takamasa Horibe Co-authored-by: Takamasa Horibe * [hotfix] 1 path point exception after resampling (#2204) * fix 1 path point exception after resampling Signed-off-by: TakaHoribe * Apply suggestions from code review * Apply suggestions from code review Co-authored-by: Takamasa Horibe Co-authored-by: tkimura4 * [hotfix] Fix lane ids (#2211) * Fix lane ids * Prevent acceleration on avoidance (#2214) * prevent acceleration on avoidance Signed-off-by: TakaHoribe * fix param name Signed-off-by: TakaHoribe * parametrize avoidance acc Signed-off-by: Takamasa Horibe * change param name Signed-off-by: Takamasa Horibe * fix typo Signed-off-by: Takamasa Horibe * Fix qos in roi cluster fusion (#2218) * fix confidence (#2220) * too high confidence (#2229) * Fix/obstacle stop 0.23.0 (#2232) * fix unexpected slow down in sharp curves (#2181) * Fix/insert implementation (#2186) Co-authored-by: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> * [hotfix] Remove exception in avoidance module (#2233) * Remove exception * Fix clock * Remove blank line * Update traffic light state if ref stop point is ahead of previous one (#2197) Signed-off-by: wep21 * fix interpolation for insert point (#2228) * fix interpolation for insert point * to prev interpolation pkg * fix index (#2265) * turn signal calculation (#2280) * add turn signal funtion in path shifter * add ros parameters Co-authored-by: Fumiya Watanabe Co-authored-by: Takamasa Horibe Co-authored-by: tkimura4 Co-authored-by: Takagi, Isamu <43976882+isamu-takagi@users.noreply.github.com> Co-authored-by: Daisuke Nishimatsu <42202095+wep21@users.noreply.github.com> Co-authored-by: Yukihiro Saito Co-authored-by: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Co-authored-by: taikitanaka3 <65527974+taikitanaka3@users.noreply.github.com> Co-authored-by: Sugatyon <32741405+Sugatyon@users.noreply.github.com> * [behavior_path_planner] fix sudden path change around ego (#2305) (#2318) * fix return-from-ego shift point generation logic Signed-off-by: Takamasa Horibe * change param for trimSimilarGradShiftPoint Signed-off-by: Takamasa Horibe * add comment for issue Signed-off-by: Takamasa Horibe * update comment Signed-off-by: Takamasa Horibe * replace code with function (logic has not changed) Signed-off-by: Takamasa Horibe * move func to cpp Signed-off-by: Takamasa Horibe * add comment for issue Signed-off-by: Takamasa Horibe * fix typo Signed-off-by: Takamasa Horibe * Update planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/src/scene_module/avoidance/avoidance_module.cpp Co-authored-by: Kazuki Miyahara * Update planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/src/scene_module/avoidance/avoidance_module.cpp Co-authored-by: Kazuki Miyahara Co-authored-by: Kazuki Miyahara Co-authored-by: Takamasa Horibe Co-authored-by: Kazuki Miyahara * Add functions to make stamped scalar messages (#2317) * Fix/object yaw in intersection module (#2294) * fix object orientation * fix function name * add guard (#2321) * reduce cost (double to float) (#2298) * Add detail collision check (#2274) * Add detail collision check Signed-off-by: wep21 * Remove unused function Signed-off-by: wep21 * Fix arc length Signed-off-by: wep21 * Seperate time margin Signed-off-by: wep21 * Fix parameter name Signed-off-by: wep21 * Update Readme Signed-off-by: wep21 * Address review: Add comment for TimeDistanceArray Signed-off-by: wep21 * Run pre-commit Signed-off-by: wep21 * Fix cpplint Signed-off-by: wep21 * Add return for empty polygon Signed-off-by: wep21 * update CenterPoint (#2222) * update to model trained by mmdet3d * add vizualizer (debug) * for multi-frame inputs * chagne config * use autoware_utils::pi * project specific model and param * rename vfe -> encoder * rename general to common * update download link * update * fix * rename model_name * change training toolbox link * chage lint package * fix test error * commit suggestion * Feature/lane change detection (#2331) * add old information deleter * fix access bug * change to deque * update obstacle buffer * fix some bugs * add lane change detector * make a update lanelet function * fix code style * parameterize essential values * Update perception/object_recognition/prediction/map_based_prediction/src/map_based_prediction_ros.cpp Co-authored-by: Kazuki Miyahara * fix slash position * remove unnecessary lines * fix format * fix format * change to new enum * fix format * fix typo and add guard * change funciton name * add lane change description Co-authored-by: Kazuki Miyahara * Add Planning Evaluator (#2293) * Add prototype planning evaluator Produced data for dist between points, curvature, and relative angle * Cleanup the code to make adding metrics easier * Add remaining basic metrics (length, duration, vel, accel, jerk) * Add motion_evaluator to evaluate the actual ego motion + code cleanup * Add deviation metrics * Add naive stability metric * Handle invalid stat (TODO: fix the output file formatting) * Add parameter file and cleanup * Add basic obstacle metric (TTC not yet implemented) and fix output file format * Add basic time to collision * Add lateral-distance based stability metric * Add check (at init time) that metrics' maps are complete * Publish metrics as ParamaterDeclaration msg (for openscenario) * Use lookahead and start from ego_pose when calculating stability metrics * Code cleanup * Fix lint * Add tests * Fix bug with Frechet dist and the last traj point * Finish implementing tests * Fix lint * Code cleanup * Update README.md * Remove unused metric * Change msg type of published metrics to DiagnosticArray * fix format to fix pre-commit check Signed-off-by: Takamasa Horibe * fix yaml format to fix pre-commit check Signed-off-by: Takamasa Horibe * fix yaml format Signed-off-by: Takamasa Horibe * apply clang-format Signed-off-by: Takamasa Horibe * apply clang-format Signed-off-by: Takamasa Horibe * Update planning/planning_diagnostics/planning_evaluator/include/planning_evaluator/planning_evaluator_node.hpp * Update planning/planning_diagnostics/planning_evaluator/test/test_planning_evaluator_node.cpp * Update planning/planning_diagnostics/planning_evaluator/test/test_planning_evaluator_node.cpp * change lint format to autoware_lint_common Signed-off-by: Takamasa Horibe Co-authored-by: Takamasa Horibe * Add keep braking function at driving state (#2346) * Add keep braking function at driving state Signed-off-by: Makoto Kurihara * Remove debug messages Signed-off-by: Makoto Kurihara * Fix format Signed-off-by: Makoto Kurihara * Change diag_updater's pediod from default to 0.1sec (#2348) * add cross judgement and common signal function (#2319) * merge branch turn_signal_common * add turn signal function in signal decider * add cross judge in path_utilities and delete from turn_signal_decider * remove original signal calculation in lane change * omit substitution * replace turn signal decider in pull over function * modify cross judge logic * replace turn signal decider in avoidance * add readme of turn signal * update * delete print debug * update * delete lane change decider in path shifter * delete blank line * fix indent * fix typo * fix typo * decrease nest * run pre commit * Add 0 limit at forward jerk velocity filter (#2340) Signed-off-by: Makoto Kurihara * add time offset param to point cloud concatenation (#2303) * add offset param * clang-format Co-authored-by: Akihito OHSATO * Feature/add doc for keep braking function at driving state (#2366) * Add the description of brake keeping Signed-off-by: Makoto Kurihara * Add the english document Signed-off-by: Makoto Kurihara * Improve description Signed-off-by: Makoto Kurihara * Add english description Signed-off-by: Makoto Kurihara * Fix include files (#2339) Signed-off-by: Kenji Miyake * fix behavior intersection module * fix behavior no stopping area module * fix planning_evaluator * fix motion_velocity_smoother * rename variable * Revert "[mpc_follower] remove stop distance condition from stopState decision (#1916)" This reverts commit ff4f0b5a844d1f835f1b93bd3b36a76747b0cd02. * Revert "Add keep braking function at driving state (#2346)" This reverts commit f0478187db4c28bf6092c198723dcc5ec11a9c70. * Revert "Feature/add doc for keep braking function at driving state (#2366)" This reverts commit 66de2f3924a479049fce2d5c5c6b579cacbd3e49. * Fix orientation availability in centerpoint Signed-off-by: wep21 * fix test_trajectory.cpp * add target link libraries * Use .auto msg in test code for planniing evaluator Signed-off-by: wep21 * fix include Signed-off-by: wep21 Co-authored-by: Takayuki Murooka Co-authored-by: autoware-iv-sync-ci[bot] <87871706+autoware-iv-sync-ci[bot]@users.noreply.github.com> Co-authored-by: taikitanaka3 <65527974+taikitanaka3@users.noreply.github.com> Co-authored-by: taikitanaka Co-authored-by: Takamasa Horibe Co-authored-by: Takeshi Miura <57553950+1222-takeshi@users.noreply.github.com> Co-authored-by: Takeshi Ishita Co-authored-by: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Co-authored-by: Makoto Kurihara Co-authored-by: purewater0901 <43805014+purewater0901@users.noreply.github.com> Co-authored-by: tkimura4 Co-authored-by: Kazuki Miyahara Co-authored-by: Yukihiro Saito Co-authored-by: Fumiya Watanabe Co-authored-by: Takagi, Isamu <43976882+isamu-takagi@users.noreply.github.com> Co-authored-by: Sugatyon <32741405+Sugatyon@users.noreply.github.com> Co-authored-by: s-murakami-esol <81723883+s-murakami-esol@users.noreply.github.com> Co-authored-by: Yusuke Muramatsu Co-authored-by: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Co-authored-by: Shunsuke Miura <37187849+miursh@users.noreply.github.com> Co-authored-by: Shinnosuke Hirakawa <8327162+0x126@users.noreply.github.com> Co-authored-by: Akihito OHSATO Co-authored-by: Kenji Miyake Co-authored-by: mitsudome-r Co-authored-by: Taichi Higashide Co-authored-by: YamatoAndo Co-authored-by: Yukihiro Saito Co-authored-by: Daichi Murakami Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> Co-authored-by: Nikolai Morin Co-authored-by: Takamasa Horibe Co-authored-by: Frederik Beaujean <72439809+fred-apex-ai@users.noreply.github.com> Co-authored-by: Jilada Eccleston Co-authored-by: Ryohsuke Mitsudome <43976834+mitsudome-r@users.noreply.github.com> Co-authored-by: Autoware Co-authored-by: Kosuke Murakami Co-authored-by: Daisuke Nishimatsu <42202095+wep21@users.noreply.github.com> Co-authored-by: taikitanaka3 <65527974+taikitanaka3@users.noreply.github.com> Co-authored-by: RyuYamamoto Co-authored-by: Kazuki Miyahara Co-authored-by: ito-san <57388357+ito-san@users.noreply.github.com> Co-authored-by: tkimura4 Co-authored-by: s-azumi <38061530+s-azumi@users.noreply.github.com> Co-authored-by: Keisuke Shima Co-authored-by: shin <8327162+0x126@users.noreply.github.com> Co-authored-by: Fumiya Watanabe Co-authored-by: Hiroki OTA Co-authored-by: Kenji Miyake Co-authored-by: Kosuke Takeuchi Co-authored-by: Takeshi Ishita Co-authored-by: Keisuke Shima <19993104+KeisukeShima@users.noreply.github.com> Co-authored-by: Shunsuke Miura <37187849+miursh@users.noreply.github.com> Co-authored-by: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Co-authored-by: davidw Co-authored-by: Shinnosuke Hirakawa Co-authored-by: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Co-authored-by: Takayuki Murooka Co-authored-by: Takayuki Murooka Co-authored-by: autoware-iv-sync-ci[bot] <87871706+autoware-iv-sync-ci[bot]@users.noreply.github.com> Co-authored-by: taikitanaka Co-authored-by: Makoto Kurihara Co-authored-by: purewater0901 <43805014+purewater0901@users.noreply.github.com> Co-authored-by: Takagi, Isamu <43976882+isamu-takagi@users.noreply.github.com> Co-authored-by: Sugatyon <32741405+Sugatyon@users.noreply.github.com> Co-authored-by: s-murakami-esol <81723883+s-murakami-esol@users.noreply.github.com> Co-authored-by: Yusuke Muramatsu Co-authored-by: Akihito OHSATO --- .../CMakeLists.txt | 46 ++ .../laserscan_to_occupancy_grid_map/README.md | 82 +++ .../image/bresenham.svg | 3 + .../image/occupancy_grid_map_sample_image.png | Bin 0 -> 294783 bytes .../image/update_with_pointcloud.svg | 3 + .../cost_value.hpp | 77 +++ .../laserscan_to_occupancy_grid_map_node.hpp | 100 ++++ .../occupancy_grid_map.hpp | 94 +++ ...y_grid_map_binary_bayes_filter_updater.hpp | 50 ++ .../occupancy_grid_map_updater_interface.hpp | 39 ++ .../laserscan_to_occupancy_grid_map.launch.py | 139 +++++ .../package.xml | 36 ++ .../laserscan_to_occupancy_grid_map_node.cpp | 277 +++++++++ .../src/occupancy_grid_map.cpp | 252 ++++++++ ...y_grid_map_binary_bayes_filter_updater.cpp | 59 ++ sensing/livox/livox_tag_filter/CMakeLists.txt | 44 ++ sensing/livox/livox_tag_filter/README.md | 65 +++ .../livox_tag_filter_node.hpp | 46 ++ .../launch/livox_tag_filter.launch.xml | 30 + sensing/livox/livox_tag_filter/package.xml | 23 + .../livox_tag_filter_node.cpp | 90 +++ .../pointcloud_preprocessor/CMakeLists.txt | 169 ++++++ sensing/pointcloud_preprocessor/README.md | 64 +++ .../docs/concatenate-data.md | 46 ++ .../docs/crop-box-filter.md | 42 ++ .../docs/distortion-corrector.md | 40 ++ .../docs/downsample-filter.md | 52 ++ .../docs/outlier-filter.md | 81 +++ .../docs/passthrough-filter.md | 44 ++ .../docs/pointcloud-accumulator.md | 40 ++ .../docs/vector-map-filter.md | 41 ++ .../concatenate_data_nodelet.hpp | 178 ++++++ .../crop_box_filter_nodelet.hpp | 91 +++ .../distortion_corrector.hpp | 70 +++ .../approximate_downsample_filter_nodelet.hpp | 85 +++ .../random_downsample_filter_nodelet.hpp | 83 +++ .../voxel_grid_downsample_filter_nodelet.hpp | 86 +++ .../pointcloud_preprocessor/filter.hpp | 273 +++++++++ .../dual_return_outlier_filter_nodelet.hpp | 106 ++++ ...upancy_grid_map_outlier_filter_nodelet.hpp | 126 ++++ ...adius_search_2d_outlier_filter_nodelet.hpp | 57 ++ .../ring_outlier_filter_nodelet.hpp | 81 +++ .../voxel_grid_outlier_filter_nodelet.hpp | 53 ++ .../passthrough_filter_nodelet.hpp | 80 +++ .../passthrough_filter_uint16_nodelet.hpp | 48 ++ .../passthrough_filter/passthrough_uint16.hpp | 473 +++++++++++++++ .../pointcloud_accumulator_nodelet.hpp | 48 ++ .../lanelet2_map_filter_nodelet.hpp | 93 +++ .../dual_return_outlier_filter.launch.xml | 21 + .../launch/preprocessor.launch.py | 119 ++++ .../launch/preprocessor.launch.xml | 19 + .../random_downsample_filter.launch.xml | 17 + .../launch/ring_passthrough_filter.launch.xml | 25 + sensing/pointcloud_preprocessor/package.xml | 50 ++ .../concatenate_data_nodelet.cpp | 466 +++++++++++++++ .../crop_box_filter_nodelet.cpp | 231 ++++++++ .../distortion_corrector.cpp | 203 +++++++ .../approximate_downsample_filter_nodelet.cpp | 120 ++++ .../random_downsample_filter_nodelet.cpp | 105 ++++ .../voxel_grid_downsample_filter_nodelet.cpp | 119 ++++ .../pointcloud_preprocessor/src/filter.cpp | 302 ++++++++++ .../dual_return_outlier_filter_nodelet.cpp | 289 ++++++++++ ...upancy_grid_map_outlier_filter_nodelet.cpp | 325 +++++++++++ ...adius_search_2d_outlier_filter_nodelet.cpp | 92 +++ .../ring_outlier_filter_nodelet.cpp | 150 +++++ .../voxel_grid_outlier_filter_nodelet.cpp | 97 ++++ .../passthrough_filter_nodelet.cpp | 93 +++ .../passthrough_filter_uint16_nodelet.cpp | 127 +++++ .../passthrough_filter/passthrough_uint16.cpp | 285 ++++++++++ .../pointcloud_accumulator_nodelet.cpp | 79 +++ .../lanelet2_map_filter_nodelet.cpp | 273 +++++++++ sensing/tier4_pcl_extensions/CMakeLists.txt | 35 ++ sensing/tier4_pcl_extensions/README.md | 35 ++ .../voxel_grid_nearest_centroid.hpp | 538 ++++++++++++++++++ .../voxel_grid_nearest_centroid_impl.hpp | 345 +++++++++++ sensing/tier4_pcl_extensions/package.xml | 24 + .../src/voxel_grid_nearest_centroid.cpp | 64 +++ 77 files changed, 8853 insertions(+) create mode 100644 sensing/laserscan_to_occupancy_grid_map/CMakeLists.txt create mode 100644 sensing/laserscan_to_occupancy_grid_map/README.md create mode 100644 sensing/laserscan_to_occupancy_grid_map/image/bresenham.svg create mode 100644 sensing/laserscan_to_occupancy_grid_map/image/occupancy_grid_map_sample_image.png create mode 100644 sensing/laserscan_to_occupancy_grid_map/image/update_with_pointcloud.svg create mode 100644 sensing/laserscan_to_occupancy_grid_map/include/laserscan_to_occupancy_grid_map/cost_value.hpp create mode 100644 sensing/laserscan_to_occupancy_grid_map/include/laserscan_to_occupancy_grid_map/laserscan_to_occupancy_grid_map_node.hpp create mode 100644 sensing/laserscan_to_occupancy_grid_map/include/laserscan_to_occupancy_grid_map/occupancy_grid_map.hpp create mode 100644 sensing/laserscan_to_occupancy_grid_map/include/laserscan_to_occupancy_grid_map/updater/occupancy_grid_map_binary_bayes_filter_updater.hpp create mode 100644 sensing/laserscan_to_occupancy_grid_map/include/laserscan_to_occupancy_grid_map/updater/occupancy_grid_map_updater_interface.hpp create mode 100644 sensing/laserscan_to_occupancy_grid_map/launch/laserscan_to_occupancy_grid_map.launch.py create mode 100644 sensing/laserscan_to_occupancy_grid_map/package.xml create mode 100644 sensing/laserscan_to_occupancy_grid_map/src/laserscan_to_occupancy_grid_map_node.cpp create mode 100644 sensing/laserscan_to_occupancy_grid_map/src/occupancy_grid_map.cpp create mode 100644 sensing/laserscan_to_occupancy_grid_map/src/updater/occupancy_grid_map_binary_bayes_filter_updater.cpp create mode 100644 sensing/livox/livox_tag_filter/CMakeLists.txt create mode 100644 sensing/livox/livox_tag_filter/README.md create mode 100644 sensing/livox/livox_tag_filter/include/livox_tag_filter/livox_tag_filter_node.hpp create mode 100644 sensing/livox/livox_tag_filter/launch/livox_tag_filter.launch.xml create mode 100644 sensing/livox/livox_tag_filter/package.xml create mode 100644 sensing/livox/livox_tag_filter/src/livox_tag_filter_node/livox_tag_filter_node.cpp create mode 100644 sensing/pointcloud_preprocessor/CMakeLists.txt create mode 100644 sensing/pointcloud_preprocessor/README.md create mode 100644 sensing/pointcloud_preprocessor/docs/concatenate-data.md create mode 100644 sensing/pointcloud_preprocessor/docs/crop-box-filter.md create mode 100644 sensing/pointcloud_preprocessor/docs/distortion-corrector.md create mode 100644 sensing/pointcloud_preprocessor/docs/downsample-filter.md create mode 100644 sensing/pointcloud_preprocessor/docs/outlier-filter.md create mode 100644 sensing/pointcloud_preprocessor/docs/passthrough-filter.md create mode 100644 sensing/pointcloud_preprocessor/docs/pointcloud-accumulator.md create mode 100644 sensing/pointcloud_preprocessor/docs/vector-map-filter.md create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_data_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/crop_box_filter/crop_box_filter_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/approximate_downsample_filter_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/random_downsample_filter_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/voxel_grid_downsample_filter_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/filter.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/dual_return_outlier_filter_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/occupancy_grid_map_outlier_filter_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/radius_search_2d_outlier_filter_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/voxel_grid_outlier_filter_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_uint16_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_uint16.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/pointcloud_accumulator/pointcloud_accumulator_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/lanelet2_map_filter_nodelet.hpp create mode 100644 sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml create mode 100644 sensing/pointcloud_preprocessor/launch/preprocessor.launch.py create mode 100644 sensing/pointcloud_preprocessor/launch/preprocessor.launch.xml create mode 100644 sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml create mode 100644 sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml create mode 100644 sensing/pointcloud_preprocessor/package.xml create mode 100644 sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_data_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp create mode 100644 sensing/pointcloud_preprocessor/src/downsample_filter/approximate_downsample_filter_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/filter.cpp create mode 100644 sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/outlier_filter/occupancy_grid_map_outlier_filter_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/outlier_filter/voxel_grid_outlier_filter_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_uint16.cpp create mode 100644 sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp create mode 100644 sensing/pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp create mode 100644 sensing/tier4_pcl_extensions/CMakeLists.txt create mode 100644 sensing/tier4_pcl_extensions/README.md create mode 100644 sensing/tier4_pcl_extensions/include/tier4_pcl_extensions/voxel_grid_nearest_centroid.hpp create mode 100644 sensing/tier4_pcl_extensions/include/tier4_pcl_extensions/voxel_grid_nearest_centroid_impl.hpp create mode 100644 sensing/tier4_pcl_extensions/package.xml create mode 100644 sensing/tier4_pcl_extensions/src/voxel_grid_nearest_centroid.cpp diff --git a/sensing/laserscan_to_occupancy_grid_map/CMakeLists.txt b/sensing/laserscan_to_occupancy_grid_map/CMakeLists.txt new file mode 100644 index 0000000000000..05fb920933356 --- /dev/null +++ b/sensing/laserscan_to_occupancy_grid_map/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 3.5) +project(laserscan_to_occupancy_grid_map) + +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 14) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_EXTENSIONS OFF) +endif() +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +find_package(ament_cmake_auto REQUIRED) +find_package(eigen3_cmake_module REQUIRED) +find_package(Eigen3 REQUIRED) +find_package(PCL REQUIRED) +ament_auto_find_build_dependencies() + +ament_auto_add_library(laserscan_to_occupancy_grid_map SHARED + src/laserscan_to_occupancy_grid_map_node.cpp + src/occupancy_grid_map.cpp + src/updater/occupancy_grid_map_binary_bayes_filter_updater.cpp +) + +target_link_libraries(laserscan_to_occupancy_grid_map + ${PCL_LIBRARIES} +) + +rclcpp_components_register_node(laserscan_to_occupancy_grid_map + PLUGIN "occupancy_grid_map::OccupancyGridMapNode" + EXECUTABLE laserscan_to_occupancy_grid_map_node +) + +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + list(APPEND AMENT_LINT_AUTO_EXCLUDE + # To avoid conflicts between cpplint and uncrustify w.r.t. inclusion guards + ament_cmake_uncrustify + ) + ament_lint_auto_find_test_dependencies() +endif() + +ament_auto_package( + INSTALL_TO_SHARE + launch +) diff --git a/sensing/laserscan_to_occupancy_grid_map/README.md b/sensing/laserscan_to_occupancy_grid_map/README.md new file mode 100644 index 0000000000000..6d3417409613d --- /dev/null +++ b/sensing/laserscan_to_occupancy_grid_map/README.md @@ -0,0 +1,82 @@ +# laserscan_to_occupancy_grid_map + +## Purpose + +This package outputs the probability of having an obstacle as occupancy grid map. + +![occupancy_grid_map_sample_image](./image/occupancy_grid_map_sample_image.png) + +## Inner-workings / Algorithms + +The basic idea is to take a 2D laserscan and ray trace it to create a time-series processed occupancy grid map. + +1. the node take a laserscan and make an occupancy grid map with one frame. ray trace is done by Bresenham's line algorithm. + ![Bresenham's line algorithm](./image/bresenham.svg) +2. Optionally, obstacle point clouds and raw point clouds can be received and reflected in the occupancy grid map. The reason is that laserscan only uses the most foreground point in the polar coordinate system, so it throws away a lot of information. As a result, the occupancy grid map is almost an UNKNOWN cell. + Therefore, the obstacle point cloud and the raw point cloud are used to reflect what is judged to be the ground and what is judged to be an obstacle in the occupancy grid map. + ![Bresenham's line algorithm](./image/update_with_pointcloud.svg) + The black and red dots represent raw point clouds, and the red dots represent obstacle point clouds. In other words, the black points are determined as the ground, and the red point cloud is the points determined as obstacles. The gray cells are represented as UNKNOWN cells. + +3. Using the previous occupancy grid map, update the existence probability using a binary Bayesian filter (1). Also, the unobserved cells are time-decayed like the system noise of the Kalman filter (2). + +```math + \hat{P_{o}} = \frac{(P_{o} * P_{z})}{(P_{o} * P_{z} + (1 - P_{o}) * \bar{P_{z}})} \tag{1} +``` + +```math + \hat{P_{o}} = \frac{(P_{o} + 0.5 * \frac{1}{ratio})}{(\frac{1}{ratio} + 1)} \tag{2} +``` + +## Inputs / Outputs + +### Input + +| Name | Type | Description | +| ----------------------------- | -------------------------- | -------------------------------------------------------------- | +| `~/input/laserscan` | `sensor_msgs::LaserScan` | laserscan | +| `~/input/obstacle_pointcloud` | `sensor_msgs::PointCloud2` | obstacle pointcloud | +| `~/input/raw_pointcloud` | `sensor_msgs::PointCloud2` | The overall point cloud used to input the obstacle point cloud | + +### Output + +| Name | Type | Description | +| ----------------------------- | ------------------------- | ------------------ | +| `~/output/occupancy_grid_map` | `nav_msgs::OccupancyGrid` | occupancy grid map | + +## Parameters + +### Node Parameters + +| Name | Type | Description | +| ----------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `map_frame` | string | map frame | +| `base_link_frame` | string | base_link frame | +| `input_obstacle_pointcloud` | bool | whether to use the optional obstacle point cloud? If this is true, `~/input/obstacle_pointcloud` topics will be received. | +| `input_obstacle_and_raw_pointcloud` | bool | whether to use the optional obstacle and raw point cloud? If this is true, `~/input/obstacle_pointcloud` and `~/input/raw_pointcloud` topics will be received. | +| `use_height_filter` | bool | whether to height filter for `~/input/obstacle_pointcloud` and `~/input/raw_pointcloud`? By default, the height is set to -1~2m. | +| `map_length` | double | The length of the map. -100 if it is 50~50[m] | +| `map_resolution` | double | The map cell resolution [m] | + +## Assumptions / Known limits + +In several places we have modified the external code written in BSD3 license. + +- occupancy_grid_map.hpp +- cost_value.hpp +- occupancy_grid_map.cpp + +## (Optional) Error detection and handling + +## (Optional) Performance characterization + +## (Optional) References/External links + +Bresenham's_line_algorithm + +- +- + +## (Optional) Future extensions / Unimplemented parts + +- The update probability of the binary Bayesian filter is currently hard-coded and requires a code change to be modified. +- Since there is no special support for moving objects, the probability of existence is not increased for fast objects. diff --git a/sensing/laserscan_to_occupancy_grid_map/image/bresenham.svg b/sensing/laserscan_to_occupancy_grid_map/image/bresenham.svg new file mode 100644 index 0000000000000..61b107efe3f9e --- /dev/null +++ b/sensing/laserscan_to_occupancy_grid_map/image/bresenham.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/sensing/laserscan_to_occupancy_grid_map/image/occupancy_grid_map_sample_image.png b/sensing/laserscan_to_occupancy_grid_map/image/occupancy_grid_map_sample_image.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9881071fb341be40bd48b3a5abc43685120327 GIT binary patch literal 294783 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�l)0Hn&?)T{v@%@sG;Dex*9H)G16OmMyO< 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

R&7+>jIPy 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

^-iG-(%DAI~Ki2UKI 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