جلسه ۶ — اتصال Python به PyBullet

هدف جلسه

  • p.connect
  • GUI
  • DIRECT
  • reset
  • disconnect

در پایان این جلسه باید بتوانی:

Python
   ↓
PyBullet
   ↓
Simulation Connection
   ↓
GUI
   ↓
Disconnect

و تفاوت این دو را بفهمی:

p.GUI

و:

p.DIRECT

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


قدم ۱ — مطمئن شو Environment درست فعال است

در PyCharm لازم نیست فعلاً Conda Prompt را باز کنی.

داخل PyCharm برو به:

File → Settings → Project → Python Interpreter

باید Interpreter چیزی شبیه این باشد:

D:\MyProjects\Anaconda_PyEnv_pybullet_forge\python.exe

اگر همین است، خوب است.


قدم ۲ — main.py را باز کن

فعلاً تمام کدهای قبلی main.py را پاک کن.

این را بنویس:

import pybullet as p

این اولین خط جلسه ۶ است.

این خط یعنی چه؟

کتابخانه PyBullet را وارد برنامه می‌کنیم و اسم کوتاه p برایش قرار می‌دهیم.

یعنی بعداً به جای:

pybullet.connect()

می‌توانیم بنویسیم:

p.connect()

این فقط یک نام مستعار (alias) است.


قدم ۳ — اتصال به PyBullet

زیر آن بنویس:

import pybullet as p

p.connect(p.GUI)

حالا main.py را اجرا کن.

باید یک پنجره مربوط به PyBullet Physics Server / GUI باز شود.

ممکن است فعلاً پنجره تقریباً خالی باشد.

این کاملاً طبیعی است.

چون هنوز هیچ World یا Objectی نساخته‌ایم.


قدم ۴ — معنی p.connect() را بفهمیم

این خط:

p.connect(p.GUI)

یعنی:

Python را به یک Physics Server در PyBullet متصل کن و رابط گرافیکی را نمایش بده.

ساختار دستور:

p.connect(...)
   │
   └── اتصال به PyBullet

و:

p.GUI

می‌گوید:

اتصال را به صورت گرافیکی ایجاد کن.


قدم ۵ — disconnect

حالا برنامه را کامل‌تر کن:

import pybullet as p

p.connect(p.GUI)

p.disconnect()

ولی یک مشکل داریم.

برنامه بلافاصله این کار را انجام می‌دهد:

Connect
   ↓
Disconnect
   ↓
Program ends

بنابراین ممکن است پنجره را ببینی و بلافاصله بسته شود.

برای همین فعلاً یک مکث اضافه می‌کنیم.

import pybullet as p
import time

p.connect(p.GUI)

time.sleep(5)

p.disconnect()

حالا اجرا کن.

پنجره PyBullet باید حدود ۵ ثانیه باز بماند و سپس بسته شود.


قدم ۶ — حالا GUI و DIRECT

این یکی از مفاهیم مهم PyBullet است.

دو روش مهم اتصال داریم:

حالت GUI

p.connect(p.GUI)

یعنی:

PyBullet با پنجره گرافیکی اجرا شود.

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


حالت DIRECT

p.connect(p.DIRECT)

یعنی:

PyBullet بدون نمایش پنجره گرافیکی اجرا شود.

Simulation در پس‌زمینه اجرا می‌شود.

مثلاً:

import pybullet as p

client = p.connect(p.DIRECT)

print("Connected!")

p.disconnect(client)

خروجی:

Connected!

ولی هیچ پنجره‌ای باز نمی‌شود.


چرا client نوشتم؟

فعلاً فقط مفهومش را بدان؛ بعداً بیشتر با آن کار می‌کنیم.

وقتی می‌نویسی:

client = p.connect(p.GUI)

PyBullet یک شناسه اتصال (connection ID) برمی‌گرداند.

مثلاً:

0

بعد می‌توانی بگویی:

p.disconnect(client)

یعنی همان اتصال را قطع کن.

برای پروژه‌های ساده می‌توانی حتی بنویسی:

p.connect(p.GUI)
p.disconnect()

اما از اینجا به بعد بهتر است عادت کنیم Connection ID را ذخیره کنیم.


قدم ۷ — تست نهایی جلسه ۶

حالا main.py را به این تبدیل کن:

import pybullet as p
import time

print("Connecting to PyBullet...")

client = p.connect(p.GUI)

print("Connected!")
print("Connection ID:", client)

time.sleep(5)

p.disconnect(client)

print("Disconnected!")

اجرا کن.

باید چیزی شبیه این ببینی:

Connecting to PyBullet...
Connected!
Connection ID: 0

پنجره PyBullet باز می‌شود.

بعد از ۵ ثانیه:

Disconnected!

و پنجره بسته می‌شود.


چیزی که امروز باید واقعاً یاد گرفته باشی

فعلاً فقط این زنجیره را در ذهنت داشته باش:

import pybullet as p
        ↓
کتابخانه PyBullet را وارد کن

client = p.connect(p.GUI)
        ↓
به PyBullet وصل شو و GUI را باز کن

        ↓

Simulation

        ↓

p.disconnect(client)
        ↓
اتصال را ببند

و:

p.GUI
   ↓
پنجره گرافیکی

p.DIRECT
   ↓
بدون پنجره

یک نکته مهم برای پروژه AGV

فعلاً هیچ چیز دیگری به main.py اضافه نکن.

نه:

AGV
Lidar
Ground
Gravity
URDF

چون هرکدام جلسه خودش را دارد.

وقتی این تست را انجام دادی، خروجی main.py را بفرست. اگر درست بود، می‌رویم سراغ جلسه ۷ — ساخت اولین World در PyBullet: زمین + Gravity + Object.

Leave a Comment

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

Scroll to Top