public com.robotraconteur.robotics.robot.RobotKinChainInfo ToRRInfo()
        {
            var info = new com.robotraconteur.robotics.robot.RobotKinChainInfo();

            CopyTo(info);
            return(info);
        }
 public void CopyTo(com.robotraconteur.robotics.robot.RobotKinChainInfo info)
 {
     info.kin_chain_identifier = kin_chain_identifier?.ToRRInfo();
     info.H                    = H?.Select(x => x.ToRRInfo()).ToArray() ?? new Vector3[0];
     info.P                    = P?.Select(x => x.ToRRInfo()).ToArray() ?? new Vector3[0];
     info.link_inertias        = link_inertias?.Select(x => x.ToRRInfo()).ToArray() ?? new SpatialInertia[0];
     info.link_identifiers     = link_identifiers?.Select(x => x.ToRRInfo()).ToList();
     info.joint_numbers        = joint_numbers?.ToArray() ?? new uint[0];
     info.flange_pose          = flange_pose?.ToRRInfo() ?? new Pose();
     info.flange_identifier    = flange_identifier?.ToRRInfo();
     info.current_tool         = current_tool?.ToRRInfo();
     info.current_payload      = current_payload?.ToRRInfo();
     info.tcp_max_velocity     = tcp_max_velocity?.ToRRInfo() ?? default;
     info.tcp_max_acceleration = tcp_max_acceleration?.ToRRInfo() ?? default;
     info.extended             = extended?.ToDictionary(x => x.Key, x => x.Value?.value);
 }