Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги
Программирование роботов — это интересно.
Многие наверное видели японских гуманоидных роботов, или французский учебный робот NAO, интересным выглядит проект обучаемого робота-манипулятор Baxter. Промышленные манипуляторы KUKA из Германии — это классика. Кто-то программирует системы конвейерной обработки (фильтрации, сортировки). Дельта роботы. Есть целый пласт — управление квадрокоптером/алгоритмы стабилизации. И конечно же простые трудяги на складе — Line Follower.
Но всё это как правило — не дешевые игрушки, поэтому доступ к роботам есть в специализированных лабораториях или институтах/школах где получили финансирование и есть эти направления. Всем же остальным разработчикам (кому интересна робототехника) — остаётся завистливо смотреть.
Некоторое время назад я вышел на достаточно интересную систему — 3д робосимулятор V-REP, от швейцарской компании Coppelia Robotics.
К своему (приятному) удивлению я обнаружил, что эта система:
- имеет большой функционал (система разрабатывается с марта 2010 года)
- полностью open-source (выложена в открытый доступ в 2013 году)
- кроссплатформенная — windows, mac, linux (работает на Qt)
- имеет API и библиотеки для работы с роботами через C/C++, Python, Java, Lua, Matlab, Octave или Urbi
- бесплатная для некоммерческого использования!
Все объекты, которые программируются в этой системе — «живут» в реальном с точки зрения физических законов мире — есть гравитация, можно захватывать предметы, столкновения, датчики расстояния, видео датчики и т.п.
Поработав некоторое время с этой системой, я решил рассказать про неё читателям хабра.
Да, и на картинке скриншот из V-REP, и модели роботов — которые вы можете программировать, и смотреть поведение, прямо на вашем компьютере.
Установка
Установим на компьютер эту систему, в разделе Download:
Видим три варианта: образовательный (EDU), триальный (EVAL), и плеер (player).
Плеер — это программа с помощью которой можно проиграть сцены созданные в полноценной версии (то есть нет возможности редактирования) — бесплатная.
Триальная — это полнофункциональная версия, в которой нет возможности сохранить. Нет лицензионных ограничений.
Образовательный — это полнофункциональный пакет, имеющий лицензионные ограничения, текст лицензии можно прочитать здесь. Суть его в том, что институты, школы, хоббисты — могут использовать бесплатно это программное обеспечение. При том, что использование не коммерческое (а образовательное).
Мы с вами вполне подходим под определение хоббистов (т.к. хотим образовательно по-программировать роботов), поэтому смело скачиваем версию EDU PRO для своей операционной системы.
В данный момент версия 3.2.0, вот прямая ссылка на windows вариант: V-REP_PRO_EDU_V3_2_0_Setup (98 Mb)
Старт
После установки, и старта мы увидим экран:
Здесь мы видим следующие объекты:
— сцена — здесь и происходит всё действо, на данный момент она пуста (есть только пол)
— слева видим блок с библиотекой моделей — сверху папки, и под ней — отображается содержимое выбранной папки (выбраны robots/non-mobile — то есть стационарные роботы — манипуляторы)
— далее отображается иерархия мира
Иерархия включает в себя — корневой объект (мир), в котором находятся все объекты.
В нашем примере это:
Видим источники света, видим объект для реализации пола (а это твердая поверхность, с текстурой), и группу для камер.
Есть главный объект скрипт, контролирующий сцену и всех объектов на ней, и у каждого объекта может быть свой скрипт — внутренние скрипты реализованы на языке Lua.
Вверху и слева мы видим toolbar — меню. Самой главной кнопкой является кнопка Play (Start Simulation) — после которой стартует симуляция сцены:
Сценарий работы следующий:
— мы перетаскиваем с помощью DragAndDrop объекты из библиотеки моделей.
— настраиваем скрипты
— стартуем симулятор
— останавливаем симулятор
Попробуем что-нибудь на практике.
Быстрый старт
Попробуем оживить робота.
Для этого выбираем слева папку robots/mobile и в списке выбираем Ansi, захватываем, переносим на сцену и отпускаем, робот появляется на нашей сцене и появляется информация об авторе:
Теперь нажимаем на Start Simulation, и видим движение робота, и можем управлять положение головы, рук (реализовано через Custom User Interface), вот видео:
Далее останавливаем симуляцию:
Скрипт управления
Можем открыть и увидеть код, который научил робота идти (управляет автономным передвижением робота). Для этого на иерархии объектов, напротив модели Asti, дважды кликаем на иконке «файл»:
Вот Lua программа, которая осуществляет движение робота:
if (sim_call_type==sim_childscriptcall_initialization) then asti=simGetObjectHandle("Asti") lFoot=simGetObjectHandle("leftFootTarget") rFoot=simGetObjectHandle("rightFootTarget") lPath=simGetObjectHandle("leftFootPath") rPath=simGetObjectHandle("rightFootPath") lPathLength=simGetPathLength(lPath) rPathLength=simGetPathLength(rPath) ui=simGetUIHandle("astiUserInterface") simSetUIButtonLabel(ui,0,simGetObjectName(asti).." user interface") dist=0 correction=0.0305 minVal={0, -- Step size 0, -- Walking speed -math.pi/2, -- Neck 1 -math.pi/8, -- Neck 2 -math.pi/2, -- Left shoulder 1 0, -- Left shoulder 2 -math.pi/2, -- Left forearm -math.pi/2, -- Right shoulder 1 0, -- Right shoulder 2 -math.pi/2} -- Right forearm rangeVal={ 2, -- Step size 0.8, -- Walking speed math.pi, -- Neck 1 math.pi/4, -- Neck 2 math.pi/2, -- Left shoulder 1 math.pi/2, -- Left shoulder 2 math.pi/2, -- Left forearm math.pi/2, -- Right shoulder 1 math.pi/2, -- Right shoulder 2 math.pi/2} -- Right forearm uiSliderIDs={3,4,5,6,7,8,9,10,11,12} relativeStepSize=1 nominalVelocity=0.4 neckJoints={simGetObjectHandle("neckJoint0"),simGetObjectHandle("neckJoint1")} leftArmJoints={simGetObjectHandle("leftArmJoint0"),simGetObjectHandle("leftArmJoint1"),simGetObjectHandle("leftArmJoint2")} rightArmJoints={simGetObjectHandle("rightArmJoint0"),simGetObjectHandle("rightArmJoint1"),simGetObjectHandle("rightArmJoint2")} -- Now apply current values to the user interface: simSetUISlider(ui,uiSliderIDs[1],(relativeStepSize-minVal[1])*1000/rangeVal[1]) simSetUISlider(ui,uiSliderIDs[2],(nominalVelocity-minVal[2])*1000/rangeVal[2]) simSetUISlider(ui,uiSliderIDs[3],(simGetJointPosition(neckJoints[1])-minVal[3])*1000/rangeVal[3]) simSetUISlider(ui,uiSliderIDs[4],(simGetJointPosition(neckJoints[2])-minVal[4])*1000/rangeVal[4]) simSetUISlider(ui,uiSliderIDs[5],(simGetJointPosition(leftArmJoints[1])-minVal[5])*1000/rangeVal[5]) simSetUISlider(ui,uiSliderIDs[6],(simGetJointPosition(leftArmJoints[2])-minVal[6])*1000/rangeVal[6]) simSetUISlider(ui,uiSliderIDs[7],(simGetJointPosition(leftArmJoints[3])-minVal[7])*1000/rangeVal[7]) simSetUISlider(ui,uiSliderIDs[8],(simGetJointPosition(rightArmJoints[1])-minVal[8])*1000/rangeVal[8]) simSetUISlider(ui,uiSliderIDs[9],(simGetJointPosition(rightArmJoints[2])-minVal[9])*1000/rangeVal[9]) simSetUISlider(ui,uiSliderIDs[10],(simGetJointPosition(rightArmJoints[3])-minVal[10])*1000/rangeVal[10]) end if (sim_call_type==sim_childscriptcall_cleanup) then end if (sim_call_type==sim_childscriptcall_actuation) then -- Read desired values from the user interface: relativeStepSize=minVal[1]+simGetUISlider(ui,uiSliderIDs[1])*rangeVal[1]/1000 nominalVelocity=minVal[2]+simGetUISlider(ui,uiSliderIDs[2])*rangeVal[2]/1000 simSetJointTargetPosition(neckJoints[1],minVal[3]+simGetUISlider(ui,uiSliderIDs[3])*rangeVal[3]/1000) simSetJointTargetPosition(neckJoints[2],minVal[4]+simGetUISlider(ui,uiSliderIDs[4])*rangeVal[4]/1000) simSetJointTargetPosition(leftArmJoints[1],minVal[5]+simGetUISlider(ui,uiSliderIDs[5])*rangeVal[5]/1000) simSetJointTargetPosition(leftArmJoints[2],minVal[6]+simGetUISlider(ui,uiSliderIDs[6])*rangeVal[6]/1000) simSetJointTargetPosition(leftArmJoints[3],minVal[7]+simGetUISlider(ui,uiSliderIDs[7])*rangeVal[7]/1000) simSetJointTargetPosition(rightArmJoints[1],minVal[8]+simGetUISlider(ui,uiSliderIDs[8])*rangeVal[8]/1000) simSetJointTargetPosition(rightArmJoints[2],minVal[9]+simGetUISlider(ui,uiSliderIDs[9])*rangeVal[9]/1000) simSetJointTargetPosition(rightArmJoints[3],minVal[10]+simGetUISlider(ui,uiSliderIDs[10])*rangeVal[10]/1000) -- Get the desired position and orientation of each foot from the paths (you can also use a table of values for that): t=simGetSimulationTimeStep()*nominalVelocity dist=dist+t lPos=simGetPositionOnPath(lPath,dist/lPathLength) lOr=simGetOrientationOnPath(lPath,dist/lPathLength) p=simGetPathPosition(rPath) rPos=simGetPositionOnPath(rPath,(dist+correction)/rPathLength) rOr=simGetOrientationOnPath(rPath,(dist+correction)/rPathLength) -- Now we have the desired absolute position and orientation for each foot. -- Now transform the absolute position/orientation to position/orientation relative to asimo -- Then modulate the movement forward/backward with the desired "step size" -- Then transform back into absolute position/orientation: astiM=simGetObjectMatrix(asti,-1) astiMInverse=simGetInvertedMatrix(astiM) m=simMultiplyMatrices(astiMInverse,simBuildMatrix(lPos,lOr)) m[8]=m[8]*relativeStepSize m=simMultiplyMatrices(astiM,m) lPos={m[4],m[8],m[12]} lOr=simGetEulerAnglesFromMatrix(m) m=simMultiplyMatrices(astiMInverse,simBuildMatrix(rPos,rOr)) m[8]=m[8]*relativeStepSize m=simMultiplyMatrices(astiM,m) rPos={m[4],m[8],m[12]} rOr=simGetEulerAnglesFromMatrix(m) -- Finally apply the desired positions/orientations to each foot -- We simply apply them to two dummy objects that are then handled -- by the IK module to automatically calculate all leg joint desired values -- Since the leg joints operate in hybrid mode, the IK calculation results -- are then automatically applied as the desired values during dynamics calculation simSetObjectPosition(lFoot,-1,lPos) simSetObjectOrientation(lFoot,-1,lOr) simSetObjectPosition(rFoot,-1,rPos) simSetObjectOrientation(rFoot,-1,rOr) end
Другие модели
Вы можете удалить модель — для этого надо её выбрать, и нажать на Del. И можете попробовать посмотреть другие модели в работе, у некоторых есть скрипты для автономной работы.
Мобильные роботы
Стационарные роботы (манипуляторы)
Примеры сцен
Так же есть большое количество примеров (сцен), которые поставляются сразу с программой. Для этого надо выбрать в меню «File/Open scenes» и там перейти в папку: «V-REP3/V-REP_PRO_EDU/scenes».
Вот примеры сцен (файлы с расширением *.ttt):
2IndustrialRobots.ttt
3DoFHolonomicPathPlanning.ttt
6DoFHolonomicPathPlanning.ttt
BarrettHandPickAndPlace.ttt
blobDetectionWithPickAndPlace.ttt
ConstraintSolverExample.ttt
controlTypeExamples.ttt
e-puckDemo.ttt
environmentMapping.ttt
externalIkDemo.ttt
fabricationBlocks.ttt
fastClientServerCommunication.ttt
forwardAndInverseKinematics1.ttt
forwardAndInverseKinematics2.ttt
gearMechanism.ttt
genericDialogDemo.ttt
ghostDemo.ttt
ImageProcessingExample.ttt
inverseKinematicsOf144DofManipulator.ttt
jansenMechanism.ttt
katanaRobotWithCableSimulation.ttt
khepera3.ttt
LineTracer-threaded.ttt
millingMachine.ttt
millingRobot.ttt
motionPlanningAndGraspingDemo.ttt
motionPlanningDemo1.ttt
motionPlanningDemo2.ttt
motionPlanningDemo3.ttt
mouseTestScene.ttt
naturalSelectionAlgo.ttt
NonHolonomicPathPlanning.ttt
objectHandling.ttt
PaintingRobot.ttt
ParallelForwardAndInverseKinematics.ttt
practicalPathPlanningDemo.ttt
proximitySensorDemo.ttt
reflexxesMotionLibraryType4Demo.ttt
robotCollaboration1.ttt
robotCollaboration2.ttt
robotLanguageControl.ttt
rosTopicPublisherAndSubscriber.ttt
SocketAndTubeCommunicationExample.ttt
StripeScanner.ttt
weldingRobot.ttt
wirelessTransmission.ttt
youBotAndHanoiTower.ttt
Ссылки
* основной сайт V-REP
* руководство пользователя (на английском)
* большое количество видео, примеров из V-REP
Чтобы поддержать популяризацию этой интересной системы на русском языке — создана русскоязычная группа по V-REP.
Применение в учебном процессе
На мой взгляд, у V-REP есть хороший потенциал применения в учебных процессах. Если вас интересует применение системы в учебном процессе — в школе, институте, в клубе робототехники и т.п. — то можете заполнить анкету. Может быть получиться консолидировать усилия и сделать учебные русскоязычные материалы.
Планы на будущее
Конечно это лишь малая часть возможностей V-REP системы. В следующей публикации на примере рассмотрим создание задачи гоночного симулятора на робо-машинке от первого лица. Рассмотрим API. Создание объектов, настройка сцены и взаимодействие с пользователем.
Программируем робота в симуляторе: руководство для начинающих
Если настоящего робота у вас под рукой нет, потренироваться его программировать можно в симуляторе. Подробную инструкцию вы найдете в этом руководстве. Статья, написанная Ником Маккри, впервые была опубликована на Toptal. Robohunter предлагает читателям ее перевод.
Согласитесь, роботы крутые. Однажды они будут править миром. Я надеюсь, что к тому времени им станет жалко своих разработчиков и они начнут помогать нам в создании космической утопии. Я шучу, конечно. Но только отчасти.
Чтобы быть частью этих перемен, я прошел курс по теории контроля автономных роботов, результатом которого стало создание написанного на языке Питон симулятора. Он позволил попрактиковаться в теории контроля на примере простого мобильного робота.
В этой статье я покажу, как использовать фреймворк на Питоне, чтобы разработать программу для управления роботом. Я опишу схему контроля, которую я разработал для робота в симуляции, продемонстрирую, как он взаимодействует с окружающей средой и достигает поставленных целей, и расскажу об основных сложностях программирования роботов, с которыми я столкнулся.
Чтобы воспользоваться этим руководством, вам понадобятся базовые знания по математике (мы будем использовать тригонометрические функции и векторы) и о Питоне, поскольку это один из самых популярных языков программирования для простых роботов (мы будем использовать базовые библиотеки и функции).
Трудности работы с роботом: ожидания и реальность
Основная трудность в робототехнике — невозможность знать действительное состояние окружающей среды. Программа контроля робота может только строить предположения о состоянии реального мира на основе данных, полученных от сенсоров.
Поэтому первым шагом в установлении контроля является создание модели реального мира, с помощью которой можно интерпретировать данные сенсоров и принимать решения. Если модель построена корректно и реальный мир ведет себя в соответствии с прописанными в ней правилами, мы можем эффективно контролировать робота. В противном случае контроль над роботом будет утерян и вряд ли восстановится без внешнего вмешательства.
Это одна из причин, почему программирование роботов – сложный процесс. Мы часто смотрим видео, в которых роботы, недавно разработанные в лабораториях, демонстрируют невероятные умения, навигацию, способность работать в команде, и задаемся вопросом: «Почему они не используются в реальном мире?» Когда будете смотреть подобные ролики в следующий раз, обратите внимание, насколько сильно контролируется обстановка в лабораториях. В большинстве случаев эти роботы могут выполнять свои впечатляющие задания, только если условия среды остаются неизменными. Поэтому ключ к более совершенным роботам — в создании более сложных, гибких и прочных моделей. А это уже зависит от ограничений в доступных вычислительных ресурсах.
Симулятор робота
Мой симулятор написан на Питоне и использует Sobot Rimulator. Вы можете найти v1.0.0 здесь. Программа обеспечивает точную симуляцию робота и дает разработчику простой фреймворк, чтобы практиковаться в создании ПО для роботов. Конечно, всегда лучше иметь дело с реальным роботом, но такой симулятор гораздо более доступен, и это хороший вариант для начала работы.
При работе с реальными роботами ПО, которое создает контролирующие сигналы, должно функционировать на высокой скорости и делать сложные вычисления. Поэтому чаще всего для программирования роботов используется язык C++. Но при работе с более простыми роботами Python становится хорошим вариантом: он обеспечивает довольно высокую скорость выполнения программы при относительной простоте написания кода.
ПО, которое я создал, симулирует реального исследовательского робота Khepera, но его можно адаптировать для различных мобильных роботов. Я разрабатывал его для Khepera III, но оно подойдет и для четвертой версии устройства. Я старался, чтобы симулятор как можно точнее повторял особенности реального робота, поэтому данные из симулятора можно загрузить в реального робота Khepera с минимальными доработками.
Другими словами, программирование робота в симуляторе аналогично программированию реального робота.
В этом руководстве я опишу архитектуру ПО для контролирования робота по v1.0.0 Sobot Rimulator.
Робот Khepera
Логика управления роботом ограничивается следующими файлами и классами:
-
models/supervisor.py — этот класс отвечает за взаимодействие между симулированным миром и роботом;
-
models/supervisor_state_machine.py — этот класс представляет различные положения, в которых может находиться робот, в зависимости от интерпретации данных сенсоров;
-
файлы из каталога models/controllers реализуют различное поведение робота в зависимости от известного состояния среды.
Цель
Цель нашего робота будет очень простой: попасть к определенной заранее точке пространства. Этой способностью должен обладать любой мобильный робот, от автономных машин до роботов-пылесосов. Задача осложняется тем, что на пути робот должен избегать столкновений с возникающими препятствиями.
Программируемый робот
У каждого робота свои возможности и проблемы управления. Ознакомимся с нашим симулируемым роботом.
Прежде всего, это автономный мобильный робот. Он может самостоятельно передвигаться в пространстве под собственным контролем. Он должен самостоятельно вычислять, как достичь своих целей и выжить в определенной среде. Создать такое устройство — весьма нелегкая задача для начинающего программиста-робототехника.
Сенсоры
Существует множество устройств, которыми робот может быть оснащен для наблюдения за окружающей средой. Они могут включать датчики приближения, датчики освещенности, бамперы, камеры и пр. Робот также может устанавливать связь с внешними датчиками, предоставляющими информацию, которую он сам получить не может.
Наш робот оснащен девятью инфракрасными датчиками. Спереди их больше, потому что устройству важнее знать, что находится перед ним.
В колеса робота встроены сенсоры, отслеживающие количество вращений. Одно полное вращение вперед равноценно 2765 отметкам. При вращении в противоположную сторону идет обратный отсчет.
Мобильность
Одни роботы передвигаются с помощью «ног», другие катятся, как мяч, третьи ползут, словно змеи.
Наш робот — робот с дифференциальным приводом. Он перемещается на двух колесах. Если оба колеса вращаются с одинаковой скоростью, робот двигается по прямой линии, если с разной – поворачивает.
API
В Sobot Rimulator разделение между «компьютером» робота и симулируемым физическим миром воплощается в файле robot_supervisor_interface.py. Он определяет весь API для взаимодействия с датчиками и двигателями робота:
-
read_proximity_sensors() возвращает массив из 9 числовых значений в собственном формате датчиков;
-
read_wheel_encoders() возвращает массив из двух значений, указывающих общее количество отметок с момента старта;
-
set_wheel_drive_rates( v_l, v_r ) принимает два значения (в радианах в секунду) и устанавливает левую и правую скорость колес на эти два значения.
Простая модель
Модель нашего робота очень простая. Она допускает много предположений касательно мира. К самым важным относятся следующие:
-
рельеф всегда ровный;
-
препятствия не бывают круглой формы;
-
колеса никогда не проскальзывают;
-
ничто не сможет повернуть робота в другую сторону;
-
датчики не ломаются и не предоставляют ложных сведений;
-
колеса всегда поворачиваются туда, куда была команда.
Эти допущения соответствуют условиям внутри помещения — все, кроме отсутствия круглых препятствий. Наше ПО для избегания препятствий очень простое и следует по границе объекта, чтобы обойти его. Далее я расскажу, как улучшить систему управления роботом с помощью дополнительной проверки, чтобы избегать круглых препятствий.
Система управления
Робот – это динамическая система. Положение робота, показатели его датчиков и действие его управляющих сигналов постоянно изменяются. Чтобы контролировать воздействие событий на робота, нужно:
- применить сигнал управления;
- оценить результаты;
- создать новые сигналы управления, которые приблизят робота к цели.
Эти шаги повторяются, пока цель не будет достигнута. Чем больше раз в секунду мы проходим эти шаги, тем лучше будет контроль над системой. Для робота в Sobot Rimulator они повторяются 20 раз в секунду (частота 20 Гц). Многие реальные роботы должны проделывать это тысячи и даже миллионы раз в секунду, чтобы обеспечить достаточный контроль (вспомните сказанные выше слова о разных языках программирования для разных роботов и требованиях к скорости вычислений).
Каждый раз, когда робот делает измерения с помощью сенсоров, он использует полученные данные для обновления оценки состояния мира, например, расстояния от заданной цели. Он сравнивает это состояние с тем, каким оно должно быть (например, для расстояния до цели оно должно быть равным нулю), и вычисляет ошибку между желаемым и фактическим состоянием. После этого робот генерирует новые управляющие сигналы для движения.
Отличный трюк: упрощение модели
Чтобы контролировать робота, мы должны послать отдельные сигналы в оба колеса с указанием скорости их вращения. Обозначим эти сигналы vL и vR. Но вместо того, чтобы думать о скорости, с которой перемещаются оба колеса, гораздо естественнее думать о скорости, с которой робот двигается вперед и меняет направление. Назовем эти параметры скорость v и скорость вращения ω («омега»).
Мы можем строить всю модель на значениях v и ω, не используя параметры vL и vR. Только когда мы определим нужную манеру передвижения нашего робота, можно математически преобразовать эти характеристики в vL и vR. Такая модель называется моноконтрольной.
Ниже приведен код, который вносит последние изменения в supervisor.py.
Примечание: если ω = 0, оба колеса вращаются с одинаковой скоростью.
Оценка состояния
Используя датчики, робот должен оценивать состояние не только окружающей среды, но и свое собственное. Эти оценки никогда не будут совершенными, но они должны быть довольно точными, потому что робот будет принимать решения на их основе. Используя свои датчики приближения и датчики на колесах, он должен определить:
- направление, где располагаются преграды;
- расстояние от преград;
- свое местоположение;
- нужное направление.
Первые два пункта определяются посредством датчиков приближения. Функция API read_proximity_sensors() возвращает массив из 9 значений – по одному для каждого датчика. Мы знаем заранее, что, например, седьмой показатель получен от датчика, направленного на 75 градусов вправо от робота. Если показатель определяет дистанцию в 0,1 м, мы понимаем, что именно на этом расстоянии, 75 градусов вправо, находится преграда. Если робот не обнаружил никаких преград, он передает данные 0,2 м — максимальное расстояние, определяемое сенсором.
Из-за того как работают инфракрасные датчики (они измеряют отражения инфракрасного света), числа, которые они возвращают, являются нелинейным преобразованием фактического расстояния. Показания необходимо перевести в метры. В supervisor.py это выглядит следующим образом:
Имейте в виду: у нас особая модель датчика в нашем фреймворке. В реальном мире сенсоры поставляются с сопутствующим ПО, которое обеспечивает аналогичное преобразование из нелинейных значений в метры.
Определить расположение и направление робота сложнее. Для этого он использует одометрию. Датчики, установленные на колесах, измеряют количество вращений каждого колеса. Это позволяет получить точную оценку того, как изменилось положение робота, но только если изменение было невелико. Поэтому так важно часто повторять цикл управления в реальном роботе, где двигатели, вращающие колеса, могут быть неидеальными. Если между измерениями проходит слишком много времени, оба колеса могут сделать очень много движений, и будет невозможно правильно оценить расположение робота.
В симуляторе мы можем проводить вычисления одометрии на частоте 20 Гц — с той же частотой, с которой проверяем показания датчиков. Но было бы неплохо сделать отдельный поток, который бы работал быстрее и улавливал более мелкие движения колес.
Ниже приведена функция одометрии в supervisor.py, которая обновляет сведения о местоположении робота. Оценка положения формируется из координат x и y, а также направляющей theta. Они измеряются в радианах от положительной оси X. Положительное значение x расположено на востоке, положительное значение y — на севере. Курс на 0 обозначает, что робот смотрит точно на восток. Робот всегда предполагает, что его начальное положение (0, 0), 0.
Теперь, когда наш робот умеет получать корректную оценку собственного расположения, используем эту информацию для достижения нашей цели.
Достижение цели
Как заставить колеса робота двигаться таким образом, чтобы он приехал к назначенной цели? Для начала упростим себе задачу и предположим, что на пути робота нет преград. Значит, робот просто должен ехать вперед по направлению к цели. Благодаря одометрии мы знаем наши текущие координаты и направление робота. Мы также знаем координаты нашей цели, ведь они были запрограммированы заранее. Используя линейную алгебру, мы можем определить вектор от нашего положения до цели. Вот как это делается в go_to_goal_controller.py:
Обратите внимание: мы получаем вектор к цели в системе отсчета робота, а не в координатах мира. Если цель находится на оси X в системе отсчета робота, это значит, что она расположена прямо перед ним. Угол этого вектора относительно оси X — это разница между текущим курсом и необходимым. Другими словами, это ошибка между текущим и желаемым положением. Нужно отрегулировать скорость поворота ω так, чтобы угол между нашим направлением и целью стал близким к 0. Ошибка должна быть минимизирована:
self.kP в приведенном выше коде означает коэффициент усиления системы управления. Он определяет скорость вращения в соответствии с расстоянием, которое осталось до цели. Если ошибка равна 0, скорость вращения тоже 0.
Как определить скорость движения вперед v, зная угловую скорость ω? Если робот не поворачивается, он может ехать вперед на полной скорости, но чем быстрее он поворачивается, тем медленнее нужно продвигаться. Поэтому v является функцией от ω. В go_to_goal_controller.py уравнение имеет следующий вид:
Предлагаем уточнить эту формулу, чтобы учесть, что мы обычно замедляемся, когда приближаемся к цели, чтобы достичь ее с нулевой скоростью. Измененная формула должна включать замену v_max() на что-то пропорциональное расстоянию. Итак, мы почти завершили один цикл управления. Единственное, что осталось сделать, – перевести параметры этих двух моноконтрольных моделей в разные скорости колес и послать сигналы в колеса. Вот пример траектории робота без препятствий:
Как видим, вектор цели — эффективный ориентир, на котором мы можем основывать свои контрольные вычисления. Но иногда идти к цели напрямик — плохая идея, поэтому мы должны рассчитать другой вектор.
Преодоление препятствий
Запрограммируем робота так, чтобы он избегал препятствий на своем пути. Чтобы упростить сценарий, забудем пока о цели и будем работать с такой схемой: если перед нами нет преград, можно двигаться вперед; если на пути встречается преграда, нужно развернуться так, чтобы она больше не стояла на пути.
Если препятствий нет, вектор должен просто указывать вперед, при этом ω будет равна нулю, а скорость v будет максимальной. Но как только датчики приближения обнаруживают препятствие, вектор должен поменяться и вести в любом направлении, где препятствия нет. Скорость вращения при этом увеличится, а скорость движения v упадет, чтобы робот не столкнулся с препятствием.
Оптимальный способ сгенерировать нужный вектор — превратить девять показателей датчиков приближения в векторы и вычислить их сумму. Когда препятствий нет, векторы будут суммироваться симметрично, в результате чего опорный вектор будет направлен точно вперед. Но если датчик, скажем, на правой стороне, обнаруживает препятствие, он будет вносить меньший вектор в сумму, и опорный вектор сместится влево.
Для робота с другим расположением датчиков может быть применен тот же принцип, но может потребоваться изменение веса векторов или дополнительная предосторожность, когда сенсоры расположены симметрично спереди и сзади робота, так как в результате сумма векторов может стать нулевой.
Вот код, который делает это вычисление в avoid_obstacles_controller.py:
Используя полученный ao_heading_vector, робот будет успешно избегать преград, но не будет продвигаться к цели:
Гибридные автоматы
Выше мы описали два изолированных типа поведения: «идти к цели» и «избегать препятствий». Чтобы достичь цели в среде, полной препятствий, робот должен их комбинировать.
Решение, которое мы разработаем, используется в классе устройств под названием «гибридные автоматы». Гибридный автомат запрограммирован на несколько различных поведений (режимов). Его контролирующее устройство переключается из одного режима в другой, когда цели достигнуты или среда внезапно слишком сильно изменилась. В каждом из типов поведения сенсоры непрерывно отслеживают изменения среды.
В нашем фреймворке контролирующее устройство для робота воплощено в файле supervisor_state_machine.py.
Простая логика подсказывает способ применения двух моделей поведения: если преграды не обнаружены, используйте модель достижения цели, но если на пути возникают препятствия, переключайтесь на режим преодоления преград, пока они не исчезнут.
Но такая логика создаст много проблем. Например, робот при столкновении с препятствием будет стремиться отвернуться от него, а затем, как только удалится на достаточное расстояние, снова развернется и вернется в ту точку, из которой только что уехал. В результате мы получим бесконечный цикл быстрого переключения, а робот будет ездить по одному и тому же участку взад-вперед.
У этой проблемы несколько решений. Читателям, которые ищут более глубоких знаний, стоит проверить архитектуру ПО под названием DAMN.
Но для нашего симулируемого робота подойдет более простое решение: зададим еще одно поведение для преодоления препятствия и перемещения на другую сторону пространства.
Поведение «следуй вдоль стены»
Когда мы сталкиваемся с препятствием, то берем показания двух датчиков, которые расположены ближе всего к препятствию, и используем их для оценки поверхности препятствия. Затем устанавливаем опорный вектор так, чтобы он шел параллельно этой поверхности. Продолжаем следовать за стеной, пока А) препятствие больше не будет между нами и целью; Б) мы ближе к цели, чем были вначале. Тогда мы можем быть уверены, что преодолели препятствие правильно.
Имея ограниченную информацию, мы не можем точно определить, где быстрее обойти препятствие — справа или слева. Чтобы принять решение, выбираем направление, которое сразу же приблизит нас к цели. Для этого нужно знать опорные векторы для поведения «идти к цели» (Go-to-Goal behavior) и «избегать препятствий» (Avoid-Obstacle behavior), а также оба возможных вектора «следования за стеной» (Follow-Wall). Вот иллюстрация того, как будет принято окончательное решение (в этом случае робот решит идти налево):
Определение опорных векторов следования за стеной оказывается немного более сложным, чем двух других. Чтобы понять, как это происходит, посмотрите на код в follow_wall_controller.py.
Создание финальной контрольной модели
Итоговая модель использует поведение «следуй вдоль стены» практически для всех столкновений с препятствиями. Однако если робот окажется в труднодоступном месте, в опасной близости от столкновения, он переключится в режим обхода препятствий до тех пор, пока не окажется на более безопасном расстоянии и снова не перейдет в режим следования вдоль стены. После успешного преодоления препятствий включается режим следования к цели. Вот окончательная схема, которая находится в supervisor_state_machine.py:
Так выглядит успешное передвижение робота в пространстве с преградами с использованием финальной контрольной модели:
Метод проб и ошибок
Чтобы достичь желаемого результата при работе с робототехникой, часто необходимо испробовать много вариантов.
Экспериментируйте с составляющими контрольной схемы в Sobot Rimulator, наблюдайте и пытайтесь объяснить результат. Любые изменения, внесенные в схему, повлияют на поведение робота:
- Ошибки в каждой схеме контроля.
- Изменения показаний датчиков.
- Исчисление v как функции ω в каждой схеме контроля.
- Изменение условий в supervisor_state_machine.py.
- Почти все другие изменения.
Робот в системе Sobot Rimulator не всегда может справиться с определенными картами местности. Иногда он заезжает в угол и не может оттуда выбраться. Иногда он просто двигается взад и вперед возле преграды. В таких ситуациях необходимо добавить новые функции или изменить схему действия.
Более продвинутые роботы используют картографию (чтобы запомнить места, в которых они уже были и избежать повторения действий), эвристику (чтобы найти компромисс при отсутствии идеального решения) и машинное обучение (чтобы настроить параметры контроля).
Смотрите также:
Среда программирования RobotON Studio
СКАЧАТЬ ПРОГРАММУСреда программирования RobotON Studio является графической и разработана специально для детей и взрослых, не имеющих начальных навыков программирования, но имеющих огромное желания заниматься робототехникой на Arduino. Данная программа была разработана программистами «RobotON» и используется как основной инструмент для программирования роботов в наших кружках.
Скриншот программы «RobotON Studio»
Зачем мы создали данный софт? Дело в том, что графическое ПО открывает двери в мир робототехники для студентов любого уровня (особенно для новичков!). Необходимость изучать синтаксис программного кода, искать мелкие ошибки в огромных программах, состоящих из страниц кода, – все это часто приводит к падению интереса у обучающихся, особенно у детей. Обратное происходит, если ребенок сразу видит результат своих действий, интерес в таком случае возрастает многократно!
Принцип работы RobotON Studio следующий: обучающиеся собирают разноцветные блоки в логическую цепочку, программный код, при этом, генерируется автоматически. Загрузка кода в плату Arduino происходит напрямую из программы. Таким образом, пользователи могут управлять различными устройствами, начиная светодиодами и заканчивая различными электромоторами и датчиками. С каждым обновлением мы расширяем базу поддерживаемых устройств, которые могут управляться с помощью среды программирования RobotON Studio.
Программирование Arduino и Arduino-совестимых плат в среде RobotON Studio подходит и для продвинутых пользователей, которые хотят перейти от простого графического программирования к реальному написанию кода. Изучать реальные команды можно, наблюдая за изменением кода в специальном окне RobotON Studio, во время любых взаимодействий с блоками (код генерируется в реальном времени!).
RobotON Studio в наших кружках робототехники
Все обучающиеся на наших курсах робототехники получают бесплатную лицензию на использование программы и могут пользоваться ей для домашних упражнений с роботами.
Что дает RobotON Studio
- Возможность программирования Arduino без начальных знаний и навыков программирования
- Возможность результативного использования детьми от 7 лет
- Широкий спектр поддерживаемых плат, моторов, датчиков итд.
- Бесплатное использование для наших учеников
- Простой и понятный интерфейс
Установка RobotON Studio
Скачать RobotON Studio можно по ссылке. Программа сама устанавливает все необходимые драйвера и настраивает ваш компьютер на работу с любыми платами класса Arduino и китайскими аналогами.
По вопросам получения лицензии, обращайтесь в личные сообщения в группу в ВК или на почту [email protected]
Стоимость лицензии на использование ПО «RobotON Studio»:
Исполнитель Робот
Для подготовки к ГИА умение писать программы для исполнителя Робот очень важно. Эти задания относятся к задачам с высоким уровнем сложности и позволяют заработать дополнительные 2 балла (при условии правильного решения). Изучением Робота мы и займемся.
Выпускник 9 класса должен иметь представление об алгоритмике, уметь написать простые алгоритмы. Для записи алгоритмов можно использовать языки программирования или формальные языки. Исполнитель Робот может выполнять алгоритмы, при этом делает это очень наглядно. Робот — это так называемый ГРафический Учебный Исполнитель (ГРИС) потому, что результаты его работы представлены в графическом виде.
Кто такой исполнитель Робот?
Представьте себе клетчатое поле (как лист из тетради в клеточку) на котором находится некий объект, который мы назовем Робот. Используя специальные команды, мы можем этим Роботом управлять — перемещать его по клеткам, закрашивать клетки. И в большинстве случаев наша задача будет заключаться в том, чтобы написать такую программу для Робота, выполняя которую он будет закрашивать определенные клетки.
Исполнитель Робот входит в пакет КуМир (Комплект Учебных МИРов), который был разработан Научно-исследовательским институтом системных исследований Российской академии наук (НИИСИ РАН) как раз для обучения программированию в школе. Кроме Робота в системе КуМир есть и другие исполнители, но нас они пока не интересуют.
Скачать исполнитель Робот
Итак, для начала нам необходимо скачать исполнитель Робот. Пусть вас не смущает то, что в названии указано 32-bit, программа отлично работает и в 64-разрядной Windows. Если же вы используете Linux, то можете скачать версию для этой ОС.
Далее необходимо установить скачанную программу. Здесь, я надеюсь, у вас не возникнет сложностей, процесс стандартный и интуитивно понятный. Если вдруг что-то не получится — пишите в комментариях, обязательно помогу. Единственное — рекомендую при установке отказаться от ненужных пунктов (все, кроме Среда Кумир)
Установка исполнителя Робот
После успешной установки, на вашем рабочем столе появится ярлык для запуска программы
Ярлык Кумир
А после запуска программы мы должны увидеть окно программы
Исполнитель Робот — окно программы
Предварительный этап завершен, далее мы рассмотрим как же управлять Роботом и в конечном итоге подготовимся к успешной сдаче ГИА
Продолжение в следующем уроке. До встречи!
Автор: Александр Чернышов
Оцените статью, это очень поможет развитию сайта.
Исполнитель Робот
Средняя оценка 4.5 (89.03%), голосов — 3111 инструментов разработки / ITI Capital corporate blog / Habr
В нашем блоге мы много внимания уделяем вопросам алгоритмической и автоматизированной торговли на бирже, рассматривая, как теоретические аспекты, вроде выбора языка программирования, так и практические — например, реализацию системы событийно-ориентированного бэктестинга на Python.
Сегодня мы представляем вашему вниманию подборку сред программирования и инструментов для создания торговых роботов.
TradeScript (SMARTx)
В торговом терминале компании ITinvest под названием SmartX есть специальный плагин с конструктором торговых роботов TradeScript. С помощью простого, но довольно мощного скриптового языка трейдеры могут создавать механические системы различного уровня сложности.
Существует также модуль бэктестинга, позволяющий оценить продуктивность работы запрограммированной стратегии на исторических данных. Кроме того предоставлена и возможность тестирования торговой системы «на лету» с использованием текущих биржевых данных, но без вывода приказа на биржу — время виртуальной сделки, цена и получившаяся доходность будут показываться в отдельном окне.
Язык TradeScript был изначально создан американской компанией Modulus FE специально для написания на нем торговых роботов. Он довольно прост в изучении, а многие алгоритмы схожи по написанию с Metastock, что облегчает работу пользователям, знакомым с этим программным пакетом.
Плюсом TradeScript по сравнению с Wealth-Lab и тем же Metastock является отсутствие необходимости создания сложных конструкций и использования различных коннекторов для передачи приказов в торговый терминал. Конструктор роботов встроен в SmartX, что позволяет добиваться значительно более высокой надежности и быстродействия.
Ниже представлен код торговой стратегии на TradeScript:
Buy Signals
# Покупаем, если момент и инерция имеют однонаправленный тренд
TREND(EMA(CLOSE, 20), 15) = UP AND
TREND(MACD(13, 26, 9, SIMPLE), 5) = UP
Sell Signals
# Продаем, если момент и инерция имеют однонаправленный тренд
TREND(EMA(CLOSE, 20), 15) = DOWN AND
TREND(MACD(13, 26, 9, SIMPLE), 5) = DOWN
Exit Long Signal
# Выходим, если тренд инерции и момента имеет противоположное направления
TREND(EMA(CLOSE, 20), 15) = DOWN OR
TREND(MACD(13, 26, 9, SIMPLE), 5) = DOWN
Exit Short Signal
# Выходим, если тренд инерции и момента имеет противоположное направления
TREND(EMA(CLOSE, 20), 15) = UP OR
TREND(MACD(13, 26, 9, SIMPLE), 5) = UP
Кроме того пользователь может запускать столько одновременно работающих алгоритмов, сколько позволит тактовая частота процессора и память компьютера. Учитывая большое число слов и операндов скриптового языка, это означает возможность создания сколько угодно сложных торговых стратегий.
Более подробно вопрос написания торговых роботов на TradeScript мы рассматривали в наших предыдущих материалах (первый, второй).
CQG Integrated Client
Это популярная у трейдеров во всем мире профессиональная многофункциональная платформа технического анализа, предоставляющая котировки в реальном времени с множества торговых площадок. Также в программе предусмотрены возможности по автоматизации торговых операций.
Wealth-Lab
Созданная компанией Fidelity International мощнейшая система технического анализа, разработки и тестирования торговых стратегий. Создавать торговых роботов можно с помощью встроенного языка программирования WealthScript. В последних версиях системы также используются C# и другие .NET-языки.
TSLab
Инструмент TSLab позволяет торговцам создавать механические системы разной степени сложности. Существуют возможности создания торгового робота и его тестирования на исторических данных. Существуют различные модули программы, например модуль управления риска, который прежде чем отправить заявку на биржу, проверяет ее на соответствие заданным условиям. Если ордер им не удовлетворяет, то будет отклонен. Таким образом можно ввести дополнительный контроль за работой скрипта.
Что немаловажно для трейдеров, которые не владеющих навыками программирования, логику робота можно реализовать с помощью блок-схемы.
LiveTrade (CoFiTe)
Программный комплекс LiveTrade создан разработчиками петербуржской компании CoFiTe. Помимо прочего он включает в себя программное решение для создания торговых роботов — Robotlab. Этот инструмент, как и TSLab, позволяет трейдерам создавать автоматизированные торговые системы с помощью блок-схем в визуальном конструкторе:
После того, как торговая логика приложения реализована с помощью блок-схемы, ее можно запустить в терминале.
TradeMatic
Еще один инструмент, позволяющий создавать торговых роботов с помощью визуального конструктора без программирования как такового. Предоставляет возможность тестирования получившегося робота с помощью встроенного источника исторических данных.
Предусмотрены различные режимы работы торговой системы —от ручного, при которого для исполнения сигналов требуется выставление заявок руками, до полностью автоматического, когда все торговые сигналы сразу исполняются, не требуя участия трейдера.
SmartCOM
Открытый интерфейс торговой системы ITinvest также позволяет трейдерам создавать торговых роботов разной степени сложности и подключать внешние среды разработки и уже созданные в них торговые системы. Использование компонентной объектной модели позволяет подключать к торговым серверам брокера механические торговые системы, написанные на самых разных языках программирования. Например, C++, любой из.NET языков (C#, VB.NET и другие), Visual Basic, Visual Basic for Application (в частности из Microsoft Excel) и многих других.
Также существует дополнительный плагин SmartCOM для программного пакета AmiBroker, применение которого облегчает анализ загруженных данных.
MetaStock
Также популярный зарубежный продукт. Система MetaStock содержит обширную библиотеку индикаторов и средств для создания собственных формул. Также предусмотрен простой язык программирования, с помощью дополнительных модулей можно генерировать приказы на покупку и продажу.
Как и Wealth-Lab на российском рынке применяется в связке с торговыми терминалами, функционирующих с помощью дополнительных библиотек. Это может приводить к различным сложностям интеграции, а также негативно влиять на надежность работы получившейся связки.
StockSharp
Бесплатная в базовой версии платформа StockSharp с открытым исходным кодом. На ее основе разработаны продукты для создания торговых роботов.
Как пишут сами разработчики в своей статье на Хабре, проект StockSharp построен по классической модели развития сложного программного обеспечения. В начале создается некая основа (S#.API), и уже с помощью нее создаются надстройки высокого уровня.
В настоящий момент команда S# реализовала полный комплекс программных средств для алготрейдеров — систему сбора и хранения исторических данных (может раздавать данные в режиме сервера), система тестирования на истории, ряд графических компнонентов.
В итоге, фактически за день трейдер может разработать полнофункциональный модуль для подключения к торгам, вывода графической информации и тестирования создаваемой стратегии на исторических данных.
Quik
Название системы — сокращение от Quickly Updatable Information Kit (Быст-обновляемая информационная панель). Изначально Quik являлся информационной системой, «фишкой» которой была высокая скорость доставки данных, однако впоследствии продукт эволюционировал. До версии 6.4 в Quik предоставлялся встроенный скриптовый язык Qpile. Он обладал небольшим набором возможностей по сравнению с языками высокого уровня (C# или C++) и использовался главным образом для автоматизации простых торговых стратегий.
К его плюсам можно отнести простоту использования, удобный доступ к данным из торгового терминала и общую интегрированность с ним, привлекала трейдеров и возможность пошаговой отладки алгоритмов в терминале. Однако были и существенные минусы — например, невозможность тестирования стратегии на исторических данных, отсутствие графического интерфейса помимо стандартных таблиц Quik, скорость работы и т.п.
Версии Quik старше 6.4.0 поддерживают скрипты на Lua. Этот язык также встроен в терминал, довольно прост и обладает большей функциональностью, чем Qpile. Поскольку Lua – это интерпретируемый язык, то для работы с его кодом используется специальная библиотека QLua.
Изображение: RusAlgo.com
TRANSAQ
Популярная на российском рынке система брокерского обслуживания, с помощью которой трейдеры могут получить доступ к торгам на бирже. Инструмент позволяет торговцам получать информацию о текущем состоянии дел на рынке, выставлять приказы на покупку и продажу финансовых инструментов вручную, а также создавать механические торговые системы.
Создавать роботов можно как с помощью подключения к TRANSAQ внешних сред разработки вроде Metastock, Omega, Wealth-Lab, так и при помощи встроенного языка программирования ATF (Advanced Trading Facility). По этому языку есть довольно подробная документация, в которой, помимо прочего, представлены и примеры кода готовых роботов.
Другие материалы по теме финансов и фондового рынка от ITI Capital:
Управление и программирование промышленных роботов от ДС-Роботикс
На многих производствах наблюдается дефицит квалифицированных кадров. Система подготовки кадров в ПТУ разрушена, а из институтов мало кто идет на производства. В связи с этим появляется дополнительно требование к оборудованию – простота в использовании. И роботизированные комплексы с успехом выполняют его. В большинстве случаев для повседневной работы с ними операторам достаточно всего нескольких кнопок.
Рассмотрим вариант наиболее распространённого в России сварочного комплекса в составе: сварочный робот, сменщик станций, сварочное оборудование и ограждение:
Алгоритм работы оператора очень простой:
— снял готовое изделие
— закрепил новые заготовки в кондукторе
— вышел за ограждение
— нажал кнопку подтверждения и старта
С такой работой справится любой квалифицированный рабочий! Важным аспектом работы робота является программирование сварочного робота.
Если производство массовое и комплекс полностью загружен работой, то этот алгоритм работы будет сохраняться годами. С перерывами на ежегодное обслуживание комплекс производит несколько типов изделий, то и в этом случае задаче не сильно усложняется.
Если производственная программа требует большей гибкости. Вам нужно перейти с выпуска изделия А на выпуск изделия В, которое вы уже выпускали раньше. Все просто – снимаем установленные кондуктора (Для этого достаточно открутить несколько болтов). И устанавливаем нужные. На пульте управления выбираем программу для изделия В. И для своего спокойствия запускаем проверочный цикл. Все хорошо – комплекс готов к производству!
Даже написание новой программы под новое изделие не становится сложной задачей.
Вот вид экрана пульта управления АВВ с простейшей программой.
Все команды понятны программистам с минимальным знанием английского языка.
MOVEL – команда движения по прямой
PStart – название точки в которую нужно прийти
V1000 – скорость движения и т.д.
Нет необходимости заучивать коды и потом с листочком вспоминать какую команду нужно написать — M40 или M50?
В сложных случаях. Большое и сложное изделие или для фрезерования можно воспользоваться помощью дополнительного программного обеспечения.
АВВ предлагает пакет RobotStudio для симуляции работы роботизированных комплексов на компьютере.
В нем можно написать и отладить программу не останавливая роботизированную систему для этого и минимизировав время простоя оборудования для переналадки. А значит промышленная робототехника робот будет зарабатывать для вас все это время.
Простота в использовании – одно из необходимых качеств промышленной робототехники: если для управления роботизированным комплексом достаточно всего нескольких кнопок, это экономит ресурсы предприятия и сокращает количество персонала, необходимого для его обслуживания.
Как правило, фирмы-производители разрабатывают собственные языки программирования и вспомогательное программное обеспечение для своих роботов. «ДС-Роботикс», как системный интегратор, делает упор на вспомогательный софт, адаптированный для конкретной задачи, на разработку и модернизацию технологий, на внедрение измерительных систем.
Программирование промышленных роботов начинается с комплексной программной оболочки, куда при необходимости интегрируются дополнительные модули. Примерами таких модулей могут послужить система видеонаблюдения, система замера вращающего момента и т. п. Например, при помощи программирования промышленный робот можно научить распознавать положение обрабатываемой детали.
Управление промышленными роботами осуществляется при помощи программ, специально написанных для них (программы для робототехники одного производителя, как правило, не подходят для другого).
Онлайн- и офлайн-программирование
Для управления промышленными роботами программы разрабатываются двумя способами – онлайн и офлайн. Первое – это программирование роботов непосредственно на месте их установки. При онлайн-программировании робот программирует сам себя. Если применяется метод Teach-In, оператор при помощи консоли направляет робота в заданный участок пространства и выполняет необходимые задачи, а робот «запоминает» координаты местоположения, скорость движения в каждом пункте. При методе Playback оператор вручную обводит робота по траектории движения. Управление промышленными роботами при помощи онлайн-программирования не всегда удобно – в программы, созданные таким образом, нельзя вносить изменения.
Более продвинутый способ управления роботом – офлайн-программирование. В таком случае программы пишутся на обычном компьютере в редакторе, поставляемом с комплексом программного обеспечения робота: написание программ для современных роботов доступно любому сотруднику после недолгого обучения. Текстовая программа загружается в компьютер робота, отлаживается и корректируется. Также в последнее время набирают популярность 3D и CAD-модели. Такое программирование экономит время, не останавливает производственный процесс и дает отличную визуализацию и возможность предварительно оценить множество параметров и итоговый успех работы промышленных роботов.
Бесплатные торговые роботы
За годы трейдинга и алготрейдинга у нашей команды накопился гигантский и успешный багаж знаний в области алготрейдинга. И вот настала пора написать уберСтатью о том что ж мы думаем по этому поводу. Уже несколько лет наша команда делает торговых роботов. Для своего фонда, бесплатно, на заказ.
Попытался придать статье структуру Гайда, по которому можно получить целостное представление о мире алготрейдинга и выбрать правильный путь.
Кто за рулём: Алексей Ван Профессиональный программист. Последние несколько лет занимаюсь алготрейдингом. Закончил около 30ти коммерческих проектов, более 20ти для себя. Писал ботов, приводы, алерты, индикаторы, станции майнинга, оптимизаторы, коннекторы и т.д. Что можно придумать или написать программисту из этой области — я уже сделал. На сегодняшний момент являюсь хэдлайнером в разработке программного обеспечения для нашего фонда.Вот от сюда.Простите за пафос, это не для самолюбования. А чтобы вы не решили пройти мимо. Ничего такого Вы больше нигде не найдёте. Я гарантирую.
План такой:
1. Трейдинг и его смысл
2. Торговые роботы- что такое?
3. Проблемы торговли «руками»
4. Как боты помогают трейдерам
5. Как искать закономерности
6. Пределы системной торговли
У нас будет далёкое начало, поскольку решил писать подробно. Чтобы многим читателям не приходилось бегать в википедию для изучения нюансов. Более того, в мире далёком от торговли на бирже встречал самые дикие и отвратительные формулировки того чем же я занимаюсь вместе со своими программами. Поэтому, сначала о важности спекуляций для каждого на планете земля, и только потом о роли МТС в этом бардаке.
Трейдинг, это — покупка и продажа ценных бумаг на бирже на основе прогноза, с целью извлечения прибыли. Прибыль соответственно возникает если вы покупаете дешевле и продаёте дороже.
Обычно сделки совершаются через «терминал», такую специальную программу, устанавливаемую на Вашем компьютере. Реже по телефону. Ещё совсем редко из «ямы», специального места на бирже.
Для прогнозирования используются десятки различных техник. Многие из них базируются на рассматривании графика цены, а затем попытки по нему определить, куда же дальше она пойдёт. Многие из них основываются на истинных знаниях, а какие-то нет, а значит ненаучны. Об этом мы поговорим ниже.
В контексте стабильности и эффективности ценообразования
Спекуляции, не просто канализатор любителей азартных игр (в народе гэмблеров). У этого рода деятельности есть весьма значительная, часто недооценённая функция.
А именно:
Трейдинг — делает рынки стабильными и сглаживает аномалии ценообразования
Для простого обывателя это выглядит так: Вы не можете встать утром и обнаружить что цена на сахар стала на 300 процентов дороже. Когда цену на товар формируют десятки тысяч человек, попытки занижать или завышать их — не возможны.
Ещё раз, как бы это глупо не звучало: Чем больше страна наполнена трейдерами, тем Вы более защищены от резких скачков валюты, акций, товаров/услуг и прочего.
Спекуляции — добро. Они помогают удерживать цены рядом со справедливыми значениями. Что улучшает качество жизни простых граждан.
Процесс поиска эффективной цены
Единственный способ прогнозировать поведение ценных бумаг на длительной перспективе, это «использование не эффективностей», или аномалий в движении цены. Большинство торговцев, так или иначе участвуют в процессе поиска, а затем устранения этих аномалий.
Всё что делают спекулянты во время прогнозирования это попытка найти брешь в эффективности рынка найти справедливую цену. А затем стать тем участником который поможет системе быть эффективнее, участвуя в торгах на нужной для этого стороне.
Если трейдер находит настоящую неэффективность (например, проблему в скорость распространения информации), а затем успешно её «закрывает», то он становиться важной частью по улучшению «эффективности» экономики. Он делает цены справедливее и прозрачнее. Он позволяет быстрее найти справедливую цену актива и как можно меньше от неё отклоняться.
Так, индустрия формируют «справедливые» цены на ценные бумаги. Это их глобальная задача и заслуга. Если не будет спекулянтов — цены будут диктоваться монополиями, что принесёт ущерб обывателям.
Торговые роботы (механические торговые системы(МТС), боты) — программные средства для торговли ценными бумагами вместо человека.
Обычно это оконное приложение, которое подключается к терминалу и само совершает сделки купли/продажи по ранее установленному алгоритму. Но не всегда. Существует несколько принципиально разных способов создания и эксплуатации таких систем.
2.1. Библиотеки для создания МТС
Самая сложная технология создания ботов. Самая быстрая. Обычно на выходе мы имеем оконное или консольное приложение. Это приложение подключается к терминалу или одному из интернет шлюзов доступных у брокера и осуществляет торговлю.
Эта технология никогда не была доступна массовому пользователю, т.к. для того чтобы писать ботов на библиотеке, нужно быть программистом.
Подобные технологии зародились в конце 20 века в банковской сфере, там где компании могли тратиться на большие команды программистов.
Лишь последние несколько десятилетий данные технологии распространяются среди обычных пользователей.
Для России это безусловно СтокШарп, пионеры, первооткрыватели данного направления в СНГ.2.2. Торговые роботы встроенные в терминал
Во многих терминалах существует возможность создать МТС на скриптовом языке, прямо внутри терминала. Это может быть визуальный конструктор, места для вставки кода скриптового языка или полноценный редактор стратегий.
Когда-то давно это было прорывом для области алготрейдинга. Это самый заслуженный способ создания подобных программ. Он один из первых сделал доступным создание ботов для массового пользователя.
Конечно же, торговых роботов делали до того как появилась такая возможность, но тем не менее в своё время эта технология сделала прорыв.
Это очень простая технология. В большинстве случаев, на её изучение , достаточно нескольких недель.
Для России самый популярный терминал для написания МТС таким способом это Квик, благодаря нему, алготрейдинг пришёл в СНГ в начале двухтысячных.
На нашем сайте Вы можете бесплатно скачать торговых роботов созданных в терминале Квик, вот по этой ссылке.
2.3. Визуальные редакторы для создания торговых роботов
Две предыдущие технологии не могли в полной мере охватить всех желающих делать ботов, т.к. оставались в какой-то степени сложны. Но при этом огромное количество людей хотелось это делать не прикладывая к этому вообще никаких усилий. И вот, на заре 21 века в мир начали выходить редакторы.
Визуальный редактор — оконное приложение для создания ботов. Позволяет это делать неподготовленным людям, далёким от программирования. Время входа — несколько дней.
Визуальные редакторы позволяют путём несокльких манипуляций с кубиками, внутри логической схемы, создавать полноценные приложения для торговли.
Конечно же до сих пор популярные редакторы имеют ряд ограничений по сравнению с библиотеками и встроенными языками. В число таких ограничений входит невозможность проводить тестирование на стакане и во многих, отсутствие портфельной торговли.
Для России самый популярный визуальный редактор стратегий — ТсЛаб.
Прежде чем будем говорить о плюсах использования ботов, пройдёмся по тем проблемам которые подстерегают трейдера который хочет торговать по старинке — руками.
В торговле руками есть плюсы и минусы. Прошу прощения за снобизм, но здесь мы будем обсуждать лишь минусы. Если нужны «неоспоримые» плюсы этого вида трейдинга, go в кухню на семинар. Я же никаких плюсов в сравнении с алгоритмической, к сожалению не вижу.
3.1. Не правильное понимание механики рынка
Думается мне, что до 95% всех кто торгует руками не понимает как долгосрочно быть в выигрыше. Как на длительном периоде быть на нужной стороне графика.
Писал об этом обширнейшую статью: ссылка. Почитайте, не поленитесь. Будет весело.Из этого возникает вопрос: почему люди имеют не правильные представления о спекуляциях? Остановимся на этом.
НеНаучность литературы
Большинство трудов по трейдингу написаны людьми далёкими от точных дисциплин, методологий верификаций знаний. Поэтому эти книги содержат ненаучные, или даже антинаучные знания. Знания которые вводят читателя в заблуждение.
Начиная свой путь в эту сферу, люди становятся заложниками этих фантазий — торгуют основываясь на ложных рыночных парадигмах.
Сектантство и идолопоклонничество
Как нигде в другой области, в трейдинге распространено идолопоклонничество, сектантство, даже культ личности. Ведь как и в любом деле в котором часто сама жизнь зависит от принимаемых решений, слабые всегда стремятся переложить ответственность на другого человека.
Очень часто это становиться причиной неправильных представлений о рынке. Попадая в «околорыночную секту», человек утрачивает способность трезво мыслить. Толпа «верующих» захлёстывает разум, после чего человек начинает входить в позиции на основе знаний и прогнозов «ГУРУ».
Это смешно читать если Вы не сталкивались с этим. Но если Вы понимаете как функционируют форумы «Эллиотчиков», «Свечных аналитиков» или «следящих за куклом(трейдерское божество)», то это становиться грустно. Ибо таких людей очень и очень немало. Специальных исследований никто не проводит, но мне на глазок кажется что это несколько десятков процентов.
Отсутствие научной базы
В абсолютном большинстве источников(литературных, курсы обучения, видео-гайдах), которые претендуют на обучение человека нашему ремеслу, его не учат искать не Эффективности. Человеку не предлагается универсальный способ работы с информацией. В общем случае обучение сводиться к зазубриванию некоторых правил торговли, зная которые человек будет всегда на правильной стороне.
Подобный подход к обучению новичков плодит людей неспособных реагировать на новые обстоятельства и изучать предмет самостоятельно.
Как результат всего вышеперечисленного, имеем у большинства торговцев проблемы с восприятием реальности. Как если бы водители на дорогах ездили с завязанными глазами или могли поворачивать только на лево.
3.2. Психология
Если в предыдущем главе мы рассматривали неспособность людей выработать план. То в текущей мы поговорим о не способности человека следовать своим правилам.
Иными словами, даже когда у Вас на руках будет готовая и проверенная рыночная аномалия, или не эффективность, Вы всё равно не сможете её правильно использовать. Человеческая психология создаёт здесь множество рисков.
Углубляться подробно в это не будем. Для того чтобы более менее сносно об этом писать, нужно отучиться много лет на соответствующей кафедре и разбираться в поведении человека.
Однако факт такой есть: люди системно не способны следовать своему же плану. Т.е. ошибки неизбежны и значимы. Человеческий фактор в огромен.
3.3. Обучение через депозит
Людям приходящим в спекуляции и решающим начать с торговли руками свойственно верить в «накапливание» опыта. В то что созерцание графика или совершение операций на реальные деньги их чему то научит. В любой другой сфере деятельности это было бы нормально. Но только если бы речь шла не о статистически значимых выборках. Ведь для того чтобы увидеть и оттестировать какие-то виды стратегий одному человеку, без помощи технических средств, понадобиться несколько жизней.
Например спекулянт увидел повторяющуюся формацию 50 раз, и решил её торговать. Но! Это наблюдение не является статистически значимым. И человек начинает терять деньги. Ведь он не знает что нужно увидеть формацию 1500 раз и более, чтобы считать её стабильной(это утверждение легко проверяется форвардными тестами). В итоге подобные эксперименты оканчиваются одинаково — потерей денег и/или обнулением депозита.
Одна из основополагающих мантр трейдинга гласит — «Входите в сделки — теряйте деньги, и в этом процессе вы научитесь торговать. Чтобы научиться вставать, нужно научиться падать.»
Это пошло из популярнейшей книги среди трейдеров: «История биржевого спекулянта» Эдвина Лафевра. Эта первая книга которую читает любой любой спекулянт. Она рекомендуется абсолютным большинством трейдеров к прочтению.Год за годом, люди идут по этому пути но не могут найти стабильных закономерностей и прибыльных стратегий. Их опыт не даёт им возможность получать прибыль.
Отказ от использования технических средств — приводит в тупик от 95 до 99 % всех трейдеров.
В предыдущей главе, мы посмотрели на основные проблемы спекуляций «руками». Теперь разберёмся с тем, как же можно нивелировать их при помощи алгоритмизации торговли.
Представим что мы уже алготрейдер, и выясним, как мы справляемся с проблемами понимания механики рынка и «психологией».
4.1. Прозрачное, научное, истинное понимание механики рынка
У алготрейдеров есть ясное представление о движениях цены акций на рынке. После нескольких лет исследований наково человека нельзя сбить с пути псевдонаучной литературой и демагогией. Боты — не верят в харизматических лидеров.
Научный подход к исследованию рынка гарантирует Вам истинные представления о функционировании рынка. Это гарантируется использованием технических средств а также статистически значимыми выборками во время поиска неэффективностей.
4.2. Проблемы психологии «нет»
В общем случае проблемы психологии перестают существовать. Вместе с человеческим фактором. Ничего такого бот сам генерировать не может.
Торговые роботы не станут паниковать, не передумают через пару минут после того как вошли в позицию. Их нельзя напугать новостными передачами или выступлением всем известного «Гуру».
Однако, взял слово НЕТ в кавычки, т.к. в некотором роде человеческий фактор таки есть. Но немного в изменённом формате. Всегда, в любой момент времени существует искушение отключить программу, частично или полностью. Вмешаться в работу. От этого никуда не деться…
4.3. Исследование рынка техническими средствами
Алготрейдеру не нужно тратить свои деньги на исследование рынка или десятилетие учиться торговать разглядывая графики. Исследование рынка для него — это использование специальных программ, которые делают за него всю работу.
А это уже прямая экономия денег и времени.
Конечно же, изучение подобных программ требует времени. Иногда это занимает несколько лет. Но итоговые плюсы очевидны.
Кроме того, подобный подход позволяет постоянно оставаться на «острие кинжала». Иметь в комплекте только рабочие, оттестированные стратегии. Своевременно перетряхивайте портфель ботов и меняйте аномалии которые они используют. Это максимизирует время которое Вы будете в плюсе.
В этой главе поговорим о технических средствах и методологиях исследования рынка на предмет не эффективностей, которые помогут нам заработать.
Начнём с ГРААЛЯ. Внимательно читайте эту главу! Она сэкономит Вам очень много времени!
5.0. Что искать?
Стратегии
Глобально, за 5ть лет исследований я понял одно: на рынке есть несколько типов стратегий которые зарабатывают. Надо начинать с самых простых не выдумывая велосипеды:
1) ТРЕНД. Алгоритмы направленные на поиск формаций которые сигнализируют о начале большого движения. В процессе нужно сосредоточиться на поиске выхода из консолидации и как можно долгом удержании позиции. Без резких выходов, тем более без коротких стопов.
2) АРБИТРАЖ. Алгоритмы основанные на возврате к среднему.
И то и другое работает. Причём Арбитраж работает на Форекс, что, с его супер Эффективным рынком — невероятно. Что может означать, что на ММВБ он будет работать ещё очень долго.
Не ищите больше ничего. Сосредоточьтесь на этих двух типах стратегий. Если появиться понимание как это работает — Вы станете богом рынка, сможете двигаться дальше. Если Вы не найдёте ничего Трендового и Арбитражного на ММВБ — смело идите на завод, Вам никогда не следует заниматься трейдингом.
Стопы и выходы
В трендовых алгоритмах выход важнее чем вход. Надо обратить на это особое внимание.
В арбитражных я такого не заметил. В них важно сосредоточиться на точке входа.
Волатильность
Следите за волатильностью рынка. Без этого любой алгоритм скатиться в УГ за пару лет. Всегда привязывайте логику к волатильности. Это индикаторы ADX и ATR и т.д. Торговые роботы не смотрящие за волатильностью — мёртвые при рождении.
Управление капиталом и портфели
Никогда не запускайте бота одного. В реальных торгах должно принимать участие от 5ти разных алгоритмов. Только так можно хоть немного сделать эквити гладкой. Это очень Важно, т.к. после нескольких месяцев просадки или боковика появиться желание отключить прогрмму. Чтобы этого не было, включайте комплект стратегий.
Не торговые часы
Не торгуйте в определённое время. Это связано с «пределами алгоритмической торговли», о чём мы поговорим немного позже. Пока скажу лишь что МТС нужны люди чтобы их «отжимать» — если люди перестали нажимать на кнопки, они перестают зарабатывать. А это топливо имеет свойство уставать, спать, работать и праздновать праздники. Торгуйте только в самые активные часы.
5.1. Программы для тестирования и исследований
Теперь настала пора поговорить об инвентаре.
Существуют специальные программы, обычно это оконные приложения, которые помогают алготрейдерам тестировать свои идеи и искать закономерности. Это тестеры, майнеры, оптимизаторы, много их…
Я не буду здесь расписывать их подробно. Их существует несколько десятков и многие из них хороши. Остановимся лишь на тех, которые лично мне нравятся.
5.1.1 ВелсЛаб
Познакомился с этой программой сравнительно недавно, около года назад. Прекрасная платформа для тестирования! До того момента всё удивлялся прозорливости отечественных разработчиков похожих платформ. После знакомства с ней я понял где они это позаимствовали.Несколько режимов написания стратегий: в виде кода, правил и в виде визуального редактора. На любой вкус.
Это разработка западных программистов, представляющая обширнейший арсенал для исследования рынка.
Плохо в этой программе лишь то, что она заточена только под западные площадки. Поэтому для СНГ это просто станция для тестирования.
5.1.2. ТсЛаб
Российский аналог предыдущего продукта, с отсутствием последнего недостатка. Этой программой можно как вести исл, так и торговать.
В арсенале у нас так же несколько видов написания ботов, как в виде блок-схем, так и в виде кода. Богатый оптимизатор и прекрасная, русская поддержка с огромным форумом.
Единственной проблемой, по моему мнению, является не возможность паралельно тестировать комплект стратегий. Надо «заталкивать» всех в один скрипт.
5.1.3. Самописные библиотеки
Это то с чего я начинал…
Для начала нужно стать программистом. Затем открываем новый проект в компиляторе — пишем сами.
Можно попробовать пойти по этому пути. Займёт это примерно два года до первого нормального тестера. Когда я говорил о том, что я сделал так в 2010, на меня смотрели как на дурачка. Ведь вокруг очень много способов тестировать своих торговых роботов не тратя на это нескольких лет жизни.
Всё что захочется можно реализовать в коде. Единственная проблема — время. Вы потратите на это очень и очень много времени.
Также, это единственный способ тестировать торговых роботов которые в логике используют ордер лог или снепШот стакана.
И да, это единственный способ сделать по настоящему быстрый HFT алгоритм.
5.2. Методология тестирования стратегий
Во время тестирования торговых роботов нужно придерживаться нескольких простых правил. Они когда-то помогли мне, а значит обязательно помогут Вам.
Количество входов имеет значение
Если кол-во входов во время тестирования меньше 1000, то в 70-90% вероятность что такой алгоритм не будет работать в будущем.
Отнеситесь к этому моменту серьёзно. Если не получается добрать до этой цифры в одном инструменте — берите несколько, берите данные не за три, а за пять лет. Делайте что хотите, но количество входов должно быть большим. 1000, 2000, 5000. Только так форвардные тесты могут быть положительны.
Всегда делайте Форвардные тесты
Необходимо проводить форвардные тесты. Оставляйте небольшое кол-во данных для того чтобы на них потом проверить готовую стратегию.
Это правило тесно связано с предыдущим. В ходе своих исследований наша команда заметила что между количеством входов на основном интервале тестирования и успешностью форвардных тестов есть прямая зависимость. Которую можно представить следующим графиком:
Группируйте инструменты
Инструменты представленные на рынке — разные. Какие-то трендовые, другие подходят для арбитража. Ни в коем случае не рассчитывайте что тенденция измениться.
Вы поймёте какие из них для чего подходят во время своих первых тестов. Там вещи довольно очевидные. Далее тестируйте и торгуйте трендовые алгоритмы на трендовых инструментах, арбитражные на арбитражных
Здесь никаких особых советов и техник нет. Всё вроде бы очевидно, но таки напишу об этом.
Тестируем стратегию не меньше месяца на учебном счете
Почти у любого брокера есть возможность заказать тестовый сервер. Не торопитесь. Ошибки обязательно будут. Как логические так и технические. Нужно их устранить до начала торгов.
Не запускайте программу с Вашего домашнего ПК
Всегда пользуйтесь услугами VDS. Запускайте ботов на удалённых серверах Виндовс. Так Вы сможете гарантировать программе постоянный доступ в интернет а также стабильное соединение с биржей. (Перебрал их не менее 10, сейчас пользуюсь https://ruvds.com)
В заключении охота пожелать Вам удачи на поприще изучения алготрейдинга. Мы постарались сделать удобный сервис для быстрого старта. Надеемся он оказался для Вас полезен.
Торгуйте алгоритмически! Пишите роботов, тестируйте свои идеи!
Удачных алгоритмов!