مسیر یادگیری و اجرای پروژه «شبیه‌سازی و توسعه یک AGV خودران برای انبار هوشمند»

هدف این است:

از صفر PyBullet و شبیه‌سازی رباتیک را یاد بگیری → هم‌زمان یک AGV واقعی و قابل‌ارائه بسازی → در طول مسیر آموزش تولید کنی → در نهایت یک پروژه Portfolio حرفه‌ای داشته باشی.

بنابراین من نقشه را طوری می‌چینم که هر فصل یک خروجی واقعی داشته باشد و مطالب اضافی باعث نشوند وسط راه گم شویم.


🧭 نقشه راه اصلی دوره

پروژه نهایی:

«شبیه‌سازی و توسعه یک AGV خودران برای انبار هوشمند»

در پایان قرار است چیزی شبیه این داشته باشیم:

                🏭 انبار
 ┌──────────────────────────────────┐
 │ 📦 📦 📦       │       📦 📦 📦 │
 │ 📦 📦 📦       │       📦 📦 📦 │
 │                │                 │
 │      🤖 ───────┼──────→ 📦       │
 │                │                 │
 │         🚧     │                 │
 │                │                 │
 │ 📦 📦 📦       │       🎯        │
 └──────────────────────────────────┘

       ↓

سنسورها
       ↓
تشخیص محیط
       ↓
نقشه
       ↓
مکان‌یابی
       ↓
مسیریابی
       ↓
حرکت خودران
       ↓
انجام مأموریت
       ↓
چند ربات
       ↓
بهینه‌سازی
       ↓
Sim-to-Real

فصل ۱ — نصب و آماده‌سازی محیط PyBullet

این فصل را نسبت به فهرست DeepSeek کمی بزرگ‌تر می‌کنم، چون تو گفتی از صفر شروع می‌کنیم.

جلسه ۱ — PyBullet چیست و قرار است چه چیزی بسازیم؟

یاد می‌گیریم:

  • شبیه‌سازی چیست؟
  • موتور فیزیک چیست؟
  • PyBullet چیست؟
  • PyBullet چه تفاوتی با Gazebo و Isaac Sim دارد؟
  • AGV چیست؟
  • چرا اصلاً AGV را شبیه‌سازی می‌کنیم؟
  • پروژه نهایی دوره چیست؟
  • مسیر دوره از کجا به کجا می‌رسد؟

خروجی: تصویر کلی مسیر.


جلسه ۲ — نصب PyBullet در Windows

  • بررسی Python
  • بررسی pip/Conda
  • ساخت محیط مجازی
  • نصب PyBullet
  • تست نصب
  • اجرای اولین برنامه
  • مشکلات رایج Windows
  • تفاوت pip و conda
  • بررسی نسخه‌ها

خروجی:

import pybullet
print(pybullet.__version__)

و اجرای GUI.


جلسه ۳ — نصب PyBullet در Linux

  • نصب Python
  • محیط مجازی
  • نصب PyBullet
  • اجرای GUI
  • وابستگی‌ها
  • مشکلات رایج Linux
  • تفاوت محیط Linux و Windows

خروجی: اجرای همان پروژه روی Linux.

macOS را فعلاً از مسیر اصلی دوره حذف می‌کنم؛ می‌توانیم در یک جلسه کوتاه به‌عنوان نکته تکمیلی پوشش دهیم. تمرکز تو Windows/Linux است.


جلسه ۴ — ساختار پروژه حرفه‌ای Python

از همان اول پروژه را درست سازمان‌دهی می‌کنیم:

AGV_Project/
│
├── main.py
├── robot/
├── world/
├── sensors/
├── navigation/
├── control/
├── mapping/
├── utils/
├── data/
└── README.md

یاد می‌گیری:

  • import
  • module
  • package
  • مسیر فایل‌ها
  • مدیریت پروژه
  • virtual environment
  • Git

این جلسه مهم است چون نمی‌خواهم بعداً پروژه‌مان تبدیل به ۳۰ فایل پراکنده شود.


فصل ۲ — مبانی PyBullet

جلسه ۵ — اتصال به شبیه‌ساز

  • p.connect()
  • p.GUI
  • p.DIRECT
  • قطع اتصال
  • reset

جلسه ۶ — دنیای فیزیکی

  • Gravity
  • Time step
  • Simulation step
  • Real-time simulation
  • سرعت اجرای شبیه‌سازی

تو دقیقاً می‌فهمی:

شبیه‌ساز در هر لحظه چه اتفاقی برای ربات می‌اندازد.


جلسه ۷ — موقعیت و جهت

  • Position
  • Orientation
  • Coordinate System
  • X/Y/Z
  • Euler
  • Quaternion

این قسمت خیلی مهم است.


جلسه ۸ — جسم، زمین و برخورد

  • ساخت جسم
  • زمین
  • Collision
  • Mass
  • Friction
  • Restitution
  • تماس اجسام

پروژه کوچک فصل:

یک مکعب را در محیط قرار بدهیم و فیزیک آن را بررسی کنیم.


فصل ۳ — URDF و ساخت اولین ربات

اینجا وارد خود ربات می‌شویم.

جلسه ۹ — URDF چیست؟

  • Link
  • Joint
  • Base
  • Visual
  • Collision
  • Inertial

جلسه ۱۰ — ساخت یک ربات ساده با URDF

یک ربات بسیار ساده می‌سازیم.


جلسه ۱۱ — مفاصل ربات

  • Revolute
  • Fixed
  • Continuous
  • Joint limits

جلسه ۱۲ — خواندن اطلاعات ربات

  • getNumJoints
  • getJointInfo
  • پیدا کردن شماره مفاصل
  • نام‌گذاری و مدیریت مفاصل

جلسه ۱۳ — کنترل مفاصل

  • Position Control
  • Velocity Control
  • Torque Control
  • setJointMotorControl2

جلسه ۱۴ — خواندن وضعیت ربات

  • Joint State
  • Position
  • Velocity
  • Force
  • Reset state

پروژه فصل:

یک ربات چندمفصلی بسازیم و مفاصلش را کنترل کنیم.


فصل ۴ — ساخت AGV از صفر

اینجا رسماً پروژه اصلی شروع می‌شود.

جلسه ۱۵ — AGV چیست؟

  • AGV چیست؟
  • AMR چیست؟
  • تفاوت AGV و AMR
  • Differential Drive چیست؟
  • چرا برای پروژه خودمان Differential Drive انتخاب می‌کنیم؟

جلسه ۱۶ — ساخت بدنه AGV

ربات شامل:

      ┌─────────┐
      │  BODY   │
      └─────────┘
        O     O
       چرخ   چرخ
           o
         caster

ساخت:

  • بدنه
  • دو چرخ محرک
  • چرخ کمکی

جلسه ۱۷ — ساخت URDF کامل AGV

  • لینک‌ها
  • مفاصل
  • چرخ‌ها
  • جرم
  • اصطکاک
  • Collision
  • Inertia

خروجی مهم: اولین AGV واقعی پروژه.


فصل ۵ — کنترل حرکت AGV

جلسه ۱۸ — حرکت مستقیم

AGV را به جلو و عقب حرکت می‌دهیم.


جلسه ۱۹ — چرخش

  • چرخش درجا
  • چرخش چپ
  • چرخش راست

جلسه ۲۰ — سینماتیک Differential Drive

فرمول‌های مربوط به:

  • سرعت خطی
  • سرعت زاویه‌ای
  • سرعت چرخ راست
  • سرعت چرخ چپ

را از صفر و ساده یاد می‌گیریم.


جلسه ۲۱ — کنترل سرعت چرخ‌ها

ربات را با:

v = سرعت خطی
ω = سرعت زاویه‌ای

کنترل می‌کنیم.


جلسه ۲۲ — کنترلر ساده حرکت

مثلاً:

به نقطه X,Y برو.


جلسه ۲۳ — اشکال‌زدایی حرکت AGV

بررسی می‌کنیم:

  • چرا ربات منحرف می‌شود؟
  • چرا چرخ‌ها می‌لغزند؟
  • چرا سرعت واقعی با سرعت مورد انتظار فرق دارد؟
  • اثر اصطکاک چیست؟

خروجی فصل:

🤖 AGV می‌تواند به‌صورت برنامه‌ریزی‌شده حرکت کند.


فصل ۶ — Odometry و فهمیدن موقعیت ربات

اینجا وارد یکی از مفاهیم مهم رباتیک می‌شویم.

جلسه ۲۴ — Odometry چیست؟

یعنی:

ربات از روی حرکت چرخ‌های خودش حدس بزند کجاست.


جلسه ۲۵ — محاسبه حرکت از چرخ‌ها

  • مسافت
  • سرعت
  • زاویه
  • زمان
  • خطای تجمعی

جلسه ۲۶ — Dead Reckoning

ربات فقط بر اساس حرکت قبلی موقعیت خودش را تخمین بزند.


جلسه ۲۷ — مقایسه موقعیت واقعی و تخمینی

در شبیه‌سازی می‌توانیم هر دو را داشته باشیم:

موقعیت واقعی
      VS
موقعیت تخمینی

و خطا را اندازه بگیریم.

این برای آینده Sim-to-Real خیلی مهم است.


فصل ۷ — سنسورها

حالا ربات باید محیط را «ببیند».

جلسه ۲۸ — سنسور در شبیه‌سازی چیست؟

  • Sensor model
  • Ground truth
  • Noise
  • محدودیت سنسور

جلسه ۲۹ — LiDAR با Ray Casting

  • Ray
  • Ray Test
  • Ray Test Batch
  • فاصله تا مانع
  • زاویه اسکن

جلسه ۳۰ — ساخت LiDAR ساده برای AGV

مثلاً:

        | | |
      \ | | /
       \| |/
        🤖

جلسه ۳۱ — پردازش داده LiDAR

داده خام را به اطلاعات قابل استفاده تبدیل می‌کنیم.


جلسه ۳۲ — ایجاد مانع و تشخیص آن

ربات بفهمد:

جلوی من مانع وجود دارد.


جلسه ۳۳ — دوربین مجازی

  • Camera
  • RGB
  • Depth
  • getCameraImage

جلسه ۳۴ — پردازش تصویر با OpenCV

مثلاً:

پیدا کردن یک جسم قرمز.


جلسه ۳۵ — IMU شبیه‌سازی‌شده

  • شتاب
  • سرعت زاویه‌ای
  • نویز
  • کاربرد IMU

خروجی فصل:

🤖 ربات دیگر فقط حرکت نمی‌کند؛ محیط را هم اندازه‌گیری می‌کند.


فصل ۸ — ساخت نقشه

جلسه ۳۶ — نقشه چیست؟

  • World Map
  • Occupancy Grid
  • Cell
  • Resolution

جلسه ۳۷ — تبدیل LiDAR به نقشه

داده LiDAR → نقشه


جلسه ۳۸ — ساخت Occupancy Grid

مثلاً:

0 = آزاد
1 = مانع

جلسه ۳۹ — به‌روزرسانی نقشه

ربات حرکت کند و نقشه را اصلاح کند.


جلسه ۴۰ — خطا و نویز در نقشه

چرا نقشه واقعی هیچ‌وقت کاملاً تمیز نیست؟


فصل ۹ — مسیریابی

اینجا ربات بالاخره می‌تواند خودش تصمیم بگیرد از کجا برود.

جلسه ۴۱ — مسئله Path Planning

A → B

با وجود مانع.


جلسه ۴۲ — الگوریتم Dijkstra


جلسه ۴۳ — الگوریتم A*


جلسه ۴۴ — اجرای A* روی نقشه AGV

خروجی:

A
│
│
└─────┐
      │
      └──── B

جلسه ۴۵ — تبدیل مسیر شبکه‌ای به مسیر قابل حرکت

چون AGV نمی‌تواند مثل یک نقطه روی خانه‌های شطرنج بپرد.


فصل ۱۰ — حرکت خودران

اینجا چند مفهوم را به هم وصل می‌کنیم.

جلسه ۴۶ — Follow Path

ربات مسیر محاسبه‌شده را دنبال کند.


جلسه ۴۷ — Waypoint

مسیر را به نقاط هدف تقسیم می‌کنیم.


جلسه ۴۸ — کنترل حرکت به سمت هدف


جلسه ۴۹ — اجتناب از مانع

اگر مانع ناگهانی ظاهر شد چه کنیم؟


جلسه ۵۰ — Local Planning

اینجا می‌توانیم DWA را معرفی کنیم.

نکته مهم:

من DWA را مثل DeepSeek در ابتدای مسیر قرار نمی‌دهم؛ چون قبل از اینکه کنترل پایه، مسیر‌یابی و مدل ربات را بلد باشی، DWA بیشتر تبدیل به حفظ کردن الگوریتم می‌شود.


فصل ۱۱ — پروژه AGV خودران

حالا همه چیز را ترکیب می‌کنیم.

جلسه ۵۱ — معماری کامل سیستم

Sensor
 ↓
Perception
 ↓
Localization
 ↓
Mapping
 ↓
Path Planning
 ↓
Motion Control
 ↓
AGV

جلسه ۵۲ — اجرای کامل ناوبری

ربات:

موقعیت را می‌گیرد → مسیر پیدا می‌کند → حرکت می‌کند → به مقصد می‌رسد.


جلسه ۵۳ — Click to Navigate

روی نقشه کلیک می‌کنیم:

«برو آنجا.»

ربات خودش مسیر را پیدا می‌کند.


جلسه ۵۴ — سناریوهای مختلف

  • مسیر آزاد
  • مانع
  • مانع متحرک
  • مقصدهای مختلف

جلسه ۵۵ — تست و ارزیابی

اندازه‌گیری:

  • زمان رسیدن
  • طول مسیر
  • خطای موقعیت
  • تعداد برخورد
  • موفقیت مأموریت

اینجا اولین نسخه جدی Portfolio آماده است.


فصل ۱۲ — تبدیل AGV به انبار هوشمند

حالا محیط را بزرگ‌تر می‌کنیم.

جلسه ۵۶ — ساخت انبار

  • قفسه
  • راهرو
  • محل بارگیری
  • محل تخلیه
  • ایستگاه شارژ

جلسه ۵۷ — کالا و مأموریت

مثلاً:

کالا از قفسه A7 → ایستگاه بسته‌بندی


جلسه ۵۸ — سیستم مدیریت مأموریت

ربات دستور می‌گیرد:

Task 001
Pick: A7
Drop: B2

جلسه ۵۹ — انتخاب ربات مناسب

اگر چند ربات داشته باشیم، کدام را بفرستیم؟


فصل ۱۳ — چند AGV و مدیریت ناوگان

جلسه ۶۰ — ساخت چند ربات


جلسه ۶۱ — تقسیم مأموریت

Task Allocation


جلسه ۶۲ — جلوگیری از برخورد ربات‌ها


جلسه ۶۳ — مدیریت ترافیک


جلسه ۶۴ — برنامه‌ریزی مجدد مسیر

اگر مسیر بسته شد:

مسیر جدید پیدا کن.


جلسه ۶۵ — شارژ باتری

  • Battery State
  • Charging Station
  • انتخاب زمان شارژ

جلسه ۶۶ — Fleet Management

حالا یک سیستم داریم که چند ربات را مدیریت می‌کند.

اینجا پروژه از «AGV آموزشی» به «سیستم لجستیک رباتیک» تبدیل می‌شود.


فصل ۱۴ — Digital Twin و تحلیل عملکرد

اینجا همان چیزی وارد می‌شود که قبلاً درباره‌اش صحبت کردیم.

جلسه ۶۷ — Digital Twin چیست؟

خیلی ساده:

یک نسخه دیجیتال از سیستم واقعی که وضعیت و عملکرد آن را نمایش و تحلیل می‌کند.


جلسه ۶۸ — جمع‌آوری داده

مثلاً:

  • تعداد مأموریت
  • زمان مأموریت
  • مسافت
  • مصرف انرژی
  • برخورد
  • زمان انتظار

جلسه ۶۹ — تحلیل عملکرد انبار


جلسه ۷۰ — پیدا کردن Bottleneck

مثلاً:

چرا سفارش‌ها دیر تحویل می‌شوند؟


جلسه ۷۱ — آزمایش سناریوها

مثلاً:

5 ربات
VS
10 ربات

جلسه ۷۲ — بهینه‌سازی

پیدا کردن:

بهترین تعداد ربات + بهترین مسیر + بهترین محل شارژ + بهترین تخصیص مأموریت.

اینجا دیگر فقط «شبیه‌سازی» نمی‌کنیم؛ از شبیه‌سازی برای تصمیم‌گیری مهندسی استفاده می‌کنیم.


فصل ۱۵ — Synthetic Data و هوش مصنوعی

این فصل را بعد از اینکه سیستم پایه کامل شد می‌آوریم.

جلسه ۷۳ — داده مصنوعی چیست؟


جلسه ۷۴ — تولید سناریوهای تصادفی

مثلاً:

  • موانع مختلف
  • تعداد کالا
  • تعداد ربات
  • موقعیت‌های مختلف

جلسه ۷۵ — آشنایی با Reinforcement Learning

  • Agent
  • Environment
  • State
  • Action
  • Reward

جلسه ۷۶ — تعریف مسئله RL برای AGV

مثلاً:

هدف: رسیدن به مقصد با کمترین زمان و بدون برخورد.


جلسه ۷۷ — PPO و Stable-Baselines3


جلسه ۷۸ — آموزش عامل در PyBullet


جلسه ۷۹ — مقایسه روش کلاسیک و AI

مثلاً:

A + Controller*

در مقابل:

RL

و بررسی اینکه کدام بهتر است و در چه شرایطی.


فصل ۱۶ — Sim-to-Real

این فصل را به‌عنوان نقطه اوج دوره می‌گذاریم.

جلسه ۸۰ — چرا Simulation با Reality فرق دارد؟

  • اصطکاک
  • نویز
  • تأخیر
  • خطای سنسور
  • تفاوت موتور
  • تفاوت وزن
  • خطای مدل

جلسه ۸۱ — Domain Randomization

در شبیه‌سازی عمداً شرایط مختلف ایجاد می‌کنیم.


جلسه ۸۲ — ساخت AGV کوچک واقعی

در صورت داشتن سخت‌افزار:

  • موتور
  • چرخ
  • کنترلر
  • سنسور
  • کامپیوتر

جلسه ۸۳ — انتقال کنترل از Simulation به Robot


جلسه ۸۴ — مقایسه Simulation و Reality

مثلاً:

Simulation:
زمان = 5.2 s

Reality:
زمان = 5.8 s

و بررسی علت اختلاف.


فصل ۱۷ — پروژه نهایی Portfolio

جلسه ۸۵ — طراحی نهایی سیستم

جلسه ۸۶ — تمیز کردن کد

جلسه ۸۷ — تست سیستم

جلسه ۸۸ — اندازه‌گیری عملکرد

جلسه ۸۹ — تهیه نمودارها و نتایج

جلسه ۹۰ — ساخت README حرفه‌ای

جلسه ۹۱ — GitHub

جلسه ۹۲ — تهیه Demo Video

جلسه ۹۳ — نوشتن گزارش فنی

جلسه ۹۴ — تبدیل پروژه به Portfolio

جلسه ۹۵ — تبدیل پروژه به محتوای آموزشی


🔥 در نهایت پروژه‌ای که ساخته‌ایم این است

نه یک AGV ساده.

بلکه:

                 AGV
                  │
        ┌─────────┴─────────┐
        ↓                   ↓
     Sensors             Control
        ↓                   ↓
   Perception          Differential Drive
        │                   │
        └─────────┬─────────┘
                  ↓
             Localization
                  ↓
                Mapping
                  ↓
            Path Planning
                  ↓
           Autonomous Motion
                  ↓
             Task System
                  ↓
          Multiple AGVs
                  ↓
          Fleet Management
                  ↓
          Smart Warehouse
                  ↓
           Digital Twin
                  ↓
            Optimization
                  ↓
                 AI
                  ↓
             Sim-to-Real
                  ↓
              Real AGV

اما یک تغییر خیلی مهم نسبت به نقشه DeepSeek

من RL را از هسته اصلی دوره حذف نمی‌کنم، ولی آن را پیش‌نیاز پروژه اصلی نمی‌کنم.

یعنی اگر به فصل ۱۵ رسیدیم و RL سخت بود، پروژه اصلی ما متوقف نمی‌شود.

چون:

AGV خودران بدون Reinforcement Learning کاملاً یک پروژه معتبر و حرفه‌ای است.

در صنعت اتفاقاً بسیاری از سیستم‌های ناوبری با روش‌های کلاسیک، بهینه‌سازی، کنترل و الگوریتم‌های برنامه‌ریزی ساخته می‌شوند.

پس:

A + Localization + Mapping + Controller + Sensors*

خودش یک پروژه جدی است.

RL تبدیل می‌شود به لایه پیشرفته‌ای که روی آن اضافه می‌کنیم.


تفاوت نقشه من با نقشه DeepSeek

موضوعنقشه DeepSeekنقشه پیشنهادی من
نصب✅ گسترده‌تر
مبانی PyBullet
URDF✅ عمیق‌تر
ساخت AGV
Differential Drive
Odometry✅ عمیق‌تر
Sensors
LiDAR
Camera
Mapping
A*
DWAخیلی زودبعد از کنترل و مسیر‌یابی
Autonomous Navigation
انبار
Task Management
Multi-AGV
Fleet Management
Battery/Charging
Digital Twinمحدود✅ کامل‌تر
Optimization
Synthetic Dataمحدود
RL✅ ولی پیشرفته
Sim-to-Real✅ عمیق‌تر
تست و ارزیابیکم
Git/GitHubکم
Portfolioکم
محصول آموزشیکم

اما یک نکته بسیار مهم برای تو

این ۹۵ جلسه به این معنی نیست که از فردا ۹۵ جلسه را از قبل طراحی و ضبط کنیم.

اتفاقاً پیشنهاد من این است که این نقشه را به‌عنوان نقشه مادر نگه داریم.

بعد فقط:

فصل ۱ → جلسه ۱

را شروع کنیم.

تو یاد می‌گیری.

من برایت درس را آماده می‌کنم.

تو اجرا می‌کنی.

اشکالات واقعی که برایت پیش می‌آید را ثبت می‌کنیم.

بعد همان چیزی که واقعاً اجرا و آزمایش شده تبدیل می‌شود به محتوای سایت و دوره.

این خیلی مهم است، چون در این حالت آموزش تو تبدیل نمی‌شود به:

«من از روی مستندات PyBullet برای شما توضیح می‌دهم.»

بلکه تبدیل می‌شود به:

«از صفر یک AGV خودران را با PyBullet ساخته‌ایم و قدم‌به‌قدم ببینید چگونه.»

این برای فروش آموزش ارزش بسیار بیشتری دارد.


و درباره درآمد

فعلاً من عمداً درآمد را وارد طراحی فنی نکردم. اول باید پروژه واقعاً ساخته شود. بعد می‌توانیم از یک پروژه، چند محصول دربیاوریم:

دوره PyBullet از صفر

دوره ساخت AGV با PyBullet

دوره شبیه‌سازی رباتیک

مقالات سایت

پروژه GitHub

Portfolio برای اپلای

نسخه پیشرفته Digital Twin / Multi-AGV

یعنی یک بار دانش و پروژه را می‌سازیم و از آن چند خروجی می‌گیریم.

پس بله: نقشه DeepSeek را دور نمی‌اندازیم؛ آن را اسکلت اولیه می‌گیریم، اما نقشه بالا را به‌عنوان نقشه مادر مسیرمان قرار می‌دهیم. و از اینجا به بعد اگر بخواهی واقعاً شروع کنیم، جلسه ۱ باید فقط «PyBullet چیست، چرا برای پروژه AGV انتخابش کردیم و دقیقاً قرار است چه چیزی بسازیم؟» باشد؛ نه اینکه بدون درک مسیر، مستقیم دستور نصب بزنیم.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top