Raspberry PI 3 + OpenCV + Arduino UNO + ......(поледнее решение и вопрос в последнем сообщении)

Тема в разделе "Флудилка", создана пользователем Igor68, 21 ноя 2016.

  1. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Вот мой арматурчик и охромал на правую переднюю лапку... то есть колёсико.
    Тут колёсико и редуктор... а моторчик раскурочен:
    snapshot15.png
    Редуктор плохо виден, а остатки шнурка от камеры слева. Колёсико так же видно.
    Ну и слева малина 1 в корпусе. С неё все и начиналось. Сейчас она умеет (софт) ВЕБ- сервер... и всё заточено как доступ по I2C,SPI... Далее весёлая троица третьих малин вполне готовых к работе в составе эксперимента. Последняя в чёрном корпусе - третья малина... она рабочая лошадка. И к станкам через неё, тестирование сети, в основном по работе и дома из сумки не вылазит. На кадре нет той малины, у которой на спине ардуина и шилды приводов, а сама при этом на спине у арматурчика... а они все на столе на пузе... и колёсики ни до чего не достают. Это сняла она через USB-WEB камеру, измерила расстояние, опустила камеру, сформировала этот кадр и передала браузеру... через который сейчас работаю и принимаю картинку от неё. Так же на кадре нет другой малины, через которую сейчас связь по wlan0 локальная... ну совсем локальная местная сеть и wlan1 тоже локальная сеть от роутера с выходом в интернет. И обслуживает proxi.
    Моторчики новые(правда с редукторами) уже заказали(цена за 4 шт 333р вместе с доставкой)... и до этого заказали аккумуляторы. У нас и нет в наличии таких моторчиков и привезут через месяц по 500р за штуку. А Вы это бычьё-торгошню жалеете(поддерживаете)
    Как соберёмся и будем готовы поедем шугать кошек и котов по квартире... их пятеро... а заодно отработку алгоритмов ориентации, построения карты пространства, распределённого управления и т.п. Ну и приращивать другие три малины в систему.
    Ну а пока будем работать над системой управления и индикации... работы достаточно, а времени нет. Как будет что-то, что не стыдно показать как код... будет выложено. Как я заметил совсем промежуточные (сырые варианты) не нужны никому.
     
    Последнее редактирование: 2 окт 2018
  2. Igor68

    Igor68 Гуру

    А как иначе? Сначала преобразуем цветное в чёрно-блое... потом переносится в один канал(цвет) R. Для чёрно-белого плохо видна индикация. На других цветах так же. С самого начала делал так и не для красоты вовсе. Это опыт и надо другим узлам так же передавать картинку... только не решил BMP файл или вектор OpenCV. Что в векторе, что в BMP умею наносить индикацию... а вот другие форматы нет. А что вектор, что BMP не сильно отличается размер если все 3 канала.
     
  3. Igor68

    Igor68 Гуру

    А если нет ComMotion for 4 motors? И что надо покупать? А вдруг надо применить управление моторами... ну допустим просто включение ключами, релюшками и т.п. ?
    Не проблема в файле r1_uno_plus.ino всего-то поменять в этом месте:
    Код (C++):
    if(GetDifferenceULong(pwait, micros()) > _i2c_wait)
        pwait = GetDifferenceULong(pwait, micros());
        {
            switch(dnum)
              {
                //Multiservo
                    case 0:
                    if(!(cwaitservo1 > 0))
                    {
                        servo[0].write(wrdservo[0]);
                        if(wrdservo[0] < dservo[0])
                            wrdservo[0]++;
                        else if(wrdservo[0] > dservo[0])
                            wrdservo[0]--;
                        cwaitservo1    = setcwaitservo1;
                    }
                    else
                    {
                        cwaitservo1--;
                        goto m0;
                    }
                    dnum = 1;
                    break;
                     case 1:
    m0:                if(!(cwaitservo2 > 0))
                    {
                              servo[1].write(wrdservo[1]);
                        if(wrdservo[1] < dservo[1])
                            wrdservo[1]++;
                        else if(wrdservo[1] > dservo[1])
                            wrdservo[1]--;
                              cwaitservo2    = setcwaitservo2;
                    }
                    else
                    {
                        cwaitservo2--;
                        goto m1;
                    }
                    dnum = 2;
                          break;
                    //ComMotion driver for 4 motors - значения моторов
                    case 2:
    m1:                if(!(cwaitmotorL > 0)) //это время ожидания до включения или изменения задания если cwaitmotL = 0 то ожидания не будет вовсе - сразу
                    {
                       /* это управление задания
                        if(wrdmotor[0] < dmotor[0])
                            wrdmotor[0]++;
                        else if(wrdmotor[0] > dmotor[0])
                            wrdmotor[0]--;
                        if(wrdmotor[2] < dmotor[2])
                            wrdmotor[2]++;
                        else if(wrdmotor[2] > dmotor[2])
                            wrdmotor[2]--;*/

                       //замените на свои параметры для левых моторов или одного можно и это оставить
                        cwaitmotorL    = setcwaitmotorL; //после исполнения новое время ожидания
                    }
                    else
                        cwaitmotorL--; //тут ожидаем условное время в цикле
                    if(!(cwaitmotorR > 0)) //это время ожидания до включения или изменения задания если cwaitmotR = 0 то ожидания не будет вовсе - сразу
                    {
                        /* это управление задания
                        if(wrdmotor[1] < dmotor[1])
                            wrdmotor[1]++;
                        else if(wrdmotor[1] > dmotor[1])
                            wrdmotor[1]--;
                        if(wrdmotor[3] < dmotor[3])
                            wrdmotor[3]++;
                        else if(wrdmotor[3] > dmotor[3])
                            wrdmotor[3]--;*/

                        //замените на свои параметры для правых моторов или одного но можно и это оставить
                        cwaitmotorR    = setcwaitmotorR; //после исполнения новое время ожидания
                    }
                    else
                        cwaitmotorR--;
                    //это замените на управление ключами, релюшками...
                    //IndividualMotorControl(wrdmotor[0], wrdmotor[1], wrdmotor[2], wrdmotor[3]);
                    //...ну к примеру для левых:
                    if(wrdmotor[0] > 127)
                             //включите левые моторы вперёд применяя GPIO
                    else if(wrdmotor[0] < -127) || (wrdmotor[2] < -127)
                             //включите левые моторы назад применяя GPIO
                    else
                             //выключите левые моторы применяя GPIO
                    dnum = 0;
                          break;
                    default:
                          dnum = 0;
                          break;
            }
            //формирование данных для чтения - это отобразиться в браузере не как задание, а как текущее состояние если это надо
            rdmovectrl.servo[0]        = wrdservo[0];
            rdmovectrl.servo_speed[0]    = movectrl.servo_speed[0];
            rdmovectrl.servo[1]        = wrdservo[1];
            rdmovectrl.servo_speed[1]    = movectrl.servo_speed[1];
            rdmovectrl.motors[0]        = (wrdmotor[0] + wrdmotor[2]) / 2;
            rdmovectrl.speed_motors[0]    = movectrl.speed_motors[0];
            rdmovectrl.motors[1]        = (wrdmotor[1] + wrdmotor[3]) / 2;
            rdmovectrl.speed_motors[1]    = movectrl.speed_motors[1];
          }
    кроме этого освободиться и работа по I2C для ComMotion.
    Ну соответственно тут на форуме многие применяют порты ввода-вывода и примеров куча
    Сейчас многое готово... только источников управления будет достаточно... не только браузер, но и другое. Сегодня планируется доделать адекватность реакции на команды как от браузера, так и от сонара. servoANDmotor должен понимать кто им управляет. К примеру sonar должен запретить движение вперёд если препятствие даже при команде вперёд от браузера, но при этом разрешать разворот на месте. Движение назад не предполагаю... там датчиков нет, но видно будет. Вечером (около 19:00 по москве) выложу полный проект... хоть и сырой.
     
  4. Igor68

    Igor68 Гуру

    Доброго времени суток!
    mainwork.zip
    Компиляция (на Raspberry Pi 3):
    в корне распакованного архива запустить create.sh:
    Код (Text):
    www-data@pi02:~/ramdisk/mainwork$ ./create.sh
    gcc -c -Wall gdat.c -o gdat.o
    gcc -c -Wall main.c -o main.o
    gcc -c -Wall motors.c -o motors.o
    gcc -c -Wall mrtu.c -o mrtu.o
    gcc -lpthread -lcrypto -lm -lrt gdat.o main.o motors.o mrtu.o -o servoANDmotor
    rm -rf *o servoANDmotor
    servoANDmotor: no process found
    gcc -c -Wall i2c.c -o i2c.o
    gcc -c -Wall main.c -o main.o
    gcc -c -Wall mb12xx.c -o mb12xx.o
    gcc -lpthread -lrt i2c.o main.o mb12xx.o -o sonar
    rm -rf *o sonar
    sonar: no process found
    g++ -c main.cpp
    make: Circular wcam.o <- wcam.o dependency dropped.
    g++ -I/usr/local/include/opencv -c wcam.cpp
    make: Circular bmp.o <- bmp.o dependency dropped.
    g++ -I/usr/local/include/opencv -c bmp.cpp
    g++ -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lpthread -lrt main.o wcam.o bmp.o -o camwork
    rm -f *.o camwork
    camwork: no process found
    make: Warning: File 'bar.c' has modification time 7134059 s in the future
    gcc -c -Wall bar.c -o bar.o
    gcc -c -Wall base64.c -o base64.o
    gcc -c -Wall bmp.c -o bmp.o
    gcc -c -Wall bmpfunc.c -o bmpfunc.o
    gcc -c -Wall buttons.c -o buttons.o
    gcc -c -Wall gpsect.c -o gpsect.o                                                                                                                                                            
    gcc -c -Wall main.c -o main.o                                                                                                                                                                
    gcc -c -Wall msem.c -o msem.o                                                                                                                                                                
    gcc -c -Wall objects.c -o objects.o                                                                                                                                                          
    gcc -c -Wall slider.c -o slider.o                                                                                                                                                            
    gcc -c -Wall trend.c -o trend.o                                                                                                                                                              
    gcc -c -Wall workfunc.c -o workfunc.o                                                                                                                                                        
    gcc -c -Wall wsfunc.c -o wsfunc.o
    gcc -c -Wall wsserver.c -o wsserver.o
    gcc -lpthread -lcrypto -lm -lrt bar.o base64.o bmp.o bmpfunc.o buttons.o gpsect.o main.o msem.o objects.o slider.o trend.o workfunc.o wsfunc.o wsserver.o -o wsbot
    make: warning:  Clock skew detected.  Your build may be incomplete.
    rm -rf *o wsbot
    wsbot: no process found

    www-data@pi02:~/ramdisk/mainwork$
    Всё должно быть так. Иначе должно быть при неустановленных...:
    1) OpenCV - я применял OpenCV-2.2.0. При отсутствии не будет откомпилирован camwork - работа с web-камерой.
    2) libssl-dev - устанавливается через apt-get. Без этого не будет откомпилирован wsbot - работа через web-ираузер на удалённой машине(ПК, ноутбук, планшет и т.п.)
    3) Необходимо так же установить средства для работы по I2C. Именно малина и читает сонар MB12xx.

    Текущие недостатки (работаем):
    1) срыв индикации, но кадр с камеры остаётся - недоработка с организацией обмена данными (синхронизация данных в потоках). Работаем.
    2) для управления требуется несколько раз кликать мышкой по элементу управления. Связано с тем, что имеется несколько источников управления. Сейчас изменяют задание программы wsbot и servoANDmotor. Задача не сложная, но надо посмотреть... это servoANDmotor точно!
    3) те косяки которые сам недоглядел... ну или не добрался.

    Всё содержимое должно быть в рабочей директории WEB сервера (в моём случае Apache 2).
    Запуск производится в консоли или по ssh... думаю что по ssh, сё-таки подвижная на колёсах.
    Запуск с помощью скрипта work.sh:
    Код (Text):
    www-data@pi02:~/ramdisk/mainwork/work$ ./work.sh start

    >>> ARBOT (Дата:24.09.2018 Вурсия:02.01.01) <<<
    servoANDmotor: no process found
    sonar: no process found
    wsbots: no process found
    camwork: no process found
    Модуль управления приводами...................... дата и версия: Дата: 23.09.2018  Весия: 01.01.01
    Модуль сонара ультразвукового.................... дата и версия: Дата: 02.10.2018  Весия: 01.02.02
    Модуль сервера доступа по HTML через websocket... дата и версия: Дата: 01.10.2018  Весия: 01.02.02
    Модуль работы с WEB-камерой...................... дата и версия: Дата: 29.09.2018  Весия: 01.01.02
    res=0
    BMP filename:  work.bmp
    Size Struct info 124 dec   7c hex
    Version "5"
    --- step x 3
    --- step y 1920
    ---------------------------------------------------------------------------------
    Type         : 4d42
    Size          : 921738 bytes
    Start addr: 8a hex
    ---------------------------------------------------------------------------------
    Widht :  640
    Haight : 480
    Bit in Pixel(color) 24
    res=0
    www-data@pi02:~/ramdisk/mainwork/work$ start camm loop...
    BMP filename:  work.bmp
    Size Struct info 124 dec   7c hex
    Version "5"
    --- step x 3
    --- step y 1920
    ---------------------------------------------------------------------------------
    Type         : 4d42
    Size          : 921738 bytes
    Start addr: 8a hex
    ---------------------------------------------------------------------------------
    Widht :  640
    Haight : 480
    Bit in Pixel(color) 24

    www-data@pi02:~/ramdisk/mainwork/work$
     
    Тут произведён запуск. А открыв страничку в браузере будет:
    snapshot16.png
    уже темно и камера направлена в тёмный угол.
    Настоятельно рекомендую все опыты проводить в RAM диске!!!!!

    Надеюсь на совместный эксперимент!
    С глубоким уважением!
     

    Вложения:

    • mainwork.zip
      Размер файла:
      251,2 КБ
      Просмотров:
      17
    Последнее редактирование: 3 окт 2018
  5. Igor68

    Igor68 Гуру

    ...ранее рассматривалось. Это касается создания собственной индикации.
    К примеру вывод текста :
    Код (C++):
    //определение
    BMP_textout(
    char *str,  //указатель на начало собственно текста
    int16_t x,  //начальная координата X в пикс.
    int16_t y,  //начальная координата Y в пикс.
    uint8_t RF,  //R - цвета текста 0...255
    uint8_t GF,  //G - цвета текста 0...255
    uint8_t BF,  //B - цвета текста 0...255
    uint8_t RB,  //R - цвета фона 0...255
    uint8_t GB,  //G - цвета фона 0...255
    uint8_t BB,  //B - цвета фона 0...255
    uint8_t FB  //флаг отображения фона 0 - нет фона, >0 - есть указанный фон
    );
    А для отображения текста по вертикали функция BMP_textoutV. Текст начинается с указанных координат и печатается вверх. Аналогичный обычному по горизонтали, но с поворотом на 90 градусов против часовой стрелки.
    С элементами управления и индикации скажу если не будет понятно. Все элементы кнопки, слайдеры и т.п. сделаны самостоятельно и их исходники в wsbot/src прилагаемого архива. Многие элементы не доработаны.
     
  6. Igor68

    Igor68 Гуру

    Доброго времени суток!!!
    ...на сегодня работают правила для арматурчика(тестового устройства):
    1) со стороны Arduino UNO R3:
    - при приёме по Modbus RTU(псевдо интерфейс основанный на USB-SERIAL - только протокол максимально близок):
    a) анализ доступа по адресам регистров протокола Modbus RTU;
    b) ограничение поворота сервомашин 45 гр. от нуля(центра) по горизонтальном задании;
    c) перевод всех состояний моторов(полный останов) и сервомашин в 0 по горизонтали и вертикали при отсутствии обмена (0.5 сек) с малиной.
    2) со стороны программы управления приводами на малине(программа motorANDservo):
    a) запрет движения(моторы колёс) в случаях:
    - поворота сонара и камеры по горизонтали (нельзя ехать смотря в сторону) - движение стоп;
    - можно делать разворот при суммарном задании для правых и левых моторов( ноль - движение задание -255....+255 для каждого) - нет ограничений при положении сонара и камеры по горизонтали не 0 и дистанции до препятствия менее допустимого;
    - ограничение(запрет вперёд) движения при дистанции менее допустимой(но можно разворот на месте)
    - анализ от кого идёт управление с расстановкой приоритета (пока только две программы: sonar(ультразвуковой датчик по I2C на малине) и wsbot (управление от web-страницы в браузере)

    Остальные источники управления пока не предусмотрены(временно... должен быть анализ от сонара и камеры... основной источник это кластер - он пока не реализован). Источник от браузера пока единственный, но имеет наименьший приоритет. Пример; задаём движение вперёд(wsbot) и достигли дистанции до препятствия менее допустимого, управление перехватывает (motorANDservo) и изменяет задание невзирая на управление. Вторая программа(sonar) должна в начальный момент проверить дистанцию на "яму"(возможно совместно с программой камеры)
    выглядит пока так:
    Код (Text):
    -rwxr-xr-x
    www-data@pi02:~$ ls -al /dev/shm
    total 984
    drwxrwxrwt  2 root  root  140 Apr  3 17:24 .
    drwxr-xr-x 16 root  root  3540 Apr  3 14:49 ..
    -rwxr-xr-x  1 www-data www-data  921739 Apr  3 20:58 bmp_memory
    -rwxr-xr-x  1 www-data www-data  65 Apr  3 20:58 gdat_memory
    -rwx------  1 pi  pi  67108904 Apr  3 14:49 pulse-shm-93512936
    -rwxr-xr-x  1 www-data www-data  16 Apr  3 17:24 sem.gdat_bmp
    -rwxr-xr-x  1 www-data www-data  16 Apr  3 17:24 sem.gdat_semaphore
    www-data@pi02:~$

     
    из них:
    bmp_memory - дамп картинки в формате BMP от камеры для всех
    gdat_memory - структура данных (определена в файле maindat.h для всех программ едина), является единой для обмена командами и параметрами. Те что sem.xxxxx это соответствено семафоры синхронизации данных. Возможно надо и делать дамп понятный для OpenCV для кластера... но может и формата BMP хватит если не буду внутри кластера применять OpenCV(надо везде ставить). Пока скевер-клиент идею не трогаю... но на одной малине это тяжко(для самой малины). Может MPI поможет? Примеры рассматривал тут на форуме... кстати ксть и по разделяемой памяти(/dev/shm)... и websocket, который пригоден только для ручного управления(низший приоритет).
    С удовольствием приму идеи и предложения!
    Спасибо!
     
  7. Igor68

    Igor68 Гуру

    Доброго времени суток!
    ...на сегодня в процессе отработка надёжности прохождения команд от websock. Именно надо сделать надёжность(с первого раза) похождения команды при нажатии на кнопку, слайдер и др.
    snapshot17.png
    (сейчас камера видит: комната в темноте, а только рабочее место под лампой. Кимера видит через стекло в двери... ранее было просто стекло, но надоело и оставшийся набор масляных красок пустил на рисование(громко сказано) морского пейзажа на стекле с другой стороны. Вот и просвечивается)
    Специально для отработки в файле main.c в функции отработки:
    Код (C++):
    int rwSHMcntrl(void)
    {
        GDATA1    *gd;
        int16_t    motL;
        int16_t    motR;
        //
        motL    = motCntrl.motSpeed + motCntrl.motTurn;
        if(motL > 255)
            motL    = 255;
        else if(motL < -255)
            motL    = -255;
        motR    = motCntrl.motSpeed - motCntrl.motTurn;
        if(motR > 255)
            motR    = 255;
        else if(motR < -255)
            motR    = -255;
        //
        sem_wait(semCNTRL);
        //
        gd = (GDATA1*)(addrCMD);
        gd->timeWSbot            = mainTime;
        #if(_rwSHMcntrl_dbg > 0)
        printf("dbg wsbot: _rwSHMcntrl_dbg : gd->scntrl = %i - источник упраления\n", gd->scntrl);
        #endif
        motCntrl.scntrl    = gd->scntrl;
        switch(gd->scntrl)
        {
            case _scntrl_free:
            case _scntrl_wsbot:
                if(Cmd)
                {
                    printf("Cmd ON\n");
                    gd->wrmotors[_MwrmotorL]    = motL;
                    gd->wrspeed_motors[_MwrmotorL]    = 10;
                    gd->wrmotors[_MwrmotorR]    = motR;
                    gd->wrspeed_motors[_MwrmotorR]    = 10;
                    gd->wrservo[_MwrservoH]        = motCntrl.camHposition;
                    gd->wrservo_speed[_MwrservoH]    = 100;
                    gd->wrservo[_MwrservoV]        = motCntrl.camVposition;
                    gd->wrservo_speed[_MwrservoV]    = 100;
                    gd->scntrl            = _scntrl_wsbot;
                    Cmd                = 0;
                }
                break;
            case _scntrl_servoANDmotors:
                if((motCntrl.rdmotLspeed == 0) || (motCntrl.rdmotRspeed))
                {
                    motCntrl.motSpeed    = 0;
                    motCntrl.motTurn    = 0;
                }
                motCntrl.camHposition        = gd->wrservo[_MwrservoH];
                motCntrl.camVposition        = gd->wrservo[_MwrservoV];
                Cmd                = 0;
                break;
            default:
                if((motCntrl.rdmotLspeed == 0) || (motCntrl.rdmotRspeed))
                {
                    motCntrl.motSpeed    = 0;
                    motCntrl.motTurn    = 0;
                }
                motCntrl.camHposition        = gd->wrservo[_MwrservoH];
                motCntrl.camVposition        = gd->wrservo[_MwrservoV];
                break;
        }
        //
        motCntrl.RDcamHposition        = gd->rdservo[_MwrservoH];
        motCntrl.RDcamVposition        = gd->rdservo[_MwrservoV];
        motCntrl.rdmotLspeed        = gd->rdmotors[_MwrmotorL];
        motCntrl.rdmotRspeed        = gd->rdmotors[_MwrmotorR];
        motCntrl.sonardistance        = gd->sonardistance;
        sem_post(semCNTRL);
        return 0;
    }
    добавлена индикация в консоли:
    Код (Text):
    www-data@pi02:~/ramdisk/mainwork_07_09_2018/work$ ./work.sh start

    >>> ARBOT (Дата:24.09.2018 Вурсия:02.01.01) <<<
    servoANDmotor: no process found
    sonar: no process found
    wsbots: no process found
    camwork: no process found
    Модуль управления приводами...................... дата и версия: Дата: 03.10.2018  Весия: 01.01.01
    Модуль сонара ультразвукового.................... дата и версия: Дата: 02.10.2018  Весия: 01.02.02
    Модуль сервера доступа по HTML через websocket... дата и версия: Дата: 07.10.2018  Весия: 01.02.03
    Модуль работы с WEB-камерой...................... дата и версия: Дата: 03.10.2018  Весия: 01.01.02
    res=0
    BMP filename:  work.bmp
    Size Struct info 124 dec   7c hex
    Version "5"
    --- step x 3
    --- step y 1920
    ---------------------------------------------------------------------------------
    Type         : 4d42
    Size          : 921738 bytes
    Start addr: 8a hex
    ---------------------------------------------------------------------------------
    Widht :  640
    Haight : 480
    Bit in Pixel(color) 24
    res=0
    www-data@pi02:~/ramdisk/mainwork_07_09_2018/work$ start cam loop...
    BMP filename:  work.bmp
    Size Struct info 124 dec   7c hex
    Version "5"
    --- step x 3
    --- step y 1920
    ---------------------------------------------------------------------------------
    Type         : 4d42
    Size          : 921738 bytes
    Start addr: 8a hex
    ---------------------------------------------------------------------------------
    Widht :  640
    Haight : 480
    Bit in Pixel(color) 24
    Cmd ON
    Cmd ON
    Cmd ON
    Cmd ON
    Cmd ON
    Cmd ON
    Cmd ON
     
    одним словом не всегда с первого раза идёт реакция на команду... дано решить проблему с синхронизацией данных потоков внутри одной программы wsbot. Тем не менее проблема с индикацией(остутствие срывов) решена.
    mainwork_07_09_2018.zip
    Несоответствие управления между циклом main.c и wsserver.c...
     

    Вложения:

    Последнее редактирование: 7 окт 2018
  8. Igor68

    Igor68 Гуру

    Имя архива следует воспринимать не mainwork_07_09_2018.zip, а mainwork_07_10_2018.zip. А то выходит, что в прошлом месяце:D
     
  9. Mitrandir

    Mitrandir Гуру

    Даешь гит)
     
  10. Igor68

    Igor68 Гуру

    Не понял... что? ...что-то я вытормаживаю:confused:
     
  11. Mitrandir

    Mitrandir Гуру

  12. Igor68

    Igor68 Гуру

    Нет... не потяну. Уровень не тот.
     
  13. Mitrandir

    Mitrandir Гуру

    В смысле? Там вроде как ничего сложного.
    Имхо удобнее делиться наработками чем так архивами
     
  14. Igor68

    Igor68 Гуру

    Одно таскать. Всё это в малине, которая по wifi через другую малину и только потом в ноут. Да и уровнем не дополз до Github. А наработки не надо вообще? Ну если не надо, то не буду. Всё одно пока всё в работе...
     
  15. Mitrandir

    Mitrandir Гуру

    Так малина сама может коммитить
     
  16. Mitrandir

    Mitrandir Гуру

    Почему вы решили что не надо?
     
  17. Mitrandir

    Mitrandir Гуру

    А там что какой-то уровень требуется?
    Закончил фичу пилить и
    git commit
    git push master
     
  18. Igor68

    Igor68 Гуру

    Я в том плане, что никогда такого не делал, не всё понятно(читаю), да и писать надо по Аглицки. А так... ну наверное можно. И думаю удобно если с разных мест... вот только очень грязные промежуточные варианты выкладывать стыдно.
     
  19. Mitrandir

    Mitrandir Гуру

    А что там банят за русский язык в репозитории?

    так никто не обязывает грязные промежуточные варианты пушить. Зарелизил-пуш
     
  20. Mitrandir

    Mitrandir Гуру

    Удобная вещь. Изучи) особенно для большого проекта .

    Плюсы:
    1) не потеряешь код в случае локального катаклизма( потеря компа)
    2) наличие keystone для отслеживания процесса
    3) наличие двухуровневой структуры репозитария ( один на компе другой в облаке ), что позволяет наплодить у себя кучу грязных версий и затем затолкнуть релиз уже в облако
    4)возможность ветвления. К примеру хочется внедрить какуюто фичу. Ее можно делать отдельной веткой и потом или смерджить с мастер-веткой или вообще убрать если фича ненужна
    5) возможность откатиться до прошлой версии если неправильно написал код
     
    Последнее редактирование: 9 окт 2018
    Igor68 нравится это.