├── LICENSE
├── README.md
├── STL
├── README.md
├── arm_inner_ring.stl
├── arm_part1.stl
├── arm_part2.stl
├── battery_tray.stl
├── body_side.stl
├── bumper1_leds_strip.stl
├── bumper2_ir_sensor.stl
├── bumper3.stl
├── bumper5_sr_04.stl
├── by-nc-nd.png
├── helmet.stl
├── motors_plate.stl
├── robot_3d.png
├── servo_holder_part1.stl
├── servo_holder_part2.stl
├── shaft_drive.stl
├── tool_wrench.stl
├── tray_large.stl
├── tray_small.stl
└── wheel.stl
├── android
├── README.md
├── brobot.kwl
└── screenshot.png
├── arduino
└── BROBOT_EVO3
│ ├── BROBOT_EVO3.ino
│ ├── Control.ino
│ ├── IR_sensor.ino
│ ├── MPU6050.ino
│ ├── autonomous.ino
│ ├── bluetooth.ino
│ └── servo.ino
├── electronics
├── README.md
├── Schematic.pdf
└── by-nc-nd.png
└── overview_small.jpg
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 2, June 1991
3 |
4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6 | Everyone is permitted to copy and distribute verbatim copies
7 | of this license document, but changing it is not allowed.
8 |
9 | Preamble
10 |
11 | The licenses for most software are designed to take away your
12 | freedom to share and change it. By contrast, the GNU General Public
13 | License is intended to guarantee your freedom to share and change free
14 | software--to make sure the software is free for all its users. This
15 | General Public License applies to most of the Free Software
16 | Foundation's software and to any other program whose authors commit to
17 | using it. (Some other Free Software Foundation software is covered by
18 | the GNU Lesser General Public License instead.) You can apply it to
19 | your programs, too.
20 |
21 | When we speak of free software, we are referring to freedom, not
22 | price. Our General Public Licenses are designed to make sure that you
23 | have the freedom to distribute copies of free software (and charge for
24 | this service if you wish), that you receive source code or can get it
25 | if you want it, that you can change the software or use pieces of it
26 | in new free programs; and that you know you can do these things.
27 |
28 | To protect your rights, we need to make restrictions that forbid
29 | anyone to deny you these rights or to ask you to surrender the rights.
30 | These restrictions translate to certain responsibilities for you if you
31 | distribute copies of the software, or if you modify it.
32 |
33 | For example, if you distribute copies of such a program, whether
34 | gratis or for a fee, you must give the recipients all the rights that
35 | you have. You must make sure that they, too, receive or can get the
36 | source code. And you must show them these terms so they know their
37 | rights.
38 |
39 | We protect your rights with two steps: (1) copyright the software, and
40 | (2) offer you this license which gives you legal permission to copy,
41 | distribute and/or modify the software.
42 |
43 | Also, for each author's protection and ours, we want to make certain
44 | that everyone understands that there is no warranty for this free
45 | software. If the software is modified by someone else and passed on, we
46 | want its recipients to know that what they have is not the original, so
47 | that any problems introduced by others will not reflect on the original
48 | authors' reputations.
49 |
50 | Finally, any free program is threatened constantly by software
51 | patents. We wish to avoid the danger that redistributors of a free
52 | program will individually obtain patent licenses, in effect making the
53 | program proprietary. To prevent this, we have made it clear that any
54 | patent must be licensed for everyone's free use or not licensed at all.
55 |
56 | The precise terms and conditions for copying, distribution and
57 | modification follow.
58 |
59 | GNU GENERAL PUBLIC LICENSE
60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61 |
62 | 0. This License applies to any program or other work which contains
63 | a notice placed by the copyright holder saying it may be distributed
64 | under the terms of this General Public License. The "Program", below,
65 | refers to any such program or work, and a "work based on the Program"
66 | means either the Program or any derivative work under copyright law:
67 | that is to say, a work containing the Program or a portion of it,
68 | either verbatim or with modifications and/or translated into another
69 | language. (Hereinafter, translation is included without limitation in
70 | the term "modification".) Each licensee is addressed as "you".
71 |
72 | Activities other than copying, distribution and modification are not
73 | covered by this License; they are outside its scope. The act of
74 | running the Program is not restricted, and the output from the Program
75 | is covered only if its contents constitute a work based on the
76 | Program (independent of having been made by running the Program).
77 | Whether that is true depends on what the Program does.
78 |
79 | 1. You may copy and distribute verbatim copies of the Program's
80 | source code as you receive it, in any medium, provided that you
81 | conspicuously and appropriately publish on each copy an appropriate
82 | copyright notice and disclaimer of warranty; keep intact all the
83 | notices that refer to this License and to the absence of any warranty;
84 | and give any other recipients of the Program a copy of this License
85 | along with the Program.
86 |
87 | You may charge a fee for the physical act of transferring a copy, and
88 | you may at your option offer warranty protection in exchange for a fee.
89 |
90 | 2. You may modify your copy or copies of the Program or any portion
91 | of it, thus forming a work based on the Program, and copy and
92 | distribute such modifications or work under the terms of Section 1
93 | above, provided that you also meet all of these conditions:
94 |
95 | a) You must cause the modified files to carry prominent notices
96 | stating that you changed the files and the date of any change.
97 |
98 | b) You must cause any work that you distribute or publish, that in
99 | whole or in part contains or is derived from the Program or any
100 | part thereof, to be licensed as a whole at no charge to all third
101 | parties under the terms of this License.
102 |
103 | c) If the modified program normally reads commands interactively
104 | when run, you must cause it, when started running for such
105 | interactive use in the most ordinary way, to print or display an
106 | announcement including an appropriate copyright notice and a
107 | notice that there is no warranty (or else, saying that you provide
108 | a warranty) and that users may redistribute the program under
109 | these conditions, and telling the user how to view a copy of this
110 | License. (Exception: if the Program itself is interactive but
111 | does not normally print such an announcement, your work based on
112 | the Program is not required to print an announcement.)
113 |
114 | These requirements apply to the modified work as a whole. If
115 | identifiable sections of that work are not derived from the Program,
116 | and can be reasonably considered independent and separate works in
117 | themselves, then this License, and its terms, do not apply to those
118 | sections when you distribute them as separate works. But when you
119 | distribute the same sections as part of a whole which is a work based
120 | on the Program, the distribution of the whole must be on the terms of
121 | this License, whose permissions for other licensees extend to the
122 | entire whole, and thus to each and every part regardless of who wrote it.
123 |
124 | Thus, it is not the intent of this section to claim rights or contest
125 | your rights to work written entirely by you; rather, the intent is to
126 | exercise the right to control the distribution of derivative or
127 | collective works based on the Program.
128 |
129 | In addition, mere aggregation of another work not based on the Program
130 | with the Program (or with a work based on the Program) on a volume of
131 | a storage or distribution medium does not bring the other work under
132 | the scope of this License.
133 |
134 | 3. You may copy and distribute the Program (or a work based on it,
135 | under Section 2) in object code or executable form under the terms of
136 | Sections 1 and 2 above provided that you also do one of the following:
137 |
138 | a) Accompany it with the complete corresponding machine-readable
139 | source code, which must be distributed under the terms of Sections
140 | 1 and 2 above on a medium customarily used for software interchange; or,
141 |
142 | b) Accompany it with a written offer, valid for at least three
143 | years, to give any third party, for a charge no more than your
144 | cost of physically performing source distribution, a complete
145 | machine-readable copy of the corresponding source code, to be
146 | distributed under the terms of Sections 1 and 2 above on a medium
147 | customarily used for software interchange; or,
148 |
149 | c) Accompany it with the information you received as to the offer
150 | to distribute corresponding source code. (This alternative is
151 | allowed only for noncommercial distribution and only if you
152 | received the program in object code or executable form with such
153 | an offer, in accord with Subsection b above.)
154 |
155 | The source code for a work means the preferred form of the work for
156 | making modifications to it. For an executable work, complete source
157 | code means all the source code for all modules it contains, plus any
158 | associated interface definition files, plus the scripts used to
159 | control compilation and installation of the executable. However, as a
160 | special exception, the source code distributed need not include
161 | anything that is normally distributed (in either source or binary
162 | form) with the major components (compiler, kernel, and so on) of the
163 | operating system on which the executable runs, unless that component
164 | itself accompanies the executable.
165 |
166 | If distribution of executable or object code is made by offering
167 | access to copy from a designated place, then offering equivalent
168 | access to copy the source code from the same place counts as
169 | distribution of the source code, even though third parties are not
170 | compelled to copy the source along with the object code.
171 |
172 | 4. You may not copy, modify, sublicense, or distribute the Program
173 | except as expressly provided under this License. Any attempt
174 | otherwise to copy, modify, sublicense or distribute the Program is
175 | void, and will automatically terminate your rights under this License.
176 | However, parties who have received copies, or rights, from you under
177 | this License will not have their licenses terminated so long as such
178 | parties remain in full compliance.
179 |
180 | 5. You are not required to accept this License, since you have not
181 | signed it. However, nothing else grants you permission to modify or
182 | distribute the Program or its derivative works. These actions are
183 | prohibited by law if you do not accept this License. Therefore, by
184 | modifying or distributing the Program (or any work based on the
185 | Program), you indicate your acceptance of this License to do so, and
186 | all its terms and conditions for copying, distributing or modifying
187 | the Program or works based on it.
188 |
189 | 6. Each time you redistribute the Program (or any work based on the
190 | Program), the recipient automatically receives a license from the
191 | original licensor to copy, distribute or modify the Program subject to
192 | these terms and conditions. You may not impose any further
193 | restrictions on the recipients' exercise of the rights granted herein.
194 | You are not responsible for enforcing compliance by third parties to
195 | this License.
196 |
197 | 7. If, as a consequence of a court judgment or allegation of patent
198 | infringement or for any other reason (not limited to patent issues),
199 | conditions are imposed on you (whether by court order, agreement or
200 | otherwise) that contradict the conditions of this License, they do not
201 | excuse you from the conditions of this License. If you cannot
202 | distribute so as to satisfy simultaneously your obligations under this
203 | License and any other pertinent obligations, then as a consequence you
204 | may not distribute the Program at all. For example, if a patent
205 | license would not permit royalty-free redistribution of the Program by
206 | all those who receive copies directly or indirectly through you, then
207 | the only way you could satisfy both it and this License would be to
208 | refrain entirely from distribution of the Program.
209 |
210 | If any portion of this section is held invalid or unenforceable under
211 | any particular circumstance, the balance of the section is intended to
212 | apply and the section as a whole is intended to apply in other
213 | circumstances.
214 |
215 | It is not the purpose of this section to induce you to infringe any
216 | patents or other property right claims or to contest validity of any
217 | such claims; this section has the sole purpose of protecting the
218 | integrity of the free software distribution system, which is
219 | implemented by public license practices. Many people have made
220 | generous contributions to the wide range of software distributed
221 | through that system in reliance on consistent application of that
222 | system; it is up to the author/donor to decide if he or she is willing
223 | to distribute software through any other system and a licensee cannot
224 | impose that choice.
225 |
226 | This section is intended to make thoroughly clear what is believed to
227 | be a consequence of the rest of this License.
228 |
229 | 8. If the distribution and/or use of the Program is restricted in
230 | certain countries either by patents or by copyrighted interfaces, the
231 | original copyright holder who places the Program under this License
232 | may add an explicit geographical distribution limitation excluding
233 | those countries, so that distribution is permitted only in or among
234 | countries not thus excluded. In such case, this License incorporates
235 | the limitation as if written in the body of this License.
236 |
237 | 9. The Free Software Foundation may publish revised and/or new versions
238 | of the General Public License from time to time. Such new versions will
239 | be similar in spirit to the present version, but may differ in detail to
240 | address new problems or concerns.
241 |
242 | Each version is given a distinguishing version number. If the Program
243 | specifies a version number of this License which applies to it and "any
244 | later version", you have the option of following the terms and conditions
245 | either of that version or of any later version published by the Free
246 | Software Foundation. If the Program does not specify a version number of
247 | this License, you may choose any version ever published by the Free Software
248 | Foundation.
249 |
250 | 10. If you wish to incorporate parts of the Program into other free
251 | programs whose distribution conditions are different, write to the author
252 | to ask for permission. For software which is copyrighted by the Free
253 | Software Foundation, write to the Free Software Foundation; we sometimes
254 | make exceptions for this. Our decision will be guided by the two goals
255 | of preserving the free status of all derivatives of our free software and
256 | of promoting the sharing and reuse of software generally.
257 |
258 | NO WARRANTY
259 |
260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268 | REPAIR OR CORRECTION.
269 |
270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278 | POSSIBILITY OF SUCH DAMAGES.
279 |
280 | END OF TERMS AND CONDITIONS
281 |
282 | How to Apply These Terms to Your New Programs
283 |
284 | If you develop a new program, and you want it to be of the greatest
285 | possible use to the public, the best way to achieve this is to make it
286 | free software which everyone can redistribute and change under these terms.
287 |
288 | To do so, attach the following notices to the program. It is safest
289 | to attach them to the start of each source file to most effectively
290 | convey the exclusion of warranty; and each file should have at least
291 | the "copyright" line and a pointer to where the full notice is found.
292 |
293 | {description}
294 | Copyright (C) {year} {fullname}
295 |
296 | This program is free software; you can redistribute it and/or modify
297 | it under the terms of the GNU General Public License as published by
298 | the Free Software Foundation; either version 2 of the License, or
299 | (at your option) any later version.
300 |
301 | This program is distributed in the hope that it will be useful,
302 | but WITHOUT ANY WARRANTY; without even the implied warranty of
303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304 | GNU General Public License for more details.
305 |
306 | You should have received a copy of the GNU General Public License along
307 | with this program; if not, write to the Free Software Foundation, Inc.,
308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309 |
310 | Also add information on how to contact you by electronic and paper mail.
311 |
312 | If the program is interactive, make it output a short notice like this
313 | when it starts in an interactive mode:
314 |
315 | Gnomovision version 69, Copyright (C) year name of author
316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317 | This is free software, and you are welcome to redistribute it
318 | under certain conditions; type `show c' for details.
319 |
320 | The hypothetical commands `show w' and `show c' should show the appropriate
321 | parts of the General Public License. Of course, the commands you use may
322 | be called something other than `show w' and `show c'; they could even be
323 | mouse-clicks or menu items--whatever suits your program.
324 |
325 | You should also get your employer (if you work as a programmer) or your
326 | school, if any, to sign a "copyright disclaimer" for the program, if
327 | necessary. Here is a sample; alter the names:
328 |
329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330 | `Gnomovision' (which makes passes at compilers) written by James Hacker.
331 |
332 | {signature of Ty Coon}, 1 April 1989
333 | Ty Coon, President of Vice
334 |
335 | This General Public License does not permit incorporating your program into
336 | proprietary programs. If your program is a subroutine library, you may
337 | consider it more useful to permit linking proprietary applications with the
338 | library. If this is what you want to do, use the GNU Lesser General
339 | Public License instead of this License.
340 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Android Controlled Self Balancing Robot
2 | Arduino + Android remote controlled balancing robot
3 |
4 | This project is on Hackaday.io and takes part in the Hackaday Prize 2017 : https://hackaday.io/project/25835-android-controlled-balancing-robot
5 | **Like this project on Hackaday.io and help me build new cool things !**
6 |
7 | 
8 |
9 | - Arduino pro micro (atmega32u4)
10 | - Balance-Bot custom PCB
11 | - MPU-9250 IMU
12 | - HC-05 Bluetooth module
13 | - 2x A4988 Stepper drivers
14 | - 2x NEMA-17 Steppers Motors
15 | - 1x 12g servo
16 | - Custom 3D printed frame (and battle arm :D )
17 | - 2x 5cm salvaged RC wheels
18 |
19 | - Android : Bluetooth Electronics app (http://www.keuwl.com/apps/bluetoothelectronics/)
20 |
21 | *You could find full instructions on the [project's page on HackaDay.io](https://hackaday.io/project/25835-android-controlled-balancing-robot) and in the README present in each subfolder of this repository.*
22 |
23 | # Donation
24 | If this project helps you reduce time to develop, you can buy me a cup of coffee :)
25 |
26 | [](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=stephgsec%2debay%40yahoo%2efr&lc=US&item_name=St%c3%a9phane%20Guerreau¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted)
27 |
--------------------------------------------------------------------------------
/STL/README.md:
--------------------------------------------------------------------------------
1 | # Android Controlled Self Balancing Robot - 3D files
2 |
3 | This project is on Hackaday.io and takes part in the Hackaday Prize 2017 : https://hackaday.io/project/25835-android-controlled-balancing-robot
4 | **Like this project on Hackaday.io and help me build new cool things !**
5 |
6 | 
7 |
8 | [3D files instructions](https://hackaday.io/project/25835-android-controlled-self-balancing-robot/log/62775-3d-printed-frame)
9 |
10 | # Donation
11 | If this project help you reduce time to develop, you can give me a cup of coffee :)
12 |
13 | [](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=stephgsec%2debay%40yahoo%2efr&lc=US&item_name=St%c3%a9phane%20Guerreau¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted)
14 |
15 | # LICENSE
16 |  ")
17 |
18 | * You are free to:
19 | * **Share** — copy and redistribute the material in any medium or format
20 |
21 | * Under the following terms:
22 | * **Attribution** — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
23 | * **NonCommercial** — You may not use the material for commercial purposes.
24 | * **NoDerivatives** — If you remix, transform, or build upon the material, you may not distribute the modified material.
25 | * **No additional restrictions** — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
26 |
--------------------------------------------------------------------------------
/STL/by-nc-nd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ArcadiaLabs/balancing_robot/14918a912a41ea9b97aa3dbc5e48ac8bb0952144/STL/by-nc-nd.png
--------------------------------------------------------------------------------
/STL/robot_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ArcadiaLabs/balancing_robot/14918a912a41ea9b97aa3dbc5e48ac8bb0952144/STL/robot_3d.png
--------------------------------------------------------------------------------
/STL/shaft_drive.stl:
--------------------------------------------------------------------------------
1 | solid EVO3
2 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
3 | outer loop
4 | vertex 81.1472922804007 764.0053153378434 41.00000000000057
5 | vertex 81.14729228040063 758.3761502132445 40.9999999999997
6 | vertex 82.77229228040066 761.1907327755439 41.000000000000135
7 | endloop
8 | endfacet
9 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
10 | outer loop
11 | vertex 81.14729228040063 758.3761502132445 40.9999999999997
12 | vertex 81.1472922804007 764.0053153378434 41.00000000000057
13 | vertex 81.02229228040068 761.1907327755439 41.000000000000156
14 | endloop
15 | endfacet
16 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
17 | outer loop
18 | vertex 81.02229228040068 761.1907327755439 41.000000000000156
19 | vertex 81.1472922804007 764.0053153378434 41.00000000000057
20 | vertex 80.27229228040069 762.4897708812206 41.000000000000355
21 | endloop
22 | endfacet
23 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
24 | outer loop
25 | vertex 80.27229228040069 762.4897708812206 41.000000000000355
26 | vertex 81.1472922804007 764.0053153378434 41.00000000000057
27 | vertex 77.8972922804007 764.0053153378434 41.00000000000056
28 | endloop
29 | endfacet
30 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
31 | outer loop
32 | vertex 80.27229228040069 762.4897708812206 41.000000000000355
33 | vertex 77.8972922804007 764.0053153378434 41.00000000000056
34 | vertex 78.77229228040066 762.4897708812206 41.000000000000334
35 | endloop
36 | endfacet
37 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
38 | outer loop
39 | vertex 78.77229228040066 762.4897708812206 41.000000000000334
40 | vertex 77.8972922804007 764.0053153378434 41.00000000000056
41 | vertex 78.02229228040065 761.1907327755439 41.00000000000013
42 | endloop
43 | endfacet
44 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
45 | outer loop
46 | vertex 81.14729228040063 758.3761502132445 40.9999999999997
47 | vertex 80.27229228040066 759.8916946698672 40.99999999999996
48 | vertex 77.89729228040063 758.3761502132445 40.9999999999997
49 | endloop
50 | endfacet
51 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
52 | outer loop
53 | vertex 80.27229228040066 759.8916946698672 40.99999999999996
54 | vertex 81.14729228040063 758.3761502132445 40.9999999999997
55 | vertex 81.02229228040068 761.1907327755439 41.000000000000156
56 | endloop
57 | endfacet
58 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
59 | outer loop
60 | vertex 77.89729228040063 758.3761502132445 40.9999999999997
61 | vertex 80.27229228040066 759.8916946698672 40.99999999999996
62 | vertex 78.77229228040065 759.8916946698672 40.99999999999993
63 | endloop
64 | endfacet
65 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
66 | outer loop
67 | vertex 77.89729228040063 758.3761502132445 40.9999999999997
68 | vertex 78.77229228040065 759.8916946698672 40.99999999999993
69 | vertex 78.02229228040065 761.1907327755439 41.00000000000013
70 | endloop
71 | endfacet
72 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
73 | outer loop
74 | vertex 77.89729228040063 758.3761502132445 40.9999999999997
75 | vertex 78.02229228040065 761.1907327755439 41.00000000000013
76 | vertex 77.8972922804007 764.0053153378434 41.00000000000056
77 | endloop
78 | endfacet
79 | facet normal -9.775881061125577e-16 -1.5354040688348136e-13 1.0
80 | outer loop
81 | vertex 77.89729228040063 758.3761502132445 40.9999999999997
82 | vertex 77.8972922804007 764.0053153378434 41.00000000000056
83 | vertex 76.27229228040066 761.1907327755439 41.00000000000013
84 | endloop
85 | endfacet
86 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
87 | outer loop
88 | vertex 82.05317249341032 760.512585466332 15.000000000000034
89 | vertex 82.05317249341033 761.8688800847636 15.00000000000024
90 | vertex 82.14245228040069 761.1907327755479 15.000000000000137
91 | endloop
92 | endfacet
93 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
94 | outer loop
95 | vertex 82.05317249341033 761.8688800847636 15.00000000000024
96 | vertex 82.05317249341032 760.512585466332 15.000000000000034
97 | vertex 81.79141740238056 759.8806527755479 14.999999999999936
98 | endloop
99 | endfacet
100 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
101 | outer loop
102 | vertex 82.05317249341033 761.8688800847636 15.00000000000024
103 | vertex 81.79141740238056 759.8806527755479 14.999999999999936
104 | vertex 81.79141740238057 762.500812775548 15.00000000000034
105 | endloop
106 | endfacet
107 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
108 | outer loop
109 | vertex 81.79141740238057 762.500812775548 15.00000000000034
110 | vertex 81.79141740238056 759.8806527755479 14.999999999999936
111 | vertex 81.37502518419447 759.337999871754 14.999999999999739
112 | endloop
113 | endfacet
114 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
115 | outer loop
116 | vertex 81.79141740238057 762.500812775548 15.00000000000034
117 | vertex 81.37502518419447 759.337999871754 14.999999999999739
118 | vertex 81.3750251841945 763.0434656793416 15.000000000000307
119 | endloop
120 | endfacet
121 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
122 | outer loop
123 | vertex 81.3750251841945 763.0434656793416 15.000000000000307
124 | vertex 81.37502518419447 759.337999871754 14.999999999999739
125 | vertex 80.83237228040065 758.921607653568 14.999999999999808
126 | endloop
127 | endfacet
128 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
129 | outer loop
130 | vertex 81.3750251841945 763.0434656793416 15.000000000000307
131 | vertex 80.83237228040065 758.921607653568 14.999999999999808
132 | vertex 81.10369873229759 763.2516617884347 15.000000000000474
133 | endloop
134 | endfacet
135 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
136 | outer loop
137 | vertex 81.10369873229759 763.2516617884347 15.000000000000474
138 | vertex 80.83237228040065 758.921607653568 14.999999999999808
139 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
140 | endloop
141 | endfacet
142 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
143 | outer loop
144 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
145 | vertex 80.83237228040065 758.921607653568 14.999999999999808
146 | vertex 80.20043958961654 758.6598525625384 14.999999999999769
147 | endloop
148 | endfacet
149 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
150 | outer loop
151 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
152 | vertex 80.20043958961654 758.6598525625384 14.999999999999769
153 | vertex 79.52229228040072 758.5705727755478 14.999999999999755
154 | endloop
155 | endfacet
156 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
157 | outer loop
158 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
159 | vertex 79.52229228040072 758.5705727755478 14.999999999999755
160 | vertex 78.84414497118493 758.6598525625384 14.999999999999767
161 | endloop
162 | endfacet
163 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
164 | outer loop
165 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
166 | vertex 78.84414497118493 758.6598525625384 14.999999999999767
167 | vertex 78.2122122804007 758.921607653568 14.999999999999783
168 | endloop
169 | endfacet
170 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
171 | outer loop
172 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
173 | vertex 78.2122122804007 758.921607653568 14.999999999999783
174 | vertex 77.66955937660697 759.3379998717542 14.999999999999849
175 | endloop
176 | endfacet
177 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
178 | outer loop
179 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
180 | vertex 77.66955937660697 759.3379998717542 14.999999999999849
181 | vertex 77.66955937660701 763.0434656793417 15.000000000000417
182 | endloop
183 | endfacet
184 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
185 | outer loop
186 | vertex 77.66955937660701 763.0434656793417 15.000000000000417
187 | vertex 77.66955937660697 759.3379998717542 14.999999999999849
188 | vertex 77.25316715842084 759.880652775548 14.99999999999993
189 | endloop
190 | endfacet
191 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
192 | outer loop
193 | vertex 77.66955937660701 763.0434656793417 15.000000000000417
194 | vertex 77.25316715842084 759.880652775548 14.99999999999993
195 | vertex 77.25316715842087 762.500812775548 15.000000000000334
196 | endloop
197 | endfacet
198 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
199 | outer loop
200 | vertex 77.25316715842087 762.500812775548 15.000000000000334
201 | vertex 77.25316715842084 759.880652775548 14.99999999999993
202 | vertex 76.99141206739118 760.5125854663321 15.000000000000028
203 | endloop
204 | endfacet
205 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
206 | outer loop
207 | vertex 77.25316715842087 762.500812775548 15.000000000000334
208 | vertex 76.99141206739118 760.5125854663321 15.000000000000028
209 | vertex 76.9914120673912 761.8688800847638 15.000000000000238
210 | endloop
211 | endfacet
212 | facet normal 1.377870423239192e-15 1.515009997217371e-13 -1.0
213 | outer loop
214 | vertex 76.9914120673912 761.8688800847638 15.000000000000238
215 | vertex 76.99141206739118 760.5125854663321 15.000000000000028
216 | vertex 76.90213228040072 761.190732775548 15.000000000000133
217 | endloop
218 | endfacet
219 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
220 | outer loop
221 | vertex 84.52229228040065 752.530478737706 -1.2746248501116496e-12
222 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
223 | vertex 89.52229228040073 761.1907327755503 1.4945822357503855e-13
224 | endloop
225 | endfacet
226 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
227 | outer loop
228 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
229 | vertex 84.52229228040065 752.530478737706 -1.2746248501116496e-12
230 | vertex 82.05317249341033 760.5125854663344 3.947953075567056e-14
231 | endloop
232 | endfacet
233 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
234 | outer loop
235 | vertex 82.05317249341033 760.5125854663344 3.947953075567056e-14
236 | vertex 84.52229228040065 752.530478737706 -1.2746248501116496e-12
237 | vertex 81.79141740238057 759.8806527755502 -5.921929613350585e-14
238 | endloop
239 | endfacet
240 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
241 | outer loop
242 | vertex 81.79141740238057 759.8806527755502 -5.921929613350585e-14
243 | vertex 84.52229228040065 752.530478737706 -1.2746248501116496e-12
244 | vertex 81.37502518419448 759.3379998717564 -1.3253842467975118e-13
245 | endloop
246 | endfacet
247 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
248 | outer loop
249 | vertex 81.37502518419448 759.3379998717564 -1.3253842467975118e-13
250 | vertex 84.52229228040065 752.530478737706 -1.2746248501116496e-12
251 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
252 | endloop
253 | endfacet
254 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
255 | outer loop
256 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
257 | vertex 82.05317249341033 760.5125854663344 3.947953075567056e-14
258 | vertex 82.14245228040069 761.1907327755503 1.4099832412739488e-13
259 | endloop
260 | endfacet
261 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
262 | outer loop
263 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
264 | vertex 82.14245228040069 761.1907327755503 1.4099832412739488e-13
265 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
266 | endloop
267 | endfacet
268 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
269 | outer loop
270 | vertex 81.37502518419448 759.3379998717564 -1.3253842467975118e-13
271 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
272 | vertex 80.83237228040066 758.9216076535704 -1.9739765377835283e-13
273 | endloop
274 | endfacet
275 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
276 | outer loop
277 | vertex 80.83237228040066 758.9216076535704 -1.9739765377835283e-13
278 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
279 | vertex 80.20043958961654 758.6598525625407 -2.368771845340234e-13
280 | endloop
281 | endfacet
282 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
283 | outer loop
284 | vertex 80.20043958961654 758.6598525625407 -2.368771845340234e-13
285 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
286 | vertex 79.52229228040073 758.5705727755502 -2.509770169467629e-13
287 | endloop
288 | endfacet
289 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
290 | outer loop
291 | vertex 79.52229228040073 758.5705727755502 -2.509770169467629e-13
292 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
293 | vertex 78.84414497118495 758.6598525625407 -2.396971510165713e-13
294 | endloop
295 | endfacet
296 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
297 | outer loop
298 | vertex 78.84414497118495 758.6598525625407 -2.396971510165713e-13
299 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
300 | vertex 78.21221228040072 758.9216076535704 -2.1149748619109232e-13
301 | endloop
302 | endfacet
303 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
304 | outer loop
305 | vertex 78.21221228040072 758.9216076535704 -2.1149748619109232e-13
306 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
307 | vertex 77.669559376607 759.3379998717564 -1.4663825709249067e-13
308 | endloop
309 | endfacet
310 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
311 | outer loop
312 | vertex 77.669559376607 759.3379998717564 -1.4663825709249067e-13
313 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
314 | vertex 77.25316715842087 759.8806527755502 -6.485922909860164e-14
315 | endloop
316 | endfacet
317 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
318 | outer loop
319 | vertex 77.25316715842087 759.8806527755502 -6.485922909860164e-14
320 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
321 | vertex 76.9914120673912 760.5125854663344 3.3839597790574766e-14
322 | endloop
323 | endfacet
324 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
325 | outer loop
326 | vertex 76.9914120673912 760.5125854663344 3.3839597790574766e-14
327 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
328 | vertex 76.90213228040074 761.1907327755503 1.3817835764484697e-13
329 | endloop
330 | endfacet
331 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
332 | outer loop
333 | vertex 76.90213228040074 761.1907327755503 1.3817835764484697e-13
334 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
335 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
336 | endloop
337 | endfacet
338 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
339 | outer loop
340 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
341 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
342 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
343 | endloop
344 | endfacet
345 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
346 | outer loop
347 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
348 | vertex 82.3222922804008 767.9281510756223 1.2210454869432395e-12
349 | vertex 79.5222922804008 769.8509868133948 1.5368817329886042e-12
350 | endloop
351 | endfacet
352 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
353 | outer loop
354 | vertex 82.3222922804008 767.9281510756223 1.2210454869432395e-12
355 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
356 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
357 | endloop
358 | endfacet
359 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
360 | outer loop
361 | vertex 79.5222922804008 769.8509868133948 1.5368817329886042e-12
362 | vertex 82.3222922804008 767.9281510756223 1.2210454869432395e-12
363 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
364 | endloop
365 | endfacet
366 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
367 | outer loop
368 | vertex 79.5222922804008 769.8509868133948 1.5368817329886042e-12
369 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
370 | vertex 74.5222922804008 769.8509868133948 1.5199619340933167e-12
371 | endloop
372 | endfacet
373 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
374 | outer loop
375 | vertex 74.5222922804008 769.8509868133948 1.5199619340933167e-12
376 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
377 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
378 | endloop
379 | endfacet
380 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
381 | outer loop
382 | vertex 74.5222922804008 769.8509868133948 1.5199619340933167e-12
383 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
384 | vertex 69.52229228040073 761.1907327755504 9.587886040662851e-14
385 | endloop
386 | endfacet
387 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
388 | outer loop
389 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
390 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
391 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
392 | endloop
393 | endfacet
394 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
395 | outer loop
396 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
397 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
398 | vertex 81.37502518419453 763.0434656793439 4.3709480479492413e-13
399 | endloop
400 | endfacet
401 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
402 | outer loop
403 | vertex 81.37502518419453 763.0434656793439 4.3709480479492413e-13
404 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
405 | vertex 81.79141740238059 762.5008127755502 3.440359108708435e-13
406 | endloop
407 | endfacet
408 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
409 | outer loop
410 | vertex 81.79141740238059 762.5008127755502 3.440359108708435e-13
411 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
412 | vertex 82.05317249341034 761.8688800847659 2.4533708398166706e-13
413 | endloop
414 | endfacet
415 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
416 | outer loop
417 | vertex 82.05317249341034 761.8688800847659 2.4533708398166706e-13
418 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
419 | vertex 82.14245228040069 761.1907327755503 1.4099832412739488e-13
420 | endloop
421 | endfacet
422 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
423 | outer loop
424 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
425 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
426 | vertex 77.94088582850385 763.251661788437 4.540146036902115e-13
427 | endloop
428 | endfacet
429 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
430 | outer loop
431 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
432 | vertex 77.94088582850385 763.251661788437 4.540146036902115e-13
433 | vertex 77.66955937660703 763.0434656793439 4.2299497238218464e-13
434 | endloop
435 | endfacet
436 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
437 | outer loop
438 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
439 | vertex 77.66955937660703 763.0434656793439 4.2299497238218464e-13
440 | vertex 77.25316715842088 762.5008127755502 3.383959779057477e-13
441 | endloop
442 | endfacet
443 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
444 | outer loop
445 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
446 | vertex 77.25316715842088 762.5008127755502 3.383959779057477e-13
447 | vertex 76.99141206739121 761.8688800847659 2.425171174991192e-13
448 | endloop
449 | endfacet
450 | facet normal 2.5526802893694728e-15 1.6268567629590746e-13 -1.0
451 | outer loop
452 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
453 | vertex 76.99141206739121 761.8688800847659 2.425171174991192e-13
454 | vertex 76.90213228040074 761.1907327755503 1.3817835764484697e-13
455 | endloop
456 | endfacet
457 | facet normal -0.8660254037844342 0.5000000000000079 7.913215216962125e-14
458 | outer loop
459 | vertex 69.52229228040073 761.1907327755504 9.587886040662851e-14
460 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
461 | vertex 74.5222922804008 769.8509868133948 1.5199619340933167e-12
462 | endloop
463 | endfacet
464 | facet normal -0.8660254037844342 0.5000000000000079 7.913215216962125e-14
465 | outer loop
466 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
467 | vertex 69.52229228040073 761.1907327755504 9.587886040662851e-14
468 | vertex 69.5222922804007 761.190732775548 14.999999999999966
469 | endloop
470 | endfacet
471 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
472 | outer loop
473 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
474 | vertex 79.5222922804008 769.8509868133948 1.5368817329886042e-12
475 | vertex 74.5222922804008 769.8509868133948 1.5199619340933167e-12
476 | endloop
477 | endfacet
478 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
479 | outer loop
480 | vertex 79.5222922804008 769.8509868133948 1.5368817329886042e-12
481 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
482 | vertex 78.21161890858052 769.8509868133938 6.2502811439573716
483 | endloop
484 | endfacet
485 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
486 | outer loop
487 | vertex 79.5222922804008 769.8509868133948 1.5368817329886042e-12
488 | vertex 78.21161890858052 769.8509868133938 6.2502811439573716
489 | vertex 78.44999684247735 769.8509868133939 5.939620972177512
490 | endloop
491 | endfacet
492 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
493 | outer loop
494 | vertex 79.5222922804008 769.8509868133948 1.5368817329886042e-12
495 | vertex 78.44999684247735 769.8509868133939 5.939620972177512
496 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
497 | endloop
498 | endfacet
499 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
500 | outer loop
501 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
502 | vertex 78.44999684247735 769.8509868133939 5.939620972177512
503 | vertex 78.76065701425718 769.8509868133939 5.7012430382807215
504 | endloop
505 | endfacet
506 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
507 | outer loop
508 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
509 | vertex 78.76065701425718 769.8509868133939 5.7012430382807215
510 | vertex 79.1224284466034 769.8509868133939 5.551392404523769
511 | endloop
512 | endfacet
513 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
514 | outer loop
515 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
516 | vertex 79.1224284466034 769.8509868133939 5.551392404523769
517 | vertex 79.51065701425718 769.8509868133939 5.500281143957374
518 | endloop
519 | endfacet
520 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
521 | outer loop
522 | vertex 78.21161890858052 769.8509868133938 6.2502811439573716
523 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
524 | vertex 78.06176827482358 769.8509868133938 6.61205257630358
525 | endloop
526 | endfacet
527 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
528 | outer loop
529 | vertex 78.06176827482358 769.8509868133938 6.61205257630358
530 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
531 | vertex 78.01065701425718 769.8509868133937 7.00028114395737
532 | endloop
533 | endfacet
534 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
535 | outer loop
536 | vertex 78.01065701425718 769.8509868133937 7.00028114395737
537 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
538 | vertex 78.06176827482358 769.8509868133935 7.388509711611149
539 | endloop
540 | endfacet
541 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
542 | outer loop
543 | vertex 78.06176827482358 769.8509868133935 7.388509711611149
544 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
545 | vertex 78.21161890858052 769.8509868133935 7.750281143957369
546 | endloop
547 | endfacet
548 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
549 | outer loop
550 | vertex 78.21161890858052 769.8509868133935 7.750281143957369
551 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
552 | vertex 78.44999684247735 769.8509868133935 8.06094131573716
553 | endloop
554 | endfacet
555 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
556 | outer loop
557 | vertex 78.44999684247735 769.8509868133935 8.06094131573716
558 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
559 | vertex 78.76065701425718 769.8509868133935 8.299319249634033
560 | endloop
561 | endfacet
562 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
563 | outer loop
564 | vertex 78.76065701425718 769.8509868133935 8.299319249634033
565 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
566 | vertex 79.1224284466034 769.8509868133935 8.449169883390974
567 | endloop
568 | endfacet
569 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
570 | outer loop
571 | vertex 79.1224284466034 769.8509868133935 8.449169883390974
572 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
573 | vertex 79.51065701425718 769.8509868133934 8.500281143957368
574 | endloop
575 | endfacet
576 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
577 | outer loop
578 | vertex 79.51065701425718 769.8509868133934 8.500281143957368
579 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
580 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
581 | endloop
582 | endfacet
583 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
584 | outer loop
585 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
586 | vertex 80.80969511993383 769.8509868133938 6.250281143957363
587 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
588 | endloop
589 | endfacet
590 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
591 | outer loop
592 | vertex 80.80969511993383 769.8509868133938 6.250281143957363
593 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
594 | vertex 80.57131718603699 769.8509868133939 5.939620972177549
595 | endloop
596 | endfacet
597 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
598 | outer loop
599 | vertex 80.57131718603699 769.8509868133939 5.939620972177549
600 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
601 | vertex 80.26065701425718 769.8509868133939 5.701243038280712
602 | endloop
603 | endfacet
604 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
605 | outer loop
606 | vertex 80.26065701425718 769.8509868133939 5.701243038280712
607 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
608 | vertex 79.89888558191096 769.8509868133939 5.551392404523771
609 | endloop
610 | endfacet
611 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
612 | outer loop
613 | vertex 79.89888558191096 769.8509868133939 5.551392404523771
614 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
615 | vertex 79.51065701425718 769.8509868133939 5.500281143957374
616 | endloop
617 | endfacet
618 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
619 | outer loop
620 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
621 | vertex 80.80969511993383 769.8509868133938 6.250281143957363
622 | vertex 80.95954575369078 769.8509868133937 6.612052576303583
623 | endloop
624 | endfacet
625 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
626 | outer loop
627 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
628 | vertex 80.95954575369078 769.8509868133937 6.612052576303583
629 | vertex 81.01065701425718 769.8509868133937 7.000281143957362
630 | endloop
631 | endfacet
632 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
633 | outer loop
634 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
635 | vertex 81.01065701425718 769.8509868133937 7.000281143957362
636 | vertex 80.95954575369078 769.8509868133935 7.388509711611151
637 | endloop
638 | endfacet
639 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
640 | outer loop
641 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
642 | vertex 80.95954575369078 769.8509868133935 7.388509711611151
643 | vertex 80.80969511993385 769.8509868133935 7.75028114395736
644 | endloop
645 | endfacet
646 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
647 | outer loop
648 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
649 | vertex 80.80969511993385 769.8509868133935 7.75028114395736
650 | vertex 80.57131718603699 769.8509868133935 8.060941315737185
651 | endloop
652 | endfacet
653 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
654 | outer loop
655 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
656 | vertex 80.57131718603699 769.8509868133935 8.060941315737185
657 | vertex 80.26065701425718 769.8509868133935 8.299319249634022
658 | endloop
659 | endfacet
660 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
661 | outer loop
662 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
663 | vertex 80.26065701425718 769.8509868133935 8.299319249634022
664 | vertex 79.89888558191096 769.8509868133934 8.449169883390976
665 | endloop
666 | endfacet
667 | facet normal 9.079617401591789e-15 1.0 1.6259216195635418e-13
668 | outer loop
669 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
670 | vertex 79.89888558191096 769.8509868133934 8.449169883390976
671 | vertex 79.51065701425718 769.8509868133934 8.500281143957368
672 | endloop
673 | endfacet
674 | facet normal 0.8660254037844428 0.4999999999999929 8.355352412628636e-14
675 | outer loop
676 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
677 | vertex 89.52229228040073 761.1907327755503 1.4945822357503855e-13
678 | vertex 84.52229228040082 769.8509868133947 1.5425216659537e-12
679 | endloop
680 | endfacet
681 | facet normal 0.8660254037844428 0.4999999999999929 8.355352412628636e-14
682 | outer loop
683 | vertex 89.52229228040073 761.1907327755503 1.4945822357503855e-13
684 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
685 | vertex 89.5222922804007 761.1907327755478 15.000000000000156
686 | endloop
687 | endfacet
688 | facet normal 0.8660254037844342 -0.5000000000000081 -7.913215216962128e-14
689 | outer loop
690 | vertex 89.5222922804007 761.1907327755478 15.000000000000156
691 | vertex 84.52229228040065 752.530478737706 -1.2746248501116496e-12
692 | vertex 89.52229228040073 761.1907327755503 1.4945822357503855e-13
693 | endloop
694 | endfacet
695 | facet normal 0.8660254037844342 -0.5000000000000081 -7.913215216962128e-14
696 | outer loop
697 | vertex 84.52229228040065 752.530478737706 -1.2746248501116496e-12
698 | vertex 89.5222922804007 761.1907327755478 15.000000000000156
699 | vertex 84.52229228040062 752.5304787377034 14.999999999998597
700 | endloop
701 | endfacet
702 | facet normal -9.079617401591775e-15 -1.0 -1.626856762959075e-13
703 | outer loop
704 | vertex 84.52229228040065 752.530478737706 -1.2746248501116496e-12
705 | vertex 74.52229228040063 752.5304787377036 14.999999999998709
706 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
707 | endloop
708 | endfacet
709 | facet normal -9.079617401591775e-15 -1.0 -1.626856762959075e-13
710 | outer loop
711 | vertex 74.52229228040063 752.5304787377036 14.999999999998709
712 | vertex 84.52229228040065 752.530478737706 -1.2746248501116496e-12
713 | vertex 84.52229228040062 752.5304787377034 14.999999999998597
714 | endloop
715 | endfacet
716 | facet normal -0.8660254037844429 -0.49999999999999256 -8.355352412628631e-14
717 | outer loop
718 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
719 | vertex 69.5222922804007 761.190732775548 14.999999999999966
720 | vertex 69.52229228040073 761.1907327755504 9.587886040662851e-14
721 | endloop
722 | endfacet
723 | facet normal -0.8660254037844429 -0.49999999999999256 -8.355352412628631e-14
724 | outer loop
725 | vertex 69.5222922804007 761.190732775548 14.999999999999966
726 | vertex 74.52229228040066 752.530478737706 -1.297184581972033e-12
727 | vertex 74.52229228040063 752.5304787377036 14.999999999998709
728 | endloop
729 | endfacet
730 | facet normal 0.9914448613738001 -0.13052619222013193 -1.901275182040768e-14
731 | outer loop
732 | vertex 76.90213228040072 761.190732775548 15.000000000000133
733 | vertex 76.99141206739121 761.8688800847659 2.425171174991192e-13
734 | vertex 76.9914120673912 761.8688800847638 15.000000000000238
735 | endloop
736 | endfacet
737 | facet normal 0.9914448613738001 -0.13052619222013193 -1.901275182040768e-14
738 | outer loop
739 | vertex 76.99141206739121 761.8688800847659 2.425171174991192e-13
740 | vertex 76.90213228040072 761.190732775548 15.000000000000133
741 | vertex 76.90213228040074 761.1907327755503 1.3817835764484697e-13
742 | endloop
743 | endfacet
744 | facet normal 0.9914448613738067 0.13052619222007977 2.1076611031793715e-14
745 | outer loop
746 | vertex 76.99141206739118 760.5125854663321 15.000000000000028
747 | vertex 76.90213228040074 761.1907327755503 1.3817835764484697e-13
748 | vertex 76.90213228040072 761.190732775548 15.000000000000133
749 | endloop
750 | endfacet
751 | facet normal 0.9914448613738067 0.13052619222007977 2.1076611031793715e-14
752 | outer loop
753 | vertex 76.90213228040074 761.1907327755503 1.3817835764484697e-13
754 | vertex 76.99141206739118 760.5125854663321 15.000000000000028
755 | vertex 76.9914120673912 760.5125854663344 3.3839597790574766e-14
756 | endloop
757 | endfacet
758 | facet normal 0.9238795325113103 0.3826834323650335 5.972963767289564e-14
759 | outer loop
760 | vertex 77.25316715842084 759.880652775548 14.99999999999993
761 | vertex 76.9914120673912 760.5125854663344 3.3839597790574766e-14
762 | vertex 76.99141206739118 760.5125854663321 15.000000000000028
763 | endloop
764 | endfacet
765 | facet normal 0.9238795325113103 0.3826834323650335 5.972963767289564e-14
766 | outer loop
767 | vertex 76.9914120673912 760.5125854663344 3.3839597790574766e-14
768 | vertex 77.25316715842084 759.880652775548 14.99999999999993
769 | vertex 77.25316715842087 759.8806527755502 -6.485922909860164e-14
770 | endloop
771 | endfacet
772 | facet normal 0.7933533402912487 0.6087614290087029 9.43121882145013e-14
773 | outer loop
774 | vertex 77.66955937660697 759.3379998717542 14.999999999999849
775 | vertex 77.25316715842087 759.8806527755502 -6.485922909860164e-14
776 | vertex 77.25316715842084 759.880652775548 14.99999999999993
777 | endloop
778 | endfacet
779 | facet normal 0.7933533402912487 0.6087614290087029 9.43121882145013e-14
780 | outer loop
781 | vertex 77.25316715842087 759.8806527755502 -6.485922909860164e-14
782 | vertex 77.66955937660697 759.3379998717542 14.999999999999849
783 | vertex 77.669559376607 759.3379998717564 -1.4663825709249067e-13
784 | endloop
785 | endfacet
786 | facet normal 0.6087614290087052 0.793353340291247 1.224675189875474e-13
787 | outer loop
788 | vertex 77.66955937660697 759.3379998717542 14.999999999999849
789 | vertex 78.21221228040072 758.9216076535704 -2.1149748619109232e-13
790 | vertex 77.669559376607 759.3379998717564 -1.4663825709249067e-13
791 | endloop
792 | endfacet
793 | facet normal 0.6087614290087052 0.793353340291247 1.224675189875474e-13
794 | outer loop
795 | vertex 78.21221228040072 758.9216076535704 -2.1149748619109232e-13
796 | vertex 77.66955937660697 759.3379998717542 14.999999999999849
797 | vertex 78.2122122804007 758.921607653568 14.999999999999783
798 | endloop
799 | endfacet
800 | facet normal 0.3826834323649904 0.9238795325113279 1.4227689072873647e-13
801 | outer loop
802 | vertex 78.2122122804007 758.921607653568 14.999999999999783
803 | vertex 78.84414497118495 758.6598525625407 -2.396971510165713e-13
804 | vertex 78.21221228040072 758.9216076535704 -2.1149748619109232e-13
805 | endloop
806 | endfacet
807 | facet normal 0.3826834323649904 0.9238795325113279 1.4227689072873647e-13
808 | outer loop
809 | vertex 78.84414497118495 758.6598525625407 -2.396971510165713e-13
810 | vertex 78.2122122804007 758.921607653568 14.999999999999783
811 | vertex 78.84414497118493 758.6598525625384 14.999999999999767
812 | endloop
813 | endfacet
814 | facet normal 0.13052619222012316 0.9914448613738011 1.5239032749042952e-13
815 | outer loop
816 | vertex 78.84414497118493 758.6598525625384 14.999999999999767
817 | vertex 79.52229228040073 758.5705727755502 -2.509770169467629e-13
818 | vertex 78.84414497118495 758.6598525625407 -2.396971510165713e-13
819 | endloop
820 | endfacet
821 | facet normal 0.13052619222012316 0.9914448613738011 1.5239032749042952e-13
822 | outer loop
823 | vertex 79.52229228040073 758.5705727755502 -2.509770169467629e-13
824 | vertex 78.84414497118493 758.6598525625384 14.999999999999767
825 | vertex 79.52229228040072 758.5705727755478 14.999999999999755
826 | endloop
827 | endfacet
828 | facet normal -0.13052619222010092 0.991444861373804 1.5211861527058107e-13
829 | outer loop
830 | vertex 79.52229228040072 758.5705727755478 14.999999999999755
831 | vertex 80.20043958961654 758.6598525625407 -2.368771845340234e-13
832 | vertex 79.52229228040073 758.5705727755502 -2.509770169467629e-13
833 | endloop
834 | endfacet
835 | facet normal -0.13052619222010092 0.991444861373804 1.5211861527058107e-13
836 | outer loop
837 | vertex 80.20043958961654 758.6598525625407 -2.368771845340234e-13
838 | vertex 79.52229228040072 758.5705727755478 14.999999999999755
839 | vertex 80.20043958961654 758.6598525625384 14.999999999999769
840 | endloop
841 | endfacet
842 | facet normal -0.3826834323650335 0.9238795325113103 1.4148027080794458e-13
843 | outer loop
844 | vertex 80.20043958961654 758.6598525625384 14.999999999999769
845 | vertex 80.83237228040066 758.9216076535704 -1.9739765377835283e-13
846 | vertex 80.20043958961654 758.6598525625407 -2.368771845340234e-13
847 | endloop
848 | endfacet
849 | facet normal -0.3826834323650335 0.9238795325113103 1.4148027080794458e-13
850 | outer loop
851 | vertex 80.83237228040066 758.9216076535704 -1.9739765377835283e-13
852 | vertex 80.20043958961654 758.6598525625384 14.999999999999769
853 | vertex 80.83237228040065 758.921607653568 14.999999999999808
854 | endloop
855 | endfacet
856 | facet normal -0.608761429008625 0.7933533402913084 1.212002796969522e-13
857 | outer loop
858 | vertex 80.83237228040065 758.921607653568 14.999999999999808
859 | vertex 81.37502518419448 759.3379998717564 -1.3253842467975118e-13
860 | vertex 80.83237228040066 758.9216076535704 -1.9739765377835283e-13
861 | endloop
862 | endfacet
863 | facet normal -0.608761429008625 0.7933533402913084 1.212002796969522e-13
864 | outer loop
865 | vertex 81.37502518419448 759.3379998717564 -1.3253842467975118e-13
866 | vertex 80.83237228040065 758.921607653568 14.999999999999808
867 | vertex 81.37502518419447 759.337999871754 14.999999999999739
868 | endloop
869 | endfacet
870 | facet normal -0.7933533402912816 0.6087614290086603 9.266068981751731e-14
871 | outer loop
872 | vertex 81.37502518419448 759.3379998717564 -1.3253842467975118e-13
873 | vertex 81.79141740238056 759.8806527755479 14.999999999999936
874 | vertex 81.79141740238057 759.8806527755502 -5.921929613350585e-14
875 | endloop
876 | endfacet
877 | facet normal -0.7933533402912816 0.6087614290086603 9.266068981751731e-14
878 | outer loop
879 | vertex 81.79141740238056 759.8806527755479 14.999999999999936
880 | vertex 81.37502518419448 759.3379998717564 -1.3253842467975118e-13
881 | vertex 81.37502518419447 759.337999871754 14.999999999999739
882 | endloop
883 | endfacet
884 | facet normal -0.9238795325112567 0.38268343236516283 5.780642705608934e-14
885 | outer loop
886 | vertex 81.79141740238057 759.8806527755502 -5.921929613350585e-14
887 | vertex 82.05317249341032 760.512585466332 15.000000000000034
888 | vertex 82.05317249341033 760.5125854663344 3.947953075567056e-14
889 | endloop
890 | endfacet
891 | facet normal -0.9238795325112567 0.38268343236516283 5.780642705608934e-14
892 | outer loop
893 | vertex 82.05317249341032 760.512585466332 15.000000000000034
894 | vertex 81.79141740238057 759.8806527755502 -5.921929613350585e-14
895 | vertex 81.79141740238056 759.8806527755479 14.999999999999936
896 | endloop
897 | endfacet
898 | facet normal -0.9914448613738253 0.13052619221993972 1.9012751820378135e-14
899 | outer loop
900 | vertex 82.05317249341033 760.5125854663344 3.947953075567056e-14
901 | vertex 82.14245228040069 761.1907327755479 15.000000000000137
902 | vertex 82.14245228040069 761.1907327755503 1.4099832412739488e-13
903 | endloop
904 | endfacet
905 | facet normal -0.9914448613738253 0.13052619221993972 1.9012751820378135e-14
906 | outer loop
907 | vertex 82.14245228040069 761.1907327755479 15.000000000000137
908 | vertex 82.05317249341033 760.5125854663344 3.947953075567056e-14
909 | vertex 82.05317249341032 760.512585466332 15.000000000000034
910 | endloop
911 | endfacet
912 | facet normal -0.991444861373823 -0.13052619221995587 -2.1076611031774706e-14
913 | outer loop
914 | vertex 82.14245228040069 761.1907327755503 1.4099832412739488e-13
915 | vertex 82.05317249341033 761.8688800847636 15.00000000000024
916 | vertex 82.05317249341034 761.8688800847659 2.4533708398166706e-13
917 | endloop
918 | endfacet
919 | facet normal -0.991444861373823 -0.13052619221995587 -2.1076611031774706e-14
920 | outer loop
921 | vertex 82.05317249341033 761.8688800847636 15.00000000000024
922 | vertex 82.14245228040069 761.1907327755503 1.4099832412739488e-13
923 | vertex 82.14245228040069 761.1907327755479 15.000000000000137
924 | endloop
925 | endfacet
926 | facet normal -0.9238795325113023 -0.3826834323650528 -5.972963767289859e-14
927 | outer loop
928 | vertex 82.05317249341034 761.8688800847659 2.4533708398166706e-13
929 | vertex 81.79141740238057 762.500812775548 15.00000000000034
930 | vertex 81.79141740238059 762.5008127755502 3.440359108708435e-13
931 | endloop
932 | endfacet
933 | facet normal -0.9238795325113023 -0.3826834323650528 -5.972963767289859e-14
934 | outer loop
935 | vertex 81.79141740238057 762.500812775548 15.00000000000034
936 | vertex 82.05317249341034 761.8688800847659 2.4533708398166706e-13
937 | vertex 82.05317249341033 761.8688800847636 15.00000000000024
938 | endloop
939 | endfacet
940 | facet normal -0.7933533402911949 -0.6087614290087733 -9.431218821451206e-14
941 | outer loop
942 | vertex 81.79141740238059 762.5008127755502 3.440359108708435e-13
943 | vertex 81.3750251841945 763.0434656793416 15.000000000000307
944 | vertex 81.37502518419453 763.0434656793439 4.3709480479492413e-13
945 | endloop
946 | endfacet
947 | facet normal -0.7933533402911949 -0.6087614290087733 -9.431218821451206e-14
948 | outer loop
949 | vertex 81.3750251841945 763.0434656793416 15.000000000000307
950 | vertex 81.79141740238059 762.5008127755502 3.440359108708435e-13
951 | vertex 81.79141740238057 762.500812775548 15.00000000000034
952 | endloop
953 | endfacet
954 | facet normal -0.6087614290088055 -0.79335334029117 -1.2246751898753568e-13
955 | outer loop
956 | vertex 81.3750251841945 763.0434656793416 15.000000000000307
957 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
958 | vertex 81.37502518419453 763.0434656793439 4.3709480479492413e-13
959 | endloop
960 | endfacet
961 | facet normal -0.6087614290088055 -0.79335334029117 -1.2246751898753568e-13
962 | outer loop
963 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
964 | vertex 81.3750251841945 763.0434656793416 15.000000000000307
965 | vertex 81.10369873229759 763.2516617884347 15.000000000000474
966 | endloop
967 | endfacet
968 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
969 | outer loop
970 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
971 | vertex 79.8988855819109 763.2516617884361 5.551392404522723
972 | vertex 79.51065701425713 763.2516617884361 5.500281143956328
973 | endloop
974 | endfacet
975 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
976 | outer loop
977 | vertex 79.8988855819109 763.2516617884361 5.551392404522723
978 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
979 | vertex 80.26065701425713 763.2516617884361 5.701243038279664
980 | endloop
981 | endfacet
982 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
983 | outer loop
984 | vertex 80.26065701425713 763.2516617884361 5.701243038279664
985 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
986 | vertex 80.57131718603695 763.2516617884361 5.939620972176502
987 | endloop
988 | endfacet
989 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
990 | outer loop
991 | vertex 80.57131718603695 763.2516617884361 5.939620972176502
992 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
993 | vertex 80.80969511993378 763.2516617884361 6.250281143956327
994 | endloop
995 | endfacet
996 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
997 | outer loop
998 | vertex 80.80969511993378 763.2516617884361 6.250281143956327
999 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
1000 | vertex 80.95954575369073 763.251661788436 6.612052576302537
1001 | endloop
1002 | endfacet
1003 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1004 | outer loop
1005 | vertex 80.95954575369073 763.251661788436 6.612052576302537
1006 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
1007 | vertex 81.01065701425712 763.251661788436 7.0002811439563155
1008 | endloop
1009 | endfacet
1010 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1011 | outer loop
1012 | vertex 81.01065701425712 763.251661788436 7.0002811439563155
1013 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
1014 | vertex 81.10369873229759 763.2516617884347 15.000000000000474
1015 | endloop
1016 | endfacet
1017 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1018 | outer loop
1019 | vertex 81.01065701425712 763.251661788436 7.0002811439563155
1020 | vertex 81.10369873229759 763.2516617884347 15.000000000000474
1021 | vertex 80.95954575369072 763.2516617884359 7.388509711610105
1022 | endloop
1023 | endfacet
1024 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1025 | outer loop
1026 | vertex 80.95954575369072 763.2516617884359 7.388509711610105
1027 | vertex 81.10369873229759 763.2516617884347 15.000000000000474
1028 | vertex 80.80969511993379 763.2516617884359 7.750281143956313
1029 | endloop
1030 | endfacet
1031 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1032 | outer loop
1033 | vertex 80.80969511993379 763.2516617884359 7.750281143956313
1034 | vertex 81.10369873229759 763.2516617884347 15.000000000000474
1035 | vertex 80.57131718603694 763.2516617884357 8.060941315736137
1036 | endloop
1037 | endfacet
1038 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1039 | outer loop
1040 | vertex 80.57131718603694 763.2516617884357 8.060941315736137
1041 | vertex 81.10369873229759 763.2516617884347 15.000000000000474
1042 | vertex 80.26065701425713 763.2516617884357 8.299319249632976
1043 | endloop
1044 | endfacet
1045 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1046 | outer loop
1047 | vertex 80.26065701425713 763.2516617884357 8.299319249632976
1048 | vertex 81.10369873229759 763.2516617884347 15.000000000000474
1049 | vertex 79.8988855819109 763.2516617884356 8.449169883389928
1050 | endloop
1051 | endfacet
1052 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1053 | outer loop
1054 | vertex 79.8988855819109 763.2516617884356 8.449169883389928
1055 | vertex 81.10369873229759 763.2516617884347 15.000000000000474
1056 | vertex 79.51065701425713 763.2516617884356 8.500281143956324
1057 | endloop
1058 | endfacet
1059 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1060 | outer loop
1061 | vertex 79.51065701425713 763.2516617884356 8.500281143956324
1062 | vertex 81.10369873229759 763.2516617884347 15.000000000000474
1063 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
1064 | endloop
1065 | endfacet
1066 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1067 | outer loop
1068 | vertex 77.94088582850385 763.251661788437 4.540146036902115e-13
1069 | vertex 78.01065701425713 763.251661788436 7.000281143956323
1070 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
1071 | endloop
1072 | endfacet
1073 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1074 | outer loop
1075 | vertex 78.01065701425713 763.251661788436 7.000281143956323
1076 | vertex 77.94088582850385 763.251661788437 4.540146036902115e-13
1077 | vertex 78.06176827482352 763.2516617884361 6.612052576302533
1078 | endloop
1079 | endfacet
1080 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1081 | outer loop
1082 | vertex 78.06176827482352 763.2516617884361 6.612052576302533
1083 | vertex 77.94088582850385 763.251661788437 4.540146036902115e-13
1084 | vertex 78.21161890858046 763.2516617884361 6.250281143956314
1085 | endloop
1086 | endfacet
1087 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1088 | outer loop
1089 | vertex 78.21161890858046 763.2516617884361 6.250281143956314
1090 | vertex 77.94088582850385 763.251661788437 4.540146036902115e-13
1091 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
1092 | endloop
1093 | endfacet
1094 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1095 | outer loop
1096 | vertex 78.21161890858046 763.2516617884361 6.250281143956314
1097 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
1098 | vertex 78.4499968424773 763.2516617884361 5.939620972176478
1099 | endloop
1100 | endfacet
1101 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1102 | outer loop
1103 | vertex 78.4499968424773 763.2516617884361 5.939620972176478
1104 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
1105 | vertex 78.76065701425713 763.2516617884361 5.7012430382796735
1106 | endloop
1107 | endfacet
1108 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1109 | outer loop
1110 | vertex 78.76065701425713 763.2516617884361 5.7012430382796735
1111 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
1112 | vertex 79.12242844660335 763.2516617884361 5.551392404522722
1113 | endloop
1114 | endfacet
1115 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1116 | outer loop
1117 | vertex 79.12242844660335 763.2516617884361 5.551392404522722
1118 | vertex 81.10369873229762 763.251661788437 4.68114436102951e-13
1119 | vertex 79.51065701425713 763.2516617884361 5.500281143956328
1120 | endloop
1121 | endfacet
1122 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1123 | outer loop
1124 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
1125 | vertex 78.01065701425713 763.251661788436 7.000281143956323
1126 | vertex 78.06176827482352 763.2516617884359 7.3885097116101015
1127 | endloop
1128 | endfacet
1129 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1130 | outer loop
1131 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
1132 | vertex 78.06176827482352 763.2516617884359 7.3885097116101015
1133 | vertex 78.21161890858046 763.2516617884359 7.750281143956311
1134 | endloop
1135 | endfacet
1136 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1137 | outer loop
1138 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
1139 | vertex 78.21161890858046 763.2516617884359 7.750281143956311
1140 | vertex 78.4499968424773 763.2516617884357 8.060941315736104
1141 | endloop
1142 | endfacet
1143 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1144 | outer loop
1145 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
1146 | vertex 78.4499968424773 763.2516617884357 8.060941315736104
1147 | vertex 78.76065701425713 763.2516617884357 8.299319249632985
1148 | endloop
1149 | endfacet
1150 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1151 | outer loop
1152 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
1153 | vertex 78.76065701425713 763.2516617884357 8.299319249632985
1154 | vertex 79.12242844660335 763.2516617884357 8.449169883389926
1155 | endloop
1156 | endfacet
1157 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
1158 | outer loop
1159 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
1160 | vertex 79.12242844660335 763.2516617884357 8.449169883389926
1161 | vertex 79.51065701425713 763.2516617884356 8.500281143956324
1162 | endloop
1163 | endfacet
1164 | facet normal 0.6087614290089226 -0.7933533402910803 -1.2120027969691684e-13
1165 | outer loop
1166 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
1167 | vertex 77.66955937660703 763.0434656793439 4.2299497238218464e-13
1168 | vertex 77.94088582850385 763.251661788437 4.540146036902115e-13
1169 | endloop
1170 | endfacet
1171 | facet normal 0.6087614290089226 -0.7933533402910803 -1.2120027969691684e-13
1172 | outer loop
1173 | vertex 77.66955937660703 763.0434656793439 4.2299497238218464e-13
1174 | vertex 77.94088582850382 763.2516617884347 15.00000000000045
1175 | vertex 77.66955937660701 763.0434656793417 15.000000000000417
1176 | endloop
1177 | endfacet
1178 | facet normal 0.7933533402911399 -0.6087614290088448 -9.266068981754578e-14
1179 | outer loop
1180 | vertex 77.25316715842087 762.500812775548 15.000000000000334
1181 | vertex 77.66955937660703 763.0434656793439 4.2299497238218464e-13
1182 | vertex 77.66955937660701 763.0434656793417 15.000000000000417
1183 | endloop
1184 | endfacet
1185 | facet normal 0.7933533402911399 -0.6087614290088448 -9.266068981754578e-14
1186 | outer loop
1187 | vertex 77.66955937660703 763.0434656793439 4.2299497238218464e-13
1188 | vertex 77.25316715842087 762.500812775548 15.000000000000334
1189 | vertex 77.25316715842088 762.5008127755502 3.383959779057477e-13
1190 | endloop
1191 | endfacet
1192 | facet normal 0.9238795325113418 -0.3826834323649569 -5.780642705605762e-14
1193 | outer loop
1194 | vertex 76.9914120673912 761.8688800847638 15.000000000000238
1195 | vertex 77.25316715842088 762.5008127755502 3.383959779057477e-13
1196 | vertex 77.25316715842087 762.500812775548 15.000000000000334
1197 | endloop
1198 | endfacet
1199 | facet normal 0.9238795325113418 -0.3826834323649569 -5.780642705605762e-14
1200 | outer loop
1201 | vertex 77.25316715842088 762.5008127755502 3.383959779057477e-13
1202 | vertex 76.9914120673912 761.8688800847638 15.000000000000238
1203 | vertex 76.99141206739121 761.8688800847659 2.425171174991192e-13
1204 | endloop
1205 | endfacet
1206 | facet normal 1.4664709775732266e-15 1.6047995176746534e-13 -1.0
1207 | outer loop
1208 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1209 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1210 | vertex 82.32229228040076 765.3281510756201 13.000000000000822
1211 | endloop
1212 | endfacet
1213 | facet normal 1.4664709775732266e-15 1.6047995176746534e-13 -1.0
1214 | outer loop
1215 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1216 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1217 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1218 | endloop
1219 | endfacet
1220 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1221 | outer loop
1222 | vertex 82.3222922804008 767.9281510756223 1.2210454869432395e-12
1223 | vertex 80.80969511993382 767.9281510756213 6.250281143957069
1224 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1225 | endloop
1226 | endfacet
1227 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1228 | outer loop
1229 | vertex 80.80969511993382 767.9281510756213 6.250281143957069
1230 | vertex 82.3222922804008 767.9281510756223 1.2210454869432395e-12
1231 | vertex 80.95954575369076 767.9281510756211 6.612052576303289
1232 | endloop
1233 | endfacet
1234 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1235 | outer loop
1236 | vertex 80.95954575369076 767.9281510756211 6.612052576303289
1237 | vertex 82.3222922804008 767.9281510756223 1.2210454869432395e-12
1238 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1239 | endloop
1240 | endfacet
1241 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1242 | outer loop
1243 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1244 | vertex 80.80969511993382 767.9281510756213 6.250281143957069
1245 | vertex 80.57131718603698 767.9281510756213 5.939620972177255
1246 | endloop
1247 | endfacet
1248 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1249 | outer loop
1250 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1251 | vertex 80.57131718603698 767.9281510756213 5.939620972177255
1252 | vertex 80.26065701425715 767.9281510756214 5.701243038280415
1253 | endloop
1254 | endfacet
1255 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1256 | outer loop
1257 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1258 | vertex 80.26065701425715 767.9281510756214 5.701243038280415
1259 | vertex 79.89888558191095 767.9281510756214 5.551392404523474
1260 | endloop
1261 | endfacet
1262 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1263 | outer loop
1264 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1265 | vertex 79.89888558191095 767.9281510756214 5.551392404523474
1266 | vertex 79.51065701425716 767.9281510756214 5.500281143957079
1267 | endloop
1268 | endfacet
1269 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1270 | outer loop
1271 | vertex 80.95954575369076 767.9281510756211 6.612052576303289
1272 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1273 | vertex 81.01065701425716 767.9281510756211 7.000281143957067
1274 | endloop
1275 | endfacet
1276 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1277 | outer loop
1278 | vertex 81.01065701425716 767.9281510756211 7.000281143957067
1279 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1280 | vertex 80.95954575369076 767.9281510756211 7.3885097116108565
1281 | endloop
1282 | endfacet
1283 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1284 | outer loop
1285 | vertex 80.95954575369076 767.9281510756211 7.3885097116108565
1286 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1287 | vertex 80.80969511993382 767.928151075621 7.750281143957066
1288 | endloop
1289 | endfacet
1290 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1291 | outer loop
1292 | vertex 80.80969511993382 767.928151075621 7.750281143957066
1293 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1294 | vertex 80.57131718603698 767.928151075621 8.06094131573689
1295 | endloop
1296 | endfacet
1297 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1298 | outer loop
1299 | vertex 80.57131718603698 767.928151075621 8.06094131573689
1300 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1301 | vertex 80.26065701425716 767.9281510756209 8.299319249633728
1302 | endloop
1303 | endfacet
1304 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1305 | outer loop
1306 | vertex 80.26065701425716 767.9281510756209 8.299319249633728
1307 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1308 | vertex 79.89888558191095 767.9281510756209 8.44916988339068
1309 | endloop
1310 | endfacet
1311 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1312 | outer loop
1313 | vertex 79.89888558191095 767.9281510756209 8.44916988339068
1314 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1315 | vertex 79.51065701425716 767.9281510756209 8.500281143957075
1316 | endloop
1317 | endfacet
1318 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1319 | outer loop
1320 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1321 | vertex 78.06176827482356 767.9281510756211 6.612052576303285
1322 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1323 | endloop
1324 | endfacet
1325 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1326 | outer loop
1327 | vertex 78.06176827482356 767.9281510756211 6.612052576303285
1328 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1329 | vertex 78.2116189085805 767.9281510756213 6.250281143957077
1330 | endloop
1331 | endfacet
1332 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1333 | outer loop
1334 | vertex 78.2116189085805 767.9281510756213 6.250281143957077
1335 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1336 | vertex 78.44999684247733 767.9281510756213 5.9396209721772175
1337 | endloop
1338 | endfacet
1339 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1340 | outer loop
1341 | vertex 78.44999684247733 767.9281510756213 5.9396209721772175
1342 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1343 | vertex 78.76065701425715 767.9281510756214 5.701243038280425
1344 | endloop
1345 | endfacet
1346 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1347 | outer loop
1348 | vertex 78.76065701425715 767.9281510756214 5.701243038280425
1349 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1350 | vertex 79.12242844660338 767.9281510756214 5.551392404523474
1351 | endloop
1352 | endfacet
1353 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1354 | outer loop
1355 | vertex 79.12242844660338 767.9281510756214 5.551392404523474
1356 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1357 | vertex 79.51065701425716 767.9281510756214 5.500281143957079
1358 | endloop
1359 | endfacet
1360 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1361 | outer loop
1362 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1363 | vertex 78.06176827482356 767.9281510756211 6.612052576303285
1364 | vertex 78.01065701425716 767.9281510756211 7.000281143957076
1365 | endloop
1366 | endfacet
1367 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1368 | outer loop
1369 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1370 | vertex 78.01065701425716 767.9281510756211 7.000281143957076
1371 | vertex 78.06176827482356 767.9281510756211 7.388509711610854
1372 | endloop
1373 | endfacet
1374 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1375 | outer loop
1376 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1377 | vertex 78.06176827482356 767.9281510756211 7.388509711610854
1378 | vertex 78.2116189085805 767.928151075621 7.750281143957074
1379 | endloop
1380 | endfacet
1381 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1382 | outer loop
1383 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1384 | vertex 78.2116189085805 767.928151075621 7.750281143957074
1385 | vertex 78.44999684247733 767.928151075621 8.060941315736866
1386 | endloop
1387 | endfacet
1388 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1389 | outer loop
1390 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1391 | vertex 78.44999684247733 767.928151075621 8.060941315736866
1392 | vertex 78.76065701425715 767.9281510756209 8.299319249633736
1393 | endloop
1394 | endfacet
1395 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1396 | outer loop
1397 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1398 | vertex 78.76065701425715 767.9281510756209 8.299319249633736
1399 | vertex 79.12242844660338 767.9281510756209 8.44916988339068
1400 | endloop
1401 | endfacet
1402 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1403 | outer loop
1404 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1405 | vertex 79.12242844660338 767.9281510756209 8.44916988339068
1406 | vertex 79.51065701425716 767.9281510756209 8.500281143957075
1407 | endloop
1408 | endfacet
1409 | facet normal -9.079617401591787e-15 -1.0 -1.6050972516924187e-13
1410 | outer loop
1411 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1412 | vertex 79.51065701425716 767.9281510756209 8.500281143957075
1413 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1414 | endloop
1415 | endfacet
1416 | facet normal -1.0 9.079617401591996e-15 -1.4664709775717695e-15
1417 | outer loop
1418 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1419 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1420 | vertex 82.3222922804008 767.9281510756223 1.2210454869432395e-12
1421 | endloop
1422 | endfacet
1423 | facet normal -1.0 9.079617401591996e-15 -1.4664709775717695e-15
1424 | outer loop
1425 | vertex 82.32229228040079 767.9281510756202 13.000000000001222
1426 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1427 | vertex 82.32229228040076 765.3281510756201 13.000000000000822
1428 | endloop
1429 | endfacet
1430 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1431 | outer loop
1432 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
1433 | vertex 78.21161890858049 765.3281510756213 6.250281143956633
1434 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1435 | endloop
1436 | endfacet
1437 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1438 | outer loop
1439 | vertex 78.21161890858049 765.3281510756213 6.250281143956633
1440 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
1441 | vertex 78.06176827482355 765.3281510756212 6.612052576302853
1442 | endloop
1443 | endfacet
1444 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1445 | outer loop
1446 | vertex 78.06176827482355 765.3281510756212 6.612052576302853
1447 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
1448 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1449 | endloop
1450 | endfacet
1451 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1452 | outer loop
1453 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1454 | vertex 78.21161890858049 765.3281510756213 6.250281143956633
1455 | vertex 78.44999684247733 765.3281510756213 5.9396209721767965
1456 | endloop
1457 | endfacet
1458 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1459 | outer loop
1460 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1461 | vertex 78.44999684247733 765.3281510756213 5.9396209721767965
1462 | vertex 78.76065701425715 765.3281510756215 5.701243038279992
1463 | endloop
1464 | endfacet
1465 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1466 | outer loop
1467 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1468 | vertex 78.76065701425715 765.3281510756215 5.701243038279992
1469 | vertex 79.12242844660337 765.3281510756215 5.55139240452304
1470 | endloop
1471 | endfacet
1472 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1473 | outer loop
1474 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1475 | vertex 79.12242844660337 765.3281510756215 5.55139240452304
1476 | vertex 79.51065701425715 765.3281510756215 5.500281143956647
1477 | endloop
1478 | endfacet
1479 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1480 | outer loop
1481 | vertex 78.06176827482355 765.3281510756212 6.612052576302853
1482 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1483 | vertex 78.01065701425715 765.3281510756212 7.000281143956642
1484 | endloop
1485 | endfacet
1486 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1487 | outer loop
1488 | vertex 78.01065701425715 765.3281510756212 7.000281143956642
1489 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1490 | vertex 78.06176827482355 765.3281510756211 7.388509711610421
1491 | endloop
1492 | endfacet
1493 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1494 | outer loop
1495 | vertex 78.06176827482355 765.3281510756211 7.388509711610421
1496 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1497 | vertex 78.21161890858049 765.328151075621 7.75028114395663
1498 | endloop
1499 | endfacet
1500 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1501 | outer loop
1502 | vertex 78.21161890858049 765.328151075621 7.75028114395663
1503 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1504 | vertex 78.44999684247733 765.328151075621 8.060941315736422
1505 | endloop
1506 | endfacet
1507 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1508 | outer loop
1509 | vertex 78.44999684247733 765.328151075621 8.060941315736422
1510 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1511 | vertex 78.76065701425715 765.328151075621 8.299319249633305
1512 | endloop
1513 | endfacet
1514 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1515 | outer loop
1516 | vertex 78.76065701425715 765.328151075621 8.299319249633305
1517 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1518 | vertex 79.12242844660337 765.328151075621 8.449169883390246
1519 | endloop
1520 | endfacet
1521 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1522 | outer loop
1523 | vertex 79.12242844660337 765.328151075621 8.449169883390246
1524 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1525 | vertex 79.51065701425713 765.328151075621 8.500281143956641
1526 | endloop
1527 | endfacet
1528 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1529 | outer loop
1530 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1531 | vertex 80.95954575369075 765.3281510756212 6.6120525763028555
1532 | vertex 82.32229228040076 765.3281510756201 13.000000000000822
1533 | endloop
1534 | endfacet
1535 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1536 | outer loop
1537 | vertex 80.95954575369075 765.3281510756212 6.6120525763028555
1538 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1539 | vertex 80.8096951199338 765.3281510756213 6.250281143956647
1540 | endloop
1541 | endfacet
1542 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1543 | outer loop
1544 | vertex 80.8096951199338 765.3281510756213 6.250281143956647
1545 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1546 | vertex 80.57131718603696 765.3281510756213 5.9396209721768205
1547 | endloop
1548 | endfacet
1549 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1550 | outer loop
1551 | vertex 80.57131718603696 765.3281510756213 5.9396209721768205
1552 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1553 | vertex 80.26065701425713 765.3281510756215 5.701243038279983
1554 | endloop
1555 | endfacet
1556 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1557 | outer loop
1558 | vertex 80.26065701425713 765.3281510756215 5.701243038279983
1559 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1560 | vertex 79.89888558191093 765.3281510756215 5.551392404523042
1561 | endloop
1562 | endfacet
1563 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1564 | outer loop
1565 | vertex 79.89888558191093 765.3281510756215 5.551392404523042
1566 | vertex 82.32229228040079 765.3281510756223 8.121503469737945e-13
1567 | vertex 79.51065701425715 765.3281510756215 5.500281143956647
1568 | endloop
1569 | endfacet
1570 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1571 | outer loop
1572 | vertex 82.32229228040076 765.3281510756201 13.000000000000822
1573 | vertex 80.95954575369075 765.3281510756212 6.6120525763028555
1574 | vertex 81.01065701425715 765.3281510756211 7.000281143956634
1575 | endloop
1576 | endfacet
1577 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1578 | outer loop
1579 | vertex 82.32229228040076 765.3281510756201 13.000000000000822
1580 | vertex 81.01065701425715 765.3281510756211 7.000281143956634
1581 | vertex 80.95954575369075 765.3281510756211 7.388509711610424
1582 | endloop
1583 | endfacet
1584 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1585 | outer loop
1586 | vertex 82.32229228040076 765.3281510756201 13.000000000000822
1587 | vertex 80.95954575369075 765.3281510756211 7.388509711610424
1588 | vertex 80.80969511993382 765.328151075621 7.750281143956633
1589 | endloop
1590 | endfacet
1591 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1592 | outer loop
1593 | vertex 82.32229228040076 765.3281510756201 13.000000000000822
1594 | vertex 80.80969511993382 765.328151075621 7.750281143956633
1595 | vertex 80.57131718603696 765.328151075621 8.060941315736457
1596 | endloop
1597 | endfacet
1598 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1599 | outer loop
1600 | vertex 82.32229228040076 765.3281510756201 13.000000000000822
1601 | vertex 80.57131718603696 765.328151075621 8.060941315736457
1602 | vertex 80.26065701425713 765.328151075621 8.299319249633294
1603 | endloop
1604 | endfacet
1605 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1606 | outer loop
1607 | vertex 82.32229228040076 765.3281510756201 13.000000000000822
1608 | vertex 80.26065701425713 765.328151075621 8.299319249633294
1609 | vertex 79.89888558191093 765.328151075621 8.449169883390246
1610 | endloop
1611 | endfacet
1612 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1613 | outer loop
1614 | vertex 82.32229228040076 765.3281510756201 13.000000000000822
1615 | vertex 79.89888558191093 765.328151075621 8.449169883390246
1616 | vertex 79.51065701425713 765.328151075621 8.500281143956641
1617 | endloop
1618 | endfacet
1619 | facet normal 9.079617401591762e-15 1.0 1.6050972516924185e-13
1620 | outer loop
1621 | vertex 82.32229228040076 765.3281510756201 13.000000000000822
1622 | vertex 79.51065701425713 765.328151075621 8.500281143956641
1623 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1624 | endloop
1625 | endfacet
1626 | facet normal 1.0 -9.07961740159198e-15 1.4664709775717695e-15
1627 | outer loop
1628 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1629 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
1630 | vertex 76.72229228040081 767.9281510756224 1.2154055539781438e-12
1631 | endloop
1632 | endfacet
1633 | facet normal 1.0 -9.07961740159198e-15 1.4664709775717695e-15
1634 | outer loop
1635 | vertex 76.72229228040077 765.3281510756224 7.95230548078507e-13
1636 | vertex 76.72229228040078 767.9281510756202 13.000000000001215
1637 | vertex 76.72229228040077 765.3281510756202 13.000000000000794
1638 | endloop
1639 | endfacet
1640 | facet normal 0.1305261922200489 1.510693434942619e-13 -0.9914448613738108
1641 | outer loop
1642 | vertex 79.12242844660338 767.9281510756209 8.44916988339068
1643 | vertex 79.51065701425718 769.8509868133934 8.500281143957368
1644 | vertex 79.51065701425716 767.9281510756209 8.500281143957075
1645 | endloop
1646 | endfacet
1647 | facet normal 0.1305261922200489 1.510693434942619e-13 -0.9914448613738108
1648 | outer loop
1649 | vertex 79.51065701425718 769.8509868133934 8.500281143957368
1650 | vertex 79.12242844660338 767.9281510756209 8.44916988339068
1651 | vertex 79.1224284466034 769.8509868133935 8.449169883390974
1652 | endloop
1653 | endfacet
1654 | facet normal -0.13052619222004075 1.5343959926675134e-13 -0.9914448613738119
1655 | outer loop
1656 | vertex 79.51065701425716 767.9281510756209 8.500281143957075
1657 | vertex 79.89888558191096 769.8509868133934 8.449169883390976
1658 | vertex 79.89888558191095 767.9281510756209 8.44916988339068
1659 | endloop
1660 | endfacet
1661 | facet normal -0.13052619222004075 1.5343959926675134e-13 -0.9914448613738119
1662 | outer loop
1663 | vertex 79.89888558191096 769.8509868133934 8.449169883390976
1664 | vertex 79.51065701425716 767.9281510756209 8.500281143957075
1665 | vertex 79.51065701425718 769.8509868133934 8.500281143957368
1666 | endloop
1667 | endfacet
1668 | facet normal -0.38268343236510355 1.4535319992013778e-13 -0.923879532511281
1669 | outer loop
1670 | vertex 79.89888558191095 767.9281510756209 8.44916988339068
1671 | vertex 80.26065701425718 769.8509868133935 8.299319249634022
1672 | vertex 80.26065701425716 767.9281510756209 8.299319249633728
1673 | endloop
1674 | endfacet
1675 | facet normal -0.38268343236510355 1.4535319992013778e-13 -0.923879532511281
1676 | outer loop
1677 | vertex 80.26065701425718 769.8509868133935 8.299319249634022
1678 | vertex 79.89888558191095 767.9281510756209 8.44916988339068
1679 | vertex 79.89888558191096 769.8509868133934 8.449169883390976
1680 | endloop
1681 | endfacet
1682 | facet normal -0.6087614290087222 1.2736122020648853e-13 -0.793353340291234
1683 | outer loop
1684 | vertex 80.26065701425716 767.9281510756209 8.299319249633728
1685 | vertex 80.57131718603699 769.8509868133935 8.060941315737185
1686 | vertex 80.57131718603698 767.928151075621 8.06094131573689
1687 | endloop
1688 | endfacet
1689 | facet normal -0.6087614290087222 1.2736122020648853e-13 -0.793353340291234
1690 | outer loop
1691 | vertex 80.57131718603699 769.8509868133935 8.060941315737185
1692 | vertex 80.26065701425716 767.9281510756209 8.299319249633728
1693 | vertex 80.26065701425718 769.8509868133935 8.299319249634022
1694 | endloop
1695 | endfacet
1696 | facet normal -0.7933533402912368 1.0068978381013434e-13 -0.6087614290087188
1697 | outer loop
1698 | vertex 80.80969511993382 767.928151075621 7.750281143957066
1699 | vertex 80.57131718603699 769.8509868133935 8.060941315737185
1700 | vertex 80.80969511993385 769.8509868133935 7.75028114395736
1701 | endloop
1702 | endfacet
1703 | facet normal -0.7933533402912368 1.0068978381013434e-13 -0.6087614290087188
1704 | outer loop
1705 | vertex 80.57131718603699 769.8509868133935 8.060941315737185
1706 | vertex 80.80969511993382 767.928151075621 7.750281143957066
1707 | vertex 80.57131718603698 767.928151075621 8.06094131573689
1708 | endloop
1709 | endfacet
1710 | facet normal -0.9238795325112831 6.715650504485645e-14 -0.3826834323650985
1711 | outer loop
1712 | vertex 80.95954575369076 767.9281510756211 7.3885097116108565
1713 | vertex 80.80969511993385 769.8509868133935 7.75028114395736
1714 | vertex 80.95954575369078 769.8509868133935 7.388509711611151
1715 | endloop
1716 | endfacet
1717 | facet normal -0.9238795325112831 6.715650504485645e-14 -0.3826834323650985
1718 | outer loop
1719 | vertex 80.80969511993385 769.8509868133935 7.75028114395736
1720 | vertex 80.95954575369076 767.9281510756211 7.3885097116108565
1721 | vertex 80.80969511993382 767.928151075621 7.750281143957066
1722 | endloop
1723 | endfacet
1724 | facet normal -0.991444861373811 2.904662144214e-14 -0.13052619222004655
1725 | outer loop
1726 | vertex 81.01065701425716 767.9281510756211 7.000281143957067
1727 | vertex 80.95954575369078 769.8509868133935 7.388509711611151
1728 | vertex 81.01065701425718 769.8509868133937 7.000281143957362
1729 | endloop
1730 | endfacet
1731 | facet normal -0.991444861373811 2.904662144214e-14 -0.13052619222004655
1732 | outer loop
1733 | vertex 80.95954575369078 769.8509868133935 7.388509711611151
1734 | vertex 81.01065701425716 767.9281510756211 7.000281143957067
1735 | vertex 80.95954575369076 767.9281510756211 7.3885097116108565
1736 | endloop
1737 | endfacet
1738 | facet normal -0.9914448613738106 -1.1042741410043931e-14 0.13052619222005143
1739 | outer loop
1740 | vertex 80.95954575369076 767.9281510756211 6.612052576303289
1741 | vertex 81.01065701425718 769.8509868133937 7.000281143957362
1742 | vertex 80.95954575369078 769.8509868133937 6.612052576303583
1743 | endloop
1744 | endfacet
1745 | facet normal -0.9914448613738106 -1.1042741410043931e-14 0.13052619222005143
1746 | outer loop
1747 | vertex 81.01065701425718 769.8509868133937 7.000281143957362
1748 | vertex 80.95954575369076 767.9281510756211 6.612052576303289
1749 | vertex 81.01065701425716 767.9281510756211 7.000281143957067
1750 | endloop
1751 | endfacet
1752 | facet normal -0.9238795325112873 -5.0379559684127036e-14 0.38268343236508867
1753 | outer loop
1754 | vertex 80.80969511993382 767.9281510756213 6.250281143957069
1755 | vertex 80.95954575369078 769.8509868133937 6.612052576303583
1756 | vertex 80.80969511993383 769.8509868133938 6.250281143957363
1757 | endloop
1758 | endfacet
1759 | facet normal -0.9238795325112873 -5.0379559684127036e-14 0.38268343236508867
1760 | outer loop
1761 | vertex 80.95954575369078 769.8509868133937 6.612052576303583
1762 | vertex 80.80969511993382 767.9281510756213 6.250281143957069
1763 | vertex 80.95954575369076 767.9281510756211 6.612052576303289
1764 | endloop
1765 | endfacet
1766 | facet normal -0.7933533402912336 -8.628309422189641e-14 0.6087614290087229
1767 | outer loop
1768 | vertex 80.57131718603698 767.9281510756213 5.939620972177255
1769 | vertex 80.80969511993383 769.8509868133938 6.250281143957363
1770 | vertex 80.57131718603699 769.8509868133939 5.939620972177549
1771 | endloop
1772 | endfacet
1773 | facet normal -0.7933533402912336 -8.628309422189641e-14 0.6087614290087229
1774 | outer loop
1775 | vertex 80.80969511993383 769.8509868133938 6.250281143957363
1776 | vertex 80.57131718603698 767.9281510756213 5.939620972177255
1777 | vertex 80.80969511993382 767.9281510756213 6.250281143957069
1778 | endloop
1779 | endfacet
1780 | facet normal -0.6087614290087212 -1.1630657847799772e-13 0.7933533402912349
1781 | outer loop
1782 | vertex 80.26065701425718 769.8509868133939 5.701243038280712
1783 | vertex 80.57131718603698 767.9281510756213 5.939620972177255
1784 | vertex 80.57131718603699 769.8509868133939 5.939620972177549
1785 | endloop
1786 | endfacet
1787 | facet normal -0.6087614290087212 -1.1630657847799772e-13 0.7933533402912349
1788 | outer loop
1789 | vertex 80.57131718603698 767.9281510756213 5.939620972177255
1790 | vertex 80.26065701425718 769.8509868133939 5.701243038280712
1791 | vertex 80.26065701425715 767.9281510756214 5.701243038280415
1792 | endloop
1793 | endfacet
1794 | facet normal -0.38268343236508784 -1.384039616165328e-13 0.9238795325112876
1795 | outer loop
1796 | vertex 79.89888558191096 769.8509868133939 5.551392404523771
1797 | vertex 80.26065701425715 767.9281510756214 5.701243038280415
1798 | vertex 80.26065701425718 769.8509868133939 5.701243038280712
1799 | endloop
1800 | endfacet
1801 | facet normal -0.38268343236508784 -1.384039616165328e-13 0.9238795325112876
1802 | outer loop
1803 | vertex 80.26065701425715 767.9281510756214 5.701243038280415
1804 | vertex 79.89888558191096 769.8509868133939 5.551392404523771
1805 | vertex 79.89888558191095 767.9281510756214 5.551392404523474
1806 | endloop
1807 | endfacet
1808 | facet normal -0.13052619222005027 -1.5106934349426185e-13 0.9914448613738106
1809 | outer loop
1810 | vertex 79.51065701425718 769.8509868133939 5.500281143957374
1811 | vertex 79.89888558191095 767.9281510756214 5.551392404523474
1812 | vertex 79.89888558191096 769.8509868133939 5.551392404523771
1813 | endloop
1814 | endfacet
1815 | facet normal -0.13052619222005027 -1.5106934349426185e-13 0.9914448613738106
1816 | outer loop
1817 | vertex 79.89888558191095 767.9281510756214 5.551392404523474
1818 | vertex 79.51065701425718 769.8509868133939 5.500281143957374
1819 | vertex 79.51065701425716 767.9281510756214 5.500281143957079
1820 | endloop
1821 | endfacet
1822 | facet normal 0.13052619222003983 -1.5343959926675134e-13 0.9914448613738119
1823 | outer loop
1824 | vertex 79.1224284466034 769.8509868133939 5.551392404523769
1825 | vertex 79.51065701425716 767.9281510756214 5.500281143957079
1826 | vertex 79.51065701425718 769.8509868133939 5.500281143957374
1827 | endloop
1828 | endfacet
1829 | facet normal 0.13052619222003983 -1.5343959926675134e-13 0.9914448613738119
1830 | outer loop
1831 | vertex 79.51065701425716 767.9281510756214 5.500281143957079
1832 | vertex 79.1224284466034 769.8509868133939 5.551392404523769
1833 | vertex 79.12242844660338 767.9281510756214 5.551392404523474
1834 | endloop
1835 | endfacet
1836 | facet normal 0.382683432365101 -1.4535319992013793e-13 0.9238795325112822
1837 | outer loop
1838 | vertex 78.76065701425718 769.8509868133939 5.7012430382807215
1839 | vertex 79.12242844660338 767.9281510756214 5.551392404523474
1840 | vertex 79.1224284466034 769.8509868133939 5.551392404523769
1841 | endloop
1842 | endfacet
1843 | facet normal 0.382683432365101 -1.4535319992013793e-13 0.9238795325112822
1844 | outer loop
1845 | vertex 79.12242844660338 767.9281510756214 5.551392404523474
1846 | vertex 78.76065701425718 769.8509868133939 5.7012430382807215
1847 | vertex 78.76065701425715 767.9281510756214 5.701243038280425
1848 | endloop
1849 | endfacet
1850 | facet normal 0.6087614290086876 -1.273612202064923e-13 0.7933533402912606
1851 | outer loop
1852 | vertex 78.44999684247735 769.8509868133939 5.939620972177512
1853 | vertex 78.76065701425715 767.9281510756214 5.701243038280425
1854 | vertex 78.76065701425718 769.8509868133939 5.7012430382807215
1855 | endloop
1856 | endfacet
1857 | facet normal 0.6087614290086876 -1.273612202064923e-13 0.7933533402912606
1858 | outer loop
1859 | vertex 78.76065701425715 767.9281510756214 5.701243038280425
1860 | vertex 78.44999684247735 769.8509868133939 5.939620972177512
1861 | vertex 78.44999684247733 767.9281510756213 5.9396209721772175
1862 | endloop
1863 | endfacet
1864 | facet normal 0.7933533402912597 -1.0068978381012993e-13 0.6087614290086887
1865 | outer loop
1866 | vertex 78.2116189085805 767.9281510756213 6.250281143957077
1867 | vertex 78.44999684247735 769.8509868133939 5.939620972177512
1868 | vertex 78.21161890858052 769.8509868133938 6.2502811439573716
1869 | endloop
1870 | endfacet
1871 | facet normal 0.7933533402912597 -1.0068978381012993e-13 0.6087614290086887
1872 | outer loop
1873 | vertex 78.44999684247735 769.8509868133939 5.939620972177512
1874 | vertex 78.2116189085805 767.9281510756213 6.250281143957077
1875 | vertex 78.44999684247733 767.9281510756213 5.9396209721772175
1876 | endloop
1877 | endfacet
1878 | facet normal 0.923879532511282 -6.715650504485691e-14 0.3826834323651016
1879 | outer loop
1880 | vertex 78.06176827482356 767.9281510756211 6.612052576303285
1881 | vertex 78.21161890858052 769.8509868133938 6.2502811439573716
1882 | vertex 78.06176827482358 769.8509868133938 6.61205257630358
1883 | endloop
1884 | endfacet
1885 | facet normal 0.923879532511282 -6.715650504485691e-14 0.3826834323651016
1886 | outer loop
1887 | vertex 78.21161890858052 769.8509868133938 6.2502811439573716
1888 | vertex 78.06176827482356 767.9281510756211 6.612052576303285
1889 | vertex 78.2116189085805 767.9281510756213 6.250281143957077
1890 | endloop
1891 | endfacet
1892 | facet normal 0.991444861373811 -2.904662144214e-14 0.13052619222004655
1893 | outer loop
1894 | vertex 78.01065701425716 767.9281510756211 7.000281143957076
1895 | vertex 78.06176827482358 769.8509868133938 6.61205257630358
1896 | vertex 78.01065701425718 769.8509868133937 7.00028114395737
1897 | endloop
1898 | endfacet
1899 | facet normal 0.991444861373811 -2.904662144214e-14 0.13052619222004655
1900 | outer loop
1901 | vertex 78.06176827482358 769.8509868133938 6.61205257630358
1902 | vertex 78.01065701425716 767.9281510756211 7.000281143957076
1903 | vertex 78.06176827482356 767.9281510756211 6.612052576303285
1904 | endloop
1905 | endfacet
1906 | facet normal 0.9914448613738102 1.1042741410044479e-14 -0.13052619222005496
1907 | outer loop
1908 | vertex 78.06176827482356 767.9281510756211 7.388509711610854
1909 | vertex 78.01065701425718 769.8509868133937 7.00028114395737
1910 | vertex 78.06176827482358 769.8509868133935 7.388509711611149
1911 | endloop
1912 | endfacet
1913 | facet normal 0.9914448613738102 1.1042741410044479e-14 -0.13052619222005496
1914 | outer loop
1915 | vertex 78.01065701425718 769.8509868133937 7.00028114395737
1916 | vertex 78.06176827482356 767.9281510756211 7.388509711610854
1917 | vertex 78.01065701425716 767.9281510756211 7.000281143957076
1918 | endloop
1919 | endfacet
1920 | facet normal 0.9238795325112873 5.037955968412705e-14 -0.3826834323650887
1921 | outer loop
1922 | vertex 78.2116189085805 767.928151075621 7.750281143957074
1923 | vertex 78.06176827482358 769.8509868133935 7.388509711611149
1924 | vertex 78.21161890858052 769.8509868133935 7.750281143957369
1925 | endloop
1926 | endfacet
1927 | facet normal 0.9238795325112873 5.037955968412705e-14 -0.3826834323650887
1928 | outer loop
1929 | vertex 78.06176827482358 769.8509868133935 7.388509711611149
1930 | vertex 78.2116189085805 767.928151075621 7.750281143957074
1931 | vertex 78.06176827482356 767.9281510756211 7.388509711610854
1932 | endloop
1933 | endfacet
1934 | facet normal 0.7933533402912228 8.628309422189863e-14 -0.6087614290087368
1935 | outer loop
1936 | vertex 78.44999684247733 767.928151075621 8.060941315736866
1937 | vertex 78.21161890858052 769.8509868133935 7.750281143957369
1938 | vertex 78.44999684247735 769.8509868133935 8.06094131573716
1939 | endloop
1940 | endfacet
1941 | facet normal 0.7933533402912228 8.628309422189863e-14 -0.6087614290087368
1942 | outer loop
1943 | vertex 78.21161890858052 769.8509868133935 7.750281143957369
1944 | vertex 78.44999684247733 767.928151075621 8.060941315736866
1945 | vertex 78.2116189085805 767.928151075621 7.750281143957074
1946 | endloop
1947 | endfacet
1948 | facet normal 0.6087614290087445 1.1630657847799476e-13 -0.7933533402912171
1949 | outer loop
1950 | vertex 78.44999684247733 767.928151075621 8.060941315736866
1951 | vertex 78.76065701425718 769.8509868133935 8.299319249634033
1952 | vertex 78.76065701425715 767.9281510756209 8.299319249633736
1953 | endloop
1954 | endfacet
1955 | facet normal 0.6087614290087445 1.1630657847799476e-13 -0.7933533402912171
1956 | outer loop
1957 | vertex 78.76065701425718 769.8509868133935 8.299319249634033
1958 | vertex 78.44999684247733 767.928151075621 8.060941315736866
1959 | vertex 78.44999684247735 769.8509868133935 8.06094131573716
1960 | endloop
1961 | endfacet
1962 | facet normal 0.3826834323650853 1.3840396161653297e-13 -0.9238795325112886
1963 | outer loop
1964 | vertex 78.76065701425715 767.9281510756209 8.299319249633736
1965 | vertex 79.1224284466034 769.8509868133935 8.449169883390974
1966 | vertex 79.12242844660338 767.9281510756209 8.44916988339068
1967 | endloop
1968 | endfacet
1969 | facet normal 0.3826834323650853 1.3840396161653297e-13 -0.9238795325112886
1970 | outer loop
1971 | vertex 79.1224284466034 769.8509868133935 8.449169883390974
1972 | vertex 78.76065701425715 767.9281510756209 8.299319249633736
1973 | vertex 78.76065701425718 769.8509868133935 8.299319249634033
1974 | endloop
1975 | endfacet
1976 | facet normal -0.13052619222004935 -1.510693434942619e-13 0.9914448613738108
1977 | outer loop
1978 | vertex 79.51065701425715 765.3281510756215 5.500281143956647
1979 | vertex 79.8988855819109 763.2516617884361 5.551392404522723
1980 | vertex 79.89888558191093 765.3281510756215 5.551392404523042
1981 | endloop
1982 | endfacet
1983 | facet normal -0.13052619222004935 -1.510693434942619e-13 0.9914448613738108
1984 | outer loop
1985 | vertex 79.8988855819109 763.2516617884361 5.551392404522723
1986 | vertex 79.51065701425715 765.3281510756215 5.500281143956647
1987 | vertex 79.51065701425713 763.2516617884361 5.500281143956328
1988 | endloop
1989 | endfacet
1990 | facet normal 0.13052619222003983 -1.5343959926675134e-13 0.9914448613738119
1991 | outer loop
1992 | vertex 79.12242844660337 765.3281510756215 5.55139240452304
1993 | vertex 79.51065701425713 763.2516617884361 5.500281143956328
1994 | vertex 79.51065701425715 765.3281510756215 5.500281143956647
1995 | endloop
1996 | endfacet
1997 | facet normal 0.13052619222003983 -1.5343959926675134e-13 0.9914448613738119
1998 | outer loop
1999 | vertex 79.51065701425713 763.2516617884361 5.500281143956328
2000 | vertex 79.12242844660337 765.3281510756215 5.55139240452304
2001 | vertex 79.12242844660335 763.2516617884361 5.551392404522722
2002 | endloop
2003 | endfacet
2004 | facet normal 0.38268343236510227 -1.4535319992013785e-13 0.9238795325112816
2005 | outer loop
2006 | vertex 78.76065701425715 765.3281510756215 5.701243038279992
2007 | vertex 79.12242844660335 763.2516617884361 5.551392404522722
2008 | vertex 79.12242844660337 765.3281510756215 5.55139240452304
2009 | endloop
2010 | endfacet
2011 | facet normal 0.38268343236510227 -1.4535319992013785e-13 0.9238795325112816
2012 | outer loop
2013 | vertex 79.12242844660335 763.2516617884361 5.551392404522722
2014 | vertex 78.76065701425715 765.3281510756215 5.701243038279992
2015 | vertex 78.76065701425713 763.2516617884361 5.7012430382796735
2016 | endloop
2017 | endfacet
2018 | facet normal 0.608761429008704 -1.2736122020649052e-13 0.793353340291248
2019 | outer loop
2020 | vertex 78.44999684247733 765.3281510756213 5.9396209721767965
2021 | vertex 78.76065701425713 763.2516617884361 5.7012430382796735
2022 | vertex 78.76065701425715 765.3281510756215 5.701243038279992
2023 | endloop
2024 | endfacet
2025 | facet normal 0.608761429008704 -1.2736122020649052e-13 0.793353340291248
2026 | outer loop
2027 | vertex 78.76065701425713 763.2516617884361 5.7012430382796735
2028 | vertex 78.44999684247733 765.3281510756213 5.9396209721767965
2029 | vertex 78.4499968424773 763.2516617884361 5.939620972176478
2030 | endloop
2031 | endfacet
2032 | facet normal 0.7933533402912385 -1.0068978381013402e-13 0.6087614290087165
2033 | outer loop
2034 | vertex 78.21161890858046 763.2516617884361 6.250281143956314
2035 | vertex 78.44999684247733 765.3281510756213 5.9396209721767965
2036 | vertex 78.21161890858049 765.3281510756213 6.250281143956633
2037 | endloop
2038 | endfacet
2039 | facet normal 0.7933533402912385 -1.0068978381013402e-13 0.6087614290087165
2040 | outer loop
2041 | vertex 78.44999684247733 765.3281510756213 5.9396209721767965
2042 | vertex 78.21161890858046 763.2516617884361 6.250281143956314
2043 | vertex 78.4499968424773 763.2516617884361 5.939620972176478
2044 | endloop
2045 | endfacet
2046 | facet normal 0.9238795325112862 -6.715650504485541e-14 0.3826834323650915
2047 | outer loop
2048 | vertex 78.06176827482352 763.2516617884361 6.612052576302533
2049 | vertex 78.21161890858049 765.3281510756213 6.250281143956633
2050 | vertex 78.06176827482355 765.3281510756212 6.612052576302853
2051 | endloop
2052 | endfacet
2053 | facet normal 0.9238795325112862 -6.715650504485541e-14 0.3826834323650915
2054 | outer loop
2055 | vertex 78.21161890858049 765.3281510756213 6.250281143956633
2056 | vertex 78.06176827482352 763.2516617884361 6.612052576302533
2057 | vertex 78.21161890858046 763.2516617884361 6.250281143956314
2058 | endloop
2059 | endfacet
2060 | facet normal 0.991444861373811 -2.9046621442140005e-14 0.13052619222004658
2061 | outer loop
2062 | vertex 78.01065701425713 763.251661788436 7.000281143956323
2063 | vertex 78.06176827482355 765.3281510756212 6.612052576302853
2064 | vertex 78.01065701425715 765.3281510756212 7.000281143956642
2065 | endloop
2066 | endfacet
2067 | facet normal 0.991444861373811 -2.9046621442140005e-14 0.13052619222004658
2068 | outer loop
2069 | vertex 78.06176827482355 765.3281510756212 6.612052576302853
2070 | vertex 78.01065701425713 763.251661788436 7.000281143956323
2071 | vertex 78.06176827482352 763.2516617884361 6.612052576302533
2072 | endloop
2073 | endfacet
2074 | facet normal 0.9914448613738102 1.1042741410044479e-14 -0.13052619222005496
2075 | outer loop
2076 | vertex 78.06176827482352 763.2516617884359 7.3885097116101015
2077 | vertex 78.01065701425715 765.3281510756212 7.000281143956642
2078 | vertex 78.06176827482355 765.3281510756211 7.388509711610421
2079 | endloop
2080 | endfacet
2081 | facet normal 0.9914448613738102 1.1042741410044479e-14 -0.13052619222005496
2082 | outer loop
2083 | vertex 78.01065701425715 765.3281510756212 7.000281143956642
2084 | vertex 78.06176827482352 763.2516617884359 7.3885097116101015
2085 | vertex 78.01065701425713 763.251661788436 7.000281143956323
2086 | endloop
2087 | endfacet
2088 | facet normal 0.9238795325112855 5.0379559684127667e-14 -0.38268343236509267
2089 | outer loop
2090 | vertex 78.21161890858046 763.2516617884359 7.750281143956311
2091 | vertex 78.06176827482355 765.3281510756211 7.388509711610421
2092 | vertex 78.21161890858049 765.328151075621 7.75028114395663
2093 | endloop
2094 | endfacet
2095 | facet normal 0.9238795325112855 5.0379559684127667e-14 -0.38268343236509267
2096 | outer loop
2097 | vertex 78.06176827482355 765.3281510756211 7.388509711610421
2098 | vertex 78.21161890858046 763.2516617884359 7.750281143956311
2099 | vertex 78.06176827482352 763.2516617884359 7.3885097116101015
2100 | endloop
2101 | endfacet
2102 | facet normal 0.7933533402912211 8.628309422189901e-14 -0.6087614290087391
2103 | outer loop
2104 | vertex 78.4499968424773 763.2516617884357 8.060941315736104
2105 | vertex 78.21161890858049 765.328151075621 7.75028114395663
2106 | vertex 78.44999684247733 765.328151075621 8.060941315736422
2107 | endloop
2108 | endfacet
2109 | facet normal 0.7933533402912211 8.628309422189901e-14 -0.6087614290087391
2110 | outer loop
2111 | vertex 78.21161890858049 765.328151075621 7.75028114395663
2112 | vertex 78.4499968424773 763.2516617884357 8.060941315736104
2113 | vertex 78.21161890858046 763.2516617884359 7.750281143956311
2114 | endloop
2115 | endfacet
2116 | facet normal 0.6087614290087608 1.163065784779927e-13 -0.7933533402912045
2117 | outer loop
2118 | vertex 78.4499968424773 763.2516617884357 8.060941315736104
2119 | vertex 78.76065701425715 765.328151075621 8.299319249633305
2120 | vertex 78.76065701425713 763.2516617884357 8.299319249632985
2121 | endloop
2122 | endfacet
2123 | facet normal 0.6087614290087608 1.163065784779927e-13 -0.7933533402912045
2124 | outer loop
2125 | vertex 78.76065701425715 765.328151075621 8.299319249633305
2126 | vertex 78.4499968424773 763.2516617884357 8.060941315736104
2127 | vertex 78.44999684247733 765.328151075621 8.060941315736422
2128 | endloop
2129 | endfacet
2130 | facet normal 0.3826834323650866 1.384039616165329e-13 -0.9238795325112881
2131 | outer loop
2132 | vertex 78.76065701425713 763.2516617884357 8.299319249632985
2133 | vertex 79.12242844660337 765.328151075621 8.449169883390246
2134 | vertex 79.12242844660335 763.2516617884357 8.449169883389926
2135 | endloop
2136 | endfacet
2137 | facet normal 0.3826834323650866 1.384039616165329e-13 -0.9238795325112881
2138 | outer loop
2139 | vertex 79.12242844660337 765.328151075621 8.449169883390246
2140 | vertex 78.76065701425713 763.2516617884357 8.299319249632985
2141 | vertex 78.76065701425715 765.328151075621 8.299319249633305
2142 | endloop
2143 | endfacet
2144 | facet normal 0.13052619222004935 1.510693434942619e-13 -0.9914448613738108
2145 | outer loop
2146 | vertex 79.12242844660335 763.2516617884357 8.449169883389926
2147 | vertex 79.51065701425713 765.328151075621 8.500281143956641
2148 | vertex 79.51065701425713 763.2516617884356 8.500281143956324
2149 | endloop
2150 | endfacet
2151 | facet normal 0.13052619222004935 1.510693434942619e-13 -0.9914448613738108
2152 | outer loop
2153 | vertex 79.51065701425713 765.328151075621 8.500281143956641
2154 | vertex 79.12242844660335 763.2516617884357 8.449169883389926
2155 | vertex 79.12242844660337 765.328151075621 8.449169883390246
2156 | endloop
2157 | endfacet
2158 | facet normal -0.13052619222004028 1.5343959926675134e-13 -0.9914448613738119
2159 | outer loop
2160 | vertex 79.51065701425713 763.2516617884356 8.500281143956324
2161 | vertex 79.89888558191093 765.328151075621 8.449169883390246
2162 | vertex 79.8988855819109 763.2516617884356 8.449169883389928
2163 | endloop
2164 | endfacet
2165 | facet normal -0.13052619222004028 1.5343959926675134e-13 -0.9914448613738119
2166 | outer loop
2167 | vertex 79.89888558191093 765.328151075621 8.449169883390246
2168 | vertex 79.51065701425713 763.2516617884356 8.500281143956324
2169 | vertex 79.51065701425713 765.328151075621 8.500281143956641
2170 | endloop
2171 | endfacet
2172 | facet normal -0.38268343236510355 1.453531999201378e-13 -0.9238795325112812
2173 | outer loop
2174 | vertex 79.8988855819109 763.2516617884356 8.449169883389928
2175 | vertex 80.26065701425713 765.328151075621 8.299319249633294
2176 | vertex 80.26065701425713 763.2516617884357 8.299319249632976
2177 | endloop
2178 | endfacet
2179 | facet normal -0.38268343236510355 1.453531999201378e-13 -0.9238795325112812
2180 | outer loop
2181 | vertex 80.26065701425713 765.328151075621 8.299319249633294
2182 | vertex 79.8988855819109 763.2516617884356 8.449169883389928
2183 | vertex 79.89888558191093 765.328151075621 8.449169883390246
2184 | endloop
2185 | endfacet
2186 | facet normal -0.6087614290087204 1.2736122020648873e-13 -0.7933533402912355
2187 | outer loop
2188 | vertex 80.26065701425713 763.2516617884357 8.299319249632976
2189 | vertex 80.57131718603696 765.328151075621 8.060941315736457
2190 | vertex 80.57131718603694 763.2516617884357 8.060941315736137
2191 | endloop
2192 | endfacet
2193 | facet normal -0.6087614290087204 1.2736122020648873e-13 -0.7933533402912355
2194 | outer loop
2195 | vertex 80.57131718603696 765.328151075621 8.060941315736457
2196 | vertex 80.26065701425713 763.2516617884357 8.299319249632976
2197 | vertex 80.26065701425713 765.328151075621 8.299319249633294
2198 | endloop
2199 | endfacet
2200 | facet normal -0.7933533402912385 1.0068978381013402e-13 -0.6087614290087165
2201 | outer loop
2202 | vertex 80.80969511993379 763.2516617884359 7.750281143956313
2203 | vertex 80.57131718603696 765.328151075621 8.060941315736457
2204 | vertex 80.80969511993382 765.328151075621 7.750281143956633
2205 | endloop
2206 | endfacet
2207 | facet normal -0.7933533402912385 1.0068978381013402e-13 -0.6087614290087165
2208 | outer loop
2209 | vertex 80.57131718603696 765.328151075621 8.060941315736457
2210 | vertex 80.80969511993379 763.2516617884359 7.750281143956313
2211 | vertex 80.57131718603694 763.2516617884357 8.060941315736137
2212 | endloop
2213 | endfacet
2214 | facet normal -0.9238795325112831 6.715650504485645e-14 -0.3826834323650985
2215 | outer loop
2216 | vertex 80.95954575369072 763.2516617884359 7.388509711610105
2217 | vertex 80.80969511993382 765.328151075621 7.750281143956633
2218 | vertex 80.95954575369075 765.3281510756211 7.388509711610424
2219 | endloop
2220 | endfacet
2221 | facet normal -0.9238795325112831 6.715650504485645e-14 -0.3826834323650985
2222 | outer loop
2223 | vertex 80.80969511993382 765.328151075621 7.750281143956633
2224 | vertex 80.95954575369072 763.2516617884359 7.388509711610105
2225 | vertex 80.80969511993379 763.2516617884359 7.750281143956313
2226 | endloop
2227 | endfacet
2228 | facet normal -0.9914448613738106 2.904662144214055e-14 -0.13052619222005013
2229 | outer loop
2230 | vertex 81.01065701425712 763.251661788436 7.0002811439563155
2231 | vertex 80.95954575369075 765.3281510756211 7.388509711610424
2232 | vertex 81.01065701425715 765.3281510756211 7.000281143956634
2233 | endloop
2234 | endfacet
2235 | facet normal -0.9914448613738106 2.904662144214055e-14 -0.13052619222005013
2236 | outer loop
2237 | vertex 80.95954575369075 765.3281510756211 7.388509711610424
2238 | vertex 81.01065701425712 763.251661788436 7.0002811439563155
2239 | vertex 80.95954575369072 763.2516617884359 7.388509711610105
2240 | endloop
2241 | endfacet
2242 | facet normal -0.9914448613738106 -1.1042741410043931e-14 0.13052619222005143
2243 | outer loop
2244 | vertex 80.95954575369073 763.251661788436 6.612052576302537
2245 | vertex 81.01065701425715 765.3281510756211 7.000281143956634
2246 | vertex 80.95954575369075 765.3281510756212 6.6120525763028555
2247 | endloop
2248 | endfacet
2249 | facet normal -0.9914448613738106 -1.1042741410043931e-14 0.13052619222005143
2250 | outer loop
2251 | vertex 81.01065701425715 765.3281510756211 7.000281143956634
2252 | vertex 80.95954575369073 763.251661788436 6.612052576302537
2253 | vertex 81.01065701425712 763.251661788436 7.0002811439563155
2254 | endloop
2255 | endfacet
2256 | facet normal -0.9238795325112844 -5.037955968412816e-14 0.38268343236509583
2257 | outer loop
2258 | vertex 80.80969511993378 763.2516617884361 6.250281143956327
2259 | vertex 80.95954575369075 765.3281510756212 6.6120525763028555
2260 | vertex 80.8096951199338 765.3281510756213 6.250281143956647
2261 | endloop
2262 | endfacet
2263 | facet normal -0.9238795325112844 -5.037955968412816e-14 0.38268343236509583
2264 | outer loop
2265 | vertex 80.95954575369075 765.3281510756212 6.6120525763028555
2266 | vertex 80.80969511993378 763.2516617884361 6.250281143956327
2267 | vertex 80.95954575369073 763.251661788436 6.612052576302537
2268 | endloop
2269 | endfacet
2270 | facet normal -0.7933533402912426 -8.628309422189453e-14 0.6087614290087111
2271 | outer loop
2272 | vertex 80.57131718603695 763.2516617884361 5.939620972176502
2273 | vertex 80.8096951199338 765.3281510756213 6.250281143956647
2274 | vertex 80.57131718603696 765.3281510756213 5.9396209721768205
2275 | endloop
2276 | endfacet
2277 | facet normal -0.7933533402912426 -8.628309422189453e-14 0.6087614290087111
2278 | outer loop
2279 | vertex 80.8096951199338 765.3281510756213 6.250281143956647
2280 | vertex 80.57131718603695 763.2516617884361 5.939620972176502
2281 | vertex 80.80969511993378 763.2516617884361 6.250281143956327
2282 | endloop
2283 | endfacet
2284 | facet normal -0.6087614290087229 -1.1630657847799751e-13 0.7933533402912337
2285 | outer loop
2286 | vertex 80.26065701425713 765.3281510756215 5.701243038279983
2287 | vertex 80.57131718603695 763.2516617884361 5.939620972176502
2288 | vertex 80.57131718603696 765.3281510756213 5.9396209721768205
2289 | endloop
2290 | endfacet
2291 | facet normal -0.6087614290087229 -1.1630657847799751e-13 0.7933533402912337
2292 | outer loop
2293 | vertex 80.57131718603695 763.2516617884361 5.939620972176502
2294 | vertex 80.26065701425713 765.3281510756215 5.701243038279983
2295 | vertex 80.26065701425713 763.2516617884361 5.701243038279664
2296 | endloop
2297 | endfacet
2298 | facet normal -0.38268343236508906 -1.3840396161653272e-13 0.9238795325112871
2299 | outer loop
2300 | vertex 79.89888558191093 765.3281510756215 5.551392404523042
2301 | vertex 80.26065701425713 763.2516617884361 5.701243038279664
2302 | vertex 80.26065701425713 765.3281510756215 5.701243038279983
2303 | endloop
2304 | endfacet
2305 | facet normal -0.38268343236508906 -1.3840396161653272e-13 0.9238795325112871
2306 | outer loop
2307 | vertex 80.26065701425713 763.2516617884361 5.701243038279664
2308 | vertex 79.89888558191093 765.3281510756215 5.551392404523042
2309 | vertex 79.8988855819109 763.2516617884361 5.551392404522723
2310 | endloop
2311 | endfacet
2312 | facet normal 0.8660254037844336 -0.5000000000000085 -7.590596356641299e-14
2313 | outer loop
2314 | vertex 81.14729228040063 758.3761502132445 40.9999999999997
2315 | vertex 82.77229228040069 761.1907327755471 20.000000000000142
2316 | vertex 82.77229228040066 761.1907327755439 41.000000000000135
2317 | endloop
2318 | endfacet
2319 | facet normal 0.8660254037844336 -0.5000000000000085 -7.590596356641299e-14
2320 | outer loop
2321 | vertex 82.77229228040069 761.1907327755471 20.000000000000142
2322 | vertex 81.14729228040063 758.3761502132445 40.9999999999997
2323 | vertex 81.14729228040065 758.3761502132477 19.999999999999705
2324 | endloop
2325 | endfacet
2326 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
2327 | outer loop
2328 | vertex 81.14729228040063 758.3761502132445 40.9999999999997
2329 | vertex 77.89729228040065 758.3761502132477 19.999999999999705
2330 | vertex 81.14729228040065 758.3761502132477 19.999999999999705
2331 | endloop
2332 | endfacet
2333 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
2334 | outer loop
2335 | vertex 77.89729228040065 758.3761502132477 19.999999999999705
2336 | vertex 81.14729228040063 758.3761502132445 40.9999999999997
2337 | vertex 77.89729228040063 758.3761502132445 40.9999999999997
2338 | endloop
2339 | endfacet
2340 | facet normal -0.8660254037844456 -0.4999999999999882 -7.775074017064964e-14
2341 | outer loop
2342 | vertex 77.89729228040065 758.3761502132477 19.999999999999705
2343 | vertex 76.27229228040066 761.1907327755439 41.00000000000013
2344 | vertex 76.27229228040068 761.1907327755472 20.00000000000013
2345 | endloop
2346 | endfacet
2347 | facet normal -0.8660254037844456 -0.4999999999999882 -7.775074017064964e-14
2348 | outer loop
2349 | vertex 76.27229228040066 761.1907327755439 41.00000000000013
2350 | vertex 77.89729228040065 758.3761502132477 19.999999999999705
2351 | vertex 77.89729228040063 758.3761502132445 40.9999999999997
2352 | endloop
2353 | endfacet
2354 | facet normal -0.8660254037844335 0.500000000000009 7.584610054432808e-14
2355 | outer loop
2356 | vertex 76.27229228040068 761.1907327755472 20.00000000000013
2357 | vertex 77.8972922804007 764.0053153378434 41.00000000000056
2358 | vertex 77.89729228040073 764.0053153378466 20.00000000000057
2359 | endloop
2360 | endfacet
2361 | facet normal -0.8660254037844335 0.500000000000009 7.584610054432808e-14
2362 | outer loop
2363 | vertex 77.8972922804007 764.0053153378434 41.00000000000056
2364 | vertex 76.27229228040068 761.1907327755472 20.00000000000013
2365 | vertex 76.27229228040066 761.1907327755439 41.00000000000013
2366 | endloop
2367 | endfacet
2368 | facet normal 9.079617401591787e-15 1.0 1.5356826921220088e-13
2369 | outer loop
2370 | vertex 77.8972922804007 764.0053153378434 41.00000000000056
2371 | vertex 81.14729228040073 764.0053153378466 20.000000000000572
2372 | vertex 77.89729228040073 764.0053153378466 20.00000000000057
2373 | endloop
2374 | endfacet
2375 | facet normal 9.079617401591787e-15 1.0 1.5356826921220088e-13
2376 | outer loop
2377 | vertex 81.14729228040073 764.0053153378466 20.000000000000572
2378 | vertex 77.8972922804007 764.0053153378434 41.00000000000056
2379 | vertex 81.1472922804007 764.0053153378434 41.00000000000057
2380 | endloop
2381 | endfacet
2382 | facet normal 0.8660254037844459 0.4999999999999875 7.769341495853681e-14
2383 | outer loop
2384 | vertex 82.77229228040066 761.1907327755439 41.000000000000135
2385 | vertex 81.14729228040073 764.0053153378466 20.000000000000572
2386 | vertex 81.1472922804007 764.0053153378434 41.00000000000057
2387 | endloop
2388 | endfacet
2389 | facet normal 0.8660254037844459 0.4999999999999875 7.769341495853681e-14
2390 | outer loop
2391 | vertex 81.14729228040073 764.0053153378466 20.000000000000572
2392 | vertex 82.77229228040066 761.1907327755439 41.000000000000135
2393 | vertex 82.77229228040069 761.1907327755471 20.000000000000142
2394 | endloop
2395 | endfacet
2396 | facet normal 0.5629151931289428 -0.3249992382840579 0.7599355107240267
2397 | outer loop
2398 | vertex 82.77229228040069 761.1907327755471 20.000000000000142
2399 | vertex 84.52229228040062 752.5304787377034 14.999999999998597
2400 | vertex 89.5222922804007 761.1907327755478 15.000000000000156
2401 | endloop
2402 | endfacet
2403 | facet normal 0.5629151931289428 -0.3249992382840579 0.7599355107240267
2404 | outer loop
2405 | vertex 84.52229228040062 752.5304787377034 14.999999999998597
2406 | vertex 82.77229228040069 761.1907327755471 20.000000000000142
2407 | vertex 81.14729228040065 758.3761502132477 19.999999999999705
2408 | endloop
2409 | endfacet
2410 | facet normal -6.222112345701081e-15 -0.6499984765679814 0.7599355107239716
2411 | outer loop
2412 | vertex 81.14729228040065 758.3761502132477 19.999999999999705
2413 | vertex 74.52229228040063 752.5304787377036 14.999999999998709
2414 | vertex 84.52229228040062 752.5304787377034 14.999999999998597
2415 | endloop
2416 | endfacet
2417 | facet normal -6.222112345701081e-15 -0.6499984765679814 0.7599355107239716
2418 | outer loop
2419 | vertex 74.52229228040063 752.5304787377036 14.999999999998709
2420 | vertex 81.14729228040065 758.3761502132477 19.999999999999705
2421 | vertex 77.89729228040065 758.3761502132477 19.999999999999705
2422 | endloop
2423 | endfacet
2424 | facet normal -0.5629151931289549 -0.3249992382840453 0.759935510724023
2425 | outer loop
2426 | vertex 76.27229228040068 761.1907327755472 20.00000000000013
2427 | vertex 74.52229228040063 752.5304787377036 14.999999999998709
2428 | vertex 77.89729228040065 758.3761502132477 19.999999999999705
2429 | endloop
2430 | endfacet
2431 | facet normal -0.5629151931289549 -0.3249992382840453 0.759935510724023
2432 | outer loop
2433 | vertex 74.52229228040063 752.5304787377036 14.999999999998709
2434 | vertex 76.27229228040068 761.1907327755472 20.00000000000013
2435 | vertex 69.5222922804007 761.190732775548 14.999999999999966
2436 | endloop
2437 | endfacet
2438 | facet normal -0.5629151931289484 0.3249992382838095 0.7599355107241287
2439 | outer loop
2440 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
2441 | vertex 76.27229228040068 761.1907327755472 20.00000000000013
2442 | vertex 77.89729228040073 764.0053153378466 20.00000000000057
2443 | endloop
2444 | endfacet
2445 | facet normal -0.5629151931289484 0.3249992382838095 0.7599355107241287
2446 | outer loop
2447 | vertex 76.27229228040068 761.1907327755472 20.00000000000013
2448 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
2449 | vertex 69.5222922804007 761.190732775548 14.999999999999966
2450 | endloop
2451 | endfacet
2452 | facet normal 5.5858816058293575e-15 0.6499984765677362 0.7599355107241814
2453 | outer loop
2454 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
2455 | vertex 81.14729228040073 764.0053153378466 20.000000000000572
2456 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
2457 | endloop
2458 | endfacet
2459 | facet normal 5.5858816058293575e-15 0.6499984765677362 0.7599355107241814
2460 | outer loop
2461 | vertex 81.14729228040073 764.0053153378466 20.000000000000572
2462 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
2463 | vertex 77.89729228040073 764.0053153378466 20.00000000000057
2464 | endloop
2465 | endfacet
2466 | facet normal 0.5629151931289498 0.32499923828380245 0.7599355107241307
2467 | outer loop
2468 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
2469 | vertex 82.77229228040069 761.1907327755471 20.000000000000142
2470 | vertex 89.5222922804007 761.1907327755478 15.000000000000156
2471 | endloop
2472 | endfacet
2473 | facet normal 0.5629151931289498 0.32499923828380245 0.7599355107241307
2474 | outer loop
2475 | vertex 82.77229228040069 761.1907327755471 20.000000000000142
2476 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
2477 | vertex 81.14729228040073 764.0053153378466 20.000000000000572
2478 | endloop
2479 | endfacet
2480 | facet normal -2.552680289369473e-15 -1.626856762959075e-13 1.0
2481 | outer loop
2482 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
2483 | vertex 84.52229228040062 752.5304787377034 14.999999999998597
2484 | vertex 89.5222922804007 761.1907327755478 15.000000000000156
2485 | endloop
2486 | endfacet
2487 | facet normal -2.552680289369473e-15 -1.626856762959075e-13 1.0
2488 | outer loop
2489 | vertex 84.52229228040062 752.5304787377034 14.999999999998597
2490 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
2491 | vertex 74.52229228040063 752.5304787377036 14.999999999998709
2492 | endloop
2493 | endfacet
2494 | facet normal -2.552680289369473e-15 -1.626856762959075e-13 1.0
2495 | outer loop
2496 | vertex 74.52229228040063 752.5304787377036 14.999999999998709
2497 | vertex 84.52229228040076 769.8509868133922 15.000000000001414
2498 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
2499 | endloop
2500 | endfacet
2501 | facet normal -2.552680289369473e-15 -1.626856762959075e-13 1.0
2502 | outer loop
2503 | vertex 74.52229228040063 752.5304787377036 14.999999999998709
2504 | vertex 74.52229228040078 769.8509868133923 15.000000000001526
2505 | vertex 69.5222922804007 761.190732775548 14.999999999999966
2506 | endloop
2507 | endfacet
2508 | facet normal -4.8086534754077085e-15 -1.5356826921220086e-13 1.0
2509 | outer loop
2510 | vertex 80.27229228040079 762.4897708812236 21.000000000000345
2511 | vertex 80.27229228040076 759.8916946698703 20.999999999999947
2512 | vertex 81.02229228040079 761.190732775547 21.00000000000015
2513 | endloop
2514 | endfacet
2515 | facet normal -4.8086534754077085e-15 -1.5356826921220086e-13 1.0
2516 | outer loop
2517 | vertex 80.27229228040076 759.8916946698703 20.999999999999947
2518 | vertex 80.27229228040079 762.4897708812236 21.000000000000345
2519 | vertex 78.77229228040075 759.8916946698703 20.999999999999943
2520 | endloop
2521 | endfacet
2522 | facet normal -4.8086534754077085e-15 -1.5356826921220086e-13 1.0
2523 | outer loop
2524 | vertex 78.77229228040075 759.8916946698703 20.999999999999943
2525 | vertex 80.27229228040079 762.4897708812236 21.000000000000345
2526 | vertex 78.77229228040076 762.4897708812236 21.000000000000345
2527 | endloop
2528 | endfacet
2529 | facet normal -4.8086534754077085e-15 -1.5356826921220086e-13 1.0
2530 | outer loop
2531 | vertex 78.77229228040075 759.8916946698703 20.999999999999943
2532 | vertex 78.77229228040076 762.4897708812236 21.000000000000345
2533 | vertex 78.02229228040075 761.190732775547 21.000000000000135
2534 | endloop
2535 | endfacet
2536 | facet normal 0.8660254037844428 0.4999999999999928 8.094855067379873e-14
2537 | outer loop
2538 | vertex 78.77229228040065 759.8916946698672 40.99999999999993
2539 | vertex 78.02229228040075 761.190732775547 21.000000000000135
2540 | vertex 78.02229228040065 761.1907327755439 41.00000000000013
2541 | endloop
2542 | endfacet
2543 | facet normal 0.8660254037844428 0.4999999999999928 8.094855067379873e-14
2544 | outer loop
2545 | vertex 78.02229228040075 761.190732775547 21.000000000000135
2546 | vertex 78.77229228040065 759.8916946698672 40.99999999999993
2547 | vertex 78.77229228040075 759.8916946698703 20.999999999999943
2548 | endloop
2549 | endfacet
2550 | facet normal 9.079617401591787e-15 1.0 1.5356826921220088e-13
2551 | outer loop
2552 | vertex 78.77229228040065 759.8916946698672 40.99999999999993
2553 | vertex 80.27229228040076 759.8916946698703 20.999999999999947
2554 | vertex 78.77229228040075 759.8916946698703 20.999999999999943
2555 | endloop
2556 | endfacet
2557 | facet normal 9.079617401591787e-15 1.0 1.5356826921220088e-13
2558 | outer loop
2559 | vertex 80.27229228040076 759.8916946698703 20.999999999999947
2560 | vertex 78.77229228040065 759.8916946698672 40.99999999999993
2561 | vertex 80.27229228040066 759.8916946698672 40.99999999999996
2562 | endloop
2563 | endfacet
2564 | facet normal -0.866025403784435 0.5000000000000064 7.261971853840201e-14
2565 | outer loop
2566 | vertex 80.27229228040076 759.8916946698703 20.999999999999947
2567 | vertex 81.02229228040068 761.1907327755439 41.000000000000156
2568 | vertex 81.02229228040079 761.190732775547 21.00000000000015
2569 | endloop
2570 | endfacet
2571 | facet normal -0.866025403784435 0.5000000000000064 7.261971853840201e-14
2572 | outer loop
2573 | vertex 81.02229228040068 761.1907327755439 41.000000000000156
2574 | vertex 80.27229228040076 759.8916946698703 20.999999999999947
2575 | vertex 80.27229228040066 759.8916946698672 40.99999999999996
2576 | endloop
2577 | endfacet
2578 | facet normal -0.8660254037844428 -0.4999999999999928 -8.094855067379873e-14
2579 | outer loop
2580 | vertex 81.02229228040079 761.190732775547 21.00000000000015
2581 | vertex 80.27229228040069 762.4897708812206 41.000000000000355
2582 | vertex 80.27229228040079 762.4897708812236 21.000000000000345
2583 | endloop
2584 | endfacet
2585 | facet normal -0.8660254037844428 -0.4999999999999928 -8.094855067379873e-14
2586 | outer loop
2587 | vertex 80.27229228040069 762.4897708812206 41.000000000000355
2588 | vertex 81.02229228040079 761.190732775547 21.00000000000015
2589 | vertex 81.02229228040068 761.1907327755439 41.000000000000156
2590 | endloop
2591 | endfacet
2592 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
2593 | outer loop
2594 | vertex 80.27229228040069 762.4897708812206 41.000000000000355
2595 | vertex 78.77229228040076 762.4897708812236 21.000000000000345
2596 | vertex 80.27229228040079 762.4897708812236 21.000000000000345
2597 | endloop
2598 | endfacet
2599 | facet normal -9.079617401591787e-15 -1.0 -1.5356826921220088e-13
2600 | outer loop
2601 | vertex 78.77229228040076 762.4897708812236 21.000000000000345
2602 | vertex 80.27229228040069 762.4897708812206 41.000000000000355
2603 | vertex 78.77229228040066 762.4897708812206 41.000000000000334
2604 | endloop
2605 | endfacet
2606 | facet normal 0.8660254037844354 -0.5000000000000057 -7.261971853840191e-14
2607 | outer loop
2608 | vertex 78.02229228040065 761.1907327755439 41.00000000000013
2609 | vertex 78.77229228040076 762.4897708812236 21.000000000000345
2610 | vertex 78.77229228040066 762.4897708812206 41.000000000000334
2611 | endloop
2612 | endfacet
2613 | facet normal 0.8660254037844354 -0.5000000000000057 -7.261971853840191e-14
2614 | outer loop
2615 | vertex 78.77229228040076 762.4897708812236 21.000000000000345
2616 | vertex 78.02229228040065 761.1907327755439 41.00000000000013
2617 | vertex 78.02229228040075 761.190732775547 21.000000000000135
2618 | endloop
2619 | endfacet
2620 | endsolid EVO3
2621 |
--------------------------------------------------------------------------------
/android/README.md:
--------------------------------------------------------------------------------
1 | # Android Controlled Self Balancing Robot - Android interface
2 |
3 | This project is on Hackaday.io and takes part in the Hackaday Prize 2017 : https://hackaday.io/project/25835-android-controlled-balancing-robot
4 | **Like this project on Hackaday.io and help me build new cool things !**
5 |
6 | 
7 |
8 | The Android remote control interface uses the free [Kewlsoft Bluetooth Electronics app](https://play.google.com/store/apps/details?id=com.keuwl.arduinobluetooth).
9 |
10 | ## Instructions
11 | - Install Bluetooth Electronics from the Play Store
12 | - copt the brobot.kwl file from the repository to your android device, in keuwlsoft directory (usually located in /storage/emulated/0/keuwlsoft)
13 | - Launch Bluetooth Electronics app
14 | - Edit a new panel
15 | - In the right menu, select Import/Export, and choose brobot.kwl
16 | - Save
17 | - Start the robot, connect to it from the app, enjoy !
18 |
19 | ## Controls
20 | - The joystick on the left controls the robot
21 | - The big red button on the right triggers the servo arm
22 | - The little red button in the middle triggers pro mode on and off (be careful !)
23 | - The little yellow button in the middle triggers the autonomous navigation on and off (if the robot is equiped with a IR sensor)
24 | - The little blue button in the middle triggers only the distance measurement on and off
25 | - Two big indicators show robot speed and angle
26 |
27 | # Donation
28 | If this project help you reduce time to develop, you can give me a cup of coffee :)
29 |
30 | [](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=stephgsec%2debay%40yahoo%2efr&lc=US&item_name=St%c3%a9phane%20Guerreau¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted)
31 |
32 |
--------------------------------------------------------------------------------
/android/brobot.kwl:
--------------------------------------------------------------------------------
1 | Keuwlsoft Bluetooth Electronics Panel File
2 | 2017-07-23 22:24:47
3 | 1
4 |
5 | :::TEXT:::
6 | 8
7 | 3
8 | 9
9 | 11
10 | 6
11 | 8
12 | 5
13 | 5
14 | 5
15 | 0
16 | 0
17 | 3
18 | 2
19 | 6
20 | 6
21 | 5
22 | 4
23 | 2
24 | 2
25 | 2
26 | 2
27 | 2
28 | 2
29 | 2
30 | 2
31 | false
32 | false
33 | true
34 | false
35 | true
36 | false
37 | false
38 | false
39 | 245
40 | 245
41 | 245
42 | 245
43 | 245
44 | 245
45 | 245
46 | 245
47 | 240
48 | 240
49 | 240
50 | 240
51 | 240
52 | 240
53 | 240
54 | 240
55 | 245
56 | 245
57 | 245
58 | 245
59 | 245
60 | 245
61 | 245
62 | 245
63 | 0
64 | 0
65 | 0
66 | 0
67 | 0
68 | 2
69 | 2
70 | 2
71 | Speed
72 | Angle
73 | 159.15
74 | Motors
75 | 0
76 | Sonar
77 | Auto
78 | Pro
79 |
80 |
81 | P
82 |
83 | E
84 |
85 |
86 |
87 | :::BUTTONS:::
88 | 4
89 | 7
90 | 7
91 | 11
92 | 7
93 | 5
94 | 6
95 | 5
96 | 4
97 | 15
98 | 17
99 | 27
100 | 14
101 | A
102 | E
103 | S
104 | W
105 |
106 |
107 | s
108 |
109 | :::SWITCHES:::
110 | 0
111 | :::SLIDERS:::
112 | 0
113 | :::PADS:::
114 | 1
115 | 0
116 | 4
117 | 2
118 | false
119 | true
120 | 100
121 | 10
122 | 0
123 | 0,1,2,3,4,5,6,7,8
124 |
125 | *
126 | :::ACCELEROMETERS:::
127 | 0
128 | :::INDICATORS:::
129 | 7
130 | 0
131 | 10
132 | 6
133 | 6
134 | 6
135 | 6
136 | 6
137 | 0
138 | 0
139 | 6
140 | 5
141 | 4
142 | 3
143 | 0
144 | 4
145 | 4
146 | 1
147 | 1
148 | 1
149 | 1
150 | 1
151 | 1000
152 | 180
153 | 100
154 | 100
155 | 100
156 | 100
157 | 100
158 | 0
159 | 0
160 | 0
161 | 0
162 | 0
163 | 0
164 | 0
165 | 686
166 | 159
167 | 0
168 | 0
169 | 0
170 | 0
171 | 255
172 | 10
173 | 10
174 | 0
175 | 0
176 | 0
177 | 255
178 | 0
179 | 5
180 | 5
181 | 0
182 | 0
183 | 0
184 | 0
185 | 0
186 | S
187 | P
188 | e
189 | A
190 | W
191 | M
192 | L
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 | :::GRAPHS:::
208 | 0
209 | :::TERMINALS:::
210 | 0
211 | :::PANELINFO:::
212 |
213 |
214 |
215 |
216 | :::END:::
217 |
--------------------------------------------------------------------------------
/android/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ArcadiaLabs/balancing_robot/14918a912a41ea9b97aa3dbc5e48ac8bb0952144/android/screenshot.png
--------------------------------------------------------------------------------
/arduino/BROBOT_EVO3/BROBOT_EVO3.ino:
--------------------------------------------------------------------------------
1 | // BROBOT EVO 2
2 | // SELF BALANCE ARDUINO ROBOT WITH STEPPER MOTORS
3 |
4 | // -- HARDWARE --
5 | // BROBOT ELECTRONIC BRAIN SHIELD : Arduino pro micro + MPU9250/6050 (I2C) IMU
6 | // + HC-05 / HC-06 Bluetooth module + 2x A4988 STEPPER MOTOR drivers
7 | // STEPPER MOTORS : 2x NEMA-17
8 | // OPTIONAL : 1x 12g servo (ES08MA-II recommended)
9 |
10 | // -- HOW TO USE --
11 | // The robot needs at least 10-15 seconds with no motion (robot steady) at startup to give good values...
12 | // Put the robot at horizontal then switch it ON. It will indicate when ready with 3 small motors and servo movement.
13 |
14 | // The robot is OFF when the angle is high (robot is horizontal). When you start raising up the robot, it
15 | // automatically switches ON and starts a RAISE UP procedure.
16 | // You could RAISE UP the robot manually or using the robot servo actuated arm (Servo button on the interface)
17 | // To switch OFF the robot you could manually put the robot down on the floor (horizontal)
18 |
19 | // -- ADDITIONAL DETAILS --
20 | // This code doesn´t need external libraries except Wire.h
21 |
22 | // This code requires 2x 16-bit timers for motors control, so a ATmega32u4 based arduino is mandatory (Micro, Leonardo)
23 | // An ATmega168/328 WON'T WORK ! (only 1x 16-bit timer)
24 |
25 | // Angle estimation using complementary filter (fusion between gyro and accel)
26 | // Angle calculations and control part is running at 100Hz
27 |
28 | // We use a standard PID controllers (Proportional, Integral derivative controller) for robot stability
29 | // We have a PI controller for speed control and a PD controller for stability (robot angle)
30 | // The output of the control (motors speed) is integrated so it´s really an acceleration, not an speed.
31 |
32 | // Based on BROBOT EVO 2 code by JJROBOTS (Version 2.8 dated 08/03/2017)
33 | // Author: JJROBOTS.COM
34 | // License: GPL v2
35 | // Original Project URL: http://jjrobots.com/b-robot
36 |
37 | #include
38 |
39 | // -- SETTINGS --
40 | // NORMAL MODE SETTINGS (MAXIMUN SETTINGS)
41 | #define MAX_THROTTLE 550
42 | #define MAX_STEERING 140
43 | #define MAX_TARGET_ANGLE 14
44 |
45 | // PRO MODE = MORE AGGRESSIVE (MAXIMUN SETTINGS)
46 | #define MAX_THROTTLE_PRO 860
47 | #define MAX_STEERING_PRO 280
48 | #define MAX_TARGET_ANGLE_PRO 20
49 | //#define MAX_TARGET_ANGLE_PRO 32
50 |
51 | // Default control terms
52 | #define KP 0.32
53 | #define KD 0.050
54 | #define KP_THROTTLE 0.075
55 | #define KI_THROTTLE 0.1
56 | #define KP_POSITION 0.06
57 | #define KD_POSITION 0.45
58 |
59 | // Control gains for raiseup (the raiseup movement requiere special control parameters)
60 | #define KP_RAISEUP 0.1
61 | #define KD_RAISEUP 0.16
62 | #define KP_THROTTLE_RAISEUP 0 // No speed control on raiseup
63 | #define KI_THROTTLE_RAISEUP 0.0
64 |
65 | #define MAX_CONTROL_OUTPUT 500
66 | #define ITERM_MAX_ERROR 30 // Iterm windup constants for PI control
67 | #define ITERM_MAX 10000
68 |
69 | #define ANGLE_OFFSET -1.0 // Offset angle for balance (to compensate robot own weitght distribution)
70 |
71 | #define ZERO_SPEED 65535
72 | #define MAX_ACCEL 15 // Maximun motor acceleration (MAX RECOMMENDED VALUE: 20) (default:15)
73 |
74 | #define MICROSTEPPING 16 // 8 or 16 for 1/8 or 1/16 driver microstepping (default:16)
75 |
76 | // Servo definitions
77 | #define SERVO_AUX_NEUTRAL 1630 // Servo neutral position
78 | #define SERVO_MIN_PULSEWIDTH 700
79 | #define SERVO_MAX_PULSEWIDTH 2500
80 |
81 | #define ANGLE_READY_SERVO 80 // Startup angle using servo raiseup
82 | #define ANGLE_READY_NOSERVO 76 // Startup angle using normal raiseup
83 |
84 | //*** PINS
85 | // MOTORS
86 | int MOTORS_ENABLE = 8;
87 | // If you change these pins, please also adapt functions in 'Control' page accordingly
88 | int MOTOR1_STEP = 7; // STEP MOTOR 1 PORTE,6
89 | int MOTOR1_DIR = 6; // DIR MOTOR 1 PORTD,7
90 | int MOTOR2_STEP = 5; // STEP MOTOR 2 PORTC,6
91 | int MOTOR2_DIR = 4; // DIR MOTOR 2 PORTD,4
92 | // gp2y0a21f sensor
93 | int IR_PIN = A3;
94 | // SERVO
95 | // If you change this pin, please also adapt functions in 'servo' page accordingly
96 | int SERVO = 10; // SERVO
97 |
98 | // AUTONOMOUS MODE DISTANCE PARAMETERS
99 | int OBSTACLE_DISTANCE_MIN = 50;
100 | int WALK_DISTANCE_MIN = 80;
101 |
102 | #define DEBUG 0 // 0 = No debug info (default) DEBUG 1 for console output
103 |
104 | // AUX definitions
105 | #define CLR(x,y) (x&=(~(1< 0
226 | delay(9000);
227 | #else
228 | delay(1000);
229 | #endif
230 | Serial.println("BROBOT by JJROBOTS v2.8");
231 |
232 | delay(200);
233 | Serial.println("Don't move for 10 sec...");
234 | MPU6050_setup(); // setup MPU6050 IMU
235 | delay(500);
236 |
237 | // Calibrate gyros
238 | MPU6050_calibrate();
239 |
240 | // SERVO INITIALIZATION
241 | Serial.println("Servo init");
242 | BROBOT_initServo();
243 | BROBOT_moveServo(SERVO_AUX_NEUTRAL);
244 |
245 | // STEPPER MOTORS INITIALIZATION
246 | Serial.println("Steppers init");
247 | // MOTOR1 => TIMER1
248 | TCCR1A = 0; // Timer1 CTC mode 4, OCxA,B outputs disconnected
249 | TCCR1B = (1 << WGM12) | (1 << CS11); // Prescaler=8, => 2Mhz
250 | OCR1A = ZERO_SPEED; // Motor stopped
251 | dir_M1 = 0;
252 | TCNT1 = 0;
253 |
254 | // MOTOR2 => TIMER3
255 | TCCR3A = 0; // Timer3 CTC mode 4, OCxA,B outputs disconnected
256 | TCCR3B = (1 << WGM32) | (1 << CS31); // Prescaler=8, => 2Mhz
257 | OCR3A = ZERO_SPEED; // Motor stopped
258 | dir_M2 = 0;
259 | TCNT3 = 0;
260 | delay(200);
261 |
262 | // Enable stepper drivers and TIMER interrupts
263 | Motors_Enable(true);
264 | // Enable TIMERs interrupts
265 | TIMSK1 |= (1 << OCIE1A); // Enable Timer1 interrupt
266 | TIMSK3 |= (1 << OCIE1A); // Enable Timer1 interrupt
267 |
268 | // Little motor vibration and servo move to indicate that robot is ready
269 | for (uint8_t k = 0; k < 5; k++)
270 | {
271 | setMotorSpeedM1(5);
272 | setMotorSpeedM2(5);
273 | BROBOT_moveServo(SERVO_AUX_NEUTRAL + 100);
274 | delay(200);
275 | setMotorSpeedM1(-5);
276 | setMotorSpeedM2(-5);
277 | BROBOT_moveServo(SERVO_AUX_NEUTRAL - 100);
278 | delay(200);
279 | }
280 | BROBOT_moveServo(SERVO_AUX_NEUTRAL);
281 |
282 | Serial.println("Start...");
283 | timer_old = micros();
284 |
285 | // *Ready* virtual LED : green
286 | Serial1.print("*LR0G255B0*");
287 | }
288 |
289 |
290 | // MAIN LOOP
291 | void loop()
292 | {
293 |
294 | BT_MsgRead();
295 |
296 | // AUTONOMOUS MODE
297 | if (auto_on == true){
298 | autonomousMode();
299 | }
300 |
301 | timer_value = micros();
302 |
303 | // New IMU data?
304 | if (MPU6050_newData())
305 | {
306 | MPU6050_read_3axis();
307 |
308 | // // Increment loop counters
309 | fast_loop_counter++;
310 | medium_loop_counter++;
311 | slow_loop_counter++;
312 |
313 | dt = (timer_value - timer_old) * 0.000001; // dt in seconds
314 | timer_old = timer_value;
315 |
316 | angle_adjusted_Old = angle_adjusted;
317 | // Get new orientation angle from IMU (MPU6050)
318 | angle_adjusted = MPU6050_getAngle(dt) + ANGLE_OFFSET;
319 |
320 |
321 |
322 | #if DEBUG==1
323 | Serial.print(dt);
324 | Serial.print(" ");
325 | Serial.println(angle_adjusted);
326 | #endif
327 | //Serial.print("\t");
328 |
329 | // We calculate the estimated robot speed:
330 | // Estimated_Speed = angular_velocity_of_stepper_motors(combined) - angular_velocity_of_robot(angle measured by IMU)
331 | actual_robot_speed = (speed_M1 + speed_M2) / 2; // Positive: forward
332 |
333 | int16_t angular_velocity = (angle_adjusted - angle_adjusted_Old) * 25.0; // 25 is an empirical extracted factor to adjust for real units
334 | int16_t estimated_speed = -actual_robot_speed + angular_velocity;
335 | estimated_speed_filtered = estimated_speed_filtered * 0.9 + (float)estimated_speed * 0.1; // low pass filter on estimated speed
336 |
337 | #if DEBUG==2
338 | Serial.print(angle_adjusted);
339 | Serial.print(" ");
340 | Serial.println(estimated_speed_filtered);
341 | #endif
342 |
343 | if (positionControlMode)
344 | {
345 |
346 | // POSITION CONTROL. INPUT: Target steps for each motor. Output: motors speed
347 | motor1_control = positionPDControl(steps1, target_steps1, Kp_position, Kd_position, speed_M1);
348 | motor2_control = positionPDControl(steps2, target_steps2, Kp_position, Kd_position, speed_M2);
349 |
350 | // Convert from motor position control to throttle / steering commands
351 | throttle = (motor1_control + motor2_control) / 2;
352 | throttle = constrain(throttle, -190, 190);
353 | steering = motor2_control - motor1_control;
354 | steering = constrain(steering, -50, 50);
355 |
356 | }
357 |
358 | // ROBOT SPEED CONTROL: This is a PI controller.
359 | // input:user throttle(robot speed), variable: estimated robot speed, output: target robot angle to get the desired speed
360 | target_angle = speedPIControl(dt, estimated_speed_filtered, throttle, Kp_thr, Ki_thr);
361 | target_angle = constrain(target_angle, -max_target_angle, max_target_angle); // limited output
362 |
363 |
364 | #if DEBUG==3
365 | Serial.print(angle_adjusted);
366 | Serial.print(" ");
367 | Serial.print(estimated_speed_filtered);
368 | Serial.print(" ");
369 | Serial.println(target_angle);
370 | #endif
371 |
372 | // Stability control (100Hz loop): This is a PD controller.
373 | // input: robot target angle(from SPEED CONTROL), variable: robot angle, output: Motor speed
374 | // We integrate the output (sumatory), so the output is really the motor acceleration, not motor speed.
375 | control_output += stabilityPDControl(dt, angle_adjusted, target_angle, Kp, Kd);
376 | control_output = constrain(control_output, -MAX_CONTROL_OUTPUT, MAX_CONTROL_OUTPUT); // Limit max output from control
377 |
378 | // The steering part from the user is injected directly to the output
379 | motor1 = control_output + steering;
380 | motor2 = control_output - steering;
381 |
382 | // Limit max speed (control output)
383 | motor1 = constrain(motor1, -MAX_CONTROL_OUTPUT, MAX_CONTROL_OUTPUT);
384 | motor2 = constrain(motor2, -MAX_CONTROL_OUTPUT, MAX_CONTROL_OUTPUT);
385 |
386 | int angle_ready;
387 | if (servo_on == true) { // If we press the SERVO button we start to move
388 | angle_ready = ANGLE_READY_SERVO;
389 | // angle_ready = 80;
390 | }
391 | else {
392 | angle_ready = ANGLE_READY_NOSERVO;
393 | // angle_ready = 74; // Default angle
394 | }
395 | if ((angle_adjusted < angle_ready) && (angle_adjusted > -angle_ready)) // Is robot ready (upright?)
396 | {
397 |
398 | // NORMAL MODE
399 | Motors_Enable(true);
400 | // NOW we send the commands to the motors
401 | setMotorSpeedM1(motor1);
402 | setMotorSpeedM2(motor2);
403 |
404 |
405 | #if DEBUG==4
406 | Serial.print(angle_adjusted);
407 | Serial.print(" ");
408 | Serial.print(estimated_speed_filtered);
409 | Serial.print(" ");
410 | Serial.print(target_angle);
411 | Serial.print(" ");
412 | Serial.print(throttle);
413 | Serial.print(" ");
414 | Serial.println(steering);
415 | #endif
416 | }
417 | else // Robot not ready (flat), angle > angle_ready => ROBOT OFF
418 | {
419 | // digitalWrite(MOTORS_ENABLE, HIGH); // Disable motors
420 | Motors_Enable(false);
421 | // setMotorSpeedM1(0);
422 | // setMotorSpeedM2(0);
423 | PID_errorSum = 0; // Reset PID I term
424 | Kp = KP_RAISEUP; // CONTROL GAINS FOR RAISE UP
425 | Kd = KD_RAISEUP;
426 | Kp_thr = KP_THROTTLE_RAISEUP;
427 | Ki_thr = KI_THROTTLE_RAISEUP;
428 | // RESET steps
429 | steps1 = 0;
430 | steps2 = 0;
431 |
432 | #if DEBUG==4
433 | Serial.print(angle_adjusted);
434 | Serial.print(" ");
435 | Serial.print(estimated_speed_filtered);
436 | Serial.print(" ");
437 | Serial.print(target_angle);
438 | Serial.println(" 0 0");
439 | #endif
440 | }
441 |
442 | // Push1 Move servo arm
443 | if (servo_on == true) // Move arm
444 | {
445 | if (angle_adjusted > -40) {
446 | BROBOT_moveServo(SERVO_MIN_PULSEWIDTH);
447 | }
448 | else {
449 | BROBOT_moveServo(SERVO_MAX_PULSEWIDTH);
450 | }
451 | }
452 | else {
453 | BROBOT_moveServo(SERVO_AUX_NEUTRAL);
454 | }
455 |
456 | // Normal condition?
457 | if ((angle_adjusted < 56) && (angle_adjusted > -56))
458 | {
459 | Kp = Kp_user; // Default user control gains
460 | Kd = Kd_user;
461 | Kp_thr = Kp_thr_user;
462 | Ki_thr = Ki_thr_user;
463 | }
464 | else // We are in the raise up procedure => we use special control parameters
465 | {
466 | Kp = KP_RAISEUP; // CONTROL GAINS FOR RAISE UP
467 | Kd = KD_RAISEUP;
468 | Kp_thr = KP_THROTTLE_RAISEUP;
469 | Ki_thr = KI_THROTTLE_RAISEUP;
470 | }
471 |
472 | BT_MsgSend();
473 |
474 | } // End of new IMU data
475 |
476 | // //*** Fast loop 40Hz
477 | if (fast_loop_counter >= 5)
478 | {
479 | fast_loop_counter = 0;
480 | } // End of Fast loop
481 |
482 | //*** Medium loop 7.5Hz
483 | if (medium_loop_counter >= 15)
484 | {
485 | medium_loop_counter = 0;
486 | if (ir_on == true){
487 | IR_Read();
488 | }
489 | } // End of medium loop
490 |
491 | //*** Slow loop 1Hz
492 | else if (slow_loop_counter >= 1000) // 1Hz
493 | {
494 | // Serial.println("loop");
495 | slow_loop_counter = 0;
496 | } // End of slow loop
497 |
498 | }
499 |
500 | void Motors_Enable(bool state){
501 | if (state == true){
502 | digitalWrite(MOTORS_ENABLE, LOW); // Enable motors
503 | motors_on = true;
504 | }
505 | else{
506 | digitalWrite(MOTORS_ENABLE, HIGH); // Disable motors
507 | setMotorSpeedM1(0);
508 | setMotorSpeedM2(0);
509 | motors_on = false;
510 | }
511 | }
512 |
--------------------------------------------------------------------------------
/arduino/BROBOT_EVO3/Control.ino:
--------------------------------------------------------------------------------
1 | // BROBOT EVO 2 by JJROBOTS
2 | // SELF BALANCE ARDUINO ROBOT WITH STEPPER MOTORS
3 | // License: GPL v2
4 | // Control functions (PID controls, Steppers control...)
5 |
6 | // PD controller implementation(Proportional, derivative). DT in seconds
7 | float stabilityPDControl(float DT, float input, float setPoint, float Kp, float Kd)
8 | {
9 | float error;
10 | float output;
11 |
12 | error = setPoint - input;
13 |
14 | // Kd is implemented in two parts
15 | // The biggest one using only the input (sensor) part not the SetPoint input-input(t-1).
16 | // And the second using the setpoint to make it a bit more agressive setPoint-setPoint(t-1)
17 | float Kd_setPoint = constrain((setPoint - setPointOld), -8, 8); // We limit the input part...
18 | output = Kp * error + (Kd * Kd_setPoint - Kd * (input - PID_errorOld)) / DT;
19 | //Serial.print(Kd*(error-PID_errorOld));Serial.print("\t");
20 | //PID_errorOld2 = PID_errorOld;
21 | PID_errorOld = input; // error for Kd is only the input component
22 | setPointOld = setPoint;
23 | return (output);
24 | }
25 |
26 |
27 | // PI controller implementation (Proportional, integral). DT in seconds
28 | float speedPIControl(float DT, int16_t input, int16_t setPoint, float Kp, float Ki)
29 | {
30 | int16_t error;
31 | float output;
32 |
33 | error = setPoint - input;
34 | PID_errorSum += constrain(error, -ITERM_MAX_ERROR, ITERM_MAX_ERROR);
35 | PID_errorSum = constrain(PID_errorSum, -ITERM_MAX, ITERM_MAX);
36 |
37 | //Serial.println(PID_errorSum);
38 |
39 | output = Kp * error + Ki * PID_errorSum * DT; // DT is in miliseconds...
40 | return (output);
41 | }
42 |
43 |
44 | float positionPDControl(long actualPos, long setPointPos, float Kpp, float Kdp, int16_t speedM)
45 | {
46 | float output;
47 | float P;
48 |
49 | P = constrain(Kpp * float(setPointPos - actualPos), -115, 115); // Limit command
50 | output = P + Kdp * float(speedM);
51 | return (output);
52 | }
53 |
54 | // TIMER 1 : STEPPER MOTOR1 SPEED CONTROL
55 | ISR(TIMER1_COMPA_vect)
56 | {
57 | if (dir_M1 == 0) // If we are not moving we dont generate a pulse
58 | return;
59 | // We generate 1us STEP pulse
60 | SET(PORTE, 6); // STEP MOTOR 1
61 | //delay_1us();
62 | if (dir_M1 > 0)
63 | steps1--;
64 | else
65 | steps1++;
66 | CLR(PORTE, 6);
67 | }
68 | // TIMER 3 : STEPPER MOTOR2 SPEED CONTROL
69 | ISR(TIMER3_COMPA_vect)
70 | {
71 | if (dir_M2 == 0) // If we are not moving we dont generate a pulse
72 | return;
73 | // We generate 1us STEP pulse
74 | SET(PORTC, 6); // STEP MOTOR 2
75 | //delay_1us();
76 | if (dir_M2 > 0)
77 | steps2--;
78 | else
79 | steps2++;
80 | CLR(PORTC, 6);
81 | }
82 |
83 |
84 | // Set speed of Stepper Motor1
85 | // tspeed could be positive or negative (reverse)
86 | void setMotorSpeedM1(int16_t tspeed)
87 | {
88 | long timer_period;
89 | int16_t speed;
90 |
91 | // Limit max speed?
92 |
93 | // WE LIMIT MAX ACCELERATION of the motors
94 | if ((speed_M1 - tspeed) > MAX_ACCEL)
95 | speed_M1 -= MAX_ACCEL;
96 | else if ((speed_M1 - tspeed) < -MAX_ACCEL)
97 | speed_M1 += MAX_ACCEL;
98 | else
99 | speed_M1 = tspeed;
100 |
101 | #if MICROSTEPPING==16
102 | speed = speed_M1 * 50; // Adjust factor from control output speed to real motor speed in steps/second
103 | #else
104 | speed = speed_M1 * 25; // 1/8 Microstepping
105 | #endif
106 |
107 | if (speed == 0)
108 | {
109 | timer_period = ZERO_SPEED;
110 | dir_M1 = 0;
111 | }
112 | else if (speed > 0)
113 | {
114 | timer_period = 2000000 / speed; // 2Mhz timer
115 | dir_M1 = 1;
116 | SET(PORTD, 7); // DIR Motor 1 (Forward)
117 | }
118 | else
119 | {
120 | timer_period = 2000000 / -speed;
121 | dir_M1 = -1;
122 | CLR(PORTD, 7); // Dir Motor 1
123 | }
124 | if (timer_period > 65535) // Check for minimun speed (maximun period without overflow)
125 | timer_period = ZERO_SPEED;
126 |
127 | OCR1A = timer_period;
128 | // Check if we need to reset the timer...
129 | if (TCNT1 > OCR1A)
130 | TCNT1 = 0;
131 | }
132 |
133 | // Set speed of Stepper Motor2
134 | // tspeed could be positive or negative (reverse)
135 | void setMotorSpeedM2(int16_t tspeed)
136 | {
137 | long timer_period;
138 | int16_t speed;
139 |
140 | // Limit max speed?
141 |
142 | // WE LIMIT MAX ACCELERATION of the motors
143 | if ((speed_M2 - tspeed) > MAX_ACCEL)
144 | speed_M2 -= MAX_ACCEL;
145 | else if ((speed_M2 - tspeed) < -MAX_ACCEL)
146 | speed_M2 += MAX_ACCEL;
147 | else
148 | speed_M2 = tspeed;
149 |
150 | #if MICROSTEPPING==16
151 | speed = speed_M2 * 50; // Adjust factor from control output speed to real motor speed in steps/second
152 | #else
153 | speed = speed_M2 * 25; // 1/8 Microstepping
154 | #endif
155 |
156 | if (speed == 0)
157 | {
158 | timer_period = ZERO_SPEED;
159 | dir_M2 = 0;
160 | }
161 | else if (speed > 0)
162 | {
163 | timer_period = 2000000 / speed; // 2Mhz timer
164 | dir_M2 = 1;
165 | CLR(PORTD, 4); // Dir Motor2 (Forward)
166 | }
167 | else
168 | {
169 | timer_period = 2000000 / -speed;
170 | dir_M2 = -1;
171 | SET(PORTD, 4); // DIR Motor 2
172 | }
173 | if (timer_period > 65535) // Check for minimun speed (maximun period without overflow)
174 | timer_period = ZERO_SPEED;
175 |
176 | OCR3A = timer_period;
177 | // Check if we need to reset the timer...
178 | if (TCNT3 > OCR3A)
179 | TCNT3 = 0;
180 | }
181 |
182 |
--------------------------------------------------------------------------------
/arduino/BROBOT_EVO3/IR_sensor.ino:
--------------------------------------------------------------------------------
1 | void IR_Read() {
2 | uint16_t value = analogRead (IR_PIN);
3 | uint16_t range = get_gp2d12 (value);
4 | int temp_range = range / 10;
5 | if (temp_range < 100) {
6 | ir_distance = temp_range;
7 | }
8 | }
9 |
10 | uint16_t get_gp2d12 (uint16_t value) {
11 | if (value < 10) value = 10;
12 | return ((67870.0 / (value - 3.0)) - 40.0);
13 | }
14 |
15 |
--------------------------------------------------------------------------------
/arduino/BROBOT_EVO3/MPU6050.ino:
--------------------------------------------------------------------------------
1 | // BROBOT EVO 2 by JJROBOTS
2 | // SELF BALANCE ARDUINO ROBOT WITH STEPPER MOTORS
3 | // License: GPL v2
4 | // MPU9250/6050 IMU code
5 | // Read the accel and gyro registers and calculate a complementary filter for sensor fusion between gyros and accel
6 |
7 | // Code based on arduino.cc MPU6050 sample
8 | // Open Source / Public Domain
9 | //
10 | // Documentation:"MPU-6000 and MPU-6050 Register Map and Descriptions": RM-MPU-6000A.pdf
11 |
12 | // MPU6050 Register map
13 | #define MPU6050_AUX_VDDIO 0x01 // R/W
14 | #define MPU6050_SMPLRT_DIV 0x19 // R/W
15 | #define MPU6050_CONFIG 0x1A // R/W
16 | #define MPU6050_GYRO_CONFIG 0x1B // R/W
17 | #define MPU6050_ACCEL_CONFIG 0x1C // R/W
18 | #define MPU6050_FF_THR 0x1D // R/W
19 | #define MPU6050_FF_DUR 0x1E // R/W
20 | #define MPU6050_MOT_THR 0x1F // R/W
21 | #define MPU6050_MOT_DUR 0x20 // R/W
22 | #define MPU6050_ZRMOT_THR 0x21 // R/W
23 | #define MPU6050_ZRMOT_DUR 0x22 // R/W
24 | #define MPU6050_FIFO_EN 0x23 // R/W
25 | #define MPU6050_I2C_MST_CTRL 0x24 // R/W
26 | #define MPU6050_I2C_SLV0_ADDR 0x25 // R/W
27 | #define MPU6050_I2C_SLV0_REG 0x26 // R/W
28 | #define MPU6050_I2C_SLV0_CTRL 0x27 // R/W
29 | #define MPU6050_I2C_SLV1_ADDR 0x28 // R/W
30 | #define MPU6050_I2C_SLV1_REG 0x29 // R/W
31 | #define MPU6050_I2C_SLV1_CTRL 0x2A // R/W
32 | #define MPU6050_I2C_SLV2_ADDR 0x2B // R/W
33 | #define MPU6050_I2C_SLV2_REG 0x2C // R/W
34 | #define MPU6050_I2C_SLV2_CTRL 0x2D // R/W
35 | #define MPU6050_I2C_SLV3_ADDR 0x2E // R/W
36 | #define MPU6050_I2C_SLV3_REG 0x2F // R/W
37 | #define MPU6050_I2C_SLV3_CTRL 0x30 // R/W
38 | #define MPU6050_I2C_SLV4_ADDR 0x31 // R/W
39 | #define MPU6050_I2C_SLV4_REG 0x32 // R/W
40 | #define MPU6050_I2C_SLV4_DO 0x33 // R/W
41 | #define MPU6050_I2C_SLV4_CTRL 0x34 // R/W
42 | #define MPU6050_I2C_SLV4_DI 0x35 // R
43 | #define MPU6050_I2C_MST_STATUS 0x36 // R
44 | #define MPU6050_INT_PIN_CFG 0x37 // R/W
45 | #define MPU6050_INT_ENABLE 0x38 // R/W
46 | #define MPU6050_INT_STATUS 0x3A // R
47 | #define MPU6050_ACCEL_XOUT_H 0x3B // R
48 | #define MPU6050_ACCEL_XOUT_L 0x3C // R
49 | #define MPU6050_ACCEL_YOUT_H 0x3D // R
50 | #define MPU6050_ACCEL_YOUT_L 0x3E // R
51 | #define MPU6050_ACCEL_ZOUT_H 0x3F // R
52 | #define MPU6050_ACCEL_ZOUT_L 0x40 // R
53 | #define MPU6050_TEMP_OUT_H 0x41 // R
54 | #define MPU6050_TEMP_OUT_L 0x42 // R
55 | #define MPU6050_GYRO_XOUT_H 0x43 // R
56 | #define MPU6050_GYRO_XOUT_L 0x44 // R
57 | #define MPU6050_GYRO_YOUT_H 0x45 // R
58 | #define MPU6050_GYRO_YOUT_L 0x46 // R
59 | #define MPU6050_GYRO_ZOUT_H 0x47 // R
60 | #define MPU6050_GYRO_ZOUT_L 0x48 // R
61 | #define MPU6050_EXT_SENS_DATA_00 0x49 // R
62 | #define MPU6050_EXT_SENS_DATA_01 0x4A // R
63 | #define MPU6050_EXT_SENS_DATA_02 0x4B // R
64 | #define MPU6050_EXT_SENS_DATA_03 0x4C // R
65 | #define MPU6050_EXT_SENS_DATA_04 0x4D // R
66 | #define MPU6050_EXT_SENS_DATA_05 0x4E // R
67 | #define MPU6050_EXT_SENS_DATA_06 0x4F // R
68 | #define MPU6050_EXT_SENS_DATA_07 0x50 // R
69 | #define MPU6050_EXT_SENS_DATA_08 0x51 // R
70 | #define MPU6050_EXT_SENS_DATA_09 0x52 // R
71 | #define MPU6050_EXT_SENS_DATA_10 0x53 // R
72 | #define MPU6050_EXT_SENS_DATA_11 0x54 // R
73 | #define MPU6050_EXT_SENS_DATA_12 0x55 // R
74 | #define MPU6050_EXT_SENS_DATA_13 0x56 // R
75 | #define MPU6050_EXT_SENS_DATA_14 0x57 // R
76 | #define MPU6050_EXT_SENS_DATA_15 0x58 // R
77 | #define MPU6050_EXT_SENS_DATA_16 0x59 // R
78 | #define MPU6050_EXT_SENS_DATA_17 0x5A // R
79 | #define MPU6050_EXT_SENS_DATA_18 0x5B // R
80 | #define MPU6050_EXT_SENS_DATA_19 0x5C // R
81 | #define MPU6050_EXT_SENS_DATA_20 0x5D // R
82 | #define MPU6050_EXT_SENS_DATA_21 0x5E // R
83 | #define MPU6050_EXT_SENS_DATA_22 0x5F // R
84 | #define MPU6050_EXT_SENS_DATA_23 0x60 // R
85 | #define MPU6050_MOT_DETECT_STATUS 0x61 // R
86 | #define MPU6050_I2C_SLV0_DO 0x63 // R/W
87 | #define MPU6050_I2C_SLV1_DO 0x64 // R/W
88 | #define MPU6050_I2C_SLV2_DO 0x65 // R/W
89 | #define MPU6050_I2C_SLV3_DO 0x66 // R/W
90 | #define MPU6050_I2C_MST_DELAY_CTRL 0x67 // R/W
91 | #define MPU6050_SIGNAL_PATH_RESET 0x68 // R/W
92 | #define MPU6050_MOT_DETECT_CTRL 0x69 // R/W
93 | #define MPU6050_USER_CTRL 0x6A // R/W
94 | #define MPU6050_PWR_MGMT_1 0x6B // R/W
95 | #define MPU6050_PWR_MGMT_2 0x6C // R/W
96 | #define MPU6050_FIFO_COUNTH 0x72 // R/W
97 | #define MPU6050_FIFO_COUNTL 0x73 // R/W
98 | #define MPU6050_FIFO_R_W 0x74 // R/W
99 | #define MPU6050_WHO_AM_I 0x75 // R
100 |
101 | // Defines for the bits, to be able to change
102 | // between bit number and binary definition.
103 | // By using the bit number, programming the sensor
104 | // is like programming the AVR microcontroller.
105 | // But instead of using "(1< 65.5 LSB/deg/s
478 |
479 | // Complementary filter
480 | // We integrate the gyro rate value to obtain the angle in the short term and we take the accelerometer angle with a low pass filter in the long term...
481 | angle = 0.99 * (angle + x_gyro_value * dt) + 0.01 * accel_angle; // Time constant = 0.99*0.01(100hz)/(1-0.99) = 0.99, around 1 sec.
482 |
483 | // Gyro bias correction
484 | // We supose that the long term mean of the gyro_value should tend to zero (gyro_offset). This means that the robot is not continuosly rotating.
485 | int16_t correction = constrain(accel_t_gyro.value.x_gyro, x_gyro_offset - 10, x_gyro_offset + 10); // limit corrections...
486 | x_gyro_offset = x_gyro_offset * 0.9995 + correction * 0.0005; // Time constant of this correction is around 20 sec.
487 |
488 | //Serial.print(angle);
489 | //Serial.print(" ");
490 | //Serial.println(x_gyro_offset);
491 |
492 | return angle;
493 | }
494 |
495 | // Calibrate function. Take 100 readings (over 2 seconds) to calculate the gyro offset value. IMU should be steady in this process...
496 | void MPU6050_calibrate()
497 | {
498 | int i;
499 | long value = 0;
500 | float dev;
501 | int16_t values[100];
502 | bool gyro_cal_ok = false;
503 |
504 | delay(500);
505 | while (!gyro_cal_ok){
506 | Serial.println("Gyro calibration... DONT MOVE!");
507 | // we take 100 measurements in 4 seconds
508 | for (i = 0; i < 100; i++)
509 | {
510 | MPU6050_read_3axis();
511 | values[i] = accel_t_gyro.value.x_gyro;
512 | value += accel_t_gyro.value.x_gyro;
513 | delay(25);
514 | }
515 | // mean value
516 | value = value / 100;
517 | // calculate the standard deviation
518 | dev = 0;
519 | for (i = 0; i < 100; i++)
520 | dev += (values[i] - value) * (values[i] - value);
521 | dev = sqrt((1 / 100.0) * dev);
522 | Serial.print("offset: ");
523 | Serial.print(value);
524 | Serial.print(" stddev: ");
525 | Serial.println(dev);
526 | if (dev < 50.0)
527 | gyro_cal_ok = true;
528 | else
529 | Serial.println("Repeat, DONT MOVE!");
530 | }
531 | x_gyro_offset = value;
532 | // Take the first reading of angle from accels
533 | angle = atan2f((float)accel_t_gyro.value.y_accel, (float)accel_t_gyro.value.z_accel) * RAD2GRAD;
534 | }
535 |
536 | void MPU6050_setup()
537 | {
538 | int error;
539 | uint8_t c;
540 |
541 | error = MPU6050_read(MPU6050_WHO_AM_I, &c, 1);
542 | Serial.print("WHO_AM_I : ");
543 | Serial.print(c, HEX);
544 | Serial.print(", error = ");
545 | Serial.println(error, DEC);
546 |
547 | // RESET chip
548 | MPU6050_write_reg(MPU6050_PWR_MGMT_1, bit(MPU6050_DEVICE_RESET));
549 | delay(125);
550 | // Clear the 'sleep' bit to start the sensor and select clock source
551 | MPU6050_write_reg (MPU6050_PWR_MGMT_1, 0x01);
552 | //MPU6050_write_reg(MPU6050_PWR_MGMT_1,MPU6050_CLKSEL_Z);
553 |
554 | // Config Gyro scale (500deg/seg)
555 | MPU6050_write_reg(MPU6050_GYRO_CONFIG, MPU6050_FS_SEL_500);
556 | // Config Accel scale (2g)
557 | MPU6050_write_reg(MPU6050_ACCEL_CONFIG, MPU6050_AFS_SEL_2G);
558 | // Config Digital Low Pass Filter 10Hz
559 | MPU6050_write_reg(MPU6050_CONFIG, MPU6050_DLPF_10HZ);
560 | // Set Sample Rate to 100Hz
561 | MPU6050_write_reg(MPU6050_SMPLRT_DIV, 9); // 100Hz : Sample Rate = 1000 / (1 + SMPLRT_DIV) Hz
562 | // Data ready interrupt enable
563 | MPU6050_write_reg(MPU6050_INT_ENABLE, MPU6050_DATA_RDY_EN);
564 | // Clear the 'sleep' bit to start the sensor (and select clock source).
565 | MPU6050_write_reg (MPU6050_PWR_MGMT_1, 0x01);
566 |
567 | // Clear the 'sleep' bit to start the sensor.
568 | //MPU6050_write_reg(MPU6050_PWR_MGMT_1,MPU6050_CLKSEL_Z);
569 | //MPU6050_write_reg (MPU6050_PWR_MGMT_1, 0);
570 | }
571 |
572 | void MPU6050_read_3axis()
573 | {
574 | int error;
575 |
576 | // read 14 bytes (gyros, temp and accels)
577 | error = MPU6050_read (MPU6050_ACCEL_XOUT_H, (uint8_t *) &accel_t_gyro, sizeof(accel_t_gyro));
578 | if (error != 0) {
579 | //Serial.print("MPU6050 Error:");
580 | //Serial.println(error);
581 | }
582 | // swap bytes
583 | SWAP (accel_t_gyro.reg.x_accel_h, accel_t_gyro.reg.x_accel_l);
584 | SWAP (accel_t_gyro.reg.y_accel_h, accel_t_gyro.reg.y_accel_l);
585 | SWAP (accel_t_gyro.reg.z_accel_h, accel_t_gyro.reg.z_accel_l);
586 | SWAP (accel_t_gyro.reg.t_h, accel_t_gyro.reg.t_l);
587 | SWAP (accel_t_gyro.reg.x_gyro_h, accel_t_gyro.reg.x_gyro_l);
588 | SWAP (accel_t_gyro.reg.y_gyro_h, accel_t_gyro.reg.y_gyro_l);
589 | SWAP (accel_t_gyro.reg.z_gyro_h, accel_t_gyro.reg.z_gyro_l);
590 |
591 | /*
592 | // Print the raw acceleration values
593 | Serial.print("ACC:");
594 | Serial.print(accel_t_gyro.value.x_accel, DEC);
595 | Serial.print(",");
596 | Serial.print(accel_t_gyro.value.y_accel, DEC);
597 | Serial.print(",");
598 | Serial.print(accel_t_gyro.value.z_accel, DEC);
599 | Serial.println();
600 |
601 | // Print the raw gyro values.
602 | Serial.print("GY:");
603 | Serial.print(accel_t_gyro.value.x_gyro, DEC);
604 | Serial.print(",");
605 | Serial.print(accel_t_gyro.value.y_gyro, DEC);
606 | Serial.print(",");
607 | Serial.print(accel_t_gyro.value.z_gyro, DEC);
608 | Serial.print(",");
609 | Serial.println();
610 | */
611 | }
612 |
613 | void MPU6050_read_1axis()
614 | {
615 | int error;
616 |
617 | // read X accel
618 | error = MPU6050_read(MPU6050_ACCEL_XOUT_H, (uint8_t *) &accel_t_gyro.reg.x_accel_h, 6);
619 | if (error != 0) {
620 | //Serial.print("MPU6050 Error:");
621 | //Serial.println(error);
622 | }
623 | // read X gyro
624 | error = MPU6050_read(MPU6050_GYRO_XOUT_H, (uint8_t *) &accel_t_gyro.reg.x_gyro_h, 2);
625 | if (error != 0) {
626 | //Serial.print("MPU6050 Error:");
627 | //Serial.println(error);
628 | }
629 | SWAP (accel_t_gyro.reg.x_accel_h, accel_t_gyro.reg.y_accel_l);
630 | SWAP (accel_t_gyro.reg.z_accel_h, accel_t_gyro.reg.z_accel_l);
631 | SWAP (accel_t_gyro.reg.x_gyro_h, accel_t_gyro.reg.x_gyro_l);
632 |
633 | // Print values
634 | Serial.print("axis:");
635 | Serial.print(accel_t_gyro.value.y_accel, DEC);
636 | Serial.print(",");
637 | Serial.println(accel_t_gyro.value.x_gyro, DEC);
638 | }
639 |
640 | // return true on new data available
641 | bool MPU6050_newData()
642 | {
643 | uint8_t status;
644 | int error;
645 |
646 | error = MPU6050_read(MPU6050_INT_STATUS, &status, 1);
647 | if (error != 0) {
648 | //Serial.print("MPU6050 Error:");
649 | //Serial.println(error);
650 | }
651 | if (status & (0b00000001)) // Data ready?
652 | return true;
653 | else
654 | return false;
655 | }
656 |
657 | // MPU6050_read n bytes
658 | int MPU6050_read(int start, uint8_t *buffer, int size)
659 | {
660 | int i, n, error;
661 |
662 | Wire.beginTransmission(MPU6050_I2C_ADDRESS);
663 | n = Wire.write(start);
664 | if (n != 1)
665 | return (-10);
666 |
667 | n = Wire.endTransmission(false); // hold the I2C-bus
668 | if (n != 0)
669 | return (n);
670 |
671 | // Third parameter is true: relase I2C-bus after data is read.
672 | Wire.requestFrom(MPU6050_I2C_ADDRESS, size, true);
673 | i = 0;
674 | while (Wire.available() && i < size)
675 | {
676 | buffer[i++] = Wire.read();
677 | }
678 | if ( i != size)
679 | return (-11);
680 |
681 | return (0); // return : no error
682 | }
683 |
684 |
685 | // MPU6050_write n bytes
686 | int MPU6050_write(int start, const uint8_t *pData, int size)
687 | {
688 | int n, error;
689 |
690 | Wire.beginTransmission(MPU6050_I2C_ADDRESS);
691 | n = Wire.write(start); // write the start address
692 | if (n != 1)
693 | return (-20);
694 |
695 | n = Wire.write(pData, size); // write data bytes
696 | if (n != size)
697 | return (-21);
698 |
699 | error = Wire.endTransmission(true); // release the I2C-bus
700 | if (error != 0)
701 | return (error);
702 |
703 | return (0); // return : no error
704 | }
705 |
706 | // --------------------------------------------------------
707 | // MPU6050_write_reg (only 1 byte)
708 | int MPU6050_write_reg(int reg, uint8_t data)
709 | {
710 | int error;
711 |
712 | error = MPU6050_write(reg, &data, 1);
713 |
714 | return (error);
715 | }
716 |
717 |
--------------------------------------------------------------------------------
/arduino/BROBOT_EVO3/autonomous.ino:
--------------------------------------------------------------------------------
1 | void autonomousMode()
2 | {
3 | if (autonomous_mode_status==0) // Walking
4 | {
5 | if (throttle < 75) //125
6 | throttle = throttle + 1; //8
7 | if (throttle > 75) //125
8 | throttle = 75; //125
9 | if (ir_distance < OBSTACLE_DISTANCE_MIN) // obstacle near robot
10 | {
11 | autonomous_mode_status=1;
12 | autonomous_mode_counter=0;
13 | }
14 | // If something stop the robot, we start an obstacle avoiding
15 | if ((throttle == 75)&&(estimated_speed_filtered < 10))
16 | {
17 | autonomous_mode_counter++;
18 | if (autonomous_mode_counter>200)
19 | {
20 | autonomous_mode_status=1;
21 | autonomous_mode_counter=0;
22 | }
23 | }
24 | }
25 | else if (autonomous_mode_status==1) // Obstacle: Waiting to stop
26 | {
27 | autonomous_mode_counter++;
28 | throttle = throttle - 2;
29 | if (throttle < 0)
30 | throttle = 0;
31 | if (autonomous_mode_counter > 250) // Wait 1 second
32 | {
33 | autonomous_mode_status=2;
34 | autonomous_mode_counter=0;
35 | autonomous_mode_distance = WALK_DISTANCE_MIN;
36 | throttle = 0;
37 | if ((millis() % 2)==0)
38 | steering = 20;
39 | else
40 | steering = -20;
41 | }
42 | }
43 | else if (autonomous_mode_status==2) // Obstacle Steering
44 | {
45 | autonomous_mode_counter++;
46 | if (ir_distance > autonomous_mode_distance)
47 | {
48 | autonomous_mode_status = 3; // We find a way...
49 | autonomous_mode_counter = 0;
50 | steering = -steering; // rectification in steering
51 | }
52 | else if (autonomous_mode_counter > 600)
53 | {
54 | autonomous_mode_distance--;
55 | autonomous_mode_counter = 500;
56 | }
57 | else if (autonomous_mode_counter == 500) // if we don´t find an exit in 2 seconds we reverse the steering command
58 | {
59 | steering = -steering;
60 | }
61 | }
62 | else if (autonomous_mode_status==3) // Small rectification in steering
63 | {
64 | autonomous_mode_counter++;
65 | if (autonomous_mode_counter > 20) // 0.1 seconds rectification
66 | {
67 | autonomous_mode_status = 0; // We find a way...
68 | autonomous_mode_counter=0;
69 | steering = 0;
70 | }
71 | }
72 | else
73 | {
74 | throttle = 0;
75 | steering = 0;
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/arduino/BROBOT_EVO3/bluetooth.ino:
--------------------------------------------------------------------------------
1 | char BluetoothData; // the Bluetooth data received
2 | float pad_x,pad_y; //control pad values sent from Android device
3 | //boolean acc_on=false; //Flag to inidicate if to use accelerometer values
4 | //int roll,pitch; //roll and pitch sent from Android device
5 |
6 | //Serial1.print("*LR0G255B0*"); // Virtual LED example
7 |
8 | void BT_MsgSend()
9 | {
10 | Serial1.print("*P"+String(angle_adjusted+90)+"*");
11 | Serial1.print("*S"+String(estimated_speed_filtered+500)+"*");
12 | if (acro_on == true)
13 | Serial1.print("*WR0G255B0*");
14 | else
15 | Serial1.print("*WR0G0B0*");
16 | if (auto_on == true){
17 | Serial1.print("*AR0G255B0*");
18 | }
19 | else{
20 | Serial1.print("*AR0G0B0*");
21 | }
22 | if (ir_on == true){
23 | Serial1.print("*E"+String(ir_distance)+"*"); // Sonar distance (cm)
24 | if (ir_distance <= OBSTACLE_DISTANCE_MIN){
25 | Serial1.print("*eR255G0B0*");
26 | }
27 | else if (ir_distance <= WALK_DISTANCE_MIN){
28 | Serial1.print("*eR255G255B0*");
29 | }
30 | else{
31 | Serial1.print("*eR0G255B0*");
32 | }
33 | }
34 | else{
35 | Serial1.print("*E0*"); // Sonar send zero
36 | Serial1.print("*eR0G0B0*");
37 | }
38 | if (motors_on == true){
39 | Serial1.print("*MR0G255B0*");
40 | }
41 | else{
42 | Serial1.print("*MR0G0B0*");
43 | }
44 | }
45 |
46 | void BT_MsgRead()
47 | {
48 |
49 | //Check Bluetooth for new Instructions
50 | if (Serial1.available())
51 | {
52 | BluetoothData=Serial1.read(); //Get next character from bluetooth
53 |
54 | // //**** Accelerometer - sends 'Aroll,pitch*' every 150 ms
55 | // if(BluetoothData=='A')
56 | // {
57 | // roll=Serial1.parseInt();
58 | // while (BluetoothData!='*')
59 | // {
60 | // if (Serial1.available())
61 | // {
62 | // BluetoothData=Serial1.read(); //Get next character from bluetooth
63 | // if(BluetoothData==',')
64 | // {
65 | // pitch=Serial1.parseInt();
66 | // }
67 | // }
68 | // }
69 | // }
70 |
71 | if(BluetoothData=='W')
72 | {
73 | if (acro_on == false){
74 | acro_on = true;
75 | Serial.println("Pro mode ON");
76 | // Change to PRO settings
77 | max_throttle = MAX_THROTTLE_PRO;
78 | max_steering = MAX_STEERING_PRO;
79 | max_target_angle = MAX_TARGET_ANGLE_PRO;
80 | }
81 | else{
82 | acro_on = false;
83 | Serial.println("Pro mode OFF");
84 | // Change to NORMAL settings
85 | max_throttle = MAX_THROTTLE;
86 | max_steering = MAX_STEERING;
87 | max_target_angle = MAX_TARGET_ANGLE;
88 | }
89 |
90 | }
91 |
92 | if(BluetoothData=='A')
93 | {
94 | if (auto_on == false){
95 | auto_on = true;
96 | acro_on = false;
97 | ir_on = true;
98 | autonomous_mode_status = 0;
99 | autonomous_mode_counter = 0;
100 | // Change to NORMAL settings
101 | max_throttle = MAX_THROTTLE;
102 | max_steering = MAX_STEERING;
103 | max_target_angle = MAX_TARGET_ANGLE;
104 | Serial.println("Autonomous ON");
105 | }
106 | else{
107 | auto_on = false;
108 | acro_on = false;
109 | ir_on = false;
110 | // Change to NORMAL settings
111 | max_throttle = MAX_THROTTLE;
112 | max_steering = MAX_STEERING;
113 | max_target_angle = MAX_TARGET_ANGLE;
114 | throttle = 0;
115 | steering = 0;
116 | Serial.println("Autonomous OFF");
117 | }
118 | }
119 |
120 | if(BluetoothData=='E')
121 | {
122 | if (ir_on == false){
123 | ir_on = true;
124 | Serial.println("SONAR ON");
125 | }
126 | else{
127 | ir_on = false;
128 | Serial.println("SONAR OFF");
129 | }
130 | }
131 |
132 | if(BluetoothData=='S')
133 | {
134 | servo_on = true;
135 | Serial.println("SERVO ON");
136 | }
137 | // else
138 | // {
139 | // servo_on = false;
140 | // }
141 | if(BluetoothData=='s')
142 | {
143 | servo_on = false;
144 | Serial.println("SERVO OFF");
145 | }
146 |
147 | // if(BluetoothData=='M')
148 | // {
149 | // if (motors_on == false){
150 | // Motors_Enable(true);
151 | // Serial.println("MOTORS ON");
152 | // }
153 | // else{
154 | // Motors_Enable(false);
155 | // Serial.println("MOTORS OFF");
156 | // }
157 | // }
158 |
159 | // //**** LEDs
160 | // if(BluetoothData=='P') Serial.println(BluetoothData);
161 | // if(BluetoothData=='p') Serial.println(BluetoothData);
162 | // if(BluetoothData=='Q') Serial.println(BluetoothData);
163 | // if(BluetoothData=='q') Serial.println(BluetoothData);
164 | // if(BluetoothData=='R') Serial.println(BluetoothData);
165 | // if(BluetoothData=='r') Serial.println(BluetoothData);
166 | // if(BluetoothData=='S') Serial.println(BluetoothData);
167 | // if(BluetoothData=='s') Serial.println(BluetoothData);
168 |
169 | //**** Control Pad - Sends 'X__,Y___*' every 150ms
170 | if(BluetoothData=='X')
171 | {
172 | pad_x=Serial1.parseInt();
173 | pad_x=pad_x/10;
174 | steering = pad_x - 0.5;
175 | if (steering > 0)
176 | {
177 | steering = (steering * steering + 0.5 * steering) * max_steering;
178 | }
179 | else
180 | {
181 | steering = (-steering * steering + 0.5 * steering) * max_steering;
182 | }
183 | // Serial.print("Pad X : "); Serial.print(pad_x);
184 | // Serial.print("\tSteering : "); Serial.println(steering);
185 | while (BluetoothData!='*')
186 | {
187 | if (Serial1.available())
188 | {
189 | BluetoothData=Serial1.read(); //Get next character from bluetooth
190 | if(BluetoothData=='Y')
191 | {
192 | pad_y=Serial1.parseInt();
193 | pad_y=pad_y/10;
194 | // pad_y=-pad_y+1;
195 | throttle = (pad_y - 0.5) * max_throttle;
196 | throttle=-throttle;
197 | // Serial.print("Pad Y : "); Serial.print(pad_y);
198 | // Serial.print("\tThrottle : "); Serial.println(throttle);
199 | }
200 | }
201 | }
202 | }
203 |
204 | // //**** Sliders controls
205 | // if(BluetoothData=='X')
206 | // {
207 | // pad_x=Serial1.parseInt();
208 | // pad_x=pad_x/100;
209 | // steering = pad_x - 0.5;
210 | // if (steering > 0)
211 | // {
212 | // steering = (steering * steering + 0.5 * steering) * max_steering;
213 | // }
214 | // else
215 | // {
216 | // steering = (-steering * steering + 0.5 * steering) * max_steering;
217 | // }
218 | // Serial.print("Pad X : "); Serial.print(pad_x);
219 | // Serial.print("\tSteering : "); Serial.println(steering);
220 | // }
221 | // if(BluetoothData=='Y')
222 | // {
223 | // pad_y=Serial1.parseInt();
224 | // pad_y=pad_y/100;
225 | // throttle = (pad_y - 0.5) * max_throttle;
226 | // Serial.print("Pad Y : "); Serial.print(pad_y);
227 | // Serial.print("\tThrottle : "); Serial.println(throttle);
228 | // }
229 |
230 | // //**** Control Pad on Left
231 | // if(BluetoothData=='0') Serial.println("Release"); //Release
232 | // if(BluetoothData=='1') Serial.println("Up"); //Up
233 | // if(BluetoothData=='3') Serial.println("Down"); //Down
234 | // if(BluetoothData=='4') Serial.println("Left"); //Left
235 | // if(BluetoothData=='2') Serial.println("Right"); //Right
236 | }
237 | }
238 |
239 |
--------------------------------------------------------------------------------
/arduino/BROBOT_EVO3/servo.ino:
--------------------------------------------------------------------------------
1 | // Default servo definitions
2 | //#define SERVO_AUX_NEUTRAL 1500 // Servo neutral position
3 | //#define SERVO_MIN_PULSEWIDTH 700
4 | //#define SERVO_MAX_PULSEWIDTH 2300
5 |
6 | // Init servo on T4 timer. Output OC4B / PB6 (Micro / Leonardo Pin10)
7 | // We configure the Timer4 for 11 bits PWM (enhanced precision) and 16.3ms period (OK for most servos)
8 | // Resolution: 8us per step (this is OK for servos, around 175 steps for typical servo)
9 | void BROBOT_initServo()
10 | {
11 | int temp;
12 |
13 | // Initialize Timer4 as Fast PWM
14 | TCCR4A = (1< 11 bits
19 |
20 | temp = 1500>>3;
21 | TC4H = temp >> 8;
22 | OCR4B = temp & 0xff;
23 |
24 | // Reset timer
25 | TC4H = 0;
26 | TCNT4 = 0;
27 |
28 | // Set TOP to 1023 (10 bit timer)
29 | TC4H = 3;
30 | OCR4C = 0xFF;
31 |
32 | // OC4B = PB6 (Pin10)
33 | // Set pin as output
34 | DDRB |= (1 << 6); // OC4B = PB6 (Pin10 on Leonardo board)
35 |
36 | //Enable OC4B / PB6 (Pin10) output
37 | TCCR4A |= (1<>3; // Check max values and Resolution: 8us
58 | // 11 bits => 3 MSB bits on TC4H, LSB bits on OCR4B
59 | TC4H = pwm>>8;
60 | OCR4B = pwm & 0xFF;
61 | }
62 |
63 |
--------------------------------------------------------------------------------
/electronics/README.md:
--------------------------------------------------------------------------------
1 | # Android Controlled Self Balancing Robot - electronic circuit
2 |
3 | This project is on Hackaday.io and takes part in the Hackaday Prize 2017 : https://hackaday.io/project/25835-android-controlled-balancing-robot
4 | **Like this project on Hackaday.io and help me build new cool things !**
5 |
6 | # Donation
7 | If this project help you reduce time to develop, you can give me a cup of coffee :)
8 |
9 | [](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=stephgsec%2debay%40yahoo%2efr&lc=US&item_name=St%c3%a9phane%20Guerreau¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted)
10 |
11 | # LICENSE
12 |  ")
13 |
14 | * You are free to:
15 | * **Share** — copy and redistribute the material in any medium or format
16 |
17 | * Under the following terms:
18 | * **Attribution** — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
19 | * **NonCommercial** — You may not use the material for commercial purposes.
20 | * **NoDerivatives** — If you remix, transform, or build upon the material, you may not distribute the modified material.
21 | * **No additional restrictions** — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
22 |
--------------------------------------------------------------------------------
/electronics/Schematic.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ArcadiaLabs/balancing_robot/14918a912a41ea9b97aa3dbc5e48ac8bb0952144/electronics/Schematic.pdf
--------------------------------------------------------------------------------
/electronics/by-nc-nd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ArcadiaLabs/balancing_robot/14918a912a41ea9b97aa3dbc5e48ac8bb0952144/electronics/by-nc-nd.png
--------------------------------------------------------------------------------
/overview_small.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ArcadiaLabs/balancing_robot/14918a912a41ea9b97aa3dbc5e48ac8bb0952144/overview_small.jpg
--------------------------------------------------------------------------------