🐞

Webotsオブジェクトの使い方

2023/12/08に公開

海洋ロボコンをやってた人です。

今回はWebotsのオブジェクトを様々使ってみたので、その備忘録を記載していきます。

この記事のゴールは、以下のようなイメージです。

動作環境は以下です。

  • webots R2023b
  • OS: Ubuntu22.04
  • ROS Distributions: Humble

本記事に対するコメントも積極的に募集しますので、よろしくお願いいたします。

1. .wbtのテンプレート

world.wbt
#VRML_SIM R2022b utf8

EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2022b/projects/objects/backgrounds/protos/TexturedBackground.proto"
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2022b/projects/objects/backgrounds/protos/TexturedBackgroundLight.proto"
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2022b/projects/objects/floors/protos/CircleArena.proto"
# Robots PROTO
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2023b/projects/robots/nex/protos/FireBird6.proto"

WorldInfo {
  info [
    "Original Robot simulation that can be controlled by a ROS."
  ]
  title "ROS2 simulation of the fish robot"
  basicTimeStep 20
}
Viewpoint {
  orientation -0.33185733874619844 -0.09874274160469809 0.9381474178937331 3.686018050088086
  position 1.700313773507203 1.0549607538959629 1.4846240848267684
}
TexturedBackground {
}
TexturedBackgroundLight {
}
CircleArena {
}
FireBird6 {
  translation     0 0 0
  rotation        0 1 0 0
  name            "Fire Bird 6"
  controller      "fire_bird_6_obstacle_avoidance"
  controllerArgs  ""
  customData      ""
  supervisor      FALSE
  synchronization TRUE
  window          "fire_bird_6_window"
  remoteControl   ""
}

https://www.cyberbotics.com/doc/guide/robots?version=cyberbotics:R2019a#robots

より使用したいロボットを選べます。

また.wbtはvscodeで編集しにくいため、拡張機能language-proto-webotsをインストール後.protoの拡張子で編集するとシンタックスハイライト・構文強調が割り当てられるのでオススメです。

※注意

2. インポート可能なObjects

https://www.cyberbotics.com/doc/guide/objects?version=R2021a#objects

を参照して、使用したいオブジェクトを利用します。

以下、インポートして使う可能性のあるObjectsの記述例を記載しておきます。


world.wbt
# Advertising Board PROTO
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2023b/projects/objects/advertising_board/protos/AdvertisingBoard.proto"

AdvertisingBoard {
  translation       -3 0 0
  rotation          0 0 1 0
  name              "advertising board"
  recognitionColors [ 1 1 1, 0.75 0 0 ]
  displayBackLight  FALSE
  displayWidth      2
  displayHeight     1.5
  frameThickness    0.6
  frameColor        0.886275 0.886275 0.886275
  poleColor         0.886275 0.886275 0.886275
  poleNumber        0
  poleType          "cylinder"
  poleHeight        5
  poleThickness     0.4
  baseRatio         3.2
}

CyberboticsTower

world.wbt
# Buildings PROTO
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2023b/projects/objects/buildings/protos/CyberboticsTower.proto"

CyberboticsTower {
  translation 3 3 0
  rotation    0 0 1 0
  name        "Cyberbotics tower"
}

Drinks

world.wbt
# Drinks PROTO
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2023b/projects/objects/drinks/protos/Can.proto"
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2023b/projects/objects/drinks/protos/WaterBottle.proto"


Can {
  translation -1.2 0.5 0.06
  rotation 0 0 1 0
  name "can_1"
  color 1 1 1
  mass 0.35
}

WaterBottle {
  translation -1.3 0.6 0
  rotation    0 0 1 0
  name        "water bottle"
  mass        1
}

CircleArena

CircleArena{}だとデフォルト値

world.wbt
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2022b/projects/objects/floors/protos/CircleArena.proto"

CircleArena {
  translation     0 0 0
  rotation        0 0 1 0
  name            "circle arena"
  radius          5.0
  floorTileSize   2.5 2.5
  wallThickness   0.01
  wallHeight      0.1
  subdivision     96
}

Floor

Floor{}だとデフォルト値

world.wbt
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2022b/projects/objects/floors/protos/Floor.proto"

Floor {
  translation     0 0 0
  rotation        0 0 1 0
  name            "floor"
  size            10 10
  tileSize        0.5 0.5
}

RectangleArena

world.wbt
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2023b/projects/objects/floors/protos/RectangleArena.proto"

RectangleArena {
  translation     0 0 0
  rotation        0 1 0 0
  name            "rectangle arena"
  floorSize       25 25
  floorTileSize   1 1
  wallThickness   0.01
  wallHeight      0.5
  wallColor       0.8 0.8 0.8
  wallTileSize    0.5 0.5
}

UnevenTerrain

world.wbt
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2022b/projects/objects/floors/protos/UnevenTerrain.proto"

UnevenTerrain {
  translation    0 0 0
  rotation       0 0 1 0
  name           "uneven terrain"
  size           25 25 0
  xDimension     25
  yDimension     25
  randomSeed     1
  flatCenter     FALSE
  flatBounds     FALSE
  perlinNOctaves 3
}
world.wbt
# Human PROTO
EXTERNPROTO "https://raw.githubusercontent.com/cyberbotics/webots/R2023b/projects/humans/pedestrian/protos/Pedestrian.proto"

Pedestrian {
  translation -7.2 -1.2 1.28
  name "Pedestrian1"
  controllerArgs [
    "--trajectory=-7.2 -1.2, -7.2 3.8"
    "--speed=0.5"
  ]
  shirtColor            0.25 0.55 0.20
  pantsColor            0.24 0.25 0.5
  shoesColor            0.28 0.15 0.06
  skinColor             1.0 0.75 0.7
  enableBoundingObject TRUE
}

Pedestrian {
  translation 0 -2.5 1.28
  name "Pedestrian2"
  controllerArgs [
    "--trajectory=0 -2.5, -3.0 -2.5"
    "--speed=0.8"
  ]
  shirtColor            0.33 0.30 0.40
  pantsColor            0.24 0.25 0.5
  shoesColor            0.28 0.15 0.06
  skinColor             1.0 0.75 0.7
  enableBoundingObject TRUE
}


上記を一つの.wbtファイルにまとめて、起動させると以下のような環境を作ることができます。

https://twitter.com/tasada038/status/1725762091313979764

以上、皆さんのお力添えになれば幸いです。
Likeいただけると大変励みになりますので、よろしくお願いいたします。

3. メモ

以下、webotsを使う上で参照したいリンク先

Discussion