Learning Robot Programming with Linkbot for the Absolute Beginner Harry H. Cheng UCDavisCenterforIntegratedComputingandSTEMEducation(C-STEM) UniversityofCalifornia-Davis http://c-stem.ucdavis.edu June 6, 2015 AnyincomegeneratedfromthisbookwillgototheC-STEMfunddirectlytosupporttheC-STEMprogram. Copyright⃝c 2015byHarryH.Cheng,Allrightsreserved. Permissionisgrantedforuserstomakecopies for their own personal use or educational use. Further reproduction, or any copying of machine-readable files (including this one) to any server computer, is strictly prohibited, unless a prior approval is obtained fromtheauthor. Table of Contents Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi 1 Introduction 1 1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 RoboPlayCompetition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 MajorFeaturesofLinkbot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4 RuntheOn-BoardDemoProgramontheLinkbot . . . . . . . . . . . . . . . . . . . . . . . 6 1.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.5 PlaywithMultipleLinkbots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.5.1 PoseTeachingMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5.2 TiltDriveMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5.3 CopyCatMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5.4 UnpairtheConnectedLinkbots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.6 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2 ControllingaLinkbotUsingtheRobotControlPanel 10 2.1 TheZeroPositionsoftheLinkbot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 ii 2.1.1 TheSchematicDiagramoftheLinkbot . . . . . . . . . . . . . . . . . . . . . . . . 10 2.1.2 TheZeroPositionforaJointoftheLinkbot . . . . . . . . . . . . . . . . . . . . . . 11 2.1.3 TestingtheZeroPositionsandRelaxingMotorsofaLinkbot . . . . . . . . . . . . . 11 2.1.4 RecalibratingtheZeroPositionsoftheLinkbot . . . . . . . . . . . . . . . . . . . . 12 2.1.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.6 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2 ConnectLinkbotsfromaComputer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2.1 TheLinkbotDeviceDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.2 AddingLinkbotIDsinLinkbotLabs . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.2.4 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.2.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.3 ControlaLinkbotUsingtheRobotControlPanel . . . . . . . . . . . . . . . . . . . . . . . 16 2.3.1 TheRobotControlPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.3.2 IndividualJointandSpeedControl. . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.3.3 RollingControlforLinkbot-I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.3.4 BuzzerControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.3.5 MonitoringAccelerometerData . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.3.6 ControlMultipleLinkbots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3.8 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.4 TheColorPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3 GettingStartedWithProgrammingLinkbots 22 3.1 GetStartedwithChforComputerProgramming . . . . . . . . . . . . . . . . . . . . . . . . 22 3.1.1 GettingStartedwithChIDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.1.2 TheFirstChProgram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.1.3 EditingPrograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.4 RunningProgramsandStoppingTheirExecution . . . . . . . . . . . . . . . . . . . 24 3.1.5 OutputfromExecutionofPrograms . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.6 NewlineCharacter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.7 CopyingContentsinaProgramtoAnotherPrograminChIDE . . . . . . . . . . . . 25 3.1.8 CorrectingErrorsinPrograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.1.9 BrowsingFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.1.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.1.11 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.1.12 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2 MoveJointsRelativetotheirCurrentPositions . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.3 DriveForwardandBackwardbyAngleRelativetoitsCurrentJointPosition . . . . . . . . . 32 iii 3.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.4 MonitorJointAnglesUsingtheRobotControlPanelinDebugMode . . . . . . . . . . . . . 33 3.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.5 SettheLEDColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.6 ControltheLinkbot-L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.6.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.6.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.6.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.7 ControlaLinkbotWirelesslyWithoutConnectingwithaUSBCable . . . . . . . . . . . . 38 3.7.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.7.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.7.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4 RobotSimulationwithRoboSim 40 4.1 RoboSimGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.1.1 Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.1.2 Units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.1.3 Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.1.4 GridConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.1.5 IndividualRobotConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.1.6 PreconfiguredLinkbotConfigurations . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.1.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.1.8 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.1.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.2 RunaChProgramwithRoboSim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.3 InteractwithaRoboSimScene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.3.1 KeyboardInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.3.2 MouseInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.3.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.3.4 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.3.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5 InteractingwithaLinkbotatRuntimethroughVariablesandInput/OutputFunctions 52 5.1 UseVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 5.1.1 DeclarationofVariablesandDataTypedoubleforDecimals . . . . . . . . . . . . . 53 5.1.2 Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 iv 5.1.3 DataTypeintforIntegers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.1.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.1.5 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.1.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.2 TheOutputFunctionprintf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.2.1 PrecisionofDecimalNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.2.2 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.2.3 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.2.4 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3 InputintoProgramsUsingFunctionscanf() . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.4 MoveaDistanceforaTwo-WheelRobot . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.5 NumberLineforDistances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.6 TurnLeftandTurnRight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 5.6.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.6.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.6.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 6 WritingProgramstoControlaGroupofLinkbotstoPerformIdenticalTasks 71 6.1 ControlaGroupofLinkbotswithIdenticalMovements . . . . . . . . . . . . . . . . . . . . 71 6.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.2 ControlanArrayofLinkbotswithIdenticalMovements. . . . . . . . . . . . . . . . . . . . 74 6.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 7 WritingProgramstoControlaSingleLinkbot 78 7.1 MultipleMotionStatementsinaProgram . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 7.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 7.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 7.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 7.2 MoveJointstotheirAbsolutePositionsandResettotheZeroPositions . . . . . . . . . . . 79 7.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 7.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 7.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 7.3 GetJointAngles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 7.3.1 GetaJointAngle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 v 7.3.2 GetMultipleJointAngles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 7.3.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7.3.4 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7.3.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7.4 MoveaSingleJoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 7.4.1 MoveaSingleJointtotheAbsolutePosition . . . . . . . . . . . . . . . . . . . . . 85 7.4.2 MoveaSingleJointRelativetotheCurrentPosition . . . . . . . . . . . . . . . . . 86 7.4.3 DelaytheMotionofaLinkbotUsingtheMemberFunctiondelaySeconds() . . . . . 86 7.4.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 7.4.5 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 7.4.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 7.5 GetandSetJointSpeeds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 7.5.1 GetandSetaJointSpeed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 7.5.2 GetandSetJointSpeeds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 7.5.3 GetandSetaJointSpeedRatio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 7.5.4 GetandSetJointSpeedRatios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.5.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 7.5.6 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7.5.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7.6 zConvertUnitsofAnglesbetweenDegreesandRadians . . . . . . . . . . . . . . . . . . . 94 7.6.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 7.6.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 7.6.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 8 WritingAdvancedProgramstoControlaSingleLinkbot 97 8.1 PlotaCurveUsingthePlottingMemberFunctionsscattern()anddata2DCurve() . . . . . 97 8.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 8.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 8.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 8.2 PlotRecordedJointAnglesandTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 8.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 8.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 8.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 8.3 MoveJointswithaSpecifiedTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 8.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 8.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 8.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 8.4 HoldtheJointsAtExit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 8.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 8.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 8.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 8.5 MeasuretheClockTimeUsingtheMemberFunctionsystemTime() . . . . . . . . . . . . . 111 8.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 8.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 8.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 vi 9 ControllingaLinkbot-IasaTwo-WheelRobot 114 9.1 MoveaTwo-WheelRobotwiththeSpecifiedDistance . . . . . . . . . . . . . . . . . . . . 115 9.1.1 MoveaTwo-WheelRobotwiththeSpecifiedSpeed,JointAngles,andDistance . . 115 9.1.2 Control a Linkbot-I with the Speed and Distance Input from the User Using the Functionscanf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 9.1.3 EstimatetheErrorinDistanceandUsetheFunctiongetDistance(). . . . . . . . . . 117 9.1.4 zUsetheFunctionsdistance2angle()andangle2distance() . . . . . . . . . . . . . 119 9.1.5 GettheTimeforaTwo-WheelRobottoCompleteitsMovementwiththeSpecified SpeedandDistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 9.1.6 PlotDistancesversusTimeforaTwo-WheelLinkbot-IwiththeSpecifiedSpeedand Distance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 9.1.7 PlotRobotDistanceinNumberLine . . . . . . . . . . . . . . . . . . . . . . . . . . 127 9.1.8 PlotDistancesversusTimewithanOffsetfortheInitialPosition . . . . . . . . . . . 129 9.1.9 PlotRobotDistancesinNumberLinewithanOffsetfortheInitialPosition . . . . . 132 9.1.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 9.1.11 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 9.1.12 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 9.2 MoveaTwo-WheelRobotwiththeSpecifiedTime . . . . . . . . . . . . . . . . . . . . . . 139 9.2.1 ControlaLinkbot-IwiththeSpeedandTimeInputfromtheUserUsingtheFunction scanf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 9.2.2 GettheMovedDistanceBasedontheSpecifiedSpeedandTime . . . . . . . . . . . 140 9.2.3 PlotDistancesversusTimeforaTwo-WheelLinkbot-IwiththeSpecifiedSpeedand Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 9.2.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 9.2.5 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 9.2.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 9.3 UseDifferentUnitsforSpeed,Radius,andDistance. . . . . . . . . . . . . . . . . . . . . . 145 9.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 9.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 9.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 10 MovingaSingleRobotinaCoordinateSysteminRoboSim 149 10.1 MoveaLinkbot-IinaCoordinateSystem . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 10.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 10.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 10.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 10.2 MoveaLinkbot-IAlongaTrajectory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 10.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 10.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 10.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 10.3 TracethePositionsofaLinkbot-I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 10.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.4 RecordthePositionsofaLinkbot-I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 10.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 10.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 vii 10.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 10.5 CreateanObstacleCoursewithPoints,Lines,andTextonaRoboSimScene. . . . . . . . . 172 10.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 10.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 10.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 11 SensoryInformationforaLinkbot 179 11.1 SetandGettheLEDColorbyNameUsingtheDataTypestring t . . . . . . . . . . . . . . 179 11.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 11.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 11.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 11.2 SetandGettheLEDColorbyRGBValues . . . . . . . . . . . . . . . . . . . . . . . . . . 181 11.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 11.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 11.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 11.3 SettheBuzzerFrequencyofaLinkbot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 11.3.1 SettheBuzzertoaSpecifiedFrequency . . . . . . . . . . . . . . . . . . . . . . . . 185 11.3.2 SettheBuzzerMultipleTimesUsingawhileLoopwithaUserSpecifiedFrequency 186 11.3.3 ChangetheBuzzerFrequencyaPredeterminedNumberofTimes . . . . . . . . . . 187 11.3.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 11.3.5 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 11.3.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 11.4 GettheAccelerometerData. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 11.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 11.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 11.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 11.5 GettheBatteryVoltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 11.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 11.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 11.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 12 WritingProgramstoControlMultipleIndividualLinkbots 196 12.1 ControlMultipleLinkbotsUsingtheRobotControlPanel . . . . . . . . . . . . . . . . . . . 196 12.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 12.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 12.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 12.2 ControlMultipleLinkbotsUsingaProgram . . . . . . . . . . . . . . . . . . . . . . . . . . 197 12.2.1 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 12.2.2 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 12.2.3 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 12.3 BlockingversusNon-BlockingFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 12.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 12.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 12.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 12.4 SynchronizetheMotionofMultipleLinkbots . . . . . . . . . . . . . . . . . . . . . . . . . 202 12.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 12.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 viii 12.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 12.5 MoveMultipleLinkbotswithSpecifiedDistancesorJointAngles . . . . . . . . . . . . . . 207 12.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 12.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 12.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 12.6 PlotRecordedDistancesandTimeforMultipleLinkbots . . . . . . . . . . . . . . . . . . . 211 12.6.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 12.6.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 12.6.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 12.7 MoveMultipleLinkbotswithSpecifiedTime . . . . . . . . . . . . . . . . . . . . . . . . . 216 12.7.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 12.7.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 12.7.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 12.8 MoveMultipleLinkbotsForever . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 12.8.1 ABatonPassingRobotRelayRace . . . . . . . . . . . . . . . . . . . . . . . . . . 226 12.8.2 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 12.8.3 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 12.8.4 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 12.9 PlotRecordedDistancesandTimeforMultipleLinkbotswithanOffsetfortheDistance . . 230 12.9.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 12.9.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 12.9.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 12.10zCopyMotionsofaControllerLinkbottoaControlledLinkbot . . . . . . . . . . . . . . . 239 12.10.1RepeatActionsUsingawhileLoop . . . . . . . . . . . . . . . . . . . . . . . . . . 239 12.10.2Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 12.10.3Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 12.10.4Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 13 MovingMultipleRobotsinaCoordinateSysteminRoboSim 244 13.1 MoveMultipleLinkbot-IsinaCoordinateSystem . . . . . . . . . . . . . . . . . . . . . . . 244 13.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 13.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 13.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 13.2 TraceandRecordthePositionsofMultipleLinkbot-Is . . . . . . . . . . . . . . . . . . . . 248 13.2.1 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 13.3 MoveMultipleLinkbot-IsAlongDifferentTrajectories . . . . . . . . . . . . . . . . . . . . 253 13.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 13.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 13.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 14 WritingProgramstoControlOneorMultipleGroupsofLinkbots 260 14.1 CopyMotionsfromOneLinkbottoMultipleLinkbotswithIdenticalMovements . . . . . . 260 14.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 14.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 14.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 14.2 ControlMultipleGroupsofLinkbots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 14.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 ix 14.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 14.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 15 ControllingMultipleConnectedLinkbots 268 15.1 ControlMultipleConnectedLinkbots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 15.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 15.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 15.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 15.2 ControlMultipleConnectedLinkbot-Ls . . . . . . . . . . . . . . . . . . . . . . . . . . 277 15.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 15.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 15.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 15.3 ControlaGroupofConnectedLinkbotswithIdenticalMovements . . . . . . . . . . . . 296 15.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 15.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 15.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 Appendix 304 A UsingAdvancedProgrammingFeatures 305 A.1 MakeaDecisionUsinganifandelseif Statements . . . . . . . . . . . . . . . . . . . . . . 305 A.2 Useawhile-LoopforRepeatingMotions . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 A.3 Useafor-LoopforRepeatingMotions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 A.4 UseaFunctionwithanArgumentof theCLinkbotIClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 A.4.1 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 B ColorsAvailableforUsewiththeMemberFunctionssetLEDColor()andgetLEDColor() 312 C QuickReferencestoCh 316 C.1 ReservedKeywordsandNames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 C.2 Punctuators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 C.3 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 C.4 HeaderFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 C.5 DeclarationofVariablesforIntegersandDecimals . . . . . . . . . . . . . . . . . . . . . . 317 C.6 DeclarationofFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 C.7 Theif-elseStatement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 C.8 ThewhileLoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 C.9 InputFunctionscanf()andOutputFunctionprintf() . . . . . . . . . . . . . . . . . . . . . 317 C.10 MathOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 C.11 RelationalOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 C.12 MathFunctionsabs(),sqrt(),pow(),andandhypot() . . . . . . . . . . . . . . . . . . . . . 318 C.13 MemberFunctionsofthePlottingClassCPlot . . . . . . . . . . . . . . . . . . . . . . . . . 318
Description: