Розробка мобільного додатку для керування робототехнікою

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Розробка мобільного додатку для керування робототехнікою
Складний
від 2 тижнів до 3 місяців
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Розробка мобільного додатку для управління робототехнікою

Управління роботом з мобільного пристрою розпадається на кілька принципово різних завдань: телеоперація в реальному часі (джойстик для колісної платформи або маніпулятора), моніторинг стану (заряд, температура, статус задачі), програмування місій (точки маршруту, послідовності pick-and-place), відеотрансляція з камер. Кожна з них предʾявляє різні вимоги до затримки, надійності та стеку технологій.

ROS 2 та rosbridge: стандарт в дослідницькій та промисловій робототехніці

ROS 2 (Robot Operating System) — де-факто стандарт в академічній та все більше в промисловій робототехніці (Universal Robots UR-серія, MiR мобільні платформи, Boston Dynamics Spot SDK). rosbridge_suite забезпечує WebSocket API для взаємодії з ROS-топіками, сервісами та параметрами з будь-якої мови.

class RosbridgeClient {
  late WebSocketChannel _channel;
  final _topicStreams = <String, StreamController<dynamic>>{};
  int _opId = 0;

  Future<void> connect(String url) async {
    _channel = WebSocketChannel.connect(Uri.parse(url));
    _channel.stream.listen(_handleMessage);
  }

  // Підписка на ROS-топік
  Stream<T> subscribe<T>(String topic, String type,
      T Function(Map<String, dynamic>) fromJson) {
    final controller = StreamController<T>.broadcast();
    _topicStreams[topic] = controller as StreamController<dynamic>;

    _channel.sink.add(jsonEncode({
      'op': 'subscribe',
      'topic': topic,
      'type': type,
      'id': 'sub_${_opId++}',
    }));

    return controller.stream.map((data) => fromJson(data as Map<String, dynamic>));
  }

  // Публікація в ROS-топік
  void publish(String topic, String type, Map<String, dynamic> message) {
    _channel.sink.add(jsonEncode({
      'op': 'publish',
      'topic': topic,
      'type': type,
      'msg': message,
    }));
  }

  void _handleMessage(dynamic raw) {
    final msg = jsonDecode(raw as String) as Map<String, dynamic>;
    if (msg['op'] == 'publish') {
      final topic = msg['topic'] as String;
      _topicStreams[topic]?.add(msg['msg']);
    }
  }
}

Телеоперація: джойстик та затримка

Управління колісною платформою через віртуальний джойстик публікує geometry_msgs/Twist в топік /cmd_vel. Критична вимога — затримка. При затримці >200 мс управління стає неком­фортним, >500 мс — небезпечним.

class TeleopController {
  final RosbridgeClient _rosbridge;
  Timer? _publishTimer;

  void startTeleop(Stream<Offset> joystickInput) {
    joystickInput.listen((offset) {
      _currentLinear = offset.dy * MAX_LINEAR_SPEED;   // м/с
      _currentAngular = -offset.dx * MAX_ANGULAR_SPEED; // рад/с
    });

    // Публікуємо Twist з фіксованою частотою 10 Гц
    // Не прив'язуємо до подій джойстика — потрібна рівномірна частота для ROS-контролера
    _publishTimer = Timer.periodic(const Duration(milliseconds: 100), (_) {
      _rosbridge.publish('/cmd_vel', 'geometry_msgs/Twist', {
        'linear': {'x': _currentLinear, 'y': 0.0, 'z': 0.0},
        'angular': {'x': 0.0, 'y': 0.0, 'z': _currentAngular},
      });
    });
  }

  void stopTeleop() {
    _publishTimer?.cancel();
    // Явна зупинка — безпека важливіше
    _rosbridge.publish('/cmd_vel', 'geometry_msgs/Twist', {
      'linear': {'x': 0.0, 'y': 0.0, 'z': 0.0},
      'angular': {'x': 0.0, 'y': 0.0, 'z': 0.0},
    });
  }
}

Watchdog на роботі: якщо /cmd_vel не приходив 0.5 секунди — аварійна зупинка. Це стандартна практика для мобільних платформ. Втрата WiFi або переключення мережі = робот зупиняється сам.

Відеотрансляція: web_video_server або WebRTC

web_video_server — ROS-пакет, стримить топіки sensor_msgs/Image або sensor_msgs/CompressedImage через HTTP MJPEG/h264. Для мобільного клієнта на Flutter:

// MJPEG з web_video_server
Widget buildCameraView(String topic) {
  final url = 'http://$robotIp:8080/stream?topic=$topic&type=mjpeg&quality=70';
  return MjpegStreamView(url: url);  // кастомний віджет з MJPEG-декодером
}

Для затримки <200 мс потрібен WebRTC — пакет webrtc_ros або Janus Gateway. WebRTC дає real-time відео з sub-100 мс затримкою через flutter_webrtc:

class RobotVideoCall {
  late RTCPeerConnection _peerConnection;

  Future<void> startStream() async {
    _peerConnection = await createPeerConnection({
      'iceServers': [{'urls': 'stun:stun.l.google.com:19302'}],
    });

    _peerConnection.onTrack = (RTCTrackEvent event) {
      if (event.track.kind == 'video') {
        _videoRenderer.srcObject = event.streams.first;
      }
    };

    // Сигналізація через rosbridge або окремий WebSocket
    final offer = await _peerConnection.createOffer();
    await _peerConnection.setLocalDescription(offer);
    _signalingChannel.send(offer.sdp);
  }
}

Навігація та waypoints

Для автономної навігації (ROS Navigation Stack, Nav2) — відправка цільової точки через geometry_msgs/PoseStamped в /move_base_simple/goal (ROS 1) або action-сервер /navigate_to_pose (Nav2 в ROS 2):

Future<void> navigateTo(double x, double y, double yaw) async {
  final quaternion = yawToQuaternion(yaw);

  // ROS 2 Nav2 через rosbridge action
  _rosbridge.publish('/goal_pose', 'geometry_msgs/PoseStamped', {
    'header': {
      'frame_id': 'map',
      'stamp': {'sec': DateTime.now().millisecondsSinceEpoch ~/ 1000, 'nanosec': 0},
    },
    'pose': {
      'position': {'x': x, 'y': y, 'z': 0.0},
      'orientation': quaternion,
    },
  });
}

Map<String, double> yawToQuaternion(double yaw) {
  return {
    'x': 0.0, 'y': 0.0,
    'z': sin(yaw / 2),
    'w': cos(yaw / 2),
  };
}

Відображення карти — nav_msgs/OccupancyGrid з топіку /map. Растрова карта (uint8 array, 0=вільно, 100=зайнято, -1=невідомо) конвертується в PNG та рендериться через flutter_map або кастомний CustomPainter.

SDK проприетарних роботів

Boston Dynamics Spot — Spot SDK (Python + gRPC, мобільний клієнт через REST-обёртку). Universal Robots — UR RTDE (Real-Time Data Exchange) для телеметрії, URScript через сокет для команд. Doosan, Kuka — своїх SDK з REST API або Modbus TCP.

Розробка мобільного додатку для управління роботом на ROS 2 з телеоперацією, відеостримингом та навігацією: 12–18 тижнів. Інтеграція з проприетарним SDK конкретного робота оцінюється окремо. Вартість розраховується індивідуально після вивчення архітектури системи.