From a0ed7135e0f1e0110bf6b254f59af5ba4093b10b Mon Sep 17 00:00:00 2001 From: Mark Ibrahim Date: Wed, 19 Aug 2026 10:04:26 -0400 Subject: [PATCH] Added Hesai Lidar Documentation RPSW-2837 Added Hesai to the clearpath-dictionary.txt Added Hesai XT32 to supported sensors Added hesai_xt32.png --- .cspell/clearpath-dictionary.txt | 1 + components/supported_sensors.mdx | 191 +++++++++--------- .../components/yaml/sensors/hesai_lidar.mdx | 84 ++++++++ .../yaml/sensors/img/hesai_xt32_lidar.png | Bin 0 -> 60798 bytes .../ros/config/yaml/sensors/lidar3d.mdx | 4 + 5 files changed, 185 insertions(+), 95 deletions(-) create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/hesai_lidar.mdx create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/img/hesai_xt32_lidar.png diff --git a/.cspell/clearpath-dictionary.txt b/.cspell/clearpath-dictionary.txt index 8cb9a8185..cfd3d5340 100644 --- a/.cspell/clearpath-dictionary.txt +++ b/.cspell/clearpath-dictionary.txt @@ -29,6 +29,7 @@ Futaba Greenlee Gurum Henryuan +Hesai Hokuyo Icotek Inventus diff --git a/components/supported_sensors.mdx b/components/supported_sensors.mdx index 88aa0ef02..d5f4a1a93 100644 --- a/components/supported_sensors.mdx +++ b/components/supported_sensors.mdx @@ -1,5 +1,5 @@ -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; ## Supported Sensors {#supported-sensors} @@ -22,148 +22,149 @@ Debian drivers are automatically installed on robots as part of the ### 2D Lidars -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:----------------------------------------------------- | -| [SICK LMS-111/LMS-151](/docs_robots/accessories/sensors/lidar_2d/sick_lms111) | Debian | Debian | [LMS1xx](https://github.com/clearpathrobotics/LMS1xx) | -| [Hokuyo UST10-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust10_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | -| [Hokuyo UST20-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust20_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | -| [Hokuyo UST30-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust30_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | +| Sensor | `amd64` | `arm64` | Source | +| :---------------------------------------------------------------------------- | :------ | :------ | :---------------------------------------------------- | +| [SICK LMS-111/LMS-151](/docs_robots/accessories/sensors/lidar_2d/sick_lms111) | Debian | Debian | [LMS1xx](https://github.com/clearpathrobotics/LMS1xx) | +| [Hokuyo UST10-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust10_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | +| [Hokuyo UST20-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust20_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | +| [Hokuyo UST30-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust30_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | ### 3D Lidars -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:--------------------------------------------------------- | -| [Velodyne Puck](/docs_robots/accessories/sensors/lidar_3d/velodyne_puck) | Debian | Debian | [Velodyne](https://github.com/ros-drivers/velodyne) | -| [Ouster OS-1](/docs_robots/accessories/sensors/lidar_3d/ouster) | Debian | Debian | [Ouster](https://github.com/ouster-lidar/ouster-ros) | +| Sensor | `amd64` | `arm64` | Source | +| :----------------------------------------------------------------------------------------- | :------ | :------ | :-------------------------------------------------------- | +| [Velodyne Puck](/docs_robots/accessories/sensors/lidar_3d/velodyne_puck) | Debian | Debian | [Velodyne](https://github.com/ros-drivers/velodyne) | +| [Ouster OS-1](/docs_robots/accessories/sensors/lidar_3d/ouster) | Debian | Debian | [Ouster](https://github.com/ouster-lidar/ouster-ros) | | [Seyond Robin W (Mesh only support)](/docs/ros/config/yaml/sensors/lidar3d#seyond-robin-w) | Source | Source | [Seyond](https://github.com/Seyond-Inc/seyond_ros_driver) | ### IMUs -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:------------|:------------|:------------------------------------------------------------------------- | -| [MicroStrain 3DM-GX5](/docs_robots/accessories/sensors/imu/microstrain_3dm_gx5) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | -| MicroStrain GV7-AHRS | Unsupported | Unsupported | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | -| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | -| [Redshift Labs UM7](/docs_robots/accessories/sensors/imu/redshift_labs_um7) | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | -| CH Robotics UM6 | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | -| Phidgets IMU | Unsupported | Unsupported | [Phidgets](https://github.com/ros-drivers/phidgets_drivers) | +| Sensor | `amd64` | `arm64` | Source | +| :------------------------------------------------------------------------------ | :---------- | :---------- | :------------------------------------------------------------------------ | +| [MicroStrain 3DM-GX5](/docs_robots/accessories/sensors/imu/microstrain_3dm_gx5) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | +| MicroStrain GV7-AHRS | Unsupported | Unsupported | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | +| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | +| [Redshift Labs UM7](/docs_robots/accessories/sensors/imu/redshift_labs_um7) | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | +| CH Robotics UM6 | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | +| Phidgets IMU | Unsupported | Unsupported | [Phidgets](https://github.com/ros-drivers/phidgets_drivers) | ### GPS -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:------------------------------------------------------------------------- | -| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | -| [Garmin GPS 18x](/docs_robots/accessories/sensors/gps/garmin_gps_18x) | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | -| [Swift Navigation Duro](/docs_robots/accessories/sensors/gps/swift_navigation_duro) | Source | Source | [Duro GPS Driver](https://github.com/szenergy/duro_gps_driver) | -| NovAtel SMART6 and SMART7 | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | +| Sensor | `amd64` | `arm64` | Source | +| :---------------------------------------------------------------------------------- | :------ | :------ | :------------------------------------------------------------------------ | +| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | +| [Garmin GPS 18x](/docs_robots/accessories/sensors/gps/garmin_gps_18x) | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | +| [Swift Navigation Duro](/docs_robots/accessories/sensors/gps/swift_navigation_duro) | Source | Source | [Duro GPS Driver](https://github.com/szenergy/duro_gps_driver) | +| NovAtel SMART6 and SMART7 | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | ### Inertial Navigation Sensors -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:----------------------------------------------------------------------- | -| [Fixposition Vision-RTK 2](/docs_robots/accessories/sensors/ins/fixposition) | Source | Source | [Fixposition Driver](https://github.com/fixposition/fixposition_driver) | +| Sensor | `amd64` | `arm64` | Source | +| :--------------------------------------------------------------------------- | :------ | :------ | :---------------------------------------------------------------------- | +| [Fixposition Vision-RTK 2](/docs_robots/accessories/sensors/ins/fixposition) | Source | Source | [Fixposition Driver](https://github.com/fixposition/fixposition_driver) | ### Optical Cameras -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:----------------------------------------------------------------------- | -| [Axis F1035-E](/docs_robots/accessories/sensors/cameras/axis_f1035_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Axis M5525-E](/docs_robots/accessories/sensors/cameras/axis_m5525_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Axis M5526-E](/docs_robots/accessories/sensors/cameras/axis_m5526_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Axis Q6225-LE-E](/docs_robots/accessories/sensors/cameras/axis_q6225_le) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Flir Blackfly S](/docs_robots/accessories/sensors/cameras/flir_blackfly_s) | Debian | Debian | [flir_camera_driver](https://github.com/ros-drivers/flir_camera_driver) | +| Sensor | `amd64` | `arm64` | Source | +| :-------------------------------------------------------------------------- | :------ | :------ | :---------------------------------------------------------------------- | +| [Axis F1035-E](/docs_robots/accessories/sensors/cameras/axis_f1035_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Axis M5525-E](/docs_robots/accessories/sensors/cameras/axis_m5525_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Axis M5526-E](/docs_robots/accessories/sensors/cameras/axis_m5526_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Axis Q6225-LE-E](/docs_robots/accessories/sensors/cameras/axis_q6225_le) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Flir Blackfly S](/docs_robots/accessories/sensors/cameras/flir_blackfly_s) | Debian | Debian | [flir_camera_driver](https://github.com/ros-drivers/flir_camera_driver) | ### Depth Cameras -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:------------------------------------------------------------------------------- | -| [Intel Realsense D435](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| [Intel Realsense D435i](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| Intel Realsense D415 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| Intel Realsense D455 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| Intel Realsense D456 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| [Luxonis OAK-D](/docs_robots/accessories/sensors/cameras/luxonis_oakd) | Debian | Debian | [depthai-ros](https://github.com/luxonis/depthai-ros.git) | -| [Stereolabs Zed 2](/docs_robots/accessories/sensors/cameras/stereolabs_zed_2) | Source | Source | [zed-ros2-wrapper](https://github.com/stereolabs/zed-ros2-wrapper.git) | +| Sensor | `amd64` | `arm64` | Source | +| :------------------------------------------------------------------------------- | :------ | :------ | :--------------------------------------------------------------------- | +| [Intel Realsense D435](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| [Intel Realsense D435i](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| Intel Realsense D415 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| Intel Realsense D455 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| Intel Realsense D456 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| [Luxonis OAK-D](/docs_robots/accessories/sensors/cameras/luxonis_oakd) | Debian | Debian | [depthai-ros](https://github.com/luxonis/depthai-ros.git) | +| [Stereolabs Zed 2](/docs_robots/accessories/sensors/cameras/stereolabs_zed_2) | Source | Source | [zed-ros2-wrapper](https://github.com/stereolabs/zed-ros2-wrapper.git) | ### Pan-Tilt Units -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:----------------------------------------------------- | -| [FLIR PTU-5](/docs/ros/config/yaml/sensors/ptu#flir-ptu) | Debian | Debian | [flir_ptu](https://github.com/ros-drivers/flir_ptu) | +| Sensor | `amd64` | `arm64` | Source | +| :------------------------------------------------------- | :------ | :------ | :-------------------------------------------------- | +| [FLIR PTU-5](/docs/ros/config/yaml/sensors/ptu#flir-ptu) | Debian | Debian | [flir_ptu](https://github.com/ros-drivers/flir_ptu) | ### 2D Lidars -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:----------------------------------------------------- | -| [SICK LMS-111/LMS-151](/docs_robots/accessories/sensors/lidar_2d/sick_lms111) | Debian | Debian | [LMS1xx](https://github.com/clearpathrobotics/LMS1xx) | -| [Hokuyo UST10-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust10_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | -| [Hokuyo UST20-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust20_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | -| [Hokuyo UST30-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust30_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | +| Sensor | `amd64` | `arm64` | Source | +| :---------------------------------------------------------------------------- | :------ | :------ | :---------------------------------------------------- | +| [SICK LMS-111/LMS-151](/docs_robots/accessories/sensors/lidar_2d/sick_lms111) | Debian | Debian | [LMS1xx](https://github.com/clearpathrobotics/LMS1xx) | +| [Hokuyo UST10-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust10_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | +| [Hokuyo UST20-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust20_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | +| [Hokuyo UST30-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust30_lx) | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | ### 3D Lidars -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:--------------------------------------------------------- | -| [Velodyne Puck](/docs_robots/accessories/sensors/lidar_3d/velodyne_puck) | Debian | Debian | [Velodyne](https://github.com/ros-drivers/velodyne) | -| [Ouster OS-1](/docs_robots/accessories/sensors/lidar_3d/ouster) | Debian | Debian | [Ouster](https://github.com/ouster-lidar/ouster-ros) | -| [Seyond Robin W (Mesh only support)](/docs/ros/config/yaml/sensors/lidar3d#seyond-robin-w) | Source | Source | [Seyond](https://github.com/Seyond-Inc/seyond_ros_driver) | +| Sensor | `amd64` | `arm64` | Source | +| :----------------------------------------------------------------------------------------- | :------ | :------ | :------------------------------------------------------------- | +| [Velodyne Puck](/docs_robots/accessories/sensors/lidar_3d/velodyne_puck) | Debian | Debian | [Velodyne](https://github.com/ros-drivers/velodyne) | +| [Ouster OS-1](/docs_robots/accessories/sensors/lidar_3d/ouster) | Debian | Debian | [Ouster](https://github.com/ouster-lidar/ouster-ros) | +| [Seyond Robin W (Mesh only support)](/docs/ros/config/yaml/sensors/lidar3d#seyond-robin-w) | Source | Source | [Seyond](https://github.com/Seyond-Inc/seyond_ros_driver) | +| [Hesai XT32 (Mesh only support)](/docs/ros/config/yaml/sensors/lidar3d#hesai-lidar) | Source | Source | [Hesai](https://github.com/HesaiTechnology/HesaiLidar_ROS_2.0) | ### IMUs -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:------------------------------------------------------------------------- | -| [MicroStrain 3DM-GX5](/docs_robots/accessories/sensors/imu/microstrain_3dm_gx5) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | -| MicroStrain GV7-AHRS | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | -| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | -| [Redshift Labs UM7](/docs_robots/accessories/sensors/imu/redshift_labs_um7) | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | -| CH Robotics UM6 | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | -| Phidgets IMU | Debian | Debian | [Phidgets](https://github.com/ros-drivers/phidgets_drivers) | +| Sensor | `amd64` | `arm64` | Source | +| :------------------------------------------------------------------------------ | :------ | :------ | :------------------------------------------------------------------------ | +| [MicroStrain 3DM-GX5](/docs_robots/accessories/sensors/imu/microstrain_3dm_gx5) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | +| MicroStrain GV7-AHRS | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | +| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | +| [Redshift Labs UM7](/docs_robots/accessories/sensors/imu/redshift_labs_um7) | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | +| CH Robotics UM6 | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | +| Phidgets IMU | Debian | Debian | [Phidgets](https://github.com/ros-drivers/phidgets_drivers) | ### GPS -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:------------------------------------------------------------------------- | -| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | -| [Garmin GPS 18x](/docs_robots/accessories/sensors/gps/garmin_gps_18x) | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | -| [Swift Navigation Duro](/docs_robots/accessories/sensors/gps/swift_navigation_duro) | Source | Source | [Duro GPS Driver](https://github.com/szenergy/duro_gps_driver) | -| NovAtel SMART6 and SMART7 | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | +| Sensor | `amd64` | `arm64` | Source | +| :---------------------------------------------------------------------------------- | :------ | :------ | :------------------------------------------------------------------------ | +| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | +| [Garmin GPS 18x](/docs_robots/accessories/sensors/gps/garmin_gps_18x) | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | +| [Swift Navigation Duro](/docs_robots/accessories/sensors/gps/swift_navigation_duro) | Source | Source | [Duro GPS Driver](https://github.com/szenergy/duro_gps_driver) | +| NovAtel SMART6 and SMART7 | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | ### Inertial Navigation Sensors -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:----------------------------------------------------------------------- | -| [Fixposition Vision-RTK 2](/docs_robots/accessories/sensors/ins/fixposition) | Source | Source | [Fixposition Driver](https://github.com/fixposition/fixposition_driver) | +| Sensor | `amd64` | `arm64` | Source | +| :--------------------------------------------------------------------------- | :------ | :------ | :---------------------------------------------------------------------- | +| [Fixposition Vision-RTK 2](/docs_robots/accessories/sensors/ins/fixposition) | Source | Source | [Fixposition Driver](https://github.com/fixposition/fixposition_driver) | ### Optical Cameras -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:----------------------------------------------------------------------- | -| [Axis F1035-E](/docs_robots/accessories/sensors/cameras/axis_f1035_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Axis M5525-E](/docs_robots/accessories/sensors/cameras/axis_m5525_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Axis M5526-E](/docs_robots/accessories/sensors/cameras/axis_m5526_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Axis Q6225-LE-E](/docs_robots/accessories/sensors/cameras/axis_q6225_le) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Flir Blackfly S](/docs_robots/accessories/sensors/cameras/flir_blackfly_s) | Debian | Debian | [flir_camera_driver](https://github.com/ros-drivers/flir_camera_driver) | +| Sensor | `amd64` | `arm64` | Source | +| :-------------------------------------------------------------------------- | :------ | :------ | :---------------------------------------------------------------------- | +| [Axis F1035-E](/docs_robots/accessories/sensors/cameras/axis_f1035_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Axis M5525-E](/docs_robots/accessories/sensors/cameras/axis_m5525_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Axis M5526-E](/docs_robots/accessories/sensors/cameras/axis_m5526_e) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Axis Q6225-LE-E](/docs_robots/accessories/sensors/cameras/axis_q6225_le) | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Flir Blackfly S](/docs_robots/accessories/sensors/cameras/flir_blackfly_s) | Debian | Debian | [flir_camera_driver](https://github.com/ros-drivers/flir_camera_driver) | ### Depth Cameras -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:------------------------------------------------------------------------------- | -| [Intel Realsense D435](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| [Intel Realsense D435i](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| Intel Realsense D415 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| Intel Realsense D455 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| Intel Realsense D456 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| [Luxonis OAK-D](/docs_robots/accessories/sensors/cameras/luxonis_oakd) | Debian | Debian | [depthai-ros](https://github.com/luxonis/depthai-ros.git) | -| [Stereolabs Zed 2](/docs_robots/accessories/sensors/cameras/stereolabs_zed_2) | Source | Source | [zed-ros2-wrapper](https://github.com/stereolabs/zed-ros2-wrapper.git) | +| Sensor | `amd64` | `arm64` | Source | +| :------------------------------------------------------------------------------- | :------ | :------ | :--------------------------------------------------------------------- | +| [Intel Realsense D435](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| [Intel Realsense D435i](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| Intel Realsense D415 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| Intel Realsense D455 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| Intel Realsense D456 | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| [Luxonis OAK-D](/docs_robots/accessories/sensors/cameras/luxonis_oakd) | Debian | Debian | [depthai-ros](https://github.com/luxonis/depthai-ros.git) | +| [Stereolabs Zed 2](/docs_robots/accessories/sensors/cameras/stereolabs_zed_2) | Source | Source | [zed-ros2-wrapper](https://github.com/stereolabs/zed-ros2-wrapper.git) | ### Pan-Tilt Units -| Sensor | `amd64` | `arm64` | Source | -|:------------------------------------------------------------------------------------ |:--------|:--------|:----------------------------------------------------- | -| [FLIR PTU-5](/docs/ros/config/yaml/sensors/ptu#flir-ptu) | Debian | Debian | [flir_ptu](https://github.com/ros-drivers/flir_ptu) | +| Sensor | `amd64` | `arm64` | Source | +| :------------------------------------------------------- | :------ | :------ | :-------------------------------------------------- | +| [FLIR PTU-5](/docs/ros/config/yaml/sensors/ptu#flir-ptu) | Debian | Debian | [flir_ptu](https://github.com/ros-drivers/flir_ptu) | diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/hesai_lidar.mdx b/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/hesai_lidar.mdx new file mode 100644 index 000000000..cc4c3f8c0 --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/hesai_lidar.mdx @@ -0,0 +1,84 @@ + + + + + +
+
+
+ +
+
+
+
+ +```yaml +lidar3d: + - model: hesai_lidar + urdf_enabled: true + launch_enabled: true + parent: lidar3d_row_link + xyz: [0.0, 0.0, 0.0] + rpy: [0.0, 0.0, 0.0] + ros_parameters: + hesai_driver: + config_path: /path/to/hesai/config/file0.yaml + - model: hesai_lidar + urdf_enabled: true + launch_enabled: true + parent: lidar3d_row_link + xyz: [0.1, 0.1, 0.1] + rpy: [0.0, 0.0, 0.0] + ros_parameters: + hesai_driver: + config_path: /path/to/hesai/config/file1.yaml +``` + +
+
+ +#### Package and Setup +The Hesai LiDAR uses the `hesai_ros_driver` ROS 2 driver. The driver is open source, maintained by Hesai Technology, +and hosted on [GitHub - HesaiLidar_ROS_2.0](https://github.com/HesaiTechnology/HesaiLidar_ROS_2.0). The `hesai_ros_driver` +nodes depend on the [HesaiLidar_SDK_2.0](https://github.com/HesaiTechnology/HesaiLidar_SDK_2.0). The `hesai_ros_driver` +ROS2 package and SDK **are not installed by ROS dependencies** and need to be built against the specific version +installed on your computer. Therefore, **you will have to install these manually by following the instructions in the +[`HesaiLidar_ROS_2.0`](https://github.com/HesaiTechnology/HesaiLidar_ROS_2.0/blob/master/README.md) repository**. + +The `hesai_ros_driver` only accepts one single ROS parameter which is `config_path` as shown above. +The `config_path` points to a configuraiton file formated as shown in the HesaiLidar_SDK_2.0 [config.yaml](https://github.com/HesaiTechnology/HesaiLidar_ROS_2.0/blob/master/config/config.yaml). + +Each Hesai LiDAR must be listed first under lidar3d in the `robot.yaml` file and provide a different +the `config_path`. Each Hesai LiDAR must point to a unique `config.yaml`. +For the first Hesai LiDAR listed in the `robot.yaml` the following parameters in the `config.yaml` +must be modifed as shown: +``` +lidar: + - driver: + ... + lidar_udp_type: + device_ip_address: 192.168.131.25 + ... + multicast_ip_address: 192.168.131.1 + ... + ros: + ros_frame_id: lidar3d_0_laser + ... +``` +Any additional Hesai LiDAR should increment the `device_ip_address` (first lidar ip = 192.168.131.25, second lidar ip = 192.168.131.26, etc.) +along with the `ros_frame_id` (first lidar frame ID = `lidar3d_0_laser`, second lidar frame ID = `lidar3d_1_laser`, etc.) +The IP of the physical Hesai LiDAR must be updated as well. See the User Guide for the XT32 Hesai Lidar that can be downloaded here: https://www.cratustech.com/downloads/. + +The change of `multicast_ip_address` should be set according to the [Reserved IP Addresses](/docs/ros/networking/network_ip_addresses). +The value of `192.168.131.1` should be used if the hesai lidar is connected to the Primary Computer. + +The user can change any other parameter in the `config.yaml` based on their own use case. + + +#### Model + +There are several types of Hesai LiDAR models. Currently only the XT32 is supported. + +#### Mesh-Only Support + +The Hesai XT32 Lidar is only supported as a mesh in `robot.yaml`. \ No newline at end of file diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/img/hesai_xt32_lidar.png b/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/img/hesai_xt32_lidar.png new file mode 100644 index 0000000000000000000000000000000000000000..f8ea36928feb1ea5ef9b498762cb6cae2741d276 GIT binary patch literal 60798 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 E7b{&Gtn6y! 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 ayMFAQU^ioO5jO(?e`?B_N;Qg>k^ciybQ=Ny literal 0 HcmV?d00001 diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/sensors/lidar3d.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/sensors/lidar3d.mdx index ebe3cbb61..486a4a774 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/sensors/lidar3d.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/sensors/lidar3d.mdx @@ -8,6 +8,7 @@ toc_max_heading_level: 4 import OusterLidar from "/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/ouster_os1.mdx"; import SeyondLidar from "/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/seyond_robin.mdx"; import VelodyneLidar from "/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/velodyne_lidar.mdx"; +import HesaiLidar from "/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/hesai_lidar.mdx"; Three dimensional LiDARs provide a pointcloud of all points detected by several planar scanners at various angles, which is published as a `sensor_msgs/PointCloud2` message. It is important to accurately position the LiDAR in the visual description of the robot to ensure that the scanned points are accurate with respect to the robot. @@ -21,3 +22,6 @@ Three dimensional LiDARs provide a pointcloud of all points detected by several ### Velodyne Lidar + +### Hesai Lidar +