№
| Действие
| Пояснения
|
1
| Добавляем примитив шар
диаметром 0.2 к сцене [Add --> Primitive shape --> Sphere, X-size = 0.2]
и нажимаем .
| Созданный шарик появится в видимом слое 1 по умолчанию и будет подвижным и взаимодействующим, то есть способным реагировать на столкновения с другими предметами (обладающими свойством взаимодействия) при помощи физического движка.
|
2
| Если требуется изменить свойства объекта, можно его выделить и нажать на кнопку на панели инструментов «Scene Object Properties», в появившемся окне выбрать «Show dynamic properties dialog» (свойства «Body is respondable» и «Body is dynamic»
включены).
| Во вкладке «Shape» можно изменить внешний вид шарика.
|
3
| Доступ к нему возможен через кнопку
Calculation module properties
| Потребуется, чтобы тело нашего ШаБота можно было обрабатывать с помощью модулей расчетов (например, minimum distance calculation module).
|
4
| Проверьте, что у объекта шар были подключены такие свойства,
как «Collidable», «Measurable», «Renderable» и «Detectable»
| Кнопка , вкладка «Common». Поставьте галочки, если свойства
не подключены.
|
5
| Открываем окно «Object/item position/orientation» с помощью кнопки (вкладка «Position/Translations»), в поле «Object/item translation & position scaling operations» вводим значение 0.02 для «Along Z(m)» и проверяем, что в поле «Relative to»
выбрано «World». Кликаем по «Translate selection»
| Все выделенные объекты передвинутся на 2 см вдоль абсолютной оси Z и шарик немного поднимется
|
6
| В окне «Scene hierarchy» дважды кликните по названию шарика и дайте ему имя, например, bubbleRob, и нажмите .
|
|
7
| Добавим датчик близости (proximity sensor), чтобы наш ШаБот знал о приближении к препятствиям: [Add --> Proximity sensor --> Cone type].
|
|
8
| «Object/item position/orientation» (вкладка «Orientation/Rotations»), в разделе «Object/item rotation operations» введите 90 в полях «Around Y(m)» и «Around Z(m)», кликните «Rotate selection».
Далее во вкладке «Position/Translations» в поле «Object/item position» введите 0.1 в поле «X-coord» и 0.12 в поле «Z-coord»
| Датчик близости корректно прикреплен к нашему ШаБоту
|
9
| Дважды кликните по значку датчика в окне «Scene hierarchy» и откройте его свойства. Кликните «Show volume parameter», откроется окно «Detection Volume Properties». Введите в поле «Offset» значение 0.005, «Angle» – 30 и «Range» – 0.15.
|
|
10
| Вернитесь к окну свойств сенсора и выберите «Show detection parameters».
В открывшемся окне уберите галочку (если она стоит) напротив «Don't allow detections if distance smaller than» и закройте окно
|
|
11
| Поменяйте имя сенсора на bubbleRob_sensingNose, дважды кликнув в окне «Scene hierarchy» по значку сенсора
|
|
12
| Выделите значок сенсора и, зажав , значок робота в окне «Scene hierarchy»,
далее [Edit --> Make last selected object parent].
| Сенсор прикрепится к роботу
|
13
| ШаБот будет выглядеть следующим образом
|
|
14
| Создадим отдельную сцену [File --> New scene]. Будем создавать колеса
|
|
15
| Добавьте к сцене объект цилиндр [Add --> Primitive shape --> Cylinder] с параметрами измерений [0.08, 0.08 (автоматически пропишется), 0.02].
| Шару ставим галочку у свойств «Collidable», «Measurable», «Renderable» and «Detectable»
|
16
| В окне «Object/item position/orientation» устанавливаем абсолютную позицию в (0.05, 0.1, 0.04) и абсолютную ориентацию
в (-90,0,0). Мы получили левое колесо и надо переименовать объект в bubbleRob_leftWheel
| Копируем колесо, устанавливаем по абсолютной оси Y значение -0.1 и даем имя bubbleRob_rightWheel.
|
17
| Копируем оба колеса, вставляем на первую сцену
|
|
| Добавим шарнир (или мотор) к колесам: [Add --> Joint -->Revolute]. Новые объекты появляются всегда в одном месте сцены и нам потребуется перенести мотор к центру колеса: выделяем мотор и левое колесо (с ), заходим в «Position/Translations», секция [Object/item position --> Apply to selection]
| Во вкладке «Orientation/Rotations» секции «Object/item orientation» нажимаем «Apply to selection»
|
18
| Переименуйте мотор в bubbleRob_leftMotor
|
|
19
| Откройте свойствамотора (дважды кликнув на значок у мотора в окне «Scene hierarchy»), нажмите кнопку «Show dynamic properties dialog», откроется окно «Joint Dynamic Properties», в нем ставим 2 галочки: «Motor enabled» и «Lock motor when target velocity is zero».
| Аналогично добавляем мотор для правого колеса и проделываем с ним те же процедуры, называем bubbleRob_rightMotor.
|
20
| Далее присоединяем левое колесо к левому мотору (выделяем оба объекта, [Edit--> Make last selected object parent]), правое – к правому, и оба мотора – к bubbleRob.
|
|
21
|
|
|
22
| Запустите моделирование.
| Робот опрокинулся! Почему?
Потому что мы забыли дать ему третью точку опоры на плоскость. Остановите моделирование.
|
23
| В новой сцене добавьте шар (sphere) с диаметром 0.05 и установите ему свойства «Collidable», «Measurable», «Renderable» и «Detectable», далее переименуйте его в bubbleRob_slider.
| Добавим маленькое поддерживающее колесико сзади.
|
24
| В окне «Scene Object Properties» нажмите «Show dynamic properties dialog» и в появившемся окне в качестве материала (Material) выберите «noFrictionMaterial»
|
|
25
| Добавляем датчик силы: [Add --> Force sensor]. Переименовываем его в bubbleRob_connection и поднимаем его вверх на 0.05 («Object/item position/orientation», вкладка «object/item position», «Z-coord»).
| Чтобы связать сделанный шарик с роботом
|
26
| Закрепляем шарик за датчиком силы (как это делали с колесами и моторами
| Копируем оба объекта и добавляем на основную сцену
|
27
| Передвинуть датчик силы на -0.07 по оси X и прикрепить к телу робота
|
|
28
| Запустить моделирование
| Поддерживающий шарик и тело робота постоянно слегка сталкиваются друг с другом и как бы дрожат. Это происходит потому, что оба объекта (bubbleRob_slider и bubbleRob) сталкиваются друг с другом.
|
28
| В [Scene Object Properties -> Show dynamic properties] (окно «Dynamics properties») для bubbleRob_slider укажите 00001111 в качестве «local respondable mask» (уберите галочки там, где должны быть 0), а для bubbleRob –11110000.
| Исправить поведение
|
29
| Пример устойчивого ШаБота
|
30
|
|
|
31
| Запустить моделирование
| ШаБот почти не движется, ведь его моторы заблокированы
|
32
| Исправим нашего робота.
Выберите 2 колеса и поддерживающий шарик, и в окне «Dynamics properties» кликните 3 раза «M=M*2 (for selection)». В итоге масса каждого из выбранных объектов увеличится в 8 раз.
| Стабильность динамических моделей тесно связана с массами и инерцией вовлеченных нестатических объектов. Следует помнить,
что массы объекта и соединенного с ним мотора или датчика силы не должны отличаться более, чем в 10 раз, иначе сенсор или мотор будут работать некорректно.
|
33
| Проделайте те же действия с инерциями этих объектов: «I = I*2 (for selection)».
|
|
34
| Запустить моделирование
| Стабильность достигнута
|
35
| Для обоих моторов в окне «Dynamics properties» установите «Target velocity» (скорость) равной 50.
| ШаБот может двигаться вперед и в итоге упадет в пропасть.
|
36
| Верните «Target velocity» значение 0 для обоих моторов
|
|