|
2 | 2 | "cells": [ |
3 | 3 | { |
4 | 4 | "cell_type": "code", |
5 | | - "execution_count": null, |
| 5 | + "execution_count": 1, |
6 | 6 | "metadata": {}, |
7 | 7 | "outputs": [], |
8 | 8 | "source": [ |
|
40 | 40 | }, |
41 | 41 | { |
42 | 42 | "cell_type": "code", |
43 | | - "execution_count": null, |
| 43 | + "execution_count": 2, |
44 | 44 | "metadata": {}, |
45 | 45 | "outputs": [], |
46 | 46 | "source": [ |
|
51 | 51 | }, |
52 | 52 | { |
53 | 53 | "cell_type": "code", |
54 | | - "execution_count": null, |
| 54 | + "execution_count": 3, |
55 | 55 | "metadata": {}, |
56 | 56 | "outputs": [], |
57 | 57 | "source": [ |
|
156 | 156 | }, |
157 | 157 | { |
158 | 158 | "cell_type": "code", |
159 | | - "execution_count": null, |
160 | | - "metadata": {}, |
161 | | - "outputs": [], |
| 159 | + "execution_count": 4, |
| 160 | + "metadata": {}, |
| 161 | + "outputs": [ |
| 162 | + { |
| 163 | + "name": "stdout", |
| 164 | + "output_type": "stream", |
| 165 | + "text": [ |
| 166 | + "Help on function __init__ in module one_dof_planar_robot:\n", |
| 167 | + "\n", |
| 168 | + "__init__(self, l1)\n", |
| 169 | + " Initialize self. See help(type(self)) for accurate signature.\n", |
| 170 | + "\n" |
| 171 | + ] |
| 172 | + } |
| 173 | + ], |
162 | 174 | "source": [ |
163 | 175 | "from one_dof_planar_robot import OneDofPlanarRobot\n", |
164 | 176 | "help(OneDofPlanarRobot.__init__)" |
165 | 177 | ] |
166 | 178 | }, |
167 | 179 | { |
168 | 180 | "cell_type": "code", |
169 | | - "execution_count": null, |
| 181 | + "execution_count": 5, |
170 | 182 | "metadata": {}, |
171 | 183 | "outputs": [], |
172 | 184 | "source": [ |
|
182 | 194 | }, |
183 | 195 | { |
184 | 196 | "cell_type": "code", |
185 | | - "execution_count": null, |
| 197 | + "execution_count": 6, |
186 | 198 | "metadata": {}, |
187 | 199 | "outputs": [], |
188 | 200 | "source": [ |
|
271 | 283 | }, |
272 | 284 | { |
273 | 285 | "cell_type": "code", |
274 | | - "execution_count": null, |
275 | | - "metadata": {}, |
276 | | - "outputs": [], |
| 286 | + "execution_count": 7, |
| 287 | + "metadata": {}, |
| 288 | + "outputs": [ |
| 289 | + { |
| 290 | + "name": "stdout", |
| 291 | + "output_type": "stream", |
| 292 | + "text": [ |
| 293 | + "Help on function ikm_tx in module one_dof_planar_robot:\n", |
| 294 | + "\n", |
| 295 | + "ikm_tx(self, tx)\n", |
| 296 | + " fkm calculates the IKM for the 1-DoF planar robot using the \n", |
| 297 | + " desired x-axis translation.\n", |
| 298 | + "\n" |
| 299 | + ] |
| 300 | + } |
| 301 | + ], |
277 | 302 | "source": [ |
278 | 303 | "help(OneDofPlanarRobot.ikm_tx)" |
279 | 304 | ] |
280 | 305 | }, |
281 | 306 | { |
282 | 307 | "cell_type": "code", |
283 | | - "execution_count": null, |
284 | | - "metadata": {}, |
285 | | - "outputs": [], |
| 308 | + "execution_count": 8, |
| 309 | + "metadata": {}, |
| 310 | + "outputs": [ |
| 311 | + { |
| 312 | + "name": "stdout", |
| 313 | + "output_type": "stream", |
| 314 | + "text": [ |
| 315 | + "Help on function ikm_ty in module one_dof_planar_robot:\n", |
| 316 | + "\n", |
| 317 | + "ikm_ty(self, ty)\n", |
| 318 | + " fkm calculates the IKM for the 1-DoF planar robot using the \n", |
| 319 | + " desired y-axis translation.\n", |
| 320 | + "\n" |
| 321 | + ] |
| 322 | + } |
| 323 | + ], |
286 | 324 | "source": [ |
287 | 325 | "help(OneDofPlanarRobot.ikm_ty)" |
288 | 326 | ] |
|
297 | 335 | }, |
298 | 336 | { |
299 | 337 | "cell_type": "code", |
300 | | - "execution_count": null, |
| 338 | + "execution_count": 9, |
301 | 339 | "metadata": {}, |
302 | 340 | "outputs": [], |
303 | 341 | "source": [ |
|
327 | 365 | }, |
328 | 366 | { |
329 | 367 | "cell_type": "code", |
330 | | - "execution_count": null, |
| 368 | + "execution_count": 10, |
331 | 369 | "metadata": {}, |
332 | 370 | "outputs": [], |
333 | 371 | "source": [ |
|
393 | 431 | }, |
394 | 432 | { |
395 | 433 | "cell_type": "code", |
396 | | - "execution_count": null, |
397 | | - "metadata": {}, |
398 | | - "outputs": [], |
| 434 | + "execution_count": 11, |
| 435 | + "metadata": {}, |
| 436 | + "outputs": [ |
| 437 | + { |
| 438 | + "name": "stdout", |
| 439 | + "output_type": "stream", |
| 440 | + "text": [ |
| 441 | + "Help on function translation_jacobian in module one_dof_planar_robot:\n", |
| 442 | + "\n", |
| 443 | + "translation_jacobian(self, theta1)\n", |
| 444 | + " Calculates the translation Jacobian of the 1-DoF planar\n", |
| 445 | + " robot.\n", |
| 446 | + "\n" |
| 447 | + ] |
| 448 | + } |
| 449 | + ], |
399 | 450 | "source": [ |
400 | 451 | "help(OneDofPlanarRobot.translation_jacobian)" |
401 | 452 | ] |
402 | 453 | }, |
403 | 454 | { |
404 | 455 | "cell_type": "code", |
405 | | - "execution_count": null, |
406 | | - "metadata": {}, |
407 | | - "outputs": [], |
| 456 | + "execution_count": 12, |
| 457 | + "metadata": {}, |
| 458 | + "outputs": [ |
| 459 | + { |
| 460 | + "name": "stdout", |
| 461 | + "output_type": "stream", |
| 462 | + "text": [ |
| 463 | + "Corresponding end effector velocity\n" |
| 464 | + ] |
| 465 | + } |
| 466 | + ], |
408 | 467 | "source": [ |
409 | 468 | "# Length\n", |
410 | 469 | "l1 = 1\n", |
|
426 | 485 | }, |
427 | 486 | { |
428 | 487 | "cell_type": "code", |
429 | | - "execution_count": null, |
430 | | - "metadata": {}, |
431 | | - "outputs": [], |
| 488 | + "execution_count": 13, |
| 489 | + "metadata": {}, |
| 490 | + "outputs": [ |
| 491 | + { |
| 492 | + "name": "stdout", |
| 493 | + "output_type": "stream", |
| 494 | + "text": [ |
| 495 | + "t_dot = [-0.00302661 -0.35998728 -0. ]\n" |
| 496 | + ] |
| 497 | + } |
| 498 | + ], |
432 | 499 | "source": [ |
433 | 500 | "t_dot = Jt*theta1_dot\n", |
434 | 501 | "print(f\"t_dot = {t_dot}\")" |
|
469 | 536 | "cell_type": "code", |
470 | 537 | "execution_count": null, |
471 | 538 | "metadata": {}, |
472 | | - "outputs": [], |
| 539 | + "outputs": [ |
| 540 | + { |
| 541 | + "name": "stdout", |
| 542 | + "output_type": "stream", |
| 543 | + "text": [ |
| 544 | + "t_dot = - 0.19i + 0.74j - 0.71k\n" |
| 545 | + ] |
| 546 | + } |
| 547 | + ], |
473 | 548 | "source": [ |
474 | 549 | "# Length\n", |
475 | 550 | "l1 = 1\n", |
|
481 | 556 | "theta1 = -2.27\n", |
482 | 557 | "\n", |
483 | 558 | "# vx, in m/s\n", |
484 | | - "vx =-0.19\n", |
| 559 | + "vx = -0.19\n", |
485 | 560 | "# vy, in m/s\n", |
486 | | - "vy =0.74\n", |
| 561 | + "vy = 0.74\n", |
487 | 562 | "# vz, in m/s\n", |
488 | | - "vz =-0.71\n", |
| 563 | + "vz = -0.71\n", |
489 | 564 | "\n", |
490 | 565 | "# Compose the end effector velocity into a pure quaternion\n", |
491 | 566 | "t_dot = DQ([vx, vy, vz])\n", |
|
494 | 569 | }, |
495 | 570 | { |
496 | 571 | "cell_type": "code", |
497 | | - "execution_count": null, |
| 572 | + "execution_count": 15, |
498 | 573 | "metadata": {}, |
499 | | - "outputs": [], |
| 574 | + "outputs": [ |
| 575 | + { |
| 576 | + "name": "stdout", |
| 577 | + "output_type": "stream", |
| 578 | + "text": [ |
| 579 | + "Corresponding joint velocity\n" |
| 580 | + ] |
| 581 | + } |
| 582 | + ], |
500 | 583 | "source": [ |
501 | 584 | "\n", |
502 | 585 | "# Get the translation jacobian, based on theta\n", |
|
508 | 591 | }, |
509 | 592 | { |
510 | 593 | "cell_type": "code", |
511 | | - "execution_count": null, |
512 | | - "metadata": {}, |
513 | | - "outputs": [], |
| 594 | + "execution_count": 16, |
| 595 | + "metadata": {}, |
| 596 | + "outputs": [ |
| 597 | + { |
| 598 | + "name": "stdout", |
| 599 | + "output_type": "stream", |
| 600 | + "text": [ |
| 601 | + "theta_dot = [-0.62168767]\n" |
| 602 | + ] |
| 603 | + } |
| 604 | + ], |
514 | 605 | "source": [ |
515 | 606 | "from dqrobotics.utils.DQ_LinearAlgebra import pinv\n", |
516 | 607 | "\n", |
|
556 | 647 | "cell_type": "code", |
557 | 648 | "execution_count": null, |
558 | 649 | "metadata": {}, |
559 | | - "outputs": [], |
| 650 | + "outputs": [ |
| 651 | + { |
| 652 | + "name": "stdout", |
| 653 | + "output_type": "stream", |
| 654 | + "text": [ |
| 655 | + "Running control loop for 251 iterations.\n" |
| 656 | + ] |
| 657 | + } |
| 658 | + ], |
560 | 659 | "source": [ |
561 | 660 | "import numpy as np\n", |
562 | 661 | "\n", |
|
580 | 679 | "\n", |
581 | 680 | "## Desired task-space velocity\n", |
582 | 681 | "# vx [m/s]\n", |
583 | | - "vx =3.29\n", |
| 682 | + "vx = 3.29\n", |
584 | 683 | "# vy [m/s]\n", |
585 | | - "vy =3.7\n", |
| 684 | + "vy = 3.7\n", |
586 | 685 | "# vz [m/s]\n", |
587 | | - "vz =3.5\n", |
| 686 | + "vz = 3.5\n", |
588 | 687 | "\n", |
589 | 688 | "# Compose the end effector velocity into a pure quaternion\n", |
590 | 689 | "td_dot = DQ([vx, vy, vz])\n", |
|
600 | 699 | }, |
601 | 700 | { |
602 | 701 | "cell_type": "code", |
603 | | - "execution_count": null, |
| 702 | + "execution_count": 18, |
604 | 703 | "metadata": {}, |
605 | 704 | "outputs": [], |
606 | 705 | "source": [ |
|
639 | 738 | }, |
640 | 739 | { |
641 | 740 | "cell_type": "code", |
642 | | - "execution_count": null, |
| 741 | + "execution_count": 19, |
643 | 742 | "metadata": {}, |
644 | 743 | "outputs": [], |
645 | 744 | "source": [ |
|
730 | 829 | }, |
731 | 830 | { |
732 | 831 | "cell_type": "code", |
733 | | - "execution_count": null, |
| 832 | + "execution_count": 20, |
734 | 833 | "metadata": {}, |
735 | 834 | "outputs": [], |
736 | 835 | "source": [ |
|
827 | 926 | ], |
828 | 927 | "metadata": { |
829 | 928 | "kernelspec": { |
830 | | - "display_name": ".venv", |
| 929 | + "display_name": "Python 3", |
831 | 930 | "language": "python", |
832 | 931 | "name": "python3" |
833 | 932 | }, |
|
841 | 940 | "name": "python", |
842 | 941 | "nbconvert_exporter": "python", |
843 | 942 | "pygments_lexer": "ipython3", |
844 | | - "version": "3.12.9" |
| 943 | + "version": "3.9.6" |
845 | 944 | } |
846 | 945 | }, |
847 | 946 | "nbformat": 4, |
|
0 commit comments