Kibo-RPC 7-এর নিয়মের গাইড
এই পাতা সম্পর্কেশেখার পথ · কীভাবে পড়বে · সূচিপত্র
৭ম Kibo Robot Programming Challenge-এর জন্য JAXA-র রুলবুক আর প্রোগ্রামিং ম্যানুয়ালের সহজ ভাষায় সারাংশ, সঙ্গে কিছু স্কেচ। শুরু করতে এগুলো কাজে লাগবে; তবে শেষ কথা অফিশিয়াল ডকুমেন্টগুলোর।
অফিশিয়াল ডকুমেন্টJAXA-র রুলবুক আর ম্যানুয়াল (PDF)
এগুলো JAXA-র কাছ থেকেই পড়ো। নিচের সারাংশগুলো রুলবুকের ১.১ সংস্করণ (১৫ অক্টোবর ২০২৬) আর প্রোগ্রামিং ম্যানুয়ালের ১.০ সংস্করণ (৫ অক্টোবর ২০২৬) অনুযায়ী লেখা।
কোনো PDF লিংক কাজ না করলে বুঝবে, JAXA নতুন সংস্করণ প্রকাশ করেছে: ডাউনলোড পাতা থেকে সেটা নামিয়ে নাও, আর নিয়মে কিছু বদলেছে কি না দেখে নাও।
প্রথম ভাগ · রুলবুক
১. এক মিনিটে চ্যালেঞ্জটা
তুমি প্রোগ্রাম লিখবে Int-Ball2 (IB2)-এর জন্য: ছোট্ট একটা উড়ে বেড়ানো ক্যামেরা রোবট, যেটা JAXA চালায় আন্তর্জাতিক মহাকাশ স্টেশনে জাপানের মডিউল Kibo-র ভেতরে। এটা Kibo-র ভেতরে উড়ে বেড়ায়, যাতে নভোচারীদের ক্যামেরা হাতে ধরে রাখতে কম সময় দিতে হয়। Int-Ball2 আর Astrobee-কে 3D-তে দেখো →
- গল্পটা: Kibo-র ভেতরের চাপ কমে যাচ্ছে। যেসব জায়গায় লিক আছে বলে সন্দেহ, IB2 সেই চেকপয়েন্টগুলোতে যায় আর কারণ খুঁজতে প্রতিটার AR মার্কার পড়ে।
- প্রাথমিক রাউন্ড: প্রতিটা দেশ বা অঞ্চলে আলাদা করে হয়। তোমার প্রোগ্রাম চলে JAXA-র ওয়েব সিমুলেটরে। কিছু অঞ্চল নিজেদের বিচারের নিয়মও যোগ করে, তাই তোমার এলাকার Kibo-RPC পাতা দেখে নিও।
- ফাইনাল রাউন্ড: বিজয়ী দলগুলোর প্রোগ্রাম চলে কক্ষপথে, Kibo-র ভেতরে আসল Int-Ball2-এ।
কারা অংশ নিতে পারে
- রেগুলার কোর্স (মূল প্রতিযোগিতা): স্কুল থেকে শুরু করে বিশ্ববিদ্যালয়, এমনকি পোস্টগ্র্যাজুয়েট পর্যন্ত যেকোনো শিক্ষার্থী। দলে থাকতে হয় ৩ থেকে ৮ জন।
- বিগিনার কোর্স (৭ম আসরে নতুন): দলের সবাই জুনিয়র হাই স্কুলের বয়সী বা তার ছোট (মোটামুটি নবম শ্রেণি পর্যন্ত), আর প্রোগ্রামিংয়ে নতুন। এখানে চেকপয়েন্ট কম, আর রোবটের দিক (রোল ইত্যাদি) ধরা হয় না, তাই সহজ। জিতলে পুরস্কার আছে, কিন্তু ISS-এ প্রোগ্রাম চালানোর সুযোগ নেই।
- উচ্চমাধ্যমিক (HSC) বা তার নিচের শিক্ষার্থীদের দলে একজন অভিভাবক বা শিক্ষকের তথ্য দিতে হয়। দেশভেদে নিয়ম একটু আলাদা হতে পারে, তাই নিজের দেশের আয়োজকদের ঘোষণা দেখে নিও।
সূত্র: ৭ম Kibo-RPC গাইডবুক, ৩.১, ৩.২ আর ৩.৪ অংশ।
২. একটা খেলা যেভাবে চলে
- আনডকIB2 নিজে নিজেই ডক স্টেশন ছেড়ে বেরোয়। ৫ মিনিটের টাইমার শুরু হয়।
- চেকপয়েন্টগুলো নাওসেগুলোর অবস্থান আর দিক পড়ে নাও; তোমার প্রোগ্রাম এগুলো নিজে থেকেই পায়।
- ভালো একটা রুটে ওড়োকম সময় লাগে এমন ক্রমে চেকপয়েন্টগুলোতে যাও।
- প্রতিটা AR মার্কার পড়োপ্রতিটা চেকপয়েন্টে দরকারি অবস্থান আর দিক ধরে রাখো।
- গোল আর রিপোর্টগোল চেকপয়েন্টে পৌঁছে মিশন শেষের রিপোর্ট পাঠাও।
- আনডক শেষ হলে টাইমার শুরু হয়, আর থামে মিশন শেষের রিপোর্টে। সময়সীমার মধ্যে রিপোর্ট না হলে তার জন্য কোনো পয়েন্ট পাবে না।
- মিশন শেষ হওয়ার পরে IB2 যা-ই করুক, তা গোনা হয় না।
৩. কী জানানো হয়, আর কী হয় না
| রানের আগেই জানা | প্রতি রানে এলোমেলো | কখনোই জানানো হয় না |
|---|---|---|
| শুরুর জায়গা (ডক স্টেশন) শেষের রিপোর্টের সময়কার অবস্থান আর দিক কয়টা চেকপয়েন্ট থাকবে চেকপয়েন্টগুলো কোথায় কোথায় থাকতে পারে (কঠিনতার লেভেল অনুযায়ী) প্রতিটা AR মার্কারের অবস্থান আর ID গোল পয়েন্ট |
প্রতিটা চেকপয়েন্টের অবস্থান আর দিক, তার AR মার্কার থেকে একটা কোণ আর দূরত্ব দিয়ে ঠিক করা | রান শুরুর আগে চেকপয়েন্টের নকশা (রান শুরু হলে তোমার প্রোগ্রাম সেটা চেয়ে নেয়) মাইক্রোগ্র্যাভিটি মডিউলের বাধাবিঘ্নের ধরন |
- চেকপয়েন্ট থাকে ৬ থেকে ১২টা; লেভেল যত কঠিন, সংখ্যা তত বেশি। ওয়েব সিমুলেশন শুরু করার সময় লেভেল বেছে নেবে: Easy, Normal, Hard বা Very Hard। কোন লেভেলে কয়টা চেকপয়েন্ট, ডকুমেন্টে তা বলা নেই, আর কোন কোন মার্কারে চেকপয়েন্ট পড়বে, সেটা রান থেকে রানে বদলায়।
- প্রতিটা চেকপয়েন্ট একটা গোলক, তার AR মার্কারের সাপেক্ষে বসানো।
- একটা মাইক্রোগ্র্যাভিটি মডিউল (শুধু সিমুলেটরে) রোবটকে এদিক-ওদিক ঠেলে দেয়, তাই IB2 সবসময় ঠিক যেখানে পাঠিয়েছ, সেখানে থাকবে না।
- চেকপয়েন্ট
- রোবটকে যেসব জায়গায় যেতে হয়; বাসের স্টপেজের মতো। প্রতিটা একটা অদৃশ্য বলের মতো গোল জায়গা (গোলক), একটা AR মার্কারের সামনে।
- গোল চেকপয়েন্ট
- সবশেষে যেখানে যেতে হয়।
- লেভেল
- কত ভালোভাবে পার হলো: Lv1 মোটামুটি, Lv3 সবচেয়ে ভালো।
- সিমুলেটর
- কম্পিউটারের ভেতরে আসল রোবট আর স্টেশনের মতো আচরণ করা একটা নকল, ভিডিও গেমের মতো। প্রাথমিক রাউন্ড এতেই হয়।
জায়গাগুলো লেখা হয় তিনটা সংখ্যায় (x, y, z), আর দিক কোয়াটারনিয়নে। এগুলো অচেনা লাগলে আগে স্থানাঙ্ক ও ঘূর্ণন পাতাটা দেখে নাও।
কোন জিনিস কোথায়, রোবট জানে কীভাবে?
যা যা দরকার, তার প্রতিটা আসে আলাদা জায়গা থেকে:
/mission/get_checkpoints থেকে। প্রতি রানে এগুলো এলোমেলো, তাই তোমার প্রোগ্রাম চেয়ে নেয়: প্রতিটার অবস্থান, তার মার্কারের পোজ, কোন দিকে মুখ করে থাকতে হবে, লেভেলের সীমা, আর কোনটা গোল।/sensor_fusion/navigation থেকে। Kibo-র ভেতরে IB2-এর নিজের অবস্থান, দিক আর গতি।রুলবুক শুধু বলে, চেকপয়েন্টের অবস্থান আর দিক “নিজে থেকেই দেওয়া হয়”; API কলগুলো কীভাবে করতে হয়, তা ব্যাখ্যা করে প্রোগ্রামিং ম্যানুয়াল (৬.৩.১ আর ৬.৩.২ অংশ)। ৭ম Kibo-RPC-তে ব্যবহার হয় Int-Ball2, NASA-র Astrobee নয়; Astrobee উড়েছিল আগের আসরগুলোতে।
মার্কারগুলো কোথায়
মার্কারের টেবিল (রুলবুকের টেবিল ২.২.২-২)
| মার্কার | যার গায়ে | অবস্থান x, y, z (মি) | দিক x, y, z, w |
|---|---|---|---|
| 1 | SAIBO | 1.451, −1.001, 0.681 | −0.707, 0, 0, 0.707 |
| 2 | RYUTAI | 2.973, −1.001, 0.718 | −0.707, 0, 0, 0.707 |
| 3 | MSPR_1 | 3.313, −1.001, 0.523 | −0.707, 0, 0, 0.707 |
| 4 | MSPR_2 | 4.181, −1.001, 0.523 | −0.707, 0, 0, 0.707 |
| 5 | RMS_Console | 5.754, −1.001, 0.838 | −0.707, 0, 0, 0.707 |
| 6 | EPS1 | 1.895, −0.282, −0.208 | 0, 0, 0.707, −0.707 |
| 7 | MELFI1 | 1.451, −1.001, 0.372 | −0.707, 0, 0, 0.707 |
| 8 | EPS2_2 | 4.779, 0.112, 1.884 | −0.707, 0.707, 0, 0 |
| 9 | EPS2_1 | 2.066, 1.046, −0.014 | 0, 0.707, −0.707, 0 |
| 10 | ECLSS_TCS2 | 5.851, 0.010, 1.884 | −0.707, 0.707, 0, 0 |
| 11 | Airlock | 7.195, 0.363, 1.230 | 0.5, 0.5, −0.5, −0.5 |
| 12 | Bay0_Closeout_Panel | 0.000, −0.059, −0.102 | −0.5, 0.5, −0.5, 0.5 |
| শুরু | Docking Station | 0.200, 0.000, 0.000 | 0, 0, 0, 1 |
রুলবুক অবস্থানগুলো দেয় ডকিং স্টেশনকে মূলবিন্দু ধরে; প্রোগ্রামিং ম্যানুয়াল এই ফ্রেমকে বলে iss_body। কোয়াটারনিয়ন লেখা হয় x, y, z, w ক্রমে।
৪. চেকপয়েন্ট পার হওয়া
প্রতিটা চেকপয়েন্টে বিচারক একসঙ্গে তিনটা জিনিস দেখে। প্রতিটা পায় একটা লেভেল: Lv1 (কোনোমতে ভেতরে) থেকে Lv3 (খুব কাছে)।
① অবস্থান
② মার্কার মাঝখানে
③ রোল
/mission/get_checkpoints থেকে।- সবচেয়ে কম লেভেলটাই গোনা হয়। তিনটাকেই কোনো না কোনো সীমার ভেতরে থাকতে হবে, আর চেকপয়েন্ট পায় সবচেয়ে খারাপটার লেভেল।
- মার্কার চোখের সামনে রেখে ১ সেকেন্ড ধরে রাখো। ওই এক সেকেন্ডে নড়েচড়ে সীমার বাইরে গেলে পার হওয়াটা বাতিল।
- তোমার প্রোগ্রামকে
/event/checkpoint_passedদিয়ে বিচার চাইতে হবে। শুধু পৌঁছে গেলেই হবে না।
| অবস্থান | মার্কার মাঝখানে | রোল | ফলাফল |
|---|---|---|---|
| Lv3 | Lv2 | Lv3 | পার হয় Lv2-এ, তিনটার মধ্যে যেটা সবচেয়ে কম |
| বাইরে | Lv3 | Lv3 | কোনো পয়েন্ট নেই একটা শর্তও সীমার বাইরে থাকলে চেকপয়েন্ট বাতিল |
এগুলো রুলবুকেরই উদাহরণ (২.৩.২ অংশ)।
আরেকটা উদাহরণ, ধাপে ধাপে: রোবট চেকপয়েন্টের কেন্দ্র থেকে ০.১৫ মি দূরে, মার্কারটা ছবির মাঝখান থেকে ৮° সরে, আর রোল মিলছে না ২৫°।
- অবস্থান: ০.১৫ মি, যেটা ০.২-এর মধ্যে কিন্তু ০.১-এর বেশি, তাই Lv2।
- মাঝখানে রাখা: ৮°, যেটা ১০°-এর মধ্যে, তাই Lv3।
- রোল: ২৫°, যেটা ৩০°-এর মধ্যে কিন্তু ২০°-এর বেশি, তাই Lv1।
- সবচেয়ে কম Lv1, তাই চেকপয়েন্ট পার হলো Lv1-এ। রোলটা ঠিক করলে লেভেল বাড়বে!
দূরত্ব ০.০৫ মি, মাঝখান থেকে ১৫°, রোল ৫°। কোন লেভেল?
দূরত্ব Lv3, মাঝখানে রাখা Lv2 (১৫° হলো ২০°-এর মধ্যে), রোল Lv3। সবচেয়ে কম Lv2, তাই Lv2।
রোবট ঠিক জায়গায় পৌঁছাল, কিন্তু /event/checkpoint_passed পাঠাল না। পার হলো?
না। বিচার চাইতেই হবে; শুধু পৌঁছালে গোনা হয় না।
৫. স্কোর
- আগে চেকপয়েন্টগুলো পার হও আর গোলে পৌঁছাও, তারপর গতি বাড়াও। চেকপয়েন্ট বাদ পড়া তাড়াহুড়োর রান সাবধানী রানের চেয়ে কম স্কোর পায়।
- উঁচু লেভেলে পার হতে শুধু ঠিক জায়গায় থাকলেই হবে না: ক্যামেরা মার্কারের ঠিক মাঝখানে তাক করো আর রোল মেলাও।
- কোন লেভেলে কত পয়েন্ট, রুলবুকে তার তালিকা নেই। স্যান্ডবক্সের হিসাব তার নিজের ধরে নেওয়া সংখ্যা দিয়ে করা।
উদাহরণ (সংখ্যাগুলো বানানো, শুধু বোঝার জন্য): তোমার চেকপয়েন্ট আর গোল মিলিয়ে পয়েন্ট ৫০, আর তাড়াতাড়ি শেষ করায় গুণক ১.৫। তাহলে স্কোর = ৫০ × ১.৫ = ৭৫।
৬. দশটা রান, একটা গড়
- তুমি একটা প্রোগ্রাম জমা দাওপ্রতিবার জমায় সুযোগ একটাই।
- JAXA-র ওয়েব সার্ভার সেটা ১০ বার চালায়প্রতিটা রানে চেকপয়েন্ট আর বাধাবিঘ্ন এলোমেলোভাবে আলাদা।
- তোমার স্কোর হলো গড়১০টা রানের গড় দিয়েই র্যাংকিং ঠিক হয়।
উদাহরণ (বানানো সংখ্যা): দল ক-এর প্রোগ্রাম ৯ বার ৮০ পেল, কিন্তু একবার আটকে গিয়ে ০। গড় = (৯ × ৮০ + ০) ÷ ১০ = ৭২। দল খ-এর প্রোগ্রাম প্রতিবার ৭৫ পেল, গড় ৭৫। একবারের ভুলের জন্য দল ক হেরে গেল! তাই প্রোগ্রাম এমন হতে হবে, যেটা প্রতিবার নির্ভরযোগ্যভাবে চলে।
৫টা রানে স্কোর ৬০, ৭০, ৮০, ৯০, ১০০ হলে গড় কত?
(৬০ + ৭০ + ৮০ + ৯০ + ১০০) ÷ ৫ = ৪০০ ÷ ৫ = ৮০।
৭. তারিখ আর জমা দেওয়া
- ২০ জানুয়ারি ২০২৭, দুপুর ১২:০০ (JST)প্রশ্ন পাঠানোর শেষ সময়। এর পরের প্রশ্নের উত্তর দেরিতে আসতে পারে।
- ২০ জানুয়ারি ২০২৭, রাত ১১:৫৯ (JST)প্রোগ্রাম জমা দেওয়ার শেষ মুহূর্ত।
- ২১ জানুয়ারি – ১৭ ফেব্রুয়ারি ২০২৭প্রাথমিক রাউন্ড।
- পরেISS-এ ফাইনাল রাউন্ড। বিস্তারিত পরে জানানো হবে।
- রাউন্ডের আগে ওয়েব সিমুলেটরে “Preliminary” নামে একটা সিমুলেটর যোগ হয়। তোমার প্রোগ্রাম সেটায় চালাও।
- RESULTS পাতায় এমন একটা Preliminary রান বাছো যার স্ট্যাটাস FINISHED, তারপর SUBMIT চাপো।
- মত বদলালে CANCEL চেপে আরেকটা জমা দাও। শেষ সময় পেরোলে দুটো বোতামই আর কাজ করে না।
যে রানের স্ট্যাটাস FAILED, সেটা জমা দেওয়া যায় না। একটাও FINISHED রান না থাকলে অংশই নিতে পারবে না, তাই আগেভাগে পরীক্ষা করে নাও।
৮. ISS-এ ফাইনাল রাউন্ড
- আগে নিরাপত্তা যাচাই। আসল রোবটের যেন কোনো ক্ষতি না হয়, সেজন্য JAXA তোমার কোড পরীক্ষা করে। খসড়া সোর্স কোড পাঠাতে হয় ইমেইলে, তারপর চূড়ান্ত প্রোগ্রাম আর সোর্স ওয়েবসাইটের মাধ্যমে। প্রতি বছরই কিছু না কিছু সংশোধন লাগে, আর সময় থাকে কম, তাই ওই সময়টা ফাঁকা রেখো।
- রান একবারই। আসল IB2-এ এটা থামানো বা আবার চালানো যায় না। আবার চালানো হয় কেবল তখনই, যদি কক্ষপথে IB2-এ এমন কোনো সমস্যা হয় যেটা তোমার প্রোগ্রামের কারণে নয়, আর হাতে সময়ও থাকে।
- ৫ মিনিট, তারপর প্রোগ্রাম বন্ধ হয়ে যায়। IB2 আটকে গেলে, নিজে কোথায় আছে তা গুলিয়ে ফেললে, বা অনেকক্ষণ থেমে থাকলে রান আগেই শেষ হয়ে যায়।
- স্টার্ট তুমি চাপবে না। JAXA তোমার প্রোগ্রাম IB2-এ বসায়, আর গ্রাউন্ডের অপারেটররা সেটা চালু করেন। রানগুলো আগেই রেকর্ড করা হয়, পরে একটা অনুষ্ঠানে বিশেষজ্ঞদের ধারাভাষ্যসহ দেখানো হয়।
- ধাপে ধাপে রানের ক্রম। প্রাথমিক রাউন্ডের র্যাংক অনুযায়ী দলগুলো ধাপে ধাপে সুযোগ পায় (যেমন ১ম–৪র্থ, ৫ম–৮ম, ৯ম–১৩তম)। সময় ফুরিয়ে গেলে নিচের ধাপের দলগুলো সুযোগ না-ও পেতে পারে।
৯. যে শব্দগুলো জানা দরকার
| শব্দ | মানে |
|---|---|
| IB2 | Int-Ball2, রোবটটা। প্রাথমিক রাউন্ডে একটা সিমুলেটর, ফাইনালে আসল রোবট। |
| Kibo (JEM) | ISS-এ জাপানের পরীক্ষাগার মডিউল (Japanese Experiment Module)। |
| Dock Station | যেখান থেকে IB2 শুরু করে। Release মানে সেটা ছেড়ে বেরোনো; রিলিজ শেষ হলে টাইমার শুরু হয়। |
| Mission Start / Finish | Start: রিলিজ শেষ, টাইমার চলছে। Finish: সময়সীমা ফুরিয়েছে, বা শেষের রিপোর্ট শুরু হয়েছে। Finish-এর পরে কিছুই স্কোরে যোগ হয় না। |
| CheckPoint | একটা AR মার্কারের সাপেক্ষে বসানো একটা গোলক, তিন ধাপের মার্জিনসহ। |
| GoalPoint | চেকপয়েন্টগুলোর পরে IB2 যেখানে যায় আর শেষের রিপোর্ট পাঠায়। |
| AR marker | ছাপা একটা চৌকো কোড। Kibo-তে এমন ১২টা আছে; চেকপয়েন্টগুলো এদের ঘিরেই বানানো। |
| t, time_max | রিপোর্টের সময় হাতে থাকা সময়, আর সময়সীমা, দুটোই সেকেন্ডে। |
| Pt_check, Pt_goal, Pt_all | চেকপয়েন্টের পয়েন্ট, গোলের পয়েন্ট, আর দুটোর যোগফল। |
| Mag_clear | সময়ের গুণক (সর্বোচ্চ মোটামুটি ২×)। স্কোর = Pt_all × Mag_clear। |
| Microgravity module | সিমুলেটরের বাধাবিঘ্ন। |
দ্বিতীয় ভাগ · প্রোগ্রামিং ম্যানুয়াল
শুরুর আগে: প্রোগ্রামিংয়ের শব্দগুলো, সহজ করে
প্রোগ্রামিং ম্যানুয়ালে অনেক নতুন শব্দ আছে। ভয় পাওয়ার কিছু নেই; বেশিরভাগই রোজকার জিনিসের মতো।
- প্রোগ্রাম
- কম্পিউটারের জন্য লেখা ধাপে ধাপে নির্দেশ, রান্নার রেসিপির মতো। Kibo-RPC-তে প্রোগ্রাম লিখতে হয় Python বা C++ ভাষায়।
- Ubuntu (Linux)
- Windows-এর মতোই একটা অপারেটিং সিস্টেম। Kibo-RPC-র সব টুল এতে চলে; Windows-এর ভেতরেও (WSL দিয়ে) এটা চালানো যায়।
- টার্মিনাল
- লিখে লিখে কম্পিউটারকে আদেশ দেওয়ার জানালা। যেমন
mkdir krpcলিখে Enter চাপলেkrpcনামে একটা ফোল্ডার তৈরি হয়। - ROS
- রোবটের সফটওয়্যারের “ডাকঘর”: রোবটের নানা অংশ (ক্যামেরা, মোটর, তোমার প্রোগ্রাম) এটার মাধ্যমেই একে অন্যকে বার্তা পাঠায়।
- সার্ভিস
- প্রশ্ন করে উত্তরের জন্য অপেক্ষা, যেমন শিক্ষককে একটা প্রশ্ন করা। Kibo-RPC-তে: “এই রানের চেকপয়েন্টগুলো কোথায়?”
- অ্যাকশন
- সময় লাগে এমন কাজ, যেমন কাউকে দোকানে পাঠানো: মাঝে খোঁজ নেওয়া যায়, দরকার হলে বাতিলও করা যায়। Kibo-RPC-তে: “ওই জায়গায় যাও”।
- টপিক
- রেডিওর মতো অনবরত সম্প্রচার: যে খুশি শুনতে পারে। Kibo-RPC-তে: রোবট সবসময় জানিয়ে যায় সে এখন কোথায়।
- JSON
- লেবেল দেওয়া তথ্য লেখার একটা নিয়ম, ফর্ম পূরণের মতো:
{ "name": "CP 1", "level": 3 }মানে নাম CP 1, লেভেল ৩। - API
- রোবট তোমার প্রোগ্রামকে যে কমান্ডগুলো দেয়, তাদের তালিকা; রিমোট কন্ট্রোলের বোতামগুলোর মতো।
- লগ
- প্রোগ্রামের ডায়েরি: চলার সময় কী ঘটল, লিখে রাখে। ভুল খুঁজতে খুব কাজে লাগে।
- টেমপ্লেট
- JAXA-র দেওয়া একটা তৈরি প্রোগ্রাম, যার একটা অংশ (USER EDIT AREA) তুমি নিজে লিখবে।
“রোবট, এই জায়গায় যাও”: এটা সার্ভিস, অ্যাকশন, না টপিক?
অ্যাকশন: সময় লাগে, মাঝে খোঁজ নেওয়া আর বাতিল করা যায়।
রোবট এখন কোথায়, সেটা সবসময় পাওয়া যায় কোথা থেকে?
একটা টপিক থেকে (/sensor_fusion/navigation), রেডিওর মতো সবসময় সম্প্রচার হয়।
১০. কাজের চক্র
- প্রস্তুতিUbuntu সেট আপ করো (লোকাল সিমুলেটরের জন্য Docker-ও)।
- ফাইলগুলো নাওসিমুলেটরের রিসোর্স ডাউনলোড করো।
- লেখোটেমপ্লেট প্রোগ্রামটা বদলাও।
- সিমুলেট করোওয়েব বা লোকাল সিমুলেটরে চালাও।
- যাচাই করোলগ আর ফলাফল পড়ো।
- ঠিক করোপ্রোগ্রাম বদলে আবার চালাও।
১১. প্রস্তুতি
- Ubuntu সবসময় লাগবে। শুধু ওয়েব সিমুলেটর ব্যবহার করলেও ফাইল খুলতে আর জমা দেওয়ার প্যাকেজ বানাতে এটা লাগে। Windows 11-এ WSL2-তে Ubuntu ইনস্টল করো:
wsl --install -d Ubuntu-24.04, তারপর দেখে নাওwsl --list --verboseসংস্করণ 2 দেখাচ্ছে কি না। - Docker শুধু লোকাল সিমুলেটরের জন্য। শুধু ওয়েব সিমুলেটর ব্যবহার করলে Docker লাগবে না।
- যে টুলগুলো রাখা ভালো: Git, আর WSL এক্সটেনশনসহ VSCode। Windows-এ ফোল্ডারটা খুলো Ubuntu-র ভেতর থেকে (“Connect to WSL”), Windows-এর দিক থেকে নয়।
- টুল আর লাইব্রেরির নির্দিষ্ট করে দেওয়া সংস্করণ নিজে থেকে আপডেট কোরো না।
| ন্যূনতম | যা থাকা ভালো | |
|---|---|---|
| OS | Ubuntu 20.04 বা তার পরের | Ubuntu 24.04 (Windows 11-এ WSL2-তে) |
| CPU | ৪ কোর | ৬ কোর |
| মেমরি | ৮ GB | ১৬ GB |
| খালি জায়গা | ২০ GB | ৪০ GB, SSD-তে |
এগুলো লোকাল সিমুলেটর চালানোর জন্য। সিমুলেটর বানানো GCC 7.5.0, C++14, Python 3.6.9 আর ROS 1 Melodic দিয়ে, তাই এমন কোড লেখো যা এই সংস্করণগুলোতে চলে।
ডাউনলোড পাতা থেকে KRPC7 Simulator Resources নামিয়ে খুলে নাও:
mkdir -p ~/krpc
tar -xvf krpc7th-simulator.tar.gz -C ~/krpc
১২. প্রজেক্ট ফোল্ডার
krpc7th-simulator/
├── build.sh, simulation.sh, replay.sh এগুলো চালাও, বদলিও না
├── docker/ rootfs/ rviz/ সিমুলেটরের ভেতরের জিনিস, বদলিও না
├── users/
│ ├── packing.sh জমা দেওয়ার .tar.gz বানায়
│ └── catkin_ws/src/
│ ├── krpc_user/ ★ তোমার কোড এখানে
│ │ ├── scripts/user_template.py Python টেমপ্লেট
│ │ └── src/user_template_node.cpp C++ টেমপ্লেট
│ ├── krpc_api_server/ দেওয়া আছে, বদলিও না
│ └── krpc_ib2_msgs/ দেওয়া আছে, বদলিও না
└── share/logs/<time>/ প্রতিটা লোকাল রানের ফলাফল
├── cheat_sheet.json সেই রানের চেকপয়েন্ট লেআউট
├── simulation.bag রেকর্ডিং (replay.sh দিয়ে চালাও)
├── judge_module_logs/ স্কোরের লগ
└── user_programs_logs/ তোমার প্রোগ্রামের আউটপুট
users/catkin_ws/src/krpc_user/।বদলগুলো তৈরি হলে আপলোডের প্যাকেজ বানাও:
cd ~/krpc/krpc7th-simulator/users
./packing.sh YourSourceCode # YourSourceCode.tar.gz বানায়
১৩. ওয়েব আর লোকাল সিমুলেটর
| ওয়েব সিমুলেটর | লোকাল সিমুলেটর | |
|---|---|---|
| কী কাজে | জমা দেওয়ার আগে যাচাই, সবার জন্য একই ব্যবস্থায় বিচার | কাজ করতে করতে নানা কিছু চেষ্টা আর ডিবাগ করা |
| কোথায় চলে | JAXA-র সার্ভারে, আসল রোবটের মতো ARM64-এ (একটা Jetson TX2) | তোমার PC-তে Docker-এ, সাধারণত x86_64 |
| অ্যাকাউন্ট | তোমার দেশ বা অঞ্চলের যোগাযোগকারী তোমাকে নিবন্ধন করলে পাবে | লাগে না |
| লগ | ওয়েব ড্যাশবোর্ড থেকে | share/logs/-এ |
ওয়েব সিমুলেটর
- Kibo-RPC ওয়েবসাইটে লগইন করে SIMULATION খোলো।
YourSourceCode.tar.gzটেনে এনে ছাড়ো, Simulator Level আর Version বাছো, একটা মেমো লেখো, তারপর START SIMULATION চাপো।- স্ট্যাটাসে Finished লেখা এলে VIEW RESULT চাপো। SIMULATOR VIEWER রানটা আবার দেখায় (যে পাসওয়ার্ড দেখায়, সেটা কপি করে নাও)।
লোকাল সিমুলেটর
cd ~/krpc/krpc7th-simulator
bash ./build.sh # একবারই; আসল রোবটের মতো ARM-এর জন্য বানাতে --arm64 যোগ করো
bash ./simulation.sh # একটা রান; http://localhost-এ দেখো, থামাতে Ctrl+C
তোমার x86_64 PC-তে যে কোড ঠিকঠাক চলে, ARM64-এ সেটা অন্যরকম আচরণ করতে পারে। চূড়ান্ত সংস্করণ সবসময় ওয়েব সিমুলেটরে পরীক্ষা করো।
১৪. ফলাফল পড়া
- ওপরে থাকে Final Score, Mission Time, Time Bonus, CheckPoints Passed, Goal Reached।
- CheckPoint Detail-এ প্রতিটা চেকপয়েন্ট PASSED বা FAIL হিসেবে লেখা থাকে, সঙ্গে তার লেভেল, মানে তিন শর্তের মধ্যে যেটা সবচেয়ে কম। ফেল করা চেকপয়েন্টের লেভেলের জায়গায় থাকে "-"; N/A মানে সেই চেকপয়েন্টের বিচারই হয়নি।
- DOWNLOAD LOG FILES থেকে দুটো ফাইল পাবে: ফলাফলের JSON, আর তোমার প্রোগ্রামের নিজের লগ (
rospy.loginfoদিয়ে যা প্রিন্ট করেছ)। সিস্টেম আর সেন্সরের লগ দেওয়া হয় না; যা দরকার, লোকাল সিমুলেটরে rosbag দিয়ে রেকর্ড করে নাও।
{ "Illegal": false, // রানটা কি নিয়মভঙ্গ হিসেবে ধরা হয়েছে?
"JudgeReport": {
"mission": { "started": true, "finished": true, "duration_sec": 295.33 },
"checkpoint_detail": [
{ "checkpoint_id": 2, "success": true, "level": 3, "reason": "checkpoint validated" } ],
"goal": { "success": true, "reason": "goal checkpoint previously passed" },
"events": [ { "status": "Mission Start" }, { "status": "Mission Finish" } ] } }
প্রোগ্রামিং ম্যানুয়ালের উদাহরণ থেকে ছোট করা (টাইমস্ট্যাম্প বাদ দিয়ে)।
১৫. টেমপ্লেট প্রোগ্রাম যেভাবে চলে
- চালু হওয়া (
__init__)ক্লায়েন্টগুলো বানায়,/ib2_user/start-এ সাবস্ক্রাইব করে,/ib2_user/stopসার্ভ করে আর/ib2_user/ready = Trueসেট করে। এই তিনটা কখনো সরাবে না। - শুরুর সংকেত (
__callback_start)তোমার প্রোগ্রাম “তৈরি” জানালে তবেই/ib2_user/startআসে। একটা গার্ড-চেক খেয়াল রাখে, যাতে এটা দুবার শুরু না হয়। - মিশন শুরু
/event/mission_startকল করো। - USER EDIT AREA: তোমার পরিকল্পনা
/mission/get_checkpointsথেকে চেকপয়েন্টগুলো নাও। প্রতিটার জন্য:/ctl/commandদিয়ে সেখানে যাও, মার্কার মাঝখানে আর স্থির আছে কি না দেখো, তারপর/event/checkpoint_passedদিয়ে বিচার চাও। - মিশন শেষগোলে পৌঁছে
/event/mission_finishedকল করো। এটাই শেষের রিপোর্ট।
/ib2_user/stop যেকোনো সময় আসতে পারে: চলমান অ্যাকশন থাকলে বাতিল করো, তারপর উত্তর দাও।def __run_user_flow(self, msg):
try:
if not self.__notify_mission_start():
return
# USER EDIT AREA: define route planning and game-specific flow here.
# ***********************************************
checkpoint_target = self.__resolve_first_checkpoint_target()
if not self.__move_to_checkpoint(checkpoint_target):
return
if not self.__notify_checkpoint_passed(checkpoint_target['checkpoint_id']):
return
# ***********************************************
if not rospy.is_shutdown():
self.__notify_mission_finished()
except Exception as exc:
rospy.logerr('user flow failed: %s', exc)
- নমুনাটা শুধু প্রথম চেকপয়েন্টে যায়। তোমার কাজ হলো ভালো একটা ক্রমে সবগুলোতে যাওয়া, আর গোলে গিয়ে শেষ করা।
- চেকপয়েন্টগুলো আনতে না পারলে টেমপ্লেট মূলবিন্দুতে একটা লক্ষ্য ধরে নেয়, যাতে অন্তত শুরু থেকে শেষ পর্যন্ত চলে। এতে কোনো পয়েন্ট আসে না; এর বদলে আবার চেষ্টা করো, বা গুছিয়ে থামো।
/mission/get_checkpointsতারmessage-এ JSON ফেরত দেয়। প্রতিটা চেকপয়েন্টে থাকেcheckpoint_id,position,marker_pose,score_bands, আর একটাattitude, যার ভেতরে কোয়াটারনিয়ন,centering_bandsআরroll_bands; সঙ্গে থাকেgoalpoint_id।
{ "checkpoint_count": 8,
"checkpoints": [ {
"checkpoint_id": 1,
"position": [1.442, -0.501, 0.665],
"marker_pose": { "position": [1.451, -1.001, 0.6806], "quaternion": [-0.7071, 0, 0, 0.7071] },
"score_bands": [ {"radius": 0.1, "level": 3}, {"radius": 0.2, "level": 2}, {"radius": 0.3, "level": 1} ],
"attitude": { "quaternion": [0.706, -0.690, 0.123, -0.103],
"centering_bands": [ {"angle": 10, "level": 3}, ... ],
"roll_bands": [ {"angle": 10, "level": 3}, ... ] } }, ... ],
"goalpoint_id": 12 }
প্রোগ্রামিং ম্যানুয়ালের নমুনা রেসপন্স থেকে ছোট করা।
১৬. এক নজরে API
| নাম | ধরন | কী করে |
|---|---|---|
/mission/get_checkpoints | Service | এই রানের চেকপয়েন্টগুলো আনে (JSON) |
/event/mission_start | Service | জানায় যে মিশন শুরু হয়েছে |
/event/checkpoint_passed | Action | বিচারককে এখনই একটা চেকপয়েন্ট যাচাই করতে বলে (goal: checkpoint_id) |
/event/mission_finished | Service | মিশন শেষের রিপোর্ট |
/sensor_fusion/navigation | Topic | রোবট কোথায় আছে: অবস্থান, দিক, বেগ |
/ctl/command | Action | কোনো পোজে যাওয়া, রোবটের সাপেক্ষে সরা, বা থামা |
/ctl/wrench | Topic | সরাসরি বল আর টর্ক দিয়ে ঠেলা (অ্যাডভান্সড) |
/ctl/status | Topic | রোবটের নিয়ন্ত্রণের এখনকার অবস্থা |
/camera_main/image_raw | Topic | ক্যামেরার ছবি |
/camera_main/camera_info | Topic | ক্যামেরার সংখ্যাগুলো: K (ফোকাল লেংথ আর কেন্দ্র) আর D (বিকৃতি) |
/ib2_user/start | Topic | শুরুর সংকেত (আবশ্যিক, টেমপ্লেটে আগেই আছে) |
/ib2_user/stop | Service | থামার অনুরোধ (আবশ্যিক, টেমপ্লেটে আগেই আছে) |
/ib2_user/ready | Parameter | প্রোগ্রাম তৈরি হলে true করে দাও (আবশ্যিক) |
সার্ভিস একটা অনুরোধের উত্তর দেয়; অ্যাকশন সময়সাপেক্ষ কাজের জন্য, যেমন চলাফেরা (কানেক্ট করো, goal পাঠাও, ফলের জন্য অপেক্ষা করো); টপিক অনবরত ডেটা পাঠায়। অ্যাকশনে সবসময় একটা টাইমআউট আর বাতিল করার উপায় রাখো।
১৭. রোবট চালানো
/ctl/command-এ একটা লক্ষ্য পোজ আর ধরনসহ CtlCommandGoal পাঠাও:
| ধরন | লক্ষ্য |
|---|---|
MOVE_TO_ABSOLUTE_TARGET | Kibo-র ভেতরে একটা অবস্থান আর দিক (frame_id = iss_body) |
MOVE_TO_RELATIVE_TARGET | রোবট এখন যেখানে আছে, তার সাপেক্ষে একটা অবস্থান আর দিক (frame_id = body) |
STOP_MOVING | কিছু না (শূন্য পাঠাও)। রোবট গতি কমিয়ে স্থির হয়ে থাকে। |
- চলা সফল হলে ফল আসে
TERMINATE_SUCCESS(0)। নইলে আসেABORTED(1),TIME_OUT(2),INVALID_NAV(3) বাINVALID_CMD(4)। প্রতিবার এটা যাচাই করো। - চলার মাঝপথে পরিকল্পনা বদলাতে
cancel_goal()কল করো, আর পরের লক্ষ্য পাঠানোর আগে রোবট সত্যিই থেমেছে কি না, তার জন্য অপেক্ষা করো। /ctl/statusঅবস্থা দেখায়: চলা শেষে সেটা বদলে হয়KEEP_POSEবাSTOP_MOVING।/ctl/wrenchরোবটকে সরাসরি ঠেলে (বল N-এ, টর্ক N·m-এ, রোবটের নিজের ফ্রেমে)। এতে চলা মসৃণ হতে পারে, কিন্তু থামাতে হবে তোমাকেই;/ctl/command-এর সঙ্গে মেশালে অপ্রত্যাশিত কিছু ঘটতে পারে।- রুট সাজাও ওড়ার মতো জায়গার ভেতরে, রোবটের আকারের জন্য জায়গা রাখো, আর পৌঁছে বিচার চাওয়ার আগে একটু অপেক্ষা করো।
১৮. AR মার্কার পড়া
- মার্কারগুলো: ArUco 4×4 ডিকশনারি, ID ১ থেকে ১২, ২ সেমি (০.০২ মি) চওড়া। বাহুর দৈর্ঘ্য দাও মিটারে, কখনো পিক্সেলে নয়।
- ক্যামেরা:
/camera_main/camera_infoথেকেKআরDনাও। প্রথম মেসেজ না আসা পর্যন্ত এটা ফাঁকা থাকে, তাই ব্যবহারের আগে দেখে নাও। ছবির আকার বদলালে fx, fy, cx আর cy-ও সেই অনুপাতে বদলাও। - লাইব্রেরি: OpenCV 3.3.1-এর aruco মডিউল।
- ধূসরক্যামেরার ছবিকে গ্রেস্কেলে বদলাও।
- প্রস্তুতি4×4 ডিকশনারি আর ডিটেক্টরের সেটিংস বানাও।
- খোঁজো
detectপ্রতিটা ID আর তার ৪টা কোণের পিক্সেল খুঁজে বের করে।Markers - পোজ০.০২ মি, K আর D দিয়ে
estimateচালালে পাবেPose Single Markers rvecআরtvec। - যাচাইকয়েকটা ফ্রেম ধরে দূরত্ব, দিক আর স্থিরতা দেখো।
rvec আর tvec মার্কারকে বর্ণনা করে ক্যামেরার অক্ষে; body বা iss_body ফ্রেমে ব্যবহার করতে প্রোগ্রামিং ম্যানুয়ালে দেওয়া ক্যামেরা বসানোর অবস্থান আর দিক দিয়ে রূপান্তর করো। ছবি সোজা থাকলে (ছবির ওপরের দিক রোবটের ওপরের দিকে), tvec = (tx, ty, tz) হলে বডি ফ্রেমে মার্কারটা থাকে (০.১৪ + tz, −tx, −ty)-এ।ডিকশনারি, মার্কারের ID, বাহুর দৈর্ঘ্য, K বা D ভুল হলে মার্কার হয়তো খুঁজে পাওয়া যাবে, কিন্তু দূরত্ব আর কোণ ভুল আসবে।
১৯. নিরাপদ প্রোগ্রাম লেখা
প্রোগ্রামিং ম্যানুয়াল এ নিয়ে পুরো একটা অধ্যায় লিখেছে, কারণ প্রোগ্রাম আটকে গেলে রানটাই নষ্ট হয়, আর ISS-এ তার প্রভাব রোবটের ওপরও পড়তে পারে।
- অসীম লুপ নয়: চেষ্টার সংখ্যা আর সময়ের একটা সীমা রাখো, আর প্রতিটা লুপ থেকে বেরোনোর একাধিক রাস্তা রাখো।
- ব্যর্থতার জন্য তৈরি থাকো: রিটার্ন ভ্যালু যাচাই করো, এক্সেপশন ধরো, টাইমআউট ব্যবহার করো, আর সেন্সরের ডেটা না এলে বা উল্টোপাল্টা এলে সামলাও।
- ঘড়ির দিকে নজর রাখো: প্রতিটা ধাপে কত সময় লাগছে লিখে রাখো, আর মিশনের বাকি সময়ের দিকে চোখ রাখো।
- সাবধানে চলো: আগে লক্ষ্যটা নিশ্চিত করো, ফলাফল সবসময় যাচাই করো, আবার চেষ্টার সংখ্যা সীমিত রাখো, আর পৌঁছে একটু অপেক্ষা করো।
- টাটকা ডেটা ব্যবহার করো: টাইমস্ট্যাম্প দেখে নাও, আর প্রতিটা মান কোন এককে আর কোন ফ্রেমে, তা স্পষ্ট করে লেখো।
- কাজের জিনিস লগ করো: শুরু আর শেষ, পরিকল্পনা, প্রতিটা API কল আর তার ফল, লক্ষ্য আর আসল পোজ, ভুল, আবার চেষ্টা আর সময়ের হিসাব, ঠিক লেভেলে (ERROR, WARN, INFO, DEBUG)।
| যখন এটা ঘটে | তখন এটা করো |
|---|---|
| কোনো সার্ভিস পাওয়া যাচ্ছে না | wait_for_service() দিয়ে অপেক্ষা করো, আর বেশি দেরি হলে থামো |
| কোনো অ্যাকশন সার্ভার পাওয়া যাচ্ছে না | wait_for_server() দিয়ে অপেক্ষা করো; সেটা না আসা পর্যন্ত শুরু কোরো না |
| চলা ব্যর্থ হলো | চেকপয়েন্টের বিচার চেয়ো না; কারণটা লগ করো |
| অ্যাকশনের সময় শেষ | cancel_goal() কল করো, আর নিশ্চিত হও যে থেমেছে |
checkpoint_passed ব্যর্থ হলো | ফলটা লগ করো; একই অনুরোধ বারবার পাঠাতে থেকো না |
| ক্যামেরার ছবি বা camera_info আসছে না | টাইমআউটের পরে সেটা লগ করে ক্যামেরার ধাপটা বাদ দাও |
/ib2_user/stop এল | চলমান সব অ্যাকশন বাতিল করো, নিরাপদে শেষ করো, তারপর উত্তর দাও |
প্রোগ্রামিং ম্যানুয়ালের ৫ নম্বর অধ্যায় আর ৬.৫ অংশ থেকে।
তৃতীয় ভাগ
২০. স্যান্ডবক্সে অনুশীলন
নিয়ম পড়া শেষ? শেখার পথের পরের ধাপ স্যান্ডবক্স চালানো; তারপর স্যান্ডবক্সে নিজে চেষ্টা করো। নিচের টেবিলে আছে কোন নিয়ম স্যান্ডবক্সের কোথায় অনুশীলন করা যায়।
| নিয়মে যা আছে | স্যান্ডবক্সে যেভাবে করে দেখবে |
|---|---|
| তিনটা শর্ত, সবচেয়ে কম লেভেলটাই গোনা হয় | রুট ট্যাবের মিশনের তালিকায় প্রতিটা চেকপয়েন্টের লেভেল দেখা যায়; ▶ চালাও লগে লিখে দেয় প্রতিটায় কী মিলছে না |
| কঠিনতার লেভেল (৬ থেকে ১২টা চেকপয়েন্ট) | মিশনের তালিকার ওপরে লেভেল বাছলে এলোমেলো নতুন লেআউট তৈরি হয়; এই রানে কোন কোন মার্কারের চেকপয়েন্ট নেই, তাও বলে দেয় |
| ক্যামেরায় মার্কার মাঝখানে | ক্যামেরা ভিউতে ১০°, ২০° আর ৩০°-এর বৃত্ত আঁকা থাকে |
| দৃষ্টিরেখা বরাবর রোল | ⟲ আর ⟳ বোতাম (চালানোর সময় Q / E) |
| AR মার্কার পড়া | ক্যামেরা ভিউ আসল 4×4 মার্কার পড়ে আর rvec ও tvec দেখায়; রোবটকে কাছে থাকতে হয় |
| টেমপ্লেট প্রোগ্রাম | কোড ট্যাব তোমার রুটকে Python বা C++-এ লিখে দেয়; AR পড়ার কোডটা লিখতে হবে তোমাকেই |
| সময়ের বোনাস | মিশনের তালিকা তোমার স্কোরের আন্দাজ দেয়, আর স্ট্যাটাস বার ৫ মিনিটের সীমার তুলনায় সময় দেখায় |
স্যান্ডবক্স অনুশীলনের জায়গা, সিমুলেটর নয়। এতে মাইক্রোগ্র্যাভিটির বাধাবিঘ্ন নেই; এর ক্যামেরার সংখ্যা, প্রতি লেভেলের পয়েন্ট আর প্রতিটা কঠিনতার লেভেলে চেকপয়েন্টের সংখ্যা (৬, ৮, ১০, ১২) ধরে নেওয়া; আর নতুন লেআউট না বানানো পর্যন্ত এর চেকপয়েন্টগুলো একই জায়গায় থাকে। আসল খেলায় প্রতি রানে সেগুলো বদলায়, তাই তোমার প্রোগ্রামকে সেগুলো /mission/get_checkpoints থেকে পড়তেই হবে।
Kibo-RPC 7 rules guide
About this pageLearning path · how to read it · contents
Plain-language summaries of JAXA's Rulebook and Programming Manual for the 7th Kibo Robot Programming Challenge, with sketches. They help you get started; the official documents have the final word.
Official documentsJAXA's rulebook and manual (PDF)
Read these from JAXA. The summaries below follow Rulebook version 1.1 (October 15, 2026) and Programming Manual version 1.0 (October 5, 2026).
If a PDF link stops working, JAXA has published a newer version: get it from the download page, and check for rule changes.
Part 1 · The Rulebook
1. The challenge in one minute
You write a program for Int-Ball2 (IB2), a small free-flying camera robot that JAXA operates inside Kibo, Japan's module on the International Space Station. It flies around Kibo so astronauts spend less time holding cameras. Meet Int-Ball2 and Astrobee in 3D →
- The story: the pressure inside Kibo is dropping. IB2 visits the checkpoints where a leak is suspected and reads the AR marker at each one to find the cause.
- Preliminary round: held in each country or region. Your program runs in JAXA's web simulator. Some regions add their own judging rules, so check your local Kibo-RPC page.
- Final round: the winning teams' programs run on the real Int-Ball2 inside Kibo, in orbit.
Who can take part
- Regular Course (the main competition): any student, from school all the way to university and graduate school. Teams have 3 to 8 members.
- Beginner Course (new for the 7th edition): everyone on the team is junior high school age or younger (up to about age 15) and new to programming. It has fewer checkpoints and doesn't count the robot's orientation (roll and so on), so it's easier. There are prizes, but winners don't get to run their program on the ISS.
- Teams of high school students or younger give a guardian's or teacher's details. Rules can differ a little by country, so check your local organiser's announcements.
From the 7th Kibo-RPC Guidebook, sections 3.1, 3.2 and 3.4.
2. How a game runs
- UndockIB2 leaves the Dock Station by itself. The 5-minute timer starts.
- Get the checkpointsRead their positions and attitudes, which are given to your program automatically.
- Fly a good routeVisit the checkpoints in an efficient order.
- Read each AR markerHold the required position and attitude at each checkpoint.
- Goal and reportReach the Goal CheckPoint and send the mission completion report.
- The timer starts when undocking is complete and stops at the mission completion report. If the report doesn't happen within the time limit, you get no points for it.
- Anything IB2 does after the mission finishes doesn't count.
3. What you're told, and what you aren't
| Known before the run | Random each run | Never given to you |
|---|---|---|
| The start point (the Dock Station) The position and attitude for the completion report How many checkpoints there are Where the checkpoints can be (per difficulty level) Every AR marker's position and ID The goal point |
Each checkpoint's position and attitude, set by an angle and a distance from its AR marker | The checkpoint pattern before the run starts (your program asks for it when the run starts) The disturbance pattern of the microgravity module |
- There are 6 to 12 checkpoints; harder levels have more. You choose the level when you start a web simulation: Easy, Normal, Hard or Very Hard. The documents don't say how many checkpoints each level has, and which markers get one changes from run to run.
- Each checkpoint is a sphere placed relative to its AR marker.
- A microgravity module disturbs the robot in the simulator only, so IB2 won't always be exactly where you sent it.
- checkpoint
- A place the robot must go to, like a bus stop. Each one is an invisible ball-shaped space (a sphere) in front of an AR marker.
- goal checkpoint
- The last place the robot must reach.
- level
- How well a checkpoint was passed: Lv1 is OK, Lv3 is best.
- simulator
- A copy of the real robot and station inside a computer that behaves like the real thing, a bit like a video game. The preliminary round is run on it.
Places are written as three numbers (x, y, z), and orientations as quaternions. If those are new to you, look at the Coordinates and rotations page first.
How does the robot know where everything is?
Each thing it needs comes from a different place:
/mission/get_checkpoints. They're random each run, so your program asks for them: each one's position, its marker's pose, the attitude to hold, the level limits, and which one is the goal./sensor_fusion/navigation. IB2's own position, attitude and speed in Kibo.The Rulebook only says the checkpoint positions and attitudes are "provided automatically"; the Programming Manual explains the API calls (sections 6.3.1 and 6.3.2). The 7th Kibo-RPC uses Int-Ball2, not NASA's Astrobee, which flew in earlier editions.
Where the markers are
The marker table (Rulebook table 2.2.2-2)
| Marker | Target | Position x, y, z (m) | Attitude x, y, z, w |
|---|---|---|---|
| 1 | SAIBO | 1.451, −1.001, 0.681 | −0.707, 0, 0, 0.707 |
| 2 | RYUTAI | 2.973, −1.001, 0.718 | −0.707, 0, 0, 0.707 |
| 3 | MSPR_1 | 3.313, −1.001, 0.523 | −0.707, 0, 0, 0.707 |
| 4 | MSPR_2 | 4.181, −1.001, 0.523 | −0.707, 0, 0, 0.707 |
| 5 | RMS_Console | 5.754, −1.001, 0.838 | −0.707, 0, 0, 0.707 |
| 6 | EPS1 | 1.895, −0.282, −0.208 | 0, 0, 0.707, −0.707 |
| 7 | MELFI1 | 1.451, −1.001, 0.372 | −0.707, 0, 0, 0.707 |
| 8 | EPS2_2 | 4.779, 0.112, 1.884 | −0.707, 0.707, 0, 0 |
| 9 | EPS2_1 | 2.066, 1.046, −0.014 | 0, 0.707, −0.707, 0 |
| 10 | ECLSS_TCS2 | 5.851, 0.010, 1.884 | −0.707, 0.707, 0, 0 |
| 11 | Airlock | 7.195, 0.363, 1.230 | 0.5, 0.5, −0.5, −0.5 |
| 12 | Bay0_Closeout_Panel | 0.000, −0.059, −0.102 | −0.5, 0.5, −0.5, 0.5 |
| Start | Docking Station | 0.200, 0.000, 0.000 | 0, 0, 0, 1 |
The Rulebook gives positions with the docking station as the origin; the Programming Manual calls this frame iss_body. Quaternions are written x, y, z, w.
4. Passing a checkpoint
At each checkpoint the judge looks at three things at once. Each one gets a level from Lv1 (just inside) to Lv3 (very close).
① Position
② Marker centred
③ Roll
/mission/get_checkpoints.- The lowest level counts. All three must be inside a band, and the checkpoint scores the level of the worst one.
- Hold it for 1 second with the marker in view. Wobbling out of a band during that second fails the pass.
- Your program must ask for the judgement with
/event/checkpoint_passed. Just arriving doesn't count.
| Position | Marker centred | Roll | Result |
|---|---|---|---|
| Lv3 | Lv2 | Lv3 | Passes at Lv2, the lowest of the three |
| out | Lv3 | Lv3 | no points One condition outside its band fails the checkpoint |
These are the Rulebook's own examples (section 2.3.2).
One more example, step by step: the robot is 0.15 m from the checkpoint's centre, the marker is 8° from the middle of the picture, and the roll is 25° off.
- Position: 0.15 m is within 0.2 but more than 0.1, so Lv2.
- Centring: 8° is within 10°, so Lv3.
- Roll: 25° is within 30° but more than 20°, so Lv1.
- The lowest is Lv1, so the checkpoint passes at Lv1. Fix the roll and the level goes up!
Distance 0.05 m, 15° from the middle, roll 5°. Which level?
Distance Lv3, centring Lv2 (15° is within 20°), roll Lv3. The lowest is Lv2, so Lv2.
The robot reaches the right spot but never sends /event/checkpoint_passed. Does it pass?
No. Your program must ask to be judged; just arriving doesn't count.
5. Scoring
- Pass the checkpoints and reach the goal first, then get faster. A quick run that misses checkpoints scores less than a careful one.
- To pass at a high level you need more than the right position: aim the camera at the middle of the marker and match the roll.
- The Rulebook doesn't list how many points each level is worth. The sandbox's estimate uses its own assumed numbers.
Example (made-up numbers, just to show the idea): your checkpoints and goal earn 50 points, and finishing quickly gives a multiplier of 1.5. Then your score = 50 × 1.5 = 75.
6. Ten runs, one average
- You submit one programOnly one chance per submission.
- JAXA's web server runs it 10 timesEach run has different random checkpoints and disturbances.
- Your score is the averageThe average of the 10 runs sets your ranking.
Example (made-up numbers): team A's program scores 80 nine times, but gets stuck once and scores 0. Average = (9 × 80 + 0) ÷ 10 = 72. Team B's program scores 75 every time: average 75. Team A loses because of one mistake! So your program needs to work reliably, every time.
Five runs score 60, 70, 80, 90 and 100. What's the average?
(60 + 70 + 80 + 90 + 100) ÷ 5 = 400 ÷ 5 = 80.
7. Dates and submitting
- January 20, 2027, 12:00 JSTDeadline for questions. Later questions may get a late answer.
- January 20, 2027, 23:59 JSTLast moment to submit your program.
- January 21 – February 17, 2027The preliminary round.
- LaterThe final round on the ISS. Details are announced later.
- Before the round, the web simulator gets a "Preliminary" simulator. Run your program in it.
- On the RESULTS screen, pick a Preliminary run whose status is FINISHED and press SUBMIT.
- To change your mind, press CANCEL and submit another one. Both buttons stop working at the deadline.
A run with the status FAILED can't be submitted. If you have no FINISHED run, you can't take part, so test early.
8. The final round on the ISS
- Safety review first. JAXA checks your code so it can't harm the real robot. You send the draft source code by email, then the final program and source through the website. Corrections are needed every year and there's little time, so keep your schedule free.
- One run only. On the real IB2 it can't be stopped or re-run. A re-run happens only if IB2 has a problem in orbit that wasn't caused by your program, and there's time left.
- 5 minutes, then the program shuts down. The run also ends early if IB2 gets stuck, loses track of where it is, or stops for a long time.
- You don't press start. JAXA installs your program on IB2 and ground operators start it. The runs are recorded beforehand and shown later at an event with expert commentary.
- Run order by tier. Teams go in tiers by preliminary rank (for example 1st–4th, 5th–8th, 9th–13th). Lower tiers may not get a turn if time runs out.
9. Words to know
| Word | Meaning |
|---|---|
| IB2 | Int-Ball2, the robot. A simulator in the preliminary round, the real robot in the final. |
| Kibo (JEM) | The Japanese Experiment Module on the ISS. |
| Dock Station | Where IB2 starts. Release means leaving it; the timer starts when release is complete. |
| Mission Start / Finish | Start: release is complete and the timer runs. Finish: the time limit ends or the completion report starts. Nothing after Finish scores. |
| CheckPoint | A sphere placed relative to an AR marker, with three margin levels. |
| GoalPoint | Where IB2 goes after the checkpoints and sends the completion report. |
| AR marker | A printed square code. Kibo has 12 of them; checkpoints are built around them. |
| t, time_max | The time left at the report, and the time limit, in seconds. |
| Pt_check, Pt_goal, Pt_all | Checkpoint points, goal points, and their sum. |
| Mag_clear | The time multiplier (up to about 2×). Score = Pt_all × Mag_clear. |
| Microgravity module | The disturbance in the simulator. |
Part 2 · The Programming Manual
Before you start: programming words, made simple
The Programming Manual uses lots of new words. Don't worry: most of them are like everyday things.
- program
- Step-by-step instructions for a computer, like a recipe. Kibo-RPC programs are written in Python or C++.
- Ubuntu (Linux)
- An operating system, like Windows. All the Kibo-RPC tools run on it; you can also run it inside Windows (with WSL).
- terminal
- A window where you type commands for the computer. For example, typing
mkdir krpcand pressing Enter makes a folder calledkrpc. - ROS
- The robot software's "post office": the robot's parts (camera, motors, your program) send each other messages through it.
- service
- Ask a question and wait for the answer, like asking a teacher. For example, "where are this run's checkpoints?"
- action
- A job that takes time, like sending someone to the shop: you can check how it's going, and cancel it if you need to. For example, "go to this place".
- topic
- A broadcast that never stops, like the radio: anyone can listen. For example, the robot always announces where it is now.
- JSON
- A way of writing labelled information, like filling in a form:
{ "name": "CP 1", "level": 3 }means the name is CP 1 and the level is 3. - API
- The list of commands the robot gives your program, like the buttons on a remote control.
- log
- The program's diary: it writes down what happened while it ran. Very useful for finding mistakes.
- template
- A ready-made program from JAXA with one part (the USER EDIT AREA) for you to write.
"Robot, go to this place": is that a service, an action or a topic?
An action: it takes time, and you can check on it or cancel it.
Where can your program always find out where the robot is now?
From a topic (/sensor_fusion/navigation), broadcast all the time like the radio.
10. The development loop
- PrepareSet up Ubuntu (and Docker for the local simulator).
- Get the filesDownload the simulator resources.
- WriteEdit the template program.
- SimulateRun it in the web or local simulator.
- CheckRead the logs and the results.
- FixChange the program and go again.
11. Setting up
- You always need Ubuntu. Even with only the web simulator, you need it to unpack the files and build the submission package. On Windows 11, install Ubuntu in WSL2:
wsl --install -d Ubuntu-24.04, then check thatwsl --list --verboseshows version 2. - Docker only for the local simulator. If you only use the web simulator, skip Docker.
- Recommended tools: Git, and VSCode with the WSL extension. On Windows, open the folder inside Ubuntu ("Connect to WSL"), not from the Windows side.
- Don't update the fixed versions of tools and libraries on your own.
| Minimum | Recommended | |
|---|---|---|
| OS | Ubuntu 20.04 or later | Ubuntu 24.04 (on WSL2 for Windows 11) |
| CPU | 4 cores | 6 cores |
| Memory | 8 GB | 16 GB |
| Free storage | 20 GB | 40 GB, on an SSD |
These are for running the local simulator. The simulator is built on GCC 7.5.0, C++14, Python 3.6.9 and ROS 1 Melodic, so write code that works with those versions.
Download KRPC7 Simulator Resources from the download page and unpack it:
mkdir -p ~/krpc
tar -xvf krpc7th-simulator.tar.gz -C ~/krpc
12. The project folder
krpc7th-simulator/
├── build.sh, simulation.sh, replay.sh run these, don't edit
├── docker/ rootfs/ rviz/ simulator insides, don't edit
├── users/
│ ├── packing.sh makes your submission .tar.gz
│ └── catkin_ws/src/
│ ├── krpc_user/ ★ YOUR CODE GOES HERE
│ │ ├── scripts/user_template.py Python template
│ │ └── src/user_template_node.cpp C++ template
│ ├── krpc_api_server/ provided, don't edit
│ └── krpc_ib2_msgs/ provided, don't edit
└── share/logs/<time>/ results of each local run
├── cheat_sheet.json the checkpoint layout of that run
├── simulation.bag recording (play it with replay.sh)
├── judge_module_logs/ scoring logs
└── user_programs_logs/ your program's output
users/catkin_ws/src/krpc_user/ is yours to edit.When your changes are ready, make the package you upload:
cd ~/krpc/krpc7th-simulator/users
./packing.sh YourSourceCode # makes YourSourceCode.tar.gz
13. Web and local simulators
| Web simulator | Local simulator | |
|---|---|---|
| Use it for | Checks before submitting, judged in the same setup as everyone | Trying things and debugging while you develop |
| Runs on | JAXA's server, on ARM64 like the real robot (a Jetson TX2) | Your PC in Docker, usually x86_64 |
| Account | Issued when your country or region's contact registers you | Not needed |
| Logs | From the web dashboard | In share/logs/ |
Web simulator
- Log in on the Kibo-RPC website and open SIMULATION.
- Drop in
YourSourceCode.tar.gz, choose the Simulator Level and Version, add a memo, and press START SIMULATION. - When the status says Finished, press VIEW RESULT. SIMULATOR VIEWER replays the run (copy the password it shows).
Local simulator
cd ~/krpc/krpc7th-simulator
bash ./build.sh # once; add --arm64 to build for ARM like the real robot
bash ./simulation.sh # one run; watch it at http://localhost, stop with Ctrl+C
Code that works on your x86_64 PC may behave differently on ARM64. Always test the final version in the web simulator.
14. Reading your results
- Final Score, Mission Time, Time Bonus, CheckPoints Passed, Goal Reached at the top.
- CheckPoint Detail lists each checkpoint as PASSED or FAIL with its level, the lowest of the three conditions. A failed checkpoint shows "-" for its level; N/A means that checkpoint wasn't judged.
- DOWNLOAD LOG FILES gives two files: the result JSON and your program's own log (what you printed with
rospy.loginfo). System and sensor logs aren't provided; record what you need with rosbag on the local simulator.
{ "Illegal": false, // was the run treated as a violation?
"JudgeReport": {
"mission": { "started": true, "finished": true, "duration_sec": 295.33 },
"checkpoint_detail": [
{ "checkpoint_id": 2, "success": true, "level": 3, "reason": "checkpoint validated" } ],
"goal": { "success": true, "reason": "goal checkpoint previously passed" },
"events": [ { "status": "Mission Start" }, { "status": "Mission Finish" } ] } }
Shortened from the example in the Programming Manual (timestamps removed).
15. How the template program runs
- Start-up (
__init__)Creates the clients, subscribes to/ib2_user/start, serves/ib2_user/stopand sets/ib2_user/ready = True. Never remove these three. - The start signal (
__callback_start)/ib2_user/startonly arrives once your program says it's ready. A guard stops it starting twice. - Mission startCall
/event/mission_start. - USER EDIT AREA: your planGet the checkpoints from
/mission/get_checkpoints. For each one: move with/ctl/command, check that the marker is centred and steady, then ask/event/checkpoint_passed. - Mission finishedCall
/event/mission_finishedat the goal. This is the completion report.
/ib2_user/stop can arrive at any time: cancel any running action, then reply.def __run_user_flow(self, msg):
try:
if not self.__notify_mission_start():
return
# USER EDIT AREA: define route planning and game-specific flow here.
# ***********************************************
checkpoint_target = self.__resolve_first_checkpoint_target()
if not self.__move_to_checkpoint(checkpoint_target):
return
if not self.__notify_checkpoint_passed(checkpoint_target['checkpoint_id']):
return
# ***********************************************
if not rospy.is_shutdown():
self.__notify_mission_finished()
except Exception as exc:
rospy.logerr('user flow failed: %s', exc)
- The sample only visits the first checkpoint. Your job is to visit them all, in a good order, and finish at the goal.
- If getting the checkpoints fails, the template falls back to a target at the origin so it can still run end to end. That earns nothing; replace it with a retry or a clean stop.
/mission/get_checkpointsreturns JSON in itsmessage. Each checkpoint has itscheckpoint_id,position,marker_pose,score_bandsand anattitudewith its quaternion,centering_bandsandroll_bands, plus thegoalpoint_id.
{ "checkpoint_count": 8,
"checkpoints": [ {
"checkpoint_id": 1,
"position": [1.442, -0.501, 0.665],
"marker_pose": { "position": [1.451, -1.001, 0.6806], "quaternion": [-0.7071, 0, 0, 0.7071] },
"score_bands": [ {"radius": 0.1, "level": 3}, {"radius": 0.2, "level": 2}, {"radius": 0.3, "level": 1} ],
"attitude": { "quaternion": [0.706, -0.690, 0.123, -0.103],
"centering_bands": [ {"angle": 10, "level": 3}, ... ],
"roll_bands": [ {"angle": 10, "level": 3}, ... ] } }, ... ],
"goalpoint_id": 12 }
Shortened from the Programming Manual's example response.
16. The API at a glance
| Name | Kind | What it does |
|---|---|---|
/mission/get_checkpoints | Service | Gets the checkpoints for this run (JSON) |
/event/mission_start | Service | Says the mission has started |
/event/checkpoint_passed | Action | Asks the judge to check a checkpoint now (goal: checkpoint_id) |
/event/mission_finished | Service | The mission completion report |
/sensor_fusion/navigation | Topic | Where the robot is: position, attitude, velocity |
/ctl/command | Action | Move to a pose, move relative to the robot, or stop |
/ctl/wrench | Topic | Push with a force and torque directly (advanced) |
/ctl/status | Topic | The robot's current control state |
/camera_main/image_raw | Topic | The camera picture |
/camera_main/camera_info | Topic | The camera's numbers: K (focal length and centre) and D (distortion) |
/ib2_user/start | Topic | The start signal (required, already in the template) |
/ib2_user/stop | Service | A stop request (required, already in the template) |
/ib2_user/ready | Parameter | Set to true when your program is ready (required) |
Services answer a request; actions are for slow jobs like moving (connect, send a goal, wait for the result); topics stream data. Always give actions a timeout and a way to cancel.
17. Moving the robot
Send a CtlCommandGoal with a target pose and a type to /ctl/command:
| Type | Target |
|---|---|
MOVE_TO_ABSOLUTE_TARGET | A position and attitude in Kibo (frame_id = iss_body) |
MOVE_TO_RELATIVE_TARGET | A position and attitude relative to the robot now (frame_id = body) |
STOP_MOVING | None (send zeros). The robot slows down and holds still. |
- The result is
TERMINATE_SUCCESS(0) when the move worked. Otherwise it'sABORTED(1),TIME_OUT(2),INVALID_NAV(3) orINVALID_CMD(4). Check it every time. - To change plans mid-move, call
cancel_goal()and wait until it has really stopped before sending the next target. /ctl/statusshows the state: after a move it changes toKEEP_POSEorSTOP_MOVING./ctl/wrenchpushes the robot directly (force in N, torque in N·m, in the robot's own frame). It can be smoother but you must stop it yourself; mixing it with/ctl/commandcan surprise you.- Plan the route inside the flyable area, leave room for the robot's size, and wait a moment after arriving before you judge.
18. Reading AR markers
- The markers: ArUco 4×4 dictionary, IDs 1 to 12, 2 cm (0.02 m) wide. Give the side length in metres, never in pixels.
- The camera: use
KandDfrom/camera_main/camera_info. It's empty until the first message arrives, so check before using it. If you resize the picture, scale fx, fy, cx and cy too. - The library: OpenCV 3.3.1's aruco module.
- GreyConvert the camera picture to greyscale.
- Set upMake the 4×4 dictionary and the detector settings.
- Detect
detectfinds each ID and its 4 corner pixels.Markers - Pose
estimatewith 0.02 m, K and D givesPose Single Markers rvecandtvec. - CheckDistance, attitude and steadiness over a few frames.
rvec and tvec describe the marker in the camera's axes; to use them in the body or iss_body frame, convert with the camera's mounting position and attitude from the Programming Manual. With the picture upright (its top toward the robot's top), a marker at tvec = (tx, ty, tz) is at (0.14 + tz, −tx, −ty) in the body frame.If the dictionary, the marker ID, the side length, K or D is wrong, the marker may still be found, but the distance and angle will be wrong.
19. Writing a safe program
The Programming Manual spends a whole chapter on this because a stuck program loses the run, and on the ISS it could affect the robot.
- No endless loops: cap the number of tries and the time, and give every loop more than one way out.
- Expect failures: check return values, catch exceptions, use timeouts, and handle missing or odd sensor data.
- Watch the clock: note how long each step takes and keep an eye on the time left in the mission.
- Move carefully: confirm the target first, always check the result, limit retries, and wait after arriving.
- Use fresh data: check timestamps and say which units and frame each value is in.
- Log useful things: start and end, the plan, each API call and its result, target and actual poses, errors, retries and timings, at the right level (ERROR, WARN, INFO, DEBUG).
| When this happens | Do this |
|---|---|
| A service isn't available | Wait with wait_for_service(), and stop if it takes too long |
| An action server isn't available | Wait with wait_for_server(); don't start until it's there |
| A move fails | Don't ask for the checkpoint; log why |
| An action times out | Call cancel_goal() and make sure it stopped |
checkpoint_passed fails | Log the result; don't send the same request forever |
| No camera picture or camera_info | After a timeout, log it and skip the camera step |
/ib2_user/stop arrives | Cancel every running action, finish safely, then reply |
From the Programming Manual, chapter 5 and section 6.5.
Part 3
20. Practising in the sandbox
Finished the rules? The next step on the learning path is Using the sandbox; then try it yourself in the sandbox. The table shows where in the sandbox you can practise each rule.
| In the rules | Try it in the sandbox |
|---|---|
| Three conditions, lowest level counts | The Mission list in the Route tab shows each checkpoint's level; Play logs what's off at each one |
| Difficulty levels (6 to 12 checkpoints) | The Level picker above the Mission list draws a new random layout; it also names the markers that have no checkpoint this run |
| Marker centred in the camera | The Camera view draws the 10°, 20° and 30° rings |
| Roll about the line of sight | The ⟲ and ⟳ buttons (Q / E when driving) |
| Reading AR markers | The Camera view reads real 4×4 markers and shows rvec and tvec; the robot has to be close |
| The template program | The Code tab writes your route as Python or C++; the AR-reading code is yours to write |
| The time bonus | The Mission list estimates your score, and the status bar shows the time against the 5-minute limit |
The sandbox is practice, not the simulator. It has no microgravity disturbance; its camera numbers, points per level and checkpoints per difficulty level (6, 8, 10, 12) are assumed; and its checkpoints stay put until you draw a new layout. In the real game they change every run, so your program must read them from /mission/get_checkpoints.