real-time motion 3d graphical model of an frc robot 2006 first robotics conference 4/27/2006 team...
Post on 20-Dec-2015
213 views
TRANSCRIPT
Real-Time Motion 3D Graphical Model of an FRC
Robot2006 FIRST Robotics Conference
4/27/2006
Team 176 Aces High
Tony Zurolo Roger Ignazio III
MotivationMotivation
Hardware is not always available to test ideasThe robot may not be ready until late in the
design / build period.Limited time for control system software checkout
Visualization of sensor data is difficultThis is especially an issue for autonomous period
programming
Brief Overview of the Project
Brief Overview of the Project
Program to display a 3D graphical model of the robot’s arm
Can select between three data sources:
GUI controlsLive Robot DataRecorded Data file
Can Record the selected data source to a file
Software ArchitectureSoftware Architecture
Abstract Robot Data Interface
Robot Object Model
Claw / Wrist
Forearm
Upper Arm
View Manager(GUI Event Handler)
wxWindows / OpenGL
GUI Events
Shape-drawing commands
Dashboard PortRecorded File Data
GUI
View Commands
Body
Position Data
Shoulder
Heavy use of Open Source packages
Software ArchitectureSoftware ArchitectureInter-object linkage
All you have to do is “connect” the parts
Display update is independent of model state
Important for timing considerationsModel parameter update is event-driven
Multi-threaded application
ras1.connect_to(&rasb1);ras2.connect_to(&ras1); claw1.connect_to(&ras2);
Robot PartsRobot PartsThe parts are concrete
instantiations of an abstract base class.
They respond to change eventsThey know what they are
connected to
SwivelBase
Claw
ArmSection
Robot PartsRobot Parts
What they’re made of
Normally drawn with OpenGL Quad Strips and Triangle Fans
Software ArchitectureSoftware ArchitectureClass Hierarchies
RectangularBlock
SolidCylinder PipeShaftBearing AngledBlock
Software ArchitectureSoftware ArchitectureClass Hierarchies
RobotMovablePart
RobotArmSection
RobotArmSwivelBase
RobotClaw
Software ArchitectureSoftware ArchitectureEvent notification
Transforms
OptimizationLazy evaluationCachingCPU is swamped without these
if (claw1.set_angle(new_angle) notifier->notify_of_change();
Software ArchitectureSoftware Architecture
Recorded data formatDelta time, but summed to keep in sync with
absolute time
0 -0.184 -1.93 0.202 0.589 1 0 0130 -0.202 -1.93 0.202 0.589 1 0 0 30 -0.184 -1.93 0.202 0.589 1 0 0 70 -0.202 -1.93 0.202 0.589 1 0 0170 -0.184 -1.93 0.202 0.589 1 0 0100 -0.202 -1.93 0.202 0.589 1 0 0 30 -0.184 -1.93 0.202 0.589 1 0 0
Hardware ArchitectureHardware ArchitecturePotentiometers connected to
controller A / D inputsLimit Switches connected to
controller digital inputs115kbps Serial link to laptop
Robot Controller Programming
Robot Controller Programming
Dashboard packet overviewSlots available for user data
Custom packets (for EDU controller)Sync byteChecksumControlling packet timing
RC Programming:EDU Packet Overview
RC Programming:EDU Packet Overview
Data is sent from the EDU controller to the RoboSim program via the IFI Dashboard packet’s user byte reserves.
Sync packet (0xFF) does not appear anywhere else in the IFI dashboard packet. RoboSim can scan for this, and when found can “sync up” with the Operator Interface.
EDU Program then sends all other bytes for base angle, shoulder angle, etc.As the bytes are sent, they are added to a checksum in the EDU controller.At the end of the packet, all values have been added to the checksum and it
is sent as the final byte of the packet.
RC Programming:An Excerpt from user_routines.cRC Programming:An Excerpt from user_routines.c
AHPrintChar(0xFF); // start byte AHPrintChar(base_angle); // put the base angle in the packet checksum += base_angle; // include the base angle in the checksum AHPrintChar(shoulder_angle); // put the shoulder angle in the packet checksum += shoulder_angle; // include the shoulder angle in the checksum AHPrintChar(elbow_angle); // put the elbow angle in the packet checksum += elbow_angle; // include the elbow angle in the checksum AHPrintChar(wrist_angle); // put the wrist angle in the packet checksum += wrist_angle; // include the wrist angle in the checksum AHPrintChar(claw_byte); // put the claw bits byte in the packet checksum += claw_byte; // include the claw byte in the checksum AHPrintChar(checksum); // end the packet with the checksum
RC Programming:Controlling Packet Timing
RC Programming:Controlling Packet Timing
Controlling packet timing is essential to prevent overload on the RoboSim program as well as the transmission between RC and OI.
To do this, we use a counter that will only send a packet every X number of iterations.
We currently use a delay of 2, which means that a packet is sent every other iteration.
After the counter hits 2, it will reset to 0 and begin the process again.
RC Programming:Controlling Packet Timing (cntd.)RC Programming:Controlling Packet Timing (cntd.)
Excerpt from user_routines.c//Routine starts
++delay_counter;if(delay_counter >= 2)
/* The packet routine goes here */delay_counter = 0;
“Out-takes”“Out-takes”What’s your sign?
“Out-takes”“Out-takes”Haste makes waste
“Out-takes”“Out-takes”Bad Hair Day
DemoDemo
GUI Control of modelZoom, Pan
Live Robot DataRecorded Data
Applications of this ProjectApplications of this ProjectVisualization and Prototyping of ideasDriver / Operator Practice“Training films” using the recording featureCan serve as a basis for learning graphics
programming
Continuing DevelopmentContinuing DevelopmentRapid Prototyping of Robot / Simulation
Robot “construction set”Reconstruction of robot’s sensor view of its worldSensor calibrationTwo-way communication for closed loop control
developmentStudents will have an opportunity to continue the
work
AcknowledgementsAcknowledgements“Aces High” team 176 Windsor Locks / Suffield HS
Provided use of the mini-controller and electromechanical parts http://www.aceshigh176.com/
Implementation of a virtual trackballImplemented by Gavin Bell, lots of ideas from Thant Tessman and
the August '88 issue of Siggraph's "Computer Graphics," pp. 121-129.
Open Source Asynchronous com port interfaceThierry Schneider
wxWindows – Open Source GUI frameworkJulian Smart, Robert Roebling, Vadim Zeitlin, Robin Dunn, et al
(http://www.wxwindows.org/)