23
23
" import google.colab\n " ,
24
24
" print('Running on CoLab')\n " ,
25
25
" COLAB = True\n " ,
26
- " !pip install roboticstoolbox-python>=1.0.2\n " ,
26
+ " !pip install spatialmath-python\n " ,
27
+ " !pip install ipympl\n " ,
28
+ " !pip install --no-deps roboticstoolbox-python>=1.0.2\n " ,
27
29
" !pip install --no-deps rvc3python\n " ,
30
+ " \n " ,
28
31
" except ModuleNotFoundError:\n " ,
29
32
" COLAB = False\n " ,
30
33
" \n " ,
31
34
" from IPython.core.interactiveshell import InteractiveShell\n " ,
32
35
" InteractiveShell.ast_node_interactivity = \" last_expr_or_assign\"\n " ,
36
+ " \n " ,
33
37
" from IPython.display import HTML\n " ,
38
+ " import urllib.request\n " ,
34
39
" \n " ,
35
40
" # add RTB examples folder to the path\n " ,
36
41
" import sys, os.path\n " ,
37
42
" import roboticstoolbox as rtb\n " ,
38
43
" import RVC3\n " ,
39
- " sys.path.append(os.path.join(rtb.__path__[0], 'examples'))\n " ,
44
+ " # sys.path.append(os.path.join(rtb.__path__[0], 'examples'))\n " ,
40
45
" sys.path.append(os.path.join(RVC3.__path__[0], 'examples'))\n " ,
41
46
" \n " ,
42
47
" # standard imports\n " ,
50
55
" np.random.seed(0)\n " ,
51
56
" from spatialmath import *\n " ,
52
57
" from spatialmath.base import *\n " ,
53
- " from roboticstoolbox import quintic, trapezoidal, mtraj, mstraj, xplot, ctraj"
58
+ " from roboticstoolbox import quintic, trapezoidal, mtraj, mstraj, xplot, ctraj\n " ,
59
+ " %matplotlib widget\n " ,
60
+ " import matplotlib.pyplot as plt\n "
61
+ ]
62
+ },
63
+ {
64
+ "attachments" : {},
65
+ "cell_type" : " markdown" ,
66
+ "id" : " faa9a9d4" ,
67
+ "metadata" : {},
68
+ "source" : [
69
+ " There are some minor code changes compared to the book. These are to support \n " ,
70
+ " the Matplotlib widget (ipympl) backend. This allows 3D plots to be rotated\n " ,
71
+ " so the changes are worthwhile."
54
72
]
55
73
},
56
74
{
257
275
" orientation *= UnitQuaternion.EulerVec(w * dt)\n " ,
258
276
" yield orientation.R\n " ,
259
277
" \n " ,
260
- " plt.close( \" all \" ) \n " ,
261
- " # tranimate(update(), dims=[-1.5,1.5,-1.5,1.5,-1.5,1.5]); \n " ,
262
- " HTML(tranimate(update(), dims=[- 1.5,1.5,-1.5,1.5,-1.5,1.5], movie=True)); "
278
+ " # tranimate(update(), dim=1.5); \n " ,
279
+ " plotvol3(new=True) \n " ,
280
+ " HTML(tranimate(update(), dim= 1.5, movie=True))"
263
281
]
264
282
},
265
283
{
558
576
"outputs" : [],
559
577
"source" : [
560
578
" # qtraj.animate()\n " ,
561
- " HTML(qtraj.animate(movie=True));"
579
+ " plotvol3(new=True) # for matplotlib/widget\n " ,
580
+ " HTML(qtraj.animate(movie=True))"
562
581
]
563
582
},
564
583
{
578
597
"source" : [
579
598
" q0 = UnitQuaternion.Rz(-2); q1 = UnitQuaternion.Rz(2);\n " ,
580
599
" q = q0.interp(q1, 50);\n " ,
581
- " # q.animate()\n " ,
582
- " HTML(q.animate(movie=True))"
600
+ " # q.animate(dim=1.])\n " ,
601
+ " plotvol3(new=True) # for matplotlib/widget\n " ,
602
+ " HTML(q.animate(movie=True, dim=1.5))"
583
603
]
584
604
},
585
605
{
591
611
"source" : [
592
612
" q = q0.interp(q1, 50, shortest=True);\n " ,
593
613
" # q.animate()\n " ,
594
- " HTML(q.animate(movie=True))"
614
+ " plotvol3(new=True) # for matplotlib/widget\n " ,
615
+ " HTML(q.animate(movie=True, dim=1.5))"
595
616
]
596
617
},
597
618
{
651
672
"outputs" : [],
652
673
"source" : [
653
674
" # Ts.animate()\n " ,
654
- " HTML(Ts.animate(movie=True))"
675
+ " plotvol3(new=True) # for matplotlib/widget\n " ,
676
+ " HTML(Ts.animate(movie=True, dim=1.5))"
655
677
]
656
678
},
657
679
{
732
754
" ## 3.4.1 Gyroscopes\n "
733
755
]
734
756
},
735
- {
736
- "cell_type" : " markdown" ,
737
- "id" : " 8f4c845b" ,
738
- "metadata" : {},
739
- "source" : [
740
- " ### 3.4.1.1 How Gyroscopes Work\n "
741
- ]
742
- },
743
757
{
744
758
"cell_type" : " markdown" ,
745
759
"id" : " c8b681b9" ,
790
804
"outputs" : [],
791
805
"source" : [
792
806
" # orientation.animate(time=true.t)\n " ,
793
- " HTML(orientation.animate(time=true.t, movie=True))"
807
+ " HTML(orientation.animate(time=true.t, movie=True, dim=1.5 ))"
794
808
]
795
809
},
796
810
{
803
817
" xplot(true.t, orientation.rpy(), labels=\" roll pitch yaw\" );"
804
818
]
805
819
},
806
- {
807
- "cell_type" : " markdown" ,
808
- "id" : " 7b7a9cb6" ,
809
- "metadata" : {},
810
- "source" : [
811
- " ## 3.4.2 Accelerometers\n "
812
- ]
813
- },
814
- {
815
- "cell_type" : " markdown" ,
816
- "id" : " 5ecd0f01" ,
817
- "metadata" : {},
818
- "source" : [
819
- " ### 3.4.2.1 How Accelerometers Work\n "
820
- ]
821
- },
822
- {
823
- "cell_type" : " markdown" ,
824
- "id" : " e853b684" ,
825
- "metadata" : {},
826
- "source" : [
827
- " ### 3.4.2.2 Estimating Pose and Body Acceleration\n "
828
- ]
829
- },
830
- {
831
- "cell_type" : " markdown" ,
832
- "id" : " 01e778eb" ,
833
- "metadata" : {},
834
- "source" : [
835
- " ## 3.4.3 Magnetometers\n "
836
- ]
837
- },
838
- {
839
- "cell_type" : " markdown" ,
840
- "id" : " b2a83e52" ,
841
- "metadata" : {},
842
- "source" : [
843
- " ### 3.4.3.1 How Magnetometers Work\n "
844
- ]
845
- },
846
- {
847
- "cell_type" : " markdown" ,
848
- "id" : " 10cafe42" ,
849
- "metadata" : {},
850
- "source" : [
851
- " ### 3.4.3.2 Estimating Heading\n "
852
- ]
853
- },
854
820
{
855
821
"cell_type" : " markdown" ,
856
822
"id" : " f358dff8" ,
943
909
"name" : " python" ,
944
910
"nbconvert_exporter" : " python" ,
945
911
"pygments_lexer" : " ipython3" ,
946
- "version" : " 3.11.0 "
912
+ "version" : " 3.10.9 "
947
913
},
948
914
"vscode" : {
949
915
"interpreter" : {
953
919
},
954
920
"nbformat" : 4 ,
955
921
"nbformat_minor" : 5
956
- }
922
+ }
0 commit comments