LSV



Skeleton Detection

Summary

Skeleton Detection is a ROS 2 perception module under ICM (Intelligence Control Module) that adds human pose understanding to the anomaly detection pipeline. Built on OpenPifPaf, it processes image streams from either prerecorded MP4 footage or a live Intel RealSense D435i camera, detects human skeleton keypoints, and tracks individuals across frames using IOU-based identity matching. The system publishes structured skeleton metadata for downstream use, generates annotated image output for visualization, and can save both an annotated video and a JSON log for offline review and logging. This makes the module useful both for real-time monitoring and for analyzing recorded scenes during development and testing.

Data flow

In offline mode, a local MP4 is used as the input source. The frames are routed through the camera reader path and published to the detector input topic, typically /dummy_camera/image_raw. The skeleton_detection_node subscribes to that image stream, runs skeleton inference and tracking, then publishes structured skeleton metadata on /skeleton_detection/frame and annotated images on /skeleton_output. When enabled, it also saves an annotated MP4 and JSON metadata log to disk.

In live mode, the Intel RealSense D435i provides the input image stream through the ROS camera topic, typically /camera/camera/color/image_raw. The skeleton_detection_node subscribes directly to that live topic, processes each incoming frame, publishes skeleton metadata and annotated image output, and can also export the same disk artifacts for later analysis.

TopicTypeDescription
/camera/camera/color/image_rawsensor_msgs/msg/ImageInput: Live RGB image stream from the Intel RealSense D435i camera. Used in live detection mode.
/dummy_camera/image_rawsensor_msgs/msg/ImageInput: Image topic consumed by skeleton_detection_node in the offline/MP4 workflow. It serves as the detector input topic when frames are routed through the camera reader path.
/skeleton_detection/frameskeleton_detection/msg/SkeletonFrameOutput: Per-frame skeleton metadata, including detected people, joint data, bounding boxes, tracking IDs, and timestamps.
/skeleton_outputsensor_msgs/msg/ImageOutput: Annotated image stream with skeleton overlays, bounding boxes, and tracking IDs drawn on each frame.
Figure: Skeleton Detection Output in Offiline Mode with Joints and Confidence Score Visualized
Figure: Skeleton Detection Output in Live Mode with Joints, Confidence Score, and FrameID Visualized

Anomaly Detection

The Anomaly Action Detection Module is a two-stage safety sub-system integrated into the autonomous driving platform via ROS 2 (Humble). The pipeline begins with a Graph-Jigsaw Conditioned Diffusion (GJCD) model that processes 17-keypoint COCO skeleton sequences in sliding windows of 24 frames. This first stage operates downstream of existing skeleton detection nodes, calculating a normalized reconstruction error to identify potential anomalies. To optimize computational efficiency, the system only triggers the second stage, a pre-trained LLM BART-large-mnli, when the initial anomaly score exceeds a configurable threshold, ensuring high-performance processing without unnecessary overhead.

For final classification, the module translates complex motion dynamics, such as joint velocity and spatial displacement, into natural language descriptions for the LLM. The LLaMA 3 model then categorizes the behavior into specific labels such as fighting, loitering, or chasing, providing both an anomaly score and a human-readable explanation.The final fused output is delivered through a structured ROS 2 JSON topic, supporting seamless modular integration and real-time operator alerts.

Key Features:

TopicTypeDescription
/skeleton_detection/frameskeleton_detection/msg/SkeletonFrameInput: The skeleton detection result.
/anomaly_detectionsstd_msgs/msg/StringOutput: Anomaly action detected with time frame and person id.

Mapping

Migrate the mapping technique from the F1TENTH stack to the LSV simulation environment to support future patrol robot autonomy development. This task focuses on mapping and map processing so that the LSV robot performance can be validated.

Key Features:

  • Obtain recorded rosbag file with mapping and localization topics.
  • Operate LIO-SAM_ROS2-PIXKIT mapping offline and parameter tuning.
  • Use point cloud editing tool (CloudCompare) to remove dynamic objects and outliers.
  • Down-sample static map by voxelization.
  • Use built map to generate corresponding Lanelet map.

Acceptance Criteria:

  • Rosbags contain sufficient topics for mapping and localization.
  • LIO-SAM mapping correctly constructs environments with no structural misalignment.
  • Erase all dynamic points and outliers within the dense map.
  • The dense map is down-sampled correctly as a sparse map.
  • The coordinates of the point cloud map and Lanelet map are aligned.
TopicTypeDescription
/sensing/lidar/top/velodyne_pointssensor_msgs::msg::PointCloud2Input: LiDAR frames for map construction.
/sensing/imu/imu_datasensor_msgs::msg::ImuInput: IMU frames for motion distortion and IMU Preintegration.
/sensing/gnss/fixposition/nav_sat_fixsensor_msgs::msg::NavSatFixInput: GNSS signals for world coordinate alignment.
Map generation in the Sunnyvale parking lot. Green line: GNSS pose. Blue line: LiDAR pose. Yellow line: Loop closure constraints.
Static map generation result. (Blue) Static map. (Red) Dynamic points filtering.
Before the map down-sampling.
After the map down-sampling.

Waypoint Scheduler

Design a waypoint scheduler and integrate it into the LSV simulation environment to support future patrol robot autonomy development. This task focuses on the scheduler so that the LSV robot performance can be validated.

Key Features:

  • Design waypoint scheduler.
  • Assign vehicle heading to the pure position waypoint.

Acceptance Criteria:

  • Dataflow of waypoint scheduler is correct and work as expected.
  • The heading is automatically assigned to the waypoint with the correct direction.
TopicTypeDescription
/planning/mission_planning/no_heading_goalgeometry_msgs::msg::PoseStampedInput: Goal point sent from UI with no heading.
/map/vector_mapautoware_map_msgs::msg::LaneletMapBinInput: Lanelet map layers with directions.
/planning/mission_planning/goalgeometry_msgs::msg::PoseStampedOutput: Goal point with heading aligned to closest lanelet map lane.
ACM planning simulation visualization.
Input:
(x,y,yaw) = (-62.8,37.5,0.0)
Output:
(x,y,yaw) = (-62.8,37.5,1.28)
Input:
(x,y,yaw) = (-49.2,41.5,0.0)
Output:
(x,y,yaw) = (-49.2,41.5,3.10)
Input:
(x,y,yaw) = (-24.7,86.8,0.0)
Output:
(x,y,yaw) = (-24.7,86.8,-0.29)

User Interface

Our user interface is designed to provide intuitive control over waypoints, allowing users to easily add points through clicking, adjust their positions via drag-and-drop, and remove existing waypoints as needed. In addition, the interface visualizes the planned route in real time, along with the robot’s current status and the underlying lanelet map. This integration enables the planner to leverage richer semantic and geometric information for more informed decision-making. Furthermore, based on the lanelet map, the system can compute additional route-related metrics, such as total distance and estimated time of arrival (ETA), offering users a more comprehensive and practical navigation experience.