NWAPW Year 4

Technical Topics

Part 12: Team Ideas

We have these six to nine basic identifiable tasks that we can organize working groups around, and some of them are big enough to subdivide into subgroups. I hilited in red those I think particularly challenging:
 
Driving the Racing Line -- This team is responsible for taking all the other information and winning the race. It seems to me that there are two parts here, but I don't know if it makes sense to do this in a single group or two:
Use position tracking and the prepared racing lines to plan the next mutation in the car's speed and steering controls, and then

Time Management -- This is about carefully sequencing tiny little changes in the steering and acceleration controls to get the smoothest ride possible.


Position Tracking -- This team is responsible for using information from the odometer (driveshaft turns counter), the current steering angle and the landmark identification to correct the current known position in the memorized map. If the car spins out, this team needs to be able to figure out where you are on the track and which way you are facing, and then get going again in the right direction. Teams are allowed (I think) four pick-up-car, put-it-back on-track do-overs, but that's slower than the car recovering by itself -- if it can. Your tracking should work equally well in TrakSim, so that teams are not blocked when other teams are doing on-floor testing in the actual car.

Map Manager -- This team is responsible for building the internal map, and then making it accessible for position tracking and racing line selection. A subtask (possibly a separate team) could Navigate the track the day before the race, so to see and understand where the track boundaries are and to Memorize these boundaries. The navigation and memorization subgroups will need to work closely with the Landmark subgroups

Landmark Identification -- This team is responsible for picking out recognizable patterns in the floor and other distinctive components of the visual scene as it goes by, so to correct for drift in the map positioning calculated from the odometer and steering information. You might do some of this interactively prior to the race as the map is constructed, and the team can identify what kinds of landmarks are likely to be stable and therefore useful. Other things, like floor patterns or ceiling artifacts might be suitable for complete memorization, then recognizing where the car is (or where it is within a grid cell, if the pattern repeats). This is pretty hairy, you might subdivide it into Floor tracking and Ceiling tracking and Walls or other fixtures. The subgroups will need to work together so that you don't hog the computer for details that don't help the race. Both the camera we are using on the car and TrakSim show some fish-eye effects around the edges, particularly as it affects ceiling artifacts, and TrakSim is known to be inconsistent in the treatment of artifacts as compared to ceiling edges; I'm not sure I can cure the discrepancy by July, so your ceiling team needs to take both the fish-eye effects and any discrepancy into consideration, particularly as you use TrakSim for testing.

Coefficient of Friction -- This team is responsible for telling the racing line team how fast your car can accelerate and break, and how fast it can take turns of every possible radius. You need a calibration phase before the race, and then a math phase where you figure out the numbers. Part of this process is to Calibrate what the car can do to reliably get from here to there with losing control, which you would normally have done before you ever get on the airplane to go to the race. If you have extra time, you might also see how far you can push the boundaries (like drifting turns or wheelie starts) without losing control.

Racing Lines -- This team is responsible for constructing the fastest possible racing line for each possible starting location, and for each place in the track you find yourself (as a result of drift or accident avoidance). Basically, it means "From this place in the track, we need to change steering and speed in these ways in order to maximize the speed for the rest of the track." There's a lot of math and linear optimization in this (that's how we did it before people imagined neural nets could do better but way slower). You have less than 24 hours to do this from the memorized map. If the position tracking team can accurately tell you where you are after a spin-out, then you also want workable racing lines from facing the wrong direction. If it's all precalculated, then no matter where the car ends up, if it's right side up, it can resume the race without manual assistance.

Collision avoidance -- This team is responsible for watching the camera feed in head-to-head races and qualifying heats, for where the other car (or box) is, then feeding that information into the racing line selection process so that you don't hit it. If you are the fastest possible speed out of the start, you never need to pass the other car, but they might be driving unsafely and get ahead of you, so the collision team can look at ways to safely pass the other car. One of the qualifying heats involves avoiding a (possibly moving) box or people on the track, so you definitely need to do that much, but not necessarily at race speeds.

Hardware control -- This team is responsible for picking off the video feed and perhaps getting the necessary information off to other teams without unnecessary redundant parsing the image data; for tracking the driveshaft turns counter and driving the steering and speed controls as specified by the Time management team, and converting the steering control plus odometer readings into a reliable direction the car is facing. You also need to watch for the DeadMan control, both to start and to recover from a failure. Whether the hardware is merged into the Time management task as a single team is open.

Module Integration -- Last year Vikram was responsible for making sure all the modules ran together in the car, and Sameer's group did some tuning for running in multiple cores. This may be a deal-breaker this year if we do not make the best use of the processor capacity, or if your code spends too much time creating and destroying objects (with attendant garbage collection). This may not be the most glorious task, but it is just as important as the others for best performance.
 

These are just guesses on my part. After we get started, there may be unforseen bottlenecks, or tasks that turned out easier than my guesses, and it might make sense to reshuffle some of these groups from time to time.

Tom Pittman
 

Back to Part 0
Back to Part 11

Rev. 2019 May 25a