Skip to main content

سبق 13.2: سمولیشن بنانا

اب وہ سمولیشن نافذ کریں جو آپ نے سبق 13.1 میں بیان کیا تھا۔ آپ شروع سے تعمیر نہیں کریں گے—آپ باب 9 سے 12 تک جمع کیے گئے ہنر کو استعمال کریں گے، انہیں ایک کام کرنے والے نظام میں ترتیب دیں گے۔

کامیاب کیپ اسٹون نفاذ کی کلید اضافی جانچ (incremental testing) ہے: اگلے مرحلے پر جانے سے پہلے ہر جزو کی تصدیق کریں کہ وہ کام کر رہا ہے۔ سب کچھ نہ بنائیں، پھر دریافت کریں کہ یہ کام نہیں کر رہا ہے۔ اضافی طور پر بنائیں، ہر قدم کو درست کریں، پھر جاری رکھیں۔


نفاذ کا ورک فلو

مرحلہ 1: اپنی تفصیلات تیار کریں

یہاں سے شروع کریں: سبق 13.1 سے اپنی کیپ اسٹون تفصیلات کھولیں۔

چیک لسٹ:

  • ✅ ارادہ کا بیان واضح ہے
  • ✅ روبوٹ کی ضروریات میں لنکس، جوائنٹس، سینسرز شامل ہیں
  • ✅ دنیا کی ضروریات میں ترتیب، رکاوٹیں، ابتدائی حالات شامل ہیں
  • ✅ سینسر کی ضروریات میں ٹاپکس اور میسج کی اقسام شامل ہیں
  • ✅ رویے کی ضروریات ادراک (perception)، فیصلہ (decision)، عمل درآمد (execution) بیان کرتی ہیں
  • ✅ کامیابی کے معیار قابل پیمائش ہیں (5+ معیار)

اگر کوئی چیز غیر واضح یا غائب ہے، تو آگے بڑھنے سے پہلے سبق 13.1 پر واپس جائیں اور اسے بہتر بنائیں۔


مرحلہ 2: روبوٹ URDF بنائیں

باب 9 سے urdf-robot-model ہنر استعمال کریں۔ آپ کے URDF میں شامل ہونا چاہیے:

  • آپ کی تفصیلات سے تمام لنکس (چیسس، پہیے، سینسرز، وغیرہ)
  • تمام جوائنٹس (پہیے کے موٹر، بازو کے جوائنٹس، گرپر کی حرکت)
  • بصری جیومیٹری (سادہ شکل کے لیے بکس، سلنڈر)
  • ٹکراؤ کی جیومیٹری (درست طبیعیات کے لیے بصری سے مماثل)
  • جسمانی خصوصیات (ماس، جڑت—سائز کی بنیاد پر تخمینہ لگائیں)
  • آپ کی تفصیلات سے مماثل سینسر پلگ ان (کیمرہ، LIDAR، IMU)

حوالہ: URDF جنریشن پر AI کے ساتھ کام کرنے کے طریقے کے لیے باب 9.4 AI کے ساتھ URDF دیکھیں۔

آپ کے URDF کو چاہیے:

  • Gazebo میں بغیر کسی خرابی کے لوڈ ہو (gz sim robot.urdf)
  • روبوٹ کی صلاحیتوں سے مماثل درست جوائنٹ حدود ہوں
  • آپ کی تفصیلات سے تمام سینسر شامل ہوں
  • مناسب ماس تقسیم ہو (پلٹنا نہیں چاہیے)

اس مرحلے کی جانچ کریں:

# Gazebo لانچ کریں اور اپنا URDF لوڈ کریں
gz sim -r my_robot.urdf

# تصدیق کریں کہ کوئی خرابی ظاہر نہیں ہوتی
# تصدیق کریں کہ روبوٹ 3D ویو میں ظاہر ہوتا ہے
# تصدیق کریں کہ آپ کیمرے کو ہر زاویے سے روبوٹ دیکھنے کے لیے حرکت دے سکتے ہیں

آؤٹ پٹ:

  • آپ کے ورک اسپیس میں my_robot.urdf فائل

مرحلہ 3: ورلڈ SDF بنائیں

باب 10 سے gazebo-world-builder ہنر استعمال کریں۔ آپ کی دنیا میں شامل ہونا چاہیے:

  • گراؤنڈ پلین (طبیعیات فعال)
  • آپ کی تفصیلات میں بیان کردہ رکاوٹیں (شیلف، دیواریں، اشیاء)
  • روشنی کی ترتیب (یکساں اندرونی روشنی تجویز کی جاتی ہے)
  • طبیعیات کے انجن کی ترتیبات (گریوٹی، رگڑ، رابطہ)
  • آپ کے روبوٹ کے لیے ابتدائی سپان مقام
  • ہدف کے مقامات (بصری اشارے کے ساتھ نشان زد)

حوالہ: SDF جنریشن پر AI کے ساتھ کام کرنے کے طریقے کے لیے باب 10.4 AI کے ساتھ ورلڈ بلڈنگ دیکھیں۔

آپ کی دنیا کو چاہیے:

  • بغیر کسی طبیعیات کی خرابی کے لوڈ ہو (gz sim world.sdf)
  • رکاوٹیں درست مقامات پر ہوں (آپ کی تفصیلات سے مماثل)
  • مستحکم طبیعیات ہو (اشیاء ہلتی نہیں ہیں، زمین سے نہیں گرتی ہیں، وغیرہ)
  • آپ کا روبوٹ درست ابتدائی مقام پر سپان ہو

اس مرحلے کی جانچ کریں:

# اپنی دنیا کے ساتھ Gazebo لانچ کریں (روبوٹ اس میں سپان ہوگا)
gz sim world.sdf

# تصدیق کریں کہ روبوٹ ابتدائی مقام پر ظاہر ہوتا ہے
# تصدیق کریں کہ رکاوٹیں متوقع جگہوں پر ہیں
# گریوٹی اور رگڑ کام کر رہے ہیں یہ جانچنے کے لیے ایک چیز گرائیں

آؤٹ پٹ:

  • تمام رکاوٹوں، گراؤنڈ، طبیعیات کی ترتیب کے ساتھ world.sdf فائل
  • مناسب <inertial> خصوصیات کے ساتھ اپ ڈیٹ شدہ URDF

مرحلہ 4: سینسرز کو ترتیب دیں

باب 11 سے sensor-simulation ہنر استعمال کریں۔ آپ کے سینسرز میں شامل ہونا چاہیے:

  • کیمرہ (اگر تفصیلات کے مطابق ضروری ہو)
  • LIDAR (اگر رکاوٹ کا پتہ لگانے کے لیے ضروری ہو)
  • IMU (اگر اوڈومیٹری/حرکت سے باخبر رہنے کے لیے ضروری ہو)
  • رابطہ سینسرز/بمپر (اگر ٹکراؤ کا پتہ لگانے کے لیے ضروری ہو)

حوالہ: سینسر ترتیب کے نمونوں کے لیے باب 11.1-11.3 دیکھیں۔

ہر سینسر کو چاہیے:

  • درست روبوٹ لنک سے منسلک ہو
  • درست ٹاپک پر پبلش ہو (آپ کی تفصیلات سے مماثل)
  • درست میسج کی قسم پبلش کرے (sensor_msgs/Image, LaserScan, وغیرہ)
  • حقیقت پسندانہ ترتیب ہو (شور، اپ ڈیٹ کی شرح، دیکھنے کا میدان)

اس مرحلے کی جانچ کریں:

# اپنی دنیا اور روبوٹ کے ساتھ Gazebo لانچ کریں
gz sim world.sdf

# ایک الگ ٹرمینل میں، چیک کریں کہ کون سے ٹاپکس موجود ہیں
gz topic --list

# کیمرے کے لیے، تصدیق کریں کہ تصویر پبلش ہو رہی ہے
gz topic -e /camera/image_raw | head -5

# LIDAR کے لیے، تصدیق کریں کہ اسکین پبلش ہو رہا ہے
gz topic -e /scan | head -5

# IMU کے لیے، تصدیق کریں کہ ڈیٹا پبلش ہو رہا ہے
gz topic -e /imu/data | head -5

آؤٹ پٹ:

  • تمام سینسر پلگ ان ترتیب کے ساتھ اپ ڈیٹ شدہ URDF
  • تصدیق کہ تمام سینسر ٹاپکس Gazebo میں ڈیٹا پبلش کر رہے ہیں

مرحلہ 5: ros_gz برج کو ترتیب دیں

باب 12 سے ros2-gazebo-bridge ہنر استعمال کریں۔ آپ کے برج میں چاہیے:

  • تمام سینسر ٹاپکس کو میپ کریں (Gazebo → ROS 2)
  • تمام کمانڈ ٹاپکس کو میپ کریں (ROS 2 → Gazebo)
  • درست میسج کی قسم کی میپنگ استعمال کریں (باب 12.1 حوالہ)
  • وہ رویہ سپورٹ کریں جو آپ کا روبوٹ انجام دے گا

حوالہ: برج کی ترکیب اور ترتیب کے لیے باب 12.1 ros_gz برج دیکھیں۔

برج کی ترتیب بنائیں (bridge.yaml):

# سینسر برج (Gazebo → ROS 2)
- ros_topic_name: "/camera/image_raw"
gz_topic_name: "/camera/image"
ros_type_name: "sensor_msgs/msg/Image"
gz_type_name: "gz.msgs.Image"
direction: GZ_TO_ROS

- ros_topic_name: "/scan"
gz_topic_name: "/scan"
ros_type_name: "sensor_msgs/msg/LaserScan"
gz_type_name: "gz.msgs.LaserScan"
direction: GZ_TO_ROS

- ros_topic_name: "/imu/data"
gz_topic_name: "/imu"
ros_type_name: "sensor_msgs/msg/Imu"
gz_type_name: "gz.msgs.IMU"
direction: GZ_TO_ROS

# کمانڈ برج (ROS 2 → Gazebo)
- ros_topic_name: "/cmd_vel"
gz_topic_name: "/cmd_vel"
ros_type_name: "geometry_msgs/msg/Twist"
gz_type_name: "gz.msgs.Twist"
direction: ROS_TO_GZ

اس مرحلے کی جانچ کریں:

# ٹرمینل 1: Gazebo لانچ کریں
gz sim world.sdf

# ٹرمینل 2: برج شروع کریں
ros2 run ros_gz_bridge parameter_bridge --ros-args -p config_file:=bridge.yaml

# ٹرمینل 3: تصدیق کریں کہ ٹاپکس ROS 2 میں ظاہر ہوتے ہیں
ros2 topic list

# آپ کو یہ دیکھنا چاہیے:
# /camera/image_raw
# /scan
# /imu/data
# /cmd_vel

# سینسر ڈیٹا کے بہاؤ کی تصدیق کریں
ros2 topic echo /scan

آؤٹ پٹ:

  • bridge.yaml ترتیب فائل
  • تصدیق کہ تمام برج والے ٹاپکس ros2 topic list میں ظاہر ہوتے ہیں
  • تصدیق کہ سینسر ڈیٹا ROS 2 ٹاپکس پر پبلش ہو رہا ہے

مرحلہ 6: رویہ نافذ کریں

اب آپ کا روبوٹ Gazebo میں ہے، سینسر چل رہے ہیں، اور ROS 2 روبوٹ کو کمانڈ دے سکتا ہے۔ سبق 13.1 میں بیان کردہ رویہ نافذ کریں۔

رویے ہو سکتے ہیں:

  • سادہ اصول پر مبنی: اگر رکاوٹ قریب ہے، رک جاؤ؛ ورنہ آگے بڑھو
  • راستہ پر عمل کرنا: وے پوائنٹ سے وے پوائنٹ تک نیویگیٹ کریں
  • سینسر پر مبنی: کیمرہ/LIDAR ڈیٹا پر منطق کے ساتھ رد عمل ظاہر کریں
  • تلاش پر مبنی: ہدف تلاش کرنے کے لیے منظم طریقے سے تلاش کریں

حوالہ: رویہ نفاذ کے نمونوں کے لیے باب 12.3 بند لوپ کنٹرول دیکھیں۔

ROS 2 نوڈ بنائیں (behavior_node.py):

#!/usr/bin/env python3

import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
from sensor_msgs.msg import LaserScan

class DeliveryRobot(Node):
def __init__(self):
super().__init__('delivery_robot')

# پبلشرز اور سبسکرائبرز
self.cmd_vel_pub = self.create_publisher(Twist, '/cmd_vel', 10)
self.scan_sub = self.create_subscription(LaserScan, '/scan',
self.scan_callback, 10)

# سادہ نیویگیشن حالت
self.goal_x = 30.0
self.goal_y = 5.0
self.robot_x = 0.0
self.robot_y = 0.0
self.min_obstacle_distance = 3.0

def scan_callback(self, msg):
"""LIDAR اسکین پر رد عمل ظاہر کریں: رکاوٹوں کا پتہ لگائیں، حرکت کو کمانڈ کریں"""

# کم سے کم فاصلے کی ریڈنگ تلاش کریں
if msg.ranges:
min_range = min([r for r in msg.ranges if r < msg.range_max])
else:
min_range = float('inf')

# فیصلہ سازی کا منطق
cmd = Twist()
if min_range > self.min_obstacle_distance:
# کوئی رکاوٹ نہیں ملی، ہدف کی طرف بڑھیں
cmd.linear.x = 0.5 # 0.5 m/s آگے
cmd.angular.z = 0.0 # کوئی گردش نہیں
else:
# رکاوٹ کا پتہ چلا، رک جاؤ
cmd.linear.x = 0.0 # رکو
cmd.angular.z = 0.0

# کمانڈ پر عمل کریں
self.cmd_vel_pub.publish(cmd)
self.get_logger().info(f"Min range: {min_range:.2f}m, cmd_vel: {cmd.linear.x:.2f} m/s")

def main(args=None):
rclpy.init(args=args)
robot = DeliveryRobot()
rclpy.spin(robot)
robot.destroy_node()
rclpy.shutdown()

if __name__ == '__main__':
main()

سب کچھ ایک ساتھ لانچ کریں:

# ٹرمینل 1: Gazebo
gz sim world.sdf

# ٹرمینل 2: ros_gz_bridge
ros2 run ros_gz_bridge parameter_bridge --ros-args -p config_file:=bridge.yaml

# ٹرمینل 3: آپ کا رویہ نوڈ
python3 behavior_node.py

# Gazebo میں روبوٹ کو حرکت کرتے ہوئے دیکھیں!

آؤٹ پٹ:

  • behavior_node.py جو آپ کی تفصیلات کے مطلوبہ رویے کو نافذ کرتا ہے
  • روبوٹ سینسر ڈیٹا پر رد عمل ظاہر کرتا ہے اور حرکت کے احکامات پر عمل کرتا ہے
  • کنسول آؤٹ پٹ جو فیصلے کے منطق کو عمل میں دکھاتا ہے

اضافی جانچ (Testing Incrementally)

ہر چیز کے کام کرنے کی تصدیق کے لیے آخر تک انتظار نہ کریں۔ جیسے جیسے آپ آگے بڑھیں جانچ کریں:

مرحلہ 2 (URDF) کے بعد:

  • ✅ روبوٹ بغیر کسی خرابی کے Gazebo میں لوڈ ہوتا ہے
  • ✅ بصری جیومیٹری مناسب لگتی ہے
  • ✅ جوائنٹس کی حدود درست ہیں

مرحلہ 3 (ورلڈ) کے بعد:

  • ✅ دنیا بغیر کسی طبیعیات کی خرابی کے Gazebo میں لوڈ ہوتی ہے
  • ✅ رکاوٹیں درست مقامات پر ہیں
  • ✅ روبوٹ ابتدائی مقام پر سپان ہوتا ہے

مرحلہ 4 (سینسرز) کے بعد:

  • ✅ Gazebo ٹاپکس میں تمام سینسر شامل ہیں
  • ✅ سینسر ڈیٹا Gazebo ٹاپکس پر پبلش ہوتا ہے
  • ✅ ڈیٹا حقیقت پسندانہ لگتا ہے (LIDAR رینج، کیمرہ ریزولوشن، وغیرہ)

مرحلہ 5 (برج) کے بعد:

  • ✅ ros2 topic list تمام برج والے ٹاپکس دکھاتا ہے
  • ✅ سینسر ڈیٹا ROS 2 ٹاپکس پر بہتا ہے
  • /cmd_vel پر پبلش کیا جا سکتا ہے اور روبوٹ رد عمل ظاہر کرتا ہے

مرحلہ 6 (رویے) کے بعد:

  • ✅ رویہ نوڈ بغیر کسی خرابی کے شروع ہوتا ہے
  • ✅ روبوٹ سینسر ڈیٹا پر رد عمل ظاہر کرتا ہے
  • ✅ روبوٹ حرکت کے احکامات پر عمل کرتا ہے
  • ✅ رویہ تفصیلات کی ضروریات کو نافذ کرتا ہے

اضافی ناکامیوں کی ڈیبگنگ

مسئلہڈیبگ کیسے کریںحل
URDF لوڈ نہیں ہوتاکنسول چیک کریں: [ERROR] XML parse errorURDF فائل میں XML ترکیب کو درست کریں
جیومیٹری اوورلیپ ہوتی ہے (ٹکراؤ ایک ہی جگہ پر)روبوٹ Gazebo میں ہلتا/اڑتا ہےجیومیٹری کے مقامات کو ایڈجسٹ کریں، ماس کم کریں
طبیعیات غیر مستحکم ہے (اشیاء زمین سے گر جاتی ہیں)گراؤنڈ پلین طبیعیات کی اشیاء کو نہیں روکتاٹکراؤ کی شکلیں فعال کریں، رگڑ کی ترتیب کی تصدیق کریں
سینسر ڈیٹا آؤٹ پٹ نہیں کرتےgz topic --list سینسر ٹاپکس نہیں دکھاتاURDF میں درست ناموں کے ساتھ سینسر پلگ ان شامل کریں
ros_gz_bridge ناکام ہو جاتا ہےبرج شروع نہیں ہوتا، ترکیب کی خرابیYAML فارمیٹ چیک کریں، میسج کی اقسام کی تصدیق کریں
ros2 ٹاپکس ظاہر نہیں ہوتےros_gz_bridge چل رہا ہے لیکن ٹاپکس غائب ہیںسمت چیک کریں (GZ_TO_ROS بمقابلہ ROS_TO_GZ)
cmd_vel پبلش ہوتا ہے لیکن روبوٹ حرکت نہیں کرتااحکامات پبلش ہوتے ہیں لیکن کوئی حرکت نہیںURDF میں جوائنٹ کے نام برج ٹاپکس سے مماثل ہیں چیک کریں
رویہ نوڈ شروع ہوتا ہے لیکن روبوٹ حرکت نہیں کرتاکنسول دکھاتا ہے کہ نوڈ چل رہا ہے لیکن کوئی حرکت نہیںcmd_vel ٹاپک کا نام، سبسکرائبر کے کام کرنے کی تصدیق کریں

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

سیٹ اپ: ChatGPT یا Claude کھولیں اور اپنے کیپ اسٹون کو لاگو کرنے میں مدد کے لیے پوچھیں۔

پرامپٹ سیٹ:

پرامپٹ 1 (تفصیلات سے URDF تیار کرنا):

میں اپنے کیپ اسٹون سمولیشن کے لیے ایک روبوٹ بنا رہا ہوں۔ یہاں میری تفصیلات ہیں:

[اپنی تفصیلات کے متعلقہ حصے پیسٹ کریں: روبوٹ کی ضروریات، سینسرز]

اس روبوٹ کے لیے ایک URDF فائل تیار کریں جس میں شامل ہوں:
- تمام مطلوبہ لنکس اور جوائنٹس
- درست ٹکراؤ/بصری جیومیٹری
- تمام سینسرز جن میں مناسب پلگ ان ترتیب دیے گئے ہوں
- حقیقت پسندانہ ماس اور جڑت کے تخمینے

اسے Gazebo Harmonic میں کامیابی سے لوڈ کریں۔

پرامپٹ 2 (ورلڈ SDF تیار کرنا):

میں اپنے کیپ اسٹون کے لیے ایک سمولیشن دنیا بنا رہا ہوں۔ یہاں دنیا کی ضروریات ہیں:

[پیسٹ کریں: دنیا کی ترتیب، رکاوٹیں، طبیعیات کی ضروریات]

ایک SDF فائل تیار کریں جس میں شامل ہو:
- طبیعیات کے ساتھ گراؤنڈ پلین
- تمام رکاوٹیں مقررہ مقامات پر
- درست طبیعیات کے پیرامیٹرز (گریوٹی، رگڑ، رابطہ)
- ابتدائی مقام اور ہدف کے مقامات نشان زد ہوں

اسے Gazebo Harmonic کے ساتھ کام کرنے کے قابل بنائیں۔

پرامپٹ 3 (برج کی ترتیب کو ڈیبگ کرنا):

میرا روبوٹ Gazebo میں ہے اور سینسر پبلش ہو رہے ہیں۔ میں ROS 2 پر برج کرنا چاہتا ہوں۔
یہ رہے میرے سینسرز:

[Gazebo سے سینسر ٹاپکس، میسج کی اقسام، اور مطلوبہ سمتیں درج کریں]

ایک bridge.yaml ترتیب تیار کریں جو:
- تمام سینسر ٹاپکس کو میپ کرے (Gazebo → ROS 2)
- کمانڈ ٹاپکس کو میپ کرے (ROS 2 → Gazebo)
- درست میسج کی قسم کی میپنگ استعمال کرے

ہر سمت کے انتخاب کی وضاحت شامل کریں۔

پرامپٹ 4 (رویے کا نوڈ بنانا):

میرے روبوٹ کو [اپنی تفصیلات سے رویہ بیان کریں] کرنے کی ضرورت ہے۔

یہ رہا میرا سینسر اور کمانڈ سیٹ اپ:
- سینسرز: [ٹاپکس کی فہرست دیں]
- کمانڈز: [ٹاپکس کی فہرست دیں]

ایک ROS 2 پائتھن نوڈ بنائیں جو:
- سینسر ڈیٹا کو سبسکرائب کرے
- رویے کے منطق کو نافذ کرے
- حرکت کے احکامات پبلش کرے

تبصروں کے ساتھ مکمل کوڈ دکھائیں۔

متوقع نتائج:

  • AI کام کرنے والا URDF تیار کرتا ہے جو آپ کی تفصیلات سے مماثل ہو
  • AI SDF دنیا تیار کرتا ہے جو آپ کی تفصیلات سے مماثل ہو
  • AI برج کی ترتیب کو ڈیبگ کرنے میں مدد کرتا ہے
  • AI رویے کے نفاذ کا کوڈ فراہم کرتا ہے جسے آپ اپنا سکتے ہیں

حفاظتی نوٹ: جب AI کوڈ تیار کرتا ہے، تو اسے چلانے سے پہلے اس کا جائزہ لیں۔ خاص طور پر:

  • موٹر کی رفتار کی تصدیق کریں (خطرناک رفتار کمانڈ نہ کریں)
  • جوائنٹ کی حدود چیک کریں (موٹروں کو مکینیکل حدود کے اندر رہنا چاہیے)
  • سینسر کی ترتیبات کا جائزہ لیں (فلٹرز، شور کی سطح مناسب)