ملخص سريع
- قم بتثبيت MuJoCo 3.2.0 عبر الأمر
pip install mujocoوتحقق من التثبيت باستخدامpython -c "import mujoco; print(mujoco.__version__)"→ يجب أن يظهر 3.2.0. - نموذج الروبوتات باستخدام MJCF (XML) مع علامات
<world>,<body>,<joint>, و<actuator>. مثال: ملف XML للإنسانويد الأساسي. - ضبط الفيزياء باستخدام علامات
<contact>(احتكاك، صلابة) و<solver>(عدد التكرارات، التسامح). قيمة الاحتكاك الافتراضية:mu=0.5,mu2=0.0. - تشغيل محاكاة متوازية على GPU باستخدام MJX (يتطلب CUDA). مثال:
python -m mujoco.mjx_simulate --gpu. - تحميل بيئات Gymnasium عبر
gymnasium.make("Humanoid-v4")وتدريبها باستخدام Stable Baselines3. - نقل النتائج من المحاكاة إلى الواقع: استخدم تحديد النظام (مثل
scipy.optimizeلتعديل المعلمات) وسجل البيانات باستخدام هياكلmjData.
1. التثبيت والأصول الأساسية لـ MJCF
الروابط الخاصة بـ MuJoCo باللغة Python (mujoco) هي أسرع طريقة للبدء. MJCF (لغة نمذجة XML الخاصة بـ MuJoCo) هي اللغة الأساسية للنمذجة - فكر فيها كملف CAD مخصص للفيزياء.
تثبيت MuJoCo 3.2.0
# نظام لينكس (أوبونتو/ديبيان)
sudo apt-get install -y libgl1-mesa-dev libxinerama-dev libxcursor-dev
pip install mujoco==3.2.0 # تثبيت الإصدار الثابت
# التحقق من التثبيت
python -c "import mujoco; print(f'تم تثبيت MuJoCo {mujoco.__version__} بنجاح')"
الخرج المتوقع:
تم تثبيت MuJoCo 3.2.0 بنجاح
MJCF: العمود الفقري XML
نماذج MuJoCo تُعرّف في ملفات XML (.xml). هذا مثال بسيط لمثنوي ثانوي:
<mujoco model="pendulum">
<worldbody>
<light name="light" pos="0 0 3"/>
<camera name="camera" pos="0 0 1.5" xyaxes="1 0 0 0 1 0"/>
<body name="pendulum" pos="0 0 0">
<joint name="hinge" type="hinge" axis="0 0 1"/>
<geom name="bob" type="sphere" size="0.1" rgba="0.8 0.6 0.4 1"/>
</body>
<actuator name="motor">
<motor joint="hinge"/>
</actuator>
</worldbody>
</mujoco>
العلامات الرئيسية:
<worldbody>: حاوية رئيسية لجميع الكائنات الفيزيائية.<body>: أجسام صلبة (مثل روابط الروبوت).<joint>: يحدد درجات الحرية (hinge,slide,ball).<geom>: هندسة التصادم (box,sphere,mesh).<actuator>: محركات، قوى، أو عزم.
نصيحة هامة: نسيان إغلاق العلامات (مثل <body> بدون </body>) سيؤدي إلى توقف المحاكاة. استخدم معرّف مثل XMLLint.
2. نمذجة الروبوت: الأجسام، المفاصل، والمحركات
دعونا نبني ذراع روبوت بسبعة درجات حرية باستخدام MJCF. ركز على:
- الأجسام: الروابط التي لها كتلة/عزم.
- المفاصل: تربط الأجسام مع قيود.
- المحركات: تطبيق القوى/العزوم.
مثال: ذراع بسبعة درجات حرية في MJCF
<mujoco model="arm7dof">
<asset>
<mesh file="arm.mesh" scale="0.1"/>
</asset>
<worldbody>
<!-- القاعدة -->
<body name="base" pos="0 0 0.5">
<freejoint/>
<geom type="box" size="0.2 0.2 0.1" rgba="0.5 0.5 0.5 1"/>
</body>
<!-- روابط الذراع (المفاصل بين الروابط) -->
<body name="link1" pos="0 0 0.3">
<joint name="joint1" type="hinge" axis="0 1 0" damping="0.1"/>
<geom type="box" size="0.1 0.1 0.3" rgba="0.8 0.6 0.4 1"/>
</body>
<!-- كرر الروابط 2-7... -->
<!-- المحركات (محرك لكل مفصل) -->
<actuator name="motor1">
<motor joint="joint1" gear="100"/>
</actuator>
</worldbody>
</mujoco>
الإعدادات الحرجة:
damping: يخفض اهتزازات المفاصل (الافتراضي:0.0).gear: يحاكي نسب التروس (مثلgear="100"= نسبة 100:1).size: أبعاد الهندسة (يجب أن تتطابق مع CAD إذا استخدمت<mesh>).
نصيحة هامة: MuJoCo يستخدم وحدات النظام الدولي (المتر، الكيلوغرام، الثانية). مربع ب size="0.1" يبلغ عرض 10 سم.
3. الاتصالات، الاحتكاك، وإعدادات المحلّل
دقة فيزياء MuJoCo تعتمد على نمذجة الاتصالات وتعديل المحلّل.
خصائص الاتصال
عدل علامات <contact> للتحكم في الاحتكاك، مرونة الارتداد، وصلابة:
<contact>
<geom1>body1</geom1>
<geom2>body2</geom2>
<friction>0.3 0.01 0.001</friction> <!-- mu, mu2, mu3 -->
<restitution>0.5</restitution> <!-- مرونة الارتداد (0-1) -->
<solref>0.01 1.0</solref> <!-- مرجع المحلّل (الاختراق، الصلابة) -->
</contact>
القيم الافتراضية:
- احتكاك:
mu=0.5,mu2=0.0(احتكاك ثابت/حركي). - مرونة الارتداد:
0.0(لا ارتداد).
ضبط المحلّل
عدل المحلّل لتحقيق الاستقرار:
<solver>
<iterations>100</iterations> <!-- الافتراضي: 100 -->
<tolerance>1e-8</tolerance> <!-- الافتراضي: 1e-8 -->
<constraint>LRP</constraint> <!-- "LRP" أو "NCP" -->
</solver>
متى يجب التعديل:
- تكرارات عالية (200+): للاتصالات المعقدة (مثل اليدين الدقة).
- تسامح منخفض (1e-6): أسرع ولكن أقل دقة.
نصيحة هامة: إذا انفجرت محاكاتك، زد من solref أو قلل من iterations. إذا كانت صلبة، قلل من restitution.
4. MJX لمحاكاة متوازية على GPU
MJX (MuJoCo eXtended) يتيح محاكاة متوازية على GPU، وهو أمر حاسم لتدريب التعلم الآلي المتقارن.
تثبيت MJX
pip install mujoco==3.2.0 mjx # MJX متضمن مع mujoco>=3.2.0
تحقق من دعم CUDA:
python -c "import mjx; print(mjx.cuda.is_available())" # يجب أن يظهر True
تشغيل مثنوي محاكاة على GPU
import mjx
import numpy as np
# تحميل النموذج
model = mjx.make("pendulum.xml")
sim = mjx.Sim(model)
# تشغيل لمدة 100 خطوة
for _ in range(100):
sim.step()
الخرج المتوقع: يجب أن يتحرك المثنوي بسلاسة (مرئي عبر sim.render()).
نصيحة هامة: MJX يتطلب CUDA 11.8+. تحقق من التوافق عبر:
nvcc --version
5. تشغيل التعلم الآلي المتقارن مع بيئات Gymnasium
MuJoCo يوفر معيار روبوتات Gymnasium (مثل Humanoid-v4). هذا هو كيفية تدريب وكيل التعلم الآلي المتقارن.
تثبيت Gymnasium مع MuJoCo
pip install gymnasium[mujoco] # يتضمن MuJoCo 3.2.0
تحميل وتدريب وكيل
import gymnasium as gym
from stable_baselines3 import PPO
# إعداد البيئة
env = gym.make("Humanoid-v4", render_mode="human")
obs, _ = env.reset()
# تدريب باستخدام PPO
model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=10000)
# اختبار
obs, _ = env.reset()
for _ in range(1000):
action, _ = model.predict(obs)
obs, _, terminated, truncated, _ = env.step(action)
if terminated or truncated:
obs, _ = env.reset()
البيئات الرئيسية:
Humanoid-v4: مشي الإنسانويد ثلاثي الأبعاد.Ant-v4: مشي رباعي الأقدام.Reacher-v4: الوصول بذراع ثنائية الأبعاد.
نصيحة هامة: بيئات Gymnasium مع MuJoCo افتراضيا تستخدم GPU. إذا واجهت أخطاء CUDA، قم بتعديل:
env = gym.make("Humanoid-v4", render_mode=None, use_gpu=False)
6. تحديات نقل النتائج من المحاكاة إلى الواقع وتحديد النظام
فيزياء MuJoCo ليست كاملة. جسر الفجوة بين المحاكاة والواقع باستخدام:
- تحديد النظام: ضبط معلمات MuJoCo لتطابق الأجهزة الحقيقية.
- تعديل المجال: تدريب على معلمات MuJoCo متنوعة.
مثال لتحديد النظام
استخدم scipy.optimize لتعديل كتلة/العزم في MuJoCo لتطابق البيانات الحقيقية:
import mujoco
import numpy as np
from scipy.optimize import minimize
# تحميل النموذج والبيانات
model = mujoco.MjModel.from_xml_path("robot.xml")
data = mujoco.MjData(model)
# تعريف دالة التكلفة (مثل خطأ بين المحاكاة والعزم الحقيقي)
def cost_function(params):
# تحديث معلمات النموذج (مثل الكتلة)
model.body_mass[0] = params[0]
# محاكاة وحساب الخطأ
error = simulate_and_compare(data)
return error
# تحسين
result = minimize(cost_function, x0=[1.0], method="L-BFGS-B")
print(f"الكتلة المثلى: {result.x[0]} كجم")
تعديل المجال
تعديل معلمات MuJoCo أثناء التدريب:
def randomize_model(model):
# تعديل الاحتكاك
model.contact.mu = np.random.uniform(0.3, 0.7)
model.contact.mu2 = np.random.uniform(0.0, 0.1)
# تعديل الكتلة
model.body_mass = model.body_mass * np.random.uniform(0.9, 1.1)
return model
نصيحة هامة: نقل النتائج من المحاكاة إلى الواقع غالبًا ما يفشل بسبب الديناميكيات غير النموذجية (مثل احتكاك الكابلات). ابدأ بتطابق الكتلة/العزم ثم تعدل تدريجياً.
7. التمرير والتسجيل
مُشغل MuJoCo المدمج خفيف الوزن ولكن فعال.
إطلاق المشغل
import mujoco
import mujoco.viewer
model = mujoco.MjModel.from_xml_path("arm7dof.xml")
data = mujoco.MjData(model)
# إنشاء المشغل
with mujoco.viewer.launch_passive(model, data) as viewer:
while viewer.is_running():
step = not viewer.cam_move
mujoco.mj_step(model, data)
التحكم:
- النقر الأيسر + السحب: دوران الكاميرا.
- النقر الأيمن + السحب: تحريك الكاميرا أفقياً.
- دوران الفأرة: تكبير/تصغير.
تسجيل البيانات للتحليل
حفظ بيانات المحاكاة في ملف .mat:
import scipy.io
# محاكاة وتسجيل
data = mujoco.MjData(model)
for _ in range(1000):
mujoco.mj_step(model, data)
# حفظ مواقع المفاصل
joint_positions = data.qpos.copy()
# حفظ في ملف MATLAB
scipy.io.savemat("simulation_data.mat", {"qpos": joint_positions})
نصيحة هامة: المشغل يوقف تنفيذ Python. استخدم launch_passive لتشغيل التمرير في الخلفية.
ما هو التالي؟
- بناء روبوت مخصص: ابدأ بذراع بسبعة درجات حرية (الفقرة 2) وصدّر ملف MJCF إلى أداة CAD مثل Blender.
- تدريب وكيل التعلم الآلي المتقارن: استخدم Stable Baselines3 (الفقرة 5) لتعليم الروبوت مهارة (مثل الوصول).
- نشر على الأجهزة الحقيقية: استخدم تحديد النظام (الفقرة 6) لتعديل MuJoCo لمطابقة الروبوت الحقيقي.
للمساعدة في بنية التعلم الآلي الفيزيائي - من ضبط المحاكاة إلى نشرها على الحواف - يمكن أن تسريع Hyperion Consulting خط إنتاجك. اتصل بنا
