I'm hoping that this question doesn't come off as too general/opinion based, and will attempt to focus it.
I recently completed a project for a rocketry competition in which we controlled a pan/tilt camera on the bottom of a lander ejected from a rocket. We had to control the camera to aim at targets on the ground, image them, process the images and identify the targets by color. We used two servos (pan/tilt), a GPS module, and a 10 DOF board(Gyro/Acc/Temp).
The approach we took was to use a Arduino to handle the pan/tilt, the GPS, and the 10DOF board. This was communicating with a raspberry pi via I2C and acted as the master while the Arduino was the slave. The pi handled the image taking and processing.
In doing this, we had issues with the overall memory usage on the microcontroller(the code for the pan/tilt was quite intensive) and being able to get all the needed data from the different sensors and communicate it back to the Pi. We used interrupts and tried to optimize the code as efficiently as possible.
My question is, for projects like this where there are many sensors and a lot of processing, is it in my best interest to make up a custom board with separate atmega328's for each sensor(or at least one for sensors, other for logic)? If so, is I2C the recommended protocol to be used?
As I work on a lot of computer vision type projects where I will need to use a PI or other computer to process the images, and also be able to obtain sensor data and calculate quicker than the Pi can handle, a elegant and fast solution to this would be much appreciated.
Thank you