Воспоминания Fischertechnik и Lego 19.12.2024
Всем привет!
Когда приехал в Германию узнал о роботе Fischertechnik. Но тогда когда я узнал о роботе, робот стоял бешеных каких-то денег. Нужно было покупать раздельно 4 вещи - аккумулятор, софт Robo Pro, конструктор, и главный модуль контроллер Fischertechnik TXT. Сейчас два - конструктор Fischertechnik и аккумулятор, а софт Robo Pro скачиваешь с сайте производителя. В колледже часть класса программировало на Lego Mindstorms NXT, а часть Fischertechnik Robotics TXT Discovery Set. Мне достался Lego Mindstorms NXT, я делал первый проект нужно проехать 5 полосок и остановится, а второй мой проект нужно сортировать цветные шарики.
Когда я учился в колледже пол класса такого программировала робота:
Мне купили по дешёвки такой набор, с устаревшим модулем, poдитeли знали что я не буду собирать робота. Допустим на 30 лет мне подарили Lego Mindstorms NXT 2.0, и он лежит в шкафу пылится. Я хотел с дeвyшкoй подружиться, т.к. она с ума сходит по программированию роботов. Тут в Германии девушки иногда любят мужскую профессию. Просто у меня всё теряется, и я вижу плохо т.к. на один глаз зрение 0.2, на другой 0.5. Допустим я потерял детали как-то лего, так и не нашёл. На НГ/рождество мне подарили такой конструктор-робот:
Кстати есть переходник из Fischertechnik на лего см.:
Вот что можно сделать из Lego целый завод:
А на Fischertechnik такое:
Короче чтобы робот проехал 5 полосок и остановился код такой см. https://programming.mybb.ru/viewtopic.php?id=85:
#define MAX 4 // Максимально количество полосок #define THRESHOLD 40 // Порог task main() { int count = 0; // Количество полосок SetSensorLight(IN_3); // Port 3, датчик освещения OnFwd(OUT_AB, 75); // Запускаем моторо A и B со скоростью 75 while(1) { until(Sensor(IN_3) > THRESHOLD); // Пока не привысет порог count++; // Увеличиваем количество полосок until(Sensor(IN_3) < THRESHOLD); // Пока не меньше порога if(count >= MAX) break; // Если количество полосок больше или равно максимальному значению, то останавливаем цикл } PlayTone(1000, 1000); // Включаем писк Wait(1000); // Ждём 1000 мсек. PlayTone(0, 0); // Выключаем писк Off(OUT_AB); // Останавливаем моторы A и B }
Я его программировал bricxx:
Компилятор бесплатный https://bricxcc.sourceforge.net/, кстати я пытался ещё на Java программировать https://lejos.sourceforge.io/
А вот так работает в симуляторе, я симулятор настроил:
Мы в колледже программировали робота Lego спомощью американской программы RobotC.
Сейчас я кушаю швейцарский сыр, покушаю, продолжу.
Короче продолжим дальше. Те, кто купил Visual Studio 2008 Standard/Professional, или скачал Visual Studio 2008 Express Edition, и успел скачать Microsoft Robitcs Studio 4.0, могли программировать роботов на C# или VB.NET, и VPL.
На Visual C# или VB.NET писали вот такую службу:
Вот код:
using System; using System.Collections.Generic; using System.ComponentModel; using Microsoft.Ccr.Core; using Microsoft.Dss.Core.Attributes; using Microsoft.Dss.ServiceModel.Dssp; using Microsoft.Dss.ServiceModel.DsspServiceBase; using W3C.Soap; using submgr = Microsoft.Dss.Services.SubscriptionManager; namespace DSSService1 { [Contract(Contract.Identifier)] [DisplayName("DSSService1")] [Description("DSSService1 service (no description provided)")] class DSSService1Service : DsspServiceBase { /// <summary> /// Service state /// </summary> [ServiceState] DSSService1State _state = new DSSService1State(); /// <summary> /// Main service port /// </summary> [ServicePort("/DSSService1", AllowMultipleInstances = true)] _mainPort = new DSSService1Operations(); [SubscriptionManagerPartner] submgr.SubscriptionManagerPort _submgrPort = new submgr.SubscriptionManagerPort(); /// <summary> /// Service constructor /// </summary> public DSSService1Service(DsspServiceCreationPort creationPort) : base(creationPort) { } /// <summary> /// Service start /// </summary> protected override void Start() { // // Add service specific initialization here // base.Start(); } /// <summary> /// Handles Subscribe messages /// </summary> /// <param name="subscribe">the subscribe request</param> [ServiceHandler] public void SubscribeHandler(Subscribe subscribe) { SubscribeHelper(_submgrPort, subscribe.Body, subscribe.ResponsePort); } } }
И на VPL: