Creating false gravity for a ball

I have a ball moving through a tube filled with gravity defying twists and turns. I have an empty object sitting at the center of the ball. Every Update I rigidbody.constantForce.relativeForce = child.transform * -10; where child is the inner empty object applying this force to the ball to replicate gravity. The next step is to apply turning so the ball can roll around the inside of the tube so I have

if(Input.GetKeyDown("right")){
		child.transform.Rotate(transform.forward * 10);
	}
	else if(Input.GetKeyDown("left")){
		child.transform.Rotate(transform.forward * -10);
	} 

So the inner child will rotate, and “gravity” will be applied to its new down, so in theory the ball should be pulled where ever the inside is pointing away from. The ball should be able to stick to the ceiling. And initially it does. The problem is that whenever I try to rotate the ball does not just move and is along the new edge, it starts rocking and spinning and generally going crazy. Is there anyway to stop this spin out with out freezing the rotation, because it will have to roll down the tube?

i’d try to imagine what you are actually doing with this line

child.transform.Rotate(transform.forward * -10);

but can’t 8)

methinks you need something like

child.transform.Rotate(Vector3.up * -10);