Kibo-RPC 7-এর নিয়মের গাইড

এই পাতা সম্পর্কেশেখার পথ · কীভাবে পড়বে · সূচিপত্র

৭ম Kibo Robot Programming Challenge-এর জন্য JAXA-র রুলবুক আর প্রোগ্রামিং ম্যানুয়ালের সহজ ভাষায় সারাংশ, সঙ্গে কিছু স্কেচ। শুরু করতে এগুলো কাজে লাগবে; তবে শেষ কথা অফিশিয়াল ডকুমেন্টগুলোর।

আগে যা জানা দরকাররোবটের পাতা, আর স্থানাঙ্ক ও ঘূর্ণনের ১ থেকে ৬ নম্বর পাঠ (অবস্থান, ডিগ্রি আর রোল)।
কীভাবে পড়বেনতুন হলে শুধু প্রথম ভাগ (১ থেকে ৯) পড়ো; খেলাটা পুরো বুঝে যাবে। প্রোগ্রাম লেখা শুরু করলে পড়ো দ্বিতীয় ভাগ; তার শুরুতেই প্রোগ্রামিংয়ের দরকারি শব্দগুলো সহজ করে বোঝানো আছে। প্রতিটা অংশের শুরুতে লেখা থাকে, আগে কী জেনে আসতে হবে।
অফিশিয়াল ডকুমেন্টJAXA-র রুলবুক আর ম্যানুয়াল (PDF)

এগুলো JAXA-র কাছ থেকেই পড়ো। নিচের সারাংশগুলো রুলবুকের ১.১ সংস্করণ (১৫ অক্টোবর ২০২৬) আর প্রোগ্রামিং ম্যানুয়ালের ১.০ সংস্করণ (৫ অক্টোবর ২০২৬) অনুযায়ী লেখা।

কোনো PDF লিংক কাজ না করলে বুঝবে, JAXA নতুন সংস্করণ প্রকাশ করেছে: ডাউনলোড পাতা থেকে সেটা নামিয়ে নাও, আর নিয়মে কিছু বদলেছে কি না দেখে নাও।

প্রথম ভাগ · রুলবুক

১. এক মিনিটে চ্যালেঞ্জটা

সহজ কথায়তুমি আর তোমার দল একটা প্রোগ্রাম লিখবে। প্রোগ্রামটা মহাকাশ স্টেশনের একটা রোবটকে বলে দেবে কোথায় কোথায় যেতে হবে আর কী দেখতে হবে। যে দলের রোবট সবচেয়ে নিখুঁতভাবে আর তাড়াতাড়ি কাজ শেষ করে, তারাই জেতে।

তুমি প্রোগ্রাম লিখবে Int-Ball2 (IB2)-এর জন্য: ছোট্ট একটা উড়ে বেড়ানো ক্যামেরা রোবট, যেটা JAXA চালায় আন্তর্জাতিক মহাকাশ স্টেশনে জাপানের মডিউল Kibo-র ভেতরে। এটা Kibo-র ভেতরে উড়ে বেড়ায়, যাতে নভোচারীদের ক্যামেরা হাতে ধরে রাখতে কম সময় দিতে হয়। Int-Ball2 আর Astrobee-কে 3D-তে দেখো →

কারা অংশ নিতে পারে

সূত্র: ৭ম Kibo-RPC গাইডবুক, ৩.১, ৩.২ আর ৩.৪ অংশ।

২. একটা খেলা যেভাবে চলে

সহজ কথায়রোবট নিজের “বাসা” (ডক) থেকে বেরোয়, কয়েকটা জায়গায় গিয়ে সেখানকার মার্কারের দিকে ক্যামেরা তাক করে, তারপর শেষ জায়গায় গিয়ে জানায় “কাজ শেষ”। সবকিছু ৫ মিনিটের মধ্যে।
  1. আনডকIB2 নিজে নিজেই ডক স্টেশন ছেড়ে বেরোয়। ৫ মিনিটের টাইমার শুরু হয়।
  2. চেকপয়েন্টগুলো নাওসেগুলোর অবস্থান আর দিক পড়ে নাও; তোমার প্রোগ্রাম এগুলো নিজে থেকেই পায়।
  3. ভালো একটা রুটে ওড়োকম সময় লাগে এমন ক্রমে চেকপয়েন্টগুলোতে যাও।
  4. প্রতিটা AR মার্কার পড়োপ্রতিটা চেকপয়েন্টে দরকারি অবস্থান আর দিক ধরে রাখো।
  5. গোল আর রিপোর্টগোল চেকপয়েন্টে পৌঁছে মিশন শেষের রিপোর্ট পাঠাও।
স্কেচ ১। পাঁচ ধাপে খেলাটা (রুলবুক ২.২.১ আর ২.২.৩)। রিপোর্টটা ৫ মিনিটের মধ্যেই পাঠাতে হবে।

৩. কী জানানো হয়, আর কী হয় না

রানের আগেই জানাপ্রতি রানে এলোমেলোকখনোই জানানো হয় না
শুরুর জায়গা (ডক স্টেশন)
শেষের রিপোর্টের সময়কার অবস্থান আর দিক
কয়টা চেকপয়েন্ট থাকবে
চেকপয়েন্টগুলো কোথায় কোথায় থাকতে পারে (কঠিনতার লেভেল অনুযায়ী)
প্রতিটা AR মার্কারের অবস্থান আর ID
গোল পয়েন্ট
প্রতিটা চেকপয়েন্টের অবস্থান আর দিক, তার AR মার্কার থেকে একটা কোণ আর দূরত্ব দিয়ে ঠিক করা রান শুরুর আগে চেকপয়েন্টের নকশা (রান শুরু হলে তোমার প্রোগ্রাম সেটা চেয়ে নেয়)
মাইক্রোগ্র্যাভিটি মডিউলের বাধাবিঘ্নের ধরন
নতুন শব্দ
চেকপয়েন্ট
রোবটকে যেসব জায়গায় যেতে হয়; বাসের স্টপেজের মতো। প্রতিটা একটা অদৃশ্য বলের মতো গোল জায়গা (গোলক), একটা AR মার্কারের সামনে।
গোল চেকপয়েন্ট
সবশেষে যেখানে যেতে হয়।
লেভেল
কত ভালোভাবে পার হলো: Lv1 মোটামুটি, Lv3 সবচেয়ে ভালো।
সিমুলেটর
কম্পিউটারের ভেতরে আসল রোবট আর স্টেশনের মতো আচরণ করা একটা নকল, ভিডিও গেমের মতো। প্রাথমিক রাউন্ড এতেই হয়।

জায়গাগুলো লেখা হয় তিনটা সংখ্যায় (x, y, z), আর দিক কোয়াটারনিয়নে। এগুলো অচেনা লাগলে আগে স্থানাঙ্ক ও ঘূর্ণন পাতাটা দেখে নাও।

কোন জিনিস কোথায়, রোবট জানে কীভাবে?

যা যা দরকার, তার প্রতিটা আসে আলাদা জায়গা থেকে:

AR মার্কারগুলোরানের আগেই, রুলবুক থেকে। প্রতিটা মার্কারের অবস্থান, দিক আর ID রুলবুকের টেবিলে আছে (নিচে দেখো), তাই এগুলো প্রোগ্রামেই লিখে রাখতে পারো।
চেকপয়েন্টগুলোরান শুরু হলে, /mission/get_checkpoints থেকে। প্রতি রানে এগুলো এলোমেলো, তাই তোমার প্রোগ্রাম চেয়ে নেয়: প্রতিটার অবস্থান, তার মার্কারের পোজ, কোন দিকে মুখ করে থাকতে হবে, লেভেলের সীমা, আর কোনটা গোল।
রোবট নিজেসবসময়, /sensor_fusion/navigation থেকে। Kibo-র ভেতরে IB2-এর নিজের অবস্থান, দিক আর গতি।
চোখের সামনের মার্কারপ্রতিটা চেকপয়েন্টে, ক্যামেরা থেকে। মার্কারটা পড়লে বোঝা যায় রোবটের তুলনায় সেটা কোথায়, তাই বিচার চাওয়ার আগে সেটাকে ছবির মাঝখানে আনতে পারো।

রুলবুক শুধু বলে, চেকপয়েন্টের অবস্থান আর দিক “নিজে থেকেই দেওয়া হয়”; API কলগুলো কীভাবে করতে হয়, তা ব্যাখ্যা করে প্রোগ্রামিং ম্যানুয়াল (৬.৩.১ আর ৬.৩.২ অংশ)। ৭ম Kibo-RPC-তে ব্যবহার হয় Int-Ball2, NASA-র Astrobee নয়; Astrobee উড়েছিল আগের আসরগুলোতে।

মার্কারগুলো কোথায়

SAIBO দেয়াল (−y) EPS2 দেয়াল (+y) ডকের দিক এয়ারলকের দিক ডক (শুরু) 1, 7 2 3 4 5 6 8 9 10 11 12 x (এয়ারলকের দিকে) y দেয়ালে ছাদে মেঝেতে
স্কেচ ২। ওপর থেকে দেখা Kibo, রুলবুকের মার্কার টেবিল থেকে আঁকা (শুধু x আর y; উচ্চতা টেবিলে আছে)। ১ আর ৭ নম্বর মার্কার একই দেয়ালে, একটা আরেকটার ওপরে।
মার্কারের টেবিল (রুলবুকের টেবিল ২.২.২-২)
মার্কারযার গায়েঅবস্থান x, y, z (মি)দিক x, y, z, w
1SAIBO1.451, −1.001, 0.681−0.707, 0, 0, 0.707
2RYUTAI2.973, −1.001, 0.718−0.707, 0, 0, 0.707
3MSPR_13.313, −1.001, 0.523−0.707, 0, 0, 0.707
4MSPR_24.181, −1.001, 0.523−0.707, 0, 0, 0.707
5RMS_Console5.754, −1.001, 0.838−0.707, 0, 0, 0.707
6EPS11.895, −0.282, −0.2080, 0, 0.707, −0.707
7MELFI11.451, −1.001, 0.372−0.707, 0, 0, 0.707
8EPS2_24.779, 0.112, 1.884−0.707, 0.707, 0, 0
9EPS2_12.066, 1.046, −0.0140, 0.707, −0.707, 0
10ECLSS_TCS25.851, 0.010, 1.884−0.707, 0.707, 0, 0
11Airlock7.195, 0.363, 1.2300.5, 0.5, −0.5, −0.5
12Bay0_Closeout_Panel0.000, −0.059, −0.102−0.5, 0.5, −0.5, 0.5
শুরুDocking Station0.200, 0.000, 0.0000, 0, 0, 1

রুলবুক অবস্থানগুলো দেয় ডকিং স্টেশনকে মূলবিন্দু ধরে; প্রোগ্রামিং ম্যানুয়াল এই ফ্রেমকে বলে iss_body। কোয়াটারনিয়ন লেখা হয় x, y, z, w ক্রমে।

৪. চেকপয়েন্ট পার হওয়া

আগে যা জানা দরকারডিগ্রি আর রোল: স্থানাঙ্ক ও ঘূর্ণনের ৪ আর ৬ নম্বর পাঠ।
সহজ কথায়বন্ধুর ছবি তোলার কথা ভাবো। ভালো ছবির জন্য তিনটা জিনিস লাগে: ঠিক দূরত্বে দাঁড়ানো, বন্ধুকে ছবির মাঝখানে রাখা, আর ক্যামেরা সোজা রাখা (কাত না করা)। চেকপয়েন্টেও ঠিক এই তিনটাই দেখা হয়!

প্রতিটা চেকপয়েন্টে বিচারক একসঙ্গে তিনটা জিনিস দেখে। প্রতিটা পায় একটা লেভেল: Lv1 (কোনোমতে ভেতরে) থেকে Lv3 (খুব কাছে)।

① অবস্থান

CP Lv3 Lv2 Lv1 d ০.১ · ০.২ · ০.৩ মি

② মার্কার মাঝখানে

৩০° দৃষ্টিরেখা মার্কার θ θ ≤ ১০° · ২০° · ৩০°

③ রোল

ক্যামেরার ছবি রোল দৃষ্টিরেখা বরাবর ঘোরা, লক্ষ্য থেকে ≤ ১০° · ২০° · ৩০°
স্কেচ ৩। তিনটা শর্ত। ① চেকপয়েন্টের কেন্দ্র থেকে দূরত্ব। ② ক্যামেরা যেদিকে তাক করা আর মার্কার যেখানে আছে, এই দুইয়ের মধ্যের কোণ, যাতে মার্কারটা ছবির মাঝখানের কাছে থাকে। ③ চেকপয়েন্টের দিকের তুলনায় রোবট তার দৃষ্টিরেখা বরাবর কতটা ঘুরে আছে। সংখ্যাগুলো প্রোগ্রামিং ম্যানুয়ালের নমুনা থেকে নেওয়া Lv3 · Lv2 · Lv1-এর সীমা; আসল সীমা তোমার প্রোগ্রাম পড়বে /mission/get_checkpoints থেকে।
অবস্থানমার্কার মাঝখানেরোলফলাফল
Lv3Lv2Lv3পার হয় Lv2-এ, তিনটার মধ্যে যেটা সবচেয়ে কম
বাইরেLv3Lv3কোনো পয়েন্ট নেই একটা শর্তও সীমার বাইরে থাকলে চেকপয়েন্ট বাতিল

এগুলো রুলবুকেরই উদাহরণ (২.৩.২ অংশ)।

আরেকটা উদাহরণ, ধাপে ধাপে: রোবট চেকপয়েন্টের কেন্দ্র থেকে ০.১৫ মি দূরে, মার্কারটা ছবির মাঝখান থেকে ৮° সরে, আর রোল মিলছে না ২৫°।

  1. অবস্থান: ০.১৫ মি, যেটা ০.২-এর মধ্যে কিন্তু ০.১-এর বেশি, তাই Lv2।
  2. মাঝখানে রাখা: ৮°, যেটা ১০°-এর মধ্যে, তাই Lv3।
  3. রোল: ২৫°, যেটা ৩০°-এর মধ্যে কিন্তু ২০°-এর বেশি, তাই Lv1।
  4. সবচেয়ে কম Lv1, তাই চেকপয়েন্ট পার হলো Lv1-এ। রোলটা ঠিক করলে লেভেল বাড়বে!
নিজেকে যাচাই করো
দূরত্ব ০.০৫ মি, মাঝখান থেকে ১৫°, রোল ৫°। কোন লেভেল?

দূরত্ব Lv3, মাঝখানে রাখা Lv2 (১৫° হলো ২০°-এর মধ্যে), রোল Lv3। সবচেয়ে কম Lv2, তাই Lv2।

রোবট ঠিক জায়গায় পৌঁছাল, কিন্তু /event/checkpoint_passed পাঠাল না। পার হলো?

না। বিচার চাইতেই হবে; শুধু পৌঁছালে গোনা হয় না।

৫. স্কোর

সহজ কথায়তিনটা জিনিস স্কোর বাড়ায়: কতগুলো চেকপয়েন্ট পার হলে আর কত উঁচু লেভেলে, গোলে পৌঁছালে কি না, আর কত তাড়াতাড়ি শেষ করলে। তাড়াতাড়ি শেষ করলে একটা “গুণক” পাওয়া যায়, যেটা দিয়ে পয়েন্ট গুণ হয়ে বেড়ে যায়।
স্কোর = (Pt_check-এর যোগফল + Pt_goal) × Mag_clear Pt_check: পার হওয়া প্রতিটা চেকপয়েন্টের পয়েন্ট, লেভেল অনুযায়ী · Pt_goal: সময়ের মধ্যে সব চেকপয়েন্ট পার হয়ে গোলে পৌঁছানোর পয়েন্ট · Mag_clear: সময়ের গুণক, সর্বোচ্চ মোটামুটি ২×
সর্বোচ্চ প্রায় ২× ১× রিপোর্ট পাঠানোর সময় হাতে থাকা সময় → Mag_clear
স্কেচ ৪। রিপোর্টের সময় হাতে যত বেশি সময় থাকে, গুণক তত বড়। রুলবুক ঠিক বক্ররেখাটা প্রকাশ করেনি, তাই এখানকার আকারটা শুধুই অনুমান।

উদাহরণ (সংখ্যাগুলো বানানো, শুধু বোঝার জন্য): তোমার চেকপয়েন্ট আর গোল মিলিয়ে পয়েন্ট ৫০, আর তাড়াতাড়ি শেষ করায় গুণক ১.৫। তাহলে স্কোর = ৫০ × ১.৫ = ৭৫।

৬. দশটা রান, একটা গড়

  1. তুমি একটা প্রোগ্রাম জমা দাওপ্রতিবার জমায় সুযোগ একটাই।
  2. JAXA-র ওয়েব সার্ভার সেটা ১০ বার চালায়প্রতিটা রানে চেকপয়েন্ট আর বাধাবিঘ্ন এলোমেলোভাবে আলাদা।
  3. তোমার স্কোর হলো গড়১০টা রানের গড় দিয়েই র‍্যাংকিং ঠিক হয়।
স্কেচ ৫। ভাগ্য ভালো বা খারাপ রানগুলো গড়ে কাটাকাটি হয়ে যায় (রুলবুক ২.২.৫)। যে প্রোগ্রাম শুধু একটা চেকপয়েন্ট লেআউটে কাজ করে, তার গড় খারাপ আসবে, তাই চেকপয়েন্টগুলো রান চলার সময়েই পড়ে নাও।

উদাহরণ (বানানো সংখ্যা): দল ক-এর প্রোগ্রাম ৯ বার ৮০ পেল, কিন্তু একবার আটকে গিয়ে ০। গড় = (৯ × ৮০ + ০) ÷ ১০ = ৭২। দল খ-এর প্রোগ্রাম প্রতিবার ৭৫ পেল, গড় ৭৫। একবারের ভুলের জন্য দল ক হেরে গেল! তাই প্রোগ্রাম এমন হতে হবে, যেটা প্রতিবার নির্ভরযোগ্যভাবে চলে।

নিজেকে যাচাই করো
৫টা রানে স্কোর ৬০, ৭০, ৮০, ৯০, ১০০ হলে গড় কত?

(৬০ + ৭০ + ৮০ + ৯০ + ১০০) ÷ ৫ = ৪০০ ÷ ৫ = ৮০।

৭. তারিখ আর জমা দেওয়া

  1. রাউন্ডের আগে ওয়েব সিমুলেটরে “Preliminary” নামে একটা সিমুলেটর যোগ হয়। তোমার প্রোগ্রাম সেটায় চালাও।
  2. RESULTS পাতায় এমন একটা Preliminary রান বাছো যার স্ট্যাটাস FINISHED, তারপর SUBMIT চাপো।
  3. মত বদলালে CANCEL চেপে আরেকটা জমা দাও। শেষ সময় পেরোলে দুটো বোতামই আর কাজ করে না।

যে রানের স্ট্যাটাস FAILED, সেটা জমা দেওয়া যায় না। একটাও FINISHED রান না থাকলে অংশই নিতে পারবে না, তাই আগেভাগে পরীক্ষা করে নাও।

৮. ISS-এ ফাইনাল রাউন্ড

৯. যে শব্দগুলো জানা দরকার

শব্দমানে
IB2Int-Ball2, রোবটটা। প্রাথমিক রাউন্ডে একটা সিমুলেটর, ফাইনালে আসল রোবট।
Kibo (JEM)ISS-এ জাপানের পরীক্ষাগার মডিউল (Japanese Experiment Module)।
Dock Stationযেখান থেকে IB2 শুরু করে। Release মানে সেটা ছেড়ে বেরোনো; রিলিজ শেষ হলে টাইমার শুরু হয়।
Mission Start / FinishStart: রিলিজ শেষ, টাইমার চলছে। 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), রেডিওর মতো সবসময় সম্প্রচার হয়।

১০. কাজের চক্র

আগে যা জানা দরকারপ্রোগ্রামিংয়ের শব্দগুলো।
  1. প্রস্তুতিUbuntu সেট আপ করো (লোকাল সিমুলেটরের জন্য Docker-ও)।
  2. ফাইলগুলো নাওসিমুলেটরের রিসোর্স ডাউনলোড করো।
  3. লেখোটেমপ্লেট প্রোগ্রামটা বদলাও।
  4. সিমুলেট করোওয়েব বা লোকাল সিমুলেটরে চালাও।
  5. যাচাই করোলগ আর ফলাফল পড়ো।
  6. ঠিক করোপ্রোগ্রাম বদলে আবার চালাও।
↺ ভরসা করার মতো না হওয়া পর্যন্ত ৪ থেকে ৬ নম্বর ধাপ বারবার করো
স্কেচ ৬। প্রোগ্রাম যেভাবে বানাবে (প্রোগ্রামিং ম্যানুয়াল ১.২)।

১১. প্রস্তুতি

আগে যা জানা দরকারUbuntu আর টার্মিনাল কী (শব্দগুলো)। এই অংশটা কম্পিউটার সেট আপ করার; বড় কারও সাহায্য নিলে ভালো।
ন্যূনতমযা থাকা ভালো
OSUbuntu 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/-এ

ওয়েব সিমুলেটর

  1. Kibo-RPC ওয়েবসাইটে লগইন করে SIMULATION খোলো।
  2. YourSourceCode.tar.gz টেনে এনে ছাড়ো, Simulator Level আর Version বাছো, একটা মেমো লেখো, তারপর START SIMULATION চাপো।
  3. স্ট্যাটাসে 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-এ সেটা অন্যরকম আচরণ করতে পারে। চূড়ান্ত সংস্করণ সবসময় ওয়েব সিমুলেটরে পরীক্ষা করো।

১৪. ফলাফল পড়া

{ "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" } ] } }

প্রোগ্রামিং ম্যানুয়ালের উদাহরণ থেকে ছোট করা (টাইমস্ট্যাম্প বাদ দিয়ে)।

১৫. টেমপ্লেট প্রোগ্রাম যেভাবে চলে

আগে যা জানা দরকারসার্ভিস, অ্যাকশন, টপিক আর JSON (শব্দগুলো), আর পোজ ও কোয়াটারনিয়ন (স্থানাঙ্ক ও ঘূর্ণনের ৮ নম্বর পাঠ)।
  1. চালু হওয়া (__init__)ক্লায়েন্টগুলো বানায়, /ib2_user/start-এ সাবস্ক্রাইব করে, /ib2_user/stop সার্ভ করে আর /ib2_user/ready = True সেট করে। এই তিনটা কখনো সরাবে না।
  2. শুরুর সংকেত (__callback_start)তোমার প্রোগ্রাম “তৈরি” জানালে তবেই /ib2_user/start আসে। একটা গার্ড-চেক খেয়াল রাখে, যাতে এটা দুবার শুরু না হয়।
  3. মিশন শুরু/event/mission_start কল করো।
  4. USER EDIT AREA: তোমার পরিকল্পনা/mission/get_checkpoints থেকে চেকপয়েন্টগুলো নাও। প্রতিটার জন্য: /ctl/command দিয়ে সেখানে যাও, মার্কার মাঝখানে আর স্থির আছে কি না দেখো, তারপর /event/checkpoint_passed দিয়ে বিচার চাও।
  5. মিশন শেষগোলে পৌঁছে /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)
{ "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_checkpointsServiceএই রানের চেকপয়েন্টগুলো আনে (JSON)
/event/mission_startServiceজানায় যে মিশন শুরু হয়েছে
/event/checkpoint_passedActionবিচারককে এখনই একটা চেকপয়েন্ট যাচাই করতে বলে (goal: checkpoint_id)
/event/mission_finishedServiceমিশন শেষের রিপোর্ট
/sensor_fusion/navigationTopicরোবট কোথায় আছে: অবস্থান, দিক, বেগ
/ctl/commandActionকোনো পোজে যাওয়া, রোবটের সাপেক্ষে সরা, বা থামা
/ctl/wrenchTopicসরাসরি বল আর টর্ক দিয়ে ঠেলা (অ্যাডভান্সড)
/ctl/statusTopicরোবটের নিয়ন্ত্রণের এখনকার অবস্থা
/camera_main/image_rawTopicক্যামেরার ছবি
/camera_main/camera_infoTopicক্যামেরার সংখ্যাগুলো: K (ফোকাল লেংথ আর কেন্দ্র) আর D (বিকৃতি)
/ib2_user/startTopicশুরুর সংকেত (আবশ্যিক, টেমপ্লেটে আগেই আছে)
/ib2_user/stopServiceথামার অনুরোধ (আবশ্যিক, টেমপ্লেটে আগেই আছে)
/ib2_user/readyParameterপ্রোগ্রাম তৈরি হলে true করে দাও (আবশ্যিক)

সার্ভিস একটা অনুরোধের উত্তর দেয়; অ্যাকশন সময়সাপেক্ষ কাজের জন্য, যেমন চলাফেরা (কানেক্ট করো, goal পাঠাও, ফলের জন্য অপেক্ষা করো); টপিক অনবরত ডেটা পাঠায়। অ্যাকশনে সবসময় একটা টাইমআউট আর বাতিল করার উপায় রাখো।

১৭. রোবট চালানো

আগে যা জানা দরকারঅ্যাকশন (শব্দগুলো), Kibo-র ফ্রেম আর রোবটের নিজের ফ্রেম (পাঠ ৩, পাঠ ৫), কোয়াটারনিয়ন (পাঠ ৮)।
সহজ কথায়রোবটকে চালাতে তুমি বলো “এই পোজে যাও” (অবস্থান আর দিক), তারপর অপেক্ষা করো কাজটা ঠিকঠাক হলো কি না। ঠিক না হলে কী করবে, সেটাও প্রোগ্রামে লিখে রাখতে হয়।

/ctl/command-এ একটা লক্ষ্য পোজ আর ধরনসহ CtlCommandGoal পাঠাও:

ধরনলক্ষ্য
MOVE_TO_ABSOLUTE_TARGETKibo-র ভেতরে একটা অবস্থান আর দিক (frame_id = iss_body)
MOVE_TO_RELATIVE_TARGETরোবট এখন যেখানে আছে, তার সাপেক্ষে একটা অবস্থান আর দিক (frame_id = body)
STOP_MOVINGকিছু না (শূন্য পাঠাও)। রোবট গতি কমিয়ে স্থির হয়ে থাকে।

১৮. AR মার্কার পড়া

আগে যা জানা দরকারAR মার্কার কী (রোবটের পাতা, অংশ ৩), আর রোবটের নিজের অক্ষ (স্থানাঙ্ক ও ঘূর্ণনের ৫ নম্বর পাঠ)।
সহজ কথায়ক্যামেরার ছবিতে প্রোগ্রাম মার্কারটা খুঁজে বের করে, তার নম্বর পড়ে, আর হিসাব করে মার্কারটা কত দূরে আর কোন দিকে। এর জন্য OpenCV নামে ছবি নিয়ে কাজ করার একটা তৈরি লাইব্রেরি ব্যবহার হয়।
  1. ধূসরক্যামেরার ছবিকে গ্রেস্কেলে বদলাও।
  2. প্রস্তুতি4×4 ডিকশনারি আর ডিটেক্টরের সেটিংস বানাও।
  3. খোঁজোdetectMarkers প্রতিটা ID আর তার ৪টা কোণের পিক্সেল খুঁজে বের করে।
  4. পোজ০.০২ মি, K আর D দিয়ে estimatePoseSingleMarkers চালালে পাবে rvec আর tvec।
  5. যাচাইকয়েকটা ফ্রেম ধরে দূরত্ব, দিক আর স্থিরতা দেখো।
স্কেচ ৯। মার্কার খুঁজে বের করা আর সেটা কোথায় আছে তা হিসাব করা (প্রোগ্রামিং ম্যানুয়াল ৫.১৩.২)।
Int-Ball2 (বডি) X সামনে Z ওপরে Y বাঁয়ে (তোমার দিকে) ক্যামেরা, ০.১৪ মি কেন্দ্রের সামনে ক্যামেরা (OpenCV) ছবি X Y X ডানে · Y নিচে Z লেন্স থেকে বাইরে (⊗) tvec: মার্কারের কেন্দ্র, মিটারে, ক্যামেরার এই অক্ষগুলোতে
স্কেচ ১০। দুই সেট অক্ষ। ক্যামেরা তাকিয়ে থাকে রোবটের সামনের দিকে (বডির X)। rvec আর tvec মার্কারকে বর্ণনা করে ক্যামেরার অক্ষে; body বা iss_body ফ্রেমে ব্যবহার করতে প্রোগ্রামিং ম্যানুয়ালে দেওয়া ক্যামেরা বসানোর অবস্থান আর দিক দিয়ে রূপান্তর করো। ছবি সোজা থাকলে (ছবির ওপরের দিক রোবটের ওপরের দিকে), tvec = (tx, ty, tz) হলে বডি ফ্রেমে মার্কারটা থাকে (০.১৪ + tz, −tx, −ty)-এ।

ডিকশনারি, মার্কারের ID, বাহুর দৈর্ঘ্য, K বা D ভুল হলে মার্কার হয়তো খুঁজে পাওয়া যাবে, কিন্তু দূরত্ব আর কোণ ভুল আসবে।

১৯. নিরাপদ প্রোগ্রাম লেখা

সহজ কথায়প্রোগ্রাম যেন কখনো আটকে না যায়, আর কিছু ভুল হলে যেন বুদ্ধি খাটিয়ে সামলায়, যেমন কোনো উত্তর না এলে চিরকাল অপেক্ষা না করে একটা সময় পরে অন্য কিছু করা।

প্রোগ্রামিং ম্যানুয়াল এ নিয়ে পুরো একটা অধ্যায় লিখেছে, কারণ প্রোগ্রাম আটকে গেলে রানটাই নষ্ট হয়, আর ISS-এ তার প্রভাব রোবটের ওপরও পড়তে পারে।

যখন এটা ঘটেতখন এটা করো
কোনো সার্ভিস পাওয়া যাচ্ছে না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 থেকে পড়তেই হবে।

JAXA-র ৭ম Kibo-RPC রুলবুক (v1.1) আর প্রোগ্রামিং ম্যানুয়ালের (v1.0) অনানুষ্ঠানিক সারাংশ, শিক্ষার্থীদের সুবিধার জন্য লেখা। স্কেচগুলো সহজ করে আঁকা, JAXA-র ছবি নয়। এটা JAXA বা UNOOSA-র সঙ্গে যুক্ত নয়, তাদের অনুমোদিতও নয়। কোনো সন্দেহ হলে অফিশিয়াল ডকুমেন্টগুলোই ঠিক।
অবাণিজ্যিক কাজে বিনামূল্যে ব্যবহার করা যাবে; বাণিজ্যিক ব্যবহারে লিখিত অনুমতি লাগবে (PolyForm Noncommercial লাইসেন্স)। এই সাইট নাম-পরিচয় ছাড়া শুধু ব্যবহারের হিসাব রাখে: কোনো কুকি নেই, ব্যক্তিগত কিছু নেই।
ihashib

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.

Read this firstThe robots page, and lessons 1 to 6 of Coordinates and rotations (positions, degrees and roll).
How to read this pageIf you're new, just read Part 1 (1 to 9): that's the whole game. When you start writing your program, read Part 2; it begins by explaining the programming words you'll need. Every part starts by saying what to read first.
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

In simple wordsYou and your team write a program. The program tells a robot on the space station where to go and what to look at. The team whose robot does the job most accurately and quickly wins.

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 →

Who can take part

From the 7th Kibo-RPC Guidebook, sections 3.1, 3.2 and 3.4.

2. How a game runs

In simple wordsThe robot leaves its "home" (the dock), goes to a few places and points its camera at the marker at each one, then goes to the last place and says "job done". All within 5 minutes.
  1. UndockIB2 leaves the Dock Station by itself. The 5-minute timer starts.
  2. Get the checkpointsRead their positions and attitudes, which are given to your program automatically.
  3. Fly a good routeVisit the checkpoints in an efficient order.
  4. Read each AR markerHold the required position and attitude at each checkpoint.
  5. Goal and reportReach the Goal CheckPoint and send the mission completion report.
Sketch 1. The game in five steps (Rulebook 2.2.1 and 2.2.3). The report must be sent within the 5 minutes.

3. What you're told, and what you aren't

Known before the runRandom each runNever 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
New words
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:

The AR markersBefore the run, from the Rulebook. Every marker's position, attitude and ID is in the Rulebook's table (below), so you can write them into your program.
The checkpointsWhen the run starts, from /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.
The robot itselfAll the time, from /sensor_fusion/navigation. IB2's own position, attitude and speed in Kibo.
The marker in viewAt each checkpoint, from the camera. Reading the marker tells you where it is relative to the robot, so you can centre it before asking the judge.

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

SAIBO wall (−y) EPS2 wall (+y) Dock end Airlock end Dock (start) 1, 7 2 3 4 5 6 8 9 10 11 12 x (toward the airlock) y on a wall on the overhead on the deck
Sketch 2. Kibo seen from overhead, drawn from the Rulebook's marker table (x and y only; heights are in the table). Markers 1 and 7 are on the same wall, one above the other.
The marker table (Rulebook table 2.2.2-2)
MarkerTargetPosition x, y, z (m)Attitude x, y, z, w
1SAIBO1.451, −1.001, 0.681−0.707, 0, 0, 0.707
2RYUTAI2.973, −1.001, 0.718−0.707, 0, 0, 0.707
3MSPR_13.313, −1.001, 0.523−0.707, 0, 0, 0.707
4MSPR_24.181, −1.001, 0.523−0.707, 0, 0, 0.707
5RMS_Console5.754, −1.001, 0.838−0.707, 0, 0, 0.707
6EPS11.895, −0.282, −0.2080, 0, 0.707, −0.707
7MELFI11.451, −1.001, 0.372−0.707, 0, 0, 0.707
8EPS2_24.779, 0.112, 1.884−0.707, 0.707, 0, 0
9EPS2_12.066, 1.046, −0.0140, 0.707, −0.707, 0
10ECLSS_TCS25.851, 0.010, 1.884−0.707, 0.707, 0, 0
11Airlock7.195, 0.363, 1.2300.5, 0.5, −0.5, −0.5
12Bay0_Closeout_Panel0.000, −0.059, −0.102−0.5, 0.5, −0.5, 0.5
StartDocking Station0.200, 0.000, 0.0000, 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

Read this firstDegrees and roll: lessons 4 and 6 of Coordinates and rotations.
In simple wordsThink of taking a photo of a friend. A good photo needs three things: standing at the right distance, keeping your friend in the middle of the picture, and holding the camera straight (not tilted). A checkpoint checks exactly these three!

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

CP Lv3 Lv2 Lv1 d 0.1 · 0.2 · 0.3 m

② Marker centred

30° line of sight marker θ θ ≤ 10° · 20° · 30°

③ Roll

camera picture roll turn about the line of sight, ≤ 10° · 20° · 30° from the target
Sketch 3. The three conditions. ① Distance from the checkpoint centre. ② The angle between where the camera points and where the marker is, so the marker sits near the middle of the picture. ③ How far the robot is turned about its line of sight compared with the checkpoint's attitude. The numbers are the Lv3 · Lv2 · Lv1 limits from the sample in the Programming Manual; your program reads the real limits from /mission/get_checkpoints.
PositionMarker centredRollResult
Lv3Lv2Lv3Passes at Lv2, the lowest of the three
outLv3Lv3no 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.

  1. Position: 0.15 m is within 0.2 but more than 0.1, so Lv2.
  2. Centring: 8° is within 10°, so Lv3.
  3. Roll: 25° is within 30° but more than 20°, so Lv1.
  4. The lowest is Lv1, so the checkpoint passes at Lv1. Fix the roll and the level goes up!
Check yourself
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

In simple wordsThree things raise your score: how many checkpoints you pass and at what level, whether you reach the goal, and how quickly you finish. Finishing quickly earns a "multiplier" that your points are multiplied by.
Score = (Pt_check total + Pt_goal) × Mag_clear Pt_check: points for each checkpoint passed, by level · Pt_goal: for passing every checkpoint and reaching the goal in time · Mag_clear: the time multiplier, up to about 2×
up to about 2× 1× time left when you send the report → Mag_clear
Sketch 4. More time left at the report gives a bigger multiplier. The Rulebook doesn't publish the exact curve, so the shape here is only a guess.

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

  1. You submit one programOnly one chance per submission.
  2. JAXA's web server runs it 10 timesEach run has different random checkpoints and disturbances.
  3. Your score is the averageThe average of the 10 runs sets your ranking.
Sketch 5. Lucky or unlucky runs even out (Rulebook 2.2.5). A program that only works for one checkpoint layout will average badly, so read the checkpoints at run time.

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.

Check yourself
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

  1. Before the round, the web simulator gets a "Preliminary" simulator. Run your program in it.
  2. On the RESULTS screen, pick a Preliminary run whose status is FINISHED and press SUBMIT.
  3. 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

9. Words to know

WordMeaning
IB2Int-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 StationWhere IB2 starts. Release means leaving it; the timer starts when release is complete.
Mission Start / FinishStart: release is complete and the timer runs. Finish: the time limit ends or the completion report starts. Nothing after Finish scores.
CheckPointA sphere placed relative to an AR marker, with three margin levels.
GoalPointWhere IB2 goes after the checkpoints and sends the completion report.
AR markerA printed square code. Kibo has 12 of them; checkpoints are built around them.
t, time_maxThe time left at the report, and the time limit, in seconds.
Pt_check, Pt_goal, Pt_allCheckpoint points, goal points, and their sum.
Mag_clearThe time multiplier (up to about 2×). Score = Pt_all × Mag_clear.
Microgravity moduleThe disturbance in the simulator.

Part 2 · The Programming Manual

Before you start: programming words, made simple

Read this firstPart 1. You can read this part even if you've never programmed.

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 krpc and pressing Enter makes a folder called krpc.
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.
question? answer! service working on it… check in · cancel action topic
A service: ask a question and wait for the answer. An action: a job that takes time; you can check on it or cancel it. A topic: a broadcast, like the radio.
Check yourself
"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

Read this firstThe programming words.
  1. PrepareSet up Ubuntu (and Docker for the local simulator).
  2. Get the filesDownload the simulator resources.
  3. WriteEdit the template program.
  4. SimulateRun it in the web or local simulator.
  5. CheckRead the logs and the results.
  6. FixChange the program and go again.
↺ repeat steps 4 to 6 until it's reliable
Sketch 6. How you build a program (Programming Manual 1.2).

11. Setting up

Read this firstWhat Ubuntu and the terminal are (the words). This part is about setting up a computer; it's a good idea to get help from someone older.
MinimumRecommended
OSUbuntu 20.04 or laterUbuntu 24.04 (on WSL2 for Windows 11)
CPU4 cores6 cores
Memory8 GB16 GB
Free storage20 GB40 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
Sketch 7. The folder after unpacking (Programming Manual 2.5.2), shortened. Only 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 simulatorLocal simulator
Use it forChecks before submitting, judged in the same setup as everyoneTrying things and debugging while you develop
Runs onJAXA's server, on ARM64 like the real robot (a Jetson TX2)Your PC in Docker, usually x86_64
AccountIssued when your country or region's contact registers youNot needed
LogsFrom the web dashboardIn share/logs/

Web simulator

  1. Log in on the Kibo-RPC website and open SIMULATION.
  2. Drop in YourSourceCode.tar.gz, choose the Simulator Level and Version, add a memo, and press START SIMULATION.
  3. 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

{ "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

Read this firstServices, actions, topics and JSON (the words), and poses and quaternions (lesson 8 of Coordinates and rotations).
  1. Start-up (__init__)Creates the clients, subscribes to /ib2_user/start, serves /ib2_user/stop and sets /ib2_user/ready = True. Never remove these three.
  2. The start signal (__callback_start)/ib2_user/start only arrives once your program says it's ready. A guard stops it starting twice.
  3. Mission startCall /event/mission_start.
  4. 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.
  5. Mission finishedCall /event/mission_finished at the goal. This is the completion report.
Sketch 8. The template's flow (Programming Manual 6.4). /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)
{ "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

In simple wordsThis table is like the buttons on a remote control: each name is one thing the robot can do. The name is on the left, its kind (service, action, topic) in the middle, and what it does on the right.
NameKindWhat it does
/mission/get_checkpointsServiceGets the checkpoints for this run (JSON)
/event/mission_startServiceSays the mission has started
/event/checkpoint_passedActionAsks the judge to check a checkpoint now (goal: checkpoint_id)
/event/mission_finishedServiceThe mission completion report
/sensor_fusion/navigationTopicWhere the robot is: position, attitude, velocity
/ctl/commandActionMove to a pose, move relative to the robot, or stop
/ctl/wrenchTopicPush with a force and torque directly (advanced)
/ctl/statusTopicThe robot's current control state
/camera_main/image_rawTopicThe camera picture
/camera_main/camera_infoTopicThe camera's numbers: K (focal length and centre) and D (distortion)
/ib2_user/startTopicThe start signal (required, already in the template)
/ib2_user/stopServiceA stop request (required, already in the template)
/ib2_user/readyParameterSet 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

Read this firstActions (the words), Kibo's frame and the robot's own frame (lesson 3, lesson 5), and quaternions (lesson 8).
In simple wordsTo move the robot you say "go to this pose" (a position and an orientation), then wait to see whether it worked. Your program also has to say what to do if it didn't.

Send a CtlCommandGoal with a target pose and a type to /ctl/command:

TypeTarget
MOVE_TO_ABSOLUTE_TARGETA position and attitude in Kibo (frame_id = iss_body)
MOVE_TO_RELATIVE_TARGETA position and attitude relative to the robot now (frame_id = body)
STOP_MOVINGNone (send zeros). The robot slows down and holds still.

18. Reading AR markers

Read this firstWhat an AR marker is (the robots page, part 3), and the robot's own axes (lesson 5 of Coordinates and rotations).
In simple wordsThe program finds the marker in the camera picture, reads its number, and works out how far away it is and which way it faces. It uses OpenCV, a ready-made library for working with pictures.
  1. GreyConvert the camera picture to greyscale.
  2. Set upMake the 4×4 dictionary and the detector settings.
  3. DetectdetectMarkers finds each ID and its 4 corner pixels.
  4. PoseestimatePoseSingleMarkers with 0.02 m, K and D gives rvec and tvec.
  5. CheckDistance, attitude and steadiness over a few frames.
Sketch 9. Detecting a marker and working out where it is (Programming Manual 5.13.2).
Int-Ball2 (body) X front Z top Y left (toward you) camera, 0.14 m ahead of the centre Camera (OpenCV) the picture X Y X right · Y down Z out of the lens (⊗) tvec: the marker's centre, in metres, in these camera axes
Sketch 10. Two sets of axes. The camera looks out of the robot's front (body X). 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

In simple wordsYour program must never get stuck, and when something goes wrong it should cope sensibly: for example, if no answer comes, don't wait forever; after a while, do something else.

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.

When this happensDo this
A service isn't availableWait with wait_for_service(), and stop if it takes too long
An action server isn't availableWait with wait_for_server(); don't start until it's there
A move failsDon't ask for the checkpoint; log why
An action times outCall cancel_goal() and make sure it stopped
checkpoint_passed failsLog the result; don't send the same request forever
No camera picture or camera_infoAfter a timeout, log it and skip the camera step
/ib2_user/stop arrivesCancel 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 rulesTry it in the sandbox
Three conditions, lowest level countsThe 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 cameraThe Camera view draws the 10°, 20° and 30° rings
Roll about the line of sightThe ⟲ and ⟳ buttons (Q / E when driving)
Reading AR markersThe Camera view reads real 4×4 markers and shows rvec and tvec; the robot has to be close
The template programThe Code tab writes your route as Python or C++; the AR-reading code is yours to write
The time bonusThe 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.