oscillation_ctrl/models/tether/tether.sdf.jinja

224 lines
7.0 KiB
Django/Jinja

{#-------------------SDF generator for Tether Gazebo model--------------------#}
{#--------------The parameters bellow are the ones to be tweaked--------------#}
{#--------------------------:Tweakable parameters:----------------------------#}
{%- set number_elements = 1 -%}
{%- set last_elem = number_elements |int - 1 -%}
{%- set cl = 0.17 -%} {#- cl: length of the element (meters) -#}
{%- set cr = 0.001 -%} {#- cr: radius of the element (meters) -#}
{%- set sr = 0.009 -%} {#- sr: element joint radius (sphere) (meters) -#}
{%- set y_el = 0.2 -%} {#- y_el: length of the Y elements (meters) -#}
{%- set y_tetha = 18 -%} {#- y_tetha: angle between the Y elements (degrees)-#}
{%- set m = 0.03 * cl -%} {#- m: mass of the element (kg), given the length -#}
{%- set damping = 0.05 -%}
{%- set friction = 0.0 -%}
{%- set spring_stiffness = 0.01 -%}
{%- set spring_reference = 0.0 -%}
{%- set element_color = 'White' -%}
{%- set joint_color = 'Red' -%}
{#----------------------------------------------------------------------------#}
{%- macro cylinder(cl, cr) -%}
<geometry>
<cylinder>
<length>{{cl}}</length>
<radius>{{cr}}</radius>
</cylinder>
</geometry>
{%- endmacro -%}
{%- macro sphere(sr) -%}
<geometry>
<sphere>
<radius>{{sr}}</radius>
</sphere>
</geometry>
{%- endmacro -%}
{%- macro inertial(m) -%}
{#- A note about the inertial tensor matrix - It should be as bellow -#}
{#- {%- set izz = m/2*cr**2 -%} -#}
{#- {%- set ixx = m/12*cl**2 + m/4*cr**2 -%} -#}
{#- {%- set iyy = m/12*cl**2 + m/4*cr**2 -%} -#}
{#- but seems to segfault Gazebo when changing the values of the element specs -#}
{%- set izz = 0.01 -%}
{%- set ixx = 0.01 -%}
{%- set iyy = 0.01 -%}
<inertial>
<mass>{{m}}</mass>
<inertia>
<ixx>{{ixx}}</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>{{iyy}}</iyy>
<iyz>0</iyz>
<izz>{{izz}}</izz>
</inertia>
</inertial>
{%- endmacro -%}
{%- macro collision(cl, cr) -%}
<collision name="collision">
<pose>0.1 0 0 0 1.570790 0</pose>
{{ cylinder(cl, cr) }}
<surface>
<contact>
<ode>
<min_depth>0.00005</min_depth>
</ode>
</contact>
<friction>
<ode>
<mu>1.0</mu>
<mu2>1.0</mu2>
</ode>
</friction>
</surface>
</collision>
{%- endmacro -%}
{%- macro element_material(element_color) -%}
<material>
<script>
<name>Gazebo/{{element_color}}</name>
<uri>file://media/materials/scripts/gazebo.material</uri>
</script>
</material>
{%- endmacro -%}
{%- macro joint_material(joint_color) -%}
<material>
<script>
<name>Gazebo/{{joint_color}}</name>
<uri>file://media/materials/scripts/gazebo.material</uri>
</script>
</material>
{%- endmacro -%}
{%- macro element_visual(cl, cr, element_color) -%}
{%- set x = cl * 0.5 -%}
<visual name="element_visual">
<pose>{{x}} 0 0 0 1.570790 0</pose>
{{ cylinder(cl, cr) }}
{{ element_material(element_color) }}
</visual>
{%- endmacro -%}
{%- macro sphere_visual(sr, sphere_clor) -%}
<visual name="sphere_visual">
{{ sphere(sr) }}
{{ joint_material(joint_color) }}
</visual>
{%- endmacro -%}
{%- macro link(n, x, y, z, yaw, m, cl, cr, sr, element_color, joint_color) -%}
<link name="link_{{n}}">
<gravity>true</gravity>
<pose>{{x}} {{y}} {{z}} 0.0 0.0 {{yaw}}</pose>
{{ inertial(m) }}
{%- if n != last_elem -%}
{{ collision(cl, cr) }}
{{ element_visual(cl, cr, element_color) }}
{%- endif -%}
{{ sphere_visual(sr, joint_color) }}
</link>
{%- endmacro %}
{%- macro joint(k, damping, friction, spring_stiffness, spring_reference) -%}
{%- if k is number -%}
{%- set link_n = k - 1 -%}
<joint name="joint_{{k}}" type="universal">
<child>link_{{k}}</child>
<parent>link_{{link_n}}</parent>
{%- else -%}
{%- set link_n = 0 -%}
<joint name="joint_{{k}}" type="universal">
<child>link_{{link_n}}</child>
<parent>link_{{k}}</parent>
{%- endif %}
<axis>
<xyz>0 1 0</xyz>
<dynamics>
<damping>{{damping}}</damping>
<friction>{{friction}}</friction>
<spring_stiffness>{{spring_stiffness}}</spring_stiffness>
<spring_reference>{{spring_reference}}</spring_reference>
</dynamics>
<use_parent_model_frame>true</use_parent_model_frame>
</axis>
<axis2>
<xyz>0 0 1</xyz>
<dynamics>
<damping>{{damping}}</damping>
<friction>{{friction}}</friction>
<spring_stiffness>{{spring_stiffness}}</spring_stiffness>
<spring_reference>{{spring_reference}}</spring_reference>
</dynamics>
<use_parent_model_frame>true</use_parent_model_frame>
</axis2>
<physics>
<ode>
<cfm_damping>1</cfm_damping>
</ode>
</physics>
</joint>
{%- endmacro -%}
{%- macro lift_drag(n, cl, cr) -%}
{%- set area = 2 * cr * cl -%}
<plugin name="link_{{n}}_drag" filename="libLiftDragPlugin.so">
<robotNamespace></robotNamespace>
<a0>0</a0>
<cla>0</cla>
<cda>1.2535816618911175</cda>
<alpha_stall>0</alpha_stall>
<cda_stall>1.4326647564469914</cda_stall>
<cp>0 0 0</cp>
<area>{{area}}</area>
<air_density>1.2041</air_density>
<forward>0 1 0</forward>
<upward>0 0 1</upward>
<link_name>link_{{n}}</link_name>
</plugin>
{%- endmacro %}
{%- macro y_element(cl, y_el, y_tetha) %}
{%- set x_l = - cl / 2 -%}
{%- set y_l = 0.0 -%}
{%- set z_l = 0.0 -%}
{%- set yaw_l = - y_tetha / 2 -%}
{{ link("y_left", x_l, y_l, z_l, yaw_l, m, y_el, cr, sr, element_color, joint_color) }}
{{ lift_drag("y_left", cl, cr) }}
{%- set x_r = - cl / 2 -%}
{%- set y_r = 0 -%}
{%- set z_r = 0.0 -%}
{%- set yaw_r = y_tetha / 2 %}
{{ link("y_right", x_r, y_r, z_r, yaw_r, m, y_el, cr, sr, element_color, joint_color) }}
{{ lift_drag("y_right", cl, cr) }}
{{ joint("y_left", damping, friction, spring_stiffness, spring_reference) }}
{{ joint("y_right", damping, friction, spring_stiffness, spring_reference) }}
{%- endmacro -%}
<?xml version="1.0" ?>
<!-- DO NOT EDIT: Generated from tether.sdf.jinja -->
<sdf version="1.5">
<model name="tether">
<pose>0.0 0.0 0.0 0.0 0.0 0.0</pose>
{% for n in range(number_elements) -%}
{%- set x = n * cl / 2 + ( n - 1) * cl / 2 -%}
{%- set y = 0.0 -%}
{%- set z = 0.0 -%}
{%- set yaw = 0.0 -%}
{{ link(n, x, y, z, yaw, m, cl, cr, sr, element_color, joint_color) }}
{{ lift_drag(n, cl, cr) }}
{% endfor -%}
{{ y_element(cl, y_el, y_tetha) }}
{% for k in range(1, number_elements) -%}
{{ joint(k, damping, friction, spring_stiffness, spring_reference) }}
{% endfor -%}
<joint name="fixed_to_world" type="fixed">
<child>link_{{last_elem}}</child>
<parent>world</parent>
</joint>
</model>
</sdf>