-
Вы в очереди
Трансляция
Готов к работе
Roborubiks
🎯 Управление гранями:
◀ Левая - против часовой (')
Правая ▶ - по часовой
📝 Путь (нотация)
📜 История ходов
История пуста
📨 Ответы от робота:
Ожидание ответов...
🚀 Быстрый старт
💡 Два способа подключения:
1. WebSocket напрямую: ws://130.49.143.78:8765
2. HTTP API через сервер: https://roborubiks.ru/api/command
1. WebSocket напрямую: ws://130.49.143.78:8765
2. HTTP API через сервер: https://roborubiks.ru/api/command
📋 Команды API
WS
rotate
Вращение указанной грани
face: U, D, F, B, L, R, BL, BR, FL, FR, DL, DR
direction: "cw" (по часовой) или "ccw" (против)
direction: "cw" (по часовой) или "ccw" (против)
WS
execute_path
Выполнить последовательность ходов
path: "U.F.R'.BL"
WS
get_state
Получить текущее состояние
WS
get_history
Получить историю ходов
WS
get_path
Получить текущий и обратный путь
WS
go_to_init
Вернуться в начальное состояние
🐍 Пример на Python
import asyncio
import websockets
import json
async def control_megaminx():
uri = "ws://130.49.143.78:8765"
async with websockets.connect(uri) as ws:
# Вращение верхней грани
await ws.send(json.dumps({
"command": "rotate",
"params": {"face": "U", "direction": "cw"}
}))
response = await ws.recv()
print(f"Response: {response}")
# Получить историю
await ws.send(json.dumps({
"command": "get_history",
"params": {}
}))
history = await ws.recv()
print(f"History: {history}")
# Вернуться в начало
await ws.send(json.dumps({
"command": "go_to_init",
"params": {}
}))
result = await ws.recv()
print(f"Result: {result}")
asyncio.run(control_megaminx())
📜 JavaScript (Browser)
// Прямое WebSocket подключение
const ws = new WebSocket('ws://130.49.143.78:8765');
ws.onopen = () => {
console.log('Connected to Megaminx');
// Вращение грани
ws.send(JSON.stringify({
command: 'rotate',
params: { face: 'U', direction: 'cw' }
}));
};
ws.onmessage = (event) => {
const response = JSON.parse(event.data);
console.log('Response:', response);
};
// Через HTTP API сервера
async function sendCommand(command, params = {}) {
const response = await fetch('https://roborubiks.ru/api/command', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ command, params })
});
return await response.json();
}
💻 Node.js
const WebSocket = require('ws');
const ws = new WebSocket('ws://130.49.143.78:8765');
ws.on('open', () => {
console.log('Connected');
// Выполнить последовательность
ws.send(JSON.stringify({
command: 'execute_path',
params: { path: 'U.F.R\' BL' }
}));
});
ws.on('message', (data) => {
const response = JSON.parse(data);
console.log('Response:', response);
});
🐚 cURL
# Проверить статус
curl https://roborubiks.ru/health
# Отправить команду через HTTP API
curl -X POST https://roborubiks.ru/api/command \\
-H "Content-Type: application/json" \\
-d '{"command":"rotate","params":{"face":"U","direction":"cw"}}'
# Получить состояние
curl https://roborubiks.ru/api/state
⚙️ Конфигурация граней
💡 Здесь можно настроить маппинг граней на цвета и motor_id.
Измените значения в объекте
Измените значения в объекте
faceConfig и обновите страницу.
Текущая конфигурация:
Формат конфигурации:
Каждая грань имеет:
Каждая грань имеет:
code- буквенное обозначение (U, D, F...)name- название граниcolor- CSS цвет (hex, rgb, название)motor_id- ID мотора для робота
// КОНФИГУРАЦИЯ ГРАНЕЙ МЕГАМИНКСА
// Измените значения color и motor_id под вашу реализацию
const faceConfig = [
{ code: 'U', name: 'Верх', color: '#00FFFF', motor_id: 1 }, // Белый
{ code: 'D', name: 'Низ', color: '#FFFF00', motor_id: 2 }, // Жёлтый
{ code: 'F', name: 'Перед', color: '#FF0000', motor_id: 3 }, // Красный
{ code: 'B', name: 'Зад', color: '#FFA500', motor_id: 4 }, // Оранжевый
{ code: 'L', name: 'Лево', color: '#800080', motor_id: 5 }, // Фиолетовый
{ code: 'R', name: 'Право', color: '#008000', motor_id: 6 }, // Зелёный
{ code: 'BL', name: 'Зад-Лево', color: '#FF69B4', motor_id: 7 }, // Розовый
{ code: 'BR', name: 'Зад-Право', color: '#00BFFF', motor_id: 8 }, // Голубой
{ code: 'FL', name: 'Перед-Лево', color: '#8B4513', motor_id: 9 }, // Коричневый
{ code: 'FR', name: 'Перед-Право', color: '#4B0082', motor_id: 10 }, // Индиго
{ code: 'DL', name: 'Низ-Лево', color: '#C0C0C0', motor_id: 11 }, // Серебристый
{ code: 'DR', name: 'Низ-Право', color: '#00FF7F', motor_id: 12 } // Салатовый
];