roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 09:22

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Cyclops(Циклоп) mini-ATX робот
СообщениеДобавлено: 16 авг 2012, 05:01 
Не в сети
Аватара пользователя

Зарегистрирован: 20 май 2009, 00:54
Сообщения: 25
Откуда: Ставрополь
прог. языки: С++, PHP, JavaScript
Привет всем!
Недавно приступил с созданию автономной части программы для робота, ну или по крайне мере начал над ней думать.
Хочу расширить основную С++ программу каким нить скриптовым языком. У вот мои претенденты:
    Python
    JavaScript(V8)
    Lua
    Ruby
Я больше склоняюсь к JavaSctipt, так как JS довольна популярный язык программирования, и я довольно хорошо с ним знаком. Но проблема в том, что он не имеет практически ни каких модулей например как Python (включая OpenCV).
Было бы интересно выслушать ваше мнение по поводу какой язык использовать.
Спасибо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Cyclops(Циклоп) mini-ATX робот
СообщениеДобавлено: 16 авг 2012, 05:31 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
JS вроде надо сразу в аутсайдеры.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Cyclops(Циклоп) mini-ATX робот
СообщениеДобавлено: 16 авг 2012, 06:08 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
js очень спорный выбор. сначала я бы поставил вопрос немного иначе. зачем это всё нужно? использовать интерпретатор или аккуратненько в укромное место положить компилятор и при необходимости использовать (откомпилировал, запустил)? или поглубже копнуть в сторону динамического/метапрограммирования?
мог бы порекомендовать c#, но .net слегка коварный (как минимум проблемы с мультиплатфоренностью) и его нет в вашем списке, т.е. не факт, что с ним знакомы. а так возможности у c#/.net достаточно впечатляющие. у питона и явы насколько я знаю возможности не сильно отличаются, небольшой +- в деталях и подходах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Cyclops(Циклоп) mini-ATX робот
СообщениеДобавлено: 16 авг 2012, 07:57 
Не в сети
Аватара пользователя

Зарегистрирован: 20 май 2009, 00:54
Сообщения: 25
Откуда: Ставрополь
прог. языки: С++, PHP, JavaScript
Angel71 писал(а):
сначала я бы поставил вопрос немного иначе. зачем это всё нужно?

Я ставлю перед собой задачу максимально снизить сложность и время разработки программ для робота, а так же их передачи с компьютера пользователя на робота, и их запуск. По моему мнению использование интерпретатора на роботе может дать нам все это. Например, для того что бы написать простой скрипт на JS не нужно ни каких специальных программ на компьютере пользователя, достаточно открыть блокнот. Запуск скрипта тоже не требует ни каких усилий и к тому же не даже не нужно перезагружать основную программу, что берет время. Так же меня прельщает возможность изменять программу во время ее исполнения без особого труда(ну это на будущее).

Angel71 писал(а):
использовать интерпретатор или аккуратненько в укромное место положить компилятор и при необходимости использовать (откомпилировал, запустил)? или поглубже копнуть в сторону динамического/метапрограммирования?

Я забыл про это метод, думаю он может пригодиться.

=DeaD= писал(а):
JS вроде надо сразу в аутсайдеры.

Какой вы считаете наиболее подходящим?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Cyclops(Циклоп) mini-ATX робот
СообщениеДобавлено: 16 авг 2012, 12:35 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Из оставшихся - не знаю, вроде все 3 как-то в робототехнике используются. Надо смотреть уже конкретные задачи. А вот JS не видел в робототехнических проектах.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Cyclops(Циклоп) mini-ATX робот
СообщениеДобавлено: 16 авг 2012, 21:04 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
про снизить сложность совсем не понял :pardon: или фигня какая-то или я ещё не полностью проснулся и не проникся затеей. время разработки пардон, это в общем случае затея ни о чём. запускаю удалённый рабочий стол, запускаю студию, выбираю проект и запускаю приложение. начинаю тестировать какой-то там новый код, с чего-то там (а хоть с ик пульта) посылаю команду проехать вперёд и потом повернуть. и о ужас, при при повороте мигает не левым, а правым светодиодиком. упс. ставлю бряк, допустим на ф-и получения команд от пульта и на пульте опять клацаю повернуть. и смотрю где тупанул, при получении команд не так код распознал, в коде "мигать" перепутал левый светодиодик с правым или вообще в коде всё правильно, а это при сборке светодиодики местами поменял. что делать, что делать? не перезапускать же программу, там данных с гипотетических датчиков уже прилично накопилось. придётся в коде просто поменять левый с правым, а нужный код всего через несколько строчек. переписал пару строк, нажал f5 и любуешся, как он нужным светодиодиком мигает. силу компиляции на лету без перезапуска приложения уже чуствуете? на всякий другой пример. вот не знаете какие коды с пульта идут, вы этот пульт вообще первый раз в руки взяли. у вас в коде уже есть ф-я обработки команд с пульта, но она пустая. поставили бряк на первой строчке и клац по пультику. "зашли" в ф-ю и начинаете строчка за строчкой код писать и дебаггером командовать "а ну-ка выполни следующую строчку". посмотрели, какие коды каким кнопкам соответствуют и нужный код написали. эксепшин замаячил или компилятор код не смог переварить? вы об этом непременно узнаете и программа не вылетет - просто пока не пофиксите не сможете продолжить. и всё без всяких ненужных выводов нужных данных куда-то там в файлы или ещё куда, что бы их потом как-то просмотреть, затем переписать код, переписать его на вашего робота и т.д. а теперь вопрос с подвохом. у вас интерпретатор на роботе, а вы код ваяете на своёт ноуте, планшете или настольном компе. и каким чудным образом вы будете на этом js код отлаживать? в блокноте? аха. каждый раз смотреть, допустим логи в текстовых файлах с робота? мило. код логирования ещё нужно написать, а может так статься, что этот код в итоге будет или чуть ли не больше всего остального кода или в него будет далеко не всё записываться. не говоря уже о том, что посмотреть значения нужных переменных в определённый момент времени будет мягко говоря затруднительно. тут много вариантов, как можно всё это решить и много моментов, на которых можно лоб расшибить. а с подвохом вопрос, т.к. js js`у рознь.
:roll: к чему же это я про одновременную отладку и написание кода упоминал? :crazy: а, точно! кто сказал, что только студия может на лету текстик в код волшебно превращать или заменять один код другим? ваша программа может таким же чудным образом на лету сама себя менять или динамически подгружаемый плагинчик или вообще другое приложение. запустили на своём роботе программу, а на основной машине клиента из папочки, которая на роботе. и вуаля, сидите и правите код, а ваша софтина на роботе его как нужно переваривает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Cyclops(Циклоп) mini-ATX робот
СообщениеДобавлено: 16 авг 2012, 21:08 
Не в сети
Аватара пользователя

Зарегистрирован: 23 апр 2009, 17:03
Сообщения: 2639
Откуда: Москва, Самара
прог. языки: C#
Дополняя предложение Angel71,
можно написать в блокноте файл c#.
А дальше откомпилировать его в памяти
и выполнить. При этом компилятор прятать не надо,
он в .net framework уже есть (в 3.5 точно есть - проверено).
Установка Visual Studio на конечной машине не требуется :wink:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Cyclops(Циклоп) mini-ATX робот
СообщениеДобавлено: 16 авг 2012, 21:55 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
аха, это из той же оперы. в памяти насколько я помню не компилит (создаётся временный файл на диске, просто всё немного спрятано для удобства), но это кардинально ничего не меняет. можно так:
Код:
/*
@echo off && cls
set WinDirNet=%WinDir%\Microsoft.NET\Framework
IF EXIST "%WinDirNet%\v2.0.50727\csc.exe" set csc="%WinDirNet%\v2.0.50727\csc.exe"
IF EXIST "%WinDirNet%\v3.5\csc.exe" set csc="%WinDirNet%\v3.5\csc.exe"
IF EXIST "%WinDirNet%\v4.0.30319\csc.exe" set csc="%WinDirNet%\v4.0.30319\csc.exe"
%csc% /nologo /out:"%~0.exe" %0
"%~0.exe"
del "%~0.exe"
exit
*/

class HelloWorld
{
static void Main()
{
System.Console.WriteLine("Hello, World!\r\nI am at " + System.Environment.Version);
System.Console.ReadLine();
}
}

или так:
Код:
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using Microsoft.CSharp;

namespace ConsoleCompiler
{
   internal class Program
   {
     private static void Main(string[] args)
     {
       // Source code для компиляции
       string source =
       @"
namespace Foo
{
   public class Bar
   {
     static void Main(string[] args)
     {
       Bar.SayHello();
     }

     public static void SayHello()
     {
       System.Console.WriteLine(""Hello World"");
     }
   }
}
       ";

       // Настройки компиляции
       Dictionary<string, string> providerOptions = new Dictionary<string, string>
         {
           {"CompilerVersion", "v3.5"}
         };
       CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);

       CompilerParameters compilerParams = new CompilerParameters
         {OutputAssembly = "D:\\Foo.EXE", GenerateExecutable = true};

       // Компиляция
       CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source);

       // Выводим информацию об ошибках
       Console.WriteLine("Number of Errors: {0}", results.Errors.Count);
       foreach (CompilerError err in results.Errors)
       {
         Console.WriteLine("ERROR {0}", err.ErrorText);
       }
     }
   }
}

или чуть посложней http://www.gotdotnet.ru/blogs/olegaxenow/6520/
для динамической компиляции и генерации кода в дотнете плюшек много и эти примеры далеко не всё демонстрируют. на скорую руку делаете простенький клиент-сервер и жонглируете как хотите. хоть просто перекомпилируйте и затем перезапускайте приложение, хоть на ходу как в студии отлаживайте и изменяйте код. куда тут варианту "блокнот" тягаться с его целым вагончиком постоянных, никому не нужных телодвижений? :pardon: попыхтеть лучше один раз в самом начале, чем потом постоянно и по чуть-чуть.
ещё пример немного на другую тему. допустим гипотетически мне лень каждый раз делать тонны окошечек для конфига в новом приложении. пишу класс (для наглядности уменьшил, вырезав много буковок и сразу предупреждаю весь код дальше слегка корявый, я пока в том проекте эксперементирую)
Код:
    public class Config : INotifyPropertyChanged
    {
        public string workDir = String.Empty;
        public string workDirInFile = "path.txt";
        public string configFile = "config.xml";

        public class App : INotifyPropertyChanged
        {
            public bool launchAtWindowsStartUp = false;
            public bool showMainWindowAtStart = true;
            public string appName { get; set; }

            private bool _b1 = true;
            private bool _b2 = false;

            public bool b1
            {
                get { return _b1; }
                set
                {
                    if (_b1 != b1)
                    {
                        _b1 = value;
                        NotifyPropertyChanged("b1");
                    }
                }
            }

            public bool b2
            {
                get { return _b2; }
                set
                {
                    if (_b2 != b2)
                    {
                        _b2 = value;
                        NotifyPropertyChanged("b2");
                    }
                }
            }
.......
        }
........
    }

нужно всего-то создать один UserControl или Page или Window и в коде прописать несколько десятков или сот строчек незамысловатого кода. при/после создания экземпляра этого UserControl/Page/Window "пробежались" по полям, свойствам,... класса и добавили слева список разделов конфига, а справа при выборе раздела будет отображаться список (или не список, это как угодно наворачивать можно) параметров. для свойств (ещё есть поля, методы,...) это работает примерно так
Код:
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            PropertyInfo[] properties;
            Type myType = Core.instance.config.app.GetType();
            properties = myType.GetProperties();
            foreach (PropertyInfo pi in properties)
            {
                Type t = pi.PropertyType;
                if (t == typeof(System.Boolean))
                {
                    object o = pi.GetValue(Core.instance.config.app, null);
                    CheckBox c = new CheckBox();
                    c.IsChecked = (bool)o;
                    c.Content = pi.Name;
                    listBox1.Items.Add(c);
                }
            }
        }

если не удалил лишнего при копипасте, то будет выглядеть примерно так
Вложение:
1.jpg
1.jpg [ 21.51 КиБ | Просмотров: 1923 ]

если нужны только паблик или только приват "properties = myType.GetProperties();" меняется на что-то в таком духе "properties = myType.GetProperties(BindingFlags.Public|BindingFlags.Instance);"
в реальном приложении нужно с биндигом визуальных элементов к экземпляру класса разумеется. хотите, там же добавляете валидацию ввода в поля. всё надумано, а я слишком ленив? никто не мешает таким образом прикручивать окна настроек для плагинов к основному приложению. нужно будет только передать ссылку на объект "конфиг", а основная программа уже сама разберётся что где и как отобразить, куда в xml`ке конфига на диске добавить нужный раздел и как с ним потом работать. что можно так сгенерировать условно ограничивается только вашей фантазией и навыками. в дополнение ещё есть атрибуты, с помощью которых можно очень сильно влиять на то, что будет генерироваться. указывать заголовки или подсказки для элементов, указывать какие поля что нужно пропустить при генерации, предоставить данные для автозаполнения всяких выпадающих списков и прочего, что должно сериализоваться при сохранении конфига на диск и т.д. а всего-то нужно один раз написать код генератора. да, есть моменты, а где их нет? или можно динамическую оптимизацию сделать, как в том же коде регулярок. это и многое другое уже идёт "из коробки" :) ловкость рук и никакого мошенничества.
:oops: т.е. хочу чего-нить скриптово-интерпретируемого что бы чтот там быстро и удобно разрабатывать, расширять и непонятно как снижать сложность разработки как по мне совсем не аргумент :pardon: не штырит концепция.
п.с. хотите быстрей, легче, лучше,... ? забудьте про c++ :) основная часть проекта должна быть на питоне, яве, шарпе или других .net языков (больше приемлимых кандидатов для общего случая насколько я знаю пока нет). та часть, в которой нужна будет какая-то сверх модная оптимизация выносится в библиотеки (вот их уже хоть на ++, хоть на асме вояйте). опять же в библиотеках всякие opencv и прочий сторонний код. поступать наоборот это очень дорогое удовольствие.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Cyclops(Циклоп) mini-ATX робот
СообщениеДобавлено: 17 авг 2012, 05:19 
Не в сети
Аватара пользователя

Зарегистрирован: 23 апр 2009, 17:03
Сообщения: 2639
Откуда: Москва, Самара
прог. языки: C#
Продолжая тему поднятую тов. Angel71,
прилагаю законченный проект который компилит в памяти
какую нибудь строку для вычислений и вызывает ее на выполнение
(т.е. это калькулятор, где парсером служит компилятор C#).
Проект для студии 2008
Вместо строки можно компилить конечно любой код
и вызывать сборку на выполнение.


Вложения:
TestCalc.zip [10.71 КиБ]
Скачиваний: 0
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 4 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO