Added autopush v1.0-rc
Signed-off-by: merspieler <merspieler@users.noreply.github.com>
This commit is contained in:
parent
11f8857825
commit
46b0613da2
13 changed files with 1771 additions and 8 deletions
|
@ -28,10 +28,31 @@
|
|||
|
||||
<model>
|
||||
<pushback>
|
||||
<kp type="double">5000</kp>
|
||||
<ki type="double">200</ki>
|
||||
<kd type="double">500</kd>
|
||||
<position-norm type="double">0</position-norm>
|
||||
<position-norm>0</position-norm>
|
||||
<enabled type="int"/>
|
||||
<available type="int">1</available>
|
||||
<chocks alias="/controls/gear/wheel-chocks"/>
|
||||
<steer-cmd-norm alias="/controls/flight/rudder"/>
|
||||
<yaw alias="/gear/gear[0]/steering-norm"/>
|
||||
<yaw-mult type="float">1.0</yaw-mult>
|
||||
<target-speed-km_h type="float">0.0</target-speed-km_h>
|
||||
<K_p type="float">1.0</K_p>
|
||||
<F_p type="float">0.1</F_p>
|
||||
<K_i type="float">0.01</K_i>
|
||||
<F_i type="float">2.0</F_i>
|
||||
<K_d type="float">0.0</K_d>
|
||||
<F_d type="float">0.0</F_d>
|
||||
<driver>
|
||||
<K_V type="float">5.5</K_V>
|
||||
<F_V type="float">5.5</F_V>
|
||||
<D_min-m type="float">5.0</D_min-m>
|
||||
<K_psi type="float">0.03</K_psi>
|
||||
<debug type="bool">true</debug>
|
||||
</driver>
|
||||
<route>
|
||||
<show type="bool"/>
|
||||
<view type="string">Model View</view>
|
||||
</route>
|
||||
</pushback>
|
||||
<icing>
|
||||
<iceable>
|
||||
|
@ -223,8 +244,11 @@
|
|||
<item>
|
||||
<label>Pushback</label>
|
||||
<binding>
|
||||
<command>dialog-show</command>
|
||||
<dialog-name>pushback</dialog-name>
|
||||
<command>nasal</command>
|
||||
<script>
|
||||
var autopush_dlg = gui.Dialog.new("sim/gui/dialogs/announce/dialog", "Aircraft/IDG-A32X/AircraftConfig/autopush.xml");
|
||||
autopush_dlg.open();
|
||||
</script>
|
||||
</binding>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -1501,6 +1525,28 @@
|
|||
<icing>
|
||||
<file>Aircraft/IDG-A32X/Nasal/icing.nas</file>
|
||||
</icing>
|
||||
<autopush>
|
||||
<file>Nasal/autopush.nas</file>
|
||||
</autopush>
|
||||
<autopush_driver>
|
||||
<file>Nasal/autopush_driver.nas</file>
|
||||
</autopush_driver>
|
||||
<dynarr>
|
||||
<file>Nasal/dynarr.nas</file>
|
||||
</dynarr>
|
||||
<autopush_route>
|
||||
<file>Nasal/autopush_route.nas</file>
|
||||
</autopush_route>
|
||||
</nasal>
|
||||
|
||||
<fdm>
|
||||
<jsbsim>
|
||||
<external_reactions>
|
||||
<tractor>
|
||||
<magnitude alias="/sim/model/pushback/force-lbf"/>
|
||||
<x alias="/sim/model/pushback/force-x"/>
|
||||
<y alias="/sim/model/pushback/force-y"/>
|
||||
</tractor>
|
||||
</external_reactions>
|
||||
</jsbsim>
|
||||
</fdm>
|
||||
</PropertyList>
|
||||
|
|
297
AircraftConfig/autopush.xml
Normal file
297
AircraftConfig/autopush.xml
Normal file
|
@ -0,0 +1,297 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!--
|
||||
|
||||
AUTOPUSH
|
||||
Pushback dialog.
|
||||
|
||||
Copyright (c) 2018 Autopush authors:
|
||||
Michael Danilov <mike.d.ft402 -eh- gmail.com>
|
||||
Joshua Davidson http://github.com/it0uchpods
|
||||
Merspieler http://github.com/merspieler
|
||||
Original code (c) FlightGear
|
||||
Distribute under the terms of GPLv2.
|
||||
|
||||
-->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<name>autopush</name>
|
||||
<layout>vbox</layout>
|
||||
|
||||
<group>
|
||||
|
||||
<layout>hbox</layout>
|
||||
|
||||
<text>
|
||||
<label>Pushback</label>
|
||||
</text>
|
||||
|
||||
<empty>
|
||||
<stretch>true</stretch>
|
||||
</empty>
|
||||
|
||||
<button>
|
||||
<halign>right</halign>
|
||||
<pref-width>16</pref-width>
|
||||
<pref-height>16</pref-height>
|
||||
<legend/>
|
||||
<key>Esc</key>
|
||||
<binding>
|
||||
<command>dialog-close</command>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
|
||||
<stretch>true</stretch>
|
||||
<layout>vbox</layout>
|
||||
<halign>center</halign>
|
||||
<valign>top</valign>
|
||||
|
||||
<checkbox>
|
||||
<halign>left</halign>
|
||||
<label>Connect</label>
|
||||
<property>/sim/model/pushback/enabled</property>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<group>
|
||||
<layout>table</layout>
|
||||
|
||||
<text>
|
||||
<row>0</row>
|
||||
<col>0</col>
|
||||
<label>Steering:</label>
|
||||
<halign>left</halign>
|
||||
</text>
|
||||
|
||||
<button>
|
||||
<row>0</row>
|
||||
<col>1</col>
|
||||
<pref-width>25</pref-width>
|
||||
<pref-height>25</pref-height>
|
||||
<legend><</legend>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>/sim/model/pushback/steer-cmd-norm</property>
|
||||
<min>-1.0</min>
|
||||
<max>1.0</max>
|
||||
<step>-0.02</step>
|
||||
<wrap>false</wrap>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<slider>
|
||||
<row>0</row>
|
||||
<col>2</col>
|
||||
<min>-1.0</min>
|
||||
<max>1.0</max>
|
||||
<property>/sim/model/pushback/steer-cmd-norm</property>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</slider>
|
||||
|
||||
<button>
|
||||
<row>0</row>
|
||||
<col>3</col>
|
||||
<pref-width>25</pref-width>
|
||||
<pref-height>25</pref-height>
|
||||
<legend>></legend>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>/sim/model/pushback/steer-cmd-norm</property>
|
||||
<min>-1.0</min>
|
||||
<max>1.0</max>
|
||||
<step>0.02</step>
|
||||
<wrap>false</wrap>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<button>
|
||||
<row>0</row>
|
||||
<col>4</col>
|
||||
<pref-width>50</pref-width>
|
||||
<pref-height>25</pref-height>
|
||||
<legend>Center</legend>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/sim/model/pushback/steer-cmd-norm</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<text>
|
||||
<row>1</row>
|
||||
<col>0</col>
|
||||
<label>Speed:</label>
|
||||
<halign>left</halign>
|
||||
</text>
|
||||
|
||||
<button>
|
||||
<row>1</row>
|
||||
<col>1</col>
|
||||
<pref-width>25</pref-width>
|
||||
<pref-height>25</pref-height>
|
||||
<legend><</legend>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>/sim/model/pushback/target-speed-km_h</property>
|
||||
<min>-25</min>
|
||||
<max>25</max>
|
||||
<step>-1</step>
|
||||
<wrap>false</wrap>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<slider>
|
||||
<row>1</row>
|
||||
<col>2</col>
|
||||
<min>-25</min>
|
||||
<max>25</max>
|
||||
<property>/sim/model/pushback/target-speed-km_h</property>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</slider>
|
||||
|
||||
<button>
|
||||
<row>1</row>
|
||||
<col>3</col>
|
||||
<pref-width>25</pref-width>
|
||||
<pref-height>25</pref-height>
|
||||
<legend>></legend>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>/sim/model/pushback/target-speed-km_h</property>
|
||||
<min>-25</min>
|
||||
<max>25</max>
|
||||
<step>1</step>
|
||||
<wrap>false</wrap>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<button>
|
||||
<row>1</row>
|
||||
<col>4</col>
|
||||
<pref-width>50</pref-width>
|
||||
<pref-height>25</pref-height>
|
||||
<legend>Stop</legend>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/sim/model/pushback/target-speed-km_h</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<text>
|
||||
<row>1</row>
|
||||
<col>5</col>
|
||||
<pref-width>16</pref-width>
|
||||
<property>/sim/model/pushback/target-speed-km_h</property>
|
||||
<format>%3.0f</format>
|
||||
<live>true</live>
|
||||
<halign>right</halign>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<row>1</row>
|
||||
<col>6</col>
|
||||
<label> km/h</label>
|
||||
<halign>left</halign>
|
||||
</text>
|
||||
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
<layout>table</layout>
|
||||
|
||||
<text>
|
||||
<row>0</row>
|
||||
<col>0</col>
|
||||
<label>Auto push:</label>
|
||||
<halign>left</halign>
|
||||
</text>
|
||||
|
||||
<button>
|
||||
<row>0</row>
|
||||
<col>1</col>
|
||||
<pref-width>50</pref-width>
|
||||
<pref-height>25</pref-height>
|
||||
<legend>Start</legend>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>autopush_driver.start();</script>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<button>
|
||||
<row>0</row>
|
||||
<col>2</col>
|
||||
<pref-width>50</pref-width>
|
||||
<pref-height>25</pref-height>
|
||||
<legend>Stop</legend>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>autopush_driver.stop();</script>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<text>
|
||||
<row>1</row>
|
||||
<col>0</col>
|
||||
<label>Route in advance:</label>
|
||||
<halign>left</halign>
|
||||
</text>
|
||||
|
||||
<button>
|
||||
<row>1</row>
|
||||
<col>1</col>
|
||||
<pref-width>50</pref-width>
|
||||
<pref-height>25</pref-height>
|
||||
<legend>Enter</legend>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>autopush_route.enter();</script>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<button>
|
||||
<row>1</row>
|
||||
<col>2</col>
|
||||
<pref-width>50</pref-width>
|
||||
<pref-height>25</pref-height>
|
||||
<legend>Done</legend>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>autopush_route.done();</script>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<checkbox>
|
||||
<row>1</row>
|
||||
<col>3</col>
|
||||
<label>Show</label>
|
||||
<property>/sim/model/pushback/route/show</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
</group>
|
||||
|
||||
</group>
|
||||
|
||||
</PropertyList>
|
11
Models/Autopush/Effects/cursor.eff
Normal file
11
Models/Autopush/Effects/cursor.eff
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PropertyList>
|
||||
<inherits-from>Effects/model-combined-deferred</inherits-from>
|
||||
<parameters>
|
||||
<lightmap-enabled type="int">1</lightmap-enabled>
|
||||
<lightmap-color type="vec3d" n="0">1.0 1.0 1.0</lightmap-color>
|
||||
<texture n="3">
|
||||
<image>cursor.png</image>
|
||||
</texture>
|
||||
</parameters>
|
||||
</PropertyList>
|
589
Models/Autopush/cursor.ac
Normal file
589
Models/Autopush/cursor.ac
Normal file
|
@ -0,0 +1,589 @@
|
|||
AC3Db
|
||||
MATERIAL "DefaultWhite" rgb 1.0000 1.0000 1.0000 amb 0.2000 0.2000 0.2000 emis 0.0000 0.0000 0.0000 spec 0.5000 0.5000 0.5000 shi 10 trans 0.0000
|
||||
MATERIAL "autopush cursor" rgb 1.0000 1.0000 1.0000 amb 0.0000 0.0000 0.0000 emis 0.0000 0.0000 0.0000 spec 0.0000 0.0000 0.0000 shi 50 trans 0.0000
|
||||
OBJECT world
|
||||
name "Blender_export__cursor.ac"
|
||||
kids 1
|
||||
OBJECT poly
|
||||
name "Circle"
|
||||
texture "cursor.png"
|
||||
texrep 1 1
|
||||
numvert 128
|
||||
0.0000001 0.1999999 -0.7499999
|
||||
0.0000000 0.1999999 -1.0000000
|
||||
-0.0980171 0.1999999 -0.9951847
|
||||
-0.1950903 0.1999999 -0.9807853
|
||||
-0.2902847 0.1999999 -0.9569404
|
||||
-0.3826835 0.1999999 -0.9238795
|
||||
-0.4713967 0.1999999 -0.8819212
|
||||
-0.5555702 0.1999999 -0.8314696
|
||||
-0.6343933 0.1999999 -0.7730105
|
||||
-0.7071068 0.1999999 -0.7071068
|
||||
-0.7730104 0.1999999 -0.6343933
|
||||
-0.8314696 0.1999999 -0.5555703
|
||||
-0.8819212 0.1999999 -0.4713968
|
||||
-0.9238795 0.1999999 -0.3826834
|
||||
-0.9569404 0.1999999 -0.2902846
|
||||
-0.9807853 0.1999999 -0.1950902
|
||||
-0.9951847 0.1999999 -0.0980170
|
||||
-1.0000000 0.1999999 0.0000002
|
||||
-0.9951847 0.1999999 0.0980173
|
||||
-0.9807853 0.1999999 0.1950906
|
||||
-0.9569402 0.1999999 0.2902850
|
||||
-0.9238794 0.1999999 0.3826837
|
||||
-0.8819211 0.1999999 0.4713970
|
||||
-0.8314694 0.1999999 0.5555705
|
||||
-0.7730102 0.1999999 0.6343936
|
||||
-0.7071064 0.1999999 0.7071071
|
||||
-0.6343929 0.1999999 0.7730108
|
||||
-0.5555698 0.1999999 0.8314700
|
||||
-0.4713962 0.1999999 0.8819215
|
||||
-0.3826828 0.1999999 0.9238798
|
||||
-0.2902840 0.1999999 0.9569405
|
||||
-0.1950896 0.1999999 0.9807854
|
||||
-0.0980164 0.1999999 0.9951848
|
||||
0.0000008 0.1999999 1.0000000
|
||||
0.0980180 0.1999999 0.9951847
|
||||
0.1950912 0.1999999 0.9807851
|
||||
0.2902856 0.1999999 0.9569401
|
||||
0.3826843 0.1999999 0.9238791
|
||||
0.4713976 0.1999999 0.8819208
|
||||
0.5555711 0.1999999 0.8314691
|
||||
0.6343941 0.1999999 0.7730098
|
||||
0.7071076 0.1999999 0.7071060
|
||||
0.7730110 0.1999999 0.6343926
|
||||
0.8314700 0.1999999 0.5555696
|
||||
0.8819215 0.1999999 0.4713963
|
||||
0.9238797 0.1999999 0.3826831
|
||||
0.9569404 0.1999999 0.2902845
|
||||
0.9807853 0.1999999 0.1950904
|
||||
0.9951847 0.1999999 0.0980174
|
||||
1.0000000 0.1999999 0.0000005
|
||||
0.9951848 0.1999999 -0.0980165
|
||||
0.9807854 0.1999999 -0.1950895
|
||||
0.9569407 0.1999999 -0.2902837
|
||||
0.9238800 0.1999999 -0.3826823
|
||||
0.8819219 0.1999999 -0.4713955
|
||||
0.8314705 0.1999999 -0.5555689
|
||||
0.7730116 0.1999999 -0.6343918
|
||||
0.7071083 0.1999999 -0.7071053
|
||||
0.6343950 0.1999999 -0.7730090
|
||||
0.5555723 0.1999999 -0.8314682
|
||||
0.4713991 0.1999999 -0.8819200
|
||||
0.3826860 0.1999999 -0.9238784
|
||||
0.2902876 0.1999999 -0.9569395
|
||||
0.1950935 0.1999999 -0.9807847
|
||||
0.0980206 0.1999999 -0.9951844
|
||||
-0.0735127 0.1999999 -0.7463885
|
||||
-0.1463176 0.1999999 -0.7355889
|
||||
-0.2177134 0.1999999 -0.7177052
|
||||
-0.2870125 0.1999999 -0.6929096
|
||||
-0.3535474 0.1999999 -0.6614408
|
||||
-0.4166775 0.1999999 -0.6236022
|
||||
-0.4757948 0.1999999 -0.5797578
|
||||
-0.5303299 0.1999999 -0.5303301
|
||||
-0.5797577 0.1999999 -0.4757949
|
||||
-0.6236020 0.1999999 -0.4166776
|
||||
-0.6614408 0.1999999 -0.3535475
|
||||
-0.6929095 0.1999999 -0.2870125
|
||||
-0.7177051 0.1999999 -0.2177134
|
||||
-0.7355888 0.1999999 -0.1463176
|
||||
-0.7463884 0.1999999 -0.0735127
|
||||
-0.7499999 0.1999999 0.0000002
|
||||
-0.7463884 0.1999999 0.0735131
|
||||
-0.7355888 0.1999999 0.1463180
|
||||
-0.7177050 0.1999999 0.2177138
|
||||
-0.6929094 0.1999999 0.2870128
|
||||
-0.6614407 0.1999999 0.3535478
|
||||
-0.6236019 0.1999999 0.4166780
|
||||
-0.5797575 0.1999999 0.4757953
|
||||
-0.5303296 0.1999999 0.5303304
|
||||
-0.4757945 0.1999999 0.5797582
|
||||
-0.4166772 0.1999999 0.6236025
|
||||
-0.3535470 0.1999999 0.6614412
|
||||
-0.2870120 0.1999999 0.6929099
|
||||
-0.2177129 0.1999999 0.7177055
|
||||
-0.1463171 0.1999999 0.7355891
|
||||
-0.0735121 0.1999999 0.7463887
|
||||
0.0000008 0.1999999 0.7500001
|
||||
0.0735136 0.1999999 0.7463886
|
||||
0.1463185 0.1999999 0.7355889
|
||||
0.2177143 0.1999999 0.7177051
|
||||
0.2870134 0.1999999 0.6929094
|
||||
0.3535483 0.1999999 0.6614407
|
||||
0.4166785 0.1999999 0.6236019
|
||||
0.4757957 0.1999999 0.5797574
|
||||
0.5303308 0.1999999 0.5303296
|
||||
0.5797584 0.1999999 0.4757945
|
||||
0.6236026 0.1999999 0.4166773
|
||||
0.6614413 0.1999999 0.3535473
|
||||
0.6929099 0.1999999 0.2870124
|
||||
0.7177054 0.1999999 0.2177135
|
||||
0.7355891 0.1999999 0.1463179
|
||||
0.7463887 0.1999999 0.0735131
|
||||
0.7500001 0.1999999 0.0000004
|
||||
0.7463887 0.1999999 -0.0735123
|
||||
0.7355892 0.1999999 -0.1463170
|
||||
0.7177056 0.1999999 -0.2177127
|
||||
0.6929102 0.1999999 -0.2870116
|
||||
0.6614416 0.1999999 -0.3535465
|
||||
0.6236030 0.1999999 -0.4166766
|
||||
0.5797589 0.1999999 -0.4757938
|
||||
0.5303314 0.1999999 -0.5303289
|
||||
0.4757964 0.1999999 -0.5797567
|
||||
0.4166794 0.1999999 -0.6236011
|
||||
0.3535495 0.1999999 -0.6614400
|
||||
0.2870147 0.1999999 -0.6929088
|
||||
0.2177158 0.1999999 -0.7177045
|
||||
0.1463203 0.1999999 -0.7355884
|
||||
0.0735156 0.1999999 -0.7463882
|
||||
numsurf 64
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
25 0.080806 0.323223
|
||||
88 0.091854 0.367417
|
||||
87 0.088765 0.381051
|
||||
24 0.076687 0.341402
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
12 0.069880 0.617849
|
||||
75 0.083660 0.588387
|
||||
74 0.086025 0.604169
|
||||
11 0.073033 0.638893
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
51 0.186299 0.548772
|
||||
114 0.170974 0.536579
|
||||
113 0.171649 0.518378
|
||||
50 0.187199 0.524504
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
64 0.131126 0.748796
|
||||
127 0.129595 0.686597
|
||||
126 0.134145 0.683897
|
||||
63 0.137193 0.745196
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
11 0.073033 0.638893
|
||||
74 0.086025 0.604169
|
||||
73 0.088765 0.618949
|
||||
10 0.076687 0.658598
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
24 0.076687 0.341402
|
||||
87 0.088765 0.381051
|
||||
86 0.086025 0.395830
|
||||
23 0.073033 0.361107
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
37 0.148918 0.269030
|
||||
100 0.142938 0.326773
|
||||
99 0.138607 0.320574
|
||||
36 0.143143 0.260765
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
50 0.187199 0.524504
|
||||
113 0.171649 0.518378
|
||||
112 0.171875 0.500000
|
||||
49 0.187500 0.500000
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
63 0.137193 0.745196
|
||||
126 0.134145 0.683897
|
||||
125 0.138607 0.679426
|
||||
62 0.143143 0.739235
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
10 0.076687 0.658598
|
||||
73 0.088765 0.618949
|
||||
72 0.091854 0.632583
|
||||
9 0.080806 0.676777
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
23 0.073033 0.361107
|
||||
86 0.086025 0.395830
|
||||
85 0.083660 0.411613
|
||||
22 0.069880 0.382151
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
36 0.143143 0.260765
|
||||
99 0.138607 0.320574
|
||||
98 0.134145 0.316103
|
||||
35 0.137193 0.254804
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
49 0.187500 0.500000
|
||||
112 0.171875 0.500000
|
||||
111 0.171649 0.481622
|
||||
48 0.187199 0.475496
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
62 0.143143 0.739235
|
||||
125 0.138607 0.679426
|
||||
124 0.142938 0.673227
|
||||
61 0.148918 0.730970
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
9 0.080806 0.676777
|
||||
72 0.091854 0.632583
|
||||
71 0.095263 0.644939
|
||||
8 0.085350 0.693253
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
22 0.069880 0.382151
|
||||
85 0.083660 0.411613
|
||||
84 0.081693 0.428247
|
||||
21 0.067258 0.404329
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
35 0.137193 0.254804
|
||||
98 0.134145 0.316103
|
||||
97 0.129595 0.313403
|
||||
34 0.131126 0.251204
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
48 0.187199 0.475496
|
||||
111 0.171649 0.481622
|
||||
110 0.170974 0.463421
|
||||
47 0.186299 0.451227
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
61 0.148918 0.730970
|
||||
124 0.142938 0.673227
|
||||
123 0.147097 0.665360
|
||||
60 0.154463 0.720480
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
8 0.085350 0.693253
|
||||
71 0.095263 0.644939
|
||||
70 0.098958 0.655900
|
||||
7 0.090277 0.707867
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
21 0.067258 0.404329
|
||||
84 0.081693 0.428247
|
||||
83 0.080143 0.445572
|
||||
20 0.065191 0.427429
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
34 0.131126 0.251204
|
||||
97 0.129595 0.313403
|
||||
96 0.125000 0.312500
|
||||
33 0.125000 0.250000
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
47 0.186299 0.451227
|
||||
110 0.170974 0.463421
|
||||
109 0.169857 0.445572
|
||||
46 0.184809 0.427429
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
60 0.154463 0.720480
|
||||
123 0.147097 0.665360
|
||||
122 0.151043 0.655900
|
||||
59 0.159723 0.707867
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
7 0.090277 0.707867
|
||||
70 0.098958 0.655900
|
||||
69 0.102903 0.665360
|
||||
6 0.095538 0.720480
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
20 0.065191 0.427429
|
||||
83 0.080143 0.445572
|
||||
82 0.079026 0.463420
|
||||
19 0.063701 0.451227
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
33 0.125000 0.250000
|
||||
96 0.125000 0.312500
|
||||
95 0.120406 0.313403
|
||||
32 0.118874 0.251204
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
46 0.184809 0.427429
|
||||
109 0.169857 0.445572
|
||||
108 0.168307 0.428247
|
||||
45 0.182743 0.404329
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
59 0.159723 0.707867
|
||||
122 0.151043 0.655900
|
||||
121 0.154737 0.644939
|
||||
58 0.164650 0.693252
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
6 0.095538 0.720480
|
||||
69 0.102903 0.665360
|
||||
68 0.107062 0.673227
|
||||
5 0.101082 0.730970
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
19 0.063701 0.451227
|
||||
82 0.079026 0.463420
|
||||
81 0.078351 0.481622
|
||||
18 0.062801 0.475496
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
32 0.118874 0.251204
|
||||
95 0.120406 0.313403
|
||||
94 0.115855 0.316103
|
||||
31 0.112807 0.254804
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
45 0.182743 0.404329
|
||||
108 0.168307 0.428247
|
||||
107 0.166340 0.411613
|
||||
44 0.180120 0.382151
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
58 0.164650 0.693252
|
||||
121 0.154737 0.644939
|
||||
120 0.158146 0.632582
|
||||
57 0.169194 0.676776
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
5 0.101082 0.730970
|
||||
68 0.107062 0.673227
|
||||
67 0.111393 0.679426
|
||||
4 0.106857 0.739235
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
18 0.062801 0.475496
|
||||
81 0.078351 0.481622
|
||||
80 0.078125 0.500000
|
||||
17 0.062500 0.500000
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
31 0.112807 0.254804
|
||||
94 0.115855 0.316103
|
||||
93 0.111393 0.320574
|
||||
30 0.106857 0.260765
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
44 0.180120 0.382151
|
||||
107 0.166340 0.411613
|
||||
106 0.163975 0.395831
|
||||
43 0.176967 0.361108
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
57 0.169194 0.676776
|
||||
120 0.158146 0.632582
|
||||
119 0.161235 0.618949
|
||||
56 0.173313 0.658598
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
4 0.106857 0.739235
|
||||
67 0.111393 0.679426
|
||||
66 0.115855 0.683897
|
||||
3 0.112807 0.745196
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
17 0.062500 0.500000
|
||||
80 0.078125 0.500000
|
||||
79 0.078351 0.518378
|
||||
16 0.062801 0.524504
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
30 0.106857 0.260765
|
||||
93 0.111393 0.320574
|
||||
92 0.107062 0.326772
|
||||
29 0.101082 0.269030
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
43 0.176967 0.361108
|
||||
106 0.163975 0.395831
|
||||
105 0.161235 0.381051
|
||||
42 0.173313 0.341402
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
56 0.173313 0.658598
|
||||
119 0.161235 0.618949
|
||||
118 0.163975 0.604169
|
||||
55 0.176967 0.638892
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
3 0.112807 0.745196
|
||||
66 0.115855 0.683897
|
||||
65 0.120406 0.686597
|
||||
2 0.118874 0.748796
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
16 0.062801 0.524504
|
||||
79 0.078351 0.518378
|
||||
78 0.079026 0.536579
|
||||
15 0.063701 0.548773
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
29 0.101082 0.269030
|
||||
92 0.107062 0.326772
|
||||
91 0.102903 0.334640
|
||||
28 0.095538 0.279520
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
42 0.173313 0.341402
|
||||
105 0.161235 0.381051
|
||||
104 0.158146 0.367418
|
||||
41 0.169194 0.323223
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
55 0.176967 0.638892
|
||||
118 0.163975 0.604169
|
||||
117 0.166340 0.588387
|
||||
54 0.180120 0.617849
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
15 0.063701 0.548773
|
||||
78 0.079026 0.536579
|
||||
77 0.080143 0.554428
|
||||
14 0.065191 0.572571
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
28 0.095538 0.279520
|
||||
91 0.102903 0.334640
|
||||
90 0.098958 0.344099
|
||||
27 0.090277 0.292132
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
41 0.169194 0.323223
|
||||
104 0.158146 0.367418
|
||||
103 0.154737 0.355061
|
||||
40 0.164650 0.306747
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
54 0.180120 0.617849
|
||||
117 0.166340 0.588387
|
||||
116 0.168307 0.571753
|
||||
53 0.182743 0.595671
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
0 0.125000 0.687500
|
||||
1 0.125000 0.750000
|
||||
2 0.118874 0.748796
|
||||
65 0.120406 0.686597
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
14 0.065191 0.572571
|
||||
77 0.080143 0.554428
|
||||
76 0.081693 0.571753
|
||||
13 0.067258 0.595671
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
27 0.090277 0.292132
|
||||
90 0.098958 0.344099
|
||||
89 0.095263 0.355060
|
||||
26 0.085350 0.306747
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
40 0.164650 0.306747
|
||||
103 0.154737 0.355061
|
||||
102 0.151042 0.344099
|
||||
39 0.159723 0.292133
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
53 0.182743 0.595671
|
||||
116 0.168307 0.571753
|
||||
115 0.169857 0.554428
|
||||
52 0.184809 0.572571
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
13 0.067258 0.595671
|
||||
76 0.081693 0.571753
|
||||
75 0.083660 0.588387
|
||||
12 0.069880 0.617849
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
26 0.085350 0.306747
|
||||
89 0.095263 0.355060
|
||||
88 0.091854 0.367417
|
||||
25 0.080806 0.323223
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
39 0.159723 0.292133
|
||||
102 0.151042 0.344099
|
||||
101 0.147097 0.334640
|
||||
38 0.154462 0.279520
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
52 0.184809 0.572571
|
||||
115 0.169857 0.554428
|
||||
114 0.170974 0.536579
|
||||
51 0.186299 0.548772
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
1 0.125000 0.750000
|
||||
0 0.125000 0.687500
|
||||
127 0.129595 0.686597
|
||||
64 0.131126 0.748796
|
||||
SURF 0X10
|
||||
mat 1
|
||||
refs 4
|
||||
38 0.154462 0.279520
|
||||
101 0.147097 0.334640
|
||||
100 0.142938 0.326773
|
||||
37 0.148918 0.269030
|
||||
kids 0
|
BIN
Models/Autopush/cursor.png
Normal file
BIN
Models/Autopush/cursor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 97 B |
34
Models/Autopush/cursor.xml
Normal file
34
Models/Autopush/cursor.xml
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
AUTOPUSH
|
||||
Cursor model.
|
||||
|
||||
Copyright (c) 2018 Autopush authors:
|
||||
Michael Danilov <mike.d.ft402 -eh- gmail.com>
|
||||
Joshua Davidson http://github.com/it0uchpods
|
||||
Merspieler http://github.com/merspieler
|
||||
Distribute under the terms of GPLv2.
|
||||
|
||||
-->
|
||||
<PropertyList>
|
||||
|
||||
<path>cursor.ac</path>
|
||||
|
||||
<animation>
|
||||
<enable-hot>false</enable-hot>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>scale</type>
|
||||
<property>/sim/model/pushback/driver/D_min-m</property>
|
||||
<z-factor>0.0</z-factor>
|
||||
<z-min>1.0</z-min>
|
||||
</animation>
|
||||
|
||||
<effect>
|
||||
<object-name>Circle</object-name>
|
||||
<inherits-from>Effects/cursor</inherits-from>
|
||||
</effect>
|
||||
|
||||
</PropertyList>
|
238
Models/Autopush/waypoint.ac
Normal file
238
Models/Autopush/waypoint.ac
Normal file
|
@ -0,0 +1,238 @@
|
|||
AC3Db
|
||||
MATERIAL "DefaultWhite" rgb 1.0000 1.0000 1.0000 amb 0.2000 0.2000 0.2000 emis 0.0000 0.0000 0.0000 spec 0.5000 0.5000 0.5000 shi 10 trans 0.0000
|
||||
MATERIAL "autopush cursor" rgb 1.0000 1.0000 1.0000 amb 0.0000 0.0000 0.0000 emis 0.0000 0.0000 0.0000 spec 0.0000 0.0000 0.0000 shi 50 trans 0.0000
|
||||
OBJECT world
|
||||
name "Blender_export__waypoint.ac"
|
||||
kids 1
|
||||
OBJECT poly
|
||||
name "Circle"
|
||||
texture "cursor.png"
|
||||
texrep 1 1
|
||||
numvert 33
|
||||
0.0390178 0.2000000 -0.1961571
|
||||
0.0765364 0.2000000 -0.1847760
|
||||
0.1111138 0.2000000 -0.1662941
|
||||
0.1414212 0.2000000 -0.1414215
|
||||
0.1662938 0.2000000 -0.1111143
|
||||
0.1847758 0.2000000 -0.0765369
|
||||
0.1961570 0.2000000 -0.0390183
|
||||
0.2000000 0.2000000 -0.0000002
|
||||
0.1961571 0.2000000 0.0390179
|
||||
0.1847760 0.2000000 0.0765365
|
||||
0.1662940 0.2000000 0.1111139
|
||||
0.1414215 0.2000000 0.1414213
|
||||
0.1111141 0.2000000 0.1662939
|
||||
0.0765368 0.2000000 0.1847759
|
||||
0.0390181 0.2000000 0.1961570
|
||||
0.0000001 0.2000000 0.2000000
|
||||
-0.0390180 0.2000000 0.1961571
|
||||
-0.0765367 0.2000000 0.1847759
|
||||
-0.1111140 0.2000000 0.1662939
|
||||
-0.1414214 0.2000000 0.1414214
|
||||
-0.1662939 0.2000000 0.1111140
|
||||
-0.1847759 0.2000000 0.0765367
|
||||
-0.1961571 0.2000000 0.0390180
|
||||
-0.2000000 0.2000000 -0.0000000
|
||||
-0.1961571 0.2000000 -0.0390181
|
||||
-0.1847759 0.2000000 -0.0765367
|
||||
-0.1662939 0.2000000 -0.1111140
|
||||
-0.1414214 0.2000000 -0.1414214
|
||||
-0.1111140 0.2000000 -0.1662939
|
||||
-0.0765367 0.2000000 -0.1847759
|
||||
-0.0390181 0.2000000 -0.1961571
|
||||
0.0000000 0.2000000 -0.2000000
|
||||
0.0000000 0.2000000 0.0000000
|
||||
numsurf 32
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
18 0.090277 0.292133
|
||||
17 0.101082 0.269030
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
31 0.125000 0.750000
|
||||
30 0.112807 0.745197
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
4 0.176967 0.638893
|
||||
3 0.169194 0.676777
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
17 0.101082 0.269030
|
||||
16 0.112807 0.254804
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
30 0.112807 0.745197
|
||||
29 0.101082 0.730970
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
3 0.169194 0.676777
|
||||
2 0.159723 0.707868
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
16 0.112807 0.254804
|
||||
15 0.125000 0.250000
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
29 0.101082 0.730970
|
||||
28 0.090277 0.707868
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
2 0.159723 0.707868
|
||||
1 0.148918 0.730970
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
15 0.125000 0.250000
|
||||
14 0.137193 0.254804
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
28 0.090277 0.707868
|
||||
27 0.080806 0.676777
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
1 0.148918 0.730970
|
||||
0 0.137193 0.745197
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
14 0.137193 0.254804
|
||||
13 0.148918 0.269030
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
27 0.080806 0.676777
|
||||
26 0.073033 0.638893
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
0 0.137193 0.745197
|
||||
31 0.125000 0.750000
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
13 0.148918 0.269030
|
||||
12 0.159723 0.292133
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
26 0.073033 0.638893
|
||||
25 0.067258 0.595671
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
12 0.159723 0.292133
|
||||
11 0.169194 0.323224
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
25 0.067258 0.595671
|
||||
24 0.063701 0.548773
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
11 0.169194 0.323224
|
||||
10 0.176967 0.361108
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
24 0.063701 0.548773
|
||||
23 0.062500 0.500000
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
10 0.176967 0.361108
|
||||
9 0.182743 0.404329
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
23 0.062500 0.500000
|
||||
22 0.063701 0.451228
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
9 0.182743 0.404329
|
||||
8 0.186299 0.451228
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
22 0.063701 0.451228
|
||||
21 0.067258 0.404329
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
8 0.186299 0.451228
|
||||
7 0.187500 0.500000
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
21 0.067258 0.404329
|
||||
20 0.073033 0.361108
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
7 0.187500 0.500000
|
||||
6 0.186299 0.548773
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
20 0.073033 0.361108
|
||||
19 0.080806 0.323223
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
6 0.186299 0.548773
|
||||
5 0.182742 0.595671
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
19 0.080806 0.323223
|
||||
18 0.090277 0.292133
|
||||
SURF 0X0
|
||||
mat 1
|
||||
refs 3
|
||||
32 0.125000 0.500000
|
||||
5 0.182742 0.595671
|
||||
4 0.176967 0.638893
|
||||
kids 0
|
34
Models/Autopush/waypoint.xml
Normal file
34
Models/Autopush/waypoint.xml
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
AUTOPUSH
|
||||
Waypoint model.
|
||||
|
||||
Copyright (c) 2018 Autopush authors:
|
||||
Michael Danilov <mike.d.ft402 -eh- gmail.com>
|
||||
Joshua Davidson http://github.com/it0uchpods
|
||||
Merspieler http://github.com/merspieler
|
||||
Distribute under the terms of GPLv2.
|
||||
|
||||
-->
|
||||
<PropertyList>
|
||||
|
||||
<path>waypoint.ac</path>
|
||||
|
||||
<animation>
|
||||
<enable-hot>false</enable-hot>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>scale</type>
|
||||
<property>/sim/model/pushback/driver/D_min-m</property>
|
||||
<z-factor>0.0</z-factor>
|
||||
<z-min>1.0</z-min>
|
||||
</animation>
|
||||
|
||||
<effect>
|
||||
<object-name>Circle</object-name>
|
||||
<inherits-from>Effects/cursor</inherits-from>
|
||||
</effect>
|
||||
|
||||
</PropertyList>
|
136
Nasal/autopush.nas
Normal file
136
Nasal/autopush.nas
Normal file
|
@ -0,0 +1,136 @@
|
|||
# AUTOPUSH
|
||||
# Basic pushback logic class.
|
||||
#
|
||||
# Copyright (c) 2018 Autopush authors:
|
||||
# Michael Danilov <mike.d.ft402 -eh- gmail.com>
|
||||
# Joshua Davidson http://github.com/it0uchpods
|
||||
# Merspieler http://github.com/merspieler
|
||||
# Distribute under the terms of GPLv2.
|
||||
|
||||
|
||||
var _enabled = 0;
|
||||
var _K_p = nil;
|
||||
var _F_p = nil;
|
||||
var _K_i = nil;
|
||||
var _F_i = nil;
|
||||
var _K_d = nil;
|
||||
var _F_d = nil;
|
||||
var _F = nil;
|
||||
var _int = nil;
|
||||
var _deltaV = nil;
|
||||
var _T_f = nil;
|
||||
var _K_yaw = nil;
|
||||
var _yasim = 0;
|
||||
var _time = nil;
|
||||
# (ft / s^2) / ((km / h) / s)
|
||||
var _unitconv = M2FT / 3.6;
|
||||
var _debug = nil;
|
||||
|
||||
var _loop = func() {
|
||||
if (!getprop("/sim/model/pushback/available")) {
|
||||
_stop();
|
||||
return;
|
||||
}
|
||||
var force = 0.0;
|
||||
var x = 0.0;
|
||||
var y = 0.0;
|
||||
# Rollspeed is only adequate if the wheel is touching the ground.
|
||||
if (getprop("/gear/gear[0]/wow")) {
|
||||
var deltaV = getprop("/sim/model/pushback/target-speed-km_h");
|
||||
deltaV -= getprop("/gear/gear[0]/rollspeed-ms") * 3.6;
|
||||
var dV = deltaV - _deltaV;
|
||||
var time = getprop("/sim/time/elapsed-sec");
|
||||
var prop = math.min(math.max(_K_p * deltaV, -_F_p), _F_p);
|
||||
var speedup = getprop("/sim/speed-up");
|
||||
dt = time - _time;
|
||||
# XXX Sanitising dt. Smaller chance of freakout on lag spike.
|
||||
if(dt > 0.0) {
|
||||
if(dt < 0.05) {
|
||||
_int = math.min(math.max(_int + _K_i * dV * dt, -_F_i), _F_i);
|
||||
}
|
||||
if(dt > 0.002) {
|
||||
var deriv = math.min(math.max(_K_d * dV / dt, -_F_d), _F_d);
|
||||
}
|
||||
}
|
||||
var accel = prop + _int + deriv;
|
||||
if (_debug > 2) {
|
||||
print("pushback prop " ~ prop ~ ", _int " ~ _int ~ ", deriv " ~ deriv);
|
||||
}
|
||||
_deltaV = deltaV;
|
||||
_time = time;
|
||||
if (!_yasim) {
|
||||
force = accel * getprop("/fdm/jsbsim/inertia/weight-lbs") * _unitconv;
|
||||
} else {
|
||||
force = accel * getprop("/fdm/yasim/gross-weight-lbs") * _unitconv;
|
||||
}
|
||||
var yaw = getprop("/sim/model/pushback/yaw") * _K_yaw;
|
||||
x = math.cos(yaw);
|
||||
y = math.sin(yaw);
|
||||
setprop("/sim/model/pushback/force-x", x);
|
||||
setprop("/sim/model/pushback/force-y", y);
|
||||
}
|
||||
setprop("/sim/model/pushback/force-lbf", force);
|
||||
if (_yasim) {
|
||||
# The force is divided by YASim thrust="100000.0" setting.
|
||||
setprop("/sim/model/pushback/force-x-yasim", x * force * 0.00001);
|
||||
# YASim's y is to the left.
|
||||
setprop("/sim/model/pushback/force-y-yasim", -y * force * 0.00001);
|
||||
}
|
||||
}
|
||||
|
||||
var _timer = maketimer(0.0167, func{_loop()});
|
||||
|
||||
var _start = func() {
|
||||
# Else overwritten by dialog.
|
||||
settimer(func() {
|
||||
setprop("/sim/model/pushback/target-speed-km_h", 0.0)
|
||||
}, 0.1);
|
||||
_K_p = getprop("/sim/model/pushback/K_p");
|
||||
_F_p = getprop("/sim/model/pushback/F_p");
|
||||
_K_i = getprop("/sim/model/pushback/K_i");
|
||||
_F_i = getprop("/sim/model/pushback/F_i");
|
||||
_K_d = getprop("/sim/model/pushback/K_d");
|
||||
_F_d = getprop("/sim/model/pushback/F_d");
|
||||
_F = getprop("/sim/model/pushback/F");
|
||||
_T_f = getprop("/sim/model/pushback/T_f");
|
||||
_K_yaw = getprop("/sim/model/pushback/yaw-mult") * D2R;
|
||||
_yasim = (getprop("/sim/flight-model") == "yasim");
|
||||
_debug = getprop("/sim/model/pushback/debug") or 0;
|
||||
_int = 0.0;
|
||||
_deltaV = 0.0;
|
||||
_time = getprop("/sim/time/elapsed-sec");
|
||||
setprop("/sim/model/pushback/connected", 1);
|
||||
if (!_timer.isRunning) {
|
||||
if (getprop("/sim/model/pushback/chocks")) {
|
||||
setprop("/sim/model/pushback/chocks", 0);
|
||||
screen.log.write("(pushback): Pushback connected, chocks removed. Please release brakes.");
|
||||
} else {
|
||||
screen.log.write("(pushback): Pushback connected, please release brakes.");
|
||||
}
|
||||
}
|
||||
_timer.start();
|
||||
}
|
||||
|
||||
var _stop = func() {
|
||||
if (_timer.isRunning) {
|
||||
screen.log.write("(pushback): Pushback and bypass pin removed.");
|
||||
}
|
||||
_timer.stop();
|
||||
setprop("/sim/model/pushback/force-lbf", 0.0);
|
||||
if (_yasim) {
|
||||
setprop("/sim/model/pushback/force-x-yasim", 0.0);
|
||||
setprop("/sim/model/pushback/force-y-yasim", 0.0);
|
||||
}
|
||||
setprop("/sim/model/pushback/connected", 0);
|
||||
setprop("/sim/model/pushback/enabled", 0);
|
||||
}
|
||||
|
||||
setlistener("/sim/model/pushback/enabled", func(p) {
|
||||
var enabled = p.getValue();
|
||||
if ((enabled > _enabled) and getprop("/sim/model/pushback/available")) {
|
||||
_start();
|
||||
} else if (enabled < _enabled) {
|
||||
_stop();
|
||||
}
|
||||
_enabled = enabled;
|
||||
});
|
99
Nasal/autopush_driver.nas
Normal file
99
Nasal/autopush_driver.nas
Normal file
|
@ -0,0 +1,99 @@
|
|||
# AUTOPUSH
|
||||
# Pushback driver class.
|
||||
#
|
||||
# Command the pushback to tow/push the aircraft.
|
||||
#
|
||||
# Copyright (c) 2018 Autopush authors:
|
||||
# Michael Danilov <mike.d.ft402 -eh- gmail.com>
|
||||
# Joshua Davidson http://github.com/it0uchpods
|
||||
# Merspieler http://github.com/merspieler
|
||||
# Distribute under the terms of GPLv2.
|
||||
|
||||
|
||||
var _K_V = nil;
|
||||
var _F_V = nil;
|
||||
var _D_min = nil;
|
||||
var _K_psi = nil;
|
||||
var _debug = nil;
|
||||
|
||||
var _route = nil;
|
||||
var _push = nil;
|
||||
var _sign = nil;
|
||||
var _psi_park = nil;
|
||||
|
||||
var _to_wp = nil;
|
||||
|
||||
|
||||
var _loop = func() {
|
||||
if (!getprop("/sim/model/pushback/connected")) {
|
||||
stop();
|
||||
return;
|
||||
}
|
||||
var psi = getprop("/orientation/heading-deg") + _push * 180.0;
|
||||
var (A, D) = courseAndDistance(_route[_to_wp]);
|
||||
D *= NM2M;
|
||||
# FIXME Use _K_V and total remaining distance.
|
||||
var V = _F_V;
|
||||
if ((D < _D_min) or (abs(geo.normdeg180(A - psi) > 90.0))) {
|
||||
_to_wp += 1;
|
||||
if (_to_wp == size(_route)) {
|
||||
_done();
|
||||
autopush_route.clear();
|
||||
return;
|
||||
}
|
||||
if (_debug) {
|
||||
print("pushback_driver wp " ~ _to_wp);
|
||||
}
|
||||
}
|
||||
if (_debug > 1) {
|
||||
print("pushback_driver psi_target " ~ geo.normdeg(A) ~ ", deltapsi " ~ _sign * geo.normdeg180(A - psi));
|
||||
}
|
||||
setprop("/sim/model/pushback/target-speed-km_h", _sign * V);
|
||||
steering = math.min(math.max(_sign * _K_psi * geo.normdeg180(A - psi), -1.0), 1.0);
|
||||
setprop("/sim/model/pushback/steer-cmd-norm", steering);
|
||||
}
|
||||
|
||||
var _timer = maketimer(0.051, func{_loop()});
|
||||
|
||||
var _done = func() {
|
||||
stop();
|
||||
screen.log.write("(pushback): Pushback complete, please set parking brake.");
|
||||
}
|
||||
|
||||
var start = func() {
|
||||
if (_timer.isRunning) {
|
||||
stop();
|
||||
}
|
||||
if (!getprop("/sim/model/pushback/connected")) {
|
||||
gui.popupTip("Pushback must be connected");
|
||||
return;
|
||||
}
|
||||
_route = autopush_route.route();
|
||||
if ((_route == nil) or size(_route) < 2) {
|
||||
autopush_route.enter(1);
|
||||
return;
|
||||
}
|
||||
_K_V = getprop("/sim/model/pushback/driver/K_V");
|
||||
_F_V = getprop("/sim/model/pushback/driver/F_V");
|
||||
_D_min = getprop("/sim/model/pushback/driver/D_min-m");
|
||||
_K_psi = getprop("/sim/model/pushback/driver/K_psi");
|
||||
_debug = getprop("/sim/model/pushback/debug") or 0;
|
||||
var (psi_park, D_park) = courseAndDistance(_route[0], _route[1]);
|
||||
var (psi_twy, D_twy) = courseAndDistance(_route[size(_route) - 2], _route[size(_route) - 1]);
|
||||
_psi_park = psi_park;
|
||||
_push = (abs(geo.normdeg180(getprop("/orientation/heading-deg") - psi_park)) > 90.0);
|
||||
_sign = 1.0 - 2.0 * _push;
|
||||
_to_wp = 0;
|
||||
_timer.start();
|
||||
if (_sign < 0.0) {
|
||||
screen.log.write("(pushback): Push back facing " ~ int(geo.normdeg(psi_twy + 180.0 - magvar())) ~ ".");
|
||||
} else {
|
||||
screen.log.write("(pushback): Tow facing " ~ int(geo.normdeg(psi_twy - magvar())) ~ ".");
|
||||
}
|
||||
}
|
||||
|
||||
var stop = func() {
|
||||
_timer.stop();
|
||||
setprop("/sim/model/pushback/target-speed-km_h", 0.0);
|
||||
autopush_route.clear();
|
||||
}
|
224
Nasal/autopush_route.nas
Normal file
224
Nasal/autopush_route.nas
Normal file
|
@ -0,0 +1,224 @@
|
|||
# AUTOPUSH
|
||||
# Visual entry of pushback route.
|
||||
#
|
||||
# Copyright (c) 2018 Autopush authors:
|
||||
# Michael Danilov <mike.d.ft402 -eh- gmail.com>
|
||||
# Joshua Davidson http://github.com/it0uchpods
|
||||
# Merspieler http://github.com/merspieler
|
||||
# Distribute under the terms of GPLv2.
|
||||
|
||||
|
||||
var _listener = nil;
|
||||
var _view_listener = nil;
|
||||
var _user_points = dynarr.dynarr.new(4);
|
||||
var _route = [];
|
||||
var _view_index = nil;
|
||||
var _user_point_models = [];
|
||||
var _waypoint_models = [];
|
||||
var _N = 0;
|
||||
var _show = 0;
|
||||
var _view_changed_or_external = 0;
|
||||
var _start_immediately = nil;
|
||||
var _D_min = nil;
|
||||
|
||||
# TODO find a proper value or add a calculated value so we can get ridge
|
||||
setprop("/demo/prec/", 10);
|
||||
|
||||
|
||||
var _add = func(pos) {
|
||||
if (_N) {
|
||||
var (A, S) = courseAndDistance(_user_points.arr[_N - 1], pos);
|
||||
if (S * NM2M < 3 * _D_min) {
|
||||
gui.popupTip("Too close to the previous point,\ntry again");
|
||||
return;
|
||||
}
|
||||
}
|
||||
_user_points.add(geo.Coord.new(pos));
|
||||
setsize(_user_point_models, _N + 1);
|
||||
_user_point_models[_N] = geo.put_model("Models/Autopush/cursor.xml", pos, 0.0);
|
||||
_N += 1;
|
||||
if (_N == 1) {
|
||||
gui.popupTip("Click waypoints, press \"Done\" to finish");
|
||||
} else {
|
||||
_calculate_bezier();
|
||||
_place_waypoint_models();
|
||||
}
|
||||
}
|
||||
|
||||
var _stop = func(fail = 0) {
|
||||
if (_listener != nil) {
|
||||
removelistener(_listener);
|
||||
_listener = nil;
|
||||
if (!fail) {
|
||||
settimer(func() {
|
||||
_reset_view();
|
||||
if (_start_immediately) {
|
||||
autopush_driver.start();
|
||||
} else {
|
||||
gui.popupTip("Done");
|
||||
}
|
||||
}, 1.0);
|
||||
} else {
|
||||
_reset_view();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var _place_user_point_models = func() {
|
||||
_clear_user_point_models();
|
||||
setsize(_user_point_models, _N);
|
||||
var user_points = _user_points.get_sliced();
|
||||
for (var ii = 1; ii < _N; ii += 1) {
|
||||
_user_point_models[ii] = geo.put_model("Models/Autopush/cursor.xml", user_points[ii], 0.0);
|
||||
}
|
||||
}
|
||||
|
||||
var _clear_user_point_models = func() {
|
||||
for (var ii = 0; ii < size(_user_point_models); ii += 1) {
|
||||
if (_user_point_models[ii] != nil) {
|
||||
_user_point_models[ii].remove();
|
||||
_user_point_models[ii] = nil;
|
||||
}
|
||||
}
|
||||
setsize(_user_point_models, 0);
|
||||
}
|
||||
|
||||
var _place_waypoint_models = func() {
|
||||
_clear_waypoint_models();
|
||||
setsize(_waypoint_models, size(_route));
|
||||
for (var ii = 0; ii < size(_route); ii += 1) {
|
||||
_waypoint_models[ii] = geo.put_model("Models/Autopush/waypoint.xml", _route[ii], 0.0);
|
||||
}
|
||||
}
|
||||
|
||||
var _clear_waypoint_models = func() {
|
||||
for (var ii = 0; ii < size(_waypoint_models); ii += 1) {
|
||||
if (_waypoint_models[ii] != nil) {
|
||||
_waypoint_models[ii].remove();
|
||||
_waypoint_models[ii] = nil;
|
||||
}
|
||||
}
|
||||
setsize(_waypoint_models, 0);
|
||||
}
|
||||
|
||||
var _set_view = func() {
|
||||
if(!getprop("/sim/current-view/internal")){
|
||||
_view_changed_or_external = 1;
|
||||
return;
|
||||
}
|
||||
_view_index = getprop("/sim/current-view/view-number");
|
||||
setprop("/sim/current-view/view-number", view.indexof("Model View"));
|
||||
_view_changed_or_external = 0;
|
||||
_view_listener = setlistener("/sim/current-view/name", func {
|
||||
_view_changed_or_external = 1;
|
||||
});
|
||||
}
|
||||
|
||||
var _reset_view = func() {
|
||||
if (!_view_changed_or_external) {
|
||||
setprop("/sim/current-view/view-number", _view_index);
|
||||
}
|
||||
if (_view_listener != nil) {
|
||||
removelistener(_view_listener);
|
||||
_view_listener = nil;
|
||||
}
|
||||
if (!_show) {
|
||||
_clear_user_point_models();
|
||||
_clear_waypoint_models();
|
||||
}
|
||||
}
|
||||
|
||||
var _calculate_bezier = func() {
|
||||
# add the first point cause it will be fix at this pos
|
||||
_route = [];
|
||||
user_points = _user_points.get_sliced();
|
||||
var route = dynarr.dynarr.new();
|
||||
route.add(geo.Coord.new(user_points[0]));
|
||||
|
||||
PNumber = size(user_points);
|
||||
|
||||
if (PNumber > 2) {
|
||||
var pointList = [];
|
||||
setsize(pointList, PNumber);
|
||||
for (var i = 0; i < PNumber; i += 1) {
|
||||
pointList[i] = [];
|
||||
setsize(pointList[i], PNumber);
|
||||
}
|
||||
|
||||
pointList[0] = user_points;
|
||||
|
||||
prec = getprop("/demo/prec");
|
||||
step = prec / 100;
|
||||
|
||||
for (var i = step; i < 1; i+= step) {
|
||||
# start iterating from 1 cause we don't need to iterate over Pn
|
||||
for (var j = 1; j < PNumber; j += 1) {
|
||||
for (var k = 0; k < PNumber - j; k += 1) {
|
||||
pointList[j][k] = geo.Coord.new(pointList[j - 1][k]);
|
||||
var dist = pointList[j - 1][k].distance_to(pointList[j - 1][k + 1]);
|
||||
var course = pointList[j - 1][k].course_to(pointList[j - 1][k + 1]);
|
||||
pointList[j][k].apply_course_distance(course, dist * i);
|
||||
}
|
||||
}
|
||||
route.add(geo.Coord.new(pointList[PNumber - 1][0]));
|
||||
}
|
||||
}
|
||||
|
||||
if (PNumber > 1) {
|
||||
# append last user point to route
|
||||
route.add(geo.Coord.new(user_points[-1]));
|
||||
}
|
||||
|
||||
_route = route.get_sliced();
|
||||
}
|
||||
|
||||
setlistener("/sim/model/pushback/route/show", func(p) {
|
||||
var show = p.getValue();
|
||||
if (_listener == nil) {
|
||||
if (show > _show) {
|
||||
_place_user_point_models();
|
||||
_place_waypoint_models();
|
||||
} else if (show < _show) {
|
||||
_clear_user_point_models();
|
||||
_clear_waypoint_models();
|
||||
}
|
||||
}
|
||||
_show = show;
|
||||
});
|
||||
|
||||
|
||||
var enter = func(start_immediately = 0) {
|
||||
clear();
|
||||
_set_view();
|
||||
_D_min = getprop("/sim/model/pushback/driver/D_min-m");
|
||||
var wp = geo.aircraft_position();
|
||||
var H = geo.elevation(wp.lat(), wp.lon());
|
||||
if (H != nil) {
|
||||
wp.set_alt(H);
|
||||
}
|
||||
_add(wp);
|
||||
_listener = setlistener("/sim/signals/click", func {
|
||||
_add(geo.click_position());
|
||||
});
|
||||
_start_immediately = start_immediately;
|
||||
}
|
||||
|
||||
var done = func() {
|
||||
_stop(0);
|
||||
}
|
||||
|
||||
var clear = func() {
|
||||
_stop(1);
|
||||
_clear_user_point_models();
|
||||
_clear_waypoint_models();
|
||||
_N = 0;
|
||||
_user_points = dynarr.dynarr.new(4);
|
||||
}
|
||||
|
||||
var route = func() {
|
||||
if (_N < 2) {
|
||||
return nil;
|
||||
}
|
||||
_calculate_bezier();
|
||||
return _route;
|
||||
}
|
55
Nasal/dynarr.nas
Normal file
55
Nasal/dynarr.nas
Normal file
|
@ -0,0 +1,55 @@
|
|||
# Class for dynamic arrays
|
||||
#
|
||||
# Copyright (c) 2018 dynamic arrays authors:
|
||||
# Michael Danilov <mike.d.ft402 -eh- gmail.com>
|
||||
# Merspieler http://gitlab.com/merspieler
|
||||
# Distribute under the terms of GPLv2.
|
||||
|
||||
## ERRATA
|
||||
# delitation of objects
|
||||
|
||||
## Useage
|
||||
# to create a new object: var <name> = dynarr.new();
|
||||
# to add elements: <name>.add(<element>);
|
||||
# you can access the full stored array as: <name>.arr
|
||||
# to get only the used area of the array: var <spliced_array> = <name>.get_spliced()
|
||||
|
||||
var dynarr =
|
||||
{
|
||||
new: func(size = 8)
|
||||
{
|
||||
var this = {parents:[dynarr]};
|
||||
this.maxsize = size;
|
||||
this.size = 0;
|
||||
this.arr = setsize([], size);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
# add a new element to the array
|
||||
add: func(obj)
|
||||
{
|
||||
# case there's no space left
|
||||
if (me.size + 1 >= me.maxsize)
|
||||
{
|
||||
# double array size
|
||||
me.maxsize *= 2;
|
||||
me.arr = setsize(me.arr, me.maxsize);
|
||||
}
|
||||
|
||||
# add object and increase used counter
|
||||
me.arr[me.size] = obj;
|
||||
me.size += 1;
|
||||
},
|
||||
|
||||
# returns only the filled part of the array or nil if array is empty
|
||||
get_sliced: func()
|
||||
{
|
||||
if (me.size == 0)
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
return me.arr[0:me.size - 1];
|
||||
}
|
||||
};
|
|
@ -8,7 +8,7 @@
|
|||
-->
|
||||
|
||||
<external_reactions>
|
||||
<force name="pushback" frame="BODY">
|
||||
<force name="tractor" frame="BODY">
|
||||
<location unit="M">
|
||||
<x> 7.52385 </x>
|
||||
<y> 0 </y>
|
||||
|
|
Reference in a new issue