MS Robotics Studio - вопросы установки и настройки

Обсуждаем рождающиеся мысли и результаты экспериментов.

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение =DeaD= » 14 дек 2008, 21:19

Вот тут товарищ сделал робопса и сэмулировал его под MSRS: http://robotsaustralia.blogspot.com/
Его пост на сайте social.msdn'a: http://social.msdn.microsoft.com/forums ... c1055c9fa/

Добавлено спустя 29 секунд:
2SMT: А я и предлагал в MSRS стандартные бамперы юзать, TSOP - это ведь и есть безконтактный бампер :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение EdGull » 14 дек 2008, 21:23

=DeaD= писал(а):2SMT: Ужос, а не проще включить выключатель с резисторами, на который усики подцепить из скажем трубочек для коктейлей?

его даже можно или вместо или паралельно фототранзистору ципануть... :wink:
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение SMT » 14 дек 2008, 21:25

2DeaD:ну и хорошо. я думал хочешь новый сенсор замутить сразу.
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение =DeaD= » 14 дек 2008, 22:44

2SMT: Сижу перечитываю основы опять про сервисы, понял что там упустил немало. Что за директивы в коде встречаются типа "[DataContract]" и всяких других - [DataMember], [DisplayName("XServiceTutorial1")] - это к компиляции относится или для всяких отображения и генерации хелпа используется?

Добавлено спустя 15 минут 20 секунд:
И еще вопрос - в первом же туториале есть файл имяпроекта1Types.cs и есть файл имяпроекта1.cs - как эти файлы между собой соотносятся? Где написано что в последнем используется первый? В с++ были директивы #include, а тут как?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение SMT » 14 дек 2008, 23:13

2DeaD:
про [DataContract] и [DataMember] написал здесь: viewtopic.php?f=35&t=4929&start=30#p73526
[DisplayName("XServiceTutorial1")] - это для отображения, например - в "Microsoft DSS - Control Panel"?

файл имяпроекта1Types.cs содержит набор классов с типами, используемыми классом сервиса, который находится в файлеимяпроекта1.cs. Вообще-то все классы можно "свалить" в один файл, хотя обычно для класса отводится отдельный файл, а можно и больше (partial директива)
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение =DeaD= » 14 дек 2008, 23:23

2SMT: Да, по ходу я не только туториал мимо ушей прохлопал, так еще и твой пост :) про DataContract вкурил и про DataMember тоже.
А в целом где почитать про механизм аттрибутов такой в C#? по каким словам?

имяпроекта1Types.cs содержит набор классов с типами, используемыми классом сервиса, который находится в файле имяпроекта1.cs

Это я понял - где указывается что эти файлы так связаны - не знаешь? В компиляторе прошито, что кроме файла имяпроекта.cs надо попробовать перед этим скомпилировать файл имяпроектаTypes.cs?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение SMT » 14 дек 2008, 23:43

ты компилятором без студии чтоли компилишь? ну я не крут, я в тупую билд нажимаю - студия сама все делает.
Если нажать ребилд на проекте, в окне Output все ее волшебство и всплывает. Например вот какой строчкой компилится SimpleDashboard (смотри в конец строки)
Код: Выделить всё
C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /unsafe- /checked- /nowarn:1701,1702 /nostdlib- /warn:4 /baseaddress:285212672 /define:DEBUG;TRACE;INSTRUMENTED /reference:"C:\Users\sam\Microsoft Robotics Dev Studio 2008\bin\GameController.Y2006.M09.Proxy.dll" /reference:C:\Windows\assembly\GAC_MSIL\Microsoft.Ccr.Adapters.WinForms\2.0.831.0__31bf3856ad364e35\Microsoft.Ccr.Adapters.WinForms.dll /reference:C:\Windows\assembly\GAC_MSIL\Microsoft.Ccr.Core\2.0.831.0__31bf3856ad364e35\Microsoft.Ccr.Core.dll /reference:C:\Windows\assembly\GAC_MSIL\Microsoft.Dss.Base\2.0.831.0__31bf3856ad364e35\Microsoft.Dss.Base.dll /reference:C:\Windows\assembly\GAC_MSIL\Microsoft.Dss.Runtime\2.0.831.0__31bf3856ad364e35\Microsoft.Dss.Runtime.dll /reference:C:\Windows\assembly\GAC_MSIL\Microsoft.Dss.Runtime.Proxy\2.0.831.0__31bf3856ad364e35\Microsoft.Dss.Runtime.Proxy.dll /reference:"C:\Users\sam\Microsoft Robotics Dev Studio 2008\bin\RoboticsCommon.Proxy.dll" /reference:"C:\Users\sam\Microsoft Robotics Dev Studio 2008\bin\SickLRF.Y2005.M12.proxy.dll" /reference:"C:\Users\sam\Microsoft Robotics Dev Studio 2008\bin\SimulationCommon.Proxy.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /debug:full /filealign:4096 /keyfile:"C:\Users\sam\Microsoft Robotics Dev Studio 2008\samples\mrisamples.snk" /optimize- /out:obj\Debug\SimpleDashboard.Y2006.M01.dll /resource:obj\Debug\Microsoft.Robotics.Services.SimpleDashboard.DriveControl.resources /target:library /warnaserror+ AssemblyInfo.cs DriveControl.cs DriveControl.Designer.cs SimpleDashboard.cs SimpleDashboardState.cs SimpleDashboardTypes.cs
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение =DeaD= » 14 дек 2008, 23:47

2SMT: Нет, мне бы всё понятно если бы это были независимые файлы, но ведь в имяфайла.cs используется имяфайлаTypes.cs - значит компилятор как-то догадывается что надо одно из другого искать? Или он все файлы скидывает и компилирует кучей? Но всё равно ведь порядок какой-то должен быть? Нельзя вроде ссылаться на тип который определён ниже - как он догадывается что всё связано? :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение SMT » 15 дек 2008, 00:50

Компиляторы - это целый мир такой загадочный для меня. Они сначала строят лексические деревья, находят типы, от которых зависят другие типы, и если их нет - ругаются. Файлы в данном случае лишь для удобства твоего - в проекте посмотреть визуально, можно их даже на папки раскидать. С использованием Resharper-а в общем то это уже только традиция теперь - плагин сам все находит по запросу, строит деревья проекта и солюшна тоже. Для меня это темный лес, в общем, хотя можно разобраться, при желании и необходимости.

Добавлено спустя 55 минут 31 секунду:
Подключив к Миниботу тсопы, установил в него программу EdGull'а по приему команд ик-пульта RC5 (от телевизора Витязь). По ZigBee открыл канал связи на COM (через USB переходник). В код сервиса SimulationTutorial2 добавил работу с COM портом и распознавание команд ик-пульта. На switch повесил управление симулируемым роботом Пионер. Теперь можно пультом гонять его по симуляции :)
Код работы с портом в сервисе выглядит так (файл SimulationTutorial2.cs в проекте SimulationTutorial2.csproj):
Код: Выделить всё
        protected override void Start()
        {
            base.Start();
            // Orient sim camera view point
            SetupCamera();
            // Add objects (entities) in our simulated world
            PopulateWorld();
            //SpawnIterator(testPlayback);
            InitSerialPort();
        }

        private void InitSerialPort(){
            _serialPort = new SerialPort("COM4", 19200, Parity.None, 8, StopBits.One);
            _serialPort.Open();
            _serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
        }

        void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e){
            var str = _serialPort.ReadExisting();
            var matchCollection = Regex.Matches(str, @"Command - (?<command>\d+)");
            if (matchCollection.Count == 0)
                return;
            string command = matchCollection[0].Groups["command"].Value;
            const string TURN_RIGHT = "17";
            const string TURN_LEFT = "16";
            const string RUN_FORWARD = "32";
            const string RUN_BACKWARD = "33";
            const string STOP = "59";
            switch (command){
                case TURN_RIGHT:
                    TurnRobotBy(30f);
                    break;
                case TURN_LEFT:
                    TurnRobotBy(-30f);
                    break;
                case RUN_FORWARD:
                    DriveBy(50f, 50f);
                    break;
                case RUN_BACKWARD:
                    DriveBy(-50f, -50f);
                    break;
                case STOP:
                    DriveBy(0, 0);
                    break;
                default:
                    break;
            }
        }

        private void DriveBy(float leftWheel, float rightWheel){
            _robotBaseEntity.SetMotorTorque(leftWheel, rightWheel);
        }

        private void TurnRobotBy(float degrees){
            _robotBaseEntity.RotateDegrees(degrees, 100f, new SuccessFailurePort() );
        }




видео получилось так-себе, но если лучше сделать - большой файл получится. Да и так наверное понятно - это самому погонять интересно.
забавно как робот находит лазерным радаром (LaserFinder-ом) стол и резко останавливается, почти опрокидываясь вперед. Над роботом "летает" окошко с изображением с его камеры, как я понял. Эту "картинку" с его камеры можно установить вместо основного окна симуляции.
На видео ноут с подключенным к нему по USB ZigBee модулем (питается от батареек пока - нужно в USB-донгл оформить), рядом прозрачная коробка - кубикс для бумаг, который как раз немного больше Минибота. Внутри плата Минибота и от нее в разные стороны (пока что) кабели с телефонными и сетевыми разъемами и подключенными к ним датчиками. Среди датчиков - пара TSOP-ов, один из которых принимает сигналы с пульта. Как видно из истории редактирования этого сообщения - на организацию такого подключения ушло совсем немного времени (включая написание нескольких строчек кода на Bascom-е для Минибота и на C# для обработки команд в проекте симуляции). Но было прикольно :crazy:
Последний раз редактировалось SMT 04 фев 2009, 13:56, всего редактировалось 1 раз.
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение =DeaD= » 16 дек 2008, 00:36

2SMT: Я попробую сейчас разобрать как они собирают робота:
Код: Выделить всё
#region Lego NXT
        void AddLegoNxtRobot(Vector3 position)
        {
            LegoNXTTribot robotBaseEntity = CreateLegoNxtMotorBase(ref position);

            EntityNameSprite nameSprite = new EntityNameSprite(
                0.25f, 0.0625f, 256, 64, SpritePivotType.Center, new Vector3(0, 0.25f, 0), "Courier", 14);
            nameSprite.State.Name = GetStringWithUniquePostfix("nameSprite");

            robotBaseEntity.InsertEntity(nameSprite);

            // Create bumper array entity and start simulated bumper service
            BumperArrayEntity bumperArray = CreateLegoNxtBumper();

            // insert as child of motor base
            robotBaseEntity.InsertEntity(bumperArray);

            // Finaly insert the motor base and its two children
            // to the simulation
            SimulationEngine.GlobalInstancePort.Insert(robotBaseEntity);
        }


        private LegoNXTTribot CreateLegoNxtMotorBase(ref Vector3 position)
        {
            // use supplied entity that creates a motor base
            // with 2 active wheels and one caster
            LegoNXTTribot robotBaseEntity = new LegoNXTTribot(position);

            // specify mesh.
            robotBaseEntity.State.Assets.Mesh = "LegoNXTTribot.bos";
            robotBaseEntity.WheelMesh = "LegoNXTTribotWheel.bos";

            // the name below must match manifest
            robotBaseEntity.State.Name = GetStringWithUniquePostfix("LegoNXTMotorBase");

            // Start simulated arcos motor service
            drive.Contract.CreateService(
                ConstructorPort, "http://localhost/" + robotBaseEntity.State.Name,
                Microsoft.Robotics.Simulation.Partners.CreateEntityPartner(
                    "http://localhost/" + robotBaseEntity.State.Name)
            );
            return robotBaseEntity;
        }

        private BumperArrayEntity CreateLegoNxtBumper()
        {
            // create a little bumper shape that models the NXT bumper
            BoxShape frontBumper = new BoxShape(
                new BoxShapeProperties(
                    "front", 0.001f, //mass
                    new Pose(new Vector3(0, 0.063f, -0.09f)), //position
                    new Vector3(0.023f, 0.023f, 0.045f)));

            // The physics engine will issue contact notifications only
            // if we enable them per shape
            frontBumper.State.EnableContactNotifications = true;

            BumperArrayEntity
                bumperArray = new BumperArrayEntity(frontBumper);
            // entity name, must match manifest partner name
            bumperArray.State.Name = GetStringWithUniquePostfix("LegoNXTBumpers");

            // start simulated bumper service
            bumper.Contract.CreateService(
                ConstructorPort, "http://localhost/" + bumperArray.State.Name,
                Microsoft.Robotics.Simulation.Partners.CreateEntityPartner(
                "http://localhost/" + bumperArray.State.Name));
            return bumperArray;
        }

        #endregion


Короче там есть 3 функции:
Код: Выделить всё
        void AddLegoNxtRobot(Vector3 position)
        private LegoNXTTribot CreateLegoNxtMotorBase(ref Vector3 position)
        private BumperArrayEntity CreateLegoNxtBumper()


всё внутри более-менее понятно кроме строки:
Код: Выделить всё
            // use supplied entity that creates a motor base
            // with 2 active wheels and one caster
            LegoNXTTribot robotBaseEntity = new LegoNXTTribot(position);


Тут они совершенно по хамски где-то вытаскивают готовую модель LegoNXT-робота.

Добавлено спустя 15 минут 18 секунд:
Статейку нашел как модель робота запихивать в MSRS (правда там опять исходный класс IRobotCreate юзается):

Добавлено спустя 34 минуты 21 секунду:
В общем понял что IRobotCreate и всякие там LegoNXTTribot - это просто конкретизации класса "DifferentialDriveEntity" и по этим ключевым словам немедленно нашел то что нужно - туториал, как добавить своего робота в MSRS: http://msdn.microsoft.com/ru-ru/magazine/cc546547.aspx

Добавлено спустя 2 часа 17 минут 24 секунды:
2SMT: Чего-то всё расползается :) надо пожалуй планчик наметить:
1. Накидать модель робота с 3D-моделью и проверить её в симуляторе;
2. Сделать сервис реализующий связь с железом которое снаружи и подцепиться к нему из робостудии каким-нибудь DashBoard'ом;

Как тебе такой план?

Тогда сможем сделать небольшой туториал на русском и выложить его в вику, чтобы все могли юзать, а с выходом минибота 2 можно будет подцепить его к робостудии и распространить симулятор минибота 2, чтобы все могли под него писать, даже не имея его на руках.
Вложения
Creation of a 3D Robot Model and its Integration to a MSRS.doc
(1.23 МиБ) Скачиваний: 345
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение SMT » 16 дек 2008, 00:49

2DeaD:почитал, попробовал чем-нить нарисовать bos файл - точнее сначала obj-файл, чтобы потом сконвертить студийным конвертором.
В основном предлагается в 3D Max рисовать, но у меня его нет.
Год назад пришлось порисовать в SketchUp - все просто и удобно, только с текстурами у них плохо было. Но из него только в Pro версии можно экпортить в obj-файл.
Нашел бесплатный OBJ Exporter на Ruby (встроенном в SketchUp) - конвертит, только похоже что криво. Кстати, поиск по "Skp2Obj" выдает посты о "Skp2Obj.dll mallware".
Поставил бесплатный Blender - штука крутая. Экспортит в obj, и даже mtl-файл рядом кладет как для MSRS рекомендуется. Импортит из obj тоже - можно править, наверное. Разбираться с ней нужно.
В упоминании о SolidWorks рядом примечание, что она в obj не экспортит, но можно экспортировать в VRML, а из него в obj через Blender.
Есть еще несколько "непрямых" путей здесь http://channel9.msdn.com/wiki/simulatio ... tutorials/
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение SMT » 16 дек 2008, 20:06

В триальном 3DMax все рисуется легко и приятно. Ниже пример - как легко нарисовать и изменить робота LegoNXT в симуляторе
Рисуем в 3DMax - можно экспортировать потом по выбранным элементам ("export selected") в obj-файлы
NewNXTBodyIn3DMax.png

конвертируем obj-файл в bos-файл утилитой из папки bin MSRS и кладем bos-файл и файл с расширением mtl (появится вместе с obj-файлом) в папку store/media
изменяем код в SimulationTutorial2.cs примерно так
Код: Выделить всё
        private LegoNXTTribot CreateLegoNxtMotorBase(ref Vector3 position)
        {
            // use supplied entity that creates a motor base
            // with 2 active wheels and one caster
            LegoNXTTribot robotBaseEntity = new LegoNXTTribot(position);

            // specify mesh.
            robotBaseEntity.State.Assets.Mesh = "123.bos";//новый корпус
//            robotBaseEntity.State.Assets.Mesh = "LegoNXTTribot.bos";
            robotBaseEntity.WheelMesh = "123w.bos";//новые "колеса"
//            robotBaseEntity.WheelMesh = "LegoNXTTribotWheel.bos";
...

запускаем симуляцию и видим, что робот слегка изменился :D
NewNXTBody.png
NewNXTBody.png (111.72 КиБ) Просмотров: 2410

и бегает так забавно
NewNXTBody.rar
(939.13 КиБ) Скачиваний: 34
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение =DeaD= » 16 дек 2008, 22:59

Ща попробуем такого минибота подцепить:
Вложения
minibot-3ds.jpg
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение SMT » 16 дек 2008, 23:16

красивый :D
а бамперы где - сломает стол и не заметит :shock:
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: MS Robotics Studio - вопросы установки и настройки

Сообщение =DeaD= » 17 дек 2008, 00:25

Блин, чушь какая-то - не могу его залить в MSRS.

Вот модель какая получилась в 3д-студии:

Добавлено спустя 47 секунд:
А как тут с масштабом быть? Он имеет значение?

Добавлено спустя 29 минут 38 секунд:
Догнал чего не отрисовывалось - теперь отрисовывается, но материалы не цепляются :(
Вложения
minibot-msrs.jpg
minibot-msrs.jpg (55.12 КиБ) Просмотров: 2426
minibot.zip
(24.4 КиБ) Скачиваний: 17
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Пред.След.

Вернуться в Идеи

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 8