Problem with rigidbodies and rotation with quaternion

A weird thing is happening in my game i can’t explain why.
first let me put up the code so people can better understand

public class Player : MonoBehaviour
{

    float moveSpeed = 25.0f;
    float turnSpeed = 180.0f;
    Rigidbody body;
    GameObject head;
    Vector3 movement;
    Vector3 rotation;
    Vector3 headPitch;


    void Awake()
    {
        //headTarget = GameObject.Find("HeadTarget");
        head = GameObject.Find("HeadController");
        body = GetComponent<Rigidbody>();
    }

    void GetInput()
    {
        movement = new Vector3(Input.GetAxis("LeftJoyHori"), 0, Input.GetAxis("LeftJoyVert"));
        rotation = new Vector3(0, Input.GetAxis("RightJoyHori"), 0);
        headPitch = new Vector3(Input.GetAxis("RightJoyVert"), 0, 0);
    }
    void moveCharacter(Vector3 movement)
    {
        movement = transform.TransformDirection(movement);
        body.MovePosition(transform.localPosition + movement * moveSpeed * Time.deltaTime);
    }
    void rotateCharacter(Vector3 rotation)
    {
        float newYaw = rotation.y * turnSpeed * Time.deltaTime;
        Quaternion deltaRotation = Quaternion.AngleAxis(newYaw, Vector3.up);
        body.MoveRotation(transform.localRotation * deltaRotation);
    }
    
    void headRotate(Vector3 pitch)
    {
        float newPitch = pitch.x * turnSpeed * Time.deltaTime;
        Quaternion deltaRotation = Quaternion.AngleAxis(newPitch, Vector3.right);
        head.GetComponent<Rigidbody>().MoveRotation(head.transform.localRotation * deltaRotation);
    }
    void Update()
    {
        GetInput();
    }
    void FixedUpdate()
    {
        moveCharacter(movement);
        rotateCharacter(rotation);
        headRotate(headPitch);
        //headFollow(movement);
        //headReturn();
    }

The problem I am having is with the headRotate() function, which is supposed to only modify the pitch of the HeadController. (here is a screenshot of the hierarchy, I’m using a rigidbody for both the player and the HeadController)

153298-higherarcy.png

when i turn up and down with my right thumbstick the HeadControllers rigidbody is supposed to turn on the x axis so it would look up and down, but for some reason when i turn the ENTIRE rigidbody starts going nuts. its SUPPOSED to turn around the y axis by turning left and right, and i don’t know what i have done wrong.
here is whats currently happening running the code above
The problem

can someone please help me fix my code and tell me what i was doing wrong with my rotation.
thank you.

Firstly is the head’s collider inside the body’s collider? As the rigidbodies call WakeUp() it will cause them to behave erotically.
Secondly in your code you’re not clamping the head movement in any way. Typically looking around is done using localEulerAngles or localRotation without a rigidbody and the values are clamped Mathf.Clamp. This will be causing the head to spin exponentially faster.