Udostępnij za pośrednictwem


Я могу запрограммировать на C# гексапода из Lego

Грэг Дункан

Что более занимательно чем Lego? Lego для роботов? Lego для роботов, которые программируются на С#!

Я не много писал в этом блоге о Microsoft Robotics Developer Studio, но эта тема содержит довольно занимательные вещи. С их помощью можно управлять не только реальными роботами, вроде Lego Mindstorms NXT, но и виртуальными. Да, можно запрограммировать робота сегодня, не имея его воплощения в металле (конечно, кроме вашего компьютера). Тем не менее, сегодняшнее сообщение показывает пару примеров разработки для роботов «реального мира», благодаря Lego Mindstorms NXT, Microsoft Robotics Developer Studio и веб-блога Гокулната (Gokulnath's weBLOG).

Гексапод из Lego, управляемый с помощью Microsoft Robotics Developer Studio (MRDS)

В конце концов, было некоторое время для кодирования гексапода, чтобы заставить его ходить и чувствовать препятствия. Щелкните здесь, чтобы скачать исходный код.

clip_image002

Если вы новичок и хотите использовать MRDS для управления роботом Lego Mindstorms NXT 2.0, посмотрите мои предыдущие сообщения:

1. Узнайте, как создать сервис DSS и использовать редактор манифеста
2. Управляемый робот Lego использующий MRDS

Мой робот из Lego

В этой статье я собираюсь объяснить, как создать полностью управляемого работа из набора Lego Mindstorms NXT 2.0 (со смонтированной на нем камерой), используя Microsoft Robotics Developer Studio (MRDS). Предыдущая статья «Microsoft Robotics Service for LEGO NXT 2.0» будет полезной, если вам не приходилось создавать сервисы с помощью Studio.

clip_image004

clip_image006

Давайте посмотрим на пару фрагментов исходных кодов проекта Hexapod;

clip_image008

 private IEnumerator<ITask> DoStart()
{
    var ultraSonicSubscribe = this._nxtUltrasonicSensorPort.Subscribe(_nxtUltrasonicSensorNotify);
    var touchSensor1Subscribe = this._nxtTouchSensor1Port.Subscribe(_nxtTouchSensor1Notify);
    var touchSensor2Subscribe = this._nxtTouchSensor2Port.Subscribe(_nxtTouchSensor2Notify);
    yield return (Choice)ultraSonicSubscribe;
    yield return (Choice)touchSensor1Subscribe;
    yield return (Choice)touchSensor1Subscribe;
     // Activate independent tasks
    Activate<ITask>(
        Arbiter.Receive<sonarsensor.SonarSensorUpdate>(true,_nxtUltrasonicSensorNotify, SonarSensorUpdateHandler),
        Arbiter.Receive<touchsensor.TouchSensorUpdate>(true,_nxtTouchSensor1Notify, TouchSensor1UpdateHandler),
        Arbiter.Receive<touchsensor.TouchSensorUpdate>(true, _nxtTouchSensor2Notify, TouchSensor2UpdateHandler)
    );
     // Start operation handlers and insert into directory service.
    StartHandlers();
}
 private void SonarSensorUpdateHandler(sonarsensor.SonarSensorUpdate updateReadings)
{
     if (updateReadings.Body.Distance <= 25 && isRotata)
     {
         RotateMotor(Direction.Back);
     }
     else if (updateReadings.Body.Distance > 25 && isRotata)
     {
         RotateMotor(Direction.Front);
     }
}
 private void TouchSensor1UpdateHandler(touchsensor.TouchSensorUpdate sensorReadings)
{
     if (sensorReadings.Body.TouchSensorOn)
     {
         RotateMotor(Direction.Front);
      }
}

Если вам интересна робототехника и у вас есть соответствующее аппаратное обеспечение (или нет), MRDS и эти публикации могут стать прекрасной отправной точкой для вашего увлечения…

Вот несколько ссылок, которые могут оказаться интересными: