As Galet said, there is an instruction getJointForce() to monitor the robot torque, or force if the joint is linear, but that won't prevent collisions.
void getJointForce(num& nForce)
Function
This instruction returns the current joint torque (N.m for revolute axis) or force (N for linear axis) computed from the motors currents.
The joint force is not a direct estimation of external efforts. It also includes gravity, friction, viscosity, inertia, noise and accuracy of current sensors, relation between motor current and torque. It can be used to estimate external efforts only by recording forces in reference conditions, and comparing them with forces measured in similar conditions with additional external efforts.
It returns only an order of magnitude for forces. There is no commitment on accuracy that must be evaluated with each application.
A runtime error is generated if the parameter is not an array of num with sufficient size.
You may monitor the torque of the regular operation, and when running have a task to compare the current value with the monitored one. If the torque is exceeded, then the robot is probably colliding with something.
Again, this doesn't prevent the collision, only stops the robot when the torque gets to a certain value. So the robot is already colliding by the time the torque gets exceeded. But is good to prevent hard collisions.
About the brakes, no robot stops with the brakes, the brakes are only used to maintain the robot's position.
Even when an emergency stop is triggered, most of the robot uses the motor to hold and stop the robot and after a complete stop, the brakes are engaged.
Don't know any brand that uses the brakes to stop, unless everything else fails. Keep in mind, braking while moving damage the motor and if you do it multiple times, you will need to replace it.
Any issues let me know,