The PIC is quite capable of doing this. Make use of the hardware resources and interrupt driven code to take the processing load off the CPU.
eg Motor control - use hardware pwm and interrupts then you only need to update a register every time you need to change a motor speed/position.
Communication - use RAM IO buffers along with the UART/I2C/SPI interrupts to load/fetch data only when it is necessary.
Sensors - use a timer and interrupts to regularly perform sensor reads, or pin change interrupts to react directly to sensor input, write the values to RAM.
These modules independently support a main control loop which polls for new sensor data and processes it, updates the motor speed/position registers as necessary, then polls for any new Comms input and does any output, and repeats.
Code in the interrupt routines should be kept as short as possible.
The PIC is more than capable... the only problems you face are coding the modules up to work together.

Note - if you are about to do this in assembly, and don't have to or really want to, then think twice.