• Версия сайта для школ и мобильных устройств
  • Центр Магеллан - Проектирование роботов в программе V-REP

    Вы на странице: Проектирование роботов в программе V-REP!

    Конкурс не выбран
    0

     

     

    Программирование роботов — это интересно

     

     

     

    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 1

    Многие наверное видели японских гуманоидных роботов, или французский учебный робот 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:
    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 2

     

    Видим три варианта: образовательный (EDU), триальный (EVAL), и плеер (player).

    Плеер — это программа с помощью которой можно проиграть сцены созданные в полноценной версии (то есть нет возможности редактирования) — бесплатная.

    Триальная — это полнофункциональная версия, в которой нет возможности сохранить. Нет лицензионных ограничений.

    Образовательный — это полнофункциональный пакет, имеющий лицензионные ограничения, текст лицензии можно прочитать здесь. Суть его в том, что институты, школы, хоббисты — могут использовать бесплатно это программное обеспечение. При том, что использование не коммерческое (а образовательное).

    Мы с вами вполне подходим под определение хоббистов (т.к. хотим образовательно по-программировать роботов), поэтому смело скачиваем версию EDU PRO для своей операционной системы.

    В данный момент версия 3.2.0, вот прямая ссылка на windows вариант: V-REP_PRO_EDU_V3_2_0_Setup (98 Mb)

     

     

    Старт

     

    После установки, и старта мы увидим экран:

     

    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 3

     

    Здесь мы видим следующие объекты:

    — сцена — здесь и происходит всё действо, на данный момент она пуста (есть только пол)
    — слева видим блок с библиотекой моделей — сверху папки, и под ней — отображается содержимое выбранной папки (выбраны robots/non-mobile — то есть стационарные роботы — манипуляторы)
    — далее отображается иерархия мира

    Иерархия включает в себя — корневой объект (мир), в котором находятся все объекты.

    В нашем примере это:

     


    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 4

     

    Видим источники света, видим объект для реализации пола (а это твердая поверхность, с текстурой), и группу для камер.

    Есть главный объект скрипт, контролирующий сцену и всех объектов на ней, и у каждого объекта может быть свой скрипт — внутренние скрипты реализованы на языке Lua.

    Вверху и слева мы видим toolbar — меню. Самой главной кнопкой является кнопка Play (Start Simulation) — после которой стартует симуляция сцены:

     

    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 5

     

     

    Сценарий работы следующий:
    — мы перетаскиваем с помощью DragAndDrop объекты из библиотеки моделей. 
    — корректируем их местоположение
    — настраиваем скрипты
    — стартуем симулятор
    — останавливаем симулятор

    Попробуем что-нибудь на практике.

     

     

    Быстрый старт

     

    Попробуем оживить робота.

    Для этого выбираем слева папку robots/mobile и в списке выбираем Ansi, захватываем, переносим на сцену и отпускаем, робот появляется на нашей сцене и появляется информация об авторе:

     


    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 6

     

     

    Теперь нажимаем на Start Simulation, и видим движение робота, и можем управлять положение головы, рук (реализовано через Custom User Interface), вот видео:

     

    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 7

     

     

     

    Далее останавливаем симуляцию:


    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 8

     

    Скрипт управления

     

    Можем открыть и увидеть код, который научил робота идти (управляет автономным передвижением робота). Для этого на иерархии объектов, напротив модели Asti, дважды кликаем на иконке «файл»:


    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 9

     

     

    Вот Lua программа, которая осуществляет движение робота:

     

    Скрипт управления движением робота Asti
    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. И можете попробовать посмотреть другие модели в работе, у некоторых есть скрипты для автономной работы.

     

    Мобильные роботы


    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 10

     

    Стационарные роботы (манипуляторы)

     


    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 11

     
    Примеры сцен

    Так же есть большое количество примеров (сцен), которые поставляются сразу с программой. Для этого надо выбрать в меню «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 [9]
    руководство пользователя (на английском) [10]
    большое количество видео, примеров из V-REP [11]

    Чтобы поддержать популяризацию этой интересной системы на русском языке — создана русскоязычная группа по V-REP

     

     

     

    Применение в учебном процессе

     

    На наш взгляд, у V-REP есть хороший потенциал применения в учебных процессах. Если вас интересует применение системы в учебном процессе — в школе, институте, в клубе робототехники и т.п. — напишите нам. Может быть получиться консолидировать усилия и сделать учебные русскоязычные материалы.

     

     

    Планы на будущее

     

    Программируем роботов — бесплатный робосимулятор V-REP. Первые шаги - 12

     

     

    Конечно это лишь малая часть возможностей V-REP системы. 

     

     

    ПРОДОЛЖЕНИЕ СТАТЬИ