Apply Velocity to Rigidbody Properly

Hello everyone, I was trying to make a kart racer (I stopped using the built-in Character Controller for whoever remembers me from that) and I need to apply my previously calculate velocity to my Rigidbody.
I have a GameObject with a Sphere Collider and a Rigidbody (not Kinematic) and a child object. Since I want my character to turn based on the normal of the ground I cast 4 rays from each side:

I then add all the normals of all the RaycastHit into one and use that to turn the Transform.up of my main object.
The child object instead turns around based on my steering input and I use its Transform.forward to apply velocity.
I have a Vector2 velocity that I edit in Update before applying it to the movement in FixedUpdate.
Of course I thought to apply the velocity.x to the x and y coordinates of the forward vector, and use the up vector for my velocity.y value.

        transform.up -= (transform.up - groundNormal) * 0.25f;
        characterModel.transform.Rotate(0, steerAmount * Time.deltaTime, 0, Space.Self);
rb.MovePosition(transform.position + new Vector3(characterModel.forward.x * velocity.x, characterModel.up.y * velocity.y, characterModel.forward.z * velocity.x) * Time.deltaTime);

This works perfectly while I am on flat ground, but once I get up a slope everything falls apart, the forward velocity drops significantly the steeper the slope even though the characteraModel.forward is perfectly parallel to the surface, and when i try to turn the direction the character moves towards doesn’t match the characteraModel.forward.

I am sure this is not the right way to do this kind of thing, can anyone help? Is there something I don’t understand about rotations or vectors in general?
Thank you in advance.

Well, since my post has been hidden for several hours I found a solution in the meantime, and I feel so dumb for not thinking about it sooner.
For whoever finds this in the future, I just needed to do:

        Vector3 newPos = characterTransform.forward * velocity.x + transform.up * velocity.y;
        rb.velocity = newPos;