Tools: Implement better Scrimmage support

This commit is contained in:
Arash Negahdar 2020-01-29 10:55:55 -05:00 committed by Andrew Tridgell
parent 98dfc69887
commit 908b63573e
2 changed files with 136 additions and 0 deletions

View File

@ -1239,6 +1239,41 @@ else:
frame_infos, frame_infos,
spawns=spawns) spawns=spawns)
if cmd_opts.delay_start:
progress("Sleeping for %f seconds" % (cmd_opts.delay_start,))
time.sleep(float(cmd_opts.delay_start))
tmp = None
if cmd_opts.frame in ['scrimmage-plane', 'scrimmage-copter']:
# import only here so as to avoid jinja dependency in whole script
from jinja2 import Environment, FileSystemLoader
from tempfile import mkstemp
entities = []
config = {}
config['plane'] = cmd_opts.vehicle == 'ArduPlane'
config['terrain'] = 'mcmillan'
if location is not None:
config['lat'] = location[0]
config['lon'] = location[1]
config['alt'] = location[2]
config['entities'] = []
for k in offsets:
(x, y, z, heading) = offsets[k]
config['entities'].append({'x': x, 'y': y, 'z': z, 'heading': heading,
'to_ardupilot_port': 9003 + k * 10,
'from_ardupilot_port': 9002 + k * 10,
'to_ardupilot_ip': '127.0.0.1'})
env = Environment(loader=FileSystemLoader(os.path.join(autotest_dir, 'template')))
mission = env.get_template('scrimmage.xml').render(**config)
tmp = mkstemp()
atexit.register(os.remove, tmp[1])
with os.fdopen(tmp[0], 'w') as fd:
fd.write(mission)
run_in_terminal_window('SCRIMMAGE', ['scrimmage', tmp[1]])
if cmd_opts.delay_start: if cmd_opts.delay_start:
progress("Sleeping for %f seconds" % (cmd_opts.delay_start,)) progress("Sleeping for %f seconds" % (cmd_opts.delay_start,))
time.sleep(float(cmd_opts.delay_start)) time.sleep(float(cmd_opts.delay_start))

View File

@ -0,0 +1,101 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="http://gtri.gatech.edu"?>
<runscript xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
name="Straight flying">
<!-- <run start="0.0" end="100" dt="0.00833333" -->
<run start="0.0" end="10000000" dt="0.001"
{% if plane %}
motion_multiplier="1"
{% endif %}
time_warp="1"
enable_gui="true"
network_gui="false"
start_paused="false"/>
<stream_port>50051</stream_port>
<stream_ip>localhost</stream_ip>
<end_condition>all_dead</end_condition> <!-- time, one_team, none-->
<grid_spacing>10</grid_spacing>
<grid_size>1000</grid_size>
<terrain>{% if terrain %}{{ terrain }}{% else %}mcmillan{% endif %}</terrain>
<background_color>191 191 191</background_color> <!-- Red Green Blue -->
<gui_update_period>10</gui_update_period> <!-- milliseconds -->
<plot_tracks>false</plot_tracks>
<output_type>all</output_type>
<show_plugins>false</show_plugins>
<metrics>SimpleCollisionMetrics</metrics>
<log_dir>~/.scrimmage/logs</log_dir>
{% if plane %}
<latitude_origin>{% if lat %}{{ lat }}{% else %}32.42553{% endif %}</latitude_origin>
<longitude_origin>{% if lon %}{{ lon }}{% else %}-84.79109{% endif %}</longitude_origin>
<altitude_origin>{% if alt %}{{ alt }}{% else %}75{% endif %}</altitude_origin>
{% else %}
<latitude_origin>{% if lat %}{{ lat }}{% else %}34.458281{% endif %}</latitude_origin>
<longitude_origin>{% if lon %}{{ lon }}{% else %}-84.180209{% endif %}</longitude_origin>
<altitude_origin>{% if alt %}{{ alt }}{% else %}450{% endif %}</altitude_origin>
{% endif %}
<show_origin>true</show_origin>
<origin_length>10</origin_length>
<network>LocalNetwork</network>
<network>GlobalNetwork</network>
<entity_interaction>SimpleCollision</entity_interaction>
<entity_interaction enable_startup_collisions="false"
remove_on_collision="false">GroundCollision</entity_interaction>
<!-- uncomment "seed" and use integer for deterministic results -->
<!--<seed>2147483648</seed>-->
<!-- ========================== TEAM 1 ========================= -->
{% for e in entities %}
<entity>
<team_id>1</team_id>
<color>77 77 255</color>
<count>1</count>
<health>1</health>
<radius>1</radius>
<x>{% if e.x %}{{ e.x }}{% else %}0{% endif %}</x>
<y>{% if e.y %}{{ e.y }}{% else %}0{% endif %}</y>
<z>{% if e.z %}{{ e.z }}{% else %}0{% endif %}</z>
{% if plane %}<pitch>-20</pitch>{% endif %}
<heading>{% if e.heading %}{{ e.heading }}{% else %}0{% endif %}</heading>
<sensor>RigidBody6DOFStateSensor</sensor>
<controller>DirectController</controller>
<!-- Use this settings in SITL -->
<autonomy to_ardupilot_port="{% if e.to_ardupilot_port %}{{ e.to_ardupilot_port }}{% else %}9003{% endif %}"
from_ardupilot_port="{% if e.from_ardupilot_port %}{{ e.from_ardupilot_port }}{% else %}9002{% endif %}"
to_ardupilot_ip="{% if e.to_ardupilot_ip %}{{ e.to_ardupilot_ip }}{% else %}127.0.0.1{% endif %}"
{% if plane %}
>ArduPilot</autonomy>
<!-- Use this settings in HIL through mavproxy -->
<!-- <autonomy to_ardupilot_port="5501" from_ardupilot_port="5502" mavproxy_mode="true">ArduPilot</autonomy> -->
<!-- <motion_model drawVel="0" drawAngVel="0" drawAcc="0" use_launcher="1" launch_time="60" launch_accel="200">${motion_model=JSBSimControl}</motion_model> -->
<motion_model drawVel="0" drawAngVel="0" drawAcc="0">{% if e.motion_model %}{{ e.motion_model }}{% else %}JSBSimControl{% endif %}</motion_model>
<script_name>rascal_no_autopilot.xml</script_name>
<visual_model>{% if e.visual_model %}{{ e.visual_model }}{% else %}zephyr-blue{% endif %}</visual_model>
{% else %}
servo_map="[ motor_0 0 1000 +2000 346.41 1200.0 +1 ]
[ motor_1 1 1000 +2000 346.41 1200.0 +1 ]
[ motor_2 2 1000 +2000 346.41 1200.0 +1 ]
[ motor_3 3 1000 +2000 346.41 1200.0 +1 ]"
>ArduPilot</autonomy>
<motion_model write_csv="true">{% if e.motion_model %}{{ e.motion_model }}{% else %}Multirotor{% endif %}</motion_model>
<visual_model>{% if e.visual_model %}{{ e.visual_model }}{% else %}iris{% endif %}</visual_model>
{% endif %}
</entity>
{% endfor %}
</runscript>