Skip to main content

سبق 11.2: LIDAR سمولیشن

روبوٹ کے ادراک (Perception) میں LIDAR کیوں اہم ہے؟

LIDAR (Light Detection and Ranging) روشنی کی شعاعوں کو سطحوں سے ٹکرا کر اور واپسی کے وقت کو ناپ کر فاصلہ ماپتا ہے۔ 360 ڈگری کا LIDAR سکینر ایک روبوٹ کے ارد گرد کے پورے ماحول کو نقطہ بہ نقطہ دیکھتا ہے۔ یہ ڈیٹا مندرجہ ذیل چیزوں کو ممکن بناتا ہے:

  • رکاوٹ سے بچاؤ (Obstacle avoidance): دیواروں، فرنیچر، لوگوں کا پتہ لگانا
  • SLAM (Simultaneous Localization and Mapping): نقشہ بناتے ہوئے اپنی جگہ کا تعین کرنا
  • خودمختار نیویگیشن (Autonomous navigation): رکاوٹوں کے گرد راستے بنانا
  • آبجیکٹ کا پتہ لگانا (Object detection): 3D جگہ میں اشکال کو پہچاننا

سمولیشن میں، LIDAR گھنے 3D پوائنٹ کلاؤڈز پیدا کرتا ہے۔ آپ کا روبوٹ فی سیکنڈ ہزاروں پوائنٹس شائع (publish) کرتا ہے، اور آپ کے نیویگیشن نوڈز ٹکراؤ سے بچنے کے لیے ان پر کارروائی کرتے ہیں۔

یہ سبق آپ کو سکھائے گا کہ LIDAR سینسرز کو کیسے ترتیب دیا جائے اور ڈیٹا کے بہاؤ کو کیسے سمجھا جائے۔


LIDAR پیرامیٹرز کو سمجھنا

سکیننگ جیومیٹری (Scanning Geometry)

LIDAR زاویے کی ایک رینج میں لیزر بیمز کو جھاڑ کر (sweeping) اور ہر نقطہ تک فاصلہ ماپ کر کام کرتا ہے۔

افقی سکین (Horizontal scan) (2D LIDAR، پلینر):

2D LIDAR والا روبوٹ (سائیڈ ویو):

لیزر بیم (دائیں طرف اشارہ کرتے ہوئے)

┌───────┐
│ LIDAR │ ─ ─ ─ ─ دیوار (2 میٹر کا پتہ چلتا ہے)
└───────┘
│ LIDAR │ ─ ─ ─ زمین (0.5 میٹر کا پتہ چلتا ہے)

سوئیپ زاویہ رینج: -180° سے +180° تک

عمودی صف (Vertical array) (3D LIDAR، ویلوڈائن طرز کا):

عمودی طور پر ایک دوسرے کے اوپر رکھے گئے متعدد افقی طیارے (planes)۔
ہر طیارہ آزادانہ طور پر 360 ڈگری سکین کرتا ہے۔
نتیجہ: 3D پوائنٹ کلاؤڈ (فی سیکنڈ لاکھوں پوائنٹس)۔

اہم پیرامیٹرز (Critical Parameters)

زاویہ رینج (Angle Range) (ریڈیئنز میں):

  • کم سے کم زاویہ (Min angle): سوئیپ کا آغاز (اکثر -π، پیچھے کی طرف اشارہ کرتے ہوئے)
  • زیادہ سے زیادہ زاویہ (Max angle): سوئیپ کا اختتام (اکثر +π، مکمل گردش کے بعد)
  • فارمولا: max_angle - min_angle = کل سوئیپ زاویہ

عام اقدار:

  • 360 ڈگری سکینر: کم از کم = -3.14159، زیادہ سے زیادہ = 3.14159 (مکمل دائرہ کا احاطہ کرتا ہے)
  • 180 ڈگری سکینر: کم از کم = -1.571، زیادہ سے زیادہ = 1.571 (صرف سامنے کا آدھا حصہ)
  • 120 ڈگری سکینر: کم از کم = -1.047، زیادہ سے زیادہ = 1.047 (محدود سوئیپ)

نمونہ شمار (Sample Count) (افقی نمونے):

  • سوئیپ زاویہ رینج میں کتنی فاصلہ پیمائشیں ہیں
  • 360 ڈگری سکین کے لیے 360 نمونے: ہر ڈگری پر ایک پیمائش
  • اعلی ریزولوشن کے لیے 720 نمونے (ہر نمونے پر 0.5 ڈگری)
  • کم ریزولوشن کے لیے 180 نمونے (ہر نمونے پر 2 ڈگری)

یہ کیوں اہم ہے: زیادہ نمونے کا مطلب ہے زیادہ تفصیل لیکن پروسیسنگ کا بوجھ بھی زیادہ۔

رینج (فاصلے کی حدیں):

  • کم از کم رینج (Min range): سب سے کم فاصلہ جو LIDAR ماپ سکتا ہے (عام طور پر 0.1 سے 0.5 میٹر)
  • زیادہ سے زیادہ رینج (Max range): سب سے دور کا فاصلہ (ہارڈ ویئر کے لحاظ سے عام طور پر 10 سے 100 میٹر)

اپ ڈیٹ ریٹ (Update rate) (فریم فی سیکنڈ):

  • LIDAR کتنی بار ایک مکمل سکین مکمل کرتا ہے
  • عام: 10 Hz (فی سیکنڈ 10 سکین)
  • تیز ہارڈ ویئر: 20 Hz

اپنے روبوٹ میں LIDAR شامل کرنا

مرحلہ 1: SDF میں LIDAR سینسر کی تعریف کریں

اپنے روبوٹ کے SDF میں gpu_lidar قسم کا <sensor> عنصر شامل کریں۔

مثال: روبوٹ کے اوپر 360 ڈگری LIDAR

<model name="my_robot">
<link name="base_link">
<!-- Robot body... -->
</link>

<link name="lidar_link">
<!-- LIDAR کی جسمانی نمائندگی (چھوٹا سلنڈر) -->
<inertial>
<mass>0.1</mass>
</inertial>
<visual>
<geometry>
<cylinder>
<radius>0.05</radius>
<length>0.05</length>
</cylinder>
</geometry>
</visual>

<!-- LIDAR SENSOR DEFINITION -->
<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>
<!-- عمودی تہیں (1 = 2D سکین، >1 = 3D) -->
<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>
</range>

<!-- شور کا ماڈل (حقیقت پسندی کا اضافہ کرتا ہے) -->
<noise>
<type>gaussian</type>
<mean>0</mean>
<stddev>0.01</stddev>
</noise>
</lidar>

<!-- اشاعت کا رویہ (Publishing behavior) -->
<always_on>1</always_on>
<update_rate>10</update_rate>

<!-- وہ ٹاپک کا نام جہاں پوائنٹ کلاؤڈ شائع ہوتا ہے -->
<plugin name="lidar_controller" filename="libgazebo_ros_gpu_lidar.so">
<frame_name>lidar_link</frame_name>
</plugin>
</sensor>
</link>

<!-- LIDAR کو base_link کے اوپر نصب کریں -->
<joint name="lidar_joint" type="fixed">
<parent>base_link</parent>
<child>lidar_link</child>
<origin xyz="0 0 0.2" rpy="0 0 0"/>
</joint>
</model>

کیا ہو رہا ہے:

  • <sensor type="gpu_lidar"> تیز رینڈرنگ کے لیے GPU ایکسلریشن استعمال کرتا ہے
  • <horizontal> بنیادی 360 ڈگری سوئیپ کی وضاحت کرتا ہے (360 نمونے)
  • <vertical> عمودی تہوں کی وضاحت کرتا ہے (1 = ایک ہی افقی طیارہ، 2D لیزر کی طرح)
  • <range> کم از کم/زیادہ سے زیادہ پتہ لگانے کے فاصلے کی وضاحت کرتا ہے (0.1 سے 10 میٹر)
  • <noise> حقیقت پسندانہ ڈیٹا کے لیے گاسین شور شامل کرتا ہے (اختیاری لیکن تجویز کردہ)
  • <plugin> ROS انٹیگریشن کو ترتیب دیتا ہے
  • جوائنٹ LIDAR کو بیس کے اوپر (z = 0.2 میٹر) نصب کرتا ہے

مرحلہ 2: LIDAR کی اشاعت (Publishing) کی تصدیق کریں

اپنے روبوٹ کے ساتھ Gazebo لانچ کرنے کے بعد، چیک کریں کہ LIDAR ڈیٹا شائع کر رہا ہے۔

LIDAR ٹاپکس کی فہرست بنائیں:

ros2 topic list | grep lidar

متوقع آؤٹ پٹ:

/lidar/scan
/lidar/points

دو قسم کا ڈیٹا:

  • /lidar/scan: LaserScan میسج (2D، پرانے طرز کے لیزر رینج فائنڈر کی طرح)
  • /lidar/points: PointCloud2 میسج (3D، خام پوائنٹس x,y,z)

LIDAR ڈیٹا کا معائنہ کریں:

ros2 topic echo /lidar/scan --once

آؤٹ پٹ دکھاتا ہے:

angle_min: -3.141592653589793
angle_max: 3.141592653589793
angle_increment: 0.017453292519943295
range_max: 10.0
ranges: [4.532, 4.521, 4.498, ...] # 360 فاصلہ پیمائشیں

ranges[] میں ہر قدر اس سمت میں پتہ لگایا گیا فاصلہ ہے۔

مرحلہ 3: RViz میں LIDAR آؤٹ پٹ کا بصری جائزہ (Visualize) لیں

RViz 3D پوائنٹ کلاؤڈز کو دیکھنے کے لیے معیاری ٹول ہے۔

RViz لانچ کریں:

rviz2

پوائنٹ کلاؤڈ ویژولائزیشن شامل کریں:

  1. "Add" بٹن پر کلک کریں۔
  2. "PointCloud2" منتخب کریں۔
  3. ٹاپک کو /lidar/points پر سیٹ کریں۔
  4. آپ کو پتہ لگائی گئی سطحوں کی نمائندگی کرنے والے رنگین پوائنٹس نظر آئیں گے۔

تشریح:

  • ہر نقطہ 3D جگہ میں x,y,z پوزیشن ہے۔
  • رنگ فاصلے (سرخ = دور، نیلا = قریب) یا شدت کی نشاندہی کرتے ہیں۔
  • گھنے کلاؤڈز = بہت ساری سطحیں (بھرا ہوا ماحول)
  • کمزور کلاؤڈز = کھلی جگہ (کم رکاوٹیں)

2D بمقابلہ 3D LIDAR

2D LIDAR (پلینر سکین)

ایک ہی افقی طیارے کو سکین کرتا ہے۔ اونچائی کی معلومات کو نظر انداز کرتا ہے۔

SDF ترتیب:

<vertical>
<samples>1</samples>
<min_angle>0</min_angle>
<max_angle>0</max_angle>
</vertical>

استعمال کے معاملات:

  • ہموار زمین پر نیویگیشن (پہیوں والے روبوٹ)
  • 2D میپنگ اور SLAM
  • افقی طیارے میں رکاوٹ کا پتہ لگانا

فائدے:

  • کم کمپیوٹیشن
  • ڈیٹا پروسیسنگ آسان
  • اندرونی نیویگیشن کے لیے اچھا کام کرتا ہے

نقصانات:

  • سکین طیارے کے اوپر/نیچے کی رکاوٹوں کو نظر انداز کرتا ہے (سیڑھیاں، اوور پاس)
  • زمین کو رکاوٹ سے ممتاز نہیں کر سکتا

3D LIDAR (عمودی اسٹیک)

عمودی طور پر ایک دوسرے کے اوپر رکھے گئے متعدد افقی طیارے۔ مکمل 3D ماحول کو کیپچر کرتا ہے۔

SDF ترتیب:

<vertical>
<samples>16</samples>
<min_angle>-0.26</min_angle>
<max_angle>0.26</max_angle>
</vertical>

(16 عمودی تہیں، جو تقریباً 30 ڈگری پر پھیلی ہوئی ہیں)

استعمال کے معاملات:

  • ہیومنوائڈ روبوٹ (مکمل 3D کی ضرورت ہے)
  • رکاوٹ سے بچاؤ (سیڑھیاں، اوور ہینگ)
  • پیچیدہ ماحول میں SLAM (جنگلات، ملبہ)

فائدے:

  • مکمل 3D ادراک
  • ہر اونچائی پر رکاوٹوں کا پتہ لگاتا ہے
  • پیچیدہ علاقے کے لیے بہتر

نقصانات:

  • نمایاں طور پر زیادہ ڈیٹا (16 گنا یا اس سے زیادہ)
  • سست پروسیسنگ
  • سینسر زیادہ مہنگا (حقیقی ہارڈ ویئر میں)

LIDAR ڈیٹا کی کمی (Sparsity) کو سمجھنا

LIDAR کمی والا ڈیٹا پیدا کرتا ہے: صرف وہ پوائنٹس جہاں بیم کسی چیز سے ٹکراتی ہے۔ ایک کھلی راہداری بہت کم پوائنٹس پیدا کرتی ہے۔ ایک بھری ہوئی کمرہ بہت سارے پوائنٹس پیدا کرتا ہے۔

کمزور راہداری (Sparse hallway):

خالی راہداری میں روبوٹ:
LIDAR → بائیں دیوار (x = -2m) → ہر زاویہ پر 1 نقطہ
LIDAR → دائیں دیوار (x = 2m) → ہر زاویہ پر 1 نقطہ
LIDAR → آگے (کھلی جگہ) → کوئی واپسی نہیں

نتیجہ: صرف پوائنٹس کی 2 لکیریں (بائیں اور دائیں دیواریں)

گھنا کمرہ (Dense room):

آس پاس اشیاء سے گھرا ہوا روبوٹ:
LIDAR → دیواریں، فرنیچر، بکس، لوگ
بہت سی شعاعیں واپس آتی ہیں → گھنا پوائنٹ کلاؤڈ

نتیجہ: ہر جگہ پوائنٹس

یہ آپ کے روبوٹ کے لیے کیوں اہم ہے:

  • کھلی جگہ = پروسیس کرنے کے لیے کم پوائنٹس (تیز)
  • بھری ہوئی جگہ = بہت سارے پوائنٹس (سست پروسیسنگ، بہتری کی ضرورت ہے)

مشق: 360 ڈگری LIDAR شامل کریں

اس مشق میں، آپ اپنے روبوٹ میں 360 ڈگری LIDAR شامل کریں گے اور پوائنٹ کلاؤڈ کا بصری جائزہ لیں گے۔

کام:

  1. سبق 11.1 سے سٹارٹر SDF (یا اپنا روبوٹ) استعمال کریں۔
  2. gpu_lidar سینسر کے ساتھ ایک lidar_link شامل کریں۔
  3. 360 ڈگری افقی سکین، 1 عمودی تہہ (2D) کے لیے ترتیب دیں۔
  4. رینج کو 10 میٹر پر سیٹ کریں۔
  5. گاسین شور شامل کریں (stddev 0.01)
  6. Gazebo اور اپنے روبوٹ کو لانچ کریں۔
  7. تصدیق کریں کہ /lidar/points ٹاپک شائع ہو رہا ہے۔
  8. RViz کھولیں اور پوائنٹ کلاؤڈ کا بصری جائزہ لیں۔
  9. روبوٹ کو ماحول کے گرد گھمائیں اور مشاہدہ کریں کہ پوائنٹ کلاؤڈ کیسے تبدیل ہوتا ہے۔

متوقع نتیجہ: آپ کو اپنے سمولٹیڈ LIDAR کے ذریعے پتہ لگائے گئے ماحول کا 3D بصری جائزہ نظر آنا چاہیے۔


عام LIDAR مسائل اور حل

مسئلہ 1: کوئی LIDAR ٹاپک نہیں

علامت: /lidar/scan یا /lidar/points کوئی ٹاپک نہیں ہے۔

ممکنہ وجہ:

  • SDF میں LIDAR سینسر شامل نہیں ہے۔
  • غلط پلگ ان: libgazebo_ros_gpu_lidar.so نہیں ملا۔
  • Gazebo کو GPU LIDAR سپورٹ کے ساتھ نہیں بنایا گیا۔

حل:

  1. SDF میں <sensor type="gpu_lidar"> بلاک چیک کریں۔
  2. پلگ ان فائل نام درست ہے یا نہیں، اس کی تصدیق کریں۔
  3. متبادل پلگ ان آزمائیں: libgazebo_ros_lidar.so (CPU ورژن، سست)

مسئلہ 2: LIDAR کی رینج بہت کم ہے

علامت: LIDAR صرف بہت قریب کی اشیاء (1 میٹر سے کم) کا پتہ لگاتا ہے۔

ممکنہ وجہ:

  • زیادہ سے زیادہ رینج بہت کم سیٹ ہے۔
  • کم از کم رینج بہت زیادہ سیٹ ہے۔
  • شور کا ماڈل دور کے پوائنٹس کو چھپا رہا ہے۔

حل:

  1. زیادہ سے زیادہ رینج بڑھائیں: <max>100</max>
  2. کم از کم رینج کم کریں: <min>0.05</min>
  3. شور کا stddev کم کریں: <stddev>0.001</stddev>

مسئلہ 3: بہت زیادہ پوائنٹس، پوائنٹ کلاؤڈ بہت گھنا ہے

علامت: پوائنٹ کلاؤڈ اتنا گھنا ہے کہ ڈھانچہ دیکھنا مشکل ہے۔ RViz سست ہے۔

ممکنہ وجہ:

  • افقی نمونے بہت زیادہ ہیں (360 ضرورت سے زیادہ ہو سکتا ہے)
  • عمودی تہیں ایک دوسرے سے زیادہ پوائنٹس بنا رہی ہیں

حل:

  1. افقی نمونے کم کریں: <samples>180</samples> (ہر 2 ڈگری پر ایک پیمائش)
  2. اگر 3D ہے تو عمودی تہیں کم کریں: <samples>4</samples> (16 سے کم)
  3. بیم کو تنگ کرنے کے لیے کم از کم/زیادہ سے زیادہ زاویہ بڑھائیں: <min_angle>-1.57</min_angle><max_angle>1.57</max_angle>

توثیق چیک لسٹ (Validation Checklist)

LIDAR شامل کرنے کے بعد:

  • LIDAR سینسر SDF میں درست پیرامیٹرز کے ساتھ بیان کیا گیا ہے
  • LIDAR لنک بنایا گیا ہے اور روبوٹ پر نصب ہے
  • Gazebo بغیر کسی خرابی کے لانچ ہوتا ہے
  • ros2 topic list میں /lidar/scan اور /lidar/points نظر آتے ہیں
  • ros2 topic echo /lidar/scan زاویہ اور رینج ڈیٹا دکھاتا ہے
  • RViz /lidar/points سے پوائنٹ کلاؤڈ کو بصری طور پر دکھاتا ہے
  • پوائنٹ کلاؤڈ قریبی رکاوٹوں (دیواروں، اشیاء) کو دکھاتا ہے
  • LIDAR ڈیٹا میں مناسب کمی (sparsity) ہے (مکمل سیاہ نہیں، یا ناقابل یقین حد تک گھنا نہیں)

AI کے ساتھ کوشش کریں

سیٹ اپ: ایک چیٹ کھولیں اور LIDAR کنفیگریشن کے مسئلے کی وضاحت کریں۔

پرامپٹ سیٹ:

Prompt 1 (بنیادی): "میں ایک پہیے والے روبوٹ کے لیے راہداری کی نیویگیشن کے لیے 2D LIDAR شامل کر رہا ہوں۔ راہداری 20 میٹر لمبی اور 3 میٹر چوڑی ہے۔ مجھے کون سی رینج اور زاویہ پیرامیٹرز استعمال کرنے چاہئیں؟"

Prompt 2 (درمیانی): "میرا LIDAR ایک پوائنٹ کلاؤڈ کا پتہ لگا رہا ہے لیکن یہ بہت کمزور (صرف دیواروں کی خاکہ نظر آ رہی ہے) ہے۔ روبوٹ ایک فرنیچر والے کمرے میں ہے۔ کیا مجھے نمونے بڑھانے چاہئیں یا کچھ اور؟ اگر میں 360 سے 720 نمونوں تک بڑھاتا ہوں تو اس کا کیا نتیجہ نکلے گا؟"

Prompt 3 (اعلی درجے کا): "مجھے اپنے ہیومنوائڈ روبوٹ کے لیے سیڑھی کا پتہ لگانے اور رکاوٹ سے بچنے کے لیے 3D LIDAR استعمال کرنے کی ضرورت ہے۔ اس میں 16 عمودی تہیں ہیں جو 30 ڈگری پر پھیلی ہوئی ہیں۔ کیا اسے 20 Hz پر اپ ڈیٹ ہونا چاہیے یا یہ چلنے والے روبوٹ کے لیے بہت سست ہے؟"

متوقع نتائج:

  • AI ماحول کی بنیاد پر مناسب رینج اور زاویے تجویز کرتا ہے۔
  • AI ریزولوشن اور پروسیسنگ بوجھ کے درمیان تجارت (tradeoff) کی وضاحت کرتا ہے۔
  • AI مخصوص روبوٹ مورفولوجی کے لیے LIDAR کنفیگریشن کو بہتر بنانے میں مدد کرتا ہے۔

حفاظتی نوٹ: LIDAR سمولیشن کامل عکاسیوں اور کوئی رکاواٹ (occlusion) کی غلطیوں کے بغیر فرض کرتا ہے۔ حقیقی LIDAR میں ناکامی کے موڈ ہوتے ہیں: شیشہ خراب عکاسی کرتا ہے، سیاہ سطحیں جذب کرتی ہیں، بارش/دھول بیم کو بکھیر دیتی ہیں۔ حقیقی LIDAR تعینات کرتے وقت، اصل حالات میں جانچ کریں اور اپنی رینج کی توقعات کی توثیق کریں۔

اختیاری توسیع: ایک ROS 2 نوڈ لکھیں جو گنے کہ 1 میٹر سے کم کتنے پوائنٹس ہیں۔ یہ اگلے اسباق میں رکاوٹ کا پتہ لگانے کی بنیاد ہے۔