Я могу запрограммировать на 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)
В конце концов, было некоторое время для кодирования гексапода, чтобы заставить его ходить и чувствовать препятствия. Щелкните здесь, чтобы скачать исходный код.
Если вы новичок и хотите использовать MRDS для управления роботом Lego Mindstorms NXT 2.0, посмотрите мои предыдущие сообщения:
1. Узнайте, как создать сервис DSS и использовать редактор манифеста
2. Управляемый робот Lego использующий MRDS
В этой статье я собираюсь объяснить, как создать полностью управляемого работа из набора Lego Mindstorms NXT 2.0 (со смонтированной на нем камерой), используя Microsoft Robotics Developer Studio (MRDS). Предыдущая статья «Microsoft Robotics Service for LEGO NXT 2.0» будет полезной, если вам не приходилось создавать сервисы с помощью Studio.
Давайте посмотрим на пару фрагментов исходных кодов проекта Hexapod;
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 и эти публикации могут стать прекрасной отправной точкой для вашего увлечения…
Вот несколько ссылок, которые могут оказаться интересными: