{"id":102644,"date":"2026-09-09T09:57:03","date_gmt":"2026-09-09T01:57:03","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/102644.html"},"modified":"2026-09-09T09:57:03","modified_gmt":"2026-09-09T01:57:03","slug":"07-%c2%b7-ikpy-%e5%85%a5%e9%97%a8","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/102644.html","title":{"rendered":"07 \u00b7 ikpy \u5165\u95e8"},"content":{"rendered":"<p>\u8fd9\u4e00\u7ae0\u8981\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898&#xff1a;\u4e0d\u60f3\u81ea\u5df1\u5199 DH\u3001\u4e0d\u60f3\u81ea\u5df1\u5b9e\u73b0 DLS&#xff0c;\u6709\u6ca1\u6709\u73b0\u6210\u7684\u5e93\u80fd\u7528&#xff1f;<\/p>\n<p>\u6709&#xff0c;\u5c31\u662f ikpy\u3002\u672c\u7ae0\u628a\u5b83\u62c6\u5f00\u8bb2\u6e05\u695a&#xff1a;\u4e09\u4e2a\u7c7b\u3001\u4e00\u5957\u53c2\u6570\u3001\u4ee5\u53ca 4.0 \u7248\u672c\u6539\u4e86\u54ea\u4e9b API&#xff08;\u7f51\u4e0a\u5927\u91cf\u6559\u7a0b\u5df2\u8fc7\u65f6&#xff09;\u3002<\/p>\n<p>\u914d\u5957\u4ee3\u7801&#xff1a;[code\/ch07_ikpy_intro.py]<\/p>\n<p><span class=\"token triple-quoted-string string\">&#034;&#034;&#034;<br \/>\n\u7b2c 07 \u7ae0\u914d\u5957\u4ee3\u7801&#xff1a;ikpy \u5165\u95e8\u3002<\/p>\n<p>\u8fd0\u884c&#xff1a;<br \/>\n    D:\\\\\\\\Environment\\\\\\\\dm_control_env\\\\\\\\python.exe ch07_ikpy_intro.py<\/p>\n<p>\u5185\u5bb9&#xff1a;<br \/>\n  1. \u73af\u5883\u68c0\u67e5&#xff08;ikpy &#043; sympy&#xff09;<br \/>\n  2. \u7b2c\u4e00\u4e2a\u7a0b\u5e8f&#xff1a;2 \u8fde\u6746\u5e73\u9762\u81c2&#xff08;FK &#043; IK&#xff09;<br \/>\n  3. active_links_mask \u7684\u4e09\u79cd\u8bbe\u7f6e\u65b9\u5f0f&#xff08;\u5b9e\u6d4b\u884c\u4e3a&#xff09;<br \/>\n  4. \u5173\u8282\u9650\u4f4d bounds \u9a8c\u8bc1<br \/>\n  5. \u56fa\u5b9a\u8fde\u6746\u5fc5\u987b\u5199 joint_type&#061;&#034;fixed&#034;&#xff08;\u9519\u8bef\u6f14\u793a&#xff09;<br \/>\n  6. DHLink \u4e0e\u7b2c 05 \u7ae0\u624b\u5199 DH \u5bf9\u7167<br \/>\n  7. \u52a8\u624b\u7ec3\u7b54\u6848<br \/>\n&#034;&#034;&#034;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> warnings<br \/>\n<span class=\"token keyword\">import<\/span> numpy <span class=\"token keyword\">as<\/span> np<\/p>\n<p>np<span class=\"token punctuation\">.<\/span>set_printoptions<span class=\"token punctuation\">(<\/span>precision<span class=\"token operator\">&#061;<\/span><span class=\"token number\">6<\/span><span class=\"token punctuation\">,<\/span> suppress<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\"># 7.2 \u73af\u5883\u68c0\u67e5<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;7.2  \u73af\u5883\u68c0\u67e5&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">import<\/span> importlib<\/p>\n<p><span class=\"token keyword\">for<\/span> pkg <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ikpy&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;sympy&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;numpy&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;scipy&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        mod <span class=\"token operator\">&#061;<\/span> importlib<span class=\"token punctuation\">.<\/span>import_module<span class=\"token punctuation\">(<\/span>pkg<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  [OK]      <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>pkg<span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">&lt;8<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">getattr<\/span><span class=\"token punctuation\">(<\/span>mod<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;__version__&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;?&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> ImportError <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  [MISSING] <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>pkg<span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">&lt;8<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> pkg <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;sympy&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;            -&gt; ikpy \u4f9d\u8d56 sympy \u4f46\u4e0d\u4f1a\u81ea\u52a8\u5b89\u88c5&#xff0c;\u8bf7\u6267\u884c: pip install sympy&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">import<\/span> ikpy<br \/>\n<span class=\"token keyword\">from<\/span> ikpy<span class=\"token punctuation\">.<\/span>chain <span class=\"token keyword\">import<\/span> Chain<br \/>\n<span class=\"token keyword\">from<\/span> ikpy<span class=\"token punctuation\">.<\/span>link <span class=\"token keyword\">import<\/span> OriginLink<span class=\"token punctuation\">,<\/span> URDFLink<span class=\"token punctuation\">,<\/span> DHLink<\/p>\n<p><span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\\\\nikpy \u7248\u672c: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ikpy<span class=\"token punctuation\">.<\/span>__version__<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">  (\u672c\u4e66\u6309 4.0 \u5b9e\u6d4b\u7f16\u5199)&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\"># 7.4 \u7b2c\u4e00\u4e2a\u7a0b\u5e8f&#xff1a;2 \u8fde\u6746\u5e73\u9762\u81c2<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#034;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;7.4  \u7b2c\u4e00\u4e2a\u7a0b\u5e8f&#xff1a;2 \u8fde\u6746\u5e73\u9762\u81c2&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">make_two_link<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u521b\u5efa\u4e00\u6761 2 \u8fde\u6746\u5e73\u9762\u81c2&#xff08;\u5728 XZ \u5e73\u9762\u5185\u6446\u52a8&#xff0c;\u4e0e\u672c\u4e66 Z-up \u5750\u6807\u7cfb\u4e00\u81f4&#xff09;\u3002<\/p>\n<p>    ikpy \u6700\u5173\u952e\u7684\u5efa\u6a21\u7ea6\u5b9a&#xff08;\u6781\u5176\u5bb9\u6613\u7406\u89e3\u9519&#xff09;&#xff1a;<\/p>\n<p>        link[i] \u7684 origin_translation        &#061; \u4ece\u7236\u5173\u8282\u5230\u672c\u5173\u8282\u7684\u504f\u79fb<br \/>\n        \u6700\u540e\u4e00\u4e2a link \u7684 origin_translation  &#061; \u4ece\u6700\u540e\u5173\u8282\u5230\u672b\u7aef\u7684\u8ddd\u79bb<\/p>\n<p>    \u53ea\u6709&#034;\u5173\u8282\u540e\u9762\u8fd8\u6709\u504f\u79fb&#034;&#xff0c;\u8fd9\u4e2a\u5173\u8282\u7684\u65cb\u8f6c\u624d\u4f1a\u6539\u53d8\u672b\u7aef\u4f4d\u7f6e\u3002<br \/>\n    \u6240\u4ee5\u4e00\u53f0 2 \u8fde\u6746\u81c2\u9700\u8981 4 \u4e2a\u5143\u7d20&#xff1a;<br \/>\n        OriginLink &#043; \u5173\u82821 &#043; \u5173\u82822 &#043; \u672b\u7aef\u504f\u79fb(\u56fa\u5b9a)<br \/>\n    \u82e5\u53ea\u5199 OriginLink &#043; 2 \u4e2a\u5173\u8282&#xff0c;\u7b2c\u4e8c\u4e2a\u5173\u8282\u540e\u9762\u6ca1\u6709\u504f\u79fb&#xff0c;\u5b83\u7684\u65cb\u8f6c<br \/>\n    \u5b8c\u5168\u4e0d\u5f71\u54cd\u672b\u7aef\u4f4d\u7f6e \u2014\u2014 IK \u4f1a\u89e3\u51fa\u4efb\u610f\u89d2\u5ea6\u5374&#034;\u770b\u8d77\u6765\u6b63\u786e&#034;&#xff0c;\u6781\u5177\u8ff7\u60d1\u6027\u3002<br \/>\n    &#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> Chain<span class=\"token punctuation\">(<\/span><br \/>\n        name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;two_link_arm&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n            OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>                                     <span class=\"token comment\"># \u5730\u57fa<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;shoulder&#034;<\/span><span class=\"token punctuation\">,<\/span>                         <span class=\"token comment\"># \u5173\u8282 1&#xff08;\u57fa\u5ea7\u5728\u539f\u70b9&#xff09;<\/span><br \/>\n                     origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>                       <span class=\"token comment\"># \u7ed5 &#043;Y \u8f6c&#xff08;XZ \u5e73\u9762\u5185\u4fef\u4ef0&#xff09;<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;elbow&#034;<\/span><span class=\"token punctuation\">,<\/span>                            <span class=\"token comment\"># \u5173\u8282 2&#xff08;\u8ddd\u5173\u8282 1 \u4e3a L1&#xff09;<\/span><br \/>\n                     origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;tip&#034;<\/span><span class=\"token punctuation\">,<\/span>                              <span class=\"token comment\"># \u672b\u7aef\u504f\u79fb&#xff08;\u8ddd\u5173\u8282 2 \u4e3a L2&#xff09;<\/span><br \/>\n                     origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.30<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     rotation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span> joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;fixed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>          <span class=\"token comment\"># \u5730\u57fa\u4e0e\u672b\u7aef\u4e0d\u53c2\u4e0e\u4f18\u5316<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u4e24\u4e2a\u53cd\u9762\u6559\u6750 &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">with<\/span> warnings<span class=\"token punctuation\">.<\/span>catch_warnings<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    warnings<span class=\"token punctuation\">.<\/span>simplefilter<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ignore&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u53cd\u9762\u6559\u6750 A&#xff1a;\u8fde\u6746\u6cbf X\u3001\u5374\u7ed5 X \u8f6c \u2014\u2014 \u8fde\u6746\u65b9\u5411\u4e0e\u65cb\u8f6c\u8f74\u5e73\u884c&#xff0c;\u65cb\u8f6c\u4e0d\u4ea7\u751f\u4f4d\u79fb<\/span><br \/>\n    chain_bad_axis <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;bad_axis&#034;<\/span><span class=\"token punctuation\">,<\/span> links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n        OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;l1&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;l2&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    T_badA <span class=\"token operator\">&#061;<\/span> chain_bad_axis<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u53cd\u9762\u6559\u6750A \u8fde\u6746\u6cbf-X &#043; \u7ed5-X\u8f6c: q&#061;[0,30deg,-45deg] -&gt; \u672b\u7aef <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>T_badA<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;          \u65e0\u8bba\u5173\u8282\u8f6c\u591a\u5c11&#xff0c;\u672b\u7aef\u90fd\u505c\u5728 (-0.6,0,0) \u2014\u2014 \u65cb\u8f6c\u6ca1\u8d77\u4f5c\u7528&#xff01;\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u53cd\u9762\u6559\u6750 B&#xff1a;\u5c11\u4e86\u672b\u7aef\u504f\u79fb \u2014\u2014 \u6700\u540e\u4e00\u4e2a\u5173\u8282\u4e0d\u5f71\u54cd\u672b\u7aef\u4f4d\u7f6e<\/span><br \/>\n    chain_no_tip <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;no_tip&#034;<\/span><span class=\"token punctuation\">,<\/span> links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n        OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.00<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.30<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    T_B1 <span class=\"token operator\">&#061;<\/span> chain_no_tip<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    T_B2 <span class=\"token operator\">&#061;<\/span> chain_no_tip<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u53cd\u9762\u6559\u6750B \u7f3a\u672b\u7aef\u504f\u79fb: q2&#061;-45deg -&gt; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>T_B1<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">5<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;                     q2&#061;   0deg -&gt; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>T_B2<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">5<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;          \u4e24\u4e2a\u5b8c\u5168\u4e0d\u540c\u7684\u5173\u8282\u89d2&#xff0c;\u672b\u7aef\u4f4d\u7f6e\u5374\u4e00\u6837 \u2014\u2014 \u56e0\u4e3a j2 \u540e\u9762\u6ca1\u6709\u504f\u79fb&#xff01;\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">with<\/span> warnings<span class=\"token punctuation\">.<\/span>catch_warnings<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    warnings<span class=\"token punctuation\">.<\/span>simplefilter<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ignore&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    chain <span class=\"token operator\">&#061;<\/span> make_two_link<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;links:&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span>l<span class=\"token punctuation\">.<\/span>name <span class=\"token keyword\">for<\/span> l <span class=\"token keyword\">in<\/span> chain<span class=\"token punctuation\">.<\/span>links<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;active_links_mask:&#034;<\/span><span class=\"token punctuation\">,<\/span> chain<span class=\"token punctuation\">.<\/span>active_links_mask<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u6b63\u8fd0\u52a8\u5b66 FK<\/span><br \/>\n<span class=\"token comment\"># \u6ce8\u610f&#xff1a;forward_kinematics \u9700\u8981\u3010\u5b8c\u6574\u3011\u6570\u7ec4&#xff0c;\u957f\u5ea6 &#061; len(chain.links)<\/span><br \/>\n<span class=\"token comment\"># \u8fd9\u91cc &#061; base(1) &#043; shoulder(1) &#043; elbow(1) &#043; tip(1) &#061; 4 \u4e2a<\/span><br \/>\nq <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">]<\/span><br \/>\nT <span class=\"token operator\">&#061;<\/span> chain<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span>q<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\\\\nFK: \u5173\u8282\u89d2 [30\u00b0, -45\u00b0] -&gt; \u672b\u7aef <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>T<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">3, 3]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u9006\u8fd0\u52a8\u5b66 IK<\/span><br \/>\nq_sol <span class=\"token operator\">&#061;<\/span> chain<span class=\"token punctuation\">.<\/span>inverse_kinematics<span class=\"token punctuation\">(<\/span>target_position<span class=\"token operator\">&#061;<\/span>T<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;IK: \u89e3(\u5b8c\u6574\u6570\u7ec4) &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>q_sol<span class=\"token punctuation\">,<\/span> <span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;    \u5173\u8282\u89d2 &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>np<span class=\"token punctuation\">.<\/span>degrees<span class=\"token punctuation\">(<\/span>q_sol<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u00b0   # \u5e94\u56de\u5230 30\u00b0 \/ -45\u00b0&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u5f80\u8fd4\u9a8c\u8bc1<\/span><br \/>\nT_back <span class=\"token operator\">&#061;<\/span> chain<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span>q_sol<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u5f80\u8fd4\u8bef\u5dee &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span>linalg<span class=\"token punctuation\">.<\/span>norm<span class=\"token punctuation\">(<\/span>T_back<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#8211;<\/span> T<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">.2e<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\"># 7.5 active_links_mask \u7684\u5b9e\u6d4b\u884c\u4e3a<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#034;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;7.5  active_links_mask \u5b9e\u6d4b\u884c\u4e3a&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>links_2 <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><br \/>\n    OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;shoulder&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n             origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;elbow&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n             origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;tip&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n             origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span> joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;fixed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">]<\/span><\/p>\n<p><span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;  &#8212; \u60c5\u51b5 1&#xff1a;\u4e0d\u4f20 mask&#xff08;\u4f1a\u8b66\u544a&#xff09;&#8212;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">with<\/span> warnings<span class=\"token punctuation\">.<\/span>catch_warnings<span class=\"token punctuation\">(<\/span>record<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> w<span class=\"token punctuation\">:<\/span><br \/>\n    warnings<span class=\"token punctuation\">.<\/span>simplefilter<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;always&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    c1 <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span>links<span class=\"token operator\">&#061;<\/span>links_2<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  mask &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>c1<span class=\"token punctuation\">.<\/span>active_links_mask<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> ww <span class=\"token keyword\">in<\/span> w<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  Warning: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>ww<span class=\"token punctuation\">.<\/span>message<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">80]<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#8230;&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n  &#8212; \u60c5\u51b5 2&#xff1a;\u4f20 [False, True, True, False]&#xff08;\u63a8\u8350\u5199\u6cd5&#xff09;&#8212;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\nc2 <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span>links<span class=\"token operator\">&#061;<\/span>links_2<span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  mask &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>c2<span class=\"token punctuation\">.<\/span>active_links_mask<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">   # \u539f\u6837\u4fdd\u7559&#xff0c;\u65e0\u8b66\u544a&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n  &#8212; \u60c5\u51b5 3&#xff1a;\u4f20 [False, True, False, False]&#xff08;\u9501\u6b7b\u5173\u8282 2&#xff09;&#8212;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\nc3 <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span>links<span class=\"token operator\">&#061;<\/span>links_2<span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  mask &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>c3<span class=\"token punctuation\">.<\/span>active_links_mask<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\nq_locked <span class=\"token operator\">&#061;<\/span> c3<span class=\"token punctuation\">.<\/span>inverse_kinematics<span class=\"token punctuation\">(<\/span>target_position<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.42<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  IK \u89e3 &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>q_locked<span class=\"token punctuation\">,<\/span> <span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">   # \u7b2c 2 \u4e2a\u5173\u8282\u4fdd\u6301 0&#xff0c;\u88ab\u9501\u6b7b&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n  \u89c4\u5f8b: OriginLink -&gt; False&#xff1b;\u771f\u5b9e\u5173\u8282 -&gt; True&#xff1b;\u56fa\u5b9a\u504f\u79fb\u8fde\u6746 -&gt; False&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\"># 7.6 \u5173\u8282\u9650\u4f4d bounds<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#034;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;7.6  \u5173\u8282\u9650\u4f4d bounds&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">with<\/span> warnings<span class=\"token punctuation\">.<\/span>catch_warnings<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    warnings<span class=\"token punctuation\">.<\/span>simplefilter<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ignore&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    chain_lim <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span><br \/>\n        name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;limited_arm&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n            OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     bounds<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">3.14<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3.14<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     bounds<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1.5<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1.5<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>          <span class=\"token comment\"># \u2190 \u9650\u4f4d\u6536\u7d27\u5230 \u00b11.5 rad<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;ee&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;fixed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>          <span class=\"token comment\"># \u672b\u7aef\u56fa\u5b9a\u504f\u79fb&#xff08;\u5c0f\u81c2&#xff09;<\/span><br \/>\n        <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5404\u5173\u8282 bounds:&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span>l<span class=\"token punctuation\">.<\/span>bounds <span class=\"token keyword\">for<\/span> l <span class=\"token keyword\">in<\/span> chain_lim<span class=\"token punctuation\">.<\/span>links<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;(\u8fde\u6746\u6cbf -X&#xff0c;\u7ed5 Y \u8f6c -&gt; \u5728 XZ \u5e73\u9762\u8fd0\u52a8&#xff1b;\u603b\u81c2\u957f 0.30&#043;0.25 &#061; 0.55)\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">for<\/span> tgt <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.20<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.45<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.10<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.50<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.35<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.20<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    qq <span class=\"token operator\">&#061;<\/span> chain_lim<span class=\"token punctuation\">.<\/span>inverse_kinematics<span class=\"token punctuation\">(<\/span>target_position<span class=\"token operator\">&#061;<\/span>tgt<span class=\"token punctuation\">)<\/span><br \/>\n    TT <span class=\"token operator\">&#061;<\/span> chain_lim<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span>qq<span class=\"token punctuation\">)<\/span><br \/>\n    err <span class=\"token operator\">&#061;<\/span> np<span class=\"token punctuation\">.<\/span>linalg<span class=\"token punctuation\">.<\/span>norm<span class=\"token punctuation\">(<\/span>TT<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#8211;<\/span> np<span class=\"token punctuation\">.<\/span>array<span class=\"token punctuation\">(<\/span>tgt<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    hit <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034; \u2605\u649e\u9650\u4f4d&#034;<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">abs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token builtin\">abs<\/span><span class=\"token punctuation\">(<\/span>qq<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1.5<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">1e-6<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  \u76ee\u6807 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>tgt<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> -&gt; \u89e3&#061;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>qq<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">  &#034;<\/span><\/span><br \/>\n          <span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u672b\u7aef&#061;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>TT<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">5<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">  \u8bef\u5dee&#061;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>err<span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">.2e<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>hit<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n  &gt;&gt; \u82e5\u76ee\u6807\u9700\u8981\u8d85\u51fa\u9650\u4f4d\u624d\u80fd\u5230\u8fbe&#xff0c;j2 \u4f1a\u88ab\u94b3\u5728 \u00b11.5&#xff0c;\u672b\u7aef\u56e0\u6b64\u6709\u6b8b\u5dee\u3002&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;     ikpy \u4e0d\u4f1a\u62a5\u9519&#xff0c;\u800c\u662f\u8fd4\u56de&#039;\u5c3d\u529b\u800c\u4e3a&#039;\u7684\u89e3\u3002&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\"># 7.5.4 \u56fa\u5b9a\u8fde\u6746\u5fc5\u987b\u5199 joint_type&#061;&#034;fixed&#034;&#xff08;\u9519\u8bef\u6f14\u793a&#xff09;<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#034;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;7.5.4  \u56fa\u5b9a\u8fde\u6746\u7684\u5751&#xff08;\u9519\u8bef vs \u6b63\u786e\u5199\u6cd5&#xff09;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u9519\u8bef\u5199\u6cd5<\/span><br \/>\n<span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;bad_ee&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.045<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n             origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">)<\/span>      <span class=\"token comment\"># \u7f3a joint_type<\/span><br \/>\n<span class=\"token keyword\">except<\/span> ValueError <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  \u274c \u9519\u8bef\u5199\u6cd5\u62a5\u9519:\\\\n     <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">type<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>__name__<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u6b63\u786e\u5199\u6cd5<\/span><br \/>\ngood <span class=\"token operator\">&#061;<\/span> URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;good_ee&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.045<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;fixed&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  \u2705 \u6b63\u786e\u5199\u6cd5 OK: name&#061;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>good<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">, joint_type&#061;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>good<span class=\"token punctuation\">.<\/span>joint_type<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># ikpy 3.x \u7684\u65e7\u53c2\u6570\u540d&#xff08;\u4f1a\u62a5\u9519&#xff09;<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n  \u65e7\u7248(ikpy 3.x)\u5199\u6cd5\u5728 4.0 \u4e0b\u4f1a\u62a5\u9519:&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;x&#034;<\/span><span class=\"token punctuation\">,<\/span> translation_vector<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n             orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">except<\/span> TypeError <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;     TypeError: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\"># 7.7 DHLink \u4e0e\u7b2c 05 \u7ae0\u624b\u5199 DH \u5bf9\u7167<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#034;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;7.7  DHLink vs \u7b2c 05 \u7ae0\u624b\u5199 DH&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">dh_transform<\/span><span class=\"token punctuation\">(<\/span>a<span class=\"token punctuation\">,<\/span> alpha<span class=\"token punctuation\">,<\/span> d<span class=\"token punctuation\">,<\/span> theta<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u7b2c 05 \u7ae0\u624b\u5199\u7684\u6807\u51c6 DH \u53d8\u6362\u77e9\u9635\u3002&#034;&#034;&#034;<\/span><br \/>\n    ct<span class=\"token punctuation\">,<\/span> st <span class=\"token operator\">&#061;<\/span> np<span class=\"token punctuation\">.<\/span>cos<span class=\"token punctuation\">(<\/span>theta<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>sin<span class=\"token punctuation\">(<\/span>theta<span class=\"token punctuation\">)<\/span><br \/>\n    ca<span class=\"token punctuation\">,<\/span> sa <span class=\"token operator\">&#061;<\/span> np<span class=\"token punctuation\">.<\/span>cos<span class=\"token punctuation\">(<\/span>alpha<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>sin<span class=\"token punctuation\">(<\/span>alpha<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> np<span class=\"token punctuation\">.<\/span>array<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><br \/>\n        <span class=\"token punctuation\">[<\/span>ct<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&#8211;<\/span>st <span class=\"token operator\">*<\/span> ca<span class=\"token punctuation\">,<\/span>  st <span class=\"token operator\">*<\/span> sa<span class=\"token punctuation\">,<\/span> a <span class=\"token operator\">*<\/span> ct<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">[<\/span>st<span class=\"token punctuation\">,<\/span>  ct <span class=\"token operator\">*<\/span> ca<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&#8211;<\/span>ct <span class=\"token operator\">*<\/span> sa<span class=\"token punctuation\">,<\/span> a <span class=\"token operator\">*<\/span> st<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">[<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span>      sa<span class=\"token punctuation\">,<\/span>       ca<span class=\"token punctuation\">,<\/span>      d<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">[<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span>     <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span>      <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span>    <span class=\"token number\">1.0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">with<\/span> warnings<span class=\"token punctuation\">.<\/span>catch_warnings<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    warnings<span class=\"token punctuation\">.<\/span>simplefilter<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ignore&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    chain_dh <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span><br \/>\n        name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;dh_arm&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n            OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            DHLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span> d<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.20<\/span><span class=\"token punctuation\">,<\/span> a<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> alpha<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> theta<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            DHLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span> d<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.00<\/span><span class=\"token punctuation\">,<\/span> a<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> alpha<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> theta<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>q1<span class=\"token punctuation\">,<\/span> q2 <span class=\"token operator\">&#061;<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><br \/>\nT_dh <span class=\"token operator\">&#061;<\/span> chain_dh<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> q1<span class=\"token punctuation\">,<\/span> q2<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\nT_manual <span class=\"token operator\">&#061;<\/span> dh_transform<span class=\"token punctuation\">(<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.20<\/span><span class=\"token punctuation\">,<\/span> q1<span class=\"token punctuation\">)<\/span> &#064; dh_transform<span class=\"token punctuation\">(<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> q2<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  ikpy DHLink    &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>T_dh<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  \u7b2c05\u7ae0\u624b\u5199 DH  &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>T_manual<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  \u4e00\u81f4: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span>allclose<span class=\"token punctuation\">(<\/span>T_dh<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> T_manual<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n  &gt;&gt; \u8bc1\u660e\u7b2c 05 \u7ae0\u624b\u5199\u7684 DH \u53d8\u6362\u77e9\u9635\u4e0e ikpy \u7684\u5b9e\u73b0\u5b8c\u5168\u7b49\u4ef7\u3002&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\"># 7.10 \u52a8\u624b\u7ec3 \u53c2\u8003\u7b54\u6848<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#034;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;7.10 \u52a8\u624b\u7ec3 \u53c2\u8003\u7b54\u6848&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">66<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u7ec3\u4e60 1&#xff1a;2 \u8fde\u6746 FK<\/span><br \/>\n<span class=\"token keyword\">with<\/span> warnings<span class=\"token punctuation\">.<\/span>catch_warnings<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    warnings<span class=\"token punctuation\">.<\/span>simplefilter<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ignore&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    ch1 <span class=\"token operator\">&#061;<\/span> make_two_link<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\nT1 <span class=\"token operator\">&#061;<\/span> ch1<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u7ec3\u4e601 \u672b\u7aef\u4f4d\u7f6e &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>T1<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token comment\"># \u624b\u7b97\u4ea4\u53c9\u9a8c\u8bc1: \u672b\u7aef &#061; Ry(q1) &#064; (t2 &#043; Ry(q2) &#064; t3)<\/span><br \/>\n<span class=\"token comment\">#   t2&#061;(-0.3,0,0) (elbow\u504f\u79fb), t3&#061;(0,0,0.3) (tip\u504f\u79fb) \u2014\u2014 \u4e0e make_two_link() \u4e00\u81f4<\/span><br \/>\n_th1<span class=\"token punctuation\">,<\/span> _th2 <span class=\"token operator\">&#061;<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">_ry<\/span><span class=\"token punctuation\">(<\/span>a<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    c<span class=\"token punctuation\">,<\/span> s <span class=\"token operator\">&#061;<\/span> np<span class=\"token punctuation\">.<\/span>cos<span class=\"token punctuation\">(<\/span>a<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>sin<span class=\"token punctuation\">(<\/span>a<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> np<span class=\"token punctuation\">.<\/span>array<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">[<\/span>c<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> s<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span>s<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> c<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>_manual <span class=\"token operator\">&#061;<\/span> _ry<span class=\"token punctuation\">(<\/span>_th1<span class=\"token punctuation\">)<\/span> &#064; <span class=\"token punctuation\">(<\/span>np<span class=\"token punctuation\">.<\/span>array<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> _ry<span class=\"token punctuation\">(<\/span>_th2<span class=\"token punctuation\">)<\/span> &#064; np<span class=\"token punctuation\">.<\/span>array<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u7ec3\u4e601 \u624b\u7b97\u9a8c\u8bc1 &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>_manual<span class=\"token punctuation\">,<\/span> <span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">   \u4e00\u81f4: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span>allclose<span class=\"token punctuation\">(<\/span>T1<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> _manual<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u7ec3\u4e60 2&#xff1a;mask \u5bf9\u6bd4<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7ec3\u4e602 \u89c1 7.5 \u8282&#xff1a;\u4e0d\u4f20 mask -&gt; \u5168 True &#043; \u8b66\u544a&#xff1b;\u4f20 [F,T,T] -&gt; \u539f\u6837\u4fdd\u7559&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u7ec3\u4e60 3&#xff1a;bounds&#061;(-1.0, 1.0)<\/span><br \/>\n<span class=\"token keyword\">with<\/span> warnings<span class=\"token punctuation\">.<\/span>catch_warnings<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    warnings<span class=\"token punctuation\">.<\/span>simplefilter<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ignore&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    ch3 <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span><br \/>\n        name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;tight&#034;<\/span><span class=\"token punctuation\">,<\/span> links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n            OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     bounds<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">3.14<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3.14<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     bounds<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>          <span class=\"token comment\"># \u2190 \u66f4\u7d27\u7684\u9650\u4f4d<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;ee&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;fixed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token comment\"># \u7ed9\u4e00\u4e2a\u9700\u8981\u5927\u5e45\u5f2f\u66f2\u624d\u80fd\u5230\u8fbe\u7684\u76ee\u6807&#xff08;\u9760\u8fd1\u57fa\u5ea7&#xff09;<\/span><br \/>\nq_tight <span class=\"token operator\">&#061;<\/span> ch3<span class=\"token punctuation\">.<\/span>inverse_kinematics<span class=\"token punctuation\">(<\/span>target_position<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.10<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.10<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u7ec3\u4e603 \u89e3 &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>q_tight<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">  &#034;<\/span><\/span><br \/>\n      <span class=\"token string-interpolation\"><span class=\"token string\">f&#034;j2 \u662f\u5426\u88ab\u94b3\u5728 \u00b11.0: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">abs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token builtin\">abs<\/span><span class=\"token punctuation\">(<\/span>q_tight<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1.0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">1e-3<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u7ec3\u4e60 4&#xff1a;DHLink \u91cd\u5efa 3 \u81ea\u7531\u5ea6\u81c2&#xff08;\u542b\u79fb\u52a8\u5173\u8282&#xff09;<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n\u7ec3\u4e604 3 \u81ea\u7531\u5ea6\u81c2&#xff08;2 \u8f6c &#043; 1 \u79fb&#xff09;:&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">with<\/span> warnings<span class=\"token punctuation\">.<\/span>catch_warnings<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    warnings<span class=\"token punctuation\">.<\/span>simplefilter<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ignore&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    ch4 <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span><br \/>\n        name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;dh_3dof&#034;<\/span><span class=\"token punctuation\">,<\/span> links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n            OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            DHLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span> d<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.20<\/span><span class=\"token punctuation\">,<\/span> a<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> alpha<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> theta<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            DHLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span> d<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.00<\/span><span class=\"token punctuation\">,<\/span> a<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> alpha<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> theta<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token comment\"># \u6ce8\u610f&#xff1a;ikpy \u7684 DHLink \u4e0d\u76f4\u63a5\u652f\u6301&#034;\u79fb\u52a8\u5173\u8282\u53d8\u91cf d&#034;&#xff0c;<\/span><br \/>\n<span class=\"token comment\"># \u79fb\u52a8\u5173\u8282\u9700\u8981\u7528 URDFLink(translation&#061;&#8230;) \u5b9e\u73b0<\/span><br \/>\n<span class=\"token keyword\">with<\/span> warnings<span class=\"token punctuation\">.<\/span>catch_warnings<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    warnings<span class=\"token punctuation\">.<\/span>simplefilter<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ignore&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    ch4b <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span><br \/>\n        name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;urdf_3dof&#034;<\/span><span class=\"token punctuation\">,<\/span> links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n            OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token comment\"># \u4e0e DH \u53c2\u6570\u5bf9\u5e94&#xff1a;j1&#061;d&#061;0.20(\u57fa\u5ea7\u9ad8)&#043;a&#061;0.30(\u81c2\u957f), \u7ed5Z\u8f6c<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.20<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j3&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                     translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>          <span class=\"token comment\"># \u79fb\u52a8\u5173\u8282\u6cbfZ&#xff08;\u5bf9\u5e94DH\u7684d\u53d8\u91cf&#xff09;<\/span><br \/>\n                     joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;prismatic&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>        <span class=\"token comment\"># \u2190 \u5fc5\u987b\u663e\u5f0f\u6307\u5b9a&#xff01;<\/span><br \/>\n        <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\nq4 <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.1<\/span><span class=\"token punctuation\">]<\/span><br \/>\nT4 <span class=\"token operator\">&#061;<\/span> ch4b<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span>q4<span class=\"token punctuation\">)<\/span><br \/>\nT4_dh <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>dh_transform<span class=\"token punctuation\">(<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.20<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n         &#064; dh_transform<span class=\"token punctuation\">(<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n         &#064; dh_transform<span class=\"token punctuation\">(<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  URDFLink \u7248 (\u542b\u79fb\u52a8\u5173\u8282) &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>T4<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  \u624b\u5199 DH \u7248               &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>T4_dh<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;  \u4e00\u81f4: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>np<span class=\"token punctuation\">.<\/span>allclose<span class=\"token punctuation\">(<\/span>T4<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> T4_dh<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;  &gt;&gt; \u79fb\u52a8\u5173\u8282\u7528 URDFLink(translation&#061;\u8f74\u65b9\u5411) \u5b9e\u73b0&#xff0c;\u5bf9\u5e94 DH \u91cc\u7684 d \u53d8\u91cf\u3002&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n\u7b2c 07 \u7ae0\u793a\u4f8b\u4ee3\u7801\u8fd0\u884c\u5b8c\u6bd5\u3002&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<hr \/>\n<h3>\u672c\u7ae0\u5b66\u4e60\u76ee\u6807<\/h3>\n<p>\u5b66\u5b8c\u672c\u7ae0&#xff0c;\u4f60\u5c06\u80fd\u591f&#xff1a;<\/p>\n<li>\u7406\u89e3 ikpy \u5728\u4eff\u771f\u6808\u4e2d\u7684\u5b9a\u4f4d\u2014\u2014\u5b83\u53ea\u505a\u8fd0\u52a8\u5b66&#xff0c;\u4e0e MuJoCo \u4e92\u8865<\/li>\n<li>\u638c\u63e1 ikpy \u7684\u4e09\u4e2a\u6838\u5fc3\u7c7b&#xff1a;Chain\u3001OriginLink\u3001URDFLink&#xff08;\u53ca DHLink&#xff09;<\/li>\n<li>\u6b63\u786e\u6784\u5efa\u4e00\u6761\u8fd0\u52a8\u94fe\u2014\u2014\u7406\u89e3 origin_translation \u7684\u8bed\u4e49&#xff0c;\u907f\u514d&#034;\u6700\u540e\u4e00\u4e2a\u5173\u8282\u4e0d\u8d77\u4f5c\u7528&#034;\u7684\u5751<\/li>\n<li>\u7406\u89e3 active_links_mask \u7684\u4f5c\u7528\u2014\u2014\u54ea\u4e9b\u5173\u8282\u53c2\u4e0e IK \u4f18\u5316<\/li>\n<li>\u8bbe\u7f6e\u5173\u8282\u9650\u4f4d bounds\u2014\u2014\u7406\u89e3 ikpy \u7684&#034;\u5c3d\u529b\u800c\u4e3a&#034;\u884c\u4e3a<\/li>\n<li>\u7528 DHLink \u5efa\u94fe\u2014\u2014\u4e0e\u7b2c 05 \u7ae0\u7684\u624b\u5199 DH \u4ea4\u53c9\u9a8c\u8bc1<\/li>\n<li>\u7406\u89e3 ikpy \u5185\u90e8\u673a\u5236\u2014\u2014\u7b26\u53f7\u77e9\u9635 FK &#043; scipy \u4f18\u5316 IK<\/li>\n<li>\u6392\u67e5 ikpy \u5e38\u89c1\u9519\u8bef\u2014\u2014API \u53d8\u66f4\u3001\u56fa\u5b9a\u8fde\u6746\u7c7b\u578b\u3001mask \u957f\u5ea6\u7b49<\/li>\n<p>\u524d\u7f6e\u77e5\u8bc6&#xff1a;\u672c\u7ae0\u9700\u8981\u7b2c 05 \u7ae0\u7684\u6b63\u8fd0\u52a8\u5b66\u6982\u5ff5\u548c\u7b2c 06 \u7ae0\u7684\u9006\u8fd0\u52a8\u5b66\u57fa\u672c\u6982\u5ff5\u3002ikpy \u662f\u8fd9\u4e24\u7ae0\u7406\u8bba\u7684&#034;\u73b0\u6210\u5b9e\u73b0&#034;&#xff0c;\u7406\u89e3\u7406\u8bba\u540e\u518d\u770b ikpy \u4f1a\u975e\u5e38\u987a\u7545\u3002<\/p>\n<hr \/>\n<h3>7.1 ikpy \u5728\u4eff\u771f\u6808\u91cc\u7684\u4f4d\u7f6e<\/h3>\n<p>\u56de\u987e\u7b2c 00 \u7ae0\u7684\u5206\u5c42&#xff1a;<\/p>\n<p>\u7b2c 3 \u5c42  \u4efb\u52a1\u4e0e\u7b97\u6cd5   \u2192  dm_control<br \/>\n\u7b2c 2 \u5c42  \u7269\u7406\u4eff\u771f     \u2192  MuJoCo<br \/>\n\u7b2c 1 \u5c42  \u8fd0\u52a8\u5b66       \u2192  ikpy        \u2190 \u672c\u7ae0<br \/>\n\u7b2c 0 \u5c42  \u6570\u5b66         \u2192  NumPy<\/p>\n<p>ikpy \u53ea\u505a\u4e00\u4ef6\u4e8b&#xff1a;\u8fd0\u52a8\u5b66\u3002<\/p>\n<p>\u5b83\u662f\u7eaf\u51e0\u4f55\u8ba1\u7b97&#xff0c;\u4e0d\u6d89\u53ca\u8d28\u91cf\u3001\u91cd\u529b\u3001\u78b0\u649e\u3001\u6469\u64e6\u3002\u7ed9\u5b83\u4e00\u7ec4\u5173\u8282\u89d2&#xff0c;\u5b83\u7b97\u51fa\u672b\u7aef\u5728\u54ea&#xff08;FK&#xff09;&#xff1b;\u7ed9\u5b83\u4e00\u4e2a\u672b\u7aef\u76ee\u6807&#xff0c;\u5b83\u7b97\u51fa\u5173\u8282\u89d2&#xff08;IK&#xff09;\u3002\u4ec5\u6b64\u800c\u5df2\u3002<\/p>\n<p>&#x1f4a1; \u751f\u6d3b\u7c7b\u6bd4&#xff1a;ikpy \u5c31\u50cf\u8ba1\u7b97\u5668\u91cc\u7684&#034;\u51e0\u4f55\u8ba1\u7b97&#034;\u529f\u80fd\u2014\u2014\u4f60\u8f93\u5165\u8fb9\u957f\u548c\u89d2\u5ea6&#xff0c;\u5b83\u7b97\u51fa\u5bf9\u89d2\u7ebf\u957f\u5ea6\u3002\u5b83\u4e0d\u5173\u5fc3\u8fd9\u4e2a\u7269\u4f53\u662f\u4ec0\u4e48\u6750\u8d28\u3001\u4f1a\u4e0d\u4f1a\u6454\u788e\u3001\u6709\u6ca1\u6709\u649e\u5230\u522b\u7684\u4e1c\u897f\u3002\u90a3\u4e9b\u662f\u7269\u7406\u4eff\u771f\u5668&#xff08;MuJoCo&#xff09;\u7684\u4e8b\u3002<\/p>\n<p>\u8fd9\u610f\u5473\u7740&#xff1a;<\/p>\n<table>\n<tr>ikpy \u80fd\u505a\u7684ikpy \u4e0d\u80fd\u505a\u7684<\/tr>\n<tbody>\n<tr>\n<td>\u2705 \u6b63\/\u9006\u8fd0\u52a8\u5b66<\/td>\n<td>\u274c \u7269\u7406\u4eff\u771f&#xff08;\u4f1a\u4e0d\u4f1a\u5012\u3001\u4f1a\u4e0d\u4f1a\u649e&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u2705 \u5173\u8282\u9650\u4f4d\u7ea6\u675f<\/td>\n<td>\u274c \u52a8\u529b\u5b66&#xff08;\u529b\u77e9\u3001\u80fd\u8017&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u2705 \u59ff\u6001\u63a7\u5236<\/td>\n<td>\u274c \u78b0\u649e\u68c0\u6d4b<\/td>\n<\/tr>\n<tr>\n<td>\u2705 \u53ef\u89c6\u5316\u8fd0\u52a8\u94fe<\/td>\n<td>\u274c \u6e32\u67d3\u771f\u5b9e\u573a\u666f<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#x1f4a1; ikpy \u4e0e MuJoCo \u662f\u4e92\u8865\u7684&#xff1a;ikpy \u544a\u8bc9\u4f60&#034;\u5173\u8282\u5e94\u8be5\u8f6c\u5230\u8fd9\u91cc&#034;&#xff0c;MuJoCo \u544a\u8bc9\u4f60&#034;\u5b9e\u9645\u8f6c\u8fc7\u53bb\u4f1a\u53d1\u751f\u4ec0\u4e48&#034;\u3002\u672c\u9879\u76ee\u4e24\u8005\u90fd\u7528\u3002<\/p>\n<hr \/>\n<h3>7.2 \u5b89\u88c5<\/h3>\n<p>pip <span class=\"token function\">install<\/span> ikpy<\/p>\n<p>&#x1f4a1; \u5173\u4e8e\u4f9d\u8d56 sympy&#xff1a;ikpy 4.0 \u5df2\u5728\u5305\u5143\u6570\u636e\u4e2d\u58f0\u660e\u4f9d\u8d56 sympy&#xff0c;\u6b63\u5e38 pip install ikpy \u4f1a\u81ea\u52a8\u628a\u5b83\u5e26\u4e0a&#xff1b;\u53ea\u6709\u5728 &#8211;no-deps\u3001\u79bb\u7ebf\u5b89\u88c5 wheel \u7b49\u573a\u666f\u4e0b\u624d\u53ef\u80fd\u7f3a\u5931\u3002\u5982\u679c\u4f60\u770b\u5230&#xff1a;<\/p>\n<p> ModuleNotFoundError: No module named &#039;sympy&#039;<\/p>\n<p>\u6267\u884c pip install sympy \u5373\u53ef\u3002ikpy \u7528 sympy \u505a\u7b26\u53f7\u5316\u7684\u53d8\u6362\u77e9\u9635\u63a8\u5bfc&#xff0c;\u8fd9\u662f\u5b83\u7684\u6838\u5fc3\u673a\u5236&#xff08;\u4e5f\u662f\u5b83\u6bd4\u7eaf\u6570\u503c\u5b9e\u73b0\u66f4\u7075\u6d3b\u7684\u539f\u56e0&#xff09;\u3002<\/p>\n<p>\u9a8c\u8bc1\u5b89\u88c5&#xff1a;<\/p>\n<p><span class=\"token keyword\">import<\/span> ikpy<br \/>\n<span class=\"token keyword\">from<\/span> ikpy<span class=\"token punctuation\">.<\/span>chain <span class=\"token keyword\">import<\/span> Chain<br \/>\n<span class=\"token keyword\">from<\/span> ikpy<span class=\"token punctuation\">.<\/span>link <span class=\"token keyword\">import<\/span> OriginLink<span class=\"token punctuation\">,<\/span> URDFLink<span class=\"token punctuation\">,<\/span> DHLink<br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span>ikpy<span class=\"token punctuation\">.<\/span>__version__<span class=\"token punctuation\">)<\/span>      <span class=\"token comment\"># \u672c\u4e66\u5b9e\u6d4b&#xff1a;4.0.0<\/span><\/p>\n<p>&#x1f4a1; \u4e3a\u4ec0\u4e48 ikpy \u7528 sympy&#xff08;\u7b26\u53f7\u8ba1\u7b97&#xff09;&#xff1a;ikpy \u5728\u6784\u5efa Chain \u65f6&#xff0c;\u7528 sympy \u4e3a\u6bcf\u4e2a\u8fde\u6746\u63a8\u5bfc\u51fa\u7b26\u53f7\u5316\u7684\u53d8\u6362\u77e9\u9635&#xff08;\u5305\u542b\u7b26\u53f7\u53d8\u91cf \u03b81, \u03b82, \u2026&#xff09;\u3002\u7136\u540e\u5728 FK\/IK \u65f6&#xff0c;\u628a\u5177\u4f53\u6570\u503c\u4ee3\u5165\u7b26\u53f7\u8868\u8fbe\u5f0f\u3002\u8fd9\u6837\u505a\u7684\u597d\u5904\u662f&#xff1a;<\/p>\n<ul>\n<li>\u63a8\u5bfc\u4e00\u6b21&#xff0c;\u53cd\u590d\u4f7f\u7528&#xff08;\u6784\u5efa\u94fe\u65f6\u63a8\u5bfc&#xff0c;\u8ba1\u7b97\u65f6\u4ee3\u5165&#xff09;<\/li>\n<li>\u652f\u6301\u4efb\u610f\u8f74\u3001\u4efb\u610f\u6b27\u62c9\u89d2\u8868\u793a&#xff08;\u7b26\u53f7\u8ba1\u7b97\u4e0d\u5173\u5fc3\u5177\u4f53\u6570\u503c&#xff09;<\/li>\n<li>\u53ef\u4ee5\u81ea\u52a8\u8ba1\u7b97\u96c5\u53ef\u6bd4&#xff08;\u5bf9\u7b26\u53f7\u8868\u8fbe\u5f0f\u6c42\u5bfc&#xff09;<\/li>\n<\/ul>\n<p>\u4ee3\u4ef7\u662f\u6bd4\u7eaf\u6570\u503c\u5b9e\u73b0\u6162\u2014\u2014\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u7b2c 06 \u7ae0\u7684\u81ea\u7814 DLS \u7528 MuJoCo \u7684\u89e3\u6790\u96c5\u53ef\u6bd4\u4f1a\u5feb\u7ea6\u4e00\u4e2a\u6570\u91cf\u7ea7&#xff08;\u89c1 8.7 \u5b9e\u6d4b&#xff09;\u3002<\/p>\n<hr \/>\n<h3>7.3 \u4e09\u4e2a\u6838\u5fc3\u7c7b<\/h3>\n<h4>7.3.1 \u7c7b\u7684\u5c42\u6b21<\/h4>\n<p>Link&#xff08;\u62bd\u8c61\u57fa\u7c7b&#xff09;<br \/>\n \u251c\u2500\u2500 OriginLink    \u94fe\u7684\u8d77\u70b9&#xff0c;\u56fa\u5b9a\u4e0d\u52a8&#xff0c;\u4e0d\u63d0\u4f9b\u53d8\u6362<br \/>\n \u251c\u2500\u2500 URDFLink      URDF \u98ce\u683c\u7684\u8fde\u6746&#xff08;\u6700\u5e38\u7528&#xff09;<br \/>\n \u2514\u2500\u2500 DHLink        DH \u53c2\u6570\u98ce\u683c\u7684\u8fde\u6746&#xff08;\u547c\u5e94\u7b2c 05 \u7ae0&#xff09;<\/p>\n<table>\n<tr>\u7c7b\u7528\u9014\u4ec0\u4e48\u65f6\u5019\u7528<\/tr>\n<tbody>\n<tr>\n<td>Chain<\/td>\n<td>\u628a\u4e00\u5806 Link \u4e32\u6210\u4e00\u6761\u94fe&#xff0c;\u63d0\u4f9b FK\/IK<\/td>\n<td>\u6c38\u8fdc\u662f\u5165\u53e3<\/td>\n<\/tr>\n<tr>\n<td>OriginLink<\/td>\n<td>\u94fe\u7684&#034;\u5730\u57fa&#034;<\/td>\n<td>\u6bcf\u6761\u94fe\u7684\u7b2c\u4e00\u4e2a\u5143\u7d20<\/td>\n<\/tr>\n<tr>\n<td>URDFLink<\/td>\n<td>\u4e00\u4e2a\u5173\u8282 &#043; \u4e00\u6bb5\u504f\u79fb<\/td>\n<td>\u63cf\u8ff0\u5927\u591a\u6570\u673a\u5668\u4eba<\/td>\n<\/tr>\n<tr>\n<td>DHLink<\/td>\n<td>\u7528 DH \u56db\u53c2\u6570\u63cf\u8ff0\u4e00\u4e2a\u5173\u8282<\/td>\n<td>\u4f60\u624b\u4e0a\u6709 DH \u8868\u65f6<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#x1f4a1; \u7c7b\u6bd4&#xff1a;Chain \u662f\u4e00\u4e32\u73cd\u73e0\u9879\u94fe&#xff0c;Link \u662f\u6bcf\u4e00\u9897\u73cd\u73e0\u3002OriginLink \u662f\u9879\u94fe\u7684\u642d\u6263&#xff08;\u56fa\u5b9a\u7684\u8d77\u70b9&#xff09;&#xff0c;URDFLink \u662f\u666e\u901a\u73cd\u73e0&#xff08;\u6bcf\u4e2a\u90fd\u6709\u81ea\u5df1\u7684\u4f4d\u7f6e\u548c\u65cb\u8f6c\u8f74&#xff09;&#xff0c;DHLink \u662f\u7528 DH \u53c2\u6570\u63cf\u8ff0\u7684\u7279\u6b8a\u73cd\u73e0\u3002<\/p>\n<h4>7.3.2 URDFLink \u7684\u53c2\u6570&#xff08;\u6700\u91cd\u8981&#xff09;<\/h4>\n<p>ikpy 4.0 \u7684\u5b9e\u6d4b\u7b7e\u540d&#xff1a;<\/p>\n<p>URDFLink<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    origin_translation<span class=\"token punctuation\">:<\/span> np<span class=\"token punctuation\">.<\/span>ndarray<span class=\"token punctuation\">,<\/span>     <span class=\"token comment\"># \u2190 \u6ce8\u610f&#xff01;\u4e0d\u662f translation_vector<\/span><br \/>\n    origin_orientation<span class=\"token punctuation\">:<\/span> np<span class=\"token punctuation\">.<\/span>ndarray<span class=\"token punctuation\">,<\/span><br \/>\n    rotation<span class=\"token punctuation\">:<\/span> np<span class=\"token punctuation\">.<\/span>ndarray <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span>        <span class=\"token comment\"># \u65cb\u8f6c\u5173\u8282\u7684\u8f74<\/span><br \/>\n    translation<span class=\"token punctuation\">:<\/span> np<span class=\"token punctuation\">.<\/span>ndarray <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span>     <span class=\"token comment\"># \u79fb\u52a8\u5173\u8282\u7684\u8f74<\/span><br \/>\n    bounds<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">tuple<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span>               <span class=\"token comment\"># \u5173\u8282\u9650\u4f4d (lower, upper)<\/span><br \/>\n    angle_representation<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;rpy&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    use_symbolic_matrix<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">bool<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    joint_type<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;revolute&#039;<\/span><span class=\"token punctuation\">,<\/span>       <span class=\"token comment\"># &#039;revolute&#039; | &#039;prismatic&#039; | &#039;fixed&#039;<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<table>\n<tr>\u53c2\u6570\u5bf9\u5e94 URDF \u7684\u4ec0\u4e48\u8bf4\u660e<\/tr>\n<tbody>\n<tr>\n<td>origin_translation<\/td>\n<td>&lt;origin xyz&#061;&#034;&#8230;&#034;\/&gt;<\/td>\n<td>\u76f8\u5bf9\u7236\u8fde\u6746\u7684\u5e73\u79fb<\/td>\n<\/tr>\n<tr>\n<td>origin_orientation<\/td>\n<td>&lt;origin rpy&#061;&#034;&#8230;&#034;\/&gt;<\/td>\n<td>\u76f8\u5bf9\u7236\u8fde\u6746\u7684\u65cb\u8f6c&#xff08;\u6b27\u62c9\u89d2&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>rotation<\/td>\n<td>&lt;axis xyz&#061;&#034;&#8230;&#034;\/&gt;<\/td>\n<td>\u65cb\u8f6c\u5173\u8282\u7684\u8f6c\u8f74<\/td>\n<\/tr>\n<tr>\n<td>translation<\/td>\n<td>&lt;axis xyz&#061;&#034;&#8230;&#034;\/&gt;<\/td>\n<td>\u79fb\u52a8\u5173\u8282\u7684\u79fb\u52a8\u65b9\u5411<\/td>\n<\/tr>\n<tr>\n<td>bounds<\/td>\n<td>&lt;limit lower upper\/&gt;<\/td>\n<td>\u5173\u8282\u9650\u4f4d (lower, upper)<\/td>\n<\/tr>\n<tr>\n<td>joint_type<\/td>\n<td>&lt;joint type&#061;&#034;&#8230;&#034;\/&gt;<\/td>\n<td>revolute \/ prismatic \/ fixed<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u53c2\u6570\u8be6\u89e3&#xff1a;<\/p>\n<ul>\n<li>origin_translation&#xff1a;\u8fd9\u662f\u6700\u91cd\u8981\u7684\u53c2\u6570\u3002\u5b83\u8868\u793a&#034;\u8fd9\u4e2a\u8fde\u6746\u7684\u5173\u8282\u539f\u70b9&#xff0c;\u76f8\u5bf9\u4e8e\u7236\u8fde\u6746\u5173\u8282\u539f\u70b9\u7684\u504f\u79fb&#034;\u3002\u6ce8\u610f&#xff1a;\u4e0d\u662f&#034;\u8fde\u6746\u957f\u5ea6&#034;&#xff0c;\u800c\u662f&#034;\u5173\u8282\u5230\u5173\u8282\u7684\u8ddd\u79bb&#034;\u3002\u8be6\u89c1 7.4 \u8282\u3002<\/li>\n<li>origin_orientation&#xff1a;\u8fde\u6746\u5750\u6807\u7cfb\u76f8\u5bf9\u4e8e\u7236\u5750\u6807\u7cfb\u7684\u65cb\u8f6c&#xff0c;\u7528 RPY&#xff08;Roll-Pitch-Yaw&#xff09;\u6b27\u62c9\u89d2\u8868\u793a\u3002\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u662f [0,0,0]\u3002<\/li>\n<li>rotation&#xff1a;\u65cb\u8f6c\u5173\u8282\u7684\u8f6c\u8f74&#xff0c;\u5355\u4f4d\u5411\u91cf\u3002\u5982 [0,1,0] \u8868\u793a\u7ed5 Y \u8f74\u65cb\u8f6c\u3002\u65cb\u8f6c\u5173\u8282\u5fc5\u987b\u8bbe\u7f6e\u8fd9\u4e2a\u53c2\u6570\u3002<\/li>\n<li>translation&#xff1a;\u79fb\u52a8\u5173\u8282\u7684\u79fb\u52a8\u65b9\u5411&#xff0c;\u5355\u4f4d\u5411\u91cf\u3002\u5982 [0,0,1] \u8868\u793a\u6cbf Z \u8f74\u79fb\u52a8\u3002\u79fb\u52a8\u5173\u8282\u5fc5\u987b\u8bbe\u7f6e\u8fd9\u4e2a\u53c2\u6570&#xff0c;\u4e14 joint_type \u5fc5\u987b\u4e3a &#039;prismatic&#039;\u3002<\/li>\n<li>bounds&#xff1a;\u5173\u8282\u9650\u4f4d (lower, upper) \u5143\u7ec4&#xff0c;\u5355\u4f4d\u662f\u5f27\u5ea6&#xff08;\u65cb\u8f6c\u5173\u8282&#xff09;\u6216\u7c73&#xff08;\u79fb\u52a8\u5173\u8282&#xff09;\u3002ikpy \u4f1a\u628a\u5b83\u4f20\u7ed9 scipy \u4f18\u5316\u5668\u7684 bounds \u53c2\u6570\u3002<\/li>\n<li>joint_type&#xff1a;\u5173\u8282\u7c7b\u578b\u3002&#039;revolute&#039;&#xff08;\u65cb\u8f6c&#xff0c;\u9ed8\u8ba4&#xff09;\u3001&#039;prismatic&#039;&#xff08;\u79fb\u52a8&#xff09;\u3001&#039;fixed&#039;&#xff08;\u56fa\u5b9a&#xff09;\u3002\u56fa\u5b9a\u8fde\u6746\u5fc5\u987b\u663e\u5f0f\u5199 joint_type&#061;&#034;fixed&#034;\u3002<\/li>\n<\/ul>\n<p>&#x1f525; \u672c\u4e66\u5b9e\u6d4b\u8e29\u5751&#xff08;\u7b2c 1 \u53f7&#xff09;&#xff1a;<\/p>\n<table>\n<tr>\u7f51\u4e0a\u65e7\u6559\u7a0b&#xff08;ikpy 3.x&#xff09;ikpy 4.0 \u6b63\u786e\u5199\u6cd5<\/tr>\n<tbody>\n<tr>\n<td>URDFLink(translation_vector&#061;[&#8230;])<\/td>\n<td>URDFLink(origin_translation&#061;[&#8230;])<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u7528\u65e7\u5199\u6cd5\u4f1a\u76f4\u63a5\u62a5\u9519&#xff1a;<\/p>\n<p> TypeError: URDFLink.__init__() got an unexpected keyword argument &#039;translation_vector&#039;<\/p>\n<p>\u672c\u4e66\u6240\u6709\u4ee3\u7801\u90fd\u6309 4.0 \u5b9e\u6d4b\u7f16\u5199\u3002<\/p>\n<h4>7.3.3 Chain \u7684\u6784\u9020<\/h4>\n<p>Chain<span class=\"token punctuation\">(<\/span><br \/>\n    links<span class=\"token punctuation\">,<\/span>                    <span class=\"token comment\"># Link \u5217\u8868<\/span><br \/>\n    active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span>   <span class=\"token comment\"># \u54ea\u4e9b\u5173\u8282\u53c2\u4e0e IK \u4f18\u5316<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;chain&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    urdf_metadata<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    jax_precompile<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>Chain \u6784\u5efa\u6d41\u7a0b\u56fe&#xff1a;<\/p>\n<p>  #mermaid-svg-jLYbYdI7A7pceNVJ{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-jLYbYdI7A7pceNVJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jLYbYdI7A7pceNVJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jLYbYdI7A7pceNVJ .error-icon{fill:#552222;}#mermaid-svg-jLYbYdI7A7pceNVJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jLYbYdI7A7pceNVJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jLYbYdI7A7pceNVJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jLYbYdI7A7pceNVJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jLYbYdI7A7pceNVJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jLYbYdI7A7pceNVJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jLYbYdI7A7pceNVJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jLYbYdI7A7pceNVJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jLYbYdI7A7pceNVJ .marker.cross{stroke:#333333;}#mermaid-svg-jLYbYdI7A7pceNVJ svg{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jLYbYdI7A7pceNVJ p{margin:0;}#mermaid-svg-jLYbYdI7A7pceNVJ .label{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;color:#333;}#mermaid-svg-jLYbYdI7A7pceNVJ .cluster-label text{fill:#333;}#mermaid-svg-jLYbYdI7A7pceNVJ .cluster-label span{color:#333;}#mermaid-svg-jLYbYdI7A7pceNVJ .cluster-label span p{background-color:transparent;}#mermaid-svg-jLYbYdI7A7pceNVJ .label text,#mermaid-svg-jLYbYdI7A7pceNVJ span{fill:#333;color:#333;}#mermaid-svg-jLYbYdI7A7pceNVJ .node rect,#mermaid-svg-jLYbYdI7A7pceNVJ .node circle,#mermaid-svg-jLYbYdI7A7pceNVJ .node ellipse,#mermaid-svg-jLYbYdI7A7pceNVJ .node polygon,#mermaid-svg-jLYbYdI7A7pceNVJ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jLYbYdI7A7pceNVJ .rough-node .label text,#mermaid-svg-jLYbYdI7A7pceNVJ .node .label text,#mermaid-svg-jLYbYdI7A7pceNVJ .image-shape .label,#mermaid-svg-jLYbYdI7A7pceNVJ .icon-shape .label{text-anchor:middle;}#mermaid-svg-jLYbYdI7A7pceNVJ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-jLYbYdI7A7pceNVJ .rough-node .label,#mermaid-svg-jLYbYdI7A7pceNVJ .node .label,#mermaid-svg-jLYbYdI7A7pceNVJ .image-shape .label,#mermaid-svg-jLYbYdI7A7pceNVJ .icon-shape .label{text-align:center;}#mermaid-svg-jLYbYdI7A7pceNVJ .node.clickable{cursor:pointer;}#mermaid-svg-jLYbYdI7A7pceNVJ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-jLYbYdI7A7pceNVJ .arrowheadPath{fill:#333333;}#mermaid-svg-jLYbYdI7A7pceNVJ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jLYbYdI7A7pceNVJ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jLYbYdI7A7pceNVJ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jLYbYdI7A7pceNVJ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-jLYbYdI7A7pceNVJ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jLYbYdI7A7pceNVJ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-jLYbYdI7A7pceNVJ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jLYbYdI7A7pceNVJ .cluster text{fill:#333;}#mermaid-svg-jLYbYdI7A7pceNVJ .cluster span{color:#333;}#mermaid-svg-jLYbYdI7A7pceNVJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jLYbYdI7A7pceNVJ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-jLYbYdI7A7pceNVJ rect.text{fill:none;stroke-width:0;}#mermaid-svg-jLYbYdI7A7pceNVJ .icon-shape,#mermaid-svg-jLYbYdI7A7pceNVJ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jLYbYdI7A7pceNVJ .icon-shape p,#mermaid-svg-jLYbYdI7A7pceNVJ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-jLYbYdI7A7pceNVJ .icon-shape .label rect,#mermaid-svg-jLYbYdI7A7pceNVJ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jLYbYdI7A7pceNVJ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-jLYbYdI7A7pceNVJ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-jLYbYdI7A7pceNVJ :root{&#8211;mermaid-font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;}<\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/p>\n<p>\u662f<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/p>\n<p>\u5426<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u5f00\u59cb\u6784\u5efa Chain<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u521b\u5efa OriginLink() \u4f5c\u4e3a\u94fe\u7684\u8d77\u70b9<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u5bf9\u6bcf\u4e2a\u5173\u8282\u521b\u5efa URDFLink<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u8bbe\u7f6e origin_translation (\u76f8\u5bf9\u7236\u7684\u504f\u79fb)<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u8bbe\u7f6e rotation (\u65cb\u8f6c\u8f74) \u6216 translation (\u79fb\u52a8\u8f74)<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u8bbe\u7f6e bounds (\u5173\u8282\u9650\u4f4d)<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u8bbe\u7f6e joint_type (revolute\/prismatic\/fixed)<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u8fd8\u6709\u5173\u8282?<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u521b\u5efa\u672b\u7aef\u56fa\u5b9a\u504f\u79fb URDFLink (joint_type&#061;fixed)<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u8bbe\u7f6e active_links_mask &#061; [False] &#043; [True]*n &#043; [False]<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>Chain(name&#061;&#8230;, links&#061;&#8230;, active_links_mask&#061;&#8230;)<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u5b8c\u6210!<\/p>\n<p><\/span><\/p>\n<hr \/>\n<h3>7.4 \u7b2c\u4e00\u4e2a\u7a0b\u5e8f&#xff1a;2 \u8fde\u6746\u5e73\u9762\u81c2<\/h3>\n<h4>7.4.1 \u26a0\ufe0f \u5148\u641e\u61c2\u4e00\u4e2a\u81f4\u547d\u7ea6\u5b9a&#xff1a;origin_translation \u5230\u5e95\u91cf\u7684\u662f\u4ec0\u4e48<\/h4>\n<p>\u8fd9\u662f ikpy \u6700\u5bb9\u6613\u7406\u89e3\u9519\u3001\u4e14\u9519\u4e86\u4e4b\u540e\u6781\u96be\u81ea\u67e5\u7684\u5730\u65b9\u3002 \u8bf7\u52a1\u5fc5\u5148\u8bfb\u8fd9\u4e00\u5c0f\u8282\u3002<\/p>\n<p>\u4e00\u6761 ikpy \u94fe\u7684\u6574\u4f53\u53d8\u6362\u662f&#xff1a;<\/p>\n<p>T_total &#061; T\u2081 \u00b7 T\u2082 \u00b7 &#8230; \u00b7 T\u2099<br \/>\n\u672b\u7aef\u4f4d\u7f6e &#061; T_total \u4f5c\u7528\u4e8e\u539f\u70b9 (0,0,0)<\/p>\n<p>\u5c55\u5f00\u540e\u4f60\u4f1a\u53d1\u73b0\u4e00\u4e2a\u5173\u952e\u4e8b\u5b9e&#xff1a;<\/p>\n<p>\u672b\u7aef &#061; t\u2081 &#043; R\u2081\u00b7( t\u2082 &#043; R\u2082\u00b7( t\u2083 &#043; &#8230; ) )<br \/>\n       \u2514 \u5173\u82821 \u524d\u7684\u504f\u79fb      \u2514 \u5173\u82821\u2192\u5173\u82822   \u2514 \u5173\u82822\u2192\u672b\u7aef<\/p>\n<p>\u6240\u4ee5 origin_translation \u7684\u8bed\u4e49\u662f&#xff1a;<\/p>\n<table>\n<tr>\u4f4d\u7f6eorigin_translation \u7684\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>links[1]<\/td>\n<td>\u57fa\u5ea7 \u2192 \u5173\u8282 1 \u7684\u504f\u79fb<\/td>\n<\/tr>\n<tr>\n<td>links[i]<\/td>\n<td>\u5173\u8282 i-1 \u2192 \u5173\u8282 i \u7684\u504f\u79fb&#xff08;\u7b2c i-1 \u6bb5\u8fde\u6746\u957f\u5ea6&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u6700\u540e\u4e00\u4e2a link<\/td>\n<td>\u6700\u540e\u5173\u8282 \u2192 \u672b\u7aef&#xff08;TCP&#xff09; \u7684\u8ddd\u79bb<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u63a8\u8bba&#xff08;\u6781\u5176\u91cd\u8981&#xff09;&#xff1a;<\/p>\n<p>\u53ea\u6709&#034;\u5173\u8282\u540e\u9762\u8fd8\u6709\u504f\u79fb&#034;&#xff0c;\u8fd9\u4e2a\u5173\u8282\u7684\u65cb\u8f6c\u624d\u4f1a\u6539\u53d8\u672b\u7aef\u4f4d\u7f6e\u3002<\/p>\n<p>\u5982\u679c\u6700\u540e\u4e00\u4e2a link \u5c31\u662f\u4f60\u7684\u6700\u540e\u4e00\u4e2a\u5173\u8282&#xff0c;\u90a3\u5b83\u540e\u9762\u6ca1\u6709\u4efb\u4f55\u504f\u79fb\u2014\u2014\u8fd9\u4e2a\u5173\u8282\u8f6c\u591a\u5c11\u5ea6&#xff0c;\u672b\u7aef\u90fd\u7eb9\u4e1d\u4e0d\u52a8&#xff01;<\/p>\n<p>&#x1f4a1; \u751f\u6d3b\u7c7b\u6bd4&#xff1a;\u60f3\u8c61\u4f60\u624b\u91cc\u62ff\u7740\u4e00\u6839\u68cd\u5b50\u3002\u68cd\u5b50\u7684\u4e00\u7aef\u5728\u4f60\u624b\u91cc&#xff08;\u5173\u8282&#xff09;&#xff0c;\u53e6\u4e00\u7aef\u662f\u68cd\u5b50\u7684\u672b\u7aef\u3002\u5982\u679c\u4f60\u8f6c\u52a8\u624b\u8155&#xff08;\u5173\u8282\u65cb\u8f6c&#xff09;&#xff0c;\u68cd\u5b50\u7684\u672b\u7aef\u4f1a\u753b\u4e00\u4e2a\u5706\u5f27\u2014\u2014\u56e0\u4e3a\u68cd\u5b50\u6709\u957f\u5ea6&#xff08;\u5173\u8282\u540e\u9762\u6709\u504f\u79fb&#xff09;\u3002<\/p>\n<p>\u4f46\u5982\u679c\u4f60\u624b\u91cc\u4ec0\u4e48\u90fd\u6ca1\u62ff&#xff08;\u5173\u8282\u540e\u9762\u6ca1\u6709\u504f\u79fb&#xff09;&#xff0c;\u4f60\u8f6c\u52a8\u624b\u8155&#xff0c;&#034;\u672b\u7aef&#034;\u5c31\u662f\u4f60\u7684\u624b\u8155\u672c\u8eab\u2014\u2014\u5b83\u4e0d\u4f1a\u56e0\u4e3a\u8f6c\u52a8\u800c\u79fb\u52a8\u4f4d\u7f6e\u3002\u8fd9\u5c31\u662f&#034;\u6700\u540e\u4e00\u4e2a\u5173\u8282\u4e0d\u8d77\u4f5c\u7528&#034;\u7684\u539f\u56e0\u3002<\/p>\n<h4>7.4.2 \u4e24\u4e2a\u53cd\u9762\u6559\u6750&#xff08;\u5b9e\u6d4b&#xff09;<\/h4>\n<p>\u53cd\u9762\u6559\u6750 A&#xff1a;\u8f6c\u8f74\u4e0e\u8fde\u6746\u540c\u5411<\/p>\n<p><span class=\"token comment\"># \u8fde\u6746\u6cbf -X \u65b9\u5411\u4f38\u5c55&#xff0c;\u5374\u7ed5 -X \u8f74\u8f6c \u2014\u2014 \u65cb\u8f6c\u5bf9\u8fde\u6746\u4e0d\u4ea7\u751f\u4f4d\u79fb<\/span><br \/>\nChain<span class=\"token punctuation\">(<\/span>links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n    OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;l1&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n             origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;l2&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n             origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5b9e\u6d4b&#xff08;q&#061;[0, 30\u00b0, -45\u00b0]&#xff09;&#xff1a;<\/p>\n<p>\u53cd\u9762\u6559\u6750A \u8fde\u6746\u6cbf-X &#043; \u7ed5-X\u8f6c: q&#061;[0,30deg,-45deg] -&gt; \u672b\u7aef [-0.6  0.  0.]<br \/>\n          \u65e0\u8bba\u5173\u8282\u8f6c\u591a\u5c11&#xff0c;\u672b\u7aef\u90fd\u505c\u5728 (-0.6,0,0) \u2014\u2014 \u65cb\u8f6c\u6ca1\u8d77\u4f5c\u7528&#xff01;<\/p>\n<p>&#x1f4a1; \u4e3a\u4ec0\u4e48\u8f6c\u8f74\u4e0e\u8fde\u6746\u540c\u5411\u540e\u65cb\u8f6c\u4e0d\u4ea7\u751f\u4f4d\u79fb&#xff1a;\u5982\u679c\u8fde\u6746\u6cbf -X \u8f74\u4f38\u5c55&#xff0c;\u5173\u8282\u4e5f\u7ed5 X \u8f74\u65cb\u8f6c&#xff0c;\u90a3\u4e48\u65cb\u8f6c\u5c31\u662f&#034;\u7ed5\u7740\u8fde\u6746\u81ea\u8eab\u7684\u8f74\u8f6c&#034;\u2014\u2014\u5c31\u50cf\u8f6c\u52a8\u87ba\u4e1d\u5200&#xff0c;\u87ba\u4e1d\u5200\u7684\u5c16\u7aef\u4f4d\u7f6e\u4e0d\u53d8&#xff0c;\u53ea\u662f\u5728\u539f\u5730\u8f6c\u3002\u8981\u8ba9\u65cb\u8f6c\u4ea7\u751f\u4f4d\u79fb&#xff0c;\u8f6c\u8f74\u5fc5\u987b\u4e0e\u8fde\u6746\u65b9\u5411\u5782\u76f4&#xff08;\u6216\u81f3\u5c11\u6709\u5782\u76f4\u5206\u91cf&#xff09;\u3002<\/p>\n<p>\u53cd\u9762\u6559\u6750 B&#xff1a;\u5c11\u4e86\u672b\u7aef\u504f\u79fb<\/p>\n<p><span class=\"token comment\"># \u53ea\u6709 OriginLink &#043; 2 \u4e2a\u5173\u8282&#xff0c;\u7b2c\u4e8c\u4e2a\u5173\u8282\u540e\u9762\u6ca1\u6709\u504f\u79fb<\/span><br \/>\nChain<span class=\"token punctuation\">(<\/span>links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n    OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.00<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n             origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.30<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n             origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5b9e\u6d4b&#xff1a;<\/p>\n<p>q2 &#061; -45\u00b0  -&gt;  \u672b\u7aef [0.15  0.  0.25981]<br \/>\nq2 &#061;   0\u00b0  -&gt;  \u672b\u7aef [0.15  0.  0.25981]     \u2190 \u5b8c\u5168\u4e00\u6837&#xff01;<\/p>\n<p>\u4e24\u4e2a\u622a\u7136\u4e0d\u540c\u7684\u5173\u8282\u89d2&#xff0c;\u672b\u7aef\u4f4d\u7f6e\u76f8\u540c \u2014\u2014 \u56e0\u4e3a j2 \u540e\u9762\u6ca1\u6709\u504f\u79fb&#xff0c;\u5b83\u7684\u65cb\u8f6c\u88ab&#034;\u6d6a\u8d39&#034;\u6389\u4e86\u3002<\/p>\n<p>&#x1f525; \u8fd9\u4e2a\u9519\u8bef\u6781\u5177\u8ff7\u60d1\u6027&#xff1a;IK \u7167\u6837\u80fd\u8dd1\u3001\u7167\u6837&#034;\u6536\u655b&#034;\u3001\u8bef\u5dee\u7167\u6837\u63a5\u8fd1 0&#xff0c;\u4f46\u4f60\u7684\u673a\u68b0\u81c2\u5c11\u4e86\u4e00\u4e2a\u6709\u6548\u81ea\u7531\u5ea6\u3002\u5982\u679c\u4f60\u53d1\u73b0\u67d0\u4e2a\u5173\u8282\u600e\u4e48\u52a8\u90fd\u4e0d\u5f71\u54cd\u672b\u7aef&#xff0c;\u5148\u68c0\u67e5\u5b83\u540e\u9762\u6709\u6ca1\u6709\u504f\u79fb\u3002<\/p>\n<h4>7.4.3 \u6b63\u786e\u7684 2 \u8fde\u6746\u81c2<\/h4>\n<p>\u4e00\u53f0\u771f\u6b63\u7684 2 \u8fde\u6746\u81c2\u9700\u8981 4 \u4e2a\u5143\u7d20&#xff1a;<\/p>\n<p><span class=\"token keyword\">import<\/span> numpy <span class=\"token keyword\">as<\/span> np<br \/>\n<span class=\"token keyword\">from<\/span> ikpy<span class=\"token punctuation\">.<\/span>chain <span class=\"token keyword\">import<\/span> Chain<br \/>\n<span class=\"token keyword\">from<\/span> ikpy<span class=\"token punctuation\">.<\/span>link <span class=\"token keyword\">import<\/span> OriginLink<span class=\"token punctuation\">,<\/span> URDFLink<\/p>\n<p>chain <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;two_link_arm&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n        OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>                                     <span class=\"token comment\"># \u2460 \u5730\u57fa<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;shoulder&#034;<\/span><span class=\"token punctuation\">,<\/span>                         <span class=\"token comment\"># \u2461 \u5173\u8282 1&#xff08;\u57fa\u5ea7\u5728\u539f\u70b9&#xff09;<\/span><br \/>\n                 origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.00<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>                      <span class=\"token comment\">#    \u7ed5 Y \u8f6c<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;elbow&#034;<\/span><span class=\"token punctuation\">,<\/span>                            <span class=\"token comment\"># \u2462 \u5173\u8282 2&#xff08;\u8ddd\u5173\u8282 1 \u4e3a L1&#061;0.30&#xff0c;\u6cbf -X&#xff09;<\/span><br \/>\n                 origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;tip&#034;<\/span><span class=\"token punctuation\">,<\/span>                              <span class=\"token comment\"># \u2463 \u672b\u7aef\u504f\u79fb&#xff08;\u8ddd\u5173\u8282 2 \u4e3a L2&#061;0.30&#xff0c;\u6cbf &#043;Z&#xff09;<\/span><br \/>\n                 origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.30<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 rotation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span> joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;fixed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>          <span class=\"token comment\"># \u2464 \u5730\u57fa\u4e0e\u672b\u7aef\u4e0d\u53c2\u4e0e\u4f18\u5316<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u6b63\u8fd0\u52a8\u5b66&#xff1a;\u5173\u8282\u89d2 \u2192 \u672b\u7aef\u4f4d\u59ff<\/span><br \/>\n<span class=\"token comment\"># \u6ce8\u610f&#xff1a;forward_kinematics \u9700\u8981\u3010\u5b8c\u6574\u3011\u6570\u7ec4&#xff0c;\u957f\u5ea6 &#061; len(chain.links) &#061; 4<\/span><br \/>\nq <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">]<\/span><br \/>\nT <span class=\"token operator\">&#061;<\/span> chain<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span>q<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u672b\u7aef\u4f4d\u7f6e:&#034;<\/span><span class=\"token punctuation\">,<\/span> T<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u9006\u8fd0\u52a8\u5b66&#xff1a;\u672b\u7aef\u4f4d\u7f6e \u2192 \u5173\u8282\u89d2<\/span><br \/>\nq_sol <span class=\"token operator\">&#061;<\/span> chain<span class=\"token punctuation\">.<\/span>inverse_kinematics<span class=\"token punctuation\">(<\/span>target_position<span class=\"token operator\">&#061;<\/span>T<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>2 \u8fde\u6746\u81c2\u7ed3\u6784\u793a\u610f\u56fe&#xff08;\u96f6\u4f4d\u59ff\u6001\u4fa7\u89c6\u56fe&#xff0c;X \u5411\u53f3\u3001Z \u5411\u4e0a&#xff1b;\u4e24\u4e2a\u5173\u8282\u90fd\u7ed5 Y \u8f6c&#xff0c;\u5728 XZ \u5e73\u9762\u5185\u6446\u52a8&#xff09;&#xff1a;<\/p>\n<p>                                \u672b\u7aef (tip)<br \/>\n                                  \u25cf<br \/>\n                                  \u2502<br \/>\n                                  \u2502 L2 &#061; 0.30 (origin_translation of tip, \u6cbf &#043;Z)<br \/>\n                                  \u2502<br \/>\n  \u57fa\u5ea7 \u25cf\u2500\u2500 J1 (shoulder) \u25cf\u2190\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25cf J2 (elbow)   \u2190 \u90fd\u7ed5 Y \u65cb\u8f6c<br \/>\n       (shoulder \u7684 origin_translation   \u2502<br \/>\n        &#061; 0, \u57fa\u5ea7\u5728\u539f\u70b9)                 \u2502<br \/>\n                                 L1 &#061; 0.30 (origin_translation of elbow, \u6cbf -X)<\/p>\n<p>\u5b9e\u6d4b\u8f93\u51fa&#xff1a;<\/p>\n<p>FK: \u5173\u8282\u89d2 [30\u00b0, -45\u00b0] -&gt; \u672b\u7aef [-0.337453  0.        0.439778]<br \/>\nIK: \u89e3(\u5b8c\u6574\u6570\u7ec4) &#061; [ 0.        0.523599 -0.785398  0.      ]<br \/>\n    \u5173\u8282\u89d2 &#061; [ 30. -45.]\u00b0        \u2190 \u6b63\u597d\u56de\u5230\u6211\u4eec\u8f93\u5165\u7684 30\u00b0 \/ -45\u00b0<br \/>\n\u5f80\u8fd4\u8bef\u5dee &#061; 5.08e-09<\/p>\n<p>&#x1f4a1; IK \u4ece\u5168\u96f6\u79cd\u5b50\u51fa\u53d1&#xff0c;\u6536\u655b\u56de\u4e86\u8f93\u5165\u7684 [30\u00b0, -45\u00b0]&#xff08;\u5f80\u8fd4\u8bef\u5dee 5.08e-09&#xff09;\u2014\u2014\u6ce8\u610f\u9006\u89e3\u4e0d\u552f\u4e00&#xff08;\u7b2c 06 \u7ae0&#xff09;\u5e76\u4e0d\u610f\u5473\u7740\u6bcf\u6b21\u90fd\u4f1a\u8fd4\u56de\u4e0d\u540c\u7684\u89e3&#xff1a;\u4f18\u5316\u5668\u4ece\u79cd\u5b50\u51fa\u53d1&#034;\u5c31\u8fd1&#034;\u6536\u655b\u3002\u6362\u7528\u5176\u4ed6\u79cd\u5b50&#xff0c;\u53ef\u80fd\u6536\u655b\u5230\u522b\u7684\u7b49\u4ef7\u6784\u578b&#xff0c;\u4e5f\u53ef\u80fd\u5361\u5728\u4e0d\u597d\u7684\u8c37\u91cc\u2014\u2014\u7b2c 09 \u7ae0 9.3 \u8282\u4f1a\u4e13\u95e8\u5b9e\u6d4b initial_position \u5bf9\u6536\u655b\u7684\u5f71\u54cd\u3002<\/p>\n<h4>7.4.4 \u4ee3\u7801\u9010\u884c\u89e3\u8bfb<\/h4>\n<table>\n<tr>\u884c\u8bf4\u660e<\/tr>\n<tbody>\n<tr>\n<td>\u2460 OriginLink()<\/td>\n<td>\u6bcf\u6761\u94fe\u5fc5\u987b\u4ee5\u5b83\u5f00\u5934&#xff0c;\u4ee3\u8868\u56fa\u5b9a\u7684\u57fa\u5ea7<\/td>\n<\/tr>\n<tr>\n<td>\u2461 \u5173\u8282 1<\/td>\n<td>origin_translation &#061; \u57fa\u5ea7\u5230\u5173\u8282 1 \u7684\u504f\u79fb&#xff08;\u8fd9\u91cc\u662f 0&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u2462 \u5173\u8282 2<\/td>\n<td>origin_translation &#061; \u7b2c 1 \u6bb5\u8fde\u6746\u957f\u5ea6 L\u2081 &#061; 0.30<\/td>\n<\/tr>\n<tr>\n<td>\u2463 \u672b\u7aef tip<\/td>\n<td>origin_translation &#061; \u7b2c 2 \u6bb5\u8fde\u6746\u957f\u5ea6 L\u2082 &#061; 0.30&#xff0c;\u5fc5\u987b joint_type&#061;&#034;fixed&#034;<\/td>\n<\/tr>\n<tr>\n<td>\u2464 active_links_mask<\/td>\n<td>OriginLink \u4e0e\u56fa\u5b9a\u672b\u7aef\u90fd\u662f False&#xff0c;\u53ea\u6709\u771f\u5b9e\u5173\u8282\u662f True<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u624b\u7b97\u4ea4\u53c9\u9a8c\u8bc1&#xff08;\u9a8c\u8bc1\u4f60\u771f\u7684\u7406\u89e3\u4e86&#xff09;&#xff1a;<\/p>\n<p>\u672b\u7aef <span class=\"token operator\">&#061;<\/span> Ry<span class=\"token punctuation\">(<\/span>q1<span class=\"token punctuation\">)<\/span> &#064; <span class=\"token punctuation\">(<\/span>t2 <span class=\"token operator\">&#043;<\/span> Ry<span class=\"token punctuation\">(<\/span>q2<span class=\"token punctuation\">)<\/span> &#064; t3<span class=\"token punctuation\">)<\/span><br \/>\n     <span class=\"token operator\">&#061;<\/span> Ry<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span>\u00b0<span class=\"token punctuation\">)<\/span> &#064; <span class=\"token punctuation\">(<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.3<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;<\/span> Ry<span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">45<\/span>\u00b0<span class=\"token punctuation\">)<\/span> &#064; <span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0.3<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token punctuation\">)<\/span><br \/>\n     <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.337453<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.439778<\/span><span class=\"token punctuation\">]<\/span>        <span class=\"token comment\"># \u4e0e ikpy \u5b8c\u5168\u4e00\u81f4 \u2713<\/span><\/p>\n<p>&#x1f4a1; \u624b\u7b97\u516c\u5f0f\u7684\u542b\u4e49&#xff1a;<\/p>\n<ul>\n<li>t2 &#061; [-0.3,0,0] \u662f\u5173\u8282 1 \u5230\u5173\u8282 2 \u7684\u504f\u79fb&#xff08;\u7b2c\u4e00\u6bb5\u8fde\u6746\u957f\u5ea6&#xff0c;\u6cbf -X&#xff09;<\/li>\n<li>t3 &#061; [0,0,0.3] \u662f\u5173\u8282 2 \u5230\u672b\u7aef\u7684\u504f\u79fb&#xff08;\u7b2c\u4e8c\u6bb5\u8fde\u6746\u957f\u5ea6&#xff0c;\u6cbf &#043;Z&#xff09;<\/li>\n<li>Ry(q2) &#064; t3&#xff1a;\u7b2c\u4e8c\u6bb5\u8fde\u6746\u5148\u88ab\u5173\u8282 2 \u7684\u65cb\u8f6c\u6539\u53d8\u65b9\u5411<\/li>\n<li>t2 &#043; Ry(q2) &#064; t3&#xff1a;\u4e24\u6bb5\u504f\u79fb\u5728\u5173\u8282 2 \u7684\u5750\u6807\u7cfb\u4e2d\u76f8\u52a0<\/li>\n<li>Ry(q1) &#064; (&#8230;)&#xff1a;\u6574\u4f53\u518d\u88ab\u5173\u8282 1 \u7684\u65cb\u8f6c\u6539\u53d8\u65b9\u5411<\/li>\n<\/ul>\n<p>\u8fd9\u5c31\u662f&#034;\u5148\u5e73\u79fb\u540e\u65cb\u8f6c&#034;\u7684\u8bed\u4e49&#xff0c;\u4e0e\u7b2c 05 \u7ae0\u8bb2\u7684 MuJoCo \u8bed\u4e49\u4e00\u81f4\u3002<\/p>\n<hr \/>\n<h3>7.5 \u26a0\ufe0f active_links_mask&#xff1a;ikpy \u6700\u5bb9\u6613\u641e\u9519\u7684\u5730\u65b9<\/h3>\n<p>\u8fd9\u4e2a\u53c2\u6570\u51b3\u5b9a\u54ea\u4e9b\u5173\u8282\u4f1a\u88ab IK \u4f18\u5316\u5668\u6539\u53d8\u3002<\/p>\n<h4>7.5.1 \u5b9e\u6d4b\u884c\u4e3a<\/h4>\n<p>links <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span>OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> shoulder<span class=\"token punctuation\">,<\/span> elbow<span class=\"token punctuation\">,<\/span> tip<span class=\"token punctuation\">]<\/span>      <span class=\"token comment\"># 4 \u4e2a\u5143\u7d20<\/span><\/p>\n<p>Chain<span class=\"token punctuation\">(<\/span>links<span class=\"token operator\">&#061;<\/span>links<span class=\"token punctuation\">)<\/span>                                       <span class=\"token comment\"># \u4e0d\u4f20 mask<\/span><br \/>\n<span class=\"token comment\"># \u2192 active_links_mask &#061; [True, True, True, True]<\/span><\/p>\n<p>Chain<span class=\"token punctuation\">(<\/span>links<span class=\"token operator\">&#061;<\/span>links<span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token comment\"># \u2192 active_links_mask &#061; [False, True, True, False]       # \u539f\u6837\u4fdd\u7559<\/span><\/p>\n<p>Chain<span class=\"token punctuation\">(<\/span>links<span class=\"token operator\">&#061;<\/span>links<span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token comment\"># \u2192 active_links_mask &#061; [False, True, False, False]      # \u539f\u6837\u4fdd\u7559<\/span><\/p>\n<p>\u89c4\u5219\u5f88\u7b80\u5355&#xff1a;<\/p>\n<ul>\n<li>\u4e0d\u4f20 \u2192 \u5168\u90e8 True&#xff08;\u5305\u62ec OriginLink \u548c\u56fa\u5b9a\u672b\u7aef&#xff09;<\/li>\n<li>\u4f20\u4e86 \u2192 \u539f\u6837\u4fdd\u7559&#xff0c;ikpy \u4e0d\u4f1a\u5e2e\u4f60\u6539<\/li>\n<\/ul>\n<h4>7.5.2 \u4e0d\u4f20\u4f1a\u600e\u6837<\/h4>\n<p>fixed \u7c7b\u578b\u7684 link&#xff08;OriginLink \u548c\u672b\u7aef\u504f\u79fb&#xff09;\u4e0d\u63d0\u4f9b\u4efb\u4f55\u53d8\u6362&#xff0c;\u5374\u88ab\u6807\u8bb0\u4e3a&#034;\u53ef\u4f18\u5316&#034;&#xff0c;ikpy \u4f1a\u5bf9\u6bcf\u4e00\u4e2a\u53d1\u51fa\u8b66\u544a&#xff1a;<\/p>\n<p>UserWarning: Link Base link (index: 0) is of type &#039;fixed&#039; but set as active<br \/>\nUserWarning: Link tip (index: 3) is of type &#039;fixed&#039; but set as active<\/p>\n<p>\u867d\u7136\u53ea\u662f\u8b66\u544a\u3001\u7ed3\u679c\u901a\u5e38\u4ecd\u6b63\u786e&#xff0c;\u4f46\u5e94\u5f53\u663e\u5f0f\u8bbe\u7f6e\u4ee5\u907f\u514d\u6b67\u4e49\u3002<\/p>\n<p>\u26a0\ufe0f \u6ce8\u610f&#xff1a;mask \u7684\u957f\u5ea6\u5fc5\u987b\u4e0e links \u4e00\u81f4&#xff0c;\u5426\u5219 ikpy \u4f1a\u62a5\u9519\u3002\u8fd9\u662f\u6539\u94fe\u7ed3\u6784\u65f6\u6700\u5e38\u89c1\u7684\u4f4e\u7ea7\u9519\u8bef\u3002<\/p>\n<h4>7.5.3 \u6b63\u786e\u7684\u8bbe\u7f6e\u65b9\u6cd5<\/h4>\n<p><span class=\"token comment\"># \u6700\u7b80\u5355\u60c5\u5f62&#xff1a;\u9664 OriginLink \u5916\u5168\u662f\u771f\u5b9e\u5173\u8282&#xff08;\u6700\u540e\u4e00\u4e2a link \u4e0d\u662f\u56fa\u5b9a\u504f\u79fb&#xff09;<\/span><br \/>\nn <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>links<span class=\"token punctuation\">)<\/span><br \/>\nactive_links_mask <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">*<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u66f4\u7cbe\u7ec6\u7684\u60c5\u51b5&#xff08;\u6bd4\u5982\u672b\u7aef\u6709\u4e2a\u56fa\u5b9a\u7684\u5939\u722a\u8fde\u6746&#xff09;\u2014\u2014\u5224\u65ad\u4f9d\u636e\u662f&#034;\u8fd9\u4e2a link \u6709\u6ca1\u6709\u5173\u8282&#034;&#xff0c;\u800c\u4e0d\u662f\u5b83\u7684\u4f4d\u7f6e&#xff1a;<\/p>\n<p><span class=\"token comment\"># OriginLink &#043; 6 \u4e2a\u5173\u8282 &#043; 2 \u4e2a\u56fa\u5b9a\u8fde\u6746&#xff08;mount \/ ee&#xff09;<\/span><br \/>\nactive_links_mask <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">6<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>&#x1f4cc; \u89c4\u5f8b&#xff1a;\u6709\u65cb\u8f6c\/\u79fb\u52a8\u5173\u8282\u7684 link \u4e3a True&#xff0c;OriginLink \u4e0e\u672b\u7aef\u56fa\u5b9a link \u4e3a False\u3002<\/p>\n<ul>\n<li>OriginLink \u2192 \u6c38\u8fdc False<\/li>\n<li>\u771f\u5b9e\u5173\u8282 \u2192 True<\/li>\n<li>\u56fa\u5b9a\u504f\u79fb\u8fde\u6746&#xff08;joint_type&#061;&#034;fixed&#034;&#xff09;\u2192 False<\/li>\n<\/ul>\n<p>\u26a0\ufe0f \u6240\u4ee5\u672c\u7ae0\u7684 4 \u5143\u7d20\u94fe&#xff08;OriginLink &#043; 2 \u5173\u8282 &#043; \u672b\u7aef\u56fa\u5b9a&#xff09;\u5e94\u5199 [False, True, True, False]\u2014\u2014\u4e0d\u80fd\u7167\u642c\u4e0a\u9762\u7684\u901a\u5f0f [False] &#043; [True] * (n &#8211; 1)&#xff0c;\u5426\u5219\u672b\u7aef\u56fa\u5b9a link \u4f1a\u88ab\u8bef\u8bbe\u4e3a True \u5e76\u89e6\u53d1\u8b66\u544a\u3002<\/p>\n<h4>7.5.4 \u26a0\ufe0f \u56fa\u5b9a\u8fde\u6746\u8fd8\u5fc5\u987b\u5199 joint_type&#061;&#034;fixed&#034;<\/h4>\n<p>\u672c\u4e66\u5b9e\u6d4b\u8e29\u5751&#xff08;\u7b2c 2 \u53f7&#xff09;&#xff1a;\u5982\u679c\u4f60\u521b\u5efa\u4e86\u4e00\u4e2a\u65e2\u65e0 rotation \u4e5f\u65e0 translation \u7684\u8fde\u6746&#xff08;\u7eaf\u504f\u79fb&#xff09;&#xff0c;\u5fc5\u987b\u663e\u5f0f\u5199 joint_type&#061;&#034;fixed&#034;&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u274c \u9519\u8bef&#xff1a;\u9ed8\u8ba4 joint_type&#061;&#039;revolute&#039;&#xff0c;\u4f46\u6ca1\u6709 rotation \u8f74<\/span><br \/>\nURDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;ee&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.045<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n         origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token comment\"># ValueError: Joint type is &#039;revolute&#039; but rotation axis &#061; False and translation axis &#061; False<\/span><\/p>\n<p><span class=\"token comment\"># \u2705 \u6b63\u786e<\/span><br \/>\nURDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;ee&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.045<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n         origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span> joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;fixed&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>&#x1f4a1; \u4e3a\u4ec0\u4e48 ikpy \u4e0d\u81ea\u52a8\u68c0\u6d4b&#xff1a;\u56e0\u4e3a rotation&#061;None \u4e5f\u53ef\u80fd\u662f&#034;\u7528\u6237\u5fd8\u4e86\u8bbe\u7f6e&#034;&#xff0c;\u800c\u4e0d\u662f&#034;\u8fd9\u662f\u4e00\u4e2a\u56fa\u5b9a\u8fde\u6746&#034;\u3002ikpy \u9009\u62e9\u62a5\u9519\u800c\u4e0d\u662f\u731c\u6d4b&#xff0c;\u907f\u514d\u9759\u9ed8\u9519\u8bef\u3002\u6240\u4ee5\u4f60\u5fc5\u987b\u663e\u5f0f\u58f0\u660e joint_type&#061;&#034;fixed&#034;\u3002<\/p>\n<hr \/>\n<h3>7.6 \u5173\u8282\u9650\u4f4d&#xff1a;bounds<\/h3>\n<p>bounds \u662f\u4e00\u4e2a (lower, upper) \u5143\u7ec4&#xff0c;ikpy \u4f1a\u628a\u5b83\u4f20\u7ed9\u5e95\u5c42\u4f18\u5316\u5668&#xff08;scipy.optimize.least_squares \u7684 bounds \u53c2\u6570&#xff09;&#xff0c;\u4fdd\u8bc1\u89e3\u4e00\u5b9a\u5728\u9650\u4f4d\u5185\u3002<\/p>\n<p>URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n         origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.06<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.144<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n         origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n         rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n         bounds<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">2.705260<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1.169371<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>     <span class=\"token comment\"># \u672c\u4e66 6 \u8f74\u81c2\u7684 J2 \u9650\u4f4d&#xff08;\u5f27\u5ea6&#xff09;<\/span><\/p>\n<p>bounds \u7684\u5de5\u4f5c\u539f\u7406&#xff1a;<\/p>\n<p>scipy.optimize.least_squares(<br \/>\n    fun&#061;residual_function,   # \u672b\u7aef\u8bef\u5dee<br \/>\n    x0&#061;initial_position,     # \u521d\u59cb\u5173\u8282\u89d2<br \/>\n    bounds&#061;(q_min, q_max),   # \u2190 ikpy \u628a bounds \u4f20\u8fd9\u91cc<br \/>\n    &#8230;<br \/>\n)<\/p>\n<p>scipy \u7684 least_squares \u4f1a\u5728\u4f18\u5316\u8fc7\u7a0b\u4e2d\u81ea\u52a8\u628a\u89e3\u9650\u5236\u5728 bounds \u8303\u56f4\u5185&#xff0c;\u4f7f\u7528\u7684\u662f&#034;\u4fe1\u4efb\u533a\u57df\u53cd\u5c04\u7b97\u6cd5&#034;&#xff08;Trust Region Reflective&#xff09;\u3002<\/p>\n<p>\u5b9e\u6d4b\u9a8c\u8bc1&#xff08;2 \u8fde\u6746&#xff1a;L\u2081&#061;0.30\u3001L\u2082&#061;0.25&#xff0c;\u8fde\u6746\u6cbf -X \u4f38\u5c55\u3001\u7ed5 Y \u8f6c&#xff0c;\u5728 XZ \u5e73\u9762\u8fd0\u52a8&#xff1b;J2 \u9650\u4f4d \u00b11.5&#xff09;&#xff1a;<\/p>\n<p>\u5404\u5173\u8282 bounds: [(-inf, inf), (-3.14, 3.14), (-1.5, 1.5), (-inf, inf)]<br \/>\n(\u8fde\u6746\u6cbf -X&#xff0c;\u7ed5 Y \u8f6c -&gt; \u5728 XZ \u5e73\u9762\u8fd0\u52a8&#xff1b;\u603b\u81c2\u957f 0.30&#043;0.25 &#061; 0.55)<\/p>\n<p>  \u76ee\u6807 [-0.2, 0.0, 0.45] -&gt; \u89e3&#061;[1.2693 1.1593]  \u672b\u7aef&#061;[-0.2   0.    0.45]  \u8bef\u5dee&#061;1.16e-08<br \/>\n  \u76ee\u6807 [-0.1, 0.0, 0.5] -&gt; \u89e3&#061;[1.7647 0.4111]  \u672b\u7aef&#061;[-0.1  0.   0.5]  \u8bef\u5dee&#061;1.70e-09<br \/>\n  \u76ee\u6807 [-0.35, 0.0, -0.2] -&gt; \u89e3&#061;[-0.6603 -1.5   ]  \u672b\u7aef&#061;[-0.39797  0.      -0.39181]  \u8bef\u5dee&#061;1.98e-01 \u2605\u649e\u9650\u4f4d<\/p>\n<p>\u524d\u4e24\u4e2a\u76ee\u6807\u5728\u9650\u4f4d\u5185\u53ef\u8fbe&#xff0c;\u8bef\u5dee\u5728 1e-8 \u91cf\u7ea7&#xff1b;\u7b2c 3 \u4e2a\u76ee\u6807\u7684 j2 \u88ab\u6b7b\u6b7b\u94b3\u5728 -1.5&#xff08;\u9650\u4f4d\u503c&#xff09;&#xff0c;\u672b\u7aef\u56e0\u6b64\u7559\u4e0b\u4e86\u660e\u663e\u6b8b\u5dee&#xff08;19.8 cm&#xff09;\u3002<\/p>\n<p>&#x1f4a1; \u9650\u4f4d vs \u53ef\u8fbe\u6027&#xff1a;\u5982\u679c\u76ee\u6807\u9700\u8981\u8d85\u51fa\u9650\u4f4d\u624d\u80fd\u5230\u8fbe&#xff0c;ikpy \u4e0d\u4f1a\u62a5\u9519&#xff0c;\u800c\u662f\u8fd4\u56de\u4e00\u4e2a\u5c3d\u529b\u800c\u4e3a\u7684\u89e3&#xff08;\u8d34\u5728\u9650\u4f4d\u4e0a&#xff0c;\u672b\u7aef\u6709\u6b8b\u5dee&#xff09;\u3002\u8fd9\u548c\u7b2c 06 \u7ae0\u81ea\u7814 DLS \u7684\u884c\u4e3a\u4e00\u81f4\u3002<\/p>\n<p>\u5de5\u7a0b\u505a\u6cd5&#xff1a;\u8c03\u7528\u5b8c IK \u540e&#xff0c;\u4e00\u5b9a\u8981\u81ea\u5df1\u68c0\u67e5 \u2016FK(q) &#8211; target\u2016\u3002ikpy \u4e0d\u4f1a\u544a\u8bc9\u4f60\u5b83\u5931\u8d25\u4e86\u3002<\/p>\n<hr \/>\n<h3>7.7 DHLink&#xff1a;\u76f4\u63a5\u7528 DH \u53c2\u6570\u5efa\u94fe<\/h3>\n<p>\u7b2c 05 \u7ae0\u6211\u4eec\u624b\u5199\u4e86 DH \u53d8\u6362\u77e9\u9635\u3002ikpy \u5185\u7f6e\u4e86 DHLink&#xff0c;\u53c2\u6570\u5c31\u662f DH \u56db\u53c2\u6570&#xff1a;<\/p>\n<p>DHLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span> d<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> a<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> alpha<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> theta<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> bounds<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n       use_symbolic_matrix<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> length<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>DHLink \u53c2\u6570\u4e0e\u7b2c 05 \u7ae0 DH \u53c2\u6570\u7684\u5bf9\u5e94&#xff1a;<\/p>\n<table>\n<tr>DHLink \u53c2\u6570\u7b2c 05 \u7ae0 DH \u53c2\u6570\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>d<\/td>\n<td>d\u1d62<\/td>\n<td>\u8fde\u6746\u504f\u79fb&#xff08;\u79fb\u52a8\u5173\u8282\u7684\u53d8\u91cf&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>a<\/td>\n<td>a\u1d62<\/td>\n<td>\u8fde\u6746\u957f\u5ea6<\/td>\n<\/tr>\n<tr>\n<td>alpha<\/td>\n<td>\u03b1\u1d62<\/td>\n<td>\u8fde\u6746\u626d\u89d2<\/td>\n<\/tr>\n<tr>\n<td>theta<\/td>\n<td>\u03b8\u1d62<\/td>\n<td>\u5173\u8282\u89d2&#xff08;\u65cb\u8f6c\u5173\u8282\u7684\u53d8\u91cf&#xff09;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u7528\u5b83\u91cd\u5efa\u7b2c 05 \u7ae0\u90a3\u53f0 3 \u81ea\u7531\u5ea6\u81c2\u7684\u524d\u4e24\u8282&#xff1a;<\/p>\n<p>chain <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;dh_arm&#034;<\/span><span class=\"token punctuation\">,<\/span> links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n    OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    DHLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span> d<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.20<\/span><span class=\"token punctuation\">,<\/span> a<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> alpha<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> theta<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    DHLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span> d<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.00<\/span><span class=\"token punctuation\">,<\/span> a<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> alpha<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> theta<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>T <span class=\"token operator\">&#061;<\/span> chain<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5b9e\u6d4b\u5bf9\u6bd4&#xff08;q\u2081&#061;30\u00b0, q\u2082&#061;45\u00b0&#xff09;&#xff1a;<\/p>\n<p>ikpy DHLink      &#061; [0.324512  0.391481  0.200000]<br \/>\n\u7b2c 05 \u7ae0\u624b\u5199 DH   &#061; [0.324512  0.391481  0.200000]<br \/>\n\u4e00\u81f4: True<\/p>\n<p>\u2705 \u8fd9\u8bc1\u660e\u4e86\u7b2c 05 \u7ae0\u6211\u4eec\u624b\u5199\u7684 DH \u53d8\u6362\u77e9\u9635\u4e0e ikpy \u7684\u5b9e\u73b0\u5b8c\u5168\u7b49\u4ef7\u3002<\/p>\n<p>\u4ec0\u4e48\u65f6\u5019\u7528 DHLink vs URDFLink&#xff1a;<\/p>\n<table>\n<tr>\u573a\u666f\u7528\u54ea\u4e2a<\/tr>\n<tbody>\n<tr>\n<td>\u624b\u4e0a\u6709 DH \u53c2\u6570\u8868&#xff08;\u8bba\u6587\u3001\u8001\u624b\u518c&#xff09;<\/td>\n<td>DHLink<\/td>\n<\/tr>\n<tr>\n<td>\u624b\u4e0a\u6709 URDF \/ MJCF \u6a21\u578b<\/td>\n<td>URDFLink&#xff08;\u53c2\u6570\u53ef\u76f4\u63a5\u6284&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u673a\u68b0\u81c2\u8f74\u7cfb\u6df7\u5408\u591a\u6837&#xff08;\u5982\u672c\u4e66 J1 \u7ed5 Z\u3001J2\/J3 \u7ed5 Y\u3001J4\/J6 \u7ed5 X&#xff09;<\/td>\n<td>URDFLink&#xff08;\u66f4\u76f4\u89c2&#xff09;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u672c\u4e66\u5b9e\u6218\u7528 URDFLink&#xff0c;\u56e0\u4e3a\u53c2\u6570\u80fd\u4ece MJCF \u76f4\u63a5\u6284\u3002<\/p>\n<p>\u26a0\ufe0f \u6ce8\u610f&#xff1a;DHLink \u4e0d\u652f\u6301\u79fb\u52a8\u5173\u8282\u3002\u5982\u679c\u4f60\u7684\u673a\u68b0\u81c2\u6709\u79fb\u52a8\u5173\u8282&#xff08;prismatic&#xff09;&#xff0c;\u9700\u8981\u7528 URDFLink(translation&#061;\u8f74\u65b9\u5411, joint_type&#061;&#034;prismatic&#034;)\u3002\u8fd9\u662f\u56e0\u4e3a DH \u53c2\u6570\u6cd5\u4e2d\u79fb\u52a8\u5173\u8282\u7684\u53d8\u91cf\u662f d&#xff0c;\u4f46 DHLink \u7684\u5b9e\u73b0\u628a theta \u4f5c\u4e3a\u552f\u4e00\u53d8\u91cf&#xff08;\u65cb\u8f6c\u5173\u8282&#xff09;&#xff0c;\u4e0d\u652f\u6301\u628a d \u4f5c\u4e3a\u53d8\u91cf\u3002<\/p>\n<hr \/>\n<h3>7.8 ikpy \u7684&#034;\u9ed1\u7bb1&#034;\u91cc\u662f\u4ec0\u4e48<\/h3>\n<p>\u77e5\u9053 ikpy \u5185\u90e8\u600e\u4e48\u505a&#xff0c;\u624d\u80fd\u8c03\u597d\u5b83\u3002<\/p>\n<h4>7.8.1 FK&#xff1a;\u7b26\u53f7\u77e9\u9635 &#043; \u6570\u503c\u4ee3\u5165<\/h4>\n<p>ikpy \u7528 sympy \u4e3a\u6bcf\u4e2a\u8fde\u6746\u63a8\u5bfc\u51fa\u7b26\u53f7\u5316\u7684\u53d8\u6362\u77e9\u9635&#xff0c;\u7136\u540e\u5728 forward_kinematics \u65f6\u628a\u5177\u4f53\u89d2\u5ea6\u4ee3\u8fdb\u53bb\u3002<\/p>\n<ul>\n<li>\u4f18\u70b9&#xff1a;\u63a8\u5bfc\u4e00\u6b21&#xff0c;\u53cd\u590d\u4f7f\u7528&#xff1b;\u652f\u6301\u4efb\u610f\u8f74\u3001\u4efb\u610f\u6b27\u62c9\u89d2\u8868\u793a\u3002<\/li>\n<li>\u7f3a\u70b9&#xff1a;\u6bd4\u7eaf\u6570\u503c\u6162&#xff08;\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u7b2c 06 \u7ae0\u81ea\u7814 DLS \u7528 MuJoCo \u7684 mj_jacSite \u4f1a\u5feb\u7ea6\u4e00\u4e2a\u6570\u91cf\u7ea7&#xff0c;\u89c1 8.7 \u5b9e\u6d4b&#xff09;\u3002<\/li>\n<\/ul>\n<p>FK \u5185\u90e8\u6d41\u7a0b&#xff1a;<\/p>\n<p>\u6784\u5efa Chain \u65f6&#xff1a;<br \/>\n  \u5bf9\u6bcf\u4e2a Link&#xff1a;<br \/>\n    \u7528 sympy \u63a8\u5bfc\u7b26\u53f7\u53d8\u6362\u77e9\u9635 T_i(\u03b8_i)<br \/>\n    \u4fdd\u5b58\u7b26\u53f7\u8868\u8fbe\u5f0f<\/p>\n<p>\u8c03\u7528 forward_kinematics(q) \u65f6&#xff1a;<br \/>\n  \u628a q \u7684\u6570\u503c\u4ee3\u5165\u7b26\u53f7\u8868\u8fbe\u5f0f<br \/>\n  \u8ba1\u7b97 T_total &#061; T_1(\u03b81) \u00b7 T_2(\u03b82) \u00b7 &#8230; \u00b7 T_n(\u03b8n)<br \/>\n  \u8fd4\u56de T_total<\/p>\n<h4>7.8.2 IK&#xff1a;scipy \u6570\u503c\u4f18\u5316<\/h4>\n<p>ikpy \u7684 IK \u672c\u8d28\u662f\u6700\u5c0f\u5316\u672b\u7aef\u8bef\u5dee&#xff1a;<\/p>\n<p>minimize  \u2016FK(q) &#8211; target\u2016\u00b2<br \/>\n   q<br \/>\ns.t.      q_min \u2264 q \u2264 q_max<\/p>\n<p>\u7528\u7684\u662f scipy.optimize.least_squares&#xff08;\u9ed8\u8ba4&#xff09;\u6216 scipy.optimize.minimize\u3002<\/p>\n<p>\u4e24\u79cd\u4f18\u5316\u5668&#xff1a;<\/p>\n<p>chain<span class=\"token punctuation\">.<\/span>inverse_kinematics<span class=\"token punctuation\">(<\/span>target_position<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span> optimizer<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;least_squares&#034;<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token comment\"># \u9ed8\u8ba4<\/span><br \/>\nchain<span class=\"token punctuation\">.<\/span>inverse_kinematics<span class=\"token punctuation\">(<\/span>target_position<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span> optimizer<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;scalar&#034;<\/span><span class=\"token punctuation\">)<\/span>         <span class=\"token comment\"># \u65e7\u7248\u9ed8\u8ba4<\/span><\/p>\n<p>least_squares \u901a\u5e38\u66f4\u5feb\u66f4\u7a33&#xff0c;\u4fdd\u6301\u9ed8\u8ba4\u5373\u53ef\u3002<\/p>\n<p>&#x1f4a1; least_squares vs scalar \u7684\u533a\u522b&#xff1a;<\/p>\n<ul>\n<li>least_squares&#xff1a;\u4e13\u95e8\u9488\u5bf9\u6700\u5c0f\u4e8c\u4e58\u95ee\u9898\u4f18\u5316&#xff0c;\u4f7f\u7528\u4fe1\u4efb\u533a\u57df\u7b97\u6cd5&#xff0c;\u6536\u655b\u66f4\u5feb<\/li>\n<li>scalar&#xff1a;\u901a\u7528\u7684 scipy.optimize.minimize&#xff0c;\u4f7f\u7528 BFGS \u6216\u5176\u4ed6\u901a\u7528\u7b97\u6cd5&#xff0c;\u66f4\u6162\u4f46\u66f4\u901a\u7528<\/li>\n<\/ul>\n<p>ikpy 4.0 \u9ed8\u8ba4\u7528 least_squares&#xff0c;\u8fd9\u662f\u6b63\u786e\u7684\u9009\u62e9\u2014\u2014IK \u672c\u8d28\u5c31\u662f\u6700\u5c0f\u4e8c\u4e58\u95ee\u9898\u3002<\/p>\n<h4>7.8.3 \u4e0e\u81ea\u7814 DLS \u7684\u672c\u8d28\u533a\u522b<\/h4>\n<table>\n<tr>\u81ea\u7814 DLS&#xff08;\u7b2c 06 \u7ae0&#xff09;ikpy<\/tr>\n<tbody>\n<tr>\n<td>\u65b9\u6cd5<\/td>\n<td>\u6cbf\u96c5\u53ef\u6bd4\u8fed\u4ee3\u903c\u8fd1<\/td>\n<td>\u5168\u5c40\u4f18\u5316&#xff08;\u6700\u5c0f\u5316\u8bef\u5dee&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u6bcf\u6b65<\/td>\n<td>\u7528\u96c5\u53ef\u6bd4\u4fe1\u606f&#xff0c;\u65b9\u5411\u660e\u786e<\/td>\n<td>\u6570\u503c\u8bd5\u63a2&#xff0c;\u9760 scipy \u6536\u655b<\/td>\n<\/tr>\n<tr>\n<td>\u901f\u5ea6<\/td>\n<td>\u5feb&#xff08;\u53ef\u7528\u89e3\u6790\u96c5\u53ef\u6bd4&#xff09;<\/td>\n<td>\u8f83\u6162<\/td>\n<\/tr>\n<tr>\n<td>\u7075\u6d3b\u6027<\/td>\n<td>\u56fa\u5b9a\u516c\u5f0f<\/td>\n<td>\u53ef\u52a0\u6b63\u5219\u9879\u3001\u59ff\u6001\u7ea6\u675f\u7b49<\/td>\n<\/tr>\n<tr>\n<td>\u591a\u89e3<\/td>\n<td>\u7531\u521d\u59cb\u503c\u51b3\u5b9a<\/td>\n<td>\u7531\u521d\u59cb\u503c &#043; \u6b63\u5219\u9879\u51b3\u5b9a<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>7.8.4 ikpy \u7b26\u53f7\u8ba1\u7b97\u7684\u6df1\u5165\u7406\u89e3<\/h4>\n<p>ikpy \u7684\u6838\u5fc3\u7ade\u4e89\u529b\u5728\u4e8e\u5b83\u7684\u7b26\u53f7\u5316\u53d8\u6362\u77e9\u9635\u63a8\u5bfc\u3002\u8ba9\u6211\u4eec\u6df1\u5165\u7406\u89e3\u8fd9\u662f\u5982\u4f55\u5de5\u4f5c\u7684\u3002<\/p>\n<p>\u6784\u5efa Chain \u65f6\u53d1\u751f\u4e86\u4ec0\u4e48&#xff1a;<\/p>\n<p>chain <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;arm&#034;<\/span><span class=\"token punctuation\">,<\/span> links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span>OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> URDFLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5f53\u8fd9\u884c\u4ee3\u7801\u6267\u884c\u65f6&#xff0c;ikpy \u5185\u90e8\u4f1a&#xff1a;<\/p>\n<li>\u4e3a\u6bcf\u4e2a\u8fde\u6746\u521b\u5efa\u7b26\u53f7\u53d8\u91cf&#xff1a;\u03b81, \u03b82, &#8230;, \u03b8n&#xff08;sympy \u7684 Symbol \u5bf9\u8c61&#xff09;<\/li>\n<li>\u63a8\u5bfc\u6bcf\u4e2a\u8fde\u6746\u7684\u7b26\u53f7\u53d8\u6362\u77e9\u9635&#xff1a;\u7528 origin_translation\u3001origin_orientation\u3001rotation \u7b49\u53c2\u6570&#xff0c;\u6784\u9020\u51fa\u5305\u542b\u7b26\u53f7\u53d8\u91cf\u7684 4\u00d74 \u77e9\u9635<\/li>\n<li>\u8fde\u4e58\u5f97\u5230\u603b\u53d8\u6362\u77e9\u9635&#xff1a;T_total &#061; T1(\u03b81) \u00b7 T2(\u03b82) \u00b7 &#8230; \u00b7 Tn(\u03b8n)&#xff0c;\u7ed3\u679c\u662f\u4e00\u4e2a\u5305\u542b\u6240\u6709\u7b26\u53f7\u53d8\u91cf\u7684 4\u00d74 \u77e9\u9635<\/li>\n<li>\u7f16\u8bd1\u4e3a\u6570\u503c\u51fd\u6570&#xff08;\u53ef\u9009&#xff09;&#xff1a;\u7528 sympy.lambdify \u628a\u7b26\u53f7\u8868\u8fbe\u5f0f\u7f16\u8bd1\u4e3a\u9ad8\u6548\u7684\u6570\u503c\u51fd\u6570<\/li>\n<p>\u7b26\u53f7\u77e9\u9635\u7684\u6837\u5b50&#xff08;\u7b80\u5316\u7684 2 \u8fde\u6746\u793a\u4f8b&#xff09;&#xff1a;<\/p>\n<p>T_total &#061; [<br \/>\n    [cos(\u03b81&#043;\u03b82), -sin(\u03b81&#043;\u03b82), 0, L1\u00b7cos(\u03b81) &#043; L2\u00b7cos(\u03b81&#043;\u03b82)],<br \/>\n    [sin(\u03b81&#043;\u03b82),  cos(\u03b81&#043;\u03b82), 0, L1\u00b7sin(\u03b81) &#043; L2\u00b7sin(\u03b81&#043;\u03b82)],<br \/>\n    [0,           0,            1, 0],<br \/>\n    [0,           0,            0, 1]<br \/>\n]<\/p>\n<p>\u8fd9\u662f\u4e00\u4e2a\u7b26\u53f7\u8868\u8fbe\u5f0f\u2014\u2014\u03b81 \u548c \u03b82 \u4e0d\u662f\u6570\u5b57&#xff0c;\u800c\u662f sympy \u7684\u7b26\u53f7\u53d8\u91cf\u3002\u5f53\u8c03\u7528 forward_kinematics([0, 0.5, 0.3, 0]) \u65f6&#xff0c;ikpy \u628a \u03b81&#061;0.5, \u03b82&#061;0.3 \u4ee3\u5165\u7b26\u53f7\u8868\u8fbe\u5f0f&#xff0c;\u5f97\u5230\u6570\u503c\u7ed3\u679c\u3002<\/p>\n<p>\u4e3a\u4ec0\u4e48\u7b26\u53f7\u8ba1\u7b97\u6bd4\u7eaf\u6570\u503c\u6162&#xff1a;<\/p>\n<table>\n<tr>\u64cd\u4f5c\u7eaf\u6570\u503c&#xff08;NumPy&#xff09;\u7b26\u53f7\u8ba1\u7b97&#xff08;sympy&#xff09;<\/tr>\n<tbody>\n<tr>\n<td>\u77e9\u9635\u4e58\u6cd5<\/td>\n<td>C \u5b9e\u73b0&#xff0c;\u5fae\u79d2\u7ea7<\/td>\n<td>Python \u7b26\u53f7\u8fd0\u7b97&#xff0c;\u6beb\u79d2\u7ea7<\/td>\n<\/tr>\n<tr>\n<td>\u4e09\u89d2\u51fd\u6570<\/td>\n<td>\u76f4\u63a5\u8c03\u7528 np.cos<\/td>\n<td>\u7b26\u53f7\u5316\u7b80\u540e\u518d\u4ee3\u5165<\/td>\n<\/tr>\n<tr>\n<td>\u5185\u5b58<\/td>\n<td>\u5b58\u50a8\u6570\u503c\u6570\u7ec4<\/td>\n<td>\u5b58\u50a8\u7b26\u53f7\u8868\u8fbe\u5f0f\u6811<\/td>\n<\/tr>\n<tr>\n<td>\u4f18\u70b9<\/td>\n<td>\u5feb<\/td>\n<td>\u7075\u6d3b\u3001\u53ef\u6c42\u5bfc\u3001\u53ef\u5316\u7b80<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u7b26\u53f7\u8ba1\u7b97\u7684\u4f18\u52bf&#xff1a;<\/p>\n<li>\u81ea\u52a8\u6c42\u96c5\u53ef\u6bd4&#xff1a;\u5bf9\u7b26\u53f7\u77e9\u9635\u6c42\u504f\u5bfc&#xff0c;\u53ef\u4ee5\u5f97\u5230\u7cbe\u786e\u7684\u89e3\u6790\u96c5\u53ef\u6bd4&#xff0c;\u4e0d\u9700\u8981\u6570\u503c\u5dee\u5206<\/li>\n<li>\u652f\u6301\u4efb\u610f\u8f74\/\u6b27\u62c9\u89d2&#xff1a;\u7b26\u53f7\u8ba1\u7b97\u4e0d\u5173\u5fc3\u5177\u4f53\u6570\u503c&#xff0c;\u4efb\u4f55\u65cb\u8f6c\u8868\u793a\u90fd\u80fd\u5904\u7406<\/li>\n<li>\u53ef\u5316\u7b80&#xff1a;sympy \u53ef\u4ee5\u81ea\u52a8\u5316\u7b80\u590d\u6742\u7684\u4e09\u89d2\u8868\u8fbe\u5f0f&#xff0c;\u51cf\u5c11\u8ba1\u7b97\u91cf<\/li>\n<li>\u53ef\u5bfc\u51fa&#xff1a;\u7b26\u53f7\u8868\u8fbe\u5f0f\u53ef\u4ee5\u5bfc\u51fa\u4e3a C \u4ee3\u7801\u6216 MATLAB \u4ee3\u7801&#xff0c;\u7528\u4e8e\u5d4c\u5165\u5f0f\u7cfb\u7edf<\/li>\n<p>&#x1f4a1; ikpy \u7684 use_symbolic_matrix \u53c2\u6570&#xff1a;URDFLink \u6709\u4e00\u4e2a use_symbolic_matrix&#061;True \u53c2\u6570\u3002\u5982\u679c\u8bbe\u4e3a False&#xff0c;ikpy \u4f1a\u7528\u7eaf\u6570\u503c\u8ba1\u7b97&#xff08;\u66f4\u5feb&#xff0c;\u4f46\u7075\u6d3b\u6027\u964d\u4f4e&#xff09;\u3002\u9ed8\u8ba4\u662f True&#xff0c;\u56e0\u4e3a\u7b26\u53f7\u8ba1\u7b97\u7684\u7075\u6d3b\u6027\u66f4\u91cd\u8981\u3002<\/p>\n<p>\u5728\u6027\u80fd\u654f\u611f\u7684\u573a\u666f\u4e0b&#xff0c;\u53ef\u4ee5\u5c1d\u8bd5\u8bbe\u4e3a False&#xff0c;\u4f46\u8981\u6ce8\u610f\u67d0\u4e9b\u529f\u80fd&#xff08;\u5982\u81ea\u52a8\u96c5\u53ef\u6bd4&#xff09;\u53ef\u80fd\u4e0d\u53ef\u7528\u3002<\/p>\n<h4>7.8.5 \u4ece\u96f6\u6784\u5efa Chain \u7684\u5b8c\u6574\u793a\u4f8b<\/h4>\n<p>\u8ba9\u6211\u4eec\u901a\u8fc7\u4e00\u4e2a\u5b8c\u6574\u7684\u793a\u4f8b&#xff0c;\u7406\u89e3\u6784\u5efa Chain \u7684\u6bcf\u4e00\u6b65\u3002<\/p>\n<p>\u76ee\u6807&#xff1a;\u6784\u5efa\u4e00\u4e2a 3 \u81ea\u7531\u5ea6\u673a\u68b0\u81c2\u2014\u2014\u57fa\u5ea7\u65cb\u8f6c&#xff08;J1&#xff0c;\u7ed5 Z&#xff09;\u3001\u5927\u81c2\u4fef\u4ef0&#xff08;J2&#xff0c;\u7ed5 Y&#xff09;\u3001\u672b\u7aef\u504f\u79fb&#xff08;\u56fa\u5b9a&#xff09;\u3002<\/p>\n<p>\u7b2c 1 \u6b65&#xff1a;\u786e\u5b9a\u8fd0\u52a8\u5b66\u53c2\u6570<\/p>\n<p>\u57fa\u5ea7 \u2192 J1: \u504f\u79fb (0, 0, 0.1)&#xff0c;\u7ed5 Z \u65cb\u8f6c<br \/>\nJ1 \u2192 J2:   \u504f\u79fb (0, 0, 0.3)&#xff0c;\u7ed5 Y \u65cb\u8f6c<br \/>\nJ2 \u2192 \u672b\u7aef: \u504f\u79fb (0, 0, 0.25)&#xff0c;\u56fa\u5b9a<\/p>\n<p>\u7b2c 2 \u6b65&#xff1a;\u786e\u5b9a\u5173\u8282\u9650\u4f4d<\/p>\n<p>J1: \u00b1180\u00b0 (\u00b1\u03c0)<br \/>\nJ2: -90\u00b0 ~ &#043;90\u00b0 (-\u03c0\/2 ~ \u03c0\/2)<\/p>\n<p>\u7b2c 3 \u6b65&#xff1a;\u7f16\u5199\u4ee3\u7801<\/p>\n<p><span class=\"token keyword\">import<\/span> numpy <span class=\"token keyword\">as<\/span> np<br \/>\n<span class=\"token keyword\">from<\/span> ikpy<span class=\"token punctuation\">.<\/span>chain <span class=\"token keyword\">import<\/span> Chain<br \/>\n<span class=\"token keyword\">from<\/span> ikpy<span class=\"token punctuation\">.<\/span>link <span class=\"token keyword\">import<\/span> OriginLink<span class=\"token punctuation\">,<\/span> URDFLink<\/p>\n<p><span class=\"token comment\"># \u6784\u5efa Chain&#xff1a;4 \u4e2a\u5143\u7d20&#xff08;OriginLink &#043; 2\u5173\u8282 &#043; \u672b\u7aef\u56fa\u5b9a&#xff09;<\/span><br \/>\nchain <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;3dof_arm&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n        <span class=\"token comment\"># \u2460 \u57fa\u5ea7&#xff08;\u56fa\u5b9a&#xff09;<\/span><br \/>\n        OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token comment\"># \u2461 J1&#xff1a;\u57fa\u5ea7\u65cb\u8f6c&#xff0c;\u7ed5 Z \u8f74<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span><br \/>\n            name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>   <span class=\"token comment\"># \u57fa\u5ea7\u9ad8 0.1m<\/span><br \/>\n            origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>                 <span class=\"token comment\"># \u7ed5 Z \u8f74<\/span><br \/>\n            bounds<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span>np<span class=\"token punctuation\">.<\/span>pi<span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>pi<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>             <span class=\"token comment\"># \u00b1180\u00b0<\/span><br \/>\n        <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token comment\"># \u2462 J2&#xff1a;\u5927\u81c2\u4fef\u4ef0&#xff0c;\u7ed5 Y \u8f74<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span><br \/>\n            name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>   <span class=\"token comment\"># \u5927\u81c2\u957f 0.3m<\/span><br \/>\n            origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>                 <span class=\"token comment\"># \u7ed5 Y \u8f74<\/span><br \/>\n            bounds<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span>np<span class=\"token punctuation\">.<\/span>pi<span class=\"token operator\">\/<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>pi<span class=\"token operator\">\/<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>        <span class=\"token comment\"># \u00b190\u00b0<\/span><br \/>\n        <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token comment\"># \u2463 \u672b\u7aef\u56fa\u5b9a\u504f\u79fb<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span><br \/>\n            name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;tip&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.25<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>  <span class=\"token comment\"># \u672b\u7aef\u957f 0.25m<\/span><br \/>\n            origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            rotation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;fixed&#034;<\/span><span class=\"token punctuation\">,<\/span>                 <span class=\"token comment\"># \u5fc5\u987b\u663e\u5f0f\u58f0\u660e&#xff01;<\/span><br \/>\n        <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token comment\"># active_links_mask&#xff1a;\u57fa\u5ea7&#061;False, J1&#061;True, J2&#061;True, \u672b\u7aef&#061;False<\/span><br \/>\n    active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u9a8c\u8bc1\u7ed3\u6784<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;links:&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span>l<span class=\"token punctuation\">.<\/span>name <span class=\"token keyword\">for<\/span> l <span class=\"token keyword\">in<\/span> chain<span class=\"token punctuation\">.<\/span>links<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;active:&#034;<\/span><span class=\"token punctuation\">,<\/span> chain<span class=\"token punctuation\">.<\/span>active_links_mask<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># FK \u6d4b\u8bd5&#xff1a;J1&#061;30\u00b0, J2&#061;45\u00b0<\/span><br \/>\nq_full <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><br \/>\nT <span class=\"token operator\">&#061;<\/span> chain<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span>q_full<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u672b\u7aef\u4f4d\u7f6e:&#034;<\/span><span class=\"token punctuation\">,<\/span> T<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># IK \u6d4b\u8bd5&#xff1a;\u6c42\u89e3\u76ee\u6807\u4f4d\u7f6e [0.3, 0, 0.4]<\/span><br \/>\nq_sol <span class=\"token operator\">&#061;<\/span> chain<span class=\"token punctuation\">.<\/span>inverse_kinematics<span class=\"token punctuation\">(<\/span>target_position<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0.3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.4<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;IK \u89e3(\u5ea6):&#034;<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>degrees<span class=\"token punctuation\">(<\/span>q_sol<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u9010\u6bb5\u8bb2\u89e3&#xff1a;<\/p>\n<table>\n<tr>\u6b65\u9aa4\u8bf4\u660e\u6ce8\u610f\u4e8b\u9879<\/tr>\n<tbody>\n<tr>\n<td>\u2460 OriginLink()<\/td>\n<td>\u94fe\u7684\u8d77\u70b9&#xff0c;\u4ee3\u8868\u56fa\u5b9a\u57fa\u5ea7<\/td>\n<td>\u5fc5\u987b\u662f\u7b2c\u4e00\u4e2a\u5143\u7d20<\/td>\n<\/tr>\n<tr>\n<td>\u2461 J1 URDFLink<\/td>\n<td>\u7b2c\u4e00\u4e2a\u5173\u8282&#xff1a;\u57fa\u5ea7\u65cb\u8f6c<\/td>\n<td>origin_translation \u662f\u57fa\u5ea7\u5230 J1 \u7684\u504f\u79fb&#xff0c;rotation \u662f\u65cb\u8f6c\u8f74<\/td>\n<\/tr>\n<tr>\n<td>\u2462 J2 URDFLink<\/td>\n<td>\u7b2c\u4e8c\u4e2a\u5173\u8282&#xff1a;\u5927\u81c2\u4fef\u4ef0<\/td>\n<td>origin_translation \u662f J1 \u5230 J2 \u7684\u504f\u79fb&#xff08;\u5373\u5927\u81c2\u957f\u5ea6&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u2463 tip URDFLink<\/td>\n<td>\u672b\u7aef\u56fa\u5b9a\u504f\u79fb<\/td>\n<td>\u5fc5\u987b\u5199 joint_type&#061;&#034;fixed&#034;&#xff0c;\u5426\u5219\u62a5\u9519<\/td>\n<\/tr>\n<tr>\n<td>active_links_mask<\/td>\n<td>\u6807\u8bb0\u54ea\u4e9b\u5173\u8282\u53c2\u4e0e IK<\/td>\n<td>\u957f\u5ea6\u5fc5\u987b\u7b49\u4e8e len(links)&#xff0c;\u57fa\u5ea7\u548c\u56fa\u5b9a\u672b\u7aef\u4e3a False<\/td>\n<\/tr>\n<tr>\n<td>q_full<\/td>\n<td>FK \u7684\u8f93\u5165\u6570\u7ec4<\/td>\n<td>\u957f\u5ea6\u5fc5\u987b\u7b49\u4e8e len(links)&#xff0c;\u56fa\u5b9a link \u586b 0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5e38\u89c1\u9519\u8bef\u6392\u67e5&#xff1a;<\/p>\n<p>\u9519\u8bef 1: ValueError: Joint type is &#039;revolute&#039; but rotation axis &#061; False<br \/>\n\u539f\u56e0: \u672b\u7aef\u56fa\u5b9a\u8fde\u6746\u6ca1\u5199 joint_type&#061;&#034;fixed&#034;<br \/>\n\u89e3\u51b3: \u6dfb\u52a0 joint_type&#061;&#034;fixed&#034;<\/p>\n<p>\u9519\u8bef 2: UserWarning: Link Base link (index: 0) is of type &#039;fixed&#039; but set as active<br \/>\n\u539f\u56e0: \u6ca1\u8bbe active_links_mask&#xff0c;\u6216\u8bbe\u9519\u4e86<br \/>\n\u89e3\u51b3: active_links_mask&#061;[False, True, True, False]<\/p>\n<p>\u9519\u8bef 3: \u672b\u7aef\u4f4d\u7f6e\u4e0d\u968f J2 \u53d8\u5316<br \/>\n\u539f\u56e0: J2 \u540e\u9762\u6ca1\u6709\u672b\u7aef\u504f\u79fb&#xff08;\u7f3a tip link&#xff09;<br \/>\n\u89e3\u51b3: \u6dfb\u52a0\u672b\u7aef\u56fa\u5b9a\u504f\u79fb URDFLink<\/p>\n<p>\u9519\u8bef 4: IK \u7ed3\u679c\u79bb\u76ee\u6807\u5f88\u8fdc<br \/>\n\u539f\u56e0: \u76ee\u6807\u4e0d\u53ef\u8fbe&#xff0c;\u6216\u649e\u5230\u5173\u8282\u9650\u4f4d<br \/>\n\u89e3\u51b3: \u68c0\u67e5\u76ee\u6807\u662f\u5426\u5728\u5de5\u4f5c\u7a7a\u95f4\u5185&#xff1b;\u56de\u4ee3 FK \u9a8c\u8bc1\u672b\u7aef\u8bef\u5dee<\/p>\n<hr \/>\n<h3>7.9 \u5e38\u89c1\u9519\u8bef\u901f\u67e5<\/h3>\n<table>\n<tr>\u62a5\u9519\u539f\u56e0\u89e3\u51b3<\/tr>\n<tbody>\n<tr>\n<td>No module named &#039;sympy&#039;<\/td>\n<td>\u7f3a\u4f9d\u8d56<\/td>\n<td>pip install sympy<\/td>\n<\/tr>\n<tr>\n<td>unexpected keyword argument &#039;translation_vector&#039;<\/td>\n<td>\u7528\u4e86 3.x \u7684 API<\/td>\n<td>\u6539\u6210 origin_translation<\/td>\n<\/tr>\n<tr>\n<td>Joint type is &#039;revolute&#039; but rotation axis &#061; False<\/td>\n<td>\u56fa\u5b9a\u8fde\u6746\u6ca1\u5199\u7c7b\u578b<\/td>\n<td>\u52a0 joint_type&#061;&#034;fixed&#034;<\/td>\n<\/tr>\n<tr>\n<td>UserWarning: Link Base link &#8230; is of type &#039;fixed&#039;<\/td>\n<td>\u6ca1\u8bbe active_links_mask<\/td>\n<td>\u8bbe [False] &#043; [True]*(n-1)<\/td>\n<\/tr>\n<tr>\n<td>IK \u7ed3\u679c\u79bb\u76ee\u6807\u5f88\u8fdc<\/td>\n<td>\u76ee\u6807\u8d85\u51fa\u5de5\u4f5c\u7a7a\u95f4&#xff0c;\u6216\u649e\u5230\u5173\u8282\u9650\u4f4d<\/td>\n<td>\u68c0\u67e5\u76ee\u6807\u534a\u5f84\u4e0e bounds&#xff1b;ikpy \u4f1a&#034;\u5c3d\u529b\u800c\u4e3a&#034;\u4e0d\u62a5\u9519<\/td>\n<\/tr>\n<tr>\n<td>\u67d0\u4e2a\u5173\u8282\u600e\u4e48\u52a8&#xff0c;\u672b\u7aef\u90fd\u4e0d\u53d8<\/td>\n<td>\u8be5\u5173\u8282\u540e\u9762\u6ca1\u6709\u504f\u79fb&#xff08;\u7f3a\u672b\u7aef link&#xff09;&#xff0c;\u6216\u8f6c\u8f74\u4e0e\u8fde\u6746\u540c\u5411<\/td>\n<td>\u89c1 7.4.1 \/ 7.4.2&#xff0c;\u8865\u672b\u7aef\u504f\u79fb\u6216\u6539\u8f6c\u8f74<\/td>\n<\/tr>\n<tr>\n<td>ValueError: Your target must be a 4&#215;4<\/td>\n<td>\u7528\u4e86 inverse_kinematics_frame \u4f46\u76ee\u6807\u4e0d\u662f 4\u00d74<\/td>\n<td>\u7528 inverse_kinematics \u4f20 3 \u7ef4\u4f4d\u7f6e<\/td>\n<\/tr>\n<tr>\n<td>mask \u957f\u5ea6\u62a5\u9519<\/td>\n<td>active_links_mask \u957f\u5ea6\u4e0e links \u4e0d\u4e00\u81f4<\/td>\n<td>\u4e24\u8005\u957f\u5ea6\u5fc5\u987b\u76f8\u7b49<\/td>\n<\/tr>\n<tr>\n<td>Initial guess is outside of provided bounds<\/td>\n<td>initial_position \u8d85\u51fa bounds<\/td>\n<td>\u5148 np.clip \u5230\u9650\u4f4d\u5185<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3>7.10 \u52a8\u624b\u7ec3<\/h3>\n<li>\n<p>\u6700\u5c0f\u94fe&#xff1a;\u7528 OriginLink &#043; 2 \u4e2a\u5173\u8282 &#043; 1 \u4e2a\u672b\u7aef\u504f\u79fb&#xff08;L1&#061;L2&#061;0.3&#xff09;\u5efa\u4e00\u6761 2 \u8fde\u6746\u81c2&#xff0c;\u8ba1\u7b97 q&#061;[30\u00b0, -45\u00b0] \u7684\u672b\u7aef\u4f4d\u7f6e&#xff0c;\u5e76\u7528 7.4.4 \u7684\u624b\u7b97\u516c\u5f0f\u4ea4\u53c9\u9a8c\u8bc1\u3002 \u63d0\u793a&#xff1a;\u5982\u679c\u53ea\u5199 2 \u4e2a URDFLink \u4e0d\u52a0\u672b\u7aef\u504f\u79fb&#xff0c;\u4f60\u4f1a\u53d1\u73b0\u7b2c\u4e8c\u4e2a\u5173\u8282\u8f6c\u591a\u5c11\u5ea6\u672b\u7aef\u90fd\u4e0d\u52a8\u3002<\/p>\n<\/li>\n<li>\n<p>active_links_mask \u5b9e\u9a8c&#xff1a;\u5206\u522b\u7528&#034;\u4e0d\u4f20 mask&#034;\u548c&#034;\u4f20 [False,True,True,False]&#034;\u5efa\u540c\u4e00\u6761\u94fe&#xff0c;\u89c2\u5bdf\u8b66\u544a\u6570\u91cf\u4e0e FK \u7ed3\u679c\u662f\u5426\u4e00\u81f4\u3002<\/p>\n<\/li>\n<li>\n<p>\u9650\u4f4d\u9a8c\u8bc1&#xff1a;\u7ed9\u7b2c 2 \u4e2a\u5173\u8282\u8bbe bounds&#061;(-1.0, 1.0)&#xff0c;\u6c42\u4e00\u4e2a\u9700\u8981\u5927\u5e45\u5f2f\u66f2\u624d\u80fd\u5230\u8fbe\u7684\u76ee\u6807&#xff08;\u5982 [0.10, 0, 0.10]&#xff09;&#xff0c;\u9a8c\u8bc1\u89e3\u786e\u5b9e\u88ab\u94b3\u5728\u9650\u4f4d\u5185\u3002<\/p>\n<\/li>\n<li>\n<p>DHLink \u5bf9\u7167&#xff1a;\u7528 DHLink \u91cd\u5efa\u7b2c 05 \u7ae0\u7684 3 \u81ea\u7531\u5ea6\u81c2&#xff08;\u542b\u79fb\u52a8\u5173\u8282&#xff09;&#xff0c;\u4e0e\u624b\u5199 DH \u5bf9\u6bd4\u3002 \u63d0\u793a&#xff1a;\u79fb\u52a8\u5173\u8282\u9700\u8981\u7528 URDFLink(translation&#061;\u8f74\u65b9\u5411, joint_type&#061;&#034;prismatic&#034;)&#xff0c;DHLink \u4e0d\u652f\u6301\u3002<\/p>\n<\/li>\n<h4>\u7ec3\u4e60\u53c2\u8003\u7b54\u6848\u4e0e\u63d0\u793a<\/h4>\n<p>\u7ec3\u4e60 1 \u7b54\u6848&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u5efa\u94fe&#xff08;4\u4e2a\u5143\u7d20&#xff1a;OriginLink &#043; 2\u5173\u8282 &#043; \u672b\u7aef\u504f\u79fb&#xff09;<\/span><br \/>\nchain <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;two_link&#034;<\/span><span class=\"token punctuation\">,<\/span> links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n    OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.3<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;tip&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0.3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span> joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;fixed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">False<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>q <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><br \/>\nT <span class=\"token operator\">&#061;<\/span> chain<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span>q<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span>T<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token comment\"># \u5b9e\u6d4b\u5f97\u5230 [-0.337453, 0, 0.439778]<\/span><\/p>\n<p>\u624b\u7b97\u9a8c\u8bc1&#xff1a;Ry(30\u00b0) &#064; ([-0.3,0,0] &#043; Ry(-45\u00b0) &#064; [0,0,0.3]) &#061; [-0.337453, 0, 0.439778] \u2713&#xff08;\u4e0e 7.4.4 \u7684\u624b\u7b97\u516c\u5f0f\u4e00\u81f4&#xff09;<\/p>\n<p>\u7ec3\u4e60 2 \u63d0\u793a&#xff1a;\u4e0d\u4f20 mask \u65f6&#xff0c;ikpy \u4f1a\u5bf9 OriginLink \u548c\u672b\u7aef\u56fa\u5b9a\u8fde\u6746\u5404\u53d1\u4e00\u6761 UserWarning&#xff08;\u5171 2 \u6761&#xff09;&#xff0c;\u4f46 FK \u7ed3\u679c\u4e0e\u4f20 mask \u65f6\u5b8c\u5168\u4e00\u81f4\u3002\u8fd9\u8bf4\u660e\u8b66\u544a\u4e0d\u5f71\u54cd\u8ba1\u7b97\u7ed3\u679c&#xff0c;\u4f46\u5e94\u8be5\u663e\u5f0f\u8bbe\u7f6e mask \u4ee5\u4fdd\u6301\u4ee3\u7801\u6e05\u6670\u3002<\/p>\n<p>\u7ec3\u4e60 3 \u63d0\u793a&#xff1a;\u8bbe\u7f6e bounds&#061;(-1.0, 1.0) \u540e&#xff0c;\u6c42\u89e3\u9700\u8981\u5927\u5e45\u5f2f\u66f2\u7684\u76ee\u6807\u65f6&#xff0c;j2 \u4f1a\u88ab\u94b3\u5728 \u00b11.0 rad&#xff08;\u7ea6 \u00b157\u00b0&#xff09;&#xff0c;\u672b\u7aef\u4f1a\u6709\u6b8b\u5dee\u3002\u68c0\u67e5 np.abs(q_sol[2]) &lt;&#061; 1.0 &#043; 1e-6 \u9a8c\u8bc1\u9650\u4f4d\u751f\u6548\u3002<\/p>\n<p>\u7ec3\u4e60 4 \u5b8c\u6574\u53c2\u8003\u7b54\u6848&#xff1a;\u7528 DHLink \u91cd\u5efa\u7b2c 05 \u7ae0\u7684 3 \u81ea\u7531\u5ea6\u81c2&#xff08;2 \u8f6c &#043; 1 \u79fb&#xff09;&#xff0c;\u4e0e\u624b\u5199 DH \u5bf9\u6bd4\u3002<\/p>\n<h5>\u5173\u952e\u77e5\u8bc6\u70b9&#xff1a;\u79fb\u52a8\u5173\u8282\u4e0d\u80fd\u7528 DHLink<\/h5>\n<p>\u7b2c 05 \u7ae0\u7684 3 \u81ea\u7531\u5ea6\u81c2\u6709\u4e00\u4e2a\u79fb\u52a8\u5173\u8282&#xff08;J3&#xff0c;\u6cbf Z \u8f74\u4f38\u7f29&#xff09;\u3002DHLink \u7684\u5b9e\u73b0\u628a theta \u4f5c\u4e3a\u552f\u4e00\u53d8\u91cf&#xff08;\u65cb\u8f6c\u5173\u8282&#xff09;&#xff0c;\u4e0d\u652f\u6301\u628a d \u4f5c\u4e3a\u53d8\u91cf&#xff08;\u79fb\u52a8\u5173\u8282&#xff09;\u3002\u6240\u4ee5\u79fb\u52a8\u5173\u8282\u5fc5\u987b\u7528 URDFLink \u5b9e\u73b0&#xff1a;<\/p>\n<p>URDFLink<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j3&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>     <span class=\"token comment\"># \u7236\u5173\u8282\u5230\u672c\u5173\u8282\u7684\u504f\u79fb<\/span><br \/>\n    origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>                 <span class=\"token comment\"># \u2190 \u79fb\u52a8\u65b9\u5411&#xff1a;\u6cbf Z \u8f74<\/span><br \/>\n    joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;prismatic&#034;<\/span><span class=\"token punctuation\">,<\/span>                <span class=\"token comment\"># \u2190 \u5fc5\u987b\u663e\u5f0f\u6307\u5b9a&#xff01;<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<table>\n<tr>\u53c2\u6570\u65cb\u8f6c\u5173\u8282\u79fb\u52a8\u5173\u8282<\/tr>\n<tbody>\n<tr>\n<td>\u8fd0\u52a8\u8f74<\/td>\n<td>rotation&#061;[x, y, z]<\/td>\n<td>translation&#061;[x, y, z]<\/td>\n<\/tr>\n<tr>\n<td>joint_type<\/td>\n<td>&#034;revolute&#034;&#xff08;\u9ed8\u8ba4&#xff09;<\/td>\n<td>&#034;prismatic&#034;&#xff08;\u5fc5\u987b\u663e\u5f0f\u5199&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u53d8\u91cf\u542b\u4e49<\/td>\n<td>\u5173\u8282\u89d2&#xff08;\u5f27\u5ea6&#xff09;<\/td>\n<td>\u79fb\u52a8\u91cf&#xff08;\u7c73&#xff09;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u26a0\ufe0f \u5e38\u89c1\u9519\u8bef&#xff1a;\u79fb\u52a8\u5173\u8282\u53ea\u5199\u4e86 translation \u4f46\u5fd8\u4e86\u5199 joint_type&#061;&#034;prismatic&#034;\u3002ikpy \u9ed8\u8ba4 joint_type&#061;&#034;revolute&#034;&#xff0c;\u4f1a\u5bfc\u81f4\u53c2\u6570\u6821\u9a8c\u5931\u8d25\u6216\u884c\u4e3a\u5f02\u5e38\u3002<\/p>\n<h5>\u5b8c\u6574\u4ee3\u7801&#xff1a;\u6df7\u5408\u4f7f\u7528 DHLink \u548c URDFLink<\/h5>\n<p><span class=\"token keyword\">from<\/span> ikpy<span class=\"token punctuation\">.<\/span>chain <span class=\"token keyword\">import<\/span> Chain<br \/>\n<span class=\"token keyword\">from<\/span> ikpy<span class=\"token punctuation\">.<\/span>link <span class=\"token keyword\">import<\/span> OriginLink<span class=\"token punctuation\">,<\/span> URDFLink<span class=\"token punctuation\">,<\/span> DHLink<br \/>\n<span class=\"token keyword\">import<\/span> numpy <span class=\"token keyword\">as<\/span> np<\/p>\n<p><span class=\"token comment\"># \u65b9\u6848 A&#xff1a;\u524d\u4e24\u4e2a\u65cb\u8f6c\u5173\u8282\u7528 DHLink&#xff0c;\u7b2c\u4e09\u4e2a\u79fb\u52a8\u5173\u8282\u7528 URDFLink<\/span><br \/>\nchain_dh <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;dh_3dof&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n        OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        DHLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span> d<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.20<\/span><span class=\"token punctuation\">,<\/span> a<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> alpha<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> theta<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        DHLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span> d<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.00<\/span><span class=\"token punctuation\">,<\/span> a<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> alpha<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> theta<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u65b9\u6848 B&#xff1a;\u5168\u90e8\u7528 URDFLink&#xff08;\u542b\u79fb\u52a8\u5173\u8282&#xff09;<\/span><br \/>\nchain_full <span class=\"token operator\">&#061;<\/span> Chain<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;urdf_3dof&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    links<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><br \/>\n        OriginLink<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token comment\"># \u4e0e DH \u53c2\u6570\u5bf9\u5e94&#xff1a;j1 &#061; d&#061;0.20(\u57fa\u5ea7\u9ad8) &#043; a&#061;0.30(\u81c2\u957f)&#xff0c;\u7ed5 Z \u8f6c<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j1&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j2&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.20<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> rotation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        URDFLink<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;j3&#034;<\/span><span class=\"token punctuation\">,<\/span> origin_translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 origin_orientation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 translation<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>          <span class=\"token comment\"># \u79fb\u52a8\u65b9\u5411&#xff1a;\u6cbf Z \u8f74<\/span><br \/>\n                 joint_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;prismatic&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>         <span class=\"token comment\"># \u5fc5\u987b\u663e\u5f0f\u6307\u5b9a&#xff01;<\/span><br \/>\n    <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    active_links_mask<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u6d4b\u8bd5&#xff1a;q &#061; [J1&#061;30\u00b0, J2&#061;45\u00b0, J3&#061;0.1m]<\/span><br \/>\nq <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.1<\/span><span class=\"token punctuation\">]<\/span><br \/>\nT_urdf <span class=\"token operator\">&#061;<\/span> chain_full<span class=\"token punctuation\">.<\/span>forward_kinematics<span class=\"token punctuation\">(<\/span>q<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u624b\u5199 DH \u9a8c\u8bc1&#xff08;\u7b2c 05 \u7ae0\u7684 dh_transform&#xff09;<\/span><br \/>\nT_dh_manual <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><br \/>\n    dh_transform<span class=\"token punctuation\">(<\/span><span class=\"token number\">0.30<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.20<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">30<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    &#064; dh_transform<span class=\"token punctuation\">(<\/span><span class=\"token number\">0.25<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> np<span class=\"token punctuation\">.<\/span>radians<span class=\"token punctuation\">(<\/span><span class=\"token number\">45<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    &#064; dh_transform<span class=\"token punctuation\">(<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span>      <span class=\"token comment\"># \u79fb\u52a8\u5173\u8282&#xff1a;d&#061;0.1<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<h5>\u5b9e\u6d4b\u8f93\u51fa<\/h5>\n<p>URDFLink \u7248 (\u542b\u79fb\u52a8\u5173\u8282) &#061; [0.324512 0.391481 0.3     ]<br \/>\n\u624b\u5199 DH \u7248               &#061; [0.324512 0.391481 0.3     ]<br \/>\n\u4e00\u81f4: True<\/p>\n<p>\u2705 \u79fb\u52a8\u5173\u8282\u7528 URDFLink(translation&#061;\u8f74\u65b9\u5411, joint_type&#061;&#034;prismatic&#034;) \u5b9e\u73b0&#xff0c;\u5bf9\u5e94 DH \u91cc\u7684 d \u53d8\u91cf\u3002\u4e24\u8005\u7ed3\u679c\u5b8c\u5168\u4e00\u81f4\u3002<\/p>\n<h5>\u6df7\u5408\u4f7f\u7528\u7684\u6ce8\u610f\u4e8b\u9879<\/h5>\n<li>\n<p>\u5750\u6807\u7cfb\u4e00\u81f4\u6027&#xff1a;DHLink \u7528\u6807\u51c6 DH \u7ea6\u5b9a&#xff08;Rz(\u03b8)\u00b7Tz(d)\u00b7Tx(a)\u00b7Rx(\u03b1)&#xff09;&#xff0c;\u800c URDFLink \u7528&#034;\u5148\u5e73\u79fb\u540e\u65cb\u8f6c&#034;\u7ea6\u5b9a\u3002\u4e24\u8005\u5728\u540c\u4e00\u6761\u94fe\u4e2d\u6df7\u7528\u65f6&#xff0c;\u5fc5\u987b\u786e\u4fdd\u6bcf\u4e2a link \u7684 origin_translation \u4e0e DH \u53c2\u6570\u7684\u51e0\u4f55\u542b\u4e49\u4e00\u81f4\u3002\u6700\u7b80\u5355\u7684\u505a\u6cd5\u662f&#xff1a;\u8981\u4e48\u5168\u7528 DHLink&#xff08;\u53ea\u6709\u65cb\u8f6c\u5173\u8282\u65f6&#xff09;&#xff0c;\u8981\u4e48\u5168\u7528 URDFLink&#xff08;\u6709\u79fb\u52a8\u5173\u8282\u65f6&#xff09;\u3002<\/p>\n<\/li>\n<li>\n<p>active_links_mask \u957f\u5ea6&#xff1a;\u5fc5\u987b\u4e0e links \u5217\u8868\u957f\u5ea6\u4e00\u81f4\u3002\u65b9\u6848 A \u6709 3 \u4e2a\u5143\u7d20&#xff08;OriginLink &#043; 2 DHLink&#xff09;&#xff0c;\u65b9\u6848 B \u6709 4 \u4e2a\u5143\u7d20&#xff08;OriginLink &#043; 3 URDFLink&#xff09;\u3002<\/p>\n<\/li>\n<li>\n<p>\u79fb\u52a8\u5173\u8282\u7684 bounds&#xff1a;\u5355\u4f4d\u662f\u7c73&#xff08;\u4e0d\u662f\u5f27\u5ea6&#xff09;\u3002\u4f8b\u5982 bounds&#061;(0.0, 0.5) \u8868\u793a\u79fb\u52a8\u8303\u56f4 0~0.5m\u3002<\/p>\n<\/li>\n<p>\u53c2\u8003\u7b54\u6848\u89c1 code\/ch07_ikpy_intro.py\u3002<\/p>\n<hr \/>\n<h3>7.11 \u5c0f\u7ed3<\/h3>\n<h4>\u6838\u5fc3\u8981\u70b9\u56de\u987e<\/h4>\n<ul>\n<li>ikpy \u53ea\u505a\u8fd0\u52a8\u5b66&#xff08;FK\/IK&#xff09;&#xff0c;\u4e0d\u505a\u7269\u7406\u2014\u2014\u4e0e MuJoCo \u4e92\u8865\u3002<\/li>\n<li>\u56db\u4e2a\u7c7b&#xff1a;Chain&#xff08;\u5165\u53e3&#xff09;\u3001OriginLink&#xff08;\u5730\u57fa&#xff09;\u3001URDFLink&#xff08;\u5173\u8282\u8fde\u6746&#xff09;\u3001DHLink&#xff08;DH \u53c2\u6570\u8fde\u6746&#xff09;\u3002<\/li>\n<li>&#x1f525; origin_translation \u91cf\u7684\u662f&#034;\u5173\u8282\u5230\u5173\u8282&#034;\u7684\u8ddd\u79bb&#xff0c;\u672b\u7aef\u5fc5\u987b\u5355\u72ec\u52a0\u4e00\u4e2a\u56fa\u5b9a\u504f\u79fb link\u2014\u2014\u5426\u5219\u6700\u540e\u4e00\u4e2a\u5173\u8282\u5b8c\u5168\u4e0d\u8d77\u4f5c\u7528&#xff08;7.4.1&#xff0c;\u6700\u96be\u81ea\u67e5\u7684\u5751&#xff09;\u3002<\/li>\n<li>&#x1f525; \u8f6c\u8f74\u4e0d\u80fd\u4e0e\u8fde\u6746\u540c\u5411&#xff0c;\u5426\u5219\u65cb\u8f6c\u4e0d\u4ea7\u751f\u4f4d\u79fb&#xff08;7.4.2 \u53cd\u9762\u6559\u6750 A&#xff09;\u3002<\/li>\n<li>&#x1f525; ikpy 4.0 \u7528 origin_translation&#xff0c;\u4e0d\u662f translation_vector\u3002<\/li>\n<li>&#x1f525; \u56fa\u5b9a\u8fde\u6746\u5fc5\u987b\u5199 joint_type&#061;&#034;fixed&#034;&#xff1b;\u79fb\u52a8\u5173\u8282\u5fc5\u987b\u5199 joint_type&#061;&#034;prismatic&#034;\u3002<\/li>\n<li>active_links_mask&#xff1a;\u4e0d\u4f20\u5219\u5168 True&#xff08;\u4f1a\u5bf9\u6bcf\u4e2a fixed link \u53d1\u8b66\u544a&#xff09;&#xff0c;\u4f20\u4e86\u5219\u539f\u6837\u4fdd\u7559&#xff1b;OriginLink \u548c\u56fa\u5b9a\u8fde\u6746\u5e94\u4e3a False\u3002<\/li>\n<li>\u5173\u8282\u9650\u4f4d\u7528 bounds&#061;(lo, hi)&#xff0c;ikpy \u4fdd\u8bc1\u89e3\u5728\u9650\u4f4d\u5185&#xff1b;\u8d85\u51fa\u53ef\u8fbe\u8303\u56f4\u65f6\u8fd4\u56de&#034;\u8d34\u5728\u9650\u4f4d\u4e0a&#034;\u7684\u5c3d\u529b\u89e3&#xff0c;\u4e14\u4e0d\u62a5\u9519\u2014\u2014\u5fc5\u987b\u81ea\u5df1\u68c0\u67e5\u672b\u7aef\u8bef\u5dee\u3002<\/li>\n<li>IK \u672c\u8d28\u662f scipy.optimize.least_squares \u6700\u5c0f\u5316\u672b\u7aef\u8bef\u5dee&#xff1b;\u89e3\u53ef\u80fd\u4e0d\u662f\u4f60\u8f93\u5165\u7684\u90a3\u7ec4&#xff08;\u591a\u89e3&#xff0c;\u89c1\u7b2c 09 \u7ae0&#xff09;\u3002<\/li>\n<li>DHLink \u7684 FK \u4e0e\u7b2c 05 \u7ae0\u624b\u5199 DH \u5b8c\u5168\u4e00\u81f4&#xff08;\u5b9e\u6d4b [0.324512, 0.391481, 0.2]&#xff09;\u3002<\/li>\n<\/ul>\n<h4>\u5173\u952e API \u901f\u67e5\u8868<\/h4>\n<table>\n<tr>API\u4f5c\u7528<\/tr>\n<tbody>\n<tr>\n<td>Chain(links&#061;&#8230;, active_links_mask&#061;&#8230;)<\/td>\n<td>\u6784\u5efa\u8fd0\u52a8\u94fe<\/td>\n<\/tr>\n<tr>\n<td>OriginLink()<\/td>\n<td>\u94fe\u7684\u8d77\u70b9&#xff08;\u57fa\u5ea7&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>URDFLink(name, origin_translation, rotation, bounds, joint_type)<\/td>\n<td>URDF \u98ce\u683c\u8fde\u6746<\/td>\n<\/tr>\n<tr>\n<td>DHLink(name, d, a, alpha, theta)<\/td>\n<td>DH \u53c2\u6570\u98ce\u683c\u8fde\u6746<\/td>\n<\/tr>\n<tr>\n<td>chain.forward_kinematics(q_full)<\/td>\n<td>\u6b63\u8fd0\u52a8\u5b66&#xff08;\u8f93\u5165\u5b8c\u6574\u957f\u5ea6\u6570\u7ec4&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>chain.inverse_kinematics(target_position&#061;&#8230;, initial_position&#061;&#8230;)<\/td>\n<td>\u9006\u8fd0\u52a8\u5b66<\/td>\n<\/tr>\n<tr>\n<td>chain.plot(q, ax, target&#061;&#8230;)<\/td>\n<td>\u4e09\u7ef4\u53ef\u89c6\u5316<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>\u5728\u672c\u9879\u76ee\u4e2d\u7684\u5e94\u7528<\/h4>\n<ul>\n<li>\u7b2c 08 \u7ae0\u7528 ikpy \u6784\u5efa\u672c\u4e66 6 \u8f74\u673a\u68b0\u81c2\u7684\u5b8c\u6574 Chain<\/li>\n<li>\u7b2c 09 \u7ae0\u7528 ikpy \u505a\u59ff\u6001\u63a7\u5236\u3001\u5197\u4f59\u81ea\u7531\u5ea6\u7ba1\u7406\u3001\u907f\u969c<\/li>\n<li>\u7b2c 19 \u7ae0\u7528 ikpy \u505a\u4ea4\u53c9\u9a8c\u8bc1&#xff08;\u4e0e\u81ea\u7814 DLS \u5bf9\u6bd4&#xff09;<\/li>\n<li>pick_and_place.py \u4e3b\u8981\u7528\u81ea\u7814 DLS&#xff08;\u5b9e\u65f6\u6027\u66f4\u597d&#xff09;&#xff0c;\u4f46 ikpy \u7528\u4e8e\u79bb\u7ebf\u9a8c\u8bc1\u548c\u5feb\u901f\u539f\u578b<\/li>\n<\/ul>\n<h4>\u6269\u5c55\u9605\u8bfb\u65b9\u5411<\/h4>\n<li>ikpy \u5b98\u65b9\u6587\u6863&#xff1a;https:\/\/github.com\/Phylliade\/ikpy &#xff0c;\u67e5\u770b\u6700\u65b0 API \u548c\u793a\u4f8b<\/li>\n<li>URDF \u89c4\u8303&#xff1a;\u7406\u89e3 URDF \u7684 &lt;joint&gt;\u3001&lt;link&gt;\u3001&lt;origin&gt;\u3001&lt;axis&gt;\u3001&lt;limit&gt; \u7b49\u5143\u7d20&#xff0c;\u6709\u52a9\u4e8e\u7406\u89e3 ikpy \u7684\u53c2\u6570\u8bbe\u8ba1<\/li>\n<li>sympy \u7b26\u53f7\u8ba1\u7b97&#xff1a;ikpy \u7684\u6838\u5fc3\u673a\u5236&#xff0c;\u4e86\u89e3 sympy \u7684 Matrix\u3001Symbol\u3001lambdify \u7b49\u529f\u80fd<\/li>\n<li>scipy.optimize.least_squares&#xff1a;ikpy IK \u7684\u5e95\u5c42\u4f18\u5316\u5668&#xff0c;\u4e86\u89e3\u4fe1\u4efb\u533a\u57df\u7b97\u6cd5\u548c bounds \u5904\u7406<\/li>\n<li>PyKDL \/ trac_ik&#xff1a;\u5176\u4ed6\u4e3b\u6d41\u8fd0\u52a8\u5b66\u5e93&#xff0c;\u4e0e ikpy \u5bf9\u6bd4\u5b66\u4e60\u3002PyKDL \u662f ROS \u751f\u6001\u7684\u6807\u51c6&#xff0c;trac_ik \u662f\u66f4\u5feb\u901f\u7684 IK \u6c42\u89e3\u5668<\/li>\n<p>\u4e0b\u4e00\u7ae0\u7528 ikpy \u5b8c\u6574\u9a71\u52a8\u672c\u4e66\u7684 6 \u8f74\u673a\u68b0\u81c2\u3002<\/p>\n<hr \/>\n<p>\u4e0a\u4e00\u7ae0&#xff1a;06 \u00b7 \u9006\u8fd0\u52a8\u5b66 IK &#xff5c; \u4e0b\u4e00\u7ae0&#xff1a;08 \u00b7 ikpy FK\/IK \u5b9e\u6218<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u4e00\u7ae0\u8981\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898&#xff1a;\u4e0d\u60f3\u81ea\u5df1\u5199 DH\u3001\u4e0d\u60f3\u81ea\u5df1\u5b9e\u73b0 DLS&#xff0c;\u6709\u6ca1\u6709\u73b0\u6210\u7684\u5e93\u80fd\u7528&#xff1f; \u6709&#xff0c;\u5c31\u662f ikpy\u3002\u672c\u7ae0\u628a\u5b83\u62c6\u5f00\u8bb2\u6e05\u695a&#xff1a;\u4e09\u4e2a\u7c7b\u3001\u4e00\u5957\u53c2\u6570\u3001\u4ee5\u53ca 4.0 \u7248\u672c\u6539\u4e86\u54ea\u4e9b API&#xff08;\u7f51\u4e0a\u5927\u91cf\u6559\u7a0b\u5df2\u8fc7\u65f6&#xff09;\u3002 \u914d\u5957\u4ee3\u7801&#xff1a;[code\/ch07_ikpy_intro.py]<br \/>\n\\&#8221;\\&#8221;\\&#8221;<br \/>\n\u7b2c 07 \u7ae0\u914d\u5957\u4ee3\u7801&#xff1a;ikpy \u5165\u95e8\u3002\u8fd0\u884c&#xff1a;D:\\\\\\\\Environ<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[81],"topic":[],"class_list":["post-102644","post","type-post","status-publish","format-standard","hentry","category-server","tag-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>07 \u00b7 ikpy \u5165\u95e8 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/102644.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"07 \u00b7 ikpy \u5165\u95e8 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u8fd9\u4e00\u7ae0\u8981\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898&#xff1a;\u4e0d\u60f3\u81ea\u5df1\u5199 DH\u3001\u4e0d\u60f3\u81ea\u5df1\u5b9e\u73b0 DLS&#xff0c;\u6709\u6ca1\u6709\u73b0\u6210\u7684\u5e93\u80fd\u7528&#xff1f; \u6709&#xff0c;\u5c31\u662f ikpy\u3002\u672c\u7ae0\u628a\u5b83\u62c6\u5f00\u8bb2\u6e05\u695a&#xff1a;\u4e09\u4e2a\u7c7b\u3001\u4e00\u5957\u53c2\u6570\u3001\u4ee5\u53ca 4.0 \u7248\u672c\u6539\u4e86\u54ea\u4e9b API&#xff08;\u7f51\u4e0a\u5927\u91cf\u6559\u7a0b\u5df2\u8fc7\u65f6&#xff09;\u3002 \u914d\u5957\u4ee3\u7801&#xff1a;[code\/ch07_ikpy_intro.py] &quot;&quot;&quot; \u7b2c 07 \u7ae0\u914d\u5957\u4ee3\u7801&#xff1a;ikpy \u5165\u95e8\u3002\u8fd0\u884c&#xff1a;D:\\\\Environ\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/102644.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-09T01:57:03+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/102644.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/102644.html\",\"name\":\"07 \u00b7 ikpy \u5165\u95e8 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-09-09T01:57:03+00:00\",\"dateModified\":\"2026-09-09T01:57:03+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/102644.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/102644.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/102644.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"07 \u00b7 ikpy \u5165\u95e8\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"07 \u00b7 ikpy \u5165\u95e8 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/102644.html","og_locale":"zh_CN","og_type":"article","og_title":"07 \u00b7 ikpy \u5165\u95e8 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u8fd9\u4e00\u7ae0\u8981\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898&#xff1a;\u4e0d\u60f3\u81ea\u5df1\u5199 DH\u3001\u4e0d\u60f3\u81ea\u5df1\u5b9e\u73b0 DLS&#xff0c;\u6709\u6ca1\u6709\u73b0\u6210\u7684\u5e93\u80fd\u7528&#xff1f; \u6709&#xff0c;\u5c31\u662f ikpy\u3002\u672c\u7ae0\u628a\u5b83\u62c6\u5f00\u8bb2\u6e05\u695a&#xff1a;\u4e09\u4e2a\u7c7b\u3001\u4e00\u5957\u53c2\u6570\u3001\u4ee5\u53ca 4.0 \u7248\u672c\u6539\u4e86\u54ea\u4e9b API&#xff08;\u7f51\u4e0a\u5927\u91cf\u6559\u7a0b\u5df2\u8fc7\u65f6&#xff09;\u3002 \u914d\u5957\u4ee3\u7801&#xff1a;[code\/ch07_ikpy_intro.py] \"\"\" \u7b2c 07 \u7ae0\u914d\u5957\u4ee3\u7801&#xff1a;ikpy \u5165\u95e8\u3002\u8fd0\u884c&#xff1a;D:\\\\Environ","og_url":"https:\/\/www.wsisp.com\/helps\/102644.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-09-09T01:57:03+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"24 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/102644.html","url":"https:\/\/www.wsisp.com\/helps\/102644.html","name":"07 \u00b7 ikpy \u5165\u95e8 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-09-09T01:57:03+00:00","dateModified":"2026-09-09T01:57:03+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/102644.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/102644.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/102644.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"07 \u00b7 ikpy \u5165\u95e8"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/102644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=102644"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/102644\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=102644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=102644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=102644"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=102644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}