├── 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 | ![Overview](overview_small.jpg?raw=true "Overview") 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 | [![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](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 | ![3D model](robot_3d.png?raw=true "3D model") 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 | [![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](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 | ![Attribution-NonCommercial-NoDerivs 2.0 Generic (CC BY-NC-ND 2.0)](by-nc-nd.png?raw=true "Attribution-NonCommercial-NoDerivs 2.0 Generic (CC BY-NC-ND 2.0) ") 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 | ![Android interface](screenshot.png?raw=true "Android interface") 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 | [![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](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 | [![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](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 | ![Attribution-NonCommercial-NoDerivs 2.0 Generic (CC BY-NC-ND 2.0)](by-nc-nd.png?raw=true "Attribution-NonCommercial-NoDerivs 2.0 Generic (CC BY-NC-ND 2.0) ") 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 --------------------------------------------------------------------------------