praful — 2013-08-27T15:23:06-04:00 — #1
Last Saturday we threw our latest meetup: Interacting in Virtual Worlds
The discussion led to how and what are we specifically building. From that we spun off and decided to create a topic to start getting people thinking about how the system will work.
Goal: Build an autonomous vehicle that relies heavily on optical sensors. Additional sensors include: GPS, accelerometer, & gyrometer.
We started a very bare bones python file: https://github.com/Self-Driving-Vehicle/Self-Driving-Vehicle/blob/master/architecture.py
For now we want to keep all the code in comments and conceptual so there's flexibility in updating the architecture.
shawn — 2013-08-30T16:47:36-04:00 — #2
In preparation for the upcoming Architecture meetup, it would be great to discuss the requirements needed to accomplish the goals of the self driving car. This discussion can happen here on Discourse or on the provided GitHub architecture.
Consider brainstorming independently before participating in the discussion so you can generate some uninfluenced ideas. You should also bring some design ideas for the requirements to the Architecture meetup.
For a more focused "short term" goal: the wish is to have a car with an autopilot function that can be safely activated on a chosen New Jersey Highway for a mile. This autopilot system must be built at an accessible (<$5000) price.
- Think about all the things needed to have a self driving car.
- Propose and discuss requirements below.
- We'll settle on a general overview for the Architecture meetup
praful — 2013-08-31T15:48:59-04:00 — #3
1D - 1 Dimensional
2D - 2 Dimensional
MPH - Miles per hour
MPG - Miles per gallon
DC - Dimensions of Calculation
TTD - Time To Destination
Controller (DC) - Definition
- Implications for the vehicle
The following controls are in order of amount of data required &
intelligence necessary to execute task. In other words, braking is the
dumbest of the controls whereas steering is where most intelligence
will be applied. Though acceleration has the most risk & danger so requires
the most conservative approach.
Braking (1D) - Decresing velocity in a forward direction
Acceleration (1D) - Increasing velocity in a forward direction
- Increase velocity
- Avoid rear-end collisions
Steering (2D) - Re-orienting a vehicle's direction
- Avoid forward collisions (swerving out of way)
- Avoiding rear-end collisions (packed highway, fast car coming from behind, steer into shoulder to avoid double-accident)
- Making turns Staying in lane (steer to contours of road)
What should we know:
Let's graph the following facts
CITY_SPEEDS: 20 MPH - 40MPH
HIGHWAY_SPEEDS: 50 MPH - 80MPH
VARYING_SPEEDS = 20MPH - 80MPH
VARYING_ANGLES = 10° - 180°, where 180° is a U-turn
Timing at different velocities:
- How long does it take to brake at
- How long does it take to accelerate from 0 - 20MPH, 20MPH - 40MPH, 40MPH - 60MPH, ...?
- How long does it take to merge into another lane at
What does steering look like at
Effect on steering at
VARYING_SPEEDS. For example, what is the ideal speed to take a turn at
Questions to explore:
Should there be steering of each wheel independently or should steering apply to every wheel simultaneously?
How does the car handle road slipperiness, e.g.,
- Hydroplaning or aquaplaning?
- Skidding on ice?
- Road debris?
Can a vehicle be developed that can take advantage of hydroplaning by reducing total friction involved in forward movement?
How do we know when different rules apply. For example, 25MPH during school times vs. 35 MPH regularly. Do we assume 25MPH Monday - Friday between (7am - 7pm) from September - June?
Should we control fuel injection to maximize MPG?
What are the priorities and how should they be prioritized? What I have so far:
- Minimize damage to vehicle to maximize passenger safety
- Maximize MPG
- Reduce time to reach destination (TTD)
I prioritized fuel-efficiency over TTD as once you unburden the
person from driving, they can increase productivity and are less
inclined to get to a certain destination at a given time.
Additionally, over time autonomous vehicles will drive faster as
technology improves and fatalities decrease to 0. Points 3 & 4 will
feed into each other but if we create the controlling mechanisms to
maximize MPG then vehicle designers can work with us to improve
average speed of vehicle.
praful — 2013-09-01T17:26:00-04:00 — #4
A really good video regarding the Google SDV:
Very informative for us to make decisions on the architecture.
shawn — 2013-09-01T23:07:47-04:00 — #5
My initial proposed general requirements architecture: (missing actual methods for now)
Goal: Autopilot on Highway in clear day
Gathering Data (sensors)
- gather car status
- current turning angle
- brake/gas pedal
- capture visual images and basic vision processing
- convert to grayscale
- noise adjustment
- edge finding
- long edge finding (for roads and horizon)
- generate 3D point cloud of surroundings
- consider using an array of stereoscopic cameras
- pattern offsets between cameras
- 2D LIDAR would be too expensive
- teardrop shaped, front more important
- sign reader
- blob object finder
- Localization general (where on map am I)
- GPS (there are ventures seeking to make GPS more accurate)
- map street signs to names
- generate road topdown image from camera and compare to maps
- compare camera to street images
- establish unique landmarks and match images of them
- Localization precise (exactly where on "road" am I)
- minimize GPS reliance, in case the signal is distrupted
- Kalman or particle filters on the 3D point cloud
- lane/markers positions
- adjustments based on percieved self-movement
- Terrain recognition
- ground finding
- horizon finding
- road recognition
- lane finding
- Object recognition (give a bit of leeway for these)
- box with position, velocity, acceleration, jerk, rotation
- car finder
- human finder
- medium sized blobs (high priority, as could be humans or bikers)
- large sized blobs
- small sized blobs
- Message interpretation
- road markers
- sign meanings
- traffic signals
- barriers (like traffic cones)
- human traffic directors
- General navigation (select route to take)
- store up to date road layout
- graph finding (like in GPS navigation to plot route)
- Path finding (plot desired course on road)
- generate driving path
- Decision to control system
- how far to control the car to implement desired driving
- generate turning, gas, brake commands
- shift based on current status of the car (speed, turning, etc.)
Physically controlling car
- Autopilot button
- Emergency stop button
- Driving controls
- Use actual motors to maneuver car
- structure with rubber wheels to steer
- motors or hydraulics for petals and signals
- Some cars have remote control
- these are said to be difficult to develop for
- road layout
- road information
- time of day road changes
- landmark locations
Personalization and Learning (to adjust better to each car)
- maintain persistent data on car state vs output action
- create weights based on the effect of each action
- large weight for immediate action
- medium weight for current driving session
- decreasing weight for the past
- section based on current state (such as weather conditions)