Switch Wuji Hand 2 to Position control mode, adjust per-joint output limits and position-command filtering, then transition from the current posture into a whole-hand open/close sequence. Use this practice to check the position-control command path or connect an application-generated trajectory.The matching Python example is 8.position_mode.py. For API definitions, see Position Control Interface Reference. For mode selection, see Position Control Mode.
This example enables all 20 joints and sends the same open/close angle to every joint. Mount the device securely, clear people, cables, and obstacles from its surroundings, keep someone watching throughout, and stay ready to cut power.
Confirm the target serial number. If several Wuji Hand 2 devices are found, the example lists their serial numbers and prompts for a selection. Pressing Enter, or running without standard input, selects the first hand in the list.
Parameter
Default
Purpose
EFFORT_LIMIT_SCALE
0.8
Scale applied to each joint’s read Position control limit
COMMAND_CUTOFF_HZ
40.0 Hz
Position-command low-pass cutoff
AMPLITUDE_RAD
0.35 rad
Peak position target
SWEEP_PERIOD_S
4.0 seconds
Duration of each open/close cycle
SWEEP_CYCLES
2
Number of cycles
COMMAND_INTERVAL_S
1 / 120 seconds
Interval between sweep commands
RAMP_DURATION_S
1.0 seconds
Transition from the current posture to the sequence start
connect_hand() scans for devices and connects the selected Wuji Hand 2. If fewer than 20 joints are online, the example reports an error and exits without starting motion.
Disable the hand before switching to Position control mode. Read limits only after the switch succeeds, so the saved, adjusted, and restored values all belong to this mode, in N·m.
The read limits are the values in effect, not necessarily the defaults. read_effort_limits() requires 20 valid values. A failed check stops configuration and enabling.
Multiply each joint’s own read limit by EFFORT_LIMIT_SCALE instead of applying one fixed torque value to every joint.
scaled_limits = [value * EFFORT_LIMIT_SCALE for value in original_limits]written_limits = write_effort_limits(effort_limit, scaled_limits)cutoff.set(COMMAND_CUTOFF_HZ)
write_effort_limits() reads all joints after writing. A mismatch raises an error that lists the affected joints. The example registers each restoration before the corresponding write, so it attempts to restore saved parameters even after a write error. For API rules, see Output Limits.
After enable(), wait_enabled() waits until the newest diagnostics frame reports all 20 joints as Enabled. The example then reads a complete posture, arranges it by joint index, and uses a 1-second cosine transition to the sequence start.
Every joint follows a cosine target from 0 to 0.35 rad, with two cycles of 4 seconds each. send_sweep() sends 20 JointCommand entries per frame, with velocity and effort both set to 0.
send_sweep(sweep, publisher, wuji_sdk)
The target command interval is 1 / 120 seconds. Host scheduling affects the actual rate.
Normal completion, errors, and Ctrl+C enter cleanup: attempt to disable, close the publisher, restore the original cutoff and limits, and disconnect. A cleanup failure doesn’t prevent later cleanup actions. Limit restoration also reads back every joint.The hand stays in Position control mode after exit. For details on saving and restoring limits, see Save and Restore Limits.
The terminal shows the selected device, control mode, original limits, scale, written values read back from the hand, and cutoff frequency. Limits are grouped by four joints per finger, in thumb, index, middle, ring, and pinky order.Check completion as follows:
Normal completion returns exit code 0. Runtime or cleanup failures return 1. Ctrl+C returns 130
The hand is disabled after the sequence, with no cleanup error output. If restoration fails, check device state and parameters before continuing
To assess tracking, record joint_states separately and compare target and feedback positions. Printed parameter values aren’t a motion-completion check
Replace the 20-joint position sequence from generate_sweep(). Keep parameter snapshots, readback checks, enable waiting, the starting transition, and cleanup. Sending the same angle to all joints is specific to this example, not a general grasping posture.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Wuji Docs","colors":{"primary":"#207FFF","light":"#4D9BFF","dark":"#1A66CC"},"logo":{"light":"https://mintcdn.com/wuji-0bbde051/L5L7y_1GoeOydbgy/shared/assets/brand/logo-light.svg?fit=max\u0026auto=format\u0026n=L5L7y_1GoeOydbgy\u0026q=85\u0026s=1e43e384fc1295b14de2c02f102e820c","dark":"https://mintcdn.com/wuji-0bbde051/L5L7y_1GoeOydbgy/shared/assets/brand/logo-dark.svg?fit=max\u0026auto=format\u0026n=L5L7y_1GoeOydbgy\u0026q=85\u0026s=a12bbb202cabfeefe746637a8bddd666"},"favicon":"https://mintcdn.com/wuji-0bbde051/kLBbV0Hk1sanGeHp/favicon.svg?fit=max\u0026auto=format\u0026n=kLBbV0Hk1sanGeHp\u0026q=85\u0026s=1611c36a923485b6cfc9b39710953a0c","fonts":{"family":"Geist"},"icons":{"library":"lucide"},"styling":{"latex":true},"integrations":{"posthog":{"apiKey":"phc_nVQdYL3r3zwY0RHLjJdr3uaZiMSp3TPPR5Qcj3oyKGv","apiHost":"https://eu.i.posthog.com","sessionRecording":false}},"contextual":{"options":["copy","view","claude","chatgpt","mcp"],"display":"header"},"interaction":{"drilldown":false},"navigation":{"languages":[{"language":"cn","banner":{"content":"**新** · 2026.11.10 · 跨平台开发、位置控制模式(Beta)、数据质量告警与手部模型标定提速。[查看详情](/docs/zh/release-notes#2026-11-10)","dismissible":true},"footer":{"socials":{"github":"https://github.com/wuji-technology"},"links":[{"header":"探索","items":[{"label":"发布记录","href":"/docs/zh/release-notes"},{"label":"视频","href":"/docs/zh/videos"},{"label":"归档","href":"/docs/zh/archived"}]},{"header":"公司","items":[{"label":"产品官网","href":"https://wuji.tech"},{"label":"GitHub","href":"https://github.com/wuji-technology"},{"label":"sales@wuji.tech","href":"mailto:sales@wuji.tech"}]}]},"navbar":{"links":[{"href":"/docs/zh/release-notes","label":"发布记录"},{"href":"/docs/zh/videos","label":"视频"},{"href":"/docs/zh/archived","label":"归档"}]},"href":"docs/zh"},{"language":"en","banner":{"content":"**New** · 2026.11.10 · Cross-platform development, Position control mode (Beta), data quality warnings, and faster hand-model calibration. [Read more](/docs/en/release-notes#2026-11-10)","dismissible":true},"footer":{"socials":{"github":"https://github.com/wuji-technology"},"links":[{"header":"Explore","items":[{"label":"Release notes","href":"/docs/en/release-notes"},{"label":"Videos","href":"/docs/en/videos"},{"label":"Archived","href":"/docs/en/archived"}]},{"header":"Company","items":[{"label":"Product site","href":"https://wuji.tech"},{"label":"GitHub","href":"https://github.com/wuji-technology"},{"label":"sales@wuji.tech","href":"mailto:sales@wuji.tech"}]}]},"navbar":{"links":[{"href":"/docs/en/release-notes","label":"Release notes"},{"href":"/docs/en/videos","label":"Videos"},{"href":"/docs/en/archived","label":"Archived"}]},"href":"docs/en"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"wuji-0bbde051","hasAudioNarration":false,"actualSubdomain":"wuji-0bbde051","customDomains":["docs.wuji.tech"],"gitSource":{"type":"github","owner":"wuji-technology","repo":"wuji-developer-docs","deployBranch":"main","contentDirectory":"site","isPrivate":true,"mountPath":"","label":""},"feedback":{"issues":false,"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af2fad6397db424c1faf132","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"en","tag":"Hardware","count":72},{"language":"cn","tag":"硬件","count":72},{"language":"en","tag":"More","count":62},{"language":"cn","tag":"更多","count":62},{"language":"en","tag":"Archived","count":60},{"language":"cn","tag":"归档","count":60},{"language":"en","tag":"Integration and Development","count":47},{"language":"cn","tag":"集成与开发","count":47},{"language":"en","tag":"Wuji Hand 2","count":36},{"language":"cn","tag":"Wuji Hand 2","count":36},{"language":"en","tag":"Software","count":34},{"language":"cn","tag":"软件","count":34},{"language":"en","tag":"Wuji Glove","count":32},{"language":"cn","tag":"Wuji Glove","count":32},{"language":"en","tag":"2.2 Beta","count":30},{"language":"cn","tag":"2.2 Beta","count":30},{"language":"en","tag":"Getting Started","count":28},{"language":"cn","tag":"入门","count":28},{"language":"en","tag":"SDK Practice","count":25},{"language":"cn","tag":"SDK 使用实践","count":25}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"styles/content.css","href":"/_mintlify/custom/wuji-0bbde051/788b5611d17dbb64/styles/content.css"},{"filePath":"styles/footer.css","content":"#footer a[href*=\"utm_campaign=poweredBy\"],#footer div:has(>button[data-testid^=\"mode-switch-\"]){display:none}#footer [data-wj-subscribe-links]>wuji-subscribe{grid-column:1 / -1;min-width:0}@media (min-width: 1280px){#footer [data-wj-subscribe-links]{grid-template-columns:minmax(0, 1fr) minmax(0, 1fr) minmax(15rem, 2fr)!important}#footer [data-wj-subscribe-links]>wuji-subscribe{grid-column:auto}}"},{"filePath":"styles/navbar.css","content":"#navbar{--nav-control-bg: #f5f5f7;--nav-control-hover-bg: #eeeef0;--nav-control-focus: #1a66cc}.dark #navbar{--nav-control-bg: #1d1d1f;--nav-control-hover-bg: #2c2c2e;--nav-control-focus: #4d9bff}#navbar #search-bar-entry,#navbar #search-bar-entry-mobile,#navbar #assistant-entry,#navbar #assistant-entry-mobile{border:0;box-shadow:none;background:var(--nav-control-bg);filter:none}#navbar #search-bar-entry,#navbar #assistant-entry{border-radius:12px}#navbar #search-bar-entry-mobile,#navbar #assistant-entry-mobile{border-radius:10px}#navbar #search-bar-entry:hover,#navbar #search-bar-entry-mobile:hover,#navbar #assistant-entry:hover,#navbar #assistant-entry-mobile:hover{background:var(--nav-control-hover-bg)}#navbar #search-bar-entry:focus-visible,#navbar #search-bar-entry-mobile:focus-visible,#navbar #assistant-entry:focus-visible,#navbar #assistant-entry-mobile:focus-visible{outline:2px solid var(--nav-control-focus);outline-offset:2px}@media (min-width: 1024px){#navbar div:has(>div>div>#search-bar-entry){container:wuji-navbar / inline-size}#navbar div:has(>div>#localization-select-trigger){display:contents}#navbar div:has(>#localization-select-trigger){order:1;flex:0 0 auto}#navbar div:has(>#search-bar-entry){flex:1 1 0%;min-width:16rem;max-width:32rem;margin-inline:auto}#navbar #search-bar-entry,#navbar #search-bar-entry>div{min-width:0}#navbar div:has(>nav[aria-label=\"Main\"]){flex:0 1 auto;min-width:0}#navbar nav[aria-label=\"Main\"]{min-width:0;overflow-x:auto}#navbar nav[aria-label=\"Main\"]>ul{width:max-content}#navbar div:has(>#theme-preference-menu-trigger){flex-shrink:0}@container wuji-navbar (max-width: 68rem){#navbar div:has(>div>#search-bar-entry){column-gap:0.5rem}#navbar .nav-logo{width:13.5rem;height:auto}#navbar div:has(>#search-bar-entry){flex:0 0 auto;min-width:0;max-width:none;margin-inline:0;gap:0.5rem}#navbar #search-bar-entry,#navbar #assistant-entry{flex:0 0 2.25rem;width:2.25rem;min-width:2.25rem;padding-inline:0;justify-content:center;gap:0}#navbar #search-bar-entry>div>div,#navbar #search-bar-entry>span,#navbar #assistant-entry>span{display:none}#navbar nav[aria-label=\"Main\"]>ul{column-gap:0.75rem}#navbar nav[aria-label=\"Main\"]>ul>li{margin-inline:0}#navbar div:has(>nav[aria-label=\"Main\"]){column-gap:0.5rem}#navbar div:has(>#theme-preference-menu-trigger){margin-inline-start:0}}}"},{"filePath":"styles/sidebar.css","content":""},{"filePath":"styles/toc.css","content":":is(#table-of-contents,#table-of-contents-content) li[data-release-filter-hidden]{display:none!important}:is(#table-of-contents,#table-of-contents-content) li[data-release-level=\"month\"]>a{padding-inline-start:0;padding-top:8px;font-weight:600}:is(#table-of-contents,#table-of-contents-content) li[data-release-level=\"entry\"]>a{padding-inline-start:14px;font-size:0.8125rem}:is(#table-of-contents,#table-of-contents-content) li[data-release-level=\"detail\"]>a{padding-inline-start:28px;font-size:0.8125rem}"}],"page":{"pagePath":"docs/en/wuji-hand/latest/sdk-practice/position-mode","slug":"/docs/en/wuji-hand/latest/sdk-practice/position-mode","pageMetadata":{"title":"Position Control (Beta)","description":null,"href":"/docs/en/wuji-hand/latest/sdk-practice/position-mode"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Mermaid,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`Switch Wuji Hand 2 to Position control mode, adjust per-joint output limits and position-command filtering, then transition from the current posture into a whole-hand open/close sequence. Use this practice to check the position-control command path or connect an application-generated trajectory.`}),`\n`,_jsxs(_components.p,{children:[`The matching Python example is `,_jsx(_components.a,{href:`https://github.com/wuji-technology/wuji-sdk/blob/main/examples/python/wuji_hand_2/8.position_mode.py`,children:`8.position_mode.py`}),`. For API definitions, see `,_jsx(_components.a,{href:`/docs/en/wuji-hand/latest/sdk-reference#position-control-interface-reference`,children:`Position Control Interface Reference`}),`. For mode selection, see `,_jsx(_components.a,{href:`/docs/en/wuji-hand/latest/control-guide#position-control-mode`,children:`Position Control Mode`}),`.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`This example enables all 20 joints and sends the same open/close angle to every joint. Mount the device securely, clear people, cables, and obstacles from its surroundings, keep someone watching throughout, and stay ready to cut power.`})}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsx(Heading,{level:`3`,id:`hardware`,children:`Hardware`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Item`}),_jsx(_components.th,{children:`Requirement`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Wuji Hand 2`}),_jsx(_components.td,{children:`One hand, with all 20 joints online`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Connection`}),_jsx(_components.td,{children:`Powered on and reachable from the host over Ethernet`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Workspace`}),_jsx(_components.td,{children:`Clear throughout the transition from the current posture and the open/close sequence`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`software`,children:`Software`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Item`}),_jsx(_components.th,{children:`Requirement`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Python Environment`}),_jsxs(_components.td,{children:[`Install `,_jsx(_components.code,{children:`wuji_sdk`}),` following `,_jsx(_components.a,{href:`/docs/en/wuji-sdk/latest/quick-start#install-the-python-sdk`,children:`Python SDK Installation`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`SDK`}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`v2026.11.9`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Firmware`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`v3.0.0`}),` or later, supporting Position control mode and N·m limits`]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`before-you-start`,children:`Before You Start`}),`\n`,_jsx(_components.p,{children:`Confirm the target serial number. If several Wuji Hand 2 devices are found, the example lists their serial numbers and prompts for a selection. Pressing Enter, or running without standard input, selects the first hand in the list.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Purpose`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`EFFORT_LIMIT_SCALE`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`0.8`})}),_jsx(_components.td,{children:`Scale applied to each joint’s read Position control limit`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`COMMAND_CUTOFF_HZ`})}),_jsxs(_components.td,{\"data-numeric\":`true`,children:[_jsx(_components.code,{children:`40.0`}),` Hz`]}),_jsx(_components.td,{children:`Position-command low-pass cutoff`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`AMPLITUDE_RAD`})}),_jsxs(_components.td,{\"data-numeric\":`true`,children:[_jsx(_components.code,{children:`0.35`}),` rad`]}),_jsx(_components.td,{children:`Peak position target`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`SWEEP_PERIOD_S`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`4.0`}),` seconds`]}),_jsx(_components.td,{children:`Duration of each open/close cycle`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`SWEEP_CYCLES`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`2`})}),_jsx(_components.td,{children:`Number of cycles`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`COMMAND_INTERVAL_S`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`1 / 120`}),` seconds`]}),_jsx(_components.td,{children:`Interval between sweep commands`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`RAMP_DURATION_S`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`1.0`}),` seconds`]}),_jsx(_components.td,{children:`Transition from the current posture to the sequence start`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`data-flow`,children:`Data Flow`}),`\n`,_jsx(Mermaid,{chart:`flowchart TD\n CONNECT[\"Select a hand and check all 20 joints\"]\n MODE[\"Disable and switch to Position control mode\"]\n READ[\"Read current limits and cutoff\"]\n CONFIG[\"Scale per-joint limits and read back\u003cbr/>Set cutoff\"]\n ENABLE[\"Enable and wait for all joints\"]\n MOVE[\"Read current posture and ramp\u003cbr/>Run two open/close cycles\"]\n CLEAN[\"Disable and close publisher\u003cbr/>Restore parameters and disconnect\"]\n CONNECT --> MODE --> READ --> CONFIG --> ENABLE --> MOVE --> CLEAN\n CONFIG -. Error or interruption .-> CLEAN\n ENABLE -. Error or interruption .-> CLEAN\n MOVE -. Error or interruption .-> CLEAN`}),`\n`,_jsx(Heading,{level:`2`,id:`integration-steps`,children:`Integration Steps`}),`\n`,_jsx(_components.p,{children:`The snippets below come from the example. See the complete source for helper definitions.`}),`\n`,_jsx(Heading,{level:`3`,id:`1-connect-and-check-the-joints`,children:`1. Connect and Check the Joints`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`connect_hand()`}),` scans for devices and connects the selected Wuji Hand 2. If fewer than 20 joints are online, the example reports an error and exits without starting motion.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`hand `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` connect_hand(manager, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"hand_2_position_mode\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, wuji_sdk)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`online `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` int`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(hand.online_joints_count().get())`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` online `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` JOINT_COUNT`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` raise`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` RuntimeError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"expected 20/20 online joints, got `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`online`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/20\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`2-switch-modes-and-read-the-original-parameters`,children:`2. Switch Modes and Read the Original Parameters`}),`\n`,_jsx(_components.p,{children:`Disable the hand before switching to Position control mode. Read limits only after the switch succeeds, so the saved, adjusted, and restored values all belong to this mode, in N·m.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`hand.disable()`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`hand.control_mode().set(wuji_sdk.ControlMode.Position)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`effort_limit `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hand.effort_limit()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`cutoff `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hand.position_command_low_pass_cutoff_frequency()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`original_limits `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` read_effort_limits(effort_limit)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`original_cutoff `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` read_command_cutoff(cutoff)`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The read limits are the values in effect, not necessarily the defaults. `,_jsx(_components.code,{children:`read_effort_limits()`}),` requires 20 valid values. A failed check stops configuration and enabling.`]}),`\n`,_jsx(Heading,{level:`3`,id:`3-adjust-per-joint-limits-and-set-the-cutoff`,children:`3. Adjust Per-Joint Limits and Set the Cutoff`}),`\n`,_jsxs(_components.p,{children:[`Multiply each joint’s own read limit by `,_jsx(_components.code,{children:`EFFORT_LIMIT_SCALE`}),` instead of applying one fixed torque value to every joint.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`scaled_limits `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [value `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` EFFORT_LIMIT_SCALE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` value `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`in`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` original_limits]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`written_limits `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` write_effort_limits(effort_limit, scaled_limits)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`cutoff.set(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`COMMAND_CUTOFF_HZ`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`write_effort_limits()`}),` reads all joints after writing. A mismatch raises an error that lists the affected joints. The example registers each restoration before the corresponding write, so it attempts to restore saved parameters even after a write error. For API rules, see `,_jsx(_components.a,{href:`/docs/en/wuji-hand/latest/sdk-reference/effort-and-mit#effort_limit-set/get`,children:`Output Limits`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`4-enable-and-transition-from-the-current-posture`,children:`4. Enable and Transition from the Current Posture`}),`\n`,_jsxs(_components.p,{children:[`After `,_jsx(_components.code,{children:`enable()`}),`, `,_jsx(_components.code,{children:`wait_enabled()`}),` waits until the newest diagnostics frame reports all 20 joints as Enabled. The example then reads a complete posture, arranges it by joint index, and uses a 1-second cosine transition to the sequence start.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`hand.enable()`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`wait_enabled(hand)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`publisher `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hand.joint_command().publish()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`sweep `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` generate_sweep()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`start `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` capture_start_positions(hand)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ramp_steps `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` round`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`RAMP_DURATION_S`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` RAMP_INTERVAL_S`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`send_sweep(ramp_frames(start, sweep[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`], ramp_steps), publisher,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` wuji_sdk, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`interval`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`RAMP_INTERVAL_S`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`An enable timeout or incomplete starting posture enters cleanup without sending the open/close sequence.`}),`\n`,_jsx(Heading,{level:`3`,id:`5-send-the-open/close-sequence`,children:`5. Send the Open/Close Sequence`}),`\n`,_jsxs(_components.p,{children:[`Every joint follows a cosine target from `,_jsx(_components.code,{children:`0`}),` to `,_jsx(_components.code,{children:`0.35 rad`}),`, with two cycles of 4 seconds each. `,_jsx(_components.code,{children:`send_sweep()`}),` sends 20 `,_jsx(_components.code,{children:`JointCommand`}),` entries per frame, with `,_jsx(_components.code,{children:`velocity`}),` and `,_jsx(_components.code,{children:`effort`}),` both set to `,_jsx(_components.code,{children:`0`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`send_sweep(sweep, publisher, wuji_sdk)`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The target command interval is `,_jsx(_components.code,{children:`1 / 120`}),` seconds. Host scheduling affects the actual rate.`]}),`\n`,_jsx(Heading,{level:`3`,id:`6-stop-and-restore-parameters`,children:`6. Stop and Restore Parameters`}),`\n`,_jsx(_components.p,{children:`Normal completion, errors, and Ctrl+C enter cleanup: attempt to disable, close the publisher, restore the original cutoff and limits, and disconnect. A cleanup failure doesn’t prevent later cleanup actions. Limit restoration also reads back every joint.`}),`\n`,_jsxs(_components.p,{children:[`The hand stays in Position control mode after exit. For details on saving and restoring limits, see `,_jsx(_components.a,{href:`/docs/en/wuji-hand/latest/control-guide#save-and-restore-limits-optional`,children:`Save and Restore Limits`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`running-and-output`,children:`Running and Output`}),`\n`,_jsx(Heading,{level:`3`,id:`run-the-example`,children:`Run the Example`}),`\n`,_jsxs(_components.p,{children:[`From the `,_jsx(_components.code,{children:`wuji-sdk`}),` repository root, run:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`python`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` examples/python/wuji_hand_2/8.position_mode.py`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`check-the-output-and-result`,children:`Check the Output and Result`}),`\n`,_jsx(_components.p,{children:`The terminal shows the selected device, control mode, original limits, scale, written values read back from the hand, and cutoff frequency. Limits are grouped by four joints per finger, in thumb, index, middle, ring, and pinky order.`}),`\n`,_jsx(_components.p,{children:`Check completion as follows:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Normal completion returns exit code `,_jsx(_components.code,{children:`0`}),`. Runtime or cleanup failures return `,_jsx(_components.code,{children:`1`}),`. Ctrl+C returns `,_jsx(_components.code,{children:`130`})]}),`\n`,_jsxs(_components.li,{children:[`The hand is disabled after the sequence, with no `,_jsx(_components.code,{children:`cleanup error`}),` output. If restoration fails, check device state and parameters before continuing`]}),`\n`,_jsxs(_components.li,{children:[`To assess tracking, record `,_jsx(_components.code,{children:`joint_states`}),` separately and compare target and feedback positions. Printed parameter values aren’t a motion-completion check`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`notes`,children:`Notes`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Condition`}),_jsx(_components.th,{children:`Example Behavior`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Mode switch or original-parameter read fails`}),_jsx(_components.td,{children:`Reports an error, attempts to disable and clean up, and doesn’t start motion`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A limit write doesn’t take effect`}),_jsx(_components.td,{children:`Lists joints with mismatched readbacks and attempts restoration`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Enable timeout or incomplete posture`}),_jsx(_components.td,{children:`Enters cleanup without sending the open/close sequence`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Ctrl+C during motion`}),_jsx(_components.td,{children:`Stops sending, attempts to disable and restore parameters, and doesn’t add a homing move`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Joints go offline during cleanup`}),_jsx(_components.td,{children:`Reports restoration errors. Don’t assume all parameters were restored`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`extensions`,children:`Extensions`}),`\n`,_jsx(Heading,{level:`3`,id:`use-another-position-trajectory`,children:`Use Another Position Trajectory`}),`\n`,_jsxs(_components.p,{children:[`Replace the 20-joint position sequence from `,_jsx(_components.code,{children:`generate_sweep()`}),`. Keep parameter snapshots, readback checks, enable waiting, the starting transition, and cleanup. Sending the same angle to all joints is specific to this example, not a general grasping posture.`]}),`\n`,_jsx(Heading,{level:`2`,id:`related-content`,children:`Related Content`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/docs/en/wuji-hand/latest/control-guide#position-control-mode`,children:`Position Control Mode`}),`: mode selection`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/docs/en/wuji-hand/latest/sdk-reference#position-control-interface-reference`,children:`Position Control Interface Reference`}),`: mode switching, filtering, and command publishing`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/docs/en/wuji-hand/latest/sdk-reference/effort-and-mit#effort_limit-set/get`,children:`Output Limits`}),`: units, validation, and partial writes`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/docs/en/wuji-hand/latest/sdk-practice/subscribe-callback#integration-steps`,children:`Callback Subscription`}),`: reading joint states`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Position Control (Beta)","description":null,"href":"/docs/en/wuji-hand/latest/sdk-practice/position-mode"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[{"title":"Hardware","slug":"hardware","depth":3,"children":[]},{"title":"Software","slug":"software","depth":3,"children":[]},{"title":"Before You Start","slug":"before-you-start","depth":3,"children":[]}]},{"title":"Data Flow","slug":"data-flow","depth":2,"children":[]},{"title":"Integration Steps","slug":"integration-steps","depth":2,"children":[{"title":"1. Connect and Check the Joints","slug":"1-connect-and-check-the-joints","depth":3,"children":[]},{"title":"2. Switch Modes and Read the Original Parameters","slug":"2-switch-modes-and-read-the-original-parameters","depth":3,"children":[]},{"title":"3. Adjust Per-Joint Limits and Set the Cutoff","slug":"3-adjust-per-joint-limits-and-set-the-cutoff","depth":3,"children":[]},{"title":"4. Enable and Transition from the Current Posture","slug":"4-enable-and-transition-from-the-current-posture","depth":3,"children":[]},{"title":"5. Send the Open/Close Sequence","slug":"5-send-the-open/close-sequence","depth":3,"children":[]},{"title":"6. Stop and Restore Parameters","slug":"6-stop-and-restore-parameters","depth":3,"children":[]}]},{"title":"Running and Output","slug":"running-and-output","depth":2,"children":[{"title":"Run the Example","slug":"run-the-example","depth":3,"children":[]},{"title":"Check the Output and Result","slug":"check-the-output-and-result","depth":3,"children":[]}]},{"title":"Notes","slug":"notes","depth":2,"children":[]},{"title":"Extensions","slug":"extensions","depth":2,"children":[{"title":"Use Another Position Trajectory","slug":"use-another-position-trajectory","depth":3,"children":[]}]},{"title":"Related Content","slug":"related-content","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/wuji-0bbde051/b2c44d33b6c24023/scripts/copy-page-label.js","/_mintlify/custom/wuji-0bbde051/55dfb02ab44abb4e/scripts/subscribe.js"],"subdomain":"wuji-0bbde051","siteName":"Wuji Docs","title":"Position Control (Beta) - Wuji Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"cn":{"href":"/docs/zh/wuji-hand/latest/sdk-practice/position-mode","matchLevel":1},"en":{"href":"/docs/en/wuji-hand/latest/sdk-practice/position-mode","matchLevel":0}}},"lastModified":"2026-11-10T10:11:21.850Z","originalFileLocation":"docs/en/wuji-hand/latest/sdk-practice/position-mode.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Wuji Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/wuji-0bbde051/YiVCFEFt9Io2b5rD/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/wuji-0bbde051/YiVCFEFt9Io2b5rD/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/wuji-0bbde051/YiVCFEFt9Io2b5rD/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/wuji-0bbde051/YiVCFEFt9Io2b5rD/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/wuji-0bbde051/YiVCFEFt9Io2b5rD/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/wuji-0bbde051/YiVCFEFt9Io2b5rD/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/wuji-0bbde051/YiVCFEFt9Io2b5rD/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/wuji-0bbde051/YiVCFEFt9Io2b5rD/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/wuji-0bbde051/YiVCFEFt9Io2b5rD/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Position Control (Beta) - Wuji Docs\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Wuji Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice/position-mode\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://wuji-0bbde051.mintlify.site/_mintlify/api/og/v2?division=SDK+Practice\u0026amp;title=Position+Control+%28Beta%29\u0026amp;theme=5ed30db2cb8604ac69e52a05\u0026amp;signature=22470a2d6c96029a511d36bcec716f87e14dfca1e68e2f40fc14d48bbea6eb63\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Position Control (Beta) - Wuji Docs\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://wuji-0bbde051.mintlify.site/_mintlify/api/og/v2?division=SDK+Practice\u0026amp;title=Position+Control+%28Beta%29\u0026amp;theme=5ed30db2cb8604ac69e52a05\u0026amp;signature=22470a2d6c96029a511d36bcec716f87e14dfca1e68e2f40fc14d48bbea6eb63\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/wuji-0bbde051/YiVCFEFt9Io2b5rD/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Wuji Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#207FFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice/position-mode\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/en/wuji-hand/latest/sdk-practice/position-mode.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice/position-mode\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.wuji.tech/docs/zh/wuji-hand/latest/sdk-practice/position-mode\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.wuji.tech/docs/zh/wuji-hand/latest/sdk-practice/position-mode\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.wuji.tech/#organization\",\"name\":\"Wuji Docs\",\"url\":\"https://docs.wuji.tech\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/wuji-0bbde051/L5L7y_1GoeOydbgy/shared/assets/brand/logo-light.svg?fit=max\u0026auto=format\u0026n=L5L7y_1GoeOydbgy\u0026q=85\u0026s=1e43e384fc1295b14de2c02f102e820c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.wuji.tech#website\",\"name\":\"Wuji Docs\",\"url\":\"https://docs.wuji.tech\",\"publisher\":{\"@id\":\"https://docs.wuji.tech/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice/position-mode#webpage\",\"url\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice/position-mode\",\"name\":\"Position Control (Beta)\",\"dateModified\":\"2026-11-10T10:11:21.850Z\",\"isPartOf\":{\"@id\":\"https://docs.wuji.tech#website\"},\"breadcrumb\":{\"@id\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice/position-mode#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice/position-mode#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Hardware\",\"item\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wuji Hand 2\",\"item\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"2.2 Beta\",\"item\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Integration and Development\",\"item\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest/hardware-integration\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"SDK Practice\",\"item\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice\"},{\"@type\":\"ListItem\",\"position\":6,\"name\":\"Position Control (Beta)\",\"item\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice/position-mode\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice/position-mode#article\",\"headline\":\"Position Control (Beta)\",\"name\":\"Position Control (Beta)\",\"url\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice/position-mode\",\"mainEntityOfPage\":{\"@id\":\"https://docs.wuji.tech/docs/en/wuji-hand/latest/sdk-practice/position-mode#webpage\"},\"dateModified\":\"2026-11-10T10:11:21.850Z\",\"publisher\":{\"@id\":\"https://docs.wuji.tech/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.wuji.tech#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Wuji Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Wuji Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/en/wuji-hand/latest/sdk-practice/position-mode.md","siteName":"Wuji Docs","nav":{"global":null,"languages":[{"language":"cn","banner":{"content":"**新** · 2026.11.10 · 跨平台开发、位置控制模式(Beta)、数据质量告警与手部模型标定提速。[查看详情](/docs/zh/release-notes#2026-11-10)","dismissible":true},"footer":{"socials":{"github":"https://github.com/wuji-technology"},"links":[{"header":"探索","items":[{"label":"发布记录","href":"/docs/zh/release-notes"},{"label":"视频","href":"/docs/zh/videos"},{"label":"归档","href":"/docs/zh/archived"}]},{"header":"公司","items":[{"label":"产品官网","href":"https://wuji.tech"},{"label":"GitHub","href":"https://github.com/wuji-technology"},{"label":"sales@wuji.tech","href":"mailto:sales@wuji.tech"}]}]},"navbar":{"links":[{"href":"/docs/zh/release-notes","label":"发布记录"},{"href":"/docs/zh/videos","label":"视频"},{"href":"/docs/zh/archived","label":"归档"}]},"pages":[{"title":"cn","href":"/docs/zh/wuji-hand/latest/sdk-practice/position-mode"}]},{"language":"en","banner":{"content":"**New** · 2026.11.10 · Cross-platform development, Position control mode (Beta), data quality warnings, and faster hand-model calibration. [Read more](/docs/en/release-notes#2026-11-10)","dismissible":true},"footer":{"socials":{"github":"https://github.com/wuji-technology"},"links":[{"header":"Explore","items":[{"label":"Release notes","href":"/docs/en/release-notes"},{"label":"Videos","href":"/docs/en/videos"},{"label":"Archived","href":"/docs/en/archived"}]},{"header":"Company","items":[{"label":"Product site","href":"https://wuji.tech"},{"label":"GitHub","href":"https://github.com/wuji-technology"},{"label":"sales@wuji.tech","href":"mailto:sales@wuji.tech"}]}]},"navbar":{"links":[{"href":"/docs/en/release-notes","label":"Release notes"},{"href":"/docs/en/videos","label":"Videos"},{"href":"/docs/en/archived","label":"Archived"}]},"groups":[{"group":"Overview","pages":[{"title":"Welcome to the Wuji Developer Docs","mode":"wide","sidebarTitle":"Home","href":"/docs/en"}]},{"group":"Hardware","pages":[{"group":"Wuji Hand 2","pages":[{"group":"2.2 Beta","tag":"LATEST","pages":[{"sidebarTitle":"Reading guide","title":"Reading guide","href":"/docs/en/wuji-hand/latest/index"},{"group":"Getting Started","pages":[{"title":"Version Identification and Compatibility","href":"/docs/en/wuji-hand/latest/version-compatibility"},{"title":"Product Introduction","href":"/docs/en/wuji-hand/latest/overview"},{"title":"User Notice","href":"/docs/en/wuji-hand/latest/user-notice"},{"title":"Quick Start","href":"/docs/en/wuji-hand/latest/quick-start"}]},{"group":"Integration and Development","pages":[{"group":"Hardware and Software Integration","pages":[{"title":"Mechanical Integration","href":"/docs/en/wuji-hand/latest/hardware-integration"},{"title":"Electrical and Network Integration","href":"/docs/en/wuji-hand/latest/electrical-network-integration"},{"title":"ROS 2 Integration","href":"/docs/en/wuji-hand/latest/ros2-integration"},{"title":"Model Assets and Loading","href":"/docs/en/wuji-hand/latest/model-integration"}]},{"title":"Control Guide","href":"/docs/en/wuji-hand/latest/control-guide"},{"title":"Calibration and Configuration","href":"/docs/en/wuji-hand/latest/calibration"},{"group":"SDK Reference","pages":[{"title":"Data Streams Overview","href":"/docs/en/wuji-hand/latest/sdk-reference"},{"title":"Joint States and Control","href":"/docs/en/wuji-hand/latest/sdk-reference/joint-control"},{"title":"Effort and MIT Parameters","href":"/docs/en/wuji-hand/latest/sdk-reference/effort-and-mit"},{"title":"IMU","href":"/docs/en/wuji-hand/latest/sdk-reference/imu"},{"title":"Device Parameters and Operations","href":"/docs/en/wuji-hand/latest/sdk-reference/device-operations"},{"title":"Diagnostics and Logs","href":"/docs/en/wuji-hand/latest/sdk-reference/diagnostics"}]},{"group":"SDK Practice","pages":[{"sidebarTitle":"Overview","title":"Overview","href":"/docs/en/wuji-hand/latest/sdk-practice/index"},{"title":"Subscribing With Callbacks","href":"/docs/en/wuji-hand/latest/sdk-practice/subscribe-callback"},{"title":"Subscribing Asynchronously","href":"/docs/en/wuji-hand/latest/sdk-practice/subscribe-async"},{"title":"Publishing Control Commands","description":null,"href":"/docs/en/wuji-hand/latest/sdk-practice/publish-command"},{"title":"Position Control (Beta)","href":"/docs/en/wuji-hand/latest/sdk-practice/position-mode"},{"title":"Replaying a Thumb Opposition","description":null,"href":"/docs/en/wuji-hand/latest/sdk-practice/opposition-replay"},{"title":"Running an MIT Joint Sweep","href":"/docs/en/wuji-hand/latest/sdk-practice/mit-sweep"},{"title":"Adjusting Stream Rate","href":"/docs/en/wuji-hand/latest/sdk-practice/stream-rate"},{"title":"Reading Device Info","href":"/docs/en/wuji-hand/latest/sdk-practice/device-info"},{"title":"Exporting Device Logs","href":"/docs/en/wuji-hand/latest/sdk-practice/export-flash-logs"}]}]},{"group":"Operations and Appendix","pages":[{"title":"Maintenance","href":"/docs/en/wuji-hand/latest/maintenance"},{"title":"Troubleshooting","href":"/docs/en/wuji-hand/latest/troubleshooting"},{"title":"Appendix","href":"/docs/en/wuji-hand/latest/reference"}]}]},{"group":"2.1 Beta","pages":[{"sidebarTitle":"Reading guide","title":"Reading guide","href":"/docs/en/wuji-hand/beta1/index"},{"group":"Getting Started","pages":[{"title":"Product Introduction","href":"/docs/en/wuji-hand/beta1/overview"},{"title":"User Notice","href":"/docs/en/wuji-hand/beta1/user-notice"},{"title":"Usage Constraints","href":"/docs/en/wuji-hand/beta1/usage-constraints"}]},{"group":"Developer Guide","pages":[{"title":"ROS 2 Integration","href":"/docs/en/wuji-hand/beta1/ros2-integration"},{"title":"SDK Reference","href":"/docs/en/wuji-hand/beta1/sdk-reference"}]}]}]},{"group":"Wuji Glove","pages":[{"sidebarTitle":"Reading guide","title":"Reading guide","href":"/docs/en/wuji-glove/latest/index"},{"group":"Getting Started","pages":[{"title":"Product Introduction","href":"/docs/en/wuji-glove/latest/introduction"},{"title":"User Notice","href":"/docs/en/wuji-glove/latest/user-notice"},{"title":"Quick Start","href":"/docs/en/wuji-glove/latest/getting-started"}]},{"group":"Integration and Development","pages":[{"title":"Calibration and Configuration","href":"/docs/en/wuji-glove/latest/calibration"},{"group":"Hardware and Software Integration","pages":[{"title":"Mechanical Integration","href":"/docs/en/wuji-glove/latest/hardware-integration"},{"title":"Electrical and Network Integration","href":"/docs/en/wuji-glove/latest/electrical-network-integration"},{"title":"ROS 2 Integration","href":"/docs/en/wuji-glove/latest/ros2-integration"},{"title":"Model Assets and Loading","href":"/docs/en/wuji-glove/latest/model-integration"}]},{"title":"Coordinate Frames","href":"/docs/en/wuji-glove/latest/coordinate-frames"},{"title":"Offline Solving","href":"/docs/en/wuji-glove/latest/offline-pipeline"},{"group":"SDK Reference","pages":[{"title":"Data Streams Overview","href":"/docs/en/wuji-glove/latest/sdk-data-reference/index"},{"title":"Tactile","href":"/docs/en/wuji-glove/latest/sdk-data-reference/tactile"},{"title":"Hand Tracking","href":"/docs/en/wuji-glove/latest/sdk-data-reference/hand-tracking"},{"title":"IMU","href":"/docs/en/wuji-glove/latest/sdk-data-reference/imu"},{"title":"Coordinate Transforms","href":"/docs/en/wuji-glove/latest/sdk-data-reference/coordinate-transforms"},{"title":"Device Parameters and Operations","href":"/docs/en/wuji-glove/latest/sdk-data-reference/device-operations"},{"title":"Hand Model Calibration","href":"/docs/en/wuji-glove/latest/sdk-data-reference/calibration"}]},{"group":"SDK Practice","pages":[{"sidebarTitle":"Overview","title":"Overview","href":"/docs/en/wuji-glove/latest/sdk-practice/index"},{"title":"Subscribing With Callbacks","href":"/docs/en/wuji-glove/latest/sdk-practice/subscribe-callback"},{"title":"Subscribing Asynchronously","href":"/docs/en/wuji-glove/latest/sdk-practice/subscribe-async"},{"title":"Recording Data","href":"/docs/en/wuji-glove/latest/sdk-practice/data-recording"},{"title":"Replaying Data Offline","href":"/docs/en/wuji-glove/latest/sdk-practice/offline-replay"},{"title":"Hand Model Calibration","href":"/docs/en/wuji-glove/latest/sdk-practice/hand-model-calibration"},{"title":"Tactile Calibration","href":"/docs/en/wuji-glove/latest/sdk-practice/tactile-calibration"},{"title":"Setting a Custom Hand Model","href":"/docs/en/wuji-glove/latest/sdk-practice/custom-hand-model"},{"title":"Adjusting Stream Rate","href":"/docs/en/wuji-glove/latest/sdk-practice/stream-rate"},{"title":"Tactile Contact Grid View","href":"/docs/en/wuji-glove/latest/sdk-practice/tactile-contact-view"},{"title":"Tactile Residual Grid View","href":"/docs/en/wuji-glove/latest/sdk-practice/tactile-residual-view"}]}]},{"group":"Operations and Appendix","pages":[{"title":"Maintenance","href":"/docs/en/wuji-glove/latest/maintenance"},{"title":"Troubleshooting","href":"/docs/en/wuji-glove/latest/troubleshooting"},{"title":"Appendix","href":"/docs/en/wuji-glove/latest/appendix"}]}]},{"group":"Wuji Hand","tag":"ARCHIVED","pages":[{"sidebarTitle":"Reading guide","title":"Reading guide","href":"/docs/en/wuji-hand/v1/index"},{"title":"Changelog","href":"/docs/en/wuji-hand/v1/release-notes"},{"title":"Product Introduction","href":"/docs/en/wuji-hand/v1/overview"},{"title":"User Notice","href":"/docs/en/wuji-hand/v1/user-notice"}]}]},{"group":"Software","pages":[{"group":"Wuji SDK","pages":[{"sidebarTitle":"Reading guide","title":"Reading guide","href":"/docs/en/wuji-sdk/latest/index"},{"group":"Getting Started","pages":[{"title":"SDK Overview","href":"/docs/en/wuji-sdk/latest/introduction"},{"title":"Installation and Environment","href":"/docs/en/wuji-sdk/latest/quick-start"},{"title":"Docker Deployment","href":"/docs/en/wuji-sdk/latest/docker-deployment"}]},{"group":"Developer Guide","pages":[{"title":"Device Discovery \u0026 Connection","href":"/docs/en/wuji-sdk/latest/device-connection"},{"title":"Data Subscription Mechanism","href":"/docs/en/wuji-sdk/latest/data-subscription"},{"title":"Wuji Hand 2 Fingertip Tactile","href":"/docs/en/wuji-sdk/latest/wuji-hand-2-tactile"},{"title":"Data Recording","href":"/docs/en/wuji-sdk/latest/data-recording"},{"title":"Common Data Types","href":"/docs/en/wuji-sdk/latest/data-reference"},{"title":"SDK Users and Calibration Data","href":"/docs/en/wuji-sdk/latest/device-params"},{"title":"Time Synchronization and Coordinate Transforms","href":"/docs/en/wuji-sdk/latest/time-sync"},{"title":"Hand Retargeting","href":"/docs/en/wuji-sdk/latest/retargeting"}]},{"group":"SDK Practice","pages":[{"sidebarTitle":"Overview","title":"Overview","href":"/docs/en/wuji-sdk/latest/sdk-practice/index"},{"title":"Retargeting Sessions: Keypoints to Joint Angles","href":"/docs/en/wuji-sdk/latest/sdk-practice/retarget-session"},{"title":"Local SDK User Management","href":"/docs/en/wuji-sdk/latest/sdk-practice/user-management"},{"title":"Wuji Hand 2 Fingertip Tactile","href":"/docs/en/wuji-sdk/latest/sdk-practice/hand2-fingertip"}]},{"group":"Operations and Appendix","pages":[{"title":"Best Practices","href":"/docs/en/wuji-sdk/latest/advanced"},{"title":"Fault Logs and Error Codes","href":"/docs/en/wuji-sdk/latest/device-fault-logs"},{"title":"Troubleshooting","href":"/docs/en/wuji-sdk/latest/troubleshooting"},{"title":"C API Reference","href":"/docs/en/wuji-sdk/latest/c-sdk-reference"},{"title":"Appendix","href":"/docs/en/wuji-sdk/latest/appendix"}]}]},{"group":"Wuji CLI","pages":[{"sidebarTitle":"Reading guide","title":"Reading guide","href":"/docs/en/wuji-cli/latest/index"},{"group":"Getting Started","pages":[{"title":"CLI Overview","href":"/docs/en/wuji-cli/latest/introduction"},{"title":"Getting Started","href":"/docs/en/wuji-cli/latest/getting-started"}]},{"group":"User Guide","pages":[{"title":"Device Management","href":"/docs/en/wuji-cli/latest/device-management"},{"title":"Read and Write Parameters","href":"/docs/en/wuji-cli/latest/parameters"},{"title":"Users and Calibration Data","href":"/docs/en/wuji-cli/latest/user"},{"title":"Hand Model Calibration","href":"/docs/en/wuji-cli/latest/hand-model-calibration"},{"title":"Data Subscription","href":"/docs/en/wuji-cli/latest/subscription"},{"title":"Live Visualization","href":"/docs/en/wuji-cli/latest/visualization"},{"title":"Tactile Calibration","href":"/docs/en/wuji-cli/latest/tactile-calibration"},{"title":"Health Diagnostics","href":"/docs/en/wuji-cli/latest/doctor"},{"title":"Log Export","href":"/docs/en/wuji-cli/latest/logs"},{"title":"Firmware Upgrade","href":"/docs/en/wuji-cli/latest/firmware-upgrade"}]}]}]},{"group":"More","pages":[{"title":"Release notes","href":"/docs/en/release-notes"},{"title":"Videos","href":"/docs/en/videos"},{"group":"Archived","pages":[{"title":"Archived","href":"/docs/en/archived"},{"group":"Wuji Studio","tag":"ARCHIVED","pages":[{"title":"Changelog","href":"/docs/en/wuji-studio/latest/release-notes"},{"sidebarTitle":"All pages","title":"Reading guide","href":"/docs/en/wuji-studio/latest/index"},{"group":"Getting Started","pages":[{"title":"Overview","href":"/docs/en/wuji-studio/latest/introduction"},{"title":"Download and Installation","href":"/docs/en/wuji-studio/latest/installation"}]},{"group":"User Guide","pages":[{"title":"Basic Settings","href":"/docs/en/wuji-studio/latest/basic-settings"},{"title":"Device Management","href":"/docs/en/wuji-studio/latest/device-connection"},{"group":"Data visualization","pages":[{"title":"Overview","href":"/docs/en/wuji-studio/latest/visualization/index"},{"title":"Layout Presets","href":"/docs/en/wuji-studio/latest/visualization/layout-presets"},{"title":"Panel Types","href":"/docs/en/wuji-studio/latest/visualization/panel-types"},{"title":"3D Hand Visualization","href":"/docs/en/wuji-studio/latest/visualization/hand-3d"},{"title":"Data Recording","href":"/docs/en/wuji-studio/latest/visualization/recording"},{"title":"Device Logs","href":"/docs/en/wuji-studio/latest/visualization/device-logs"}]},{"title":"Firmware Upgrade","href":"/docs/en/wuji-studio/latest/firmware-upgrade"},{"title":"Device Calibration","href":"/docs/en/wuji-studio/latest/calibration"},{"title":"Tactile Contact Calibration","href":"/docs/en/wuji-studio/latest/tactile-calibration"}]},{"group":"Reference","pages":[{"title":"Troubleshooting","href":"/docs/en/wuji-studio/latest/troubleshooting"},{"title":"Studio Migration Guide","href":"/docs/en/wuji-studio/latest/migration-to-cli"}]}]},{"group":"Wuji Hand ROS2","tag":"ARCHIVED","pages":[{"title":"Changelog","href":"/docs/en/wujihandros2/latest/release-notes"},{"sidebarTitle":"All pages","title":"Reading guide","href":"/docs/en/wujihandros2/latest/index"},{"group":"Getting Started","pages":[{"title":"Installation","href":"/docs/en/wujihandros2/latest/installation"},{"title":"Quick Start","href":"/docs/en/wujihandros2/latest/quick-start"}]},{"group":"Configuration","pages":[{"title":"Configuration","href":"/docs/en/wujihandros2/latest/configuration"},{"title":"ROS2 Interface","href":"/docs/en/wujihandros2/latest/ros2-interface"}]},{"group":"Reference","pages":[{"title":"Appendix","href":"/docs/en/wujihandros2/latest/appendix"}]}]},{"group":"Wuji Hand HMI","tag":"ARCHIVED","pages":[{"title":"Changelog","href":"/docs/en/wuji-hand-hmi/latest/release-notes"},{"sidebarTitle":"All pages","title":"Reading guide","href":"/docs/en/wuji-hand-hmi/latest/index"},{"group":"Getting Started","pages":[{"title":"Getting Started","href":"/docs/en/wuji-hand-hmi/latest/getting-started"}]},{"group":"Usage","pages":[{"title":"Panels","href":"/docs/en/wuji-hand-hmi/latest/panels"},{"title":"Connection \u0026 Enable","href":"/docs/en/wuji-hand-hmi/latest/connection"}]},{"group":"Reference","pages":[{"title":"Troubleshooting","href":"/docs/en/wuji-hand-hmi/latest/troubleshooting"}]}]},{"group":"Wuji Hand Upgrader","tag":"ARCHIVED","pages":[{"title":"Changelog","href":"/docs/en/wuji-hand-upgrader/latest/release-notes"},{"sidebarTitle":"All pages","title":"Reading guide","href":"/docs/en/wuji-hand-upgrader/latest/index"},{"group":"Getting Started","pages":[{"title":"Installation","href":"/docs/en/wuji-hand-upgrader/latest/installation"},{"title":"Connect Device","href":"/docs/en/wuji-hand-upgrader/latest/connection"}]},{"group":"Operations","pages":[{"title":"Firmware Upgrade","href":"/docs/en/wuji-hand-upgrader/latest/upgrade"}]},{"group":"Reference","pages":[{"title":"Troubleshooting","href":"/docs/en/wuji-hand-upgrader/latest/troubleshooting"},{"title":"Uninstall","href":"/docs/en/wuji-hand-upgrader/latest/uninstallation"}]}]},{"group":"Wuji Hand SDK","tag":"ARCHIVED","pages":[{"title":"Changelog","href":"/docs/en/wujihandpy/latest/release-notes"},{"sidebarTitle":"All pages","title":"Reading guide","href":"/docs/en/wujihandpy/latest/index"},{"group":"Getting Started","pages":[{"title":"Getting Started","href":"/docs/en/wujihandpy/latest/introduction"},{"title":"Tutorial","href":"/docs/en/wujihandpy/latest/tutorial"}]},{"group":"Reference","pages":[{"title":"API Reference","href":"/docs/en/wujihandpy/latest/api-reference"}]}]},{"group":"Wuji Retargeting","tag":"ARCHIVED","pages":[{"title":"Changelog","href":"/docs/en/wuji-retargeting/latest/release-notes"},{"sidebarTitle":"All pages","title":"Reading guide","href":"/docs/en/wuji-retargeting/latest/index"},{"group":"Getting Started","pages":[{"title":"Installation","href":"/docs/en/wuji-retargeting/latest/installation"},{"title":"Quick Start","href":"/docs/en/wuji-retargeting/latest/quick-start"}]},{"group":"Advanced","pages":[{"title":"Tuning Guide","href":"/docs/en/wuji-retargeting/latest/tuning"},{"title":"API Reference","href":"/docs/en/wuji-retargeting/latest/api"}]},{"group":"Reference","pages":[{"title":"Appendix","href":"/docs/en/wuji-retargeting/latest/appendix"}]}]},{"group":"Wuji MJLab","tag":"ARCHIVED","pages":[{"title":"Changelog","href":"/docs/en/wuji-mjlab/latest/release-notes"},{"sidebarTitle":"All pages","title":"Reading guide","href":"/docs/en/wuji-mjlab/latest/index"},{"group":"Getting Started","pages":[{"title":"Introduction","href":"/docs/en/wuji-mjlab/latest/introduction"},{"title":"Installation","href":"/docs/en/wuji-mjlab/latest/installation"}]},{"group":"Training","pages":[{"title":"Training and Evaluation","href":"/docs/en/wuji-mjlab/latest/training"}]},{"group":"Deploy","pages":[{"title":"Hardware Setup","href":"/docs/en/wuji-mjlab/latest/hardware"},{"title":"Sim-to-real Deployment","href":"/docs/en/wuji-mjlab/latest/sim2real"}]},{"group":"Reference","pages":[{"title":"Architecture","href":"/docs/en/wuji-mjlab/latest/architecture"}]}]},{"group":"MuJoCo Sim","tag":"ARCHIVED","pages":[{"title":"MuJoCo Simulation Example","href":"/docs/en/mujoco-sim/latest/index"}]},{"group":"Isaac Lab Sim","tag":"ARCHIVED","pages":[{"title":"Isaac Lab Simulation Example","href":"/docs/en/isaaclab-sim/latest/index"}]}]}]}]}]},"basePath":"","title":"Position Control (Beta) - Wuji Docs","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["10e4515597"],"chunks":["BannerMarkdown-6DXXLlfN.js","dist-CmKHfscc.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-C3kuh_dz.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}