mjunaidca/robolearn · Archived

sensor-simulation

Configure camera, LIDAR, IMU, and contact sensors on simulated robots in Gazebo

First seen Mar 29, 2026

Installation

$ npx skills add mjunaidca/robolearn --skill sensor-simulation

Stronger alternatives

This repository is archived — consider an actively maintained alternative.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from mjunaidca/robolearn.

npx skills add mjunaidca/robolearn

Browse all from mjunaidca/robolearn

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 7
Default branch main
Open issues 4
Status Archived

Skill metadata

Parsed from SKILL.md frontmatter.

Version1.0.0

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 6,418 B
  • docs SUMMARY.md 104 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 1 installs

SKILL.md

Sensor Simulation Skill

Persona

Think like a robotics perception engineer who integrates sensors into robot systems. You understand sensor physics, noise models, and data visualization. You configure sensors that produce realistic data streams suitable for perception algorithm development.


Pre-Flight Questions

Before adding or configuring any sensor, ask yourself:

1. Sensor Purpose

  • Q: What does the robot need to perceive?

- Visual: Camera for images, object detection - Distance: LIDAR for mapping, obstacle detection - Motion: IMU for orientation, acceleration - Touch: Contact for collision detection

2. Sensor Placement

  • Q: Where should the sensor be mounted?

- Impact: FOV coverage, occlusion, stability - Forward-facing camera → front of robot - 360° LIDAR → top center, unobstructed - IMU → center of mass, rigidly mounted

3. Performance Trade-offs

  • Q: What resolution/rate is needed?

- High resolution: Better data, more computation - High rate: Better responsiveness, more bandwidth - Balance based on application requirements


Principles

Principle 1: Sensor Structure in SDF

Sensors are added to links within robot models:

<link name="camera_link">
  <!-- Visual and collision for the sensor housing -->
  <visual>...</visual>
  <collision>...</collision>
  <inertial>...</inertial>

  <!-- The sensor itself -->
  <sensor name="camera" type="camera">
    <camera>
      <horizontal_fov>1.047</horizontal_fov>
      <image>
        <width>640</width>
        <height>480</height>
      </image>
      <clip>
        <near>0.1</near>
        <far>100</far>
      </clip>
    </camera>
    <always_on>1</always_on>
    <update_rate>30</update_rate>
    <topic>camera/image</topic>
  </sensor>
</link>

Principle 2: Camera Configuration

<sensor name="front_camera" type="camera">
  <camera>
    <!-- Field of view in radians (60° = 1.047 rad) -->
    <horizontal_fov>1.047</horizontal_fov>

    <!-- Image dimensions -->
    <image>
      <width>640</width>
      <height>480</height>
      <format>R8G8B8</format>
    </image>

    <!-- Depth range -->
    <clip>
      <near>0.1</near>
      <far>100</far>
    </clip>
  </camera>

  <always_on>1</always_on>
  <update_rate>30</update_rate>
  <visualize>true</visualize>
  <topic>camera/image</topic>
</sensor>

Common resolutions:

  • 640x480: Standard, good performance
  • 1280x720: HD, more detail
  • 320x240: Low-res, fast processing

Principle 3: LIDAR Configuration

<sensor name="lidar" type="gpu_lidar">
  <lidar>
    <scan>
      <horizontal>
        <samples>360</samples>
        <resolution>1</resolution>
        <min_angle>-3.14159</min_angle>
        <max_angle>3.14159</max_angle>
      </horizontal>
      <vertical>
        <samples>1</samples>
        <resolution>1</resolution>
        <min_angle>0</min_angle>
        <max_angle>0</max_angle>
      </vertical>
    </scan>
    <range>
      <min>0.1</min>
      <max>10</max>
      <resolution>0.01</resolution>
    </range>
    <noise>
      <type>gaussian</type>
      <mean>0</mean>
      <stddev>0.01</stddev>
    </noise>
  </lidar>

  <always_on>1</always_on>
  <update_rate>10</update_rate>
  <visualize>true</visualize>
  <topic>lidar/scan</topic>
</sensor>

Key parameters:

  • samples: Points per scan (more = denser)
  • min/max_angle: Scan coverage (-π to π = 360°)
  • min/max range: Detection distance limits
  • noise: Gaussian noise for realism

Principle 4: IMU Configuration

<sensor name="imu" type="imu">
  <imu>
    <angular_velocity>
      <x>
        <noise type="gaussian">
          <mean>0</mean>
          <stddev>0.01</stddev>
        </noise>
      </x>
      <!-- y and z similar -->
    </angular_velocity>
    <linear_acceleration>
      <x>
        <noise type="gaussian">
          <mean>0</mean>
          <stddev>0.1</stddev>
        </noise>
      </x>
      <!-- y and z similar -->
    </linear_acceleration>
  </imu>

  <always_on>1</always_on>
  <update_rate>100</update_rate>
  <topic>imu/data</topic>
</sensor>

IMU outputs:

  • angular_velocity: Rotation rate (rad/s)
  • linear_acceleration: Includes gravity!
  • orientation: Quaternion (if available)

Principle 5: Add Noise for Realism

Real sensors have noise. Simulated sensors should too:

<noise>
  <type>gaussian</type>
  <mean>0</mean>
  <stddev>0.01</stddev>  <!-- Adjust based on sensor quality -->
</noise>

Typical noise levels:

  • High-quality LIDAR: stddev 0.005-0.01m
  • Consumer LIDAR: stddev 0.02-0.05m
  • IMU gyro: stddev 0.01-0.05 rad/s
  • IMU accel: stddev 0.1-0.5 m/s²

Debugging Sensor Issues

Sensor Not Publishing

  1. Check topic name matches subscriber
  2. Verify <alwayson>1</alwayson>
  3. Confirm sensor plugin is loaded
  4. Check gz topic -l for available topics

Data All Zeros

  1. Sensor origin inside robot body (collision)
  2. Nothing in sensor's field of view
  3. Range limits too restrictive

Noisy/Unstable Data

  1. Noise parameters too high
  2. Physics timestep too large
  3. Sensor update rate too fast

Checklist

Before finalizing any sensor configuration:

  • Sensor attached to correct link
  • Origin places sensor at correct position
  • FOV/range covers intended area
  • Update rate appropriate for application
  • Noise model added for realism
  • Topic name is unique and descriptive
  • visualize enabled for debugging
  • Data appears in gz topic -e
  • Data format matches ROS 2 expectations

Integration

This skill is used by:

  • content-implementer agent when generating Module 2 lessons
  • Students learning sensor simulation in Chapter 11
  • Perception algorithm development and testing

Dependencies:

  • urdf-robot-model - sensors attach to robot links
  • gazebo-world-builder - sensors perceive the world
  • ros2-gazebo-bridge - sensor data bridges to ROS 2