{"id":29,"date":"2019-01-17T01:28:53","date_gmt":"2019-01-17T01:28:53","guid":{"rendered":"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/?page_id=29"},"modified":"2019-12-10T14:24:06","modified_gmt":"2019-12-10T19:24:06","slug":"system-implementation","status":"publish","type":"page","link":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/system-implementation\/","title":{"rendered":"System Implementation"},"content":{"rendered":"<h3>Overview<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-222 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/cubi-cad-1-300x271.gif\" alt=\"\" width=\"300\" height=\"271\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/cubi-cad-1-300x271.gif 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/cubi-cad-1-768x693.gif 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/cubi-cad-1-1024x924.gif 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/cubi-cad-1-1200x1083.gif 1200w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>We successfully integrated the mobile base, manipulator and sensor and are now in the phase of testing its ability to pick up toys and navigate on different types of floor.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-221 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/IMG_20190328_143126-1-300x221.jpg\" alt=\"\" width=\"373\" height=\"275\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/IMG_20190328_143126-1-300x221.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/IMG_20190328_143126-1-768x565.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/IMG_20190328_143126-1-1024x754.jpg 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/IMG_20190328_143126-1-1200x883.jpg 1200w\" sizes=\"auto, (max-width: 373px) 100vw, 373px\" \/><\/p>\n<div class=\"page\" title=\"Page 11\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p>The picture below shows the completed assembly of CuBi that we used for our demonstration. The robot has the Turtlebot 3 Waffle Pi as its mobile base. The base has manipulator fitted on the top layer and has Intel RealSense and Hokuyo lidar mounted on it. It has a PCB for power distribution and an OpenCR controller that is used for the mobility of robot. The system is complete and functional, and we will improve the design for robustness and performance in the coming semester.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-358\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image15.jpg\" alt=\"\" width=\"1999\" height=\"1500\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image15.jpg 1999w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image15-300x225.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image15-768x576.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image15-1024x768.jpg 1024w\" sizes=\"auto, (max-width: 1999px) 100vw, 1999px\" \/><\/p>\n<div class=\"page\" title=\"Page 11\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-weight: 400\">The initial robot URDF was developed with modularity to make it easier to add more features as we build the robot. Currently, it contains the base and the camera mounted with the various transforms published and visualizations with rviz.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-239 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/16-300x232.jpg\" alt=\"\" width=\"300\" height=\"232\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/16-300x232.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/16-768x593.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/16.jpg 912w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>The state machine that is depicted above is used by CuBi to perform its entire operation. When CuBi is turned on it goes on to \u2018search mode\u2019 when it performs a 90 degree sweep in either direction till it detects an object. Once an object is detected, CuBi switches to \u2018pick-up object mode\u2019 when it moves to the goal pose, picks up the object. Then in the \u2018drop-off mode\u2019 it goes to the home position to drop the picked object on the tray. Then it resets to the home position and starts searching for an object. The state-machine also switches to Back-Off state in case either an objects gets trapped between CuBi paddles or the computer vision of the tray detects that no object was successfully picked-up.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-513\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/State-Machine.png\" alt=\"\" width=\"601\" height=\"584\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/State-Machine.png 601w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/State-Machine-300x292.png 300w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><\/p>\n<div class=\"page\" title=\"Page 12\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<h3>Mobile Base &amp; Mobility<\/h3>\n<p>We have performed trade studies on various available off-the-shelf mobile robot platforms, as well as the option to build our own mobile base from scratch. Then we chose the TurtleBot 3 Waffle Pi as our mobile base platform. The main reason to select this platform is the high- modularity design and capability to be easily modified and integrated with other components.<\/p>\n<p>During the past semester, we have finished the assembly of the entire robot. The base is powered by two Dynamixel XM430 motors with a differential drive steering mechanism with two caster wheels on the back. Dual large capacity Li-Po batteries are mounted on the base to power the system, ensuring at least 1 hour running time once fully charged. In the middle layer, an OpenCR microcontroller board is installed to control the chassis motors. It has an embedded IMU onboard, and continuously sends fused IMU and wheel odometry information to the onboard computer through a serial port. On the top layer, we have mounted the manipulator, the NVIDIA Jetson TX2 onboard computer, and the power distribution PCB that we designed.<\/p>\n<p>Currently, both software and hardware components of all other subsystems have been fully integrated together with the mobile base. The base can be controlled either by using a remote joystick, or by receiving velocity commands sent from other nodes through ROS.<\/p>\n<h3>Electronics<\/h3>\n<p>Please refer to <a href=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/documents\/electronics\/\">this page<\/a>.<\/p>\n<h3>Grasping<\/h3>\n<p>Once we decided on a concept for our robot, we\u00a0prototyped a simple version of it to validate its grasping. The 3D printing assembly allowed us to see areas for improvement such as the filleted tray base and the overlapping paddles, and overall it was observed that the system is fairly robust and compliant for grasping, since we are using a &#8220;caging&#8221; grasping strategy.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-224 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/1-300x275.jpg\" alt=\"\" width=\"300\" height=\"275\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/1-300x275.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/1-768x703.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/1.jpg 904w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-225 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2-300x235.jpg\" alt=\"\" width=\"300\" height=\"235\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2-300x235.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2-768x601.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2.jpg 798w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-226 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/3-300x272.jpg\" alt=\"\" width=\"300\" height=\"272\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/3-300x272.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/3-768x696.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/3.jpg 969w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>We zoomed in enough mechanical details to validate it conceptually, and transitioned it to a CAD drawing for prototyping of the actual sub-system.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-216 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2019_04_04-11_24-PM-Office-Lens-6-300x196.jpg\" alt=\"\" width=\"300\" height=\"196\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2019_04_04-11_24-PM-Office-Lens-6-300x196.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2019_04_04-11_24-PM-Office-Lens-6-768x501.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2019_04_04-11_24-PM-Office-Lens-6-1024x668.jpg 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2019_04_04-11_24-PM-Office-Lens-6.jpg 1152w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-217 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2019_04_04-11_24-PM-Office-Lens-5-300x283.jpg\" alt=\"\" width=\"205\" height=\"193\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2019_04_04-11_24-PM-Office-Lens-5-300x283.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/2019_04_04-11_24-PM-Office-Lens-5.jpg 740w\" sizes=\"auto, (max-width: 205px) 100vw, 205px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-231 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/8-300x216.jpg\" alt=\"\" width=\"300\" height=\"216\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/8-300x216.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/8-768x553.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/8-1024x737.jpg 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/8.jpg 1124w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/>\u00a0 We increased the tray size to accommodate two tennis-ball sized toys.<img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-233 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/10-300x231.jpg\" alt=\"\" width=\"300\" height=\"231\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/10-300x231.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/10-768x591.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/10.jpg 885w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>We added provisions for servo-motor wiring.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-234 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/11-300x277.jpg\" alt=\"\" width=\"300\" height=\"277\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/11-300x277.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/11-768x709.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/11.jpg 805w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Completed tray compared with first prototype.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-232 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/9-300x184.jpg\" alt=\"\" width=\"300\" height=\"184\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/9-300x184.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/9-768x470.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/9-1024x627.jpg 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/9.jpg 1142w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>We moved to build the robotic arm by 3D printing the servo-motor brackets and using aluminium extrusion for the links between the revolute joints.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-235 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/12-286x300.jpg\" alt=\"\" width=\"286\" height=\"300\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/12-286x300.jpg 286w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/12.jpg 673w\" sizes=\"auto, (max-width: 286px) 100vw, 286px\" \/><\/p>\n<p>We completed the manipulator and validated for its payload.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-236 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/13-300x249.jpg\" alt=\"\" width=\"300\" height=\"249\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/13-300x249.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/13-768x638.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/13-1024x850.jpg 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/13.jpg 1074w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>The manipulator is actuated by a pair of Dynamixel AX-12A motors for the gripper and a pair of Dynamixel MX-106 motors for the arm, making it a 4-DOF manipulation system. Each paddle is half the size of the tray which minimizes the possibility of the object getting stuck. The links are made up of 80\/20 extrusion aluminum bars, and the brackets and tray are 3D-printed.<\/p>\n<p><span style=\"font-weight: 400\">We estimate a maximum estimate weight of 500g for the tray + 2* 100g. For toys, and apply a safety factor to allow for 500 grams of payload. Therefore the total weight for tray plus objects might reach 1Kg, Here we consider the short straight section of the arm to have negligible specific weight. <\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-237 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/14-300x196.jpg\" alt=\"\" width=\"300\" height=\"196\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/14-300x196.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/14-768x501.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/14-1024x668.jpg 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/14.jpg 1088w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><span style=\"font-weight: 400\">We then calculated the torque necessary. At its extreme limit, we show the arm of force below, and torque which is:\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">T = payload * arm_of_force<br \/>\n<\/span><span style=\"font-weight: 400\">T = 1.0Kg * 32cm = 32Kg.cm<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-238 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/15-300x162.jpg\" alt=\"\" width=\"402\" height=\"217\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/15-300x162.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/15-768x415.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/15-1024x554.jpg 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/15.jpg 1126w\" sizes=\"auto, (max-width: 402px) 100vw, 402px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-371\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image10.png\" alt=\"\" width=\"763\" height=\"601\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image10.png 763w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image10-300x236.png 300w\" sizes=\"auto, (max-width: 763px) 100vw, 763px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Finally, we compare it against the shoulder servo motor Dynamixel MX-106 at 12 at the shoulder joint:\u00a0\u00a0<\/span><span style=\"font-weight: 400\">8.4N.m = 85.6Kg.cm<\/span><\/p>\n<p><span style=\"font-weight: 400\">Therefore our maximum torque required would be 32Kg.cm \/ 85.6Kg.cm = 37%<\/span><\/p>\n<p><span style=\"font-weight: 400\">The manufacturer recommends \u00a0that for smooth motion, that we should keep the required torque within 20% of stall torque = 17Kg.cm<\/span><\/p>\n<p><span style=\"font-weight: 400\">That would translate to 17Kg.cm \/ 32cm = 0.535Kg = 535g.<\/span><\/p>\n<p><span style=\"font-weight: 400\">For operation carrying only one toy, we would be within the smooth action spec of the manufacturer, for larger loads we might experience \u201cjerky\u201d motion, but we would be well under the specified stall torque of the motor.<\/span><\/p>\n<\/div>\n<\/div>\n<h3>Perception<\/h3>\n<p>W<span style=\"font-weight: 400\">ork was done on segmentation of 3D data and initial results were obtained. This will be improved and further work will be done to estimate the size of the segmented objects and validate the size of the objects of interest and see the minimum distance to camera, which will aid in camera placement.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-229 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/6-300x238.jpg\" alt=\"\" width=\"300\" height=\"238\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/6-300x238.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/6-768x610.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/6.jpg 917w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Below is the best output for a very carefully selected 3D image frame. But it is not the case all the time. Work has to be done to make a good pre-processing output for almost every frame and object.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-230 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/7-300x198.jpg\" alt=\"\" width=\"300\" height=\"198\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/7-300x198.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/7-768x507.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/7-1024x676.jpg 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/7.jpg 1031w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Fit oriented 3D bounding boxes on the objects with their pose and dimension estimates relative to base of the robot. We get a lot of false positives and this will be improved.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-240 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/17-300x241.jpg\" alt=\"\" width=\"300\" height=\"241\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/17-300x241.jpg 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/17-768x617.jpg 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/04\/17.jpg 879w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<div class=\"page\" title=\"Page 14\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p>A stereo RGBD camera is used for obtaining rich visual RGB data for classification, as well as depth and point cloud for size and distance estimation. Combined information is used to estimate the size, pose and type of object.<\/p>\n<p>A combination of techniques such as geometric vision, learning-based and probabilistic methods are used to classify objects into two categories: objects to pick and obstacles to avoid. The picture below shows how are perception pipeline works in real-time.<\/p>\n<p>Currently, classical vision techniques and PCL library is used to process the point cloud. A region of interest is cropped, noisy points are removed, RANSAC plane segmentation is performed, followed by clustering of remaining objects on ground.<\/p>\n<p>A 3D bounding box is fitted around each detected object and the pose is estimated to classify them according to threshold criteria of position and size. Finally, object tracking is applied to uniquely identify these objects over time.<\/p>\n<p>To complement geometric features, learning based methods with additional labeled or synthesized data will be used. This will also aid in obstacle detection. A list of detected objects with their absolute positions in the map (calculated with the help of relative positions with respect to the robot) will later be maintained and utilized by the planner for navigation.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-357\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image7.png\" alt=\"\" width=\"1201\" height=\"933\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image7.png 1201w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image7-300x233.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image7-768x597.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/05\/image7-1024x795.png 1024w\" sizes=\"auto, (max-width: 1201px) 100vw, 1201px\" \/><\/p>\n<p><span style=\"font-weight: 400\">To identify whether a pickup is successful, we developed a vision-based validation pipeline. The following describes the pipeline for pickup validation. The manipulator is commanded to go to the fixed validation position on boot up. Then the depth image of the empty tray is collected and stored. After getting the pre-defined corners of the region to crop, this cropped portion is warped with inverse perspective mapping and rectified for better comparison. Then the current depth image is obtained when the comparison is required as shown in the figure below.<\/span> <span style=\"font-weight: 400\">The same procedure is followed as the empty tray. Now for comparison, the difference of the depth images of the cropped regions in both can be used against a threshold to validate the presence of an object in the tray.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-504\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/validation.png\" alt=\"\" width=\"1186\" height=\"534\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/validation.png 1186w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/validation-300x135.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/validation-768x346.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/validation-1024x461.png 1024w\" sizes=\"auto, (max-width: 1186px) 100vw, 1186px\" \/><\/p>\n<h3>Mapping &amp; Localization<\/h3>\n<p><span style=\"font-weight: 400\">In order to operate robustly in the environment with a potentially unknown starting location and the ability to recover from odometry drifting, CuBi must-have essential information regarding the environment. With the Hokuyo URG-04LX-UG01 LiDAR installed, CuBi is able to map the environment beforehand, and use the map to localize itself afterward by matching the laser scans to the map.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">The LiDAR gives us a continuous stream of range reads up to 6\u00a0 meters, forbearing angles between -pi\/2 to pi\/2 for every 0.3-degree increment. With that data stream, we use Hector-SLAM[8] package to create a map of our environment. After successfully building the map, it will be saved to the hard disk of CuBi\u2019s onboard computer. We then use the Adaptive Monte Carlo Localization (AMCL)[9] package, which essentially uses a KLD-sampling approach with a particle filter, to track the pose of the robot with respect to the known map. In the particle filter, the odometry information of wheel encoders integrated with IMU is used as the propagated initial guess. The laser scan matching result is used to update the filter. As the particle filter runs, it keeps updating the relative transform of the odometry frame with respect to the map frame, which corrects the odometry drifts.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Our testing proves that CuBi is able to localize itself well in the testing area, with respect to the pre-built map. It is also able to recover and re-localize itself after getting stuck, where wheel odometry may have already drifted with a significant amount. The built map is shown in the figure below.<\/span><\/p>\n<h3><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-505\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/map.png\" alt=\"\" width=\"1198\" height=\"532\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/map.png 1198w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/map-300x133.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/map-768x341.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/map-1024x455.png 1024w\" sizes=\"auto, (max-width: 1198px) 100vw, 1198px\" \/><\/h3>\n<h3>Planning &amp; Control<\/h3>\n<div class=\"page\" title=\"Page 15\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-weight: 400\">The planning and control subsystem consists of an exploration module as the global planner, a local planner, and low-level controllers. The exploration module analyzes the map information and sends waypoints to the state machine. The details regarding the exploration module will be described in the section below. The state machine then interacts with the local planner and controller. The mechanism is described as follows.<\/span><\/p>\n<p><span style=\"font-weight: 400\">The local planner and low-level controllers consist of three layers. The outermost layer receives information from the state machine, the object detection module and the localization module. It utilizes the TF package to query any necessary frame transformations. Any target pose received will be transformed with respect to the map frame, and set as the goal.<\/span> <span style=\"font-weight: 400\">Once a goal is specified, the middle layer will then compute the relative error of CuBi\u2019s current pose relative to the goal pose. Then it generates a series of motion-defined below. Each motion is tied with a relative error in terms of distance or heading angle. This error is sent to the last layer which uses a position-based PID controller to compute and publish command velocities to the base motor controller board.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">The middle layer of\u00a0 the local planner will generate CuBi\u2019s motion as follows::<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Rotate to orient directly towards the target position<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Move straight forward along the x-axis of the base frame to approach the target position\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Rotate until reaching the target orientation<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">In addition to the control of the base, the state machine also interacts with a node that controls the Dynamixel motors of the manipulator. The manipulator has a fixed set of configurations, such as moving, pick-up, drop-off, pick-up validation, box-approaching, etc. The entire pipeline is integrated using the Robot Operating System (ROS). The availability of ROS packages for Dynamixel motors and the Turtlebot base proved very beneficial to our cause.<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><\/p>\n<h3>Exploration<\/h3>\n<p><span style=\"font-weight: 400\">For exploration, the goal was to create a pipeline that was as flexible as possible. We wanted it to be robust to different room shapes and sizes. The major assumption we made was that a room has four main sides that define it.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">The exploration module reads in the map and the metadata from the file. The occupancy grid image is very large and the room takes up approximately 5% of it. To speed up exploration analysis, we cropped it to the size of the room. We store how much was cropped, so we can map back the pixels into the original image. We then use RANSAC to find major lines created by the borders of a room. Once the lines were found, we clustered them into two categories using K-Means. We got the two largest lines in each of the groups to define the borders of the room. We later found the edges of the lines to create a convex hull. Finally, we set all points outside of this occupancy grid as obstacles. This border prevents Cubi from exiting the room through the small holes we have around the map. The process of refining and pre-processing the map is general and automatic.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Once the room was defined, we needed to decompose the cells. We restricted Cubi\u2019s range of movement between cells to be forward, backward, right and left. In this way, Cubi always enters the next cell perpendicular to the cell boundary and we can assure that it can scan the entire cell when going to its centroid. We decided the cell size should be 0.7m x 0.7m as Cubi can reliably see toys within a radius of 0.7m. This allows Cubi to scan one cell and parts of the ones in front and to the sides. This extra redundancy was created to ensure we pass through most sections twice.<\/span><\/p>\n<p><span style=\"font-weight: 400\">To create the cells, we decided to use a conservative approach. The resolution of the cells in the stored occupancy grid was 5 cm. We grouped the cells, so they were decomposed into the size we wanted: 0.7m x 0.7m. When grouping the cells, if any of the smaller 5cm cells contained an obstacle, we would label the entire decomposed cell as an obstacle. This conservative approach acted like a way to inflate obstacles. Once we created the decomposed cell grid, we used the centers of all the cells as the waypoint.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">As of now, the exploration policy is a very simple one that right followed the walls only visiting unvisited cells. Remember Cubi can only move in four directions. If it was surrounded by obstacles or visited cells, it would go to the closest unvisited cell. The ending condition was having visited all the waypoints. The exploration policy also takes into account the direction Cubi is facing, so that not only is Cubi sent to the right centroid but is also pointing correctly towards the next place it needs to go. Overall, this process allows Cubi to avoid obstacles found on the map and ensure that it has covered the entire room.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Finally, we also optimized our planner algorithm for situations when CuBi had to travel from point-to-point by reducing the number of turns it would take to complete the task.<\/span><\/p>\n<p><span style=\"font-weight: 400\">We were able to succinctly add cost for state transitions between cells where a turn would be necessary. As shown in the figure below, CuBi traverses the same path, but the latter one, turning twice instead of three times. In practice that saves CuBi valuable time when exploring and collecting toys.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-506\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/exploration1.png\" alt=\"\" width=\"653\" height=\"252\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/exploration1.png 653w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/exploration1-300x116.png 300w\" sizes=\"auto, (max-width: 653px) 100vw, 653px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-507\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/exploration2.png\" alt=\"\" width=\"642\" height=\"258\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/exploration2.png 642w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-content\/uploads\/sites\/34\/2019\/12\/exploration2-300x121.png 300w\" sizes=\"auto, (max-width: 642px) 100vw, 642px\" \/><\/p>\n<h3>Modeling, Analysis &amp; Testing<\/h3>\n<div class=\"page\" title=\"Page 16\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p>As a proper system engineering design process, we have been doing a lot of modeling, analysis and testing while designing and implementing our system.<\/p>\n<p>Specifically, for the perception subsystem, we modeled the objects to pick up based on size, which is specified in our system functional requirements. We then implemented and fine- tuned our computer vision algorithm to classify the objects accordingly, with outlier rejection.<\/p>\n<p>For the mobile base subsystem, first we validated our maximum traction that the chassis motors and wheels can provide by testing the robot with payload on different ground surfaces, such as smooth indoor floor surface and carpets. We then adjusted the weight distribution of the system, in order to avoid slipping on smoother surfaces.<\/p>\n<p>We also evaluate the accuracy of wheel odometry, by comparing the reported value to the actual distance measured by hand that the robot travelled, to make sure that the amount of odometry drift was within the range specified in our performance requirements.<\/p>\n<p>For the grasping subsystem, we designed, tested and iterated multiple generations of the paddle design of various length, roughness and shape. Half size of the tray as the paddle length was proven to be the most robust for grasping. Moreover, we estimated the maximum payload required for each joint of the manipulator, and chose motors based on the calculated torque required.<\/p>\n<p>For the electronics system, we calculated the power consumption of all the onboard components. Given the 1 hour running time as one of the performance requirements of our system, we then calculated the battery capacity needed and installed dual batteries based on that.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Overview We successfully integrated the mobile base, manipulator and sensor and are now in the phase of testing its ability to pick up toys and navigate on different types of floor. The picture below shows the completed assembly of CuBi that we used for our demonstration. The robot has the Turtlebot 3 Waffle Pi as &hellip; <a href=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/system-implementation\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">System Implementation<\/span><\/a><\/p>\n","protected":false},"author":151,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-29","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-json\/wp\/v2\/pages\/29","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-json\/wp\/v2\/users\/151"}],"replies":[{"embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-json\/wp\/v2\/comments?post=29"}],"version-history":[{"count":9,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-json\/wp\/v2\/pages\/29\/revisions"}],"predecessor-version":[{"id":514,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-json\/wp\/v2\/pages\/29\/revisions\/514"}],"wp:attachment":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamd\/wp-json\/wp\/v2\/media?parent=29"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}