هدف این است:
از صفر 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.GUIp.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
جلسه ۱۲ — خواندن اطلاعات ربات
getNumJointsgetJointInfo- پیدا کردن شماره مفاصل
- نامگذاری و مدیریت مفاصل
جلسه ۱۳ — کنترل مفاصل
- 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 انتخابش کردیم و دقیقاً قرار است چه چیزی بسازیم؟» باشد؛ نه اینکه بدون درک مسیر، مستقیم دستور نصب بزنیم.