{"id":415,"date":"2019-04-06T03:19:47","date_gmt":"2019-04-06T03:19:47","guid":{"rendered":"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/?p=415"},"modified":"2019-12-13T22:24:53","modified_gmt":"2019-12-13T22:24:53","slug":"actuation-subsystem","status":"publish","type":"post","link":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/2019\/04\/06\/actuation-subsystem\/","title":{"rendered":"Actuation Subsystem"},"content":{"rendered":"<p>The actuating subsystem receives the output positions from the processing subsystem, and actuates the hip joint to the desired positions. The actuating subsystem contains DC brushless motors, gearboxes, motor drivers, and power supply. DC brushless motors and gearboxes are chosen according to the output torque and rotation speed they can provide, as well as their prices. Motor drivers are set up with motors\u2019 parameters and switched to position control model. Power supply is off board for the safety considerations.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-416 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/fla-225x300.png\" alt=\"\" width=\"225\" height=\"300\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/fla-225x300.png 225w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/fla-768x1024.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/fla.png 864w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/p>\n<p style=\"text-align: center\"><span style=\"text-decoration: underline\">Fig1: Desktop rig<\/span><\/p>\n<ol>\n<li>Interfaced AMC controller with a DC Brushed motor and implemented position control.<\/li>\n<li>Using the demo actuator to show that the torque is enough for lifting human\u2019s leg.<\/li>\n<li>Final Components selection:<\/li>\n<\/ol>\n<p>Motor: T-motor U8 lite KV100 DC brushless motor<\/p>\n<p>Gearbox: two 1:5 Matex gearboxes to reach 1:25 gear ratio<\/p>\n<p>Controller: RoboteQ sbl2360<\/p>\n<ol start=\"4\">\n<li>Current work is going through the tutorials and ROS package of the RoboteQ controller.<\/li>\n<\/ol>\n<p><strong>Update on Actuation Subsystem:<\/strong><\/p>\n<p><span style=\"font-weight: 400\">The actuation subsystem consists of the components shown in Figure 2. The power is transferred from a 48V power supply to our power distribution PCB, and then to a RoboTEQ SBL2360 motor controllers. The controllers implement position controller to drive T-motor U8 lite KV100 DC brushless motors to desired positions. The motors output torques through Matex gearboxes. For the HAA joint, we use a 1:5 gearbox to drive, while for the HFE joint, we use two 1:5 gearboxes to realize a 1:25 gear ratio.<\/span><\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-457\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/8-1-300x96.png\" alt=\"\" width=\"556\" height=\"178\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/8-1-300x96.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/8-1-768x245.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/8-1-1024x327.png 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/8-1.png 1600w\" sizes=\"auto, (max-width: 556px) 100vw, 556px\" \/><\/p>\n<p style=\"text-align: center\"><span style=\"text-decoration: underline\">Figure 2: Components of Actuation Subsystem<\/span><\/p>\n<p><span style=\"font-weight: 400\">During this semester, we finished a mock demo of the actuating subsystem using a Maxon DC brushed motor, a 1:20 ratio gearbox and an AMC motor controller. We implemented a position control to the motor to drive the thigh link through a GUI. From this demo, we roughly validated that our motor can generate enough torque to lift a person\u2019s leg. The AMC controller needs to interface with the on-board computer through EtherCAT, which is not compatible with ROS so we were unable to move forward with these controllers. \u00a0We decided to switch to RoboTEQ SBL2360 DC brushless motor. Currently, we are able to power and use the controller to implement open loop control through a software GUI. We have also been able to get the available ROS package to integrate into our system.<\/span><\/p>\n<p><strong>Sep 12 2019<\/strong><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Controller configuration and motor control\u00a0 through GUI<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Using the RoboRun software, we configured the parameters of motor, feedback sensor, controller mode, and control gains. With the help of RoboTEQ technical support, we were able to do open loop control and spin the motor. In open loop control, the controller feeds constant power to the motor and actuate the motor at constant velocity with zero load. We then tried the closed loop position control with absolute encoder as feedback sensor. After naively tuning the PID gain, the motor can track the command position. We confirmed the position control by comparing the feedback signal provided by the encoder and the command position, and finding that they are the same.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-617 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/act1.png\" alt=\"\" width=\"442\" height=\"331\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/act1.png 298w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/act1-285x214.png 285w\" sizes=\"auto, (max-width: 442px) 100vw, 442px\" \/><\/p>\n<p style=\"text-align: center\"><span style=\"text-decoration: underline\">Figure 3: Motor control through the GUI<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Explore RS232 connection<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">We checked the user manual of the RoboTEQ controller, and followed the RS232 connection shown in <\/span><span style=\"font-weight: 400\">Figure 2. <\/span><span style=\"font-weight: 400\">We connected the RS232 to the laptop through a RS232 to USB convertor.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-618 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/act2.png\" alt=\"\" width=\"430\" height=\"400\" \/><\/p>\n<p style=\"text-align: center\"><span style=\"text-decoration: underline\">Figure 4: RS232 connection with PC<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Sep 25 2019<\/strong><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Controller interface with ROS through an open source package<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">We looked up the user manual of the RoboTEQ controller for the serial command for motor\u2019s position control. We tested the serial command we found using the Windows GUI and validated that the command can actuate the motor to certain positions. We changed the SSI encoder configuration from \u201cabsolute\u201d to \u201crelative\u201d in Windows GUI, which solved the problem that the motor was only able to spin between 0 and 360 degrees (one turn). We then were able to spin the motor to any position through the Window GUI.<\/span><\/p>\n<p><span style=\"font-weight: 400\">We then modified an open source package for RoboTEQ controller by changing the serial commands sent to the controller as well as the structure of the input. Finally, we are able to send desired commands to the controller through ROS<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Performed position control in ROS<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">If the difference between the desired position and current position is big, the error input of the PID controller will be big. Sometime the controller cannot handle this big difference and actuate the motor to a \u201cfar\u201d position, so the controller stops working. Given a desired position and the current position, if the difference is too big, we performed a linear interpolation that divided the big difference into small differences, and published commands step by step. The controller can handle the small differences and actuated the motor smoothly after the modification.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Oct 10 2019<\/strong><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Integrated functions for sending serial commands to ROS<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Since the open source package doesn\u2019t work when two motors are connected to the same controller, which is what we need. We started to use a function based on C++ boost library for sending serial commands, provided by our TA Grant. We solved the environment compile issue and integrated the function into our ROS pipeline. We modified the functions to send the serial command we looked up and found useful from the controller user manual.<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Controller two motors using one motor controller<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">After switching to new functions for sending serial commands, we were also to control two motors using one motor controller.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-619 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/act3.png\" alt=\"\" width=\"350\" height=\"466\" \/><\/p>\n<p style=\"text-align: center\"><span style=\"text-decoration: underline\">Figure 5: Connection of one controller and two motors<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Oct 24 2019<\/strong><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Tuning the PID gains and speed limit to mitigate the \u201cshort\u201d issue<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">We found that the \u201cshort\u201d issue was caused by the big current generated at the start of the actuation. We tuned the PID gains and reduce the limit of speed and acceleration, which mitigated the \u201cshort\u201d issue, and make the motor actuate stabler.<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Controller two motors using one motor controller<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">We connected the actuator with the mechanical link, tuned the parameters of the controller to make it able to actuate the leg links. We also validated that the motor can generate enough torque using a pull force sensor.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-620 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/act4-169x300.png\" alt=\"\" width=\"347\" height=\"616\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/act4-169x300.png 169w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/act4.png 235w\" sizes=\"auto, (max-width: 347px) 100vw, 347px\" \/><\/p>\n<p style=\"text-align: center\"><span style=\"text-decoration: underline\">Figure 6: Connection between the actuator and leg link<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Nov 7 2019<\/strong><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Connected motor controller package to processing subsystem<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">We played a bag file containing the desired commands calculated by the processing subsystem as the input to the actuation subsystems. We kept modified parameters for the motor controller to make the whole process stable. We plotted the desired commands and motor commands together to validate that the motor can track the desired commands.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-621 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/act5-300x170.png\" alt=\"\" width=\"445\" height=\"252\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/act5-300x170.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-content\/uploads\/sites\/32\/2019\/04\/act5.png 415w\" sizes=\"auto, (max-width: 445px) 100vw, 445px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center\"><span style=\"text-decoration: underline\">Figure \u00a07: Actuating using the commands from processing subsystem<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Implemented free spin function<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">For the exoskeleton we plan to actuate the motors when the leg is in swing. However, when the leg is in stance, the person should be able to move the motors. To have this capability we need to put the motors into a mode such that they can free spin. There are three commands we can send to the motor controllers to stop the motors. There is safety stop, emergency stop, and motor stop (aka deadman switch). Safety stop and motor stop, stop the motors from moving further, however the commands cause the motors to hold their last position. Emergency stop cuts power to the motors which allows them to be rotated freely, which is the behavior we want.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The actuating subsystem receives the output positions from the processing subsystem, and actuates the hip joint to the desired positions. The actuating subsystem contains DC brushless motors, gearboxes, motor drivers, and power supply. DC brushless motors and gearboxes are chosen according to the output torque and rotation speed they can provide, as well as their <a href=\"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/2019\/04\/06\/actuation-subsystem\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Actuation Subsystem<\/span>[&hellip;]<\/a><\/p>\n","protected":false},"author":141,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"class_list":["post-415","post","type-post","status-publish","format-standard","hentry","category-actuation-subsystem"],"_links":{"self":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-json\/wp\/v2\/posts\/415","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-json\/wp\/v2\/users\/141"}],"replies":[{"embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-json\/wp\/v2\/comments?post=415"}],"version-history":[{"count":3,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-json\/wp\/v2\/posts\/415\/revisions"}],"predecessor-version":[{"id":622,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-json\/wp\/v2\/posts\/415\/revisions\/622"}],"wp:attachment":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-json\/wp\/v2\/media?parent=415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-json\/wp\/v2\/categories?post=415"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2018teamb\/wp-json\/wp\/v2\/tags?post=415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}