Skip to content

About

Тестовый проект манипулятора для интервью

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Тестовое задание: обратная кинематика многозвенного манипулятора

Описание

WPF-приложение для интерактивной визуализации и решения задачи обратной кинематики (IK) плоского многозвенного манипулятора. Суставы можно перетаскивать мышью; заякоренные суставы удерживаются сегментным решателем IK.

Возможности

  • Перетаскивание сустава левой кнопкой мыши
  • Включение/выключение якоря по правой кнопке мыши
  • Сегментная обратная кинематика с учётом якорей (проксимальные суставы остаются подвижными)
  • Отрисовка в реальном времени через OpenGL (OpenTK GLControl)
  • Таблица координат суставов (A, B, C, …)
  • Локализация UI через Mugen-ресурсы $i18n.*

Управление

Действие Результат
Наведение на сустав Подсветка синим
ЛКМ + перемещение Перетаскивание сустава (оранжево-красный)
ПКМ по суставу Якорь вкл/выкл (тёмно-серая заливка)
Якорь на суставе Этот сустав нельзя тащить; при движении других его позиция удерживается IK

Технологии

  • .NET Framework 4.7.2
  • WPF + WindowsFormsHost / OpenTK.GLControl
  • MugenMvvmToolkit 6.5.0 (MVVM, binding, IoC-модули)
  • Autofac 4.4.0
  • OpenTK 3.1.0 / OpenTK.GLControl 3.1.0
  • MSTest — проект TestInterviewProject.Tests

Структура решения

TestInterviewProject.sln
├── TestInterviewProject/          # WPF-приложение
│   ├── Models/                    # Chain, Joint, Point2D, TargetJointPose
│   ├── Infrastructure/            # IK, якоря, константы, DI-модуль
│   │   └── Impl/                  # KinematicsService, DefaultChainBuilder
│   ├── Localization/              # ILocalizationManager, MugenLocalizationManager
│   ├── Controls/                  # WorkPlane (OpenGL)
│   ├── ViewModels/                # Main, WorkPlane, Report
│   ├── Views/                     # XAML
│   ├── Messages/                  # ChainPositionsChanged
│   └── Properties/                # Resources.resx (строки UI)
└── TestInterviewProject.Tests/    # Юнит-тесты якорей и кинематики

Кинематика

Прямая кинематика

Позиции суставов считаются по звеньям Chain (Length, Coordinate):

  • звено 0 — вертикальный подъём от базы и смещение по X;
  • остальные звенья — поворот на угол Coordinate.

Обратная кинематика (сегментная)

  1. Фиксируются мировые позиции всех якорей.
  2. Строится список контрольных точек: якоря ∪ целевой сустав (по возрастанию индекса).
  3. Для каждого сегмента «корень → контрольная точка» выполняется градиентный IK (те же веса, что в KinematicsConstants).
  4. Для цели drag учитывается досягаемость и запас длины до ближайшего дистального якоря.
  5. До двух внешних проходов по сегментам для стабилизации якорей.

Константы: KinematicsConstants (ConvergenceEpsilon, MaxIkIterations, IkOuterPasses, веса градиента и т.д.).

Начальная конфигурация

Шесть звеньев (InitialConfiguration.Chains):

№ Coordinate Length
1 0.1 0.05
2 0.5 0.3
3 0.0 0.3
4 0.0 0.1
5 0.0 0.1
6 0.0 0.1

Визуальные индикаторы

  • Чёрные точки — обычные суставы
  • Синяя — сустав под курсором
  • Оранжево-красная — перетаскиваемый сустав
  • Тёмно-серая — заякоренный сустав
  • Чёрные линии — звенья; каретка у базы

Требования

  • Windows 7 или новее
  • .NET Framework 4.7.2 или новее
  • Видеокарта с поддержкой OpenGL

Сборка и запуск

  1. Откройте TestInterviewProject.sln в Visual Studio.
  2. Восстановите NuGet-пакеты (для тестов — dotnet restore по TestInterviewProject.Tests).
  3. Соберите решение (Build Solution).
  4. Запустите проект TestInterviewProject.

Запуск тестов:

dotnet test TestInterviewProject.Tests\TestInterviewProject.Tests.csproj

Зависимости (NuGet)

  • Autofac 4.4.0
  • MugenMvvmToolkit 6.5.0 (+ AutofacContainer, Binding, WPF, WPF.Binding)
  • OpenTK 3.1.0, OpenTK.GLControl 3.1.0
  • Для тестов: Microsoft.NET.Test.Sdk, MSTest.TestAdapter/TestFramework

Архитектура

Паттерн MVVM (MugenMvvmToolkit) + DI (Autofac через TestAppModule):

  • Models — данные кинематики и отрисовки
  • Infrastructure — FK/IK, правила якорей, стартовая конфигурация
  • ViewModels — состояние UI и команды
  • Views / Controls — XAML и OpenGL-плоскость
  • Localization — строки через $i18n и Properties.Resources

Лицензия

См. файл LICENSE в корне репозитория.

About

Тестовый проект манипулятора для интервью

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages