[Project] Control a Dog-Like Creature with Linkbot
Introduction:
Each Linkbot is a building block. Multiple Linkbots and accessories can be easily snapped together, without special tools, to form various Linkbot systems for different tasks and projects. In this project, 2 Linkbot-I, 1 Linkbot-L, Cube Connectors, and other accessories are used to form a dog-like creature. The project demonstrates that Linkbot can be used as a building block in a complex Linkbot system.
Information:
Grades: 6 – 12
Duration: 1-4 Hours
Level: Intermediate
Parts Used in the Project:
2 Linkbot-I
1 Linkbot-L (used for a mouth, you can replace it by Linkbot-I)
1 Linkbot Dongle (or another Linkbot as Dongle)
2 4” wheels
11 Cube Connectors
1 Gripper Pair
4 Bridge Connectors
1 Ball Caster
23 Snap Connectors
Setup:
Joint 3 of robot1 and joint 1 of robot2 are connected to the Cube Connector as shown in the figure. A pair of grippers are used as a mouth for the dog.
Programming the dog in Ch:
A Ch program dog.ch can be used to control this dog creature. The member function robot.moveJoint() is used to control the movement of a joint. The non-blocking member function robot.moveJointNB() is used to control two join motions at once, with the member function robot.moveWait() for synchronization of motions for two joints.
/* File: dog.ch
Drive a dog robot with two linkbots
and use a gripper as a mouth.
Joint 3 of robot1 and joint 1 of robot2
are connected to the Cube Connector */
#include <linkbot.h>
CLinkbotI robot1, robot2;
CLinkbotI mouth; // you can replace Linkbot-L by Linkbot-I
// move dog forward
robot1.moveJointNB(JOINT1, 180);
robot2.moveJoint(JOINT3, -180);
robot1.moveWait();
// turn dog to right
robot1.moveJointNB(JOINT1, 120);
robot2.moveJoint(JOINT3, 120);
robot1.moveWait();
// move dog forward
robot1.moveJointNB(JOINT1, 180);
robot2.moveJointNB(JOINT3, -180);
robot1.moveWait();
// turn head side to side
mouth.moveJoint(JOINT2, 45);
mouth.moveJoint(JOINT2, -90);
mouth.moveJoint(JOINT2, 45);
// move dog forward
robot1.moveJointNB(JOINT1, 180);
robot2.moveJoint(JOINT3, -180);
robot1.moveWait();
// open and close mouth
mouth.moveJoint(JOINT1, -45);
mouth.moveJoint(JOINT1, 45);