├── .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 | [![View MATLAB AI Robotics Workshop on File Exchange](https://www.mathworks.com/matlabcentral/images/matlab-file-exchange.svg)](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 | ![MATLAB AI robotics workshop demo video](doc/matlab_ai_robotics_workshop.gif) 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 | ![NVIDIA JetBot hardware deployment video](doc/matlab_ai_robotics_workshop_hardware.gif) 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 | [![View MATLAB AI Robotics Workshop on File Exchange](https://www.mathworks.com/matlabcentral/images/matlab-file-exchange.svg)](https://jp.mathworks.com/matlabcentral/fileexchange/91980-matlab-ai-robotics-workshop) 4 | 5 | 学生やエンジニアがAIベースの自律移動ロボットをどのように開発するかを学ぶためのハンズオンコンテンツです。ディープラーニングや制御アルゴリズムを3次元シミュレーション環境を通じて直感的に学ぶことを目的にMATLAB® および Simulink® を使用しています。さらにオプションとして NVIDIA® JetBot を使用したハードウェア接続およびスタンドアローン実装もコンテンツとして含んでいます。 6 | ![MATLAB AI robotics workshop demo video](doc/matlab_ai_robotics_workshop.gif) 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 | ![NVIDIA JetBot hardware deployment video](doc/matlab_ai_robotics_workshop_hardware.gif) 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 | 19 | 21 | 45 | 48 | 49 | 51 | 52 | 54 | image/svg+xml 55 | 57 | 58 | 59 | 60 | 61 | 65 | 72 | 79 | 86 | 93 | 100 | 107 | 114 | 119 | 131 | 143 | 155 | 167 | 172 | 177 | 182 | 187 | 193 | 194 | 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 | 19 | 21 | 45 | 47 | 48 | 50 | image/svg+xml 51 | 53 | 54 | 55 | 56 | 57 | 62 | 69 | 74 | 86 | 91 | 103 | 108 | 113 | 125 | 137 | 142 | 147 | 153 | 154 | 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 | 6 | -------------------------------------------------------------------------------- /resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/LGQWO8CiZT8qgQmEhQpFeiY7NtEp.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/QJ25YFfPCjKElaz2k1WKyopEjYQd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/QJ25YFfPCjKElaz2k1WKyopEjYQp.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/R_vU7W4BYHICfV-r0qqyiEoCtoEd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/R_vU7W4BYHICfV-r0qqyiEoCtoEp.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/THl67pDOstdNfnJ2HeRaZvSehccd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/THl67pDOstdNfnJ2HeRaZvSehccp.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/0COldfb-6uGv7YIaGr1_FbFLnzQ/vdHpM0evZyEQPk1AfNrikv1ECCMd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | 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 | 6 | -------------------------------------------------------------------------------- /resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/-5vWh4yFhxq83jG67Om1j6dilSwp.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/-P0FT7TH809XfADGsTMDtw4dWp0d.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/-P0FT7TH809XfADGsTMDtw4dWp0p.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/1oVQHFhqM1c1HSKWdUA1__3l1tQd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/1oVQHFhqM1c1HSKWdUA1__3l1tQp.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/KtlO4IxLX3G-0BB6aWpRoWjGPXwd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | 6 | -------------------------------------------------------------------------------- /resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/bcud-hmeUQI43XfX9mSBblgPexIp.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/Jb61Kk_GvvOMXgvyT4GFLqNyUfU/cUzUiW5vrd5QG1b-WyNk3hRWRnUd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | 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 | 6 | -------------------------------------------------------------------------------- /resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/82RVMc7UMy8dFHqE9Ut1hlA-79Ap.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/R6m7AxFfSX7StHtVJ9WG44h96GM/D86tPVkI1EaiwWUwwGXz-mY7u48d.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | 6 | -------------------------------------------------------------------------------- /resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/8bcB89v9ydMi6daBTKOpwdyuXs0p.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/Hmc1riq5DZRfekzzbgtmtpsDA0Qd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/Hmc1riq5DZRfekzzbgtmtpsDA0Qp.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/c7d0zuY24rXKoB7Q6STfdiWZVhcd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/c7d0zuY24rXKoB7Q6STfdiWZVhcp.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/TViFZfTwSc5gXhBPhjNdQZTclNw/cfvUSycIC4G6PwjJRUnVN0f609Ad.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | 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 | 6 | -------------------------------------------------------------------------------- /resources/project/aVUIa3BPzof8SPZymw9Cy6wE7pI/Hbc_AeEGKIaMex1zhIqSRFjz-awp.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/aVUIa3BPzof8SPZymw9Cy6wE7pI/RFFxmYuaG0Yrvcn4plcCPzQjSP8d.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | 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 | 6 | -------------------------------------------------------------------------------- /resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/On3lB2PSMzW0cdywC4fl7_AMJEgp.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/XXrnNg8gB7Osh7_psmQsGisrnlod.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/XXrnNg8gB7Osh7_psmQsGisrnlop.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/YSklTfdtfixZ8KlEfTP-TBej528d.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /resources/project/g6DFlDUYrr9kqUFRRUN2VRnyfhk/YSklTfdtfixZ8KlEfTP-TBej528p.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/hgCEKV4QVXBgTQnP5nS6W7EYgek/Br0MuNwanhEGAaItHXNQd1VdQo8d.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /resources/project/hgCEKV4QVXBgTQnP5nS6W7EYgek/Br0MuNwanhEGAaItHXNQd1VdQo8p.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/hgCEKV4QVXBgTQnP5nS6W7EYgek/T3qqflG_jOgbiCoFW-pSrZiWkqId.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | 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 | 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 | 6 | -------------------------------------------------------------------------------- /resources/project/wOLVUSg8QHmXqB1zcpp9YNG1EMg/Q1kYspdhlzJEdxNCtzAqGovAto4p.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/project/wOLVUSg8QHmXqB1zcpp9YNG1EMg/j28d20mDifNUrBFie_vtxtycBCgd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 --------------------------------------------------------------------------------