It really depends on what you want your sensor data to be telling you. You say you want to correct for angle and position. From that I take it you mean you want to drive over the defenses and have the robot head to a specific coordinate location on the field, with the right heading (presumably facing the tower). The problem with this plan of attack is that there aren't many sensors which can provide you an field-centric position (what you were asking for).
Sensors which can give you this information typically accumulate error over time, so you end up losing track of your coordinate position pretty quickly.
If you can remove the need for the sensor to provide you an absolute (field-centric) coordinate position, the door opens wide for sensors that can give you accurate data over the duration of the match.
Sensors that can provide you heading:
- ADXL345 - this has been in the KOP for a number of years. It's your standard rate gyro. In my experience you're looking about a degree of drift every few seconds. The drift makes using this sensor difficult.
- ADXRS453 Gyro ($76 eval board from digikey). We used this last year with great success. I believe a number of other teams have used this sensor as well. Pretty sure it's what's on the Spartan MXP board that came out this year. We have observed about 1-2 degrees of drift over the duration of the match. Our code to interface to it. This is a 1 axis gyro, so it's just going to be able to provide heading. And like other rate gyros, it requires calibration to take place when the robot is sitting still. We've written code to detect when the calibration is innacurate and force a re-cal. If you go this route, pay attention to the method supporting calibration inside of the Robot class.
- Invensense MPU - and many other IMUs - these usually provide a gyro, accelerometer and magnetometer/compass. You're going ot be able to find some of these IMU boards for pretty cheap, the problem is is they are giving you raw sensor data. You need the code to be able to turn that data into euler angles. If you haven't spent time working on these kinds of systems before, I wouldn't suggest starting in season.
- NavX - As previously mentioned in this thread, this is a product specifically developed for FIRST and used by many teams with success. You're likely going to be able to get support if you use this device. They couple one of the Invensense IMUs with a processor. All the code to turn the raw sensor data into useable position data is on the board, and libraries to interface to it are already developed/tested for your use.
- Bosch BNO055 - A new sensor that recently came out. It's just like other IMUs in that it has an onboard suite of sensors (accelerometer, gyro, magnetometer), but what makes this one special is it has on-board algorithms to fuse the sensor data and provide clean euler angles or quaternions. Also, it's really cheap (~$35) - You can get this for free with the digikey PDV. I released code to interface with this sensor before the season started. There's more documentation and info linked from that repository. So far it's been looking very promising. I've run comparisons against the ADXRS453 and over the duration of a match they are within 1-2 degrees of one another. So looks to provide very accurate heading position, zero drift, fast calibration.
We will likely be using the BNO055 in season this year, if we find a problem with it, we will be falling back to the ADXRS453.
For reference, the way we approach this problem on our team is through a combination of a camera and gyro.
- The drive team (or auto code) gets the robot to the approximate location we want to shoot from on the field.
- vision code identifies where we are relative to the goal (distance and angular displacement)
- a gyro is used to correct for angular displacement by rotating the chassis to center our shot on the goal
- in the past we have corrected our distance error by adjusting the RPM of our shooter, not by adjusting the position of our drivetrain on the field
In short, we use the visual targets on the goal to localize our robot, instead of requiring a sensor to keep track of our absolute field position over the duration of the match.
Don't forget you have a bunch of PDVs in your kit of parts that can be used to buy sensors. The one from digikey is good for $35