In this activity, you will add cyber:bot navigation techniques to make the cyber:bot robot roll to, pick up, move, and set down objects. The example scripts will control the Feedback 360° servos much like the normal continuous rotation servos, by setting speeds for certain run times. In the next activity after this one, you use the distance travel features that are only available with the Feedback 360° servos.
(1) cyber:bot with gripper installed, and tested and tuned by following the Parts, Circuit, Script and Tests sections in the previous activity.
This script rolls forward for 0.5 seconds, picks up an object, rolls forward for another 1.25 seconds, sets down the object, backs up for 0.5 seconds, and then stops.
cyber_bot_gripper_forward_object_with_fb360.hex [1]
The script was created by entering the text below into the python.microbit.org/v/2 [2] editor. The cyberbot and feedback360 modules were also added to the Project Files as shown in Add modules to your micro:bit [3]. The Script Name was set to cyber_bot_gripper_forward_object_with_fb360 before saving it as a .hex file as shown in How to Save and Reopen a Script in Python Editor v2 [4].
# cyber_bot_gripper_forward_object_with_fb360 from cyberbot import * from feedback360 import * drive.connect() display.show(Image.ARROW_E) while True: if button_b.was_pressed(): display.clear() bot(15).servo_angle(150) # lower & open gripper sleep(1500) drive.speed(64, 64) # Forward 0.5 s sleep(500) drive.speed(0, 0) sleep(1000) bot(15).servo_angle(30) # Close gripper & lift sleep(1500) drive.speed(64, 64) # Forward 1.25 s sleep(1250) drive.speed(0, 0) sleep(1000) bot(15).servo_angle(150) # Lower & open gripper sleep(1500) drive.speed(-64, -64) # Backward 0.5 s sleep(500) drive.speed(0, 0) display.show(Image.ARROW_E)
Feedback 360° servos correct to match each other’s speed, so there is no need to adjust for speed differences that would cause significant curving in the navigation. That is only a symptom of non-feedback continuous rotation servos. That isn't to say that there will be no curving at all, but any curving you observe is going to more likely be a result of things like slop in the angle of the servo’s output spline, subtle bends in the chassis, and slight slippages accumulating over distances.
After importing the cyberbot feedback 360 modules, starting the feedback360.drive system with drive.connect(), and pointing toward the B button, the script goes into an endless while True: loop that monitors the micro:bit module’s B button.
# cyber_bot_gripper_forward_object_with_fb360 from cyberbot import * from feedback360 import * drive.connect() display.show(Image.ARROW_E) while True:
If the B button was pressed, the cyber:bot starts by rolling forward at 64 increments per second for ½ a second, then stops. An increment is a 64th of a turn, so it means the wheel is turning one revolution per second, or 60 revolutions per minute (RPM).
The routine is appended with a sleep(1000) call to make sure the cyber:bot has completely come to rest. Once at full stop, the script uses bot(15).servo_angle(30) to close the Gripper. It is followed by sleep(1500) to give the gripper time to close and lift, and also to make a slight pause between picking up the object and starting to move.
if button_b.was_pressed(): display.clear() bot(15).servo_angle(150) # lower & open gripper sleep(1500) drive.speed(64, 64) # Forward 0.5 s sleep(500) drive.speed(0, 0) sleep(1000) bot(15).servo_angle(30) # close gripper & lift sleep(1500)
After lifting the object, this part of the script makes the cyber:bot roll forward for 1.25 s. Then, it lowers and opens the Gripper, setting down the object.
drive.speed(64, 64) # Forward 1.25 s sleep(1250) drive.speed(0, 0) sleep(1000) bot(15).servo_angle(150) # Lower & open gripper sleep(1500)
Finally, it backs up for 0.5 s so that the object is no longer between the Gripper paddles.
drive.speed(-64, -64) # Backward 0.5 s sleep(500) drive.speed(0, 0) display.show(Image.ARROW_E)
Let's add a button A feature to make the cyber:bot take an object and place it back where it started before you pressed button B.
Your Gripper-equipped cyber:bot with Feedback 360° servos is by no means limited to forward and backward. With some modifications to the script, you can add any of the turns introduced in the Upgrade Your cyber:bot with Feedback 360 Servos [5] project’s Maneuvers with Speed Control [6] and More Turning Maneuvers [7] activities.
Links
[1] https://learn.parallax.com/sites/default/files/content/cyberbot/GripperF360/Hex/cyber_bot_gripper_forward_object_with_fb360.hex
[2] https://python.microbit.org/v/2
[3] https://learn.parallax.com/tutorials/robot/cyberbot/add-modules-your-microbit
[4] https://learn.parallax.com/tutorials/robot/cyberbot/how-save-and-reopen-script-python-editor-v2
[5] https://learn.parallax.com/tutorials/robot/cyberbot/upgrade-your-cyberbot-feedback-360-servos
[6] https://learn.parallax.com/tutorials/robot/cyberbot/upgrade-your-cyberbot-feedback-360-servos/maneuvers-speed-control
[7] https://learn.parallax.com/tutorials/robot/cyberbot/upgrade-your-cyberbot-feedback-360-servos/maneuvers-speed-control/more