Skip to content

Commit 97c7d5e

Browse files
authored
Merge pull request #513 from bark-simulator/renderer
Nested Renderer Functionality
2 parents a470798 + c91a7ca commit 97c7d5e

File tree

16 files changed

+295
-10
lines changed

16 files changed

+295
-10
lines changed

WORKSPACE

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,18 @@ load("@com_github_rules_rss//rss:rss.bzl", "rss_dependencies")
7575
rss_dependencies()
7676
# --------------------------------------------------
7777

78+
# -------------------- BARKSCAPE -------------------
79+
load("@barkscape_project//utils:dependencies.bzl", "dependencies")
80+
dependencies()
81+
load("@build_bazel_rules_nodejs//:index.bzl", "yarn_install")
82+
yarn_install(
83+
# Name this npm so that Bazel Label references look like @npm//package
84+
name = "npm",
85+
package_json = "@barkscape_project//barkscape/web:package.json",
86+
yarn_lock = "@barkscape_project//barkscape/web:yarn.lock",
87+
)
88+
# --------------------------------------------------
89+
7890
# git_repository(
7991
# name = "interaction_dataset_fortiss_internal",
8092
# commit = "9ace5fde9260c20736b0463026e0f407b7d395ba",

bark/examples/BUILD

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ py_test(
66
data = ['//bark:generate_core',
77
'@benchmark_database_release//:v2.0',
88
':params'],
9-
109
deps = [
1110
"//bark/benchmark:benchmark_runner",
1211
"@benchmark_database//load:benchmark_database",
@@ -41,6 +40,7 @@ py_test(
4140
"//bark/runtime/commons:xodr_parser",
4241
"//bark/runtime/viewer:pygame_viewer",
4342
"//bark/runtime/viewer:matplotlib_viewer",
43+
"//bark/runtime/viewer:buffered_mp_viewer",
4444
"//bark/runtime/scenario/scenario_generation:scenario_generation",
4545
"//bark/runtime:runtime",
4646
":paths"],
@@ -141,6 +141,25 @@ py_binary(
141141
":paths"],
142142
)
143143

144+
py_binary(
145+
name = "barkscape_example",
146+
srcs = ["barkscape_example.py"],
147+
data = ['//bark:generate_core',
148+
'//bark/runtime/tests:xodr_data'],
149+
deps = ["//bark/runtime/commons:parameters",
150+
"//bark/runtime/commons:xodr_parser",
151+
"//bark/runtime/viewer:pygame_viewer",
152+
"//bark/runtime/viewer:matplotlib_viewer",
153+
"//bark/runtime/viewer:buffered_viewer",
154+
"//bark/runtime/scenario/scenario_generation:scenario_generation",
155+
"//bark/runtime:runtime",
156+
":paths",
157+
"@barkscape_project//barkscape/server/runners:bark_runner",
158+
"@barkscape_project//barkscape/server:bark_xviz_stream",
159+
"@barkscape_project//barkscape/server:base_server",
160+
"@barkscape_project//barkscape/server:base_handler"],
161+
)
162+
144163
py_library(
145164
name = "paths",
146165
srcs = ["paths.py"],

bark/examples/barkscape_example.py

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# Copyright (c) 2021 fortiss GmbH
2+
#
3+
# Authors: Julian Bernhard, Klemens Esterle, Patrick Hart and
4+
# Tobias Kessler
5+
#
6+
# This work is licensed under the terms of the MIT license.
7+
# For a copy, see <https://opensource.org/licenses/MIT>.
8+
9+
10+
# NOTE: To run this example, you need to clone BARKSCAPE
11+
# Clone using: git clone https://github.com/bark-simulator/barkscape
12+
# Run the web-inferfce: bazel run //barkscape/web:run
13+
14+
import sys, os, logging
15+
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
16+
from bark.runtime.commons.parameters import ParameterServer
17+
from bark.runtime.viewer.buffered_viewer import BufferedViewer
18+
from bark.runtime.scenario.scenario_generation.config_with_ease import \
19+
LaneCorridorConfig, ConfigWithEase
20+
from bark.runtime.runtime import Runtime
21+
from bark.examples.paths import Data
22+
23+
from bark.core.world.opendrive import *
24+
from bark.core.world.goal_definition import *
25+
from bark.core.models.behavior import *
26+
from bark.core.commons import SetVerboseLevel
27+
28+
# BARKSCAPE
29+
from barkscape.server.base_server import BaseServer
30+
from barkscape.server.runners.bark_runner import BARKRunner
31+
32+
# scenario
33+
class CustomLaneCorridorConfig(LaneCorridorConfig):
34+
def __init__(self,
35+
params=None,
36+
**kwargs):
37+
super(CustomLaneCorridorConfig, self).__init__(params, **kwargs)
38+
39+
def goal(self, world):
40+
road_corr = world.map.GetRoadCorridor(
41+
self._road_ids, XodrDrivingDirection.forward)
42+
lane_corr = self._road_corridor.lane_corridors[0]
43+
return GoalDefinitionPolygon(lane_corr.polygon)
44+
45+
46+
if __name__ == "__main__":
47+
# configure lanes
48+
param_server = ParameterServer()
49+
# NOTE: merging
50+
# left_lane = CustomLaneCorridorConfig(params=param_server,
51+
# lane_corridor_id=0,
52+
# road_ids=[0, 1],
53+
# behavior_model=BehaviorMobilRuleBased(param_server),
54+
# s_min=5.,
55+
# s_max=50.)
56+
# right_lane = CustomLaneCorridorConfig(params=param_server,
57+
# lane_corridor_id=1,
58+
# road_ids=[0, 1],
59+
# controlled_ids=True,
60+
# behavior_model=BehaviorMobilRuleBased(param_server),
61+
# s_min=5.,
62+
# s_max=20.)
63+
# scenarios = \
64+
# ConfigWithEase(num_scenarios=3,
65+
# map_file_name=Data.xodr_data("DR_DEU_Merging_MT_v01_shifted"),
66+
# random_seed=0,
67+
# params=param_server,
68+
# lane_corridor_configs=[left_lane, right_lane])
69+
70+
# NOTE: intersection
71+
param_server["BehaviorIDMLaneTracking"]["CrosstrackErrorGain"] = 2.5
72+
param_server["BehaviorIDMClassic"]["DesiredVelocity"] = 5.
73+
param_server["BehaviorIntersectionRuleBased"]["BrakingDistance"] = 10.
74+
param_server["BehaviorIntersectionRuleBased"]["PredictionTimeHorizon"] = 5.
75+
param_server["BehaviorIntersectionRuleBased"]["AngleDiffForIntersection"] = 0.25
76+
77+
# configure the lane corridors and how the agents
78+
lane_corridors = []
79+
lane_corridors.append(
80+
LaneCorridorConfig(params=param_server,
81+
source_pos=[-30, -3],
82+
sink_pos=[30, -3],
83+
behavior_model=BehaviorIntersectionRuleBased(param_server),
84+
min_vel=5.,
85+
max_vel=5.,
86+
ds_min=5.,
87+
ds_max=10.,
88+
s_min=15.,
89+
s_max=30.))
90+
lane_corridors.append(
91+
LaneCorridorConfig(params=param_server,
92+
source_pos=[30, 3],
93+
sink_pos=[-30, 3],
94+
behavior_model=BehaviorIntersectionRuleBased(param_server),
95+
min_vel=5.,
96+
max_vel=5.,
97+
ds_min=5.,
98+
ds_max=10.,
99+
s_min=15.,
100+
s_max=30.))
101+
lane_corridors.append(
102+
LaneCorridorConfig(params=param_server,
103+
source_pos=[3, -30],
104+
sink_pos=[-30, 3],
105+
behavior_model=BehaviorIntersectionRuleBased(param_server),
106+
controlled_ids=True,
107+
min_vel=5.,
108+
max_vel=5.,
109+
ds_min=5.,
110+
ds_max=10.,
111+
s_min=15.,
112+
s_max=30.))
113+
114+
scenarios = \
115+
ConfigWithEase(num_scenarios=3,
116+
map_file_name=Data.xodr_data("threeway_intersection"),
117+
random_seed=0,
118+
params=param_server,
119+
lane_corridor_configs=lane_corridors)
120+
121+
viewer = BufferedViewer()
122+
env = Runtime(step_time=0.2,
123+
viewer=viewer,
124+
scenario_generator=scenarios,
125+
render=True,
126+
maintain_world_history=True)
127+
128+
# run BARKSCAPE
129+
logger = logging.getLogger()
130+
bark_server = BaseServer(
131+
runner=BARKRunner, runnable_object=env, logger=logger)
132+
bark_server.Start()

bark/examples/merging.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import os
1212
from bark.runtime.commons.parameters import ParameterServer
1313
from bark.runtime.viewer.matplotlib_viewer import MPViewer
14+
from bark.runtime.viewer.buffered_mp_viewer import BufferedMPViewer
1415
from bark.runtime.viewer.video_renderer import VideoRenderer
1516
from bark.runtime.scenario.scenario_generation.config_with_ease import \
1617
LaneCorridorConfig, ConfigWithEase
@@ -74,10 +75,7 @@ def goal(self, world):
7475
lane_corridor_configs=[left_lane, right_lane])
7576

7677
# viewer
77-
viewer = MPViewer(params=param_server,
78-
x_range=[-35, 35],
79-
y_range=[-35, 35],
80-
follow_agent_id=True)
78+
viewer = BufferedMPViewer(params=param_server)
8179

8280
sim_step_time = param_server["simulation"]["step_time",
8381
"Step-time used in simulation",

bark/models/observer/observer_model_none.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#ifndef BARK_MODELS_OBSERVER_OBSERVER_MODEL_NONE_HPP_
1010
#define BARK_MODELS_OBSERVER_OBSERVER_MODEL_NONE_HPP_
1111

12+
#include <string>
1213
#include <memory>
1314
#include "bark/world/world.hpp"
1415
#include "bark/world/observed_world.hpp"
@@ -21,6 +22,7 @@ using bark::world::World;
2122
using bark::world::WorldPtr;
2223
using bark::world::objects::AgentId;
2324
using bark::world::ObservedWorld;
25+
using world::renderer::RendererPtr;
2426

2527
/**
2628
* @brief Observer creating an ObservedWorld given a World
@@ -45,6 +47,10 @@ class ObserverModelNone : public ObserverModel {
4547
const WorldPtr& world, const AgentId& agent_id) {
4648
// NOTE: this creates a standard observed world
4749
ObservedWorld observed_world(world, agent_id);
50+
// NOTE: generate child renderer for the observed world
51+
RendererPtr renderer = world->GetRenderer()->AddRendererChild(
52+
std::to_string(agent_id));
53+
observed_world.SetRenderer(renderer);
4854
return observed_world;
4955
}
5056

bark/models/observer/observer_model_parametric.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
// For a copy, see <https://opensource.org/licenses/MIT>.
88

99

10+
#include <string>
1011
#include <memory>
1112
#include "bark/models/observer/observer_model_parametric.hpp"
1213
#include "bark/commons/distribution/distribution.hpp"
@@ -20,6 +21,7 @@ using namespace bark::world;
2021
using namespace bark::world::objects;
2122
using namespace bark::commons::transformation;
2223
using namespace bark::commons;
24+
using world::renderer::RendererPtr;
2325

2426
ObserverModelParametric::ObserverModelParametric(bark::commons::ParamsPtr params) :
2527
ObserverModel(params),
@@ -44,6 +46,11 @@ ObservedWorld ObserverModelParametric::Observe(
4446
// Clone world here since otherwise we change global world state
4547
auto observed_world = ObservedWorld(world->Clone(), agent_id);
4648

49+
// NOTE: generate child renderer for the observed world
50+
RendererPtr renderer = world->GetRenderer()->AddRendererChild(
51+
std::to_string(agent_id));
52+
observed_world.SetRenderer(renderer);
53+
4754
const auto observe_only_for = GetObserveOnlyForAgents();
4855
if(!observe_only_for.empty() && std::find(observe_only_for.begin(),
4956
observe_only_for.end(), agent_id) == observe_only_for.end()) {

bark/python_wrapper/world/renderer.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ void python_renderer(py::module m) {
2727
.def(py::init<>())
2828
.def("Add", &Renderer::Add)
2929
.def("Clear", &Renderer::Clear)
30+
.def("AddRendererChild", &Renderer::AddRendererChild)
31+
.def("GetRendererChild", &Renderer::GetRendererChild)
32+
.def("GetRendererChildren", &Renderer::GetRendererChildren)
33+
.def("ClearRendererChildren", &Renderer::ClearRendererChildren)
3034
.def_property_readonly(
3135
"primitives", &Renderer::GetRenderPrimitives);
3236

bark/runtime/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ py_library(
88
"//bark/runtime/viewer:py_viewer",
99
"//bark/runtime/viewer:matplotlib_viewer",
1010
"//bark/runtime/viewer:buffered_viewer",
11+
"//bark/runtime/viewer:buffered_mp_viewer",
1112
"//bark/runtime/viewer:video_renderer",
1213
"//bark/runtime/scenario:scenario"],
1314
visibility = ["//visibility:public"],

bark/runtime/viewer/BUILD

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,13 @@ py_library(
6969
":py_viewer"],
7070
visibility = ["//visibility:public"],
7171
)
72+
73+
py_library(
74+
name = "buffered_mp_viewer",
75+
srcs = ["buffered_mp_viewer.py"],
76+
data = ['//bark:generate_core'],
77+
deps = ["//bark/runtime/commons:commons",
78+
":py_viewer",
79+
":buffered_viewer"],
80+
visibility = ["//visibility:public"],
81+
)

bark/runtime/viewer/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from .pygame_viewer import PygameViewer
33
from .video_renderer import VideoRenderer
44
from .buffered_viewer import BufferedViewer
5+
from .buffered_mp_viewer import BufferedMPViewer
56
from .viewer import BaseViewer
67

78
__all__ = ["MPViewer","PygameViewer","VideoRenderer","BufferedViewer","BaseViewer"]

0 commit comments

Comments
 (0)