Skip to content

Commit

Permalink
Merge pull request #11 from twyleg/switch_to_jinja2
Browse files Browse the repository at this point in the history
Switch to jinja2
  • Loading branch information
twyleg committed Aug 28, 2023
2 parents 98aed10 + 7860bae commit ae1455d
Show file tree
Hide file tree
Showing 11 changed files with 115 additions and 49 deletions.
4 changes: 3 additions & 1 deletion examples/python/track_generator_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ def get_track_file_examples() -> List[Path]:
if __name__ == "__main__":
output_directory = FILE_DIR / "output"
track_files = get_track_file_examples()
track_output_directories = generate_track(track_files, output_directory, False, False)
track_output_directories = generate_track(
track_files, output_directory, generate_png=True, generate_gazebo_project=True, generate_ground_truth=True
)
for track_output_directory in track_output_directories:
print(track_output_directory)
6 changes: 3 additions & 3 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ sphinx-copybutton~=0.5.2
sphinx-autobuild~=2021.3.14

pytransform3d~=3.2.0
drawsvg~=2.2.0
drawsvg[all]~=2.2.0
watchdog~=3.0.0
pyside6~=6.4.0.1
pyside6>=6.2.4
xmlschema~=2.3.1

jinja2~=3.1.2
5 changes: 3 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,11 @@ def read(fname):
long_description_content_type="text/markdown",
install_requires=[
"pytransform3d~=3.2.0",
"drawsvg~=2.2.0",
"drawsvg[all]~=2.2.0",
"watchdog~=3.0.0",
"pyside6==6.4.0.1",
"pyside6>=6.2.4",
"xmlschema~=2.3.1",
"jinja2~=3.1.2",
],
entry_points={
"console_scripts": [
Expand Down
63 changes: 40 additions & 23 deletions track_generator/gazebo_model_generator.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
# Copyright (C) 2022 twyleg
import os
import jinja2
from pathlib import Path
from track_generator.track import Track
from string import Template


def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()
FILE_DIRPATH = Path(__file__).parent


def write(path, data):
return open(path, "w").write(data)
def read(fname):
return open(FILE_DIRPATH / fname).read()


class GazeboModelGenerator:
Expand All @@ -27,37 +25,56 @@ def __init__(self, track_name: str, output_directory: Path):
self.track_materials_scripts_directory.mkdir(parents=True, exist_ok=True)
self.track_materials_textures_directory.mkdir(parents=True, exist_ok=True)

self.environment = jinja2.Environment(loader=jinja2.FileSystemLoader(FILE_DIRPATH / "gazebo_model_templates/"))

def generate_track_material(self):
assert self.track_materials_scripts_directory
template = Template(read("gazebo_model_templates/track.material.template"))
output = template.substitute(
material_name=f"{self.track_name}_material", texture_file_name=f"{self.track_name}.png"
)
write(self.track_materials_scripts_directory / "track.material", output)
template = self.environment.get_template("track.material.jinja")

material = {"name": f"{self.track_name}_material", "texture_file_name": f"{self.track_name}.png"}

with open(self.track_materials_scripts_directory / "track.material", "w") as output_file:
output_file.write(template.render(material=material))

def generate_track_sdf(self, track: Track):
assert self.track_directory
template = Template(read("gazebo_model_templates/model.sdf.template"))
output = template.substitute(name=self.track_name, width=track.width, height=track.height)
write(self.track_directory / "model.sdf", output)
template = self.environment.get_template("model.sdf.jinja")

model = {"name": self.track_name, "width": track.width, "height": track.height}

with open(self.track_directory / "model.sdf", "w") as output_file:
output_file.write(template.render(model=model))

def generate_track_config(self, track: Track):
assert self.track_directory
template = Template(read("gazebo_model_templates/model.config.template"))
output = template.substitute(
name=self.track_name,
version=track.version,
desc=self.track_name,
)
write(self.track_directory / "model.config", output)
template = self.environment.get_template("model.config.jinja")

model = {"name": self.track_name, "version": track.version, "desc": self.track_name}

with open(self.track_directory / "model.config", "w") as output_file:
output_file.write(template.render(model=model))

def generate_example_world(self, track: Track):
assert self.track_directory
template = self.environment.get_template("example.world.jinja")

example = {"name": self.track_name}
output_filename = f"{self.track_name}.world"

with open(self.gazebo_models_directory / output_filename, "w") as output_file:
output_file.write(template.render(example=example))

def generate_setup_script(self):
assert self.gazebo_models_directory
output = read("gazebo_model_templates/setup.bash.template")
write(self.gazebo_models_directory / "setup.bash", output)

template = self.environment.get_template("setup.bash.jinja")

with open(self.gazebo_models_directory / "setup.bash", "w") as output_file:
output_file.write(template.render())

def generate_gazebo_model(self, track: Track):
self.generate_track_material()
self.generate_track_sdf(track)
self.generate_track_config(track)
self.generate_example_world(track)
self.generate_setup_script()
46 changes: 46 additions & 0 deletions track_generator/gazebo_model_templates/example.world.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?xml version="1.0"?>
<sdf version="1.4">
<world name="default">
<light name='sun' type='directional'>
<cast_shadows>1</cast_shadows>
<pose>0 0 10 0 -0 0</pose>
<diffuse>0.8 0.8 0.8 1</diffuse>
<specular>0.2 0.2 0.2 1</specular>
<attenuation>
<range>1000</range>
<constant>0.9</constant>
<linear>0.01</linear>
<quadratic>0.001</quadratic>
</attenuation>
<direction>-0.5 0.1 -0.9</direction>
<spot>
<inner_angle>0</inner_angle>
<outer_angle>0</outer_angle>
<falloff>0</falloff>
</spot>
</light>
<gravity>0 0 -9.8</gravity>
<physics type='ode'>
<max_step_size>0.001</max_step_size>
<real_time_factor>1</real_time_factor>
<real_time_update_rate>1000</real_time_update_rate>
</physics>
<scene>
<ambient>0.4 0.4 0.4 1</ambient>
<background>0.0 0.0 0.0 1</background>
<shadows>1</shadows>
</scene>
<audio>
<device>default</device>
</audio>
<wind/>

<model name='ground_plane'>
<include>
<uri>model://{{ example.name }}</uri>
<pose>0 0 0 0 0 0</pose>
</include>
</model>

</world>
</sdf>
10 changes: 10 additions & 0 deletions track_generator/gazebo_model_templates/model.config.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<model>
<name>{{ model.name }}</name>
<version>{{ model.version }}</version>
<sdf version="1.4">model.sdf</sdf>

<description>
{{ model.desc }}
</description>

</model>
10 changes: 0 additions & 10 deletions track_generator/gazebo_model_templates/model.config.template

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<?xml version="1.0"?>
<sdf version="1.4">
<model name="${name}">
<model name="{{ model.name }}">
<static>true</static>
<link name="link">
<collision name="collision">
<geometry>
<plane>
<normal>0 0 1</normal>
<size>${width} ${height}</size>
<size>{{ model.width }} {{ model.height }}</size>
</plane>
</geometry>
<surface>
Expand All @@ -24,14 +24,14 @@
<geometry>
<plane>
<normal>0 0 1</normal>
<size>${width} ${height}</size>
<size>{{ model.width }} {{ model.height }}</size>
</plane>
</geometry>
<material>
<script>
<uri>model://${name}/materials/scripts</uri>
<uri>model://${name}/materials/textures/</uri>
<name>${name}_material</name>
<uri>model://{{ model.name }}/materials/scripts</uri>
<uri>model://{{ model.name }}/materials/textures/</uri>
<name>{{ model.name }}_material</name>
</script>
</material>
</visual>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
material ${material_name}
material {{ material.name }}
{
technique
{
Expand All @@ -10,7 +10,7 @@ material ${material_name}

texture_unit
{
texture ${texture_file_name}
texture {{ material.texture_file_name }}
filtering trilinear
}
}
Expand Down
4 changes: 2 additions & 2 deletions track_generator/ground_truth_generator.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Copyright (C) 2023 Lukas Lange
from pathlib import Path
from xml.etree import cElementTree as ET, ElementTree
from xml.etree import ElementTree
from xml.etree import cElementTree as ET
from xml.dom import minidom

from track_generator.track import (
Expand Down

0 comments on commit ae1455d

Please sign in to comment.