├── .gitattributes
├── .gitignore
├── README.md
├── README_JP.md
├── SECURITY.md
├── ai_robotics_workshop.prj
├── doc
├── 8_400mm.svg
├── 8_400mm_corner1.pdf
├── 8_400mm_corner2.pdf
├── 8_400mm_intersection1.pdf
├── 8_400mm_intersection2.pdf
├── A0.pdf
├── A0.svg
├── AI_Robotics_Workshop.pdf
├── AI_Robotics_Workshop_jp.pdf
├── matlab_ai_robotics_workshop.gif
└── matlab_ai_robotics_workshop_hardware.gif
├── license.txt
├── resources
└── project
│ ├── 0COldfb-6uGv7YIaGr1_FbFLnzQ
│ ├── DtfkRCJyUKf5i6qlyyjVNUjL7HUd.xml
│ ├── DtfkRCJyUKf5i6qlyyjVNUjL7HUp.xml
│ ├── LGQWO8CiZT8qgQmEhQpFeiY7NtEd.xml
│ ├── LGQWO8CiZT8qgQmEhQpFeiY7NtEp.xml
│ ├── QJ25YFfPCjKElaz2k1WKyopEjYQd.xml
│ ├── QJ25YFfPCjKElaz2k1WKyopEjYQp.xml
│ ├── R_vU7W4BYHICfV-r0qqyiEoCtoEd.xml
│ ├── R_vU7W4BYHICfV-r0qqyiEoCtoEp.xml
│ ├── THl67pDOstdNfnJ2HeRaZvSehccd.xml
│ ├── THl67pDOstdNfnJ2HeRaZvSehccp.xml
│ ├── vdHpM0evZyEQPk1AfNrikv1ECCMd.xml
│ └── vdHpM0evZyEQPk1AfNrikv1ECCMp.xml
│ ├── EEtUlUb-dLAdf0KpMVivaUlztwA
│ ├── 3ADbWcYHTN6T3OJ3pPFZn5aPZsId.xml
│ ├── 3ADbWcYHTN6T3OJ3pPFZn5aPZsIp.xml
│ ├── 6FDm-XHZvrTROjrb3qoSX8Znz6od.xml
│ ├── 6FDm-XHZvrTROjrb3qoSX8Znz6op.xml
│ ├── 8MgIPA-tCXtYqjQP-ZYWj26IV3Ed.xml
│ ├── 8MgIPA-tCXtYqjQP-ZYWj26IV3Ep.xml
│ ├── GRs6SCotonf0lmeR0yk_JHZV88kd.xml
│ ├── GRs6SCotonf0lmeR0yk_JHZV88kp.xml
│ ├── JkCv_ZraKiHQX6DOGOtezRtkZZsd.xml
│ ├── JkCv_ZraKiHQX6DOGOtezRtkZZsp.xml
│ ├── TR8fVzEyKv2ulpj8bC1oK-0RJx4d.xml
│ ├── TR8fVzEyKv2ulpj8bC1oK-0RJx4p.xml
│ ├── UbVQ3gaKt7HhGhDqiNmGT2WTfsMd.xml
│ ├── UbVQ3gaKt7HhGhDqiNmGT2WTfsMp.xml
│ ├── VoutP_wnnR00g03vyggVEIXGj-Yd.xml
│ ├── VoutP_wnnR00g03vyggVEIXGj-Yp.xml
│ ├── Z_rjldIfbGHsAZqOCo6knmvJ2Rkd.xml
│ ├── Z_rjldIfbGHsAZqOCo6knmvJ2Rkp.xml
│ ├── cDA2SJKJ2lxqcGWonPiv5EFTehcd.xml
│ ├── cDA2SJKJ2lxqcGWonPiv5EFTehcp.xml
│ ├── d45ZD0_E236GQBfpEKKEm2gA4Xgd.xml
│ ├── d45ZD0_E236GQBfpEKKEm2gA4Xgp.xml
│ ├── eXx9DspwWFg7VfAOtkUMmoenjTgd.xml
│ ├── eXx9DspwWFg7VfAOtkUMmoenjTgp.xml
│ ├── iQLxrc_OIV619wcSg_6L2R05wk8d.xml
│ ├── iQLxrc_OIV619wcSg_6L2R05wk8p.xml
│ ├── jzeR9yK5Zs-B9IIbLfGrL1X__YQd.xml
│ ├── jzeR9yK5Zs-B9IIbLfGrL1X__YQp.xml
│ ├── mRXcBBRMGqmY9NQGscJ-WE_r5Dod.xml
│ ├── mRXcBBRMGqmY9NQGscJ-WE_r5Dop.xml
│ ├── nP8LWij6PjFpGgKSDpKyd2Odx8gd.xml
│ ├── nP8LWij6PjFpGgKSDpKyd2Odx8gp.xml
│ ├── rJ-5f9zYELt3RosHYt4dYdN3Bzwd.xml
│ ├── rJ-5f9zYELt3RosHYt4dYdN3Bzwp.xml
│ ├── re93B5-kK-NWW0cLXdUalYgIV8Qd.xml
│ └── re93B5-kK-NWW0cLXdUalYgIV8Qp.xml
│ ├── Hd6KPvwB3Bjr5Lc7_gIgP7FN6wM
│ ├── 8u2bNyZ3L7hNOCi-h7YBcl52KFId.xml
│ ├── 8u2bNyZ3L7hNOCi-h7YBcl52KFIp.xml
│ ├── Hf_DrwUwq0-V15AZNKZpZcnXAa4d.xml
│ └── Hf_DrwUwq0-V15AZNKZpZcnXAa4p.xml
│ ├── HoHDHQ_WvHAAKj5aJOrvrg_vpt8
│ ├── xXlmKuOQ7YT_G1elNhbKQIUqSRMd.xml
│ └── xXlmKuOQ7YT_G1elNhbKQIUqSRMp.xml
│ ├── Jb61Kk_GvvOMXgvyT4GFLqNyUfU
│ ├── -5vWh4yFhxq83jG67Om1j6dilSwd.xml
│ ├── -5vWh4yFhxq83jG67Om1j6dilSwp.xml
│ ├── -P0FT7TH809XfADGsTMDtw4dWp0d.xml
│ ├── -P0FT7TH809XfADGsTMDtw4dWp0p.xml
│ ├── 1oVQHFhqM1c1HSKWdUA1__3l1tQd.xml
│ ├── 1oVQHFhqM1c1HSKWdUA1__3l1tQp.xml
│ ├── KtlO4IxLX3G-0BB6aWpRoWjGPXwd.xml
│ ├── KtlO4IxLX3G-0BB6aWpRoWjGPXwp.xml
│ ├── Yp2XMezOseJTMe2YLo19HCHA-wkd.xml
│ ├── Yp2XMezOseJTMe2YLo19HCHA-wkp.xml
│ ├── bcud-hmeUQI43XfX9mSBblgPexId.xml
│ ├── bcud-hmeUQI43XfX9mSBblgPexIp.xml
│ ├── cUzUiW5vrd5QG1b-WyNk3hRWRnUd.xml
│ ├── cUzUiW5vrd5QG1b-WyNk3hRWRnUp.xml
│ ├── nhX9BIDSoYTruRGoon6lh67Y9Wkd.xml
│ ├── nhX9BIDSoYTruRGoon6lh67Y9Wkp.xml
│ ├── o830-k38pBlRxHAHbbfGQ5ECvkwd.xml
│ └── o830-k38pBlRxHAHbbfGQ5ECvkwp.xml
│ ├── KAXfQgCar2Yb8zOxgvf9hdmLP1E
│ ├── GeSkPJ8Q59zhZpj2_y5cproalSId.xml
│ ├── GeSkPJ8Q59zhZpj2_y5cproalSIp.xml
│ ├── TDnuwAjp4FfvdbaCMI3zCc9k3Mcd.xml
│ ├── TDnuwAjp4FfvdbaCMI3zCc9k3Mcp.xml
│ ├── ik53_NsG6creDEvmoZ6jiepDHy8d.xml
│ └── ik53_NsG6creDEvmoZ6jiepDHy8p.xml
│ ├── NjSPEMsIuLUyIpr2u1Js5bVPsOs
│ ├── 2kj09UetkV_lru3gvSPXnY6-nM4d.xml
│ ├── 2kj09UetkV_lru3gvSPXnY6-nM4p.xml
│ ├── KKyDJtbdIBOlaeHmIZd5VX6vqx8d.xml
│ ├── KKyDJtbdIBOlaeHmIZd5VX6vqx8p.xml
│ ├── QWNDYJD5mGW1bWYvPx9DtKnxzw4d.xml
│ ├── QWNDYJD5mGW1bWYvPx9DtKnxzw4p.xml
│ ├── R1RggVhA72agIvELiuhWPRS8F0Id.xml
│ ├── R1RggVhA72agIvELiuhWPRS8F0Ip.xml
│ ├── aEHSZBIY-yve10yGis12Zr5DLZod.xml
│ ├── aEHSZBIY-yve10yGis12Zr5DLZop.xml
│ ├── j4xwF_j8iFTVayUMfxLgMnTbencd.xml
│ ├── j4xwF_j8iFTVayUMfxLgMnTbencp.xml
│ ├── r8LR4nLmg9ai3oHrW1r_-KocQzkd.xml
│ └── r8LR4nLmg9ai3oHrW1r_-KocQzkp.xml
│ ├── POHnXJCjlccoW9VNP4cPqF8uaYo
│ ├── 5xPWrEoyyXYfp-eTjSRl_ttcgnEd.xml
│ └── 5xPWrEoyyXYfp-eTjSRl_ttcgnEp.xml
│ ├── Project.xml
│ ├── R6m7AxFfSX7StHtVJ9WG44h96GM
│ ├── 0COldfb-6uGv7YIaGr1_FbFLnzQd.xml
│ ├── 0COldfb-6uGv7YIaGr1_FbFLnzQp.xml
│ ├── 82RVMc7UMy8dFHqE9Ut1hlA-79Ad.xml
│ ├── 82RVMc7UMy8dFHqE9Ut1hlA-79Ap.xml
│ ├── D86tPVkI1EaiwWUwwGXz-mY7u48d.xml
│ ├── D86tPVkI1EaiwWUwwGXz-mY7u48p.xml
│ ├── Hd6KPvwB3Bjr5Lc7_gIgP7FN6wMd.xml
│ ├── Hd6KPvwB3Bjr5Lc7_gIgP7FN6wMp.xml
│ ├── Jb61Kk_GvvOMXgvyT4GFLqNyUfUd.xml
│ ├── Jb61Kk_GvvOMXgvyT4GFLqNyUfUp.xml
│ ├── TViFZfTwSc5gXhBPhjNdQZTclNwd.xml
│ ├── TViFZfTwSc5gXhBPhjNdQZTclNwp.xml
│ ├── aVUIa3BPzof8SPZymw9Cy6wE7pId.xml
│ ├── aVUIa3BPzof8SPZymw9Cy6wE7pIp.xml
│ ├── g6DFlDUYrr9kqUFRRUN2VRnyfhkd.xml
│ ├── g6DFlDUYrr9kqUFRRUN2VRnyfhkp.xml
│ ├── hgCEKV4QVXBgTQnP5nS6W7EYgekd.xml
│ ├── hgCEKV4QVXBgTQnP5nS6W7EYgekp.xml
│ ├── vH6_y7kgT4t7f1SDCWtzaJXb8W4d.xml
│ └── vH6_y7kgT4t7f1SDCWtzaJXb8W4p.xml
│ ├── TViFZfTwSc5gXhBPhjNdQZTclNw
│ ├── 7RsPx46GKsQxSafVE79zIdkKPewd.xml
│ ├── 7RsPx46GKsQxSafVE79zIdkKPewp.xml
│ ├── 8bcB89v9ydMi6daBTKOpwdyuXs0d.xml
│ ├── 8bcB89v9ydMi6daBTKOpwdyuXs0p.xml
│ ├── Hmc1riq5DZRfekzzbgtmtpsDA0Qd.xml
│ ├── Hmc1riq5DZRfekzzbgtmtpsDA0Qp.xml
│ ├── c7d0zuY24rXKoB7Q6STfdiWZVhcd.xml
│ ├── c7d0zuY24rXKoB7Q6STfdiWZVhcp.xml
│ ├── cfvUSycIC4G6PwjJRUnVN0f609Ad.xml
│ └── cfvUSycIC4G6PwjJRUnVN0f609Ap.xml
│ ├── UlAHOZoMDCgi5j3nN_izvbMg_-U
│ ├── Zq0I8NnkK9f3x6NnbJdqOyiiFGMd.xml
│ ├── Zq0I8NnkK9f3x6NnbJdqOyiiFGMp.xml
│ ├── j16TRzdtoaEbS_8i1s72m7-yIMUd.xml
│ ├── j16TRzdtoaEbS_8i1s72m7-yIMUp.xml
│ ├── pXsgtTibNn73dBt6GMWF8jRg--0d.xml
│ └── pXsgtTibNn73dBt6GMWF8jRg--0p.xml
│ ├── VyU-bDuHYQuVw3Vkgk2edQX28g8
│ ├── NqUIsSM7fY4Jv6C3LqQhKn1tJtAd.xml
│ ├── NqUIsSM7fY4Jv6C3LqQhKn1tJtAp.xml
│ ├── mbEnUx_lP0aPB7lmOyj-85g7P6Yd.xml
│ └── mbEnUx_lP0aPB7lmOyj-85g7P6Yp.xml
│ ├── WZRuNzqc-Db7NcQAZO8Y-R8U9cc
│ ├── haUKcDd7PrBH5j2sypBgBtW0rIcd.xml
│ └── haUKcDd7PrBH5j2sypBgBtW0rIcp.xml
│ ├── YOCmEf6wFg5zlllHOLVBmTDJKnU
│ ├── Dkt-I1sQ1LRFDHrw169lK69NEA4d.xml
│ ├── Dkt-I1sQ1LRFDHrw169lK69NEA4p.xml
│ ├── mg7Ogzzj_Fhs-rTy8sXkYt729lYd.xml
│ ├── mg7Ogzzj_Fhs-rTy8sXkYt729lYp.xml
│ ├── ouFbDGxHZ1LzVuLcM1rD6wF2RPMd.xml
│ └── ouFbDGxHZ1LzVuLcM1rD6wF2RPMp.xml
│ ├── YhuPDDuEWIGe0C07ihHYccefon0
│ ├── bRih8FCE79z1wPsigx8LacNwzJMd.xml
│ ├── bRih8FCE79z1wPsigx8LacNwzJMp.xml
│ ├── bevW2ziouPmu8-_szRjwhlNyRDMd.xml
│ ├── bevW2ziouPmu8-_szRjwhlNyRDMp.xml
│ ├── gEOSAOEw0wWPGhq0Jcyj7TCokrkd.xml
│ ├── gEOSAOEw0wWPGhq0Jcyj7TCokrkp.xml
│ ├── mXCVGRnnD-Nx2c1j7zCLj-Znmgod.xml
│ └── mXCVGRnnD-Nx2c1j7zCLj-Znmgop.xml
│ ├── aVUIa3BPzof8SPZymw9Cy6wE7pI
│ ├── Hbc_AeEGKIaMex1zhIqSRFjz-awd.xml
│ ├── Hbc_AeEGKIaMex1zhIqSRFjz-awp.xml
│ ├── RFFxmYuaG0Yrvcn4plcCPzQjSP8d.xml
│ ├── RFFxmYuaG0Yrvcn4plcCPzQjSP8p.xml
│ ├── TfX_PS6pj43Eiq0gv2uln1oVxvgd.xml
│ └── TfX_PS6pj43Eiq0gv2uln1oVxvgp.xml
│ ├── fjRQtWiSIy7hIlj-Kmk87M7s21k
│ ├── NjSPEMsIuLUyIpr2u1Js5bVPsOsd.xml
│ └── NjSPEMsIuLUyIpr2u1Js5bVPsOsp.xml
│ ├── g6DFlDUYrr9kqUFRRUN2VRnyfhk
│ ├── 48VbWz1oSmsgEpqtO7sOiP_1cV4d.xml
│ ├── 48VbWz1oSmsgEpqtO7sOiP_1cV4p.xml
│ ├── 92VAKwOj-ZayvTXiBaDoi18kHXcd.xml
│ ├── 92VAKwOj-ZayvTXiBaDoi18kHXcp.xml
│ ├── On3lB2PSMzW0cdywC4fl7_AMJEgd.xml
│ ├── On3lB2PSMzW0cdywC4fl7_AMJEgp.xml
│ ├── XXrnNg8gB7Osh7_psmQsGisrnlod.xml
│ ├── XXrnNg8gB7Osh7_psmQsGisrnlop.xml
│ ├── YSklTfdtfixZ8KlEfTP-TBej528d.xml
│ └── YSklTfdtfixZ8KlEfTP-TBej528p.xml
│ ├── hgCEKV4QVXBgTQnP5nS6W7EYgek
│ ├── Br0MuNwanhEGAaItHXNQd1VdQo8d.xml
│ ├── Br0MuNwanhEGAaItHXNQd1VdQo8p.xml
│ ├── T3qqflG_jOgbiCoFW-pSrZiWkqId.xml
│ ├── T3qqflG_jOgbiCoFW-pSrZiWkqIp.xml
│ ├── cB-mrXTKkIpH8Nnsh_yx1GtFepsd.xml
│ ├── cB-mrXTKkIpH8Nnsh_yx1GtFepsp.xml
│ ├── e53oq9T9IYunORrgJJfYnT38TXMd.xml
│ └── e53oq9T9IYunORrgJJfYnT38TXMp.xml
│ ├── nhX9BIDSoYTruRGoon6lh67Y9Wk
│ ├── FPo09ZrdpmvifYTldCSyw7-R298d.xml
│ ├── FPo09ZrdpmvifYTldCSyw7-R298p.xml
│ ├── YOCmEf6wFg5zlllHOLVBmTDJKnUd.xml
│ └── YOCmEf6wFg5zlllHOLVBmTDJKnUp.xml
│ ├── pXsgtTibNn73dBt6GMWF8jRg--0
│ ├── 3dJyw3aumtTo7mC689lPZ7oF9oYd.xml
│ ├── 3dJyw3aumtTo7mC689lPZ7oF9oYp.xml
│ ├── VXIyW-RV89E7y0cCPdccQKtc0uMd.xml
│ ├── VXIyW-RV89E7y0cCPdccQKtc0uMp.xml
│ ├── kSBhM_zPZwtizRXHuAar7G_lvxod.xml
│ ├── kSBhM_zPZwtizRXHuAar7G_lvxop.xml
│ ├── xnYhgNrjqBRI7JWfzOdCAFbRfM4d.xml
│ └── xnYhgNrjqBRI7JWfzOdCAFbRfM4p.xml
│ ├── qaw0eS1zuuY1ar9TdPn1GMfrjbQ
│ ├── 2uRqUwgzsMPtKV1vY4JvGEQwdJId.xml
│ ├── 2uRqUwgzsMPtKV1vY4JvGEQwdJIp.xml
│ ├── POHnXJCjlccoW9VNP4cPqF8uaYod.xml
│ ├── POHnXJCjlccoW9VNP4cPqF8uaYop.xml
│ ├── QMJD9OLFzxcTTbPOoh-ahQ4zTRUd.xml
│ ├── QMJD9OLFzxcTTbPOoh-ahQ4zTRUp.xml
│ ├── R6m7AxFfSX7StHtVJ9WG44h96GMd.xml
│ ├── R6m7AxFfSX7StHtVJ9WG44h96GMp.xml
│ ├── TMK4UzWHdRLhy_w-CHt9y11Q8XAd.xml
│ ├── TMK4UzWHdRLhy_w-CHt9y11Q8XAp.xml
│ ├── UlAHOZoMDCgi5j3nN_izvbMg_-Ud.xml
│ ├── UlAHOZoMDCgi5j3nN_izvbMg_-Up.xml
│ ├── VyU-bDuHYQuVw3Vkgk2edQX28g8d.xml
│ ├── VyU-bDuHYQuVw3Vkgk2edQX28g8p.xml
│ ├── YhuPDDuEWIGe0C07ihHYccefon0d.xml
│ ├── YhuPDDuEWIGe0C07ihHYccefon0p.xml
│ ├── qD-kr16wmwlzR-nIg1IG_vvRrWkd.xml
│ ├── qD-kr16wmwlzR-nIg1IG_vvRrWkp.xml
│ ├── rh0jHbNfmojECiiHH7BQHmZTsWkd.xml
│ ├── rh0jHbNfmojECiiHH7BQHmZTsWkp.xml
│ ├── wOLVUSg8QHmXqB1zcpp9YNG1EMgd.xml
│ └── wOLVUSg8QHmXqB1zcpp9YNG1EMgp.xml
│ ├── root
│ ├── 6x1BhZX_fLnKpcwqra0qFwv1jIgp.xml
│ ├── EEtUlUb-dLAdf0KpMVivaUlztwAp.xml
│ ├── GiiBklLgTxteCEmomM8RCvWT0nQd.xml
│ ├── GiiBklLgTxteCEmomM8RCvWT0nQp.xml
│ ├── HoHDHQ_WvHAAKj5aJOrvrg_vpt8p.xml
│ ├── KAXfQgCar2Yb8zOxgvf9hdmLP1Ep.xml
│ ├── NmGqIpAwUJcXFyLjFAGnU9uyN5Yp.xml
│ ├── WZRuNzqc-Db7NcQAZO8Y-R8U9ccp.xml
│ ├── fjRQtWiSIy7hIlj-Kmk87M7s21kp.xml
│ └── qaw0eS1zuuY1ar9TdPn1GMfrjbQp.xml
│ ├── rootp.xml
│ ├── uuid-da22b07d-a3a4-4396-b058-ded3b2eed0df.xml
│ └── wOLVUSg8QHmXqB1zcpp9YNG1EMg
│ ├── 65Umubuml_CVlU5qZnQpZUhDTS4d.xml
│ ├── 65Umubuml_CVlU5qZnQpZUhDTS4p.xml
│ ├── GpIdUX_vbbidQJVBudfm9Ru5JTYd.xml
│ ├── GpIdUX_vbbidQJVBudfm9Ru5JTYp.xml
│ ├── Q1kYspdhlzJEdxNCtzAqGovAto4d.xml
│ ├── Q1kYspdhlzJEdxNCtzAqGovAto4p.xml
│ ├── j28d20mDifNUrBFie_vtxtycBCgd.xml
│ └── j28d20mDifNUrBFie_vtxtycBCgp.xml
├── scene
├── robotTrainWorld.wrl
└── texture
│ ├── course.png
│ ├── course_circle.png
│ └── course_curve.png
├── setup
└── jetbot_ros_for_c7d0e61.patch
├── shortcuts
├── launchJetBotROSNode.m
├── openStartupScript.m
└── stopJetBotROSNode.m
├── src
├── 001_dataset_generation
│ ├── dataset_generator.slx
│ ├── genCourseTraj.mlx
│ └── genCourseTraj_jp.mlx
├── 002_detector_training
│ ├── annotateVideo.mlx
│ ├── annotateVideo_jp.mlx
│ ├── mynet.mat
│ ├── trainWhiteLine.mlx
│ └── trainWhiteLine_jp.mlx
├── 003_system_integration
│ └── line_follower.slx
├── 004_hardware_connection
│ ├── jetBotKeyboardControl.m
│ ├── ros_teleop.slx
│ ├── teleopTestJetBot.mlx
│ └── teleopTestJetBot_jp.mlx
├── 005_detector_retraining
│ ├── trainWhiteLineWithHardware.mlx
│ └── trainWhiteLineWithHardware_jp.mlx
├── 006_hardware_testing
│ ├── ros_line_follower_all.slx
│ ├── ros_line_follower_all_ml.m
│ ├── testLineFollowerWithROS.mlx
│ └── testLineFollowerWithROS_jp.mlx
├── 007_hardware_deployment
│ ├── deployLineFollower.mlx
│ ├── deployLineFollower_jp.mlx
│ ├── line_detection.m
│ ├── line_detector
│ │ ├── CMakeLists.txt
│ │ ├── launch
│ │ │ ├── line_detector.launch
│ │ │ ├── line_detector_nodelet.launch
│ │ │ ├── line_detector_nodelet_cam.launch
│ │ │ ├── line_detector_nodelet_camcsi.launch
│ │ │ ├── line_detector_nodelet_camcsi_motor.launch
│ │ │ └── line_following.launch
│ │ ├── nodelet_plugins.xml
│ │ ├── package.xml
│ │ └── src
│ │ │ ├── codegen
│ │ │ └── .gitkeep
│ │ │ ├── node
│ │ │ └── line_detector.cpp
│ │ │ └── nodelet
│ │ │ └── line_detector_nodelet.cpp
│ ├── mat2ocv.m
│ ├── ocv2mat.m
│ ├── ros_line_follower.slx
│ └── ros_monitor.slx
├── workshopMenu.mlx
└── workshopMenu_jp.mlx
└── work
└── .gitkeep
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.fig binary
2 | *.mat binary
3 | *.mdl binary
4 | *.mdlp binary
5 | *.mexa64 binary
6 | *.mexw64 binary
7 | *.mexmaci64 binary
8 | *.mlapp binary
9 | *.mldatx binary
10 | *.mlproj binary
11 | *.mlx binary
12 | *.p binary
13 | *.sfx binary
14 | *.sldd binary
15 | *.slreqx binary
16 | *.slmx binary
17 | *.sltx binary
18 | *.slxc binary
19 | *.slx binary merge=mlAutoMerge
20 | *.slxp binary
21 |
22 | ## Other common binary file types
23 | *.docx binary
24 | *.exe binary
25 | *.jpg binary
26 | *.pdf binary
27 | *.png binary
28 | *.xlsx binary
29 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # List of untracked files to ignore
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MATLAB AI Robotics Workshop
2 |
3 | [](https://jp.mathworks.com/matlabcentral/fileexchange/91980-matlab-ai-robotics-workshop)
4 |
5 | This material outlines a hands-on workshop on learning how to develop AI-based autonomous mobile robot for university students and engineers of all skill levels. MATLAB and Simulink are utilized as an intuitive learning environment for deep learning and control algorithms with a 3D virtual simulation environment. In addition, this content also covers the hardware deployment using an [NVIDIA® JetBot](https://jetbot.org/).
6 |
7 | 
8 |
9 | [Japanese version](README_JP.md)
10 |
11 | ## Setup
12 |
13 | ### Simulation
14 |
15 | MathWorks Products (http://www.mathworks.com)
16 |
17 | The hands-on content has been tested with R2024a.
18 |
19 | * [MATLAB®](https://www.mathworks.com/products/matlab.html)
20 | * [Simulink®](https://www.mathworks.com/products/simulink.html)
21 | * [Image Processing Toolbox™](https://www.mathworks.com/products/image.html)
22 | * [Computer Vision Toolbox™](https://www.mathworks.com/products/computer-vision.html)
23 | * [Deep Learning Toolbox™](https://www.mathworks.com/products/deep-learning.html)
24 | * [Parallel Computing Toolbox™](https://www.mathworks.com/products/parallel-computing.html)
25 | * [Robotics System Toolbox™](https://www.mathworks.com/products/robotics.html)
26 | * [Simulink 3D Animation™](https://www.mathworks.com/products/3d-animation.html)
27 |
28 | ### Hardware Deployment (*Optional*)
29 |
30 | 
31 |
32 | Following MathWorks products and 3rd party products are additionally required for the hardware deployment.
33 |
34 | * [ROS Toolbox](https://www.mathworks.com/products/ros.html)
35 | * [MATLAB Coder™](https://www.mathworks.com/products/matlab-coder.html)
36 | * [Simulink Coder™](https://www.mathworks.com/products/simulink-coder.html)
37 | * [GPU Coder™](https://www.mathworks.com/products/gpu-coder.html)
38 |
39 | 3rd Party Products
40 |
41 | * [NVIDIA® JetBot](https://jetbot.org/) (We tested with [FaBo's JetBot](https://www.fabo.store/collections/jetbot/products/jetbot-kit))
42 |
43 | ## Getting Started
44 |
45 | 1. Launch MATLAB
46 | 2. Open `ai_robotics_workshop.prj`
47 | 3. Follow the opened Live Script
48 |
49 | ## Documentation
50 |
51 | Please find the [PDF documentation](doc/AI_Robotics_Workshop.pdf) for details.
52 |
53 | ## License
54 |
55 | The license for MATLAB AI Robotics Workshop is available in the [license.txt](license.txt) file in this GitHub repository.
56 |
57 | ## Community Support
58 |
59 | [MATLAB Central](https://www.mathworks.com/matlabcentral)
60 |
61 | Copyright 2021 The MathWorks, Inc.
--------------------------------------------------------------------------------
/README_JP.md:
--------------------------------------------------------------------------------
1 | # MATLAB AI ロボティクスワークショップ
2 |
3 | [](https://jp.mathworks.com/matlabcentral/fileexchange/91980-matlab-ai-robotics-workshop)
4 |
5 | 学生やエンジニアがAIベースの自律移動ロボットをどのように開発するかを学ぶためのハンズオンコンテンツです。ディープラーニングや制御アルゴリズムを3次元シミュレーション環境を通じて直感的に学ぶことを目的にMATLAB® および Simulink® を使用しています。さらにオプションとして NVIDIA® JetBot を使用したハードウェア接続およびスタンドアローン実装もコンテンツとして含んでいます。
6 | 
7 |
8 | [English version](README.md)
9 |
10 | ## セットアップ
11 |
12 | ### シミュレーション
13 |
14 | MathWorks 製品(http://www.mathworks.com)
15 |
16 | MATLAB R2024aにて動作確認しています。
17 |
18 | * [MATLAB®](https://www.mathworks.com/products/matlab.html)
19 | * [Simulink®](https://www.mathworks.com/products/simulink.html)
20 | * [Image Processing Toolbox™](https://www.mathworks.com/products/image.html)
21 | * [Computer Vision Toolbox™](https://www.mathworks.com/products/computer-vision.html)
22 | * [Deep Learning Toolbox™](https://www.mathworks.com/products/deep-learning.html)
23 | * [Parallel Computing Toolbox™](https://www.mathworks.com/products/parallel-computing.html)
24 | * [Robotics System Toolbox™](https://www.mathworks.com/products/robotics.html)
25 | * [Simulink 3D Animation™](https://www.mathworks.com/products/3d-animation.html)
26 |
27 | ### ハードウェア実装 (*オプション*)
28 |
29 | 
30 |
31 | ハードウェア接続およびスタンドアローン実装には下記のMathWorks製品とサードパーティの製品が追加で必要となります。
32 |
33 | * [ROS Toolbox](https://www.mathworks.com/products/ros.html)
34 | * [MATLAB Coder™](https://www.mathworks.com/products/matlab-coder.html)
35 | * [Simulink Coder™](https://www.mathworks.com/products/simulink-coder.html)
36 | * [GPU Coder™](https://www.mathworks.com/products/gpu-coder.html)
37 |
38 | サードパーティ製品
39 |
40 | * [NVIDIA® JetBot](https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetbot-ai-robot-kit/) ([FaBoのJetBot](https://www.fabo.store/collections/jetbot/products/jetbot-kit)でテストしています)
41 |
42 | ## はじめかた
43 |
44 | 1. MATLABを起動する
45 | 2. `ai_robotics_workshop.prj`を開く
46 | 3. ライブスクリプトが開くのでメニューに沿って進める
47 |
48 | ## ドキュメント
49 |
50 | 詳細は[PDFドキュメント](doc/AI_Robotics_Workshop_jp.pdf)をご覧ください。
51 |
52 | ## ライセンス
53 |
54 | MATLAB AI Robotics Workshop のライセンスはこのGitHubレポジトリの[license.txt](license.txt) ファイルを参照してください。
55 |
56 | ## コミュニティサポート
57 |
58 | [MATLAB Central](https://www.mathworks.com/matlabcentral)
59 |
60 | Copyright 2021 The MathWorks, Inc.
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Reporting Security Vulnerabilities
2 |
3 | If you believe you have discovered a security vulnerability, please report it to
4 | [security@mathworks.com](mailto:security@mathworks.com). Please see
5 | [MathWorks Vulnerability Disclosure Policy for Security Researchers](https://www.mathworks.com/company/aboutus/policies_statements/vulnerability-disclosure-policy.html)
6 | for additional information.
--------------------------------------------------------------------------------
/ai_robotics_workshop.prj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/doc/8_400mm.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
195 |
--------------------------------------------------------------------------------
/doc/8_400mm_corner1.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/doc/8_400mm_corner1.pdf
--------------------------------------------------------------------------------
/doc/8_400mm_corner2.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/doc/8_400mm_corner2.pdf
--------------------------------------------------------------------------------
/doc/8_400mm_intersection1.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/doc/8_400mm_intersection1.pdf
--------------------------------------------------------------------------------
/doc/8_400mm_intersection2.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/doc/8_400mm_intersection2.pdf
--------------------------------------------------------------------------------
/doc/A0.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/doc/A0.pdf
--------------------------------------------------------------------------------
/doc/A0.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
155 |
--------------------------------------------------------------------------------
/doc/AI_Robotics_Workshop.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/doc/AI_Robotics_Workshop.pdf
--------------------------------------------------------------------------------
/doc/AI_Robotics_Workshop_jp.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/doc/AI_Robotics_Workshop_jp.pdf
--------------------------------------------------------------------------------
/doc/matlab_ai_robotics_workshop.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/doc/matlab_ai_robotics_workshop.gif
--------------------------------------------------------------------------------
/doc/matlab_ai_robotics_workshop_hardware.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/doc/matlab_ai_robotics_workshop_hardware.gif
--------------------------------------------------------------------------------
/license.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2021, The MathWorks, Inc.
2 | All rights reserved.
3 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
4 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
5 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
6 | 3. In all cases, the software is, and all modifications and derivatives of the software shall be, licensed to you solely for use in conjunction with MathWorks products and service offerings.
7 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/DtfkRCJyUKf5i6qlyyjVNUjL7HUd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/DtfkRCJyUKf5i6qlyyjVNUjL7HUp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/LGQWO8CiZT8qgQmEhQpFeiY7NtEd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/LGQWO8CiZT8qgQmEhQpFeiY7NtEp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/QJ25YFfPCjKElaz2k1WKyopEjYQd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/QJ25YFfPCjKElaz2k1WKyopEjYQp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/R_vU7W4BYHICfV-r0qqyiEoCtoEd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/R_vU7W4BYHICfV-r0qqyiEoCtoEp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/THl67pDOstdNfnJ2HeRaZvSehccd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/THl67pDOstdNfnJ2HeRaZvSehccp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/vdHpM0evZyEQPk1AfNrikv1ECCMd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/vdHpM0evZyEQPk1AfNrikv1ECCMp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/3ADbWcYHTN6T3OJ3pPFZn5aPZsId.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/3ADbWcYHTN6T3OJ3pPFZn5aPZsIp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/6FDm-XHZvrTROjrb3qoSX8Znz6od.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/6FDm-XHZvrTROjrb3qoSX8Znz6op.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/8MgIPA-tCXtYqjQP-ZYWj26IV3Ed.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/8MgIPA-tCXtYqjQP-ZYWj26IV3Ep.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/GRs6SCotonf0lmeR0yk_JHZV88kd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/GRs6SCotonf0lmeR0yk_JHZV88kp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/JkCv_ZraKiHQX6DOGOtezRtkZZsd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/JkCv_ZraKiHQX6DOGOtezRtkZZsp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/TR8fVzEyKv2ulpj8bC1oK-0RJx4d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/TR8fVzEyKv2ulpj8bC1oK-0RJx4p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/UbVQ3gaKt7HhGhDqiNmGT2WTfsMd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/UbVQ3gaKt7HhGhDqiNmGT2WTfsMp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/VoutP_wnnR00g03vyggVEIXGj-Yd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/VoutP_wnnR00g03vyggVEIXGj-Yp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Z_rjldIfbGHsAZqOCo6knmvJ2Rkd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Z_rjldIfbGHsAZqOCo6knmvJ2Rkp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/cDA2SJKJ2lxqcGWonPiv5EFTehcd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/cDA2SJKJ2lxqcGWonPiv5EFTehcp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/d45ZD0_E236GQBfpEKKEm2gA4Xgd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/d45ZD0_E236GQBfpEKKEm2gA4Xgp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/eXx9DspwWFg7VfAOtkUMmoenjTgd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/eXx9DspwWFg7VfAOtkUMmoenjTgp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/iQLxrc_OIV619wcSg_6L2R05wk8d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/iQLxrc_OIV619wcSg_6L2R05wk8p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/jzeR9yK5Zs-B9IIbLfGrL1X__YQd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/jzeR9yK5Zs-B9IIbLfGrL1X__YQp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/mRXcBBRMGqmY9NQGscJ-WE_r5Dod.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/mRXcBBRMGqmY9NQGscJ-WE_r5Dop.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/nP8LWij6PjFpGgKSDpKyd2Odx8gd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/nP8LWij6PjFpGgKSDpKyd2Odx8gp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/rJ-5f9zYELt3RosHYt4dYdN3Bzwd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/rJ-5f9zYELt3RosHYt4dYdN3Bzwp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/re93B5-kK-NWW0cLXdUalYgIV8Qd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/re93B5-kK-NWW0cLXdUalYgIV8Qp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Hd6KPvwB3Bjr5Lc7_gIgP7FN6wM/8u2bNyZ3L7hNOCi-h7YBcl52KFId.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/Hd6KPvwB3Bjr5Lc7_gIgP7FN6wM/8u2bNyZ3L7hNOCi-h7YBcl52KFIp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Hd6KPvwB3Bjr5Lc7_gIgP7FN6wM/Hf_DrwUwq0-V15AZNKZpZcnXAa4d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Hd6KPvwB3Bjr5Lc7_gIgP7FN6wM/Hf_DrwUwq0-V15AZNKZpZcnXAa4p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/HoHDHQ_WvHAAKj5aJOrvrg_vpt8/xXlmKuOQ7YT_G1elNhbKQIUqSRMd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/HoHDHQ_WvHAAKj5aJOrvrg_vpt8/xXlmKuOQ7YT_G1elNhbKQIUqSRMp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/-5vWh4yFhxq83jG67Om1j6dilSwd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/-5vWh4yFhxq83jG67Om1j6dilSwp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/-P0FT7TH809XfADGsTMDtw4dWp0d.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/-P0FT7TH809XfADGsTMDtw4dWp0p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/1oVQHFhqM1c1HSKWdUA1__3l1tQd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/1oVQHFhqM1c1HSKWdUA1__3l1tQp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/KtlO4IxLX3G-0BB6aWpRoWjGPXwd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/KtlO4IxLX3G-0BB6aWpRoWjGPXwp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/Yp2XMezOseJTMe2YLo19HCHA-wkd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/Yp2XMezOseJTMe2YLo19HCHA-wkp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/bcud-hmeUQI43XfX9mSBblgPexId.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/bcud-hmeUQI43XfX9mSBblgPexIp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/cUzUiW5vrd5QG1b-WyNk3hRWRnUd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/cUzUiW5vrd5QG1b-WyNk3hRWRnUp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/nhX9BIDSoYTruRGoon6lh67Y9Wkd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/nhX9BIDSoYTruRGoon6lh67Y9Wkp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/o830-k38pBlRxHAHbbfGQ5ECvkwd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/o830-k38pBlRxHAHbbfGQ5ECvkwp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/GeSkPJ8Q59zhZpj2_y5cproalSId.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/GeSkPJ8Q59zhZpj2_y5cproalSIp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/TDnuwAjp4FfvdbaCMI3zCc9k3Mcd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/TDnuwAjp4FfvdbaCMI3zCc9k3Mcp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/ik53_NsG6creDEvmoZ6jiepDHy8d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/ik53_NsG6creDEvmoZ6jiepDHy8p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/2kj09UetkV_lru3gvSPXnY6-nM4d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/2kj09UetkV_lru3gvSPXnY6-nM4p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/KKyDJtbdIBOlaeHmIZd5VX6vqx8d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/KKyDJtbdIBOlaeHmIZd5VX6vqx8p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/QWNDYJD5mGW1bWYvPx9DtKnxzw4d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/QWNDYJD5mGW1bWYvPx9DtKnxzw4p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/R1RggVhA72agIvELiuhWPRS8F0Id.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/R1RggVhA72agIvELiuhWPRS8F0Ip.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/aEHSZBIY-yve10yGis12Zr5DLZod.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/aEHSZBIY-yve10yGis12Zr5DLZop.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/j4xwF_j8iFTVayUMfxLgMnTbencd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/j4xwF_j8iFTVayUMfxLgMnTbencp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/r8LR4nLmg9ai3oHrW1r_-KocQzkd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/NjSPEMsIuLUyIpr2u1Js5bVPsOs/r8LR4nLmg9ai3oHrW1r_-KocQzkp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/POHnXJCjlccoW9VNP4cPqF8uaYo/5xPWrEoyyXYfp-eTjSRl_ttcgnEd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/POHnXJCjlccoW9VNP4cPqF8uaYo/5xPWrEoyyXYfp-eTjSRl_ttcgnEp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/0COldfb-6uGv7YIaGr1_FbFLnzQd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/0COldfb-6uGv7YIaGr1_FbFLnzQp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/82RVMc7UMy8dFHqE9Ut1hlA-79Ad.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/82RVMc7UMy8dFHqE9Ut1hlA-79Ap.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/D86tPVkI1EaiwWUwwGXz-mY7u48d.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/D86tPVkI1EaiwWUwwGXz-mY7u48p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/Hd6KPvwB3Bjr5Lc7_gIgP7FN6wMd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/Hd6KPvwB3Bjr5Lc7_gIgP7FN6wMp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/Jb61Kk_GvvOMXgvyT4GFLqNyUfUd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/Jb61Kk_GvvOMXgvyT4GFLqNyUfUp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/TViFZfTwSc5gXhBPhjNdQZTclNwd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/TViFZfTwSc5gXhBPhjNdQZTclNwp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/aVUIa3BPzof8SPZymw9Cy6wE7pId.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/aVUIa3BPzof8SPZymw9Cy6wE7pIp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/g6DFlDUYrr9kqUFRRUN2VRnyfhkd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/g6DFlDUYrr9kqUFRRUN2VRnyfhkp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/hgCEKV4QVXBgTQnP5nS6W7EYgekd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/hgCEKV4QVXBgTQnP5nS6W7EYgekp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/vH6_y7kgT4t7f1SDCWtzaJXb8W4d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/vH6_y7kgT4t7f1SDCWtzaJXb8W4p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/7RsPx46GKsQxSafVE79zIdkKPewd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/7RsPx46GKsQxSafVE79zIdkKPewp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/8bcB89v9ydMi6daBTKOpwdyuXs0d.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/8bcB89v9ydMi6daBTKOpwdyuXs0p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/Hmc1riq5DZRfekzzbgtmtpsDA0Qd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/Hmc1riq5DZRfekzzbgtmtpsDA0Qp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/c7d0zuY24rXKoB7Q6STfdiWZVhcd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/c7d0zuY24rXKoB7Q6STfdiWZVhcp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/cfvUSycIC4G6PwjJRUnVN0f609Ad.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/cfvUSycIC4G6PwjJRUnVN0f609Ap.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/UlAHOZoMDCgi5j3nN_izvbMg_-U/Zq0I8NnkK9f3x6NnbJdqOyiiFGMd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/UlAHOZoMDCgi5j3nN_izvbMg_-U/Zq0I8NnkK9f3x6NnbJdqOyiiFGMp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/UlAHOZoMDCgi5j3nN_izvbMg_-U/j16TRzdtoaEbS_8i1s72m7-yIMUd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/UlAHOZoMDCgi5j3nN_izvbMg_-U/j16TRzdtoaEbS_8i1s72m7-yIMUp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/UlAHOZoMDCgi5j3nN_izvbMg_-U/pXsgtTibNn73dBt6GMWF8jRg--0d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/UlAHOZoMDCgi5j3nN_izvbMg_-U/pXsgtTibNn73dBt6GMWF8jRg--0p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/VyU-bDuHYQuVw3Vkgk2edQX28g8/NqUIsSM7fY4Jv6C3LqQhKn1tJtAd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/VyU-bDuHYQuVw3Vkgk2edQX28g8/NqUIsSM7fY4Jv6C3LqQhKn1tJtAp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/VyU-bDuHYQuVw3Vkgk2edQX28g8/mbEnUx_lP0aPB7lmOyj-85g7P6Yd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/VyU-bDuHYQuVw3Vkgk2edQX28g8/mbEnUx_lP0aPB7lmOyj-85g7P6Yp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/haUKcDd7PrBH5j2sypBgBtW0rIcd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/haUKcDd7PrBH5j2sypBgBtW0rIcp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YOCmEf6wFg5zlllHOLVBmTDJKnU/Dkt-I1sQ1LRFDHrw169lK69NEA4d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YOCmEf6wFg5zlllHOLVBmTDJKnU/Dkt-I1sQ1LRFDHrw169lK69NEA4p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YOCmEf6wFg5zlllHOLVBmTDJKnU/mg7Ogzzj_Fhs-rTy8sXkYt729lYd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YOCmEf6wFg5zlllHOLVBmTDJKnU/mg7Ogzzj_Fhs-rTy8sXkYt729lYp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YOCmEf6wFg5zlllHOLVBmTDJKnU/ouFbDGxHZ1LzVuLcM1rD6wF2RPMd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YOCmEf6wFg5zlllHOLVBmTDJKnU/ouFbDGxHZ1LzVuLcM1rD6wF2RPMp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YhuPDDuEWIGe0C07ihHYccefon0/bRih8FCE79z1wPsigx8LacNwzJMd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YhuPDDuEWIGe0C07ihHYccefon0/bRih8FCE79z1wPsigx8LacNwzJMp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YhuPDDuEWIGe0C07ihHYccefon0/bevW2ziouPmu8-_szRjwhlNyRDMd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/YhuPDDuEWIGe0C07ihHYccefon0/bevW2ziouPmu8-_szRjwhlNyRDMp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YhuPDDuEWIGe0C07ihHYccefon0/gEOSAOEw0wWPGhq0Jcyj7TCokrkd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YhuPDDuEWIGe0C07ihHYccefon0/gEOSAOEw0wWPGhq0Jcyj7TCokrkp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YhuPDDuEWIGe0C07ihHYccefon0/mXCVGRnnD-Nx2c1j7zCLj-Znmgod.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/YhuPDDuEWIGe0C07ihHYccefon0/mXCVGRnnD-Nx2c1j7zCLj-Znmgop.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/aVUIa3BPzof8SPZymw9Cy6wE7pI/Hbc_AeEGKIaMex1zhIqSRFjz-awd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/aVUIa3BPzof8SPZymw9Cy6wE7pI/Hbc_AeEGKIaMex1zhIqSRFjz-awp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/aVUIa3BPzof8SPZymw9Cy6wE7pI/RFFxmYuaG0Yrvcn4plcCPzQjSP8d.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/aVUIa3BPzof8SPZymw9Cy6wE7pI/RFFxmYuaG0Yrvcn4plcCPzQjSP8p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/aVUIa3BPzof8SPZymw9Cy6wE7pI/TfX_PS6pj43Eiq0gv2uln1oVxvgd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/aVUIa3BPzof8SPZymw9Cy6wE7pI/TfX_PS6pj43Eiq0gv2uln1oVxvgp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/fjRQtWiSIy7hIlj-Kmk87M7s21k/NjSPEMsIuLUyIpr2u1Js5bVPsOsd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/fjRQtWiSIy7hIlj-Kmk87M7s21k/NjSPEMsIuLUyIpr2u1Js5bVPsOsp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/48VbWz1oSmsgEpqtO7sOiP_1cV4d.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/48VbWz1oSmsgEpqtO7sOiP_1cV4p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/92VAKwOj-ZayvTXiBaDoi18kHXcd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/92VAKwOj-ZayvTXiBaDoi18kHXcp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/On3lB2PSMzW0cdywC4fl7_AMJEgd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/On3lB2PSMzW0cdywC4fl7_AMJEgp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/XXrnNg8gB7Osh7_psmQsGisrnlod.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/XXrnNg8gB7Osh7_psmQsGisrnlop.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/YSklTfdtfixZ8KlEfTP-TBej528d.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/YSklTfdtfixZ8KlEfTP-TBej528p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/hgCEKV4QVXBgTQnP5nS6W7EYgek/Br0MuNwanhEGAaItHXNQd1VdQo8d.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/hgCEKV4QVXBgTQnP5nS6W7EYgek/Br0MuNwanhEGAaItHXNQd1VdQo8p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/hgCEKV4QVXBgTQnP5nS6W7EYgek/T3qqflG_jOgbiCoFW-pSrZiWkqId.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/hgCEKV4QVXBgTQnP5nS6W7EYgek/T3qqflG_jOgbiCoFW-pSrZiWkqIp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/hgCEKV4QVXBgTQnP5nS6W7EYgek/cB-mrXTKkIpH8Nnsh_yx1GtFepsd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/hgCEKV4QVXBgTQnP5nS6W7EYgek/cB-mrXTKkIpH8Nnsh_yx1GtFepsp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/hgCEKV4QVXBgTQnP5nS6W7EYgek/e53oq9T9IYunORrgJJfYnT38TXMd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/hgCEKV4QVXBgTQnP5nS6W7EYgek/e53oq9T9IYunORrgJJfYnT38TXMp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/nhX9BIDSoYTruRGoon6lh67Y9Wk/FPo09ZrdpmvifYTldCSyw7-R298d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/nhX9BIDSoYTruRGoon6lh67Y9Wk/FPo09ZrdpmvifYTldCSyw7-R298p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/nhX9BIDSoYTruRGoon6lh67Y9Wk/YOCmEf6wFg5zlllHOLVBmTDJKnUd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/nhX9BIDSoYTruRGoon6lh67Y9Wk/YOCmEf6wFg5zlllHOLVBmTDJKnUp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/pXsgtTibNn73dBt6GMWF8jRg--0/3dJyw3aumtTo7mC689lPZ7oF9oYd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/pXsgtTibNn73dBt6GMWF8jRg--0/3dJyw3aumtTo7mC689lPZ7oF9oYp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/pXsgtTibNn73dBt6GMWF8jRg--0/VXIyW-RV89E7y0cCPdccQKtc0uMd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/pXsgtTibNn73dBt6GMWF8jRg--0/VXIyW-RV89E7y0cCPdccQKtc0uMp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/pXsgtTibNn73dBt6GMWF8jRg--0/kSBhM_zPZwtizRXHuAar7G_lvxod.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/pXsgtTibNn73dBt6GMWF8jRg--0/kSBhM_zPZwtizRXHuAar7G_lvxop.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/pXsgtTibNn73dBt6GMWF8jRg--0/xnYhgNrjqBRI7JWfzOdCAFbRfM4d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/pXsgtTibNn73dBt6GMWF8jRg--0/xnYhgNrjqBRI7JWfzOdCAFbRfM4p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/2uRqUwgzsMPtKV1vY4JvGEQwdJId.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/2uRqUwgzsMPtKV1vY4JvGEQwdJIp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/POHnXJCjlccoW9VNP4cPqF8uaYod.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/POHnXJCjlccoW9VNP4cPqF8uaYop.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/QMJD9OLFzxcTTbPOoh-ahQ4zTRUd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/QMJD9OLFzxcTTbPOoh-ahQ4zTRUp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/R6m7AxFfSX7StHtVJ9WG44h96GMd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/R6m7AxFfSX7StHtVJ9WG44h96GMp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/TMK4UzWHdRLhy_w-CHt9y11Q8XAd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/TMK4UzWHdRLhy_w-CHt9y11Q8XAp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/UlAHOZoMDCgi5j3nN_izvbMg_-Ud.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/UlAHOZoMDCgi5j3nN_izvbMg_-Up.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VyU-bDuHYQuVw3Vkgk2edQX28g8d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/VyU-bDuHYQuVw3Vkgk2edQX28g8p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/YhuPDDuEWIGe0C07ihHYccefon0d.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/YhuPDDuEWIGe0C07ihHYccefon0p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/qD-kr16wmwlzR-nIg1IG_vvRrWkd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/qD-kr16wmwlzR-nIg1IG_vvRrWkp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/rh0jHbNfmojECiiHH7BQHmZTsWkd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/rh0jHbNfmojECiiHH7BQHmZTsWkp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/wOLVUSg8QHmXqB1zcpp9YNG1EMgd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/wOLVUSg8QHmXqB1zcpp9YNG1EMgp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/root/6x1BhZX_fLnKpcwqra0qFwv1jIgp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/root/EEtUlUb-dLAdf0KpMVivaUlztwAp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/root/HoHDHQ_WvHAAKj5aJOrvrg_vpt8p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/root/KAXfQgCar2Yb8zOxgvf9hdmLP1Ep.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/root/NmGqIpAwUJcXFyLjFAGnU9uyN5Yp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/root/WZRuNzqc-Db7NcQAZO8Y-R8U9ccp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/root/fjRQtWiSIy7hIlj-Kmk87M7s21kp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/root/qaw0eS1zuuY1ar9TdPn1GMfrjbQp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/rootp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/uuid-da22b07d-a3a4-4396-b058-ded3b2eed0df.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/wOLVUSg8QHmXqB1zcpp9YNG1EMg/65Umubuml_CVlU5qZnQpZUhDTS4d.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/wOLVUSg8QHmXqB1zcpp9YNG1EMg/65Umubuml_CVlU5qZnQpZUhDTS4p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/wOLVUSg8QHmXqB1zcpp9YNG1EMg/GpIdUX_vbbidQJVBudfm9Ru5JTYd.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/wOLVUSg8QHmXqB1zcpp9YNG1EMg/GpIdUX_vbbidQJVBudfm9Ru5JTYp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/wOLVUSg8QHmXqB1zcpp9YNG1EMg/Q1kYspdhlzJEdxNCtzAqGovAto4d.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/wOLVUSg8QHmXqB1zcpp9YNG1EMg/Q1kYspdhlzJEdxNCtzAqGovAto4p.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/project/wOLVUSg8QHmXqB1zcpp9YNG1EMg/j28d20mDifNUrBFie_vtxtycBCgd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/project/wOLVUSg8QHmXqB1zcpp9YNG1EMg/j28d20mDifNUrBFie_vtxtycBCgp.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/scene/robotTrainWorld.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | DEF course Transform {
4 | children Shape {
5 | appearance Appearance {
6 | texture ImageTexture {
7 | url "texture/course.png"
8 | }
9 | material Material {
10 | }
11 | }
12 | geometry Box {
13 | size 1.4143 1 0.01
14 | }
15 | }
16 | }
17 | DEF robot Transform {
18 | translation 0 0 0.035
19 | rotation 0 0 0 0
20 | bboxCenter 0 0 0.035
21 | children [
22 | Shape {
23 | appearance Appearance {
24 | material Material {
25 | diffuseColor 0.6 1 0.4
26 | }
27 | }
28 | geometry Box {
29 | size 0.14 0.09 0.07
30 | }
31 | }
32 | DEF camera Transform {
33 | translation 0.05 0 0.09
34 | # R = Rz(-pi/2) * Rx(pi/3)
35 | rotation 0.4472 -0.4472 -0.7746 1.8235
36 | children [
37 | Shape {
38 | appearance Appearance {
39 | material Material {
40 | }
41 | }
42 | geometry Box {
43 | size 0.03 0.03 0.01
44 | }
45 | }
46 | DEF robotCamera Viewpoint {
47 | position 0 0 -0.006
48 | }
49 | ]
50 | }
51 | ]
52 | }
53 | DEF course2 Transform {
54 | translation 0 0 10
55 | children Shape {
56 | appearance Appearance {
57 | texture ImageTexture {
58 | url "texture/course_circle.png"
59 | }
60 | material Material {
61 | }
62 | }
63 | geometry Box {
64 | size 1.4143 1 0.01
65 | }
66 | }
67 | }
68 | DEF course3 Transform {
69 | translation 0 0 20
70 | children Shape {
71 | appearance Appearance {
72 | texture ImageTexture {
73 | url "texture/course_curve.png"
74 | }
75 | material Material {
76 | }
77 | }
78 | geometry Box {
79 | size 1.4143 1 0.01
80 | }
81 | }
82 | }
83 | DEF worldCamera Viewpoint {
84 | position 0 0 2
85 | }
--------------------------------------------------------------------------------
/scene/texture/course.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/scene/texture/course.png
--------------------------------------------------------------------------------
/scene/texture/course_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/scene/texture/course_circle.png
--------------------------------------------------------------------------------
/scene/texture/course_curve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/scene/texture/course_curve.png
--------------------------------------------------------------------------------
/setup/jetbot_ros_for_c7d0e61.patch:
--------------------------------------------------------------------------------
1 | diff --git a/CMakeLists.txt b/CMakeLists.txt
2 | index ca5e637..bfb9fd7 100644
3 | --- a/CMakeLists.txt
4 | +++ b/CMakeLists.txt
5 | @@ -12,6 +12,7 @@ find_package(catkin REQUIRED COMPONENTS
6 | rospy
7 | std_msgs
8 | sensor_msgs
9 | + image_transport
10 | )
11 |
12 | ## System dependencies are found with CMake's conventions
13 | diff --git a/launch/jetbot_ros.launch b/launch/jetbot_ros.launch
14 | new file mode 100644
15 | index 0000000..a481176
16 | --- /dev/null
17 | +++ b/launch/jetbot_ros.launch
18 | @@ -0,0 +1,9 @@
19 | +
20 | +
21 | +
22 | +
23 | +
24 | +
25 | +
26 | +
27 | +
28 | diff --git a/package.xml b/package.xml
29 | index f6f3aed..b3394af 100644
30 | --- a/package.xml
31 | +++ b/package.xml
32 | @@ -52,12 +52,14 @@
33 | roscpp
34 | rospy
35 | std_msgs
36 | + image_transport
37 | roscpp
38 | rospy
39 | std_msgs
40 | roscpp
41 | rospy
42 | std_msgs
43 | + image_transport
44 |
45 |
46 |
47 | diff --git a/scripts/jetbot_motors.py b/scripts/jetbot_motors.py
48 | index b2a415f..7436794 100755
49 | --- a/scripts/jetbot_motors.py
50 | +++ b/scripts/jetbot_motors.py
51 | @@ -1,11 +1,31 @@
52 | #!/usr/bin/env python
53 | import rospy
54 | import time
55 | +import re
56 |
57 | from Adafruit_MotorHAT import Adafruit_MotorHAT
58 | from std_msgs.msg import String
59 |
60 | -
61 | +ref_time = 0;
62 | +
63 | +def watchdog(event):
64 | + global ref_time
65 | + if event.current_real - ref_time > rospy.Duration.from_sec(1):
66 | + all_stop()
67 | +
68 | +# avoid error in use of float()
69 | +def is_float(n):
70 | + try:
71 | + float(n)
72 | + except ValueError:
73 | + try:
74 | + int(n)
75 | + except ValueError:
76 | + return 0
77 | + else:
78 | + return int(n)
79 | + else:
80 | + return float(n)
81 |
82 |
83 | # sets motor speed between [-1.0, 1.0]
84 | @@ -37,17 +57,34 @@ def all_stop():
85 | motor_left.run(Adafruit_MotorHAT.RELEASE)
86 | motor_right.run(Adafruit_MotorHAT.RELEASE)
87 |
88 | +def shutdownhook():
89 | + all_stop()
90 |
91 | # directional commands (degree, speed)
92 | def on_cmd_dir(msg):
93 | + global ref_time
94 | + ref_time = rospy.Time.now()
95 | rospy.loginfo(rospy.get_caller_id() + ' cmd_dir=%s', msg.data)
96 |
97 | # raw L/R motor commands (speed, speed)
98 | def on_cmd_raw(msg):
99 | + global ref_time
100 | + ref_time = rospy.Time.now()
101 | rospy.loginfo(rospy.get_caller_id() + ' cmd_raw=%s', msg.data)
102 | + raw_cmd_param = re.split('[,| ]', msg.data) # "speed [-1.0, 1.0]" -> ["speed","-1.0","1.0"]
103 | +
104 | + if raw_cmd_param[0] != "speed[":
105 | + rospy.logerror(rospy.get_caller_id() + ' invalid cmd_str=%s', msg.data)
106 | + else:
107 | + set_speed(motor_left_ID, is_float(raw_cmd_param[1]))
108 | + set_speed(motor_right_ID, is_float(raw_cmd_param[2]))
109 | + # 10/2/2019 tokamoto end
110 | +
111 |
112 | # simple string commands (left/right/forward/backward/stop)
113 | def on_cmd_str(msg):
114 | + global ref_time
115 | + ref_time = rospy.Time.now()
116 | rospy.loginfo(rospy.get_caller_id() + ' cmd_str=%s', msg.data)
117 |
118 | if msg.data.lower() == "left":
119 | @@ -86,9 +123,12 @@ if __name__ == '__main__':
120 | # setup ros node
121 | rospy.init_node('jetbot_motors')
122 |
123 | + ref_time = rospy.Time.now()
124 | rospy.Subscriber('~cmd_dir', String, on_cmd_dir)
125 | rospy.Subscriber('~cmd_raw', String, on_cmd_raw)
126 | rospy.Subscriber('~cmd_str', String, on_cmd_str)
127 | + rospy.Timer(rospy.Duration.from_sec(0.2), watchdog)
128 | + rospy.on_shutdown(shutdownhook)
129 |
130 | # start running
131 | rospy.spin()
132 | diff --git a/src/jetbot_camera.cpp b/src/jetbot_camera.cpp
133 | index 001b525..fc881e3 100644
134 | --- a/src/jetbot_camera.cpp
135 | +++ b/src/jetbot_camera.cpp
136 | @@ -25,125 +25,143 @@
137 | #include
138 | #include
139 |
140 | +#include
141 | +
142 | #include
143 | +#include
144 |
145 | #include "image_converter.h"
146 |
147 | -
148 | -
149 | -// globals
150 | +// globals
151 | gstCamera* camera = NULL;
152 |
153 | imageConverter* camera_cvt = NULL;
154 | ros::Publisher* camera_pub = NULL;
155 |
156 | -
157 | // aquire and publish camera frame
158 | bool aquireFrame()
159 | {
160 | - float4* imgRGBA = NULL;
161 | -
162 | - // get the latest frame
163 | - if( !camera->CaptureRGBA((float**)&imgRGBA, 1000) )
164 | - {
165 | - ROS_ERROR("failed to capture camera frame");
166 | - return false;
167 | - }
168 | -
169 | - // assure correct image size
170 | - if( !camera_cvt->Resize(camera->GetWidth(), camera->GetHeight(), IMAGE_RGBA32F) )
171 | - {
172 | - ROS_ERROR("failed to resize camera image converter");
173 | - return false;
174 | - }
175 | -
176 | - // populate the message
177 | - sensor_msgs::Image msg;
178 | -
179 | - if( !camera_cvt->Convert(msg, imageConverter::ROSOutputFormat, imgRGBA) )
180 | - {
181 | - ROS_ERROR("failed to convert camera frame to sensor_msgs::Image");
182 | - return false;
183 | - }
184 | -
185 | - // publish the message
186 | - camera_pub->publish(msg);
187 | - ROS_INFO("published camera frame");
188 | - return true;
189 | +float4* imgRGBA = NULL;
190 | +
191 | +// get the latest frame
192 | +if( !camera->CaptureRGBA((float**)&imgRGBA, 1000) )
193 | +{
194 | + ROS_ERROR("failed to capture camera frame");
195 | + return false;
196 | +}
197 | +
198 | +// assure correct image size
199 | +if( !camera_cvt->Resize(camera->GetWidth(), camera->GetHeight(), IMAGE_RGBA32F) )
200 | +{
201 | + ROS_ERROR("failed to resize camera image converter");
202 | + return false;
203 | }
204 |
205 | +// populate the message
206 | +sensor_msgs::Image msg;
207 | +
208 | +if( !camera_cvt->Convert(msg, imageConverter::ROSOutputFormat, imgRGBA) )
209 | +{
210 | + ROS_ERROR("failed to convert camera frame to sensor_msgs::Image");
211 | + return false;
212 | +}
213 | +
214 | +// publish the message
215 | +camera_pub->publish(msg);
216 | +ROS_INFO("published camera frame");
217 | +return true;
218 | +}
219 |
220 | // node main loop
221 | int main(int argc, char **argv)
222 | {
223 | - ros::init(argc, argv, "jetbot_camera");
224 | -
225 | - ros::NodeHandle nh;
226 | - ros::NodeHandle private_nh("~");
227 | -
228 | - /*
229 | - * retrieve parameters
230 | - */
231 | - std::string camera_device = "0"; // MIPI CSI camera by default
232 | -
233 | - private_nh.param("device", camera_device, camera_device);
234 | -
235 | - ROS_INFO("opening camera device %s", camera_device.c_str());
236 | -
237 | -
238 | - /*
239 | - * open camera device
240 | - */
241 | - camera = gstCamera::Create(camera_device.c_str());
242 | -
243 | - if( !camera )
244 | - {
245 | - ROS_ERROR("failed to open camera device %s", camera_device.c_str());
246 | - return 0;
247 | - }
248 | -
249 | -
250 | - /*
251 | - * create image converter
252 | - */
253 | - camera_cvt = new imageConverter();
254 | -
255 | - if( !camera_cvt )
256 | - {
257 | - ROS_ERROR("failed to create imageConverter");
258 | - return 0;
259 | - }
260 | -
261 | -
262 | - /*
263 | - * advertise publisher topics
264 | - */
265 | - ros::Publisher camera_publisher = private_nh.advertise("raw", 2);
266 | - camera_pub = &camera_publisher;
267 | -
268 | -
269 | - /*
270 | - * start the camera streaming
271 | - */
272 | - if( !camera->Open() )
273 | - {
274 | - ROS_ERROR("failed to start camera streaming");
275 | - return 0;
276 | - }
277 | -
278 | -
279 | - /*
280 | - * start publishing video frames
281 | - */
282 | - while( ros::ok() )
283 | - {
284 | - //if( raw_pub->getNumSubscribers() > 0 )
285 | - aquireFrame();
286 | -
287 | - ros::spinOnce();
288 | - }
289 | -
290 | - delete camera;
291 | +ros::init(argc, argv, "jetbot_camera");
292 | +
293 | +ros::NodeHandle nh;
294 | +ros::NodeHandle private_nh("~");
295 | +
296 | +/*
297 | + * retrieve parameters
298 | + */
299 | +std::string camera_device = "0"; // MIPI CSI camera by default
300 | +// width and height should be of uint32_t, but XML supports signed integers only
301 | +int width = 320, height = 180;
302 | +//int width = 1280, height = 720;
303 | +float framerate = 30.0;
304 | +
305 | +private_nh.param("device", camera_device, camera_device);
306 | +private_nh.param("width", width, width);
307 | +private_nh.param("height", height, height);
308 | +private_nh.param("framerate", framerate, framerate);
309 | +
310 | +ROS_INFO("opening camera device %s @ %dx%d %ffps", camera_device.c_str(), width, height, framerate);
311 | +
312 | +//ROS_INFO("opening camera device %s", camera_device.c_str());
313 | +
314 | +
315 | +/*
316 | + * open camera device
317 | + */
318 | +
319 | +videoOptions opt;
320 | +opt.resource = camera_device;
321 | +opt.width = width;
322 | +opt.height = height;
323 | +opt.frameRate = framerate;
324 | +opt.ioType = videoOptions::INPUT;
325 | +opt.flipMethod = videoOptions::FLIP_ROTATE_180;
326 | +
327 | +camera = gstCamera::Create(opt);
328 | +//camera = gstCamera::Create(camera_device.c_str());
329 | +
330 | +if( !camera )
331 | +{
332 | + ROS_ERROR("failed to open camera device %s", camera_device.c_str());
333 | + return 0;
334 | +}
335 | +
336 | +
337 | +/*
338 | + * create image converter
339 | + */
340 | +camera_cvt = new imageConverter();
341 | +
342 | +if( !camera_cvt )
343 | +{
344 | + ROS_ERROR("failed to create imageConverter");
345 | + return 0;
346 | +}
347 | +
348 | +
349 | +/*
350 | + * advertise publisher topics
351 | + */
352 | +image_transport::ImageTransport it(private_nh);
353 | +ros::Publisher camera_publisher = private_nh.advertise("raw", 2);
354 | +camera_pub = &camera_publisher;
355 | +
356 | +
357 | +/*
358 | + * start the camera streaming
359 | + */
360 | +if( !camera->Open() )
361 | +{
362 | + ROS_ERROR("failed to start camera streaming");
363 | return 0;
364 | }
365 |
366 | +
367 | +/*
368 | + * start publishing video frames
369 | + */
370 | +while( ros::ok() )
371 | +{
372 | + //if( raw_pub->getNumSubscribers() > 0 )
373 | + aquireFrame();
374 | +
375 | + ros::spinOnce();
376 | +}
377 | +
378 | +delete camera;
379 | +return 0;
380 | +}
381 |
--------------------------------------------------------------------------------
/shortcuts/launchJetBotROSNode.m:
--------------------------------------------------------------------------------
1 | function launchJetBotROSNode
2 |
3 | if exist('jetsonIpAddr.mat','file')
4 | d = load('jetsonIpAddr.mat');
5 | jetsonIpAddr = d.jetsonIpAddr;
6 | else
7 | jetsonIpAddr = '192.168.1.245';
8 | end
9 | prompt = {'JetBot IP address:'};
10 | dlgtitle = 'Input';
11 | dims = [1 35];
12 | definput = {jetsonIpAddr};
13 | answer = inputdlg(prompt,dlgtitle,dims,definput);
14 |
15 | if isempty(answer)
16 | return;
17 | end
18 |
19 | jetsonIpAddr = answer{1};
20 |
21 | d = rosdevice(jetsonIpAddr,'jetbot','jetbot');
22 |
23 |
24 | cmd = 'pkill roslaunch';
25 | try
26 | ret = system(d,cmd);
27 | pause(5);
28 | catch
29 | %warning('プロセスが見つかりません');
30 | end
31 |
32 | rosMasterURI = ['http://',jetsonIpAddr,':11311'];
33 | rosIP = jetsonIpAddr;
34 | catkinWs = '~/workspace/catkin_ws'; % launchファイルが含まれるワークスペース
35 | nodeName = 'jetbot_ros';
36 | logFile = [catkinWs '/' nodeName '.log'];
37 |
38 | % 実行したいroslaunchファイル
39 | cmdArgs = 'roslaunch jetbot_ros jetbot_ros.launch';
40 |
41 | % コマンド列(他に必要な環境変数などあれば追加する)
42 | cmd = ['export DISPLAY=:0.0; ' ...
43 | 'export XAUTHORITY=~/.Xauthority; ' ...
44 | 'export ROS_MASTER_URI=' rosMasterURI '; ' ... % Export ROS master URI
45 | 'export ROS_IP=' rosIP '; ' ... % Export ROS NodeHost
46 | 'export SVGA_VGPU10=0; ' ... % VMware時のみ必要
47 | 'source ' catkinWs '/devel/setup.bash; ' ... % Source the Catkin workspace
48 | ' ' cmdArgs ' ' ... % Run node executable
49 | '&> ' logFile ' &'... % Pipe all output into a log file
50 | ];
51 |
52 | % システムコマンドの実行
53 | system(d,cmd);
54 | rosshutdown;
55 | setenv('ROS_MASTER_URI',['http://',jetsonIpAddr,':11311']);
56 | pause(5);
57 |
58 | rosinit;
59 | pause(2);
60 |
61 | nodes = rosnode('list');
62 | flag = any(strcmp(nodes,'/jetbot_camera')) & any(strcmp(nodes,'/jetbot_motors'));
63 | if flag
64 | msgbox(['ROS node is running on ',jetsonIpAddr,' successfully!']);
65 | else
66 | error(['ROS node is not starting on ',jetsonIpAddr]);
67 | end
68 |
69 | save('jetsonIpAddr','jetsonIpAddr');
70 | end
--------------------------------------------------------------------------------
/shortcuts/openStartupScript.m:
--------------------------------------------------------------------------------
1 | if strcmp(get(0, 'Language'),'ja_JP')
2 | edit workshopMenu_jp.mlx
3 | else
4 | edit workshopMenu.mlx
5 | end
--------------------------------------------------------------------------------
/shortcuts/stopJetBotROSNode.m:
--------------------------------------------------------------------------------
1 | function stopJetBotROSNode
2 | if exist('jetsonIpAddr.mat','file')
3 | d = load('jetsonIpAddr.mat');
4 | jetsonIpAddr = d.jetsonIpAddr;
5 | else
6 | errordlg('launchJetBotROSNodeが一度も実行されていません。');
7 | end
8 |
9 | d = rosdevice(jetsonIpAddr,'jetbot','jetbot');
10 | cmd = 'pkill roslaunch';
11 | try
12 | ret = system(d,cmd);
13 | catch
14 | errordlg('ROSノードのプロセスが見つかりません');
15 | end
16 | end
--------------------------------------------------------------------------------
/src/001_dataset_generation/dataset_generator.slx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/001_dataset_generation/dataset_generator.slx
--------------------------------------------------------------------------------
/src/001_dataset_generation/genCourseTraj.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/001_dataset_generation/genCourseTraj.mlx
--------------------------------------------------------------------------------
/src/001_dataset_generation/genCourseTraj_jp.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/001_dataset_generation/genCourseTraj_jp.mlx
--------------------------------------------------------------------------------
/src/002_detector_training/annotateVideo.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/002_detector_training/annotateVideo.mlx
--------------------------------------------------------------------------------
/src/002_detector_training/annotateVideo_jp.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/002_detector_training/annotateVideo_jp.mlx
--------------------------------------------------------------------------------
/src/002_detector_training/mynet.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/002_detector_training/mynet.mat
--------------------------------------------------------------------------------
/src/002_detector_training/trainWhiteLine.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/002_detector_training/trainWhiteLine.mlx
--------------------------------------------------------------------------------
/src/002_detector_training/trainWhiteLine_jp.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/002_detector_training/trainWhiteLine_jp.mlx
--------------------------------------------------------------------------------
/src/003_system_integration/line_follower.slx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/003_system_integration/line_follower.slx
--------------------------------------------------------------------------------
/src/004_hardware_connection/jetBotKeyboardControl.m:
--------------------------------------------------------------------------------
1 | function jetBotKeyboardControl
2 | %exampleHelperTurtleBotKeyboardControl - Allows for user control of JetBot through keyboard commands
3 | % exampleHelperJetBotKeyboardControl(HANDLES) takes a set of subscriber
4 | % and publisher handles as input and publishes velocity commands according
5 | % to user keyboard input. The JetBot location is plotted.
6 | %
7 | % See also JetBotTeleoperationExample
8 |
9 | % Copyright 2020 The MathWorks, Inc.
10 |
11 | camSub = rossubscriber('/image_raw','DataFormat','struct');
12 | velPub = rospublisher("/jetbot_motors/cmd_raw","std_msgs/String");
13 |
14 | hFig = uifigure('Name','JetBot ROS Teleop',...
15 | 'KeyPressFcn',@keyPressFcn,'KeyReleaseFcn',@keyReleaseFcn);
16 | uilabel(hFig,'Position',[50,80,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','i = Forward');
17 | uilabel(hFig,'Position',[50,40,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','k = Backward');
18 | uilabel(hFig,'Position',[25,60,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','j = Left');
19 | uilabel(hFig,'Position',[100,60,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','l = Right');
20 | uilabel(hFig,'Position',[50,20,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','q = Quit');
21 | uilabel(hFig,'Position',[50,60,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','s = Save image');
22 | uilabel(hFig,'Position',[50,0,500,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','Keep this figure in scope to give commands');
23 |
24 | pressedKeys = {};
25 | d = 0.05125*2;
26 | r = 0.03;
27 |
28 | disp('Keyboard Control: ');
29 | disp('i=forward, k=backward, j=left, l=right');
30 | disp('q=quit');
31 | disp('Waiting for input: ');
32 |
33 | % Video player
34 | videoPlayer = vision.DeployableVideoPlayer;
35 |
36 | % Get current date and time
37 | dateprefix = datestr(now,'YYYY_mm_DD_HHMMss');
38 |
39 | % Create a video file
40 | videFileNmae = fullfile(['trainVideo_',dateprefix,'.avi']);
41 | writer = vision.VideoFileWriter(videFileNmae,...
42 | 'FileFormat','AVI','FrameRate',5);
43 |
44 | rate = rateControl(10);
45 | while ~any(strcmp(pressedKeys,'q')) && ishandle(hFig)
46 | turnV = 0;
47 | forwardV = 0;
48 |
49 | for k = 1:numel(pressedKeys)
50 | reply = pressedKeys{k};
51 | switch reply
52 | case 'i' % i
53 | forwardV = 0.3;
54 | case 'k' % k
55 | forwardV = -0.3;
56 | case 'j' % j
57 | turnV = pi*1.5;
58 | case 'l' % l
59 | turnV = -pi*1.5;
60 | case 's'
61 | writer(I);
62 | otherwise
63 | turnV = 0;
64 | forwardV = 0;
65 | end
66 | end
67 |
68 | if numel(pressedKeys) == 0
69 | turnV = 0;
70 | forwardV = 0;
71 | end
72 |
73 | % Publish velocities to the robot
74 | exampleHelperJetBotSetVelocity(velPub, forwardV, turnV);
75 |
76 | % Subscribe image
77 | imMsg = receive(camSub);
78 | I = rosReadImage(imMsg);
79 | %I = imrotate(I,180);
80 |
81 | %pos = predict(handles.trainedNet,I);
82 | %pos = (pos + 1) .* (320/2);
83 | %Iout = insertShape(I, 'FilledCircle', [pos 5],'Color','Green');
84 | Iout = I;
85 | videoPlayer(Iout);
86 |
87 | waitfor(rate);
88 | end
89 | release(writer);
90 | if ishandle(hFig)
91 | close(hFig);
92 | end
93 |
94 | function keyPressFcn(~, event)
95 | pressedKeys = unique([pressedKeys, {event.Key}]);
96 | end
97 |
98 | function keyReleaseFcn(~, event)
99 | pressedKeys(strcmp(pressedKeys,event.Key)) = [];
100 | end
101 |
102 |
103 | function exampleHelperJetBotSetVelocity(velPub, vLin, vAng)
104 | %exampleHelperJetBotSetVelocity Sets linear and angular velocity of JetBot
105 |
106 | persistent strMsg
107 |
108 | if isempty(strMsg)
109 | strMsg = rosmessage(velPub);
110 | end
111 |
112 | vl = vLin - d*vAng/2;
113 | vr = vLin + d*vAng/2;
114 | [wlCmd, wrCmd] = vel2cmd(vl,vr);
115 |
116 | % Change rotation direction forward/reverse
117 | % wlCmd = -wlCmd;
118 | % wrCmd = -wrCmd;
119 |
120 | % Swap wheels side to side
121 | % tmp = wlCmd;
122 | % wlCmd = wrCmd;
123 | % wrCmd = tmp;
124 |
125 | strMsg.Data = "speed[ " + wlCmd + "," + wrCmd +" ]";
126 | send(velPub,strMsg);
127 |
128 | function [wlCmd, wrCmd] = vel2cmd(vl,vr)
129 | wl = vl / r;
130 | wr = vr / r;
131 | wlCmd = funcl(wl);
132 | wrCmd = funcr(wr);
133 | end
134 |
135 | function wCmd = funcl(w)
136 | wCmd = min(max(w*0.1,-1),1);
137 | end
138 | function wCmd = funcr(w)
139 | %wCmd = min(max(w*0.096,-1),1);
140 | wCmd = min(max(w*0.1,-1),1);
141 | end
142 | end
143 |
144 | end
145 |
146 |
--------------------------------------------------------------------------------
/src/004_hardware_connection/ros_teleop.slx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/004_hardware_connection/ros_teleop.slx
--------------------------------------------------------------------------------
/src/004_hardware_connection/teleopTestJetBot.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/004_hardware_connection/teleopTestJetBot.mlx
--------------------------------------------------------------------------------
/src/004_hardware_connection/teleopTestJetBot_jp.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/004_hardware_connection/teleopTestJetBot_jp.mlx
--------------------------------------------------------------------------------
/src/005_detector_retraining/trainWhiteLineWithHardware.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/005_detector_retraining/trainWhiteLineWithHardware.mlx
--------------------------------------------------------------------------------
/src/005_detector_retraining/trainWhiteLineWithHardware_jp.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/005_detector_retraining/trainWhiteLineWithHardware_jp.mlx
--------------------------------------------------------------------------------
/src/006_hardware_testing/ros_line_follower_all.slx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/006_hardware_testing/ros_line_follower_all.slx
--------------------------------------------------------------------------------
/src/006_hardware_testing/ros_line_follower_all_ml.m:
--------------------------------------------------------------------------------
1 | function ros_line_follower_all_ml
2 | % Copyright 2021 The MathWorks, Inc.
3 | % Copyright 2020 The MathWorks, Inc.
4 |
5 | % Load deep learning network
6 | d = load('mynet_new');
7 | trainedNet = d.trainedNet;
8 |
9 | % Create a subscriber and a publisher
10 | camSub = rossubscriber('/image_raw','DataFormat','struct');
11 | velPub = rospublisher("/jetbot_motors/cmd_raw","std_msgs/String");
12 |
13 | % Create a GUI
14 | hFig = uifigure('Name','JetBot ROS Teleop',...
15 | 'KeyPressFcn',@keyPressFcn,'KeyReleaseFcn',@keyReleaseFcn);
16 | uilabel(hFig,'Position',[50,80,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','i = Forward');
17 | uilabel(hFig,'Position',[50,40,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','k = Backward');
18 | uilabel(hFig,'Position',[25,60,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','j = Left');
19 | uilabel(hFig,'Position',[100,60,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','l = Right');
20 | uilabel(hFig,'Position',[50,20,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','q = Quit');
21 | uilabel(hFig,'Position',[50,60,50,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','s = Save image');
22 | uilabel(hFig,'Position',[50,0,500,50]*2 + [hFig.Position(3:4)/4 0 0],'Text','Keep this figure in scope to give commands');
23 | % ax = uiaxes(hFig);
24 | % imshow(zeros(180,360,3,'uint8'),'Parent',ax);
25 | s = uiswitch(hFig);
26 | s.Position(1:2) = hFig.Position(3:4) - 100;
27 | s.Items = {'Manual','Auto'};
28 |
29 | pressedKeys = {};
30 | d = 0.05125*2;
31 | r = 0.03;
32 | dgain = 5;
33 |
34 | disp('Keyboard Control: ');
35 | disp('i=forward, k=backward, j=left, l=right');
36 | disp('q=quit');
37 | disp('Waiting for input: ');
38 |
39 | % Video player
40 | videoPlayer = vision.DeployableVideoPlayer;
41 |
42 | % Get current date and time
43 | dateprefix = datestr(now,'YYYY_mm_DD_HHMMss');
44 |
45 | % Create a video file
46 | videFileNmae = fullfile(['trainVideo_',dateprefix,'.avi']);
47 | writer = vision.VideoFileWriter(videFileNmae,...
48 | 'FileFormat','AVI','FrameRate',5);
49 |
50 | %rate = rateControl(5);
51 | while ~any(strcmp(pressedKeys,'q')) && ishandle(hFig)
52 | turnV = 0;
53 | forwardV = 0;
54 |
55 | if ~isempty(pressedKeys)
56 | reply = pressedKeys{end};
57 | switch reply
58 | case 'i' % i
59 | forwardV = 0.3;
60 | case 'k' % k
61 | forwardV = -0.3;
62 | case 'j' % j
63 | turnV = pi*1.5;
64 | case 'l' % l
65 | turnV = -pi*1.5;
66 | case 's'
67 | writer(I);
68 | otherwise
69 | turnV = 0;
70 | forwardV = 0;
71 | end
72 | end
73 |
74 | if numel(pressedKeys) == 0
75 | turnV = 0;
76 | forwardV = 0;
77 | end
78 |
79 | % Subscribe image
80 | imMsg = camSub.LatestMessage;
81 | if ~isempty(imMsg)
82 | I = rosReadImage(imMsg);
83 | %I = imrotate(I,180);
84 |
85 | pos = predict(trainedNet,I);
86 |
87 | if strcmp(s.Value,'Auto')
88 | forwardV = 0.3;
89 | % Calculate an angle error in the vehicle frame.
90 | thetaRef = atan2(-pos(1),1-pos(2));
91 | turnV = thetaRef * dgain;
92 | end
93 |
94 | % Visualizer
95 | pos = pos .* (320/2) + 320/2;
96 | Iout = insertShape(I, 'Line', [pos 320/2, 180],'Color','red',...
97 | 'LineWidth',3);
98 | videoPlayer(Iout);
99 | end
100 |
101 | % Publish velocities to the robot
102 | exampleHelperJetBotSetVelocity(velPub, forwardV, turnV);
103 |
104 | drawnow;
105 | end
106 | release(writer);
107 | exampleHelperJetBotSetVelocity(velPub, 0, 0);
108 | clear camSub;
109 | clear velPub;
110 | if ishandle(hFig)
111 | close(hFig);
112 | end
113 |
114 | function keyPressFcn(~, event)
115 | pressedKeys = unique([pressedKeys, {event.Key}]);
116 | end
117 |
118 | function keyReleaseFcn(~, event)
119 | pressedKeys(strcmp(pressedKeys,event.Key)) = [];
120 | end
121 |
122 |
123 | function exampleHelperJetBotSetVelocity(velPub, vLin, vAng)
124 | %exampleHelperJetBotSetVelocity Sets linear and angular velocity of JetBot
125 |
126 | persistent strMsg
127 |
128 | if isempty(strMsg)
129 | strMsg = rosmessage(velPub);
130 | end
131 |
132 | vl = vLin - d*vAng/2;
133 | vr = vLin + d*vAng/2;
134 | [wlCmd, wrCmd] = vel2cmd(vl,vr);
135 |
136 | % Change rotation direction forward/reverse
137 | % wlCmd = -wlCmd;
138 | % wrCmd = -wrCmd;
139 |
140 | % Swap wheels side to side
141 | % tmp = wlCmd;
142 | % wlCmd = wrCmd;
143 | % wrCmd = tmp;
144 |
145 | strMsg.Data = "speed[ " + wlCmd + "," + wrCmd +" ]";
146 | send(velPub,strMsg);
147 |
148 | function [wlCmd, wrCmd] = vel2cmd(vl,vr)
149 | wl = vl / r;
150 | wr = vr / r;
151 | wlCmd = funcl(wl);
152 | wrCmd = funcr(wr);
153 | end
154 |
155 | function wCmd = funcl(w)
156 | wCmd = min(max(w*0.1,-1),1);
157 | end
158 | function wCmd = funcr(w)
159 | %wCmd = min(max(w*0.096,-1),1);
160 | wCmd = min(max(w*0.1,-1),1);
161 | end
162 | end
163 |
164 | end
165 |
--------------------------------------------------------------------------------
/src/006_hardware_testing/testLineFollowerWithROS.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/006_hardware_testing/testLineFollowerWithROS.mlx
--------------------------------------------------------------------------------
/src/006_hardware_testing/testLineFollowerWithROS_jp.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/006_hardware_testing/testLineFollowerWithROS_jp.mlx
--------------------------------------------------------------------------------
/src/007_hardware_deployment/deployLineFollower.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/007_hardware_deployment/deployLineFollower.mlx
--------------------------------------------------------------------------------
/src/007_hardware_deployment/deployLineFollower_jp.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/007_hardware_deployment/deployLineFollower_jp.mlx
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detection.m:
--------------------------------------------------------------------------------
1 | function [predictedPosNorm,Iout] = line_detection(I)
2 | %#codegen
3 | % Copyright 2020 The MathWorks, Inc.
4 |
5 | persistent lineDetObj;
6 | NetworkInputSize = [180 320 3];
7 |
8 | if isempty(lineDetObj)
9 | lineDetObj = coder.loadDeepLearningNetwork('mynet_new.mat');
10 | end
11 |
12 | % Convert image data format OpenCV BGR to MATLAB compatible RGB image format
13 | img = ocv2mat(I);
14 |
15 | %img = imrotate(img,180);
16 |
17 | sz = size(img);
18 | sizeWH = sz([2 1]);
19 |
20 | % Resize
21 | in = imresize(img,NetworkInputSize(1:2));
22 |
23 | % pass in input
24 | predictedPosNorm = predict(lineDetObj,in);
25 | predictedPos = (predictedPosNorm + 1) / 2 .* sizeWH(1);
26 |
27 | % Visualize
28 | out = insertShape(img,"Line",[sizeWH(1)/2 sizeWH(2) predictedPos],'Color',[255 0 0],'LineWidth',5);
29 | out = insertShape(out,"FilledCircle",[predictedPos 5],'Color',[255 0 0],'Opacity',1);
30 |
31 | % Convert image data format to OpenCV compatible image format
32 | Iout = mat2ocv(out);
33 |
34 | end
35 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
2 | project(line_detector LANGUAGES CUDA CXX)
3 |
4 | # Path to weithgs for deep neural networks
5 | add_definitions(-DMW_DL_DATA_PATH=${PROJECT_SOURCE_DIR}/src/codegen)
6 |
7 | find_package(catkin REQUIRED COMPONENTS
8 | roscpp
9 | std_msgs
10 | sensor_msgs
11 | cv_bridge
12 | pluginlib
13 | nodelet
14 | )
15 | find_package(CUDA REQUIRED)
16 | find_package(OpenCV REQUIRED)
17 |
18 | catkin_package(
19 | CATKIN_DEPENDS roscpp std_msgs sensor_msgs cv_bridge nodelet
20 | LIBRARIES {$PROJECT_NAME}
21 | )
22 |
23 |
24 | file(GLOB_RECURSE cpp_srcs src/codegen/*.cpp)
25 | file(GLOB_RECURSE cuda_srcs src/codegen/*.cu)
26 |
27 | set(CMAKE_CUDA_FLAGS "-arch sm_35 -rdc=true -Xcudafe \"--diag_suppress=unsigned_compare_with_zero\" -Xcompiler -MMD,-MP -O2")
28 | #target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11)
29 |
30 | # Include directories for building
31 | include_directories(
32 | ${catkin_INCLUDE_DIRS}
33 | ${CUDA_INCLUDE_DIRS}
34 | ${CUDNN_INCLUDE_DIR}
35 | ${OpenCV_INCLUDE_DIRS}
36 | src/codegen/
37 | )
38 |
39 | # enable c++11 (TensorRT requirement)
40 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
41 |
42 | # Link directories for linking
43 | link_directories(
44 | ${CUDA_LIBRARY_DIRS}
45 | ${CUDNN_PATH} ${CUDNN_PATH}/lib ${CUDNN_PATH}/lib64
46 | )
47 |
48 | add_library(${PROJECT_NAME} SHARED src/nodelet/line_detector_nodelet.cpp ${cpp_srcs} ${cuda_srcs})
49 | set_target_properties(${PROJECT_NAME}
50 | PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
51 | target_link_libraries(line_detector ${CUDA_LIBRARIES} ${catkin_LIBRARIES} ${OpenCV_LIBRARIES} cudnn cublas)
52 |
53 | add_executable(line_detector_exe src/node/line_detector.cpp)
54 | target_link_libraries(line_detector_exe PUBLIC ${PROJECT_NAME} ${CUDA_LIBRARIES} ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
55 | set_target_properties(line_detector_exe PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
56 | set_target_properties(line_detector_exe PROPERTIES OUTPUT_NAME line_detector)
57 |
58 | install(TARGETS line_detector
59 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
60 | )
61 | install(TARGETS line_detector_exe
62 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
63 | )
64 | install(FILES nodelet_plugins.xml
65 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
66 | )
67 | install(DIRECTORY launch
68 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
69 | )
70 |
71 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/launch/line_detector.launch:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/launch/line_detector_nodelet.launch:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/launch/line_detector_nodelet_cam.launch:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
9 |
10 |
11 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/launch/line_detector_nodelet_camcsi.launch:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/launch/line_detector_nodelet_camcsi_motor.launch:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/launch/line_following.launch:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/nodelet_plugins.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Nodelet to detect line in sensor_msgs/Image
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | line_detector
4 | 1.0.0
5 | Package for Deployment of Generated CUDA Line Detector
6 |
7 |
8 | Tohru Kikawada
9 |
10 |
11 | BSD
12 |
13 |
14 | catkin
15 |
16 | roscpp
17 | std_msgs
18 | cv_bridge
19 | opencv2
20 | sensor_msgs
21 | pluginlib
22 | nodelet
23 |
24 | roscpp
25 | std_msgs
26 | sensor_msgs
27 | cv_bridge
28 | opencv2
29 | pluginlib
30 | nodelet
31 |
32 | roscpp
33 | std_msgs
34 | sensor_msgs
35 | cv_bridge
36 | opencv2
37 | pluginlib
38 | nodelet
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/src/codegen/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/007_hardware_deployment/line_detector/src/codegen/.gitkeep
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/src/node/line_detector.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | int main(int argc, char **argv)
5 | {
6 | //ROS_INFO("Node Starting");
7 |
8 | ros::init(argc, argv, "gpunet");
9 |
10 | nodelet::Loader manager(false);
11 | nodelet::M_string remappings;
12 | nodelet::V_string my_argv(argv + 1, argv + argc);
13 | my_argv.push_back("--shutdown-on-close"); // Internal
14 | manager.load(ros::this_node::getName(),"line_detector/line_detector",remappings,my_argv);
15 |
16 | ros::spin();
17 | return 0;
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/line_detector/src/nodelet/line_detector_nodelet.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 |
11 | namespace line_detector {
12 |
13 | class LineDetectorNodelet : public nodelet::Nodelet
14 | {
15 | private:
16 | ros::NodeHandle nh_;
17 | ros::Subscriber img_sub;
18 | ros::Publisher data_pub;
19 | ros::Publisher img_pub;
20 |
21 | // Declare the output data (defined in codegen/lib/line_detect/examples/main.cu)
22 | unsigned char Iout_data[2764800];
23 | float predictedPosNorm[2];
24 | int I_size[3];
25 | int Iout_size[3];
26 |
27 | public:
28 | virtual void onInit()
29 | {
30 | NODELET_INFO("Loading network model...");
31 |
32 | // Initialization
33 | cv::Mat in_image = cv::Mat::zeros(cv::Size(320,180), CV_8UC3);
34 | I_size[0] = 3;
35 | I_size[1] = 320;
36 | I_size[2] = 180;
37 |
38 | // Call the entry-point to preload the network
39 | line_detection(in_image.data, I_size, predictedPosNorm, Iout_data, Iout_size);
40 |
41 | NODELET_INFO("Node starting...");
42 | nh_ = getNodeHandle();
43 | std::string data_topic_name = "detection_pos";
44 | std::string img_topic_name = "detection_image";
45 | img_sub = nh_.subscribe("/image_raw", 1, &LineDetectorNodelet::msgCallback, this);
46 | data_pub = nh_.advertise(data_topic_name, 1);
47 | img_pub = nh_.advertise(img_topic_name, 1);
48 | NODELET_INFO("Node started successfully");
49 | }
50 |
51 | //Callback for new image message data
52 | void msgCallback(const sensor_msgs::Image::ConstPtr& inmsg)
53 | {
54 | //Declare the input data
55 | cv::Mat in_image = cv_bridge::toCvShare(inmsg, sensor_msgs::image_encodings::BGR8)->image;
56 | int width = in_image.cols;
57 | int height = in_image.rows;
58 | I_size[0] = 3;
59 | I_size[1] = width;
60 | I_size[2] = height;
61 |
62 | // Call the entry-point 'line_detection'.
63 | line_detection(in_image.data, I_size, predictedPosNorm, Iout_data, Iout_size);
64 |
65 | NODELET_INFO("Predicted point:(%3.2f,%3.2f)",predictedPosNorm[0],predictedPosNorm[1]);
66 |
67 | // Declare output message and substitute
68 | std_msgs::Float32MultiArray dataoutmsg;
69 | dataoutmsg.layout.dim.push_back(std_msgs::MultiArrayDimension());
70 | dataoutmsg.layout.dim[0].size = 1;
71 | dataoutmsg.layout.dim[0].stride = 2;
72 | dataoutmsg.layout.dim[0].label = "Predicted point in line";
73 | dataoutmsg.data.clear();
74 | dataoutmsg.data.push_back(predictedPosNorm[0]);
75 | dataoutmsg.data.push_back(predictedPosNorm[1]);
76 |
77 | //Publish the detected data
78 | data_pub.publish(dataoutmsg);
79 |
80 | //Publish the annonated image
81 | cv::Mat imgout(Iout_size[2], Iout_size[1], CV_8UC3, Iout_data);
82 | sensor_msgs::Image::Ptr imgoutmsg = cv_bridge::CvImage(inmsg->header, sensor_msgs::image_encodings::BGR8, imgout).toImageMsg();
83 | img_pub.publish(imgoutmsg);
84 |
85 | }
86 | };
87 |
88 |
89 | }
90 | PLUGINLIB_EXPORT_CLASS(line_detector::LineDetectorNodelet, nodelet::Nodelet);
91 |
--------------------------------------------------------------------------------
/src/007_hardware_deployment/mat2ocv.m:
--------------------------------------------------------------------------------
1 | function out = mat2ocv(img)
2 | % Convert image data format to OpenCV compatible image format
3 | % Copyright 2020 The MathWorks, Inc.
4 | out = permute(img(:,:,[3 2 1]),[3 2 1]);
5 | end
--------------------------------------------------------------------------------
/src/007_hardware_deployment/ocv2mat.m:
--------------------------------------------------------------------------------
1 | function out = ocv2mat(img)
2 | % Convert image data format OpenCV BGR to MATLAB compatible RGB image format
3 | % Copyright 2020 The MathWorks, Inc.
4 | out = permute(img,[3 2 1]);
5 | out = out(:,:,[3 2 1]);
6 | end
--------------------------------------------------------------------------------
/src/007_hardware_deployment/ros_line_follower.slx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/007_hardware_deployment/ros_line_follower.slx
--------------------------------------------------------------------------------
/src/007_hardware_deployment/ros_monitor.slx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/007_hardware_deployment/ros_monitor.slx
--------------------------------------------------------------------------------
/src/workshopMenu.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/workshopMenu.mlx
--------------------------------------------------------------------------------
/src/workshopMenu_jp.mlx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/src/workshopMenu_jp.mlx
--------------------------------------------------------------------------------
/work/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mathworks-robotics/ai-robotics-workshop/f24a5cc6b724d1309513ae4f5c8c48bb56e3df72/work/.gitkeep
--------------------------------------------------------------------------------