Marcus/Config/instruction.json

559 lines
26 KiB
JSON

{
"_description": "Bilingual voice command instructions — single source of truth for the voice dispatch tables. Loaded by Voice/marcus_voice.py at module level. Adding a new motion command, a new accent variant, a new Arabic phrasing, or fixing a misheard wake-word transcription is a JSON-only edit; no Python change required. Arabic phrase tables cover MSA (Fusha) plus Gulf/Khaleeji, Egyptian (Masri), Levantine (Shami), Iraqi, and Maghrebi dialects.",
"_format": "wake_words = whole-word substrings the dispatch gate looks for in the user's transcript. Any match (English or Arabic) opens motion for the current turn. actions = per-motion phrase tables. Each action has a `canonical` string (what marcus_brain receives), `user_phrases` (what the user might SAY when asking for the motion — used for fuzzy-match + Arabic-to-English translation after wake-word strip), and `bot_phrases` (what Gemini might SPEAK when acknowledging — used by the bot-side dispatcher to fire motion off Gemini's own confirmation). All matching is substring-based; English entries are matched case-insensitively, Arabic entries match as-is. Keep the canonical string consistent with Brain/command_parser.py vocabulary.",
"wake_words": {
"_comment": "All variants of the robot's name 'Sanad' — the gate that authorises motion. Add new mishearings here when you see them in logs/transcript.log under HEARD lines that should have triggered motion but didn't.",
"english": [
"sanad", "sannad", "sennad", "sunnad", "sinnad", "sonnad",
"sanat", "sunnat", "sonnat", "sinnat", "sennat",
"sanid", "sanud", "saned", "sanod", "sanaad",
"senad", "sinad", "sonad", "sunad",
"sanah", "sanath", "sanadh", "sonadh",
"samad", "somad", "sumad",
"thanad", "zanad",
"sa nad", "san ad", "san odd", "san add"
],
"arabic": [
"سند", "سنّاد", "ساند", "سنود", "سنَد", "سنّد", "سَند", "سنّود", "ساندي", "سنادي",
"يا سند", "يا سنّاد", "يا ساند", "يا سَند", "يا سنود", "ياسند", "ياسنود",
"السند", "السنّاد"
]
},
"actions": {
"turn_right": {
"canonical": "turn right",
"user_phrases": {
"english": ["turn right", "rotate right", "spin right", "go right", "face right", "right"],
"arabic": [
"استدر يميناً", "استدر يمينا", "ادر يميناً", "ادر يمينا", "لف يمين", "لف يميناً", "يمين",
"دور يمين", "دور لليمين", "دور على اليمين", "دور ع اليمين",
"خش يمين", "خش ع اليمين", "حوّد يمين", "حود يمين", "حوّد لليمين",
"دير يمين", "دير لليمين", "دير على ليمن", "دير ع اليمين",
"لف لليمين", "لف على اليمين", "لف عاليمين", "لف ع اليمين",
"روح يمين", "اتجه يمين", "اتجه لليمين", "تجه يمين"
]
},
"bot_phrases": {
"english": ["turning right"],
"arabic": [
"أستدير يميناً", "أستدير يمينا", "استدير يميناً", "استدير يمينا", "ألف يميناً", "ألف يمينا",
"بلف يمين", "بدور يمين", "أدور يمين", "أحوّد يمين", "أخش يمين"
]
}
},
"turn_left": {
"canonical": "turn left",
"user_phrases": {
"english": ["turn left", "rotate left", "spin left", "go left", "face left", "left"],
"arabic": [
"استدر يساراً", "استدر يسارا", "ادر يساراً", "ادر يسارا", "لف يسار", "لف يساراً", "يسار", "شمال",
"دور يسار", "دور شمال", "دور لليسار", "دور على اليسار", "دور ع الشمال",
"خش يسار", "خش شمال", "خش ع الشمال", "حوّد شمال", "حود شمال", "حوّد يسار", "حوّد لليسار",
"دير يسار", "دير شمال", "دير لليسار", "دير على ليسار", "دير ع الشمال",
"لف لليسار", "لف على اليسار", "لف عاشمال", "لف ع الشمال",
"روح يسار", "روح شمال", "اتجه يسار", "اتجه شمال", "اتجه لليسار", "تجه شمال"
]
},
"bot_phrases": {
"english": ["turning left"],
"arabic": [
"أستدير يساراً", "أستدير يسارا", "استدير يساراً", "استدير يسارا", "ألف يساراً", "ألف يسارا",
"بلف شمال", "بدور شمال", "أدور شمال", "أحوّد شمال", "أخش شمال"
]
}
},
"turn_around": {
"canonical": "turn around",
"user_phrases": {
"english": ["turn around", "turn back", "spin around", "about face", "face the other way"],
"arabic": [
"استدر للخلف", "استدر إلى الوراء", "اتجه للخلف", "ادر للخلف", "ارجع وجهك",
"لف ورا", "لف للورا", "لف للخلف", "دور ورا", "دور للورا", "دور للخلف",
"اتلف", "اتلف ورا", "دير وراك", "دير للورا", "استدر ورا",
"اقلب وجهك", "اقلب", "اعكس اتجاهك", "غيّر اتجاهك"
]
},
"bot_phrases": {
"english": ["turning around"],
"arabic": [
"أستدير للخلف", "أستدير إلى الوراء", "استدير للخلف",
"بلف ورا", "بدور للورا", "أدور للخلف"
]
}
},
"move_forward": {
"canonical": "move forward",
"user_phrases": {
"english": ["move forward", "go forward", "walk forward", "step forward", "forward", "keep going", "walk ahead", "move ahead"],
"arabic": [
"تحرك للأمام", "تحرك إلى الأمام", "اذهب للأمام", "امش للأمام", "تقدم", "للأمام", "أمام",
"روح قدام", "روح لقدام", "روح كدام",
"امشي قدام", "امشي لقدام", "امش قدام",
"اتقدم", "تقدم لقدام", "يلا قدام", "يالله قدام",
"فوت", "فوت لقدام", "فوت قدام",
"سير لقدام", "سير قدام", "اسير قدام",
"خش قدام", "تعال قدام", "للقدام", "قدام"
]
},
"bot_phrases": {
"english": ["moving forward", "walking forward", "stepping forward", "going forward", "going ahead"],
"arabic": [
"أتحرك للأمام", "أتحرك إلى الأمام", "أتقدم", "أمشي للأمام", "أذهب للأمام",
"بمشي قدام", "براح قدام", "أروح قدام", "بتقدم", "بفوت لقدام"
]
}
},
"move_backward": {
"canonical": "move backward",
"user_phrases": {
"english": ["move back", "move backward", "go back", "go backward", "walk back", "walk backward", "step back", "backward", "back", "reverse"],
"arabic": [
"تحرك للخلف", "تحرك إلى الخلف", "اذهب للخلف", "امش للخلف", "ارجع", "ارجع للخلف", "للخلف", "خلف",
"روح ورا", "روح للورا", "ارجع ورا", "ارجع للورا",
"امشي ورا", "امشي للورا", "امش ورا",
"تأخر", "تراجع", "ورا", "للورا",
"رجع للخلف", "ارجع لورا", "رجع لورا",
"سير للورا", "سير ورا"
]
},
"bot_phrases": {
"english": ["moving backward", "moving back", "walking backward", "walking back", "stepping back", "going back"],
"arabic": [
"أتحرك للخلف", "أتحرك إلى الخلف", "أرجع", "أمشي للخلف", "أعود للخلف",
"بمشي ورا", "براح ورا", "أرجع ورا", "بتراجع"
]
}
},
"move_right": {
"canonical": "move right",
"user_phrases": {
"english": ["step right", "move right", "slide right", "strafe right", "sidestep right"],
"arabic": [
"تحرك يميناً", "تحرك يمينا", "خطوة يمين", "اتجه يميناً",
"زحلق يمين", "زحلق لليمين", "اتزحلق يمين",
"خطوة لليمين", "خطوة ع اليمين", "خطوة على اليمين",
"حرك يمين", "حرّك يمين", "اخطو يمين", "اخطو لليمين",
"زح يمين", "زح لليمين"
]
},
"bot_phrases": {
"english": ["moving right", "stepping right", "sliding right"],
"arabic": [
"أتحرك يميناً", "أتحرك يمينا", "أخطو يميناً",
"بزحلق يمين", "أزحلق يمين", "بخطو يمين"
]
}
},
"move_left": {
"canonical": "move left",
"user_phrases": {
"english": ["step left", "move left", "slide left", "strafe left", "sidestep left"],
"arabic": [
"تحرك يساراً", "تحرك يسارا", "خطوة يسار", "اتجه يساراً",
"زحلق يسار", "زحلق شمال", "زحلق لليسار", "اتزحلق شمال",
"خطوة شمال", "خطوة لليسار", "خطوة ع الشمال", "خطوة على اليسار",
"حرك يسار", "حرك شمال", "حرّك شمال", "اخطو يسار", "اخطو شمال", "اخطو لليسار",
"زح يسار", "زح شمال"
]
},
"bot_phrases": {
"english": ["moving left", "stepping left", "sliding left"],
"arabic": [
"أتحرك يساراً", "أتحرك يسارا", "أخطو يساراً",
"بزحلق شمال", "أزحلق شمال", "بخطو شمال"
]
}
},
"stop": {
"canonical": "stop",
"user_phrases": {
"english": ["stop", "halt", "wait", "pause", "freeze", "hold", "stop moving", "stand still", "don't move"],
"arabic": [
"توقف", "قف مكانك", "اوقف", "انتظر", "اثبت", "لا تتحرك",
"وقّف", "وقف", "وگف", "بطّل", "بطل حركة", "بطل",
"خلاص", "كفاية", "يكفي",
"استنى", "استنى شوية", "اصبر", "صبر", "اصبر شوية",
"تو", "ثبات", "اثبت مكانك", "ما تتحرك", "ما تمشي",
"هدّي", "هدّى", "روّق"
]
},
"bot_phrases": {
"english": ["stopping", "halting", "holding"],
"arabic": [
"أتوقف", "توقفت", "أنتظر",
"بوقّف", "وقّفت", "بستنى", "أصبر", "بطّلت"
]
}
},
"sit_down": {
"canonical": "sit down",
"user_phrases": {
"english": ["sit down", "sit", "take a seat", "have a seat"],
"arabic": [
"اجلس", "ارتح", "اقعد",
"اقعد على الأرض", "اقعد ع الأرض", "اجلس على الأرض",
"اگعد", "گلس", "تفضل اقعد", "ارتاح",
"خد راحتك واقعد", "اقعد يا سند"
]
},
"bot_phrases": {
"english": ["sitting down", "sitting"],
"arabic": [
"أجلس", "أقعد", "جلست",
"بقعد", "قعدت", "بجلس", "أرتاح"
]
}
},
"stand_up": {
"canonical": "stand up",
"user_phrases": {
"english": ["stand up", "stand", "get up", "rise"],
"arabic": [
"قف", "انهض", "ارفع نفسك",
"قوم", "گوم", "نوض", "نض",
"قوم على رجلك", "قوم على رجليك", "انهض من مكانك",
"اوقف على رجلك"
]
},
"bot_phrases": {
"english": ["standing up", "getting up", "rising"],
"arabic": [
"أقف", "أنهض", "وقفت",
"بقوم", "قمت", "نضت", "بنهض"
]
}
},
"wave_hello": {
"canonical": "wave hello",
"user_phrases": {
"english": ["wave hello", "wave", "say hi", "greet", "wave to me", "wave at me"],
"arabic": [
"لوّح", "لوح", "لوّح بيدك", "حيّ", "سلّم",
"لوّح لي", "لوّحلي", "لوّح بيدك لي",
"سلّم بيدك", "سلّم علي", "حيّيني", "حيي",
"هز يدك", "هز إيدك", "هزّ ايدك",
"قول هاي", "قول مرحبا", "قول السلام",
"حييني", "سلم علي"
]
},
"bot_phrases": {
"english": ["waving hello", "waving", "saying hi", "greeting"],
"arabic": [
"ألوّح", "ألوح", "ألوّح بيدي", "أحيّ", "أسلّم",
"بلوّح", "بسلّم", "بهز إيدي", "أهز يدي"
]
}
},
"raise_arm": {
"canonical": "raise arm",
"user_phrases": {
"english": ["raise arm", "raise your arm", "lift your arm", "arm up", "hand up"],
"arabic": [
"ارفع يدك", "ارفع ذراعك", "اليد للأعلى",
"ارفع إيدك", "ارفع ايدك", "ارفع يديك",
"طلّع يدك", "طلع يدك", "طلّع إيدك", "طلع إيدك",
"علّي يدك", "علّي إيدك", "علي يدك",
"يدك فوق", "إيدك فوق", "اليد فوق", "حط يدك فوق",
"ارفع اليد", "ارفع ايديك"
]
},
"bot_phrases": {
"english": ["raising arm", "raising my arm", "lifting my arm", "arm up"],
"arabic": [
"أرفع يدي", "أرفع ذراعي",
"برفع إيدي", "بطلّع إيدي", "بعلّي إيدي", "رفعت يدي"
]
}
},
"lower_arm": {
"canonical": "lower arm",
"user_phrases": {
"english": ["lower arm", "lower your arm", "drop your arm", "arm down", "hand down", "rest your arm"],
"arabic": [
"اخفض يدك", "اخفض ذراعك", "اليد للأسفل", "نزل يدك",
"نزّل يدك", "نزّل إيدك", "نزل إيدك", "نزّل ايدك",
"حط يدك", "حط إيدك", "حط ايدك", "خلي يدك تحت",
"طيح يدك", "طيّح يدك", "طيح إيدك",
"يدك تحت", "إيدك تحت", "اليد تحت",
"ارح يدك", "ريّح يدك", "ريّح إيدك"
]
},
"bot_phrases": {
"english": ["lowering arm", "lowering my arm", "dropping my arm", "arm down"],
"arabic": [
"أخفض يدي", "أخفض ذراعي", "أنزل يدي",
"بنزّل إيدي", "نزّلت إيدي", "بريّح إيدي"
]
}
},
"point": {
"canonical": "point",
"user_phrases": {
"english": ["point", "point at it", "point to it", "point there"],
"arabic": [
"اشر", "أشِر", "اشر إلى", "اشر هناك",
"أشّر", "اشّر", "أشر بأصبعك", "أشر بصبعك", "اشر بصبعك",
"شاور", "شاورلي", "أشاور", "شاور هناك",
"ورّيني", "وريني", "ورجيني",
"بصبعك", "حدد", "حدد بصبعك"
]
},
"bot_phrases": {
"english": ["pointing"],
"arabic": [
"أشير",
"بشاور", "بأشر", "بشير", "أشّرت"
]
}
},
"come_here": {
"canonical": "come here",
"user_phrases": {
"english": ["come here", "come to me", "come closer", "approach", "get closer", "come over here", "come"],
"arabic": [
"تعال", "تعال هنا", "تعال إليّ", "اقترب", "تقرب",
"تعالى", "تعالى هنا", "تعالى لي", "تعالى عندي",
"تعا", "تعا لهون", "تعا عندي",
"أجي", "أرواح", "ارواحلي",
"قرّب", "قرب", "قرّب لي", "قرّب مني", "قرب مني",
"گرّب", "گرب لي",
"يلا تعال", "يا الله تعال", "تعال جنبي", "خش جنبي",
"تعال يا سند", "تعال بسرعة", "هلم"
]
},
"bot_phrases": {
"english": ["coming over", "coming to you", "approaching"],
"arabic": [
"آتي إليك", "أقترب", "أتقرّب",
"بجي", "جاي", "جاي لك", "بقرّب", "أقرّب منك"
]
}
},
"follow_me": {
"canonical": "follow me",
"user_phrases": {
"english": ["follow me", "come with me", "walk with me"],
"arabic": [
"اتبعني", "تعال معي", "امش معي",
"تعال ورايا", "تعال ورائي", "تعا ورايي",
"تعال ويايا", "تعال وياي",
"خش ورايا", "خليك ورايا",
"يلا معي", "يلا معاي", "يا الله معي",
"روح ويايا", "امشي معاي", "امشي معي",
"خليك معي", "ضل معي", "ضل ورايا",
"تعال خلفي", "خش خلفي", "اتبعني يا سند"
]
},
"bot_phrases": {
"english": ["following you", "following", "coming with you"],
"arabic": [
"أتبعك", "آتي معك", "أمشي معك",
"بتبعك", "جاي ورايك", "بمشي معاك", "ماشي معاك"
]
}
},
"stay_here": {
"canonical": "stay here",
"user_phrases": {
"english": ["stay here", "stay", "wait here", "hold position", "don't follow me"],
"arabic": [
"ابق هنا", "اثبت هنا", "انتظر هنا", "لا تتبعني",
"خليك هنا", "خليك هون", "خلك هنا", "خل هنا",
"فضل هنا", "ضل هنا", "ضل هون", "ابقى هنا",
"اصبر هنا", "استنى هنا", "تو هنا",
"ثبات هنا", "اثبت بمكانك", "ابق بمكانك",
"ما تتبعني", "ما تجي ورايا", "ما تمشي معي",
"خليك بمحلك", "ضل بمحلك"
]
},
"bot_phrases": {
"english": ["staying here", "staying", "waiting here"],
"arabic": [
"أبقى هنا", "أنتظر هنا", "أثبت هنا",
"باقي هنا", "بضل هنا", "بستنى هنا", "بقعد هنا"
]
}
},
"go_home": {
"canonical": "go home",
"user_phrases": {
"english": ["go home", "return home", "head home", "go back home"],
"arabic": [
"اذهب للبيت", "اذهب إلى البيت", "ارجع للبيت", "عُد للبيت",
"روح البيت", "روح للبيت", "روح ع البيت", "روح عالبيت", "روح بيت",
"ارجع البيت", "ارجاع البيت", "ارجع عالبيت", "ارجع ع البيت",
"خش البيت", "اطلع البيت",
"ارجع للقاعدة", "روح للقاعدة", "اتجه للبيت", "اتجه للقاعدة",
"عد للبيت", "عود للبيت"
]
},
"bot_phrases": {
"english": ["going home", "heading home", "returning home"],
"arabic": [
"أعود للبيت", "أذهب للبيت", "أتجه للبيت",
"براح البيت", "راجع البيت", "بروح للبيت", "أرجع للبيت"
]
}
},
"patrol": {
"canonical": "patrol",
"user_phrases": {
"english": ["patrol", "start patrol", "begin patrol", "patrol the area", "walk the route"],
"arabic": [
"طوف", "ابدأ الدورية", "ابدأ التطواف",
"دور بالمكان", "دور حواليك", "دور حوالينا", "لف بالمكان", "لف في المكان",
"تجول", "ابدأ التجوال", "تجول بالمكان",
"حراسة", "ابدأ الحراسة", "احرس المكان",
"طوف بالمكان", "تطوّف", "روح طوف"
]
},
"bot_phrases": {
"english": ["patrolling", "starting patrol", "beginning patrol"],
"arabic": [
"أطوف", "أبدأ الدورية", "أبدأ التطواف",
"بطوف", "بدور بالمكان", "ببدأ الدورية", "أتجول"
]
}
},
"look_around": {
"canonical": "look around",
"user_phrases": {
"english": ["look around", "scan the room", "scan around", "survey the area", "have a look around"],
"arabic": [
"انظر حولك", "تفحص المكان", "افحص المكان", "تطلع حولك",
"شوف حولك", "شوف حواليك", "شوف الغرفة", "شوف اللي حواليك",
"بص حواليك", "بص حولك", "بص في الغرفة",
"طلّ حواليك", "طلّ حولك", "تطلّع حواليك", "تطلّع حولك",
"افحص الغرفة", "افحص الموقع", "افحص اللي حولك",
"اسكان المكان", "امسح المكان", "امسح بنظرك"
]
},
"bot_phrases": {
"english": ["looking around", "scanning around", "surveying the area"],
"arabic": [
"أنظر حولي", "أتفحص المكان", "أتطلع حولي",
"بشوف حواليّ", "بطلّ حواليّ", "بفحص المكان", "بمسح المكان"
]
}
},
"what_do_you_see": {
"canonical": "what do you see",
"user_phrases": {
"english": ["what do you see", "what can you see", "describe this", "describe what you see", "tell me what you see"],
"arabic": [
"ماذا ترى", "ماذا تشاهد", "صف ما تراه", "أخبرني ماذا ترى",
"شو شايف", "شو بتشوف", "شو عم تشوف", "شو تشوف",
"شنو تشوف", "شنو شايف", "شنو هذا",
"إيش تشوف", "ايش تشوف", "ايش شايف", "إيش شايف",
"وش تشوف", "وش شايف", "وش هذا",
"شايف إيه", "بتشوف إيه", "إيه اللي قدامك", "إيه اللي شايفه", "إيه ده",
"اشنو كاتشوف", "اشنو كاتشوف قدامك",
"صف لي اللي قدامك", "قول لي شو شايف", "وصف لي اللي قدامك", "وصفلي اللي قدامك",
"احكي لي اللي شايفه", "احكيلي شو شايف", "قولي شو شايف"
]
},
"bot_phrases": {
"english": [],
"arabic": []
}
}
},
"_parametric_description": "Motion confirmations from Gemini that carry a NUMBER (turn 90 degrees, walk 5 steps, walk 2 meters). Each entry is regex-matched against Gemini's spoken reply; the captured groups are substituted into command_template via $1, $2 placeholders, and the resulting command_template string is dispatched to the brain — Brain/command_parser.py already parses 'turn left 90 degrees' / 'walk forward 5 steps' / 'walk 2 meters' natively. Order matters: more-specific patterns (with direction) MUST come before less-specific (no direction) so they claim spans first.",
"parametric_actions": [
{
"_": "turn left/right N degrees — 'Turning right 90 degrees.'",
"regex": "(?:turn(?:ing)?|spin(?:ning)?|rotat(?:e|ing))\\s+(left|right)\\s+(\\d+)\\s*deg(?:ree(?:s)?)?",
"command_template": "turn $1 $2 degrees"
},
{
"_": "turn N degrees — 'Turning 360 degrees.'",
"regex": "(?:turn(?:ing)?|spin(?:ning)?|rotat(?:e|ing))\\s+(\\d+)\\s*deg(?:ree(?:s)?)?",
"command_template": "turn $1 degrees"
},
{
"_": "walk forward/back N steps — 'Walking forward 5 steps.'",
"regex": "(?:walk(?:ing)?|step(?:ping)?|mov(?:e|ing))\\s+(forward|back(?:ward)?)\\s+(\\d+)\\s+steps?",
"command_template": "walk $1 $2 steps"
},
{
"_": "walk N steps forward/back — 'Walking 5 steps forward.'",
"regex": "(?:walk(?:ing)?|step(?:ping)?|tak(?:e|ing))\\s+(\\d+)\\s+steps?\\s+(forward|back(?:ward)?)",
"command_template": "walk $2 $1 steps"
},
{
"_": "walk N steps (default forward) — 'Taking 5 steps.'",
"regex": "(?:walk(?:ing)?|step(?:ping)?|tak(?:e|ing))\\s+(\\d+)\\s+steps?",
"command_template": "walk $1 steps"
},
{
"_": "walk forward/back N meters — 'Walking forward 2 meters.'",
"regex": "(?:walk(?:ing)?|mov(?:e|ing))\\s+(forward|back(?:ward)?)\\s+(\\d+(?:\\.\\d+)?)\\s*m(?:eter(?:s)?)?\\b",
"command_template": "walk $1 $2 meters"
},
{
"_": "walk N meters forward/back — 'Walking 2 meters forward.'",
"regex": "(?:walk(?:ing)?|mov(?:e|ing))\\s+(\\d+(?:\\.\\d+)?)\\s*m(?:eter(?:s)?)?\\s+(forward|back(?:ward)?)",
"command_template": "walk $2 $1 meters"
},
{
"_": "walk N meters (default forward) — 'Walking 2 meters.'",
"regex": "(?:walk(?:ing)?|mov(?:e|ing))\\s+(\\d+(?:\\.\\d+)?)\\s*m(?:eter(?:s)?)?\\b",
"command_template": "walk $1 meters"
},
{
"_": "Arabic: 'أستدير يميناً 90 درجة' / 'أستدير يمينا 90 درجة'",
"regex": "أستدير\\s+يمين[اًا]?ً?\\s+(\\d+)\\s*درجة",
"command_template": "turn right $1 degrees"
},
{
"_": "Arabic: 'أستدير يساراً 90 درجة'",
"regex": "أستدير\\s+يسار[اًا]?ً?\\s+(\\d+)\\s*درجة",
"command_template": "turn left $1 degrees"
},
{
"_": "Arabic: 'أستدير 360 درجة' (no direction)",
"regex": "أستدير\\s+(\\d+)\\s*درجة",
"command_template": "turn $1 degrees"
},
{
"_": "Arabic: 'أمشي/أتحرك 5 خطوات'",
"regex": "(?:أمشي|أتحرك)\\s+(\\d+)\\s*خطو(?:ات|ة|تين)?",
"command_template": "walk $1 steps"
},
{
"_": "Arabic: 'أتحرك للأمام مترين' / 'أمشي للأمام 2 متر'",
"regex": "(?:أمشي|أتحرك)\\s+للأمام\\s+(\\d+(?:\\.\\d+)?)\\s*متر",
"command_template": "walk forward $1 meters"
},
{
"_": "Arabic: 'أتحرك للخلف مترين'",
"regex": "(?:أمشي|أتحرك)\\s+للخلف\\s+(\\d+(?:\\.\\d+)?)\\s*متر",
"command_template": "walk backward $1 meters"
}
]
}