ããã«ã¡ã¯ãHabrã ç§ãã¡ã®ããŒã ã¯ãTodãµãŒãã¹ãããããéçºããŠããŸãã ç§ãã¡ã¯ãå€æ©èœããããã®äœæã«åãçµãã§ããããã®æ©èœã¯ãPR2 Willow Garageãªã©ã®ã¢ãã€ã«ããããã®ãã©ãã°ã·ãããšç«¶åã§ããããã«ãªããŸãã ç§ãã¡ã¯å°ããªãã®ããå§ããŸãããããããã¯æ¯æ¥æ°ããã¹ãã«ã身ã«ä»ããæ°ããã»ã³ãµãŒãè£
åããŠããŸãã
ååã®èšäºã§ ãäžè¬çãªãµãŒãã¹ããããã«ã€ããŠç¥ãããšãã§ããŸããä»æ¥ã¯ãTodããã²ãŒã·ã§ã³ã·ã¹ãã ã®å®è£
ã«çŠç¹ãåœãŠãŸãã ä»æ¥ã¯ãè»èŒªã®èµ°è¡è·é¢æž¬å®ã«åºã¥ããŠèªèº«ã®äœçœ®ã決å®ããããã²ãŒã·ã§ã³ã¿ã¹ã¯ãå®è¡ããè¶
é³æ³¢ãœããŒããæèŠããŒã¿ãåä¿¡ããããã«ããããã«æããæ¹æ³ã説æããŸãã ãã®ãã¹ãŠã®ããžãã¹ã¯ãããŸããŸãªãããããããžã§ã¯ãã§å®èšŒãããŠããããããROSïŒRobot Operating SystemïŒã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ç®¡çãããŸãã ç«ãžããããã
çŽ äººã«ãšã£ãŠã¯ããããããããšããèšèã¯ãã¿ãŒãããŒã¿ãŒã®ç²Ÿç¥ã«åºã¥ããSFæ ç»ã®ã¹ããŒããªãã¥ãŒããã€ãããããã«é¢é£ããŠããå¯èœæ§ãé«ãã§ãã å®éã®ãããããšåŸæ¥ã®æ©æ¢°ã®éãã¯äœã§ããïŒ ãŸããããããã«ã¯èªåŸæ§ããããŸããããã¯ã人éã®ä»å
¥ãªãã«ç¬ç«ããŠææ決å®ãè¡ãèœåã§è¡šãããŸãã
èªåŸããããã¯ãç®æšãéæããããã«ããã²ãŒã·ã§ã³ã®åé¡ã解決ã§ããªããã°ãªããŸããã åºæ¬çãªããã²ãŒã·ã§ã³ã¿ã¹ã¯ã«ã¯ãããŸããŸãªçš®é¡ã®ã»ã³ãµãŒïŒè·é¢èšãã«ã¡ã©ãGPSããã²ãŒã¿ãŒãç¹æ®ããŒã³ã³ãªã©ïŒããã®ããŒã¿ã®è§£éã«åºã¥ãç°å¢èªèãã«ãŒãèšç»ãããã³å·è¡æ©é¢ã䜿çšããç°å¢ãšã®å¯Ÿè©±å察話ãå«ãŸããŸãã ããã€ãŒã«ããã³ãããã¥ã¬ãŒã¿ãŒã
é«å質ã®ããã²ãŒã·ã§ã³ã¢ã«ãŽãªãºã ã¯è€éãªæ°åŠã«åºã¥ããŠãããããå€ãã®åå¿è
ã®ããããå·¥åŠã¯ãã€ã³ãã¢ã³ãšåå
æ°ã®èšç®ãšè¡çªããéååŠã¢ãã«ãæ§ç¯ãã確ççã¢ã«ãŽãªãºã ãé©çšããåŸãç±æã倱ããŸãã 幞ããªããšã«ãä»æ¥ãROSãPlayerãMicrosoft Robotics Studioãªã©ã®å€ãã®ãããããã¬ãŒã ã¯ãŒã¯ããããå¿
èŠãªæ°žç¶æ§ãæã€åå¿è
ã§ãããããžã§ã¯ãã§è€éãªããã²ãŒã·ã§ã³ãšAIã¢ã«ãŽãªãºã ã䜿çšã§ããŸãã
ROSãšããã²ãŒã·ã§ã³ã¹ã¿ãã¯
ç§ãã¡ã®ããŒã ã¯ãTodããããã«ãªãŒãã³ãœãŒã¹ã®ãããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãã¬ãŒã ã¯ãŒã¯ã䜿çšããããšã«ããŸããã ROSã¯ä»æ¥ãå€ãã®ç 究ã°ã«ãŒããäŒæ¥ã®ãããããããžã§ã¯ãã§äœ¿çšãããŠããŸãã ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ãããŒããŠã§ã¢ã®æœè±¡åãäœã¬ãã«ã®ããã€ã¹ç®¡çãåºæ¬çãªæ©èœãšã¢ã«ãŽãªãºã ã®å®è£
ãããã»ã¹ãšããã±ãŒãžãããŒãžã£ãŒéã®ã¡ãã»ãŒãžã®åãæž¡ããªã©ãOSå
šäœã®æ©èœã«å¹æµããæ©èœãæäŸããŸãã ROSã®å®è¡å¯èœããã°ã©ã ã¯ãå
±éã®ãããã¯ã«ãµãã¹ã¯ã©ã€ãããããšã«ãããçžäºã«ã¡ãã»ãŒãžã亀æã§ããããŒãã®ã»ããã§ãã ãã®ãããªããŒãã¯ãC ++ããã³Pythonã§åå¥ã«å®è£
ã§ããŸãã ROSã¯Ubuntuã®å¶åŸ¡äžã§å®å
šã«åäœããŸããç¹ã«ãTod Ubuntu 12.40ããã³ROS Groovyã«äœ¿çšããŸãã ROSãããã¥ã¡ã³ããããã³é©åãªãŠã©ãŒã¯ã¹ã«ãŒã®è©³çŽ°ã«ã€ããŠã¯ãros.orgãã芧ãã ããã
ããã²ãŒã·ã§ã³ã®åé¡ã解決ããããã«ãROSã¯ããã²ãŒã·ã§ã³ã¹ã¿ãã¯ãæäŸããŸãã ã¹ã¿ãã¯ã¯ãå
¥åããŒã¿ãšããŠèµ°è¡è·é¢èšããŒã¿ïŒããããã®è»èŒªã移åããçµè·¯ïŒãšã»ã³ãµãŒã䜿çšããåºåã§ç§»åé床å¶åŸ¡ã³ãã³ããããããã«éä¿¡ããŸãã ç¹å®ã®æ¡ä»¶ãæºãããããšãããããã§ããã²ãŒã·ã§ã³ã¹ã¿ãã¯ãããã®ãŸãŸã䜿çšã§ããããã«ãªããŸãã
-ããããã®åœ¢ç¶ã¯å圢ãŸãã¯é·æ¹åœ¢ã§ãªããã°ãªããããã®è»èŒªã¯éãããããã¯ã§ãªããã°ãªããŸããã ããããã®ç§»åã¯ãè»èŒªã®å転æ¹åã«æ²¿ã£ãŠã®ã¿å®è¡ããå¿
èŠããããŸãã ããšãã°ãè»ãèªè»¢è»ã®è»èŒªã¯éãããããã¯ã§ãã
-ããããã¯ãããããã£ãã¯ããŒããšããããã®ã»ã³ãµãŒéã®ãã¹ãŠã®å¹ŸäœåŠçé¢ä¿ã«é¢ããæ
å ±ãæäŸããå¿
èŠããããŸãã ãã®æ
å ±ã¯URDFã¢ãã«ã§æå®ãããããŒãtfã¯ãå転è¡åããªã€ã©ãŒè§ãããã³åå
æ°ã䜿çšããŠããã座æšç³»ããå¥ã®åº§æšç³»ãžã®è€éãªå¹ŸäœåŠçå€æãå®è¡ã§ããŸãã
-ããããã¯ãç·åœ¢ããã³è§é床ã®åœ¢åŒã§åããå¶åŸ¡ããããã®ã¡ãã»ãŒãžãéä¿¡ããå¿
èŠããããŸãã
-å Žæãç¹å®ããŠå°å³ãäœæããã¿ã¹ã¯ã解決ããã«ã¯ãã¬ãŒã¶ãŒè·é¢èšãŸãã¯3Dã¹ãã£ããŒã䜿çšããå¿
èŠããããŸãã ãã ããå°ãã ãŸãããŠããå Žåã¯ãé«äŸ¡ãªã»ã³ãµãŒã®ä»£ããã«ä»ã®å®äŸ¡ãªã¢ããã°ã䜿çšã§ããŸãïŒãœããŒãŸãã¯èµ€å€ç·è·é¢èšã ãã®å Žåãäž»ãªããšã¯ãå®è¡å¯èœããŒãã«éä¿¡ãããã¡ãã»ãŒãžã®æ£ãã圢åŒã芳å¯ããããšã§ãã
ãã®å³ã¯ãããã²ãŒã·ã§ã³ã¹ã¿ãã¯ã®äžè¬çãªã¬ã€ã¢ãŠãã瀺ããŠããŸãã ç¢å°ã®éã®ããã¹ãã¯ãããŒãéã§äº€æãããã¡ãã»ãŒãžã®ã¿ã€ãã瀺ããŸãã ãã®ã¹ã¿ãã¯ã«ã¯3ã€ã®ã¿ã€ãã®ããŒãããããŸãã
-çœãé·æ¹åœ¢ã«é
眮ãããããŒãã¯ROSã«ãã£ãŠæäŸãããŸã
-ç°è²ã®é·æ¹åœ¢ã«é
眮ãããããŒããROSã«ãã£ãŠæäŸãããŸãããã¹ã¿ãã¯ã§ã®ããŒãã®äœ¿çšã¯ãªãã·ã§ã³ã§ã
-éç·è²ã®é·æ¹åœ¢ã«é
眮ãããããŒãã¯ããŒããŠã§ã¢ã«äŸåãããããã®å®è£
ã¯éåžžéçºè
ã®è©ã«ãããŸãã
ROSããã²ãŒã·ã§ã³ã¹ã¿ãã¯ã䜿çšããããã®èŠä»¶ãââããã£ãã®ã§ããããTodããããã«é©åãããããšãã§ããŸãã
ããŒã¹ã³ã³ãããŒã©ãŒãšã¢ãŒã·ã§ã³ã³ã³ãããŒã«
ããŒã¹ã³ã³ãããŒã©ãŒã¯ããã²ãŒã·ã§ã³ã¹ã¿ãã¯ã®ããŒãã§ãããããããã®åããå¶åŸ¡ãã圹å²ãæãããŸãã ROSã¯æšæºã®ããŒã¹ã³ã³ãããŒã©ãŒãæäŸããŸããããã®ãããããããã«ã¯ç¬èªã®ããŒããäœæãããããµãŒãããŒãã£ã®ãªãŒãã³ãœãŒã¹ãœãªã¥ãŒã·ã§ã³ãåºç€ãšããŠäœ¿çšããå¿
èŠããããŸãã ããããã®åäœå¶åŸ¡ã³ãã³ãã¯ãgeometry_msgs / Twistã¿ã€ãã®ã¡ãã»ãŒãžã®cmd_velãããã¯ã§ããŒã¹ã³ã³ãããŒã©ãŒã«éä¿¡ãããŸãã
geometry_msgs/Vector3 linear float64 x float64 y float64 z geometry_msgs/Vector3 angular float64 x float64 y float64 z
ç·åœ¢ãã¯ãã«ã¯ãxãyãz軞ã«æ²¿ã£ãããããã®ç·åœ¢é床ãå®çŸ©ããè§åºŠãã¯ãã«ã¯ãxãyãz軞ã®è§é床ãå®çŸ©ããŸãã ããã«ããããã®ã³ãã³ãã¯ãšã³ãžã³ã®å転ãå¶åŸ¡ããã³ãã³ãã«å€æãããããããã¯æå®ãããæ¹åã«ç§»åããŸãã
é床ãã¯ãã«ãèšå®ããé åºã¯ãããããã®éååŠã«äŸåããŸãã Todããããã«ã¯ãDCã¢ãŒã¿ãŒãããŒã¹ã«ãã2茪ãã£ãã¡ã¬ã³ã·ã£ã«ãã©ã€ããè£
åãããŠããŸãã ã€ãŸããgeometry_msgs / Twistã¡ãã»ãŒãžã§ã¯ãx軞ã«æ²¿ã£ãç·åœ¢é床ïŒååŸéåã«å¯Ÿå¿ïŒãšè§é床zïŒéãŒãã®ç·åœ¢é床ãæå®ããå Žåã®ã€ã³ãã¬ãŒã¹å転ãŸãã¯å匧ã«æ²¿ã£ãéåã«å¯Ÿå¿ïŒã®ã¿ãæå®ãããŸãã
å·®åé§åã®3茪ããããã ã¹ãã¢ãªã³ã°ãã€ãŒã«ãŸãã¯ããŒã«ãžã§ã€ã³ãã¯ãããããã®å®å®æ§ãæäŸããŸãããããã®ããããé床ã察å¿ãããšã³ãžã³é床ã«å€æããããšã¯ã幟äœåŠçèšç®ãå¿
èŠãšããäºçŽ°ãªéååŠã®åé¡ã§ãã
12ãã«ããšã³ãžã³ã«å¿
èŠãªé»åãæäŸããPololu Dual MC33926ã¢ãŒã¿ãŒãã©ã€ããŒã·ãŒã«ããšçµã¿åãããŠããšã³ãžã³ã®å転ãå¶åŸ¡ããäœã¬ãã«ã®ã¿ã¹ã¯ãArduino Unoã«ä»»ããŸããã ããŒã¹ã³ã³ãããŒã©ãŒãå®è£
ããããããŒããŒããšROSããŒãturtlebot_teleopã䜿çšããŠããããã«ä¹ãããšãã§ããŸãããã®ããŒãã¯ãgeometry_msgs / TwistããŒã¹ã³ã³ãããŒã©ãŒã¡ãã»ãŒãžãéä¿¡ããŸãã
ãªãã¡ããªãŒ
ãªãã¡ããªãŒã¯ãæãäžè¬çãªæšæž¬èªæ³ã§ãã ãã®æ¹æ³ã®æ¬è³ªã¯ãå°å³äžã®ä»»æã®åºå®ç¹ã«å¯Ÿããå¢åãã€ãŒã«é床ã®èšç®ã«åºã¥ããŠããããã®äœçœ®ã決å®ããããšã§ãã éåžžãèµ°è¡è·é¢æž¬å®ã¯ãè»èŒªã«åãä»ããããããŸãã¯ããããã¢ãŒã¿ãŒã«çŽæ¥åãä»ããããå
åŠåŒããžã¿ã«ãšã³ã³ãŒããŒã«ãã£ãŠè¡ãããŸãã Todã«ã¯ãã¢ãŒã¿ãŒã·ã£ããã®1å転ããã64ãã«ã¹ã®å解èœãæã€ããžã¿ã«ãšã³ã³ãŒããŒãè£
åãããŠããŸããããã¯ããã€ãŒã«ã®1å転ããã8384ãã«ã¹ã«çžåœããŸãã
èµ°è¡è·é¢æž¬å®ãžãªã¡ããªã ããããã®äœçœ®ïŒxãyãã·ãŒã¿ïŒãšdbaselineã®ãã€ãŒã«ããŒã¹å¹
ãäžããããå Žåãæ°ããäœçœ®ïŒx 'ãy'ãã·ãŒã¿ 'ïŒãèšç®ããå¿
èŠããããŸããããã²ãŒã·ã§ã³ã¹ã¿ãã¯ã¯ãnav_msgs / Odometryãªã©ã®ã¡ãã»ãŒãžã䜿çšããŠèµ°è¡è·é¢ããŒã¿ãååŸããŸãã
std_msgs/Header header uint32 seq time stamp string frame_id string child_frame_id geometry_msgs/PoseWithCovariance pose geometry_msgs/Pose pose geometry_msgs/Point position float64 x float64 y float64 z geometry_msgs/Quaternion orientation float64 x float64 y float64 z float64 w float64[36] covariance geometry_msgs/TwistWithCovariance twist geometry_msgs/Twist twist geometry_msgs/Vector3 linear float64 x float64 y float64 z geometry_msgs/Vector3 angular float64 x float64 y float64 z float64[36] covariance
geometry_msgs / Poseã¡ãã»ãŒãžã¯ã3次å
空éã§ã®ããããã®çŸåšäœçœ®ãšæ¹åã決å®ããŸãããªããžã§ã¯ãã3次å
空éã§å転ããå Žåãåå
æ°ã«ãã£ãŠäŸ¿å©ã«èšç®ãããŸãã æ¢ç¥ã®geometry_msgs / Twistã¡ãã»ãŒãžã¯ãç·é床xãšè§é床zãå®çŸ©ããŸãã
èšç®ãå®è¡ãããšããããã€ãã®åº§æšç³»ãæ±ã£ãŠãããããããŒãtfãå¿
èŠã§ãã tfããŒãã¯ãããããã®URDFã¢ãã«ãšé£æºããŠãããããã®ããŒã«ã«åº§æšç³»ãããããã®ã°ããŒãã«åº§æšç³»ã«äœçœ®ãå€æããé¢åãªèšç®ãå®è¡ããŸãã
Rvizã·ãã¥ã¬ãŒã¿ãŒã§ã®èµ°è¡è·é¢ããŒã¿ã䜿çšããTod URDFã¢ãã«ã®èŠèŠåããœããŒ
ããããã¯ããŸããŸãªçš®é¡ã®ã»ã³ãµãŒã䜿çšããŠãåšå²ã®äžçã«é¢ããæ
å ±ãååŸã§ããŸãã ã»ã³ãµãŒã®ç¹æ§ã¯å€§ããç°ãªããå¶éã匱ç¹ãããã³åŒ·åºŠããããããããã€ãã®ã¿ã€ãã®å
±å䜿çšãæãæçã§ãããšèããããŠããŸãã
è¶
é³æ³¢ãœããŒã䜿çšããŠãç©äœãããããããŸã§ã®è·é¢ã枬å®ã§ããŸãã ãœããŒã¯ãTOFïŒé£è¡æéïŒãã¯ãããžãŒã§åäœããŸãã ãããã¯ãçµè·¯å
ã®æãè¿ããªããžã§ã¯ãããåå°ããããšã³ãŒã®åœ¢ã§æ»ãé³ä¿¡å·ãçºããŸãã ä¿¡å·ã®ãé£è¡ãæéã¯åºå®ãããããã«åºã¥ããŠãªããžã§ã¯ããŸã§ã®è·é¢ãèšç®ãããŸãã
ãœããŒã¯ããŒãé³ãçºãããšã³ãŒããèãåãããŸããTodã¯HC-SR04ãœããŒã䜿çšããŠããã0.2ã5 mã®æž¬å®ç¯å²ã0.03 mã®ç²ŸåºŠã§ãµããŒãããŠããŸãã1ã€ã®HC-SR04ã®èŠéè§ã¯30床ã§ããè€æ°ã®ãœããŒã䞊ã¹ãŠé
眮ãããšããã倧ããªèŠéè§ãåŸãããšãã§ããŸãã ãããã®åé¢ã«ãã3ã€ã®ãœããŒã¯ã90床ã®èŠéè§ãæäŸããŸãã
ROSããã²ãŒã·ã§ã³ã¹ã¿ãã¯ã¯ãããŸããŸãªçš®é¡ã®ã»ã³ãµãŒããã®ããŒã¿ã䜿çšããŠãèµ°è¡è·é¢ãååŸããããéšå±ã®å°å³ãäœæããããé害ç©ãåé¿ãããã§ããŸãã çè«çã«ã¯ã12å以äžã®ãœããŒã¯360床ã®èŠéè§ãäžããé«äŸ¡ãªã¬ãŒã¶ãŒè·é¢èšã®å®äŸ¡ãªä»£æ¿åã§ããããããœããŒã䜿çšããŠéšå±ã®å°å³ãäœæããããšãã§ããŸãã Todã¯Kinectã䜿çšããŠããããäœæããŸããããã¯ãå€ãã®æèŠç¹æ§ã§ãœããŒãäžåããŸãã ãã ããããã¯ãœããŒãå»æ£ããçç±ã§ã¯ãããŸããã Kinectã¯ããããã®ååé«ãäœçœ®ã«åãä»ããããŠãããããè»èŒªã®çäžã§äœãèµ·ãã£ãŠããããèŠãããšãã§ããŸããã ãœããŒã¯ãã®æ»è§ãæããããã«ãã£ãŠçµè·¯ã®èšç»ãšé害ç©ã®åé¿ã®åé¡ã解決ããã®ã«åœ¹ç«ã€ããã«èŠããŸãã
åè¿°ã®ããã«ãããã²ãŒã·ã§ã³ã¹ã¿ãã¯ã¯ã¬ãŒã¶ãŒã»ã³ãµãŒãš3Dã¹ãã£ããŒã®ã¿ããµããŒãããŸãã ãã®å¶éã¯ããœããŒã·ã¹ãã ãåœã®3Dã¹ãã£ããŒãšããŠæ瀺ããããšã§åé¿ã§ããŸãã 3-Dã¹ãã£ããŒã¯ã3次å
空éã®ç¹çŸ€ãèšè¿°ããsensor_msgs / PointCloudã¡ãã»ãŒãžã䜿çšããŸãã
std_msgs/Header header uint32 seq time stamp string frame_id geometry_msgs/Point32[] points float32 x float32 y float32 z sensor_msgs/ChannelFloat32[] channels string name float32[] values
ãœããŒã®æèŠããŒã¿ã¯ãxãy座æšãz座æšã®åœ¢åŒã§åã¯ã©ãŠããã€ã³ãã0ã«èšå®ããããšã§ããã®åœ¢åŒã§è¡šãããšãã§ããŸããåæã«ãåãœããŒã«å¯ŸããŠãã®ãããªãã€ã³ããããã€ãèšå®ã§ããã¯ã©ãŠãã®å¯åºŠãäžããããšãã§ããŸãã ããã¯ãããããœããŒããã®æèŠããŒã¿ã®èŠèŠåã®ããã§ãã
Rvizã§ã®ãœããŒæèŠããŒã¿ã®èŠèŠåããæž
èŽããããšãããããŸãããä»æ¥ã¯ä»¥äžã§ãã
次ã®èšäºã§ã¯ãå®éšããŒãã®äŸã䜿çšããŠãROSããã²ãŒã·ã§ã³ã¹ã¿ãã¯ã®æ©èœã«ã€ããŠåŒãç¶ã説æããŸããTodKinectã«æ¥ç¶ããããã䜿çšããŠã¢ããŒãã¡ã³ãããããæ§ç¯ããã«ãŒããèšç»ããé害ãåé¿ããæ¹æ³ãæããŸãã