OCCRA
Go to Post MORAL: Always wear safety glasses when you're putting on your safety glasses. ;) - Joel Glidden [more]
Home
Go Back   Chief Delphi > Technical > Technical Discussion
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
Reply
Thread Tools Rate Thread Display Modes
  #1   Spotlight this post!  
Unread 09-20-2018, 11:38 AM
Wayne TenBrink's Avatar
Wayne TenBrink Wayne TenBrink is offline
<< (2008 Game Piece)
FRC #1918 (NC Gears)
Team Role: Engineer
 
Join Date: Apr 2007
Rookie Year: 2006
Location: Fremont, MI, USA
Posts: 574
Wayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond repute
Driver Control Options for Swerve

For teams using swerve, what driver control options have been demonstrated, and what are their pro's and con's?

For example, I have seen "field oriented" systems where the driver console has two joysticks (or a 2-joystick game controller) - one to control the X-Y direction of chassis travel, and the other to control the rate & direction of chassis rotation.

Do any teams control chassis rotation with some sort of absolute rotary encoder that lets the driver control the angular orientation "set point" as opposed to controlling the rotation rate?
__________________
NC Gears (Newaygo County Geeks Engineering Awesome Robotic Solutions)

FRC 1918 (Competing at FIM Traverse City and Kentwood events in 2018)
FTC 6043, 7911 & 13554
Reply With Quote
  #2   Spotlight this post!  
Unread 09-20-2018, 02:31 PM
gerthworm's Avatar
gerthworm gerthworm is offline
Making the 1's and 0's
FRC #1736 (Robot Casserole)
Team Role: Mentor
 
Join Date: Jan 2015
Rookie Year: 2015
Location: Peoria, IL
Posts: 665
gerthworm has a reputation beyond reputegerthworm has a reputation beyond reputegerthworm has a reputation beyond reputegerthworm has a reputation beyond reputegerthworm has a reputation beyond reputegerthworm has a reputation beyond reputegerthworm has a reputation beyond reputegerthworm has a reputation beyond reputegerthworm has a reputation beyond reputegerthworm has a reputation beyond reputegerthworm has a reputation beyond repute
Re: Driver Control Options for Swerve

Quote:
Originally Posted by Wayne TenBrink View Post
Do any teams control chassis rotation with some sort of absolute rotary encoder that lets the driver control the angular orientation "set point" as opposed to controlling the rotation rate?
Definitely a nifty idea. I think the difficulty would be that my hand can't quickly rotate through much more than 180 degrees, best case scenario (usually less). I think the time-to-achieve-motion metric for such a control would be worse than a velocty input.

The other thing to consider is that humans generally provide velocity inputs to machines (most FPS video games, vehicles, etc.). I would guess that the average drive team would take at least a bit of time to get used to it.

You'd also need the seek time to be pretty darn fast, otherwise you'd have a hard time preciving exactly where the robot would stop. Yes, in theory it's where you turned the knob to. However, I would think it's the same thing as a thermostat: When folks want a room to cool down faster, they generally turn the setpoint as low as possible. This doesn't actually make it cool any faster, just changes where it stops cooling. I'd take a guess that your driveteam might experience a similar phenomenon on this controller? Just my gut instinct though.

I'm also wondering how such a system would perform if you're flying at full speed down the field, and need to swerve 3 ft to one side to avoid another robot. Is it intuitive and repeatable to input this quick angular adjustment?

Historically I think the either field-relative or robot-relative two-joystick setup has been dominant since it's aligned well with how video games usally work, and tends to be pretty intuitive. I've seen some teams with a steering wheel that seems unweildy, but I'm sure some folks like it.


Here's an idea I feel would be pretty cool: a touchscreen where taps are interpreted as a delta in angular setpoint. Overlay this touch detection over your forward-facing driver camera. If you map the pixels to delta-angle properly, you could simply touch on your camera feed where you want the front of the robot pointed, and it could adjust

FYI: The traditional challenge I've known with field-oriented anything: Keeping track of the absolute angle of the robot over time. Gyros tend to drift, and drift worse when you're getting hit and banged around. Often there has to be a "Reset" mechanism where you can square-up against a wall and recal (or re-do the offset) on the gyro, but this takes valuable time during the match. Any drift will cause the robot's notion of the field reference frame to rotate over time, which can lead to some interesting and possibly highly unintuitive behavior seen by the drivers.

Last edited by gerthworm : 09-20-2018 at 02:37 PM.
Reply With Quote
  #3   Spotlight this post!  
Unread 09-20-2018, 02:45 PM
Nick_Coussens's Avatar
Nick_Coussens Nick_Coussens is offline
OCCRA GDC Member
AKA: FUN - Michigan Region Recap Host
FRC #0033 (Killer Bees)
Team Role: Mentor
 
Join Date: Jun 2010
Rookie Year: 2007
Location: Ferndale, MI
Posts: 645
Nick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond repute
Re: Driver Control Options for Swerve

Quote:
Originally Posted by Wayne TenBrink View Post
For teams using swerve, what driver control options have been demonstrated, and what are their pro's and con's?

For example, I have seen "field oriented" systems where the driver console has two joysticks (or a 2-joystick game controller) - one to control the X-Y direction of chassis travel, and the other to control the rate & direction of chassis rotation.

Do any teams control chassis rotation with some sort of absolute rotary encoder that lets the driver control the angular orientation "set point" as opposed to controlling the rotation rate?
Last year, we ran both field-centric translation and field-centric steering. This means that on our Logitech/XBOX controller, the left joystick controlled the translation, and if the driver pointed it up-left for example, the drive would translate away from the driver station and towards the left side of the driver's perspective.

The steering was also field centric and controlled by the right joystick, where if the joystick was pointed up-left, then the "front" of the robot, in this case our intake side, would point away from the alliance station and towards the left side of the driver's perspective.

10/10 recommend using field-centric translation.

3/10 recommend using field-centric steering/rotation.

I would have put a number lower then 3, but it is possible it could have been better if we did some better controls things with it. But overall we thought it would be great in theory, but in reality it was very hard to drive it that way. It was a mistake on our part not to try this method more in the off-season before using it for comp season, instead of sticking with the more traditional robot-centric steering.

We switched it to robot-centric steering after IRI, and both our old and new drivers said it was considerably easier to control. I too tried it with field-centric and robot-centric, and the robot-centric was much better (disclaimer, all swerve driving I had experienced prior was robot-centric so I may be inherently biased. However both our old and new driver had never driven any swerve drive before ours).
__________________
FUN: InFiMidation, Show Host (2018-Present)
OCCRA: Game Design Committee (2018-Present)

FRC/VEX 33: Killer Bees, Design/Strategy Mentor (2018-Present)

FRC/VEX 2451: PWNAGE, Lead Strategy/Scouting Mentor (2013-2017)
FRC/VEX 2451: PWNAGE, Team President/Driver/Student (2009-2012)
Reply With Quote
  #4   Spotlight this post!  
Unread 09-22-2018, 09:09 AM
hamac2003 hamac2003 is offline
Registered User
AKA: Harrison McIntyre
FRC #4004 (M.A.R.S. Rovers)
Team Role: Programmer
 
Join Date: Jan 2017
Rookie Year: 2013
Location: Michigan
Posts: 5
hamac2003 is an unknown quantity at this point
Re: Driver Control Options for Swerve

Last year to control our swerve drive, my team used a large Logitech joystick which you would point in the direction you wanted the robot to move (field centric control). If you pointed the joystick away from yourself, the robot drove away from the driver station, if you pointed it left, it drove to the left relative to the driver station etc. And instead of using another joystick for the rotational value, we used a custom dial made up of a small rubber wheel and a potentiometer. This dial had springs inside it that would snap the dial back to it's zero position once it was released (like a joystick). This dial provided our driver station with an analog input that we fed to the robot as the rotational value. You would turn the dial clockwise to rotate the robot clockwise and vise versa. Then you would just let go of the dial when you were done turning. This method worked out very well for our team, the only issue we had was occasionally the gyro that kept track of our rotational position relative to the driver station would drift, and the values would become offset. And as gerthworm mentioned, we did have a reset method. There was a button on our driver's joystick that would reset the gyro's zero position. So if our driver noticed any drift in the gyro's position, all he had to do was rotate the robot in place to where the front was pointing away from the driver station, hit the reset button, and swerve on! Granted, this takes a few seconds to execute, but I think that it is a small price to pay for field centric swerve driving.

We also had another button on the driver's joystick that, when held down, would switch the driving mode from field centric, to robot centric. This was very useful when our driver could see a power cube right in front of the intake arms, because he could just hold down that button, push the joystick forward (which would move the robot forward, because it is now in robot centric drive), and he would have the cube. Then he could release the button, and the robot would switch back to field centric drive seamlessly.
Reply With Quote
  #5   Spotlight this post!  
Unread 10-10-2018, 04:21 AM
malkier22 malkier22 is offline
Registered User
FRC #3011
Team Role: Mentor
 
Join Date: Dec 2012
Rookie Year: 2012
Location: Wiesbaden
Posts: 3
malkier22 is an unknown quantity at this point
Re: Driver Control Options for Swerve

Team 3011 has been swerve centric now for just over 5 years. As for controlling, we use a single xbox controller in field centric mode. The left joystick controls x and y translation and the right joystick controls speed of rotation, field left and right. We have since added preset rotation angle buttons to the second controller to align the robot to field elements. This addition was first introduced in steamworks. The second driver identifies the desired rotational angle of the robot at the end of the current move and engages that rotation. The primary driver looses no control or speed of the robot while it is rotating making the process seamless. Unless the primary driver is doing some fancy spin moves to get out of a jam, the secondary driver does all of our robot's rotational control.
Reply With Quote
  #6   Spotlight this post!  
Unread 10-10-2018, 07:38 AM
Xand10's Avatar
Xand10 Xand10 is offline
Team Captain
AKA: Xander
FRC #1023 (Bedford Express)
Team Role: Programmer
 
Join Date: Oct 2016
Rookie Year: 2012
Location: Temperence MI
Posts: 32
Xand10 is just really niceXand10 is just really niceXand10 is just really niceXand10 is just really niceXand10 is just really nice
Re: Driver Control Options for Swerve

Although it is purely theoretical I have always wondered if a 3D mouse, similar to what some CAD stations utilize, could be used to control a swerve drive intuitively. The rotation of the robot would be based on rotating the mouse, the translation of the robot based on the direction the mouse is pushed. If the mouse button were to be pressed down it could switch the controls between field centric and robot centric.

Last edited by Xand10 : 10-10-2018 at 08:07 AM. Reason: Spelling
Reply With Quote
  #7   Spotlight this post!  
Unread 10-10-2018, 07:58 AM
anthonyttu anthonyttu is offline
Texas Instruments Engineer
AKA: Master Chief
FRC #5417 (Eagle Robotics)
Team Role: Mentor
 
Join Date: Aug 2008
Rookie Year: 2008
Location: Dallas
Posts: 77
anthonyttu is a jewel in the roughanthonyttu is a jewel in the roughanthonyttu is a jewel in the roughanthonyttu is a jewel in the rough
Re: Driver Control Options for Swerve

I also thought a 3D mouse would work well but the one I was able to test with didn't have enough range to be easy to control. The sensitive was easily turn down, but from 0 to max in any direction isn't much travel. It was like trying to drive with a D pad. We will stick to Xbox controllers that don't require any teaching or practice for students to use.
Reply With Quote
  #8   Spotlight this post!  
Unread 10-10-2018, 08:07 AM
Mark Wasserman's Avatar
Mark Wasserman Mark Wasserman is offline
Registered User
FRC #2767 (Stryke Force)
Team Role: Mentor
 
Join Date: May 2017
Rookie Year: 2010
Location: kalamazoo
Posts: 164
Mark Wasserman has much to be proud ofMark Wasserman has much to be proud ofMark Wasserman has much to be proud ofMark Wasserman has much to be proud ofMark Wasserman has much to be proud ofMark Wasserman has much to be proud ofMark Wasserman has much to be proud ofMark Wasserman has much to be proud ofMark Wasserman has much to be proud of
Re: Driver Control Options for Swerve

Quote:
Originally Posted by Wayne TenBrink View Post
Do any teams control chassis rotation with some sort of absolute rotary encoder that lets the driver control the angular orientation "set point" as opposed to controlling the rotation rate?
If I understand this right, if you implement this control scheme, any time the driver lets go of the sticks and they return to neutral position, the robot will snap back to pointing downfield. I don't think that is a good thing. If the robot gets trapped or held in a position other than straight down the field and the driver lets go of the sticks the robot will quietly fight to straighten up and then you'll get phantom movements or hot motors. I would stick with the traditional field centric setup and get your driver to practice, practice, practice. Practice is the main ingredient in our secret sauce. If you have the same driver in 2019, I'm confident she'll make it dance like our driver does.
__________________
Not fast swerve, good swerve driven quickly.
Slow is Smooth, Smooth is Fast
Reply With Quote
  #9   Spotlight this post!  
Unread 10-10-2018, 10:00 AM
Chris is me's Avatar
Chris is me Chris is me is offline
on a break
AKA: Pinecone
no team (formerly FRC 3929, 228, 2791)
Team Role: Mentor
 
Join Date: Dec 2008
Rookie Year: 2006
Location: Chicago, IL
Posts: 8,537
Chris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond repute
Re: Driver Control Options for Swerve

Quote:
Originally Posted by Mark Wasserman View Post
If I understand this right, if you implement this control scheme, any time the driver lets go of the sticks and they return to neutral position, the robot will snap back to pointing downfield. I don't think that is a good thing. If the robot gets trapped or held in a position other than straight down the field and the driver lets go of the sticks the robot will quietly fight to straighten up and then you'll get phantom movements or hot motors. I would stick with the traditional field centric setup and get your driver to practice, practice, practice. Practice is the main ingredient in our secret sauce. If you have the same driver in 2019, I'm confident she'll make it dance like our driver does.
I think he is referring to using an absolute rotary encoder as the driver input for heading - as in, the robot will attempt to match the angle of the encoder the driver is manipulating. I think it's an intriguing idea that could make control even more intuitive in ideal circumstances. But would need some way to be turned off, or only active when a button is being held down, etc. to avoid the robot taking an eternity to twist into a position it cannot achieve.
__________________
Sort-of looking for a new team in or near Chicago; PM me if you have a lead.
Mentor: 3929 (2018)
Mentor / Drive Coach: 228 (2016-17) - 2016 RIDE Winner &
Consultant: 2170 (2017)
College Mentor: 2791 (2010-15) Build Photos - 2013 WPI Finalists, 2012 BAE Finalists
Student: 1714 (2009) - 2009 MN 10K Lakes Winners
Reply With Quote
  #10   Spotlight this post!  
Unread 10-10-2018, 10:21 AM
thatnameistaken thatnameistaken is offline
Registered User
AKA: Joshua Johnston
FRC #2191 (Flux Core)
Team Role: College Student
 
Join Date: Oct 2012
Rookie Year: 2013
Location: Hamilton, NJ
Posts: 149
thatnameistaken has a brilliant futurethatnameistaken has a brilliant futurethatnameistaken has a brilliant futurethatnameistaken has a brilliant futurethatnameistaken has a brilliant futurethatnameistaken has a brilliant futurethatnameistaken has a brilliant futurethatnameistaken has a brilliant futurethatnameistaken has a brilliant futurethatnameistaken has a brilliant futurethatnameistaken has a brilliant future
Re: Driver Control Options for Swerve

If I'm understanding this right, an encoder would feel pretty bad, as there's no driver feedback. If their grip ever slips or you need to turn more than 180, things would get out of hand pretty quickly.

Something like a controller analog stick would be much better suited. You can feel which direction you're pointing in and can move it continuously without losing your grip. I tried this with our Recycle Rush bot after the season and greatly enjoyed it; had it been developed with enough time to practice before the season I likely would've used it.

As a tip, if you try it with a controller - you'll naturally want to let go of the stick when the robot's at the desired position, but I found doing so feels clunky. Holding the stick at the desired position between rotations is the way to go.
__________________
Reply With Quote
  #11   Spotlight this post!  
Unread 10-10-2018, 11:18 AM
Chris is me's Avatar
Chris is me Chris is me is offline
on a break
AKA: Pinecone
no team (formerly FRC 3929, 228, 2791)
Team Role: Mentor
 
Join Date: Dec 2008
Rookie Year: 2006
Location: Chicago, IL
Posts: 8,537
Chris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond reputeChris is me has a reputation beyond repute
Re: Driver Control Options for Swerve

Quote:
Originally Posted by thatnameistaken View Post
If I'm understanding this right, an encoder would feel pretty bad, as there's no driver feedback. If their grip ever slips or you need to turn more than 180, things would get out of hand pretty quickly.
Consider a small handle printed or machined to fit onto the encoder output without slipping. There are plenty of ways to solve this problem.

If you need to turn more than 180 degrees at once, wouldn't you just turn the other way?

Holding a joystick continuously seems really like a much worse way to implement this - there's certainly a way to make a rotary input work here...
__________________
Sort-of looking for a new team in or near Chicago; PM me if you have a lead.
Mentor: 3929 (2018)
Mentor / Drive Coach: 228 (2016-17) - 2016 RIDE Winner &
Consultant: 2170 (2017)
College Mentor: 2791 (2010-15) Build Photos - 2013 WPI Finalists, 2012 BAE Finalists
Student: 1714 (2009) - 2009 MN 10K Lakes Winners
Reply With Quote
  #12   Spotlight this post!  
Unread 10-10-2018, 12:01 PM
Wayne TenBrink's Avatar
Wayne TenBrink Wayne TenBrink is offline
<< (2008 Game Piece)
FRC #1918 (NC Gears)
Team Role: Engineer
 
Join Date: Apr 2007
Rookie Year: 2006
Location: Fremont, MI, USA
Posts: 574
Wayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond reputeWayne TenBrink has a reputation beyond repute
Re: Driver Control Options for Swerve

Thank you all for the valuable advise. Field centric translation and robot centric rotation seems like the best place to start. I really like the idea of preset rotation angles for certain "game specific" items. I also like the idea of being able to switch between field-oriented and robot-oriented translation. Regardless, driver(s) practice is always the key to mastery.

As for the field-oriented rotation control, I was thinking of something like a handwheel on a mill or lathe (or a "spinner knob" on a steering wheel). The driver would hold a handle that is connected to a wheel with an encoder. The wheel would not spring back to a home position when released. In order to spin in circles, for example, the driver would need to continuously rotate the wheel. I suspect that type of control might get squirrely when the robot response time didn't keep up with the driver's inputs (i.e.: difference between controller setpoint angle and actual chassis angle greater 180 degrees, etc.).
__________________
NC Gears (Newaygo County Geeks Engineering Awesome Robotic Solutions)

FRC 1918 (Competing at FIM Traverse City and Kentwood events in 2018)
FTC 6043, 7911 & 13554
Reply With Quote
  #13   Spotlight this post!  
Unread 10-10-2018, 12:19 PM
Nick_Coussens's Avatar
Nick_Coussens Nick_Coussens is offline
OCCRA GDC Member
AKA: FUN - Michigan Region Recap Host
FRC #0033 (Killer Bees)
Team Role: Mentor
 
Join Date: Jun 2010
Rookie Year: 2007
Location: Ferndale, MI
Posts: 645
Nick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond reputeNick_Coussens has a reputation beyond repute
Re: Driver Control Options for Swerve

Again, 33 did something similar to what the last few posts have described this past year as far as "field-centric TURNING".

I can say that in theory it sounded very intuitive but in reality did not prove to be so. I have had prior experience driving a swerve with field-centric translation and robot-centric steering, so this may have biased me. However our driver for this season came in with no swerve drive experience, and little skid-steer experience, and he did not find it very intuitive either.

To go to a general heading it was not bad, but he would almost always use the bumper buttons we set up which when tapped would make the robot move a couple degrees CW or CCW. By the end of the season he was using this most of the time to do any kind of aiming.

Overall, it just did not give the finesse needed when aiming the robot in a direction. I think maybe if FIRST was almost like an arcade game (yeah yeah Power Up I know), where the drivers view of the field was a top-down view, then this control method would make more sense. But I think just using robot-centric steering is what is most intuitive for almost everyone. When you think about it, it is very similar to a FPS or 3PS game; in these games you do not move the joystick that controls your direction of sight relative to the world around the player, you move it left or right relative to the current heading of the player.

The translation however being field-centric is more like an arcade game. In an FPS/3PS, your translation joystick is also relative to your player's heading. Matching this would mean making the translation robot-centric as well. Nothing wrong with this, teams have definitely done it, but field-centric seems to be better. I think this really just has to do with the drivers perspective relative to the field. I think for the driver at their vantage point it is easy enough to register your position on the field relative to the robot quickly and control in a field-centric method quicker then registering where you want the robot to translate to on the field relative to the current heading. If the driver was driving based off a camera feed on the front of the robot, then robot-centric would make a lot of sense.

I've always wondered what a field-centric control of a skid-steer drive would be like, and how that would even work, if at all.
__________________
FUN: InFiMidation, Show Host (2018-Present)
OCCRA: Game Design Committee (2018-Present)

FRC/VEX 33: Killer Bees, Design/Strategy Mentor (2018-Present)

FRC/VEX 2451: PWNAGE, Lead Strategy/Scouting Mentor (2013-2017)
FRC/VEX 2451: PWNAGE, Team President/Driver/Student (2009-2012)
Reply With Quote
  #14   Spotlight this post!  
Unread 10-11-2018, 10:25 AM
MarcoPulone's Avatar
MarcoPulone MarcoPulone is offline
Registered User
FRC #2898 (Flying Hedgehogs)
 
Join Date: Sep 2018
Rookie Year: 2019
Location: Beaverton, Oregon
Posts: 5
MarcoPulone is an unknown quantity at this point
Re: Driver Control Options for Swerve

Would something similar to a quad copter control work? one stick for x/y, other stick for speed/rotation
Reply With Quote
Reply


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -5. The time now is 10:18 PM.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi