Iam trying create a exoskeleton armor, but iam having issues

I tryed that 5 times for 3 months, but i think that IS Impossible, but i Will try again:

Basically i want to make an armor that is the same as the player’s body, i am cloning all the player’s parts, cleaning the childrens, increasing the size, and creating a weld in their respective parts (example: Weld Armor Hand with Player Hand). With that 2 problems arise. 1-It is difficult to position the parts correctly, I had to calculate everything manually using a pre-model as a reference since I did not find any pattern in all parts (I made them 2.8x larger, but there is no position pattern), so I calculated everything and made this list:

    local Metrics = {
    ["LeftFoot"] = Vector3.new(-0.8999999999999915,-5.49,0),
    ["LeftHand"] = Vector3.new(-2.7,-1.9,0),
    ["LeftLowerArm"] = Vector3.new(-2.7,-0.8,0),
    ["LeftLowerLeg"] = Vector3.new(-0.9,-4.3,0),
    ["LeftUpperArm"] = Vector3.new(-2.7,0.3,0),
    ["LeftUpperLeg"] = Vector3.new(-0.9,-2.9,0),
    ["LowerTorso"] = Vector3.new(0,-1.8,0),
    ["RightFoot"] = Vector3.new(0.9000000000000057,-5.5,0),
    ["RightHand"] = Vector3.new(2.700000000000003,-1.9,0),
    ["RightLowerArm"] = Vector3.new(2.700000000000003,-0.8,0),
    ["RightLowerLeg"] = Vector3.new(0.9000000000000057,-4.3,0),
    ["RightUpperArm"] = Vector3.new(2.700000000000003,0.3,0),
    ["RightUpperLeg"] = Vector3.new(0.9000000000000057,-2.9,0),
    ["UpperTorso"] = Vector3.new(0,0,0),
    ["Head"] = Vector3.new(0,2.3,0)
}

but not always the parts are where they should be, I need an automatic way to find the right position. 2-As you can see in the gif, the armor does not follow the player’s animation correctly (Example: the foot separates from the leg) code:

for i,v in pairs(self.Player.Character:GetChildren()) do
            if v:IsA("MeshPart")then
               if v.Name~='HumanoidRootPart' then
                   local Clone = v:Clone()  
                   Clone:ClearAllChildren()
                   Clone.Parent = workspace 
                   Clone.Anchored = false   
                   Clone.CanCollide = false
                   Clone.CastShadow = false
                   Clone.Transparency = 0.8
                   Clone.Material = Enum.Material.Neon
                   local Weld = Instance.new("Weld",self.Model)
                   Weld.Part0 = Clone
                   Weld.Part1 = v
                   Clone.Size = Clone.Size * Vector3.new(2.8,2.8,2.8)   
                   Clone.Position = v.Position + Metrics[""..v.Name]                                        
               end
            elseif v.Name == "Head" then
                local Clone = v:Clone() 
                   Clone:ClearAllChildren()
                   Clone.Parent = workspace 
                   Clone.Anchored = false   
                   Clone.CanCollide = false
                   Clone.CastShadow = false
                   Clone.Transparency = 0.8
                   Clone.Material = Enum.Material.Neon
                   local Weld = Instance.new("Weld",self.Model)
                   Weld.Part0 = Clone
                   Weld.Part1 = v
                   Clone.Size = Clone.Size * Vector3.new(2.8,2.8,2.8)   
                   Clone.Position = v.Position + Metrics[""..v.Name]
            end