{
  "schemaVersion": "1.0",
  "item": {
    "slug": "so3",
    "name": "Pywayne Vio So3",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/wangyendt/so3",
    "canonicalUrl": "https://clawhub.ai/wangyendt/so3",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/so3",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=so3",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/so3"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/so3",
    "agentPageUrl": "https://openagent3.xyz/skills/so3/agent",
    "manifestUrl": "https://openagent3.xyz/skills/so3/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/so3/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Overview",
        "body": "Complete SO(3) rotation matrix toolkit for 3D rotations with Lie group/ Lie algebra operations, rotation representation conversions, skew-symmetric matrix operations, and rotation averaging."
      },
      {
        "title": "Quick Start",
        "body": "from pywayne.vio.SO3 import SO3_skew, SO3_Exp, SO3_Log, SO3_to_quat\nimport numpy as np\n\n# Skew-symmetric matrix\nvec = np.array([1, 2, 3])\nskew = SO3_skew(vec)  # Returns 3x3 skew-symmetric matrix\n\n# Log/Exp mapping\nR = np.eye(3)\nrotvec = SO3_Log(R)  # Rotation vector (Lie algebra)\nR_recon = SO3_Exp(rotvec)  # Back to rotation matrix\n\n# Quaternion conversion\nquat = SO3_to_quat(R)  # Returns [w, x, y, z]"
      },
      {
        "title": "Basic Operations",
        "body": "check_SO3(R)\n\nCheck if matrix is a valid SO(3) rotation matrix.\n\nValidates shape (3, 3)\nChecks R.T @ R = I (orthogonality)\n\nSO3_mul(R1, R2)\n\nMultiply two rotation matrices: R1 @ R2.\n\nSO3_diff(R1, R2, from_1_to_2=True)\n\nCompute relative rotation between two matrices.\n\nfrom_1_to_2=True: Returns R1.T @ R2\nfrom_1_to_2=False: Returns R2.T @ R1\n\nSO3_inv(R)\n\nCompute inverse of rotation matrix (transpose).\n\nSupports single (3, 3) or batch (N, 3, 3) inputs"
      },
      {
        "title": "Skew-Symmetric Matrices",
        "body": "SO3_skew(vec)\n\nConvert 3D vector to skew-symmetric matrix.\n\nvec = [x, y, z] -> [[ 0, -z,  y],\n                    [ z,  0, -x],\n                    [-y,  x,  0]]\n\nSupports single vector (3,) or batch (N, 3)\n\nSO3_unskew(skew)\n\nExtract vector from skew-symmetric matrix.\n\nSingle matrix (3, 3) -> vector (3,)\nBatch (N, 3, 3) -> vectors (N, 3)"
      },
      {
        "title": "Rotation Representation Conversions",
        "body": "Quaternion\n\nSO3_from_quat(q) - Quaternion [w, x, y, z] to rotation matrix\nSO3_to_quat(R) - Rotation matrix to quaternion [w, x, y, z]\nUses Hamilton convention (wxyz)\n\nAxis-Angle\n\nSO3_from_axis_angle(axis, angle) - Axis-angle to rotation matrix\nSO3_to_axis_angle(R) - Returns (axis, angle) tuple\n\nEuler Angles\n\nSO3_from_euler(euler_angles, axes='zyx', intrinsic=True) - Euler to matrix\nSO3_to_euler(R, axes='zyx', intrinsic=True) - Matrix to Euler\nSupports all rotation sequences"
      },
      {
        "title": "Lie Group/ Lie Algebra Mapping",
        "body": "SO3_Log(R)\n\nSO(3) to so(3) log map, returns rotation vector (3D).\n\nInput: (3, 3) or (N, 3, 3)\nOutput: (3,) or (N, 3)\n\nSO3_log(R)\n\nSO(3) to so(3) log map, returns skew-symmetric matrix (3x3).\n\nEquivalent to SO3_skew(SO3_Log(R))\n\nSO3_Exp(rotvec)\n\nso(3) to SO(3) exp map from rotation vector.\n\nHandles zero vectors gracefully\nInput: (3,) or (N, 3)\nOutput: (3, 3) or (N, 3, 3)\n\nSO3_exp(omega_hat)\n\nso(3) to SO(3) exp map from skew-symmetric matrix.\n\nEquivalent to SO3_Exp(SO3_unskew(omega_hat))"
      },
      {
        "title": "Averaging",
        "body": "SO3_mean(R)\n\nCompute mean rotation matrix from multiple rotations.\n\nUses scipy Rotation.mean()\nInput: (N, 3, 3)\nOutput: (3, 3)"
      },
      {
        "title": "Single vs Batch",
        "body": "Single matrix: shape (3, 3)\nBatch: shape (N, 3, 3)\n\nMost functions handle both automatically."
      },
      {
        "title": "SO(3) Matrix Properties",
        "body": "R @ R.T = I  (orthogonal)\ndet(R) = 1   (special)"
      },
      {
        "title": "Lie Algebra Vector",
        "body": "Rotation vector where direction is axis, magnitude is angle."
      },
      {
        "title": "Dependencies",
        "body": "Required packages:\n\nnumpy - Array operations\nqmt - Quaternion utilities\nscipy - Rotation averaging\n\nInstall with:\n\npip install numpy qmt scipy"
      },
      {
        "title": "Example Usage",
        "body": "# Create rotation from axis-angle\naxis = np.array([0, 0, 1])  # Z-axis\nangle = np.pi / 4  # 45 degrees\nR = SO3_from_axis_angle(axis, angle)\n\n# Verify it's valid\nprint(check_SO3(R))  # True\n\n# Get Lie algebra representation\nrotvec = SO3_Log(R)\nprint(f\"Rotation vector: {rotvec}\")\n\n# Convert back\nR_recon = SO3_Exp(rotvec)\nprint(f\"Reconstruction error: {np.linalg.norm(R - R_recon):.2e}\")\n\n# Batch averaging\nR_batch = np.array([R, SO3_inv(R), SO3_mul(R, R)])\nR_mean = SO3_mean(R_batch)"
      }
    ],
    "body": "Pywayne VIO SO3\nOverview\n\nComplete SO(3) rotation matrix toolkit for 3D rotations with Lie group/ Lie algebra operations, rotation representation conversions, skew-symmetric matrix operations, and rotation averaging.\n\nQuick Start\nfrom pywayne.vio.SO3 import SO3_skew, SO3_Exp, SO3_Log, SO3_to_quat\nimport numpy as np\n\n# Skew-symmetric matrix\nvec = np.array([1, 2, 3])\nskew = SO3_skew(vec)  # Returns 3x3 skew-symmetric matrix\n\n# Log/Exp mapping\nR = np.eye(3)\nrotvec = SO3_Log(R)  # Rotation vector (Lie algebra)\nR_recon = SO3_Exp(rotvec)  # Back to rotation matrix\n\n# Quaternion conversion\nquat = SO3_to_quat(R)  # Returns [w, x, y, z]\n\nCore Functions\nBasic Operations\ncheck_SO3(R)\n\nCheck if matrix is a valid SO(3) rotation matrix.\n\nValidates shape (3, 3)\nChecks R.T @ R = I (orthogonality)\nSO3_mul(R1, R2)\n\nMultiply two rotation matrices: R1 @ R2.\n\nSO3_diff(R1, R2, from_1_to_2=True)\n\nCompute relative rotation between two matrices.\n\nfrom_1_to_2=True: Returns R1.T @ R2\nfrom_1_to_2=False: Returns R2.T @ R1\nSO3_inv(R)\n\nCompute inverse of rotation matrix (transpose).\n\nSupports single (3, 3) or batch (N, 3, 3) inputs\nSkew-Symmetric Matrices\nSO3_skew(vec)\n\nConvert 3D vector to skew-symmetric matrix.\n\nvec = [x, y, z] -> [[ 0, -z,  y],\n                    [ z,  0, -x],\n                    [-y,  x,  0]]\n\nSupports single vector (3,) or batch (N, 3)\nSO3_unskew(skew)\n\nExtract vector from skew-symmetric matrix.\n\nSingle matrix (3, 3) -> vector (3,)\nBatch (N, 3, 3) -> vectors (N, 3)\nRotation Representation Conversions\nQuaternion\nSO3_from_quat(q) - Quaternion [w, x, y, z] to rotation matrix\nSO3_to_quat(R) - Rotation matrix to quaternion [w, x, y, z]\nUses Hamilton convention (wxyz)\nAxis-Angle\nSO3_from_axis_angle(axis, angle) - Axis-angle to rotation matrix\nSO3_to_axis_angle(R) - Returns (axis, angle) tuple\nEuler Angles\nSO3_from_euler(euler_angles, axes='zyx', intrinsic=True) - Euler to matrix\nSO3_to_euler(R, axes='zyx', intrinsic=True) - Matrix to Euler\nSupports all rotation sequences\nLie Group/ Lie Algebra Mapping\nSO3_Log(R)\n\nSO(3) to so(3) log map, returns rotation vector (3D).\n\nInput: (3, 3) or (N, 3, 3)\nOutput: (3,) or (N, 3)\nSO3_log(R)\n\nSO(3) to so(3) log map, returns skew-symmetric matrix (3x3).\n\nEquivalent to SO3_skew(SO3_Log(R))\nSO3_Exp(rotvec)\n\nso(3) to SO(3) exp map from rotation vector.\n\nHandles zero vectors gracefully\nInput: (3,) or (N, 3)\nOutput: (3, 3) or (N, 3, 3)\nSO3_exp(omega_hat)\n\nso(3) to SO(3) exp map from skew-symmetric matrix.\n\nEquivalent to SO3_Exp(SO3_unskew(omega_hat))\nAveraging\nSO3_mean(R)\n\nCompute mean rotation matrix from multiple rotations.\n\nUses scipy Rotation.mean()\nInput: (N, 3, 3)\nOutput: (3, 3)\nData Formats\nSingle vs Batch\nSingle matrix: shape (3, 3)\nBatch: shape (N, 3, 3)\n\nMost functions handle both automatically.\n\nSO(3) Matrix Properties\nR @ R.T = I  (orthogonal)\ndet(R) = 1   (special)\n\nLie Algebra Vector\n\nRotation vector where direction is axis, magnitude is angle.\n\nDependencies\n\nRequired packages:\n\nnumpy - Array operations\nqmt - Quaternion utilities\nscipy - Rotation averaging\n\nInstall with:\n\npip install numpy qmt scipy\n\nExample Usage\n# Create rotation from axis-angle\naxis = np.array([0, 0, 1])  # Z-axis\nangle = np.pi / 4  # 45 degrees\nR = SO3_from_axis_angle(axis, angle)\n\n# Verify it's valid\nprint(check_SO3(R))  # True\n\n# Get Lie algebra representation\nrotvec = SO3_Log(R)\nprint(f\"Rotation vector: {rotvec}\")\n\n# Convert back\nR_recon = SO3_Exp(rotvec)\nprint(f\"Reconstruction error: {np.linalg.norm(R - R_recon):.2e}\")\n\n# Batch averaging\nR_batch = np.array([R, SO3_inv(R), SO3_mul(R, R)])\nR_mean = SO3_mean(R_batch)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/wangyendt/so3",
    "publisherUrl": "https://clawhub.ai/wangyendt/so3",
    "owner": "wangyendt",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/so3",
    "downloadUrl": "https://openagent3.xyz/downloads/so3",
    "agentUrl": "https://openagent3.xyz/skills/so3/agent",
    "manifestUrl": "https://openagent3.xyz/skills/so3/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/so3/agent.md"
  }
}