🐞
Webotsオブジェクトの使い方
海洋ロボコンをやってた人です。
今回は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 ""
}
より使用したいロボットを選べます。
また.wbt
はvscodeで編集しにくいため、拡張機能language-proto-webots
をインストール後.proto
の拡張子で編集するとシンタックスハイライト・構文強調が割り当てられるのでオススメです。
※注意
2. インポート可能な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
}
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"
}
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{}
だとデフォルト値
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{}
だとデフォルト値
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
}
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
}
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ファイルにまとめて、起動させると以下のような環境を作ることができます。
以上、皆さんのお力添えになれば幸いです。
Likeいただけると大変励みになりますので、よろしくお願いいたします。
3. メモ
以下、webotsを使う上で参照したいリンク先
-
プログラムの書き方
DEF and USE -
インポートできるオブジェクト
Solids -
インポートできるセンサ
Sensor -
インポートできるロボット
Robots -
各種センサープラグインのようなもの
Nodes and API FunctionsLidar / Camera / TouchSensor / Fluid / Propeller
など
Discussion