Learning Robot Programming with Linkbot for the Absolute Beginner 7th Edition Harry H. Cheng UCDavisCenterforIntegratedComputingandSTEMEducation(C-STEM) UniversityofCalifornia-Davis http://c-stem.ucdavis.edu February 16, 2018 Copyright ⃝c 2012-2018 by Harry H. Cheng, All rights reserved. Permission is granted for users to make copies 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 obtainedfromtheauthor. Table of Contents Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii 1 Introduction 1 1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 C-STEMStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3 RoboPlayCompetition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4 MajorFeaturesofLinkbot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5 RuntheOn-BoardDemoProgramontheLinkbot . . . . . . . . . . . . . . . . . . . . . . . 8 1.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6 PlaywithMultipleLinkbots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6.1 PoseTeachingMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.6.2 TiltDriveMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.6.3 CopyCatMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.6.4 UnpairtheConnectedLinkbots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.6.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.6.6 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 ii 1.6.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2 ControllingaLinkbotUsingtheRobotControlPanel 12 2.1 TheZeroPositionsoftheLinkbot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.1 TheSchematicDiagramoftheLinkbot . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.2 TheZeroPositionforaJointoftheLinkbot . . . . . . . . . . . . . . . . . . . . . . 13 2.1.3 TestingtheZeroPositionsandRelaxingMotorsofaLinkbot . . . . . . . . . . . . . 13 2.1.4 RecalibratingtheZeroPositionsoftheLinkbot . . . . . . . . . . . . . . . . . . . . 14 2.1.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.1.6 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.1.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.2 ConnectLinkbotsfromaComputer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.2.1 TheLinkbotDeviceDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.2.2 AddingLinkbotIDsinLinkbotLabs . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.4 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.3 ControlaLinkbotUsingtheRobotControlPanel . . . . . . . . . . . . . . . . . . . . . . . 18 2.3.1 TheRobotControlPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.3.2 IndividualJointandSpeedControl. . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3.3 RollingControlforLinkbot-I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3.4 BuzzerControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3.5 MonitoringAccelerometerData . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3.6 ControlMultipleLinkbots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3.8 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.4 TheColorPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3 GettingStartedWithProgrammingLinkbots 25 3.1 GetStartedwithChforComputerProgramming . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.1 GettingStartedwithChIDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.2 CopyCodeinCurriculum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.1.3 TheFirstChProgram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.1.4 OpeningProgramsinChIDEfromWindowsExplorer . . . . . . . . . . . . . . . . 28 3.1.5 EditingPrograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.1.6 RunningProgramsandStoppingTheirExecution . . . . . . . . . . . . . . . . . . . 29 3.1.7 OutputfromExecutionofPrograms . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.1.8 NewlineCharacter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.1.9 CopyingaProgramtoAnotherPrograminC-STEMStudio . . . . . . . . . . . . . 30 3.1.10 CorrectingErrorsinPrograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.1.11 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.1.12 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.1.13 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 iii 3.2 DriveForwardandBackwardbyAngleRelativetoitsCurrentJointPosition . . . . . . . . . 34 3.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.3 MonitorJointAnglesUsingtheRobotControlPanelinDebugMode . . . . . . . . . . . . . 36 3.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.4 DriveaDistanceforaTwo-WheelRobot . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.5 SettheLEDColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.6 PlayMelody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.6.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.6.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.6.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.7 ControlaLinkbotWirelesslyWithoutConnectingwithaUSBCable . . . . . . . . . . . . 43 3.7.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.7.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.7.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4 RobotSimulationwithRoboSim 44 4.1 RoboSimGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.1.1 Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.1.2 Units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.1.3 Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.1.4 GridConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.1.5 IndividualRobotConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.1.6 Pre-ConfiguredRobots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.1.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.1.8 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.1.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.2 RunaChProgramwithRoboSim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.3 InteractwithaRoboSimScene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.3.1 KeyboardInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.3.2 MouseInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.3.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 4.3.4 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 4.3.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 iv 5 UsingVariablesandGeneratingRobotProgramsUsingRoboBlockly 58 5.1 UseVariablesandDriveaDistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.1.1 DeclarationofVariablesandDataTypedoubleforDecimals . . . . . . . . . . . . . 59 5.1.2 Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.1.3 DataTypeintforIntegers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.1.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.1.5 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.1.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.2 TurnLeftandTurnRight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.3 RobotSimulationandGeneratingRobotProgramswithRoboBlockly . . . . . . . . . . . . 64 5.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6 InteractingwithaLinkbotatRuntimethroughVariablesandInput/OutputFunctions 69 6.1 TheOutputFunctionprintf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 6.1.1 PrecisionofDecimalNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.1.2 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.1.3 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.1.4 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.2 InputintoProgramsUsingFunctionscanf() . . . . . . . . . . . . . . . . . . . . . . . . . . 74 6.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.3 NumberLineforDistances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 6.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 6.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 7 WritingProgramstoControlaGroupofLinkbotstoPerformIdenticalTasks 82 7.1 ControlaGroupofLinkbotswithIdenticalMovements . . . . . . . . . . . . . . . . . . . . 82 7.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7.2 ControlanArrayofLinkbotswithIdenticalMovements. . . . . . . . . . . . . . . . . . . . 85 7.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 7.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 7.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 8 ControllingaLinkbot-IasaTwo-WheelRobot 89 8.1 MoveaTwo-WheelRobotwiththeSpecifiedDistance . . . . . . . . . . . . . . . . . . . . 89 8.1.1 MoveaTwo-WheelRobotwiththeSpecifiedSpeed,JointAngles,andDistance . . 89 v 8.1.2 Control a Linkbot-I with the Speed and Distance Input from the User Using the Functionscanf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 8.1.3 EstimatetheErrorinDistanceandUsetheMemberFunctiongetDistance() . . . . . 92 8.1.4 zUsetheFunctionsdistance2angle()andangle2distance() . . . . . . . . . . . . . 94 8.1.5 MeasuretheClockTimeUsingtheMemberFunctionsystemTime() . . . . . . . . . 96 8.1.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 8.1.7 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 8.1.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 8.2 PlotaCurveUsingthePlottingMemberFunctionsscattern()anddata2DCurve() . . . . . 98 8.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 8.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 8.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 8.3 PlotDistancesversusTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 8.3.1 PlotDistancesversusTimeforaTwo-WheelLinkbot-IwiththeSpecifiedSpeedand Distance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 8.3.2 PlotRobotDistanceinNumberLine . . . . . . . . . . . . . . . . . . . . . . . . . . 109 8.3.3 PlotDistancesversusTimewithanOffsetfortheInitialPosition . . . . . . . . . . . 112 8.3.4 PlotRobotDistancesinNumberLinewithanOffsetfortheInitialPosition . . . . . 116 8.3.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 8.3.6 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 8.3.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 8.4 MoveaTwo-WheelRobotwiththeSpecifiedTime . . . . . . . . . . . . . . . . . . . . . . 123 8.4.1 ControlaLinkbot-IwiththeSpeedandTimeInputfromtheUserUsingtheFunction scanf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 8.4.2 GettheMovedDistanceBasedontheSpecifiedSpeedandTime . . . . . . . . . . . 124 8.4.3 PlotDistancesversusTimeforaTwo-WheelLinkbot-IwiththeSpecifiedSpeedand Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 8.4.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 8.4.5 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 8.4.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 8.5 UseDifferentUnitsforSpeed,Radius,andDistance. . . . . . . . . . . . . . . . . . . . . . 129 8.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 8.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 8.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 9 MovingaSingleRobotinaCoordinateSystem 134 9.1 MoveaLinkbot-IinaCoordinateSystem . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 9.1.1 MoveaLinkbot-IinaCoordinateSystem . . . . . . . . . . . . . . . . . . . . . . . 134 9.1.2 MoveaHardwareLinkbot-INotStartinginitsDefaultInitialPosition . . . . . . . . 136 9.1.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 9.1.4 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 9.1.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 9.2 PlotPositionsofaRobot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 9.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 9.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 9.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 9.3 MoveaLinkbot-IAlongaTrajectory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 vi 9.3.1 MoveaLinkbot-IAlongaTrajectoryUsinganExpression . . . . . . . . . . . . . . 149 9.3.2 MoveaLinkbot-IAlongaTrajectoryUsingaFunction . . . . . . . . . . . . . . . . 151 9.3.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 9.3.4 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 9.3.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 9.4 TracethePositionsofaLinkbot-IinRoboSim . . . . . . . . . . . . . . . . . . . . . . . . . 156 9.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9.5 RecordthePositionsofaLinkbot-I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 9.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 9.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 9.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 9.6 CreateanObstacleCoursewithPoints,Lines,andTextonaRoboSimScene. . . . . . . . . 161 9.6.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 9.6.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 9.6.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 10 WritingProgramstoControlaSingleLinkbot 168 10.1 MoveJointsRelativetotheirCurrentPositions . . . . . . . . . . . . . . . . . . . . . . . . 168 10.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 10.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 10.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 10.2 MultipleMotionStatementsinaProgram . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 10.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 10.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 10.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 10.3 MoveJointstotheirAbsolutePositionsandResettotheZeroPositions . . . . . . . . . . . 171 10.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 10.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 10.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 10.4 ControltheLinkbot-L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 10.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 10.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 10.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 10.5 GetJointAngles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 10.5.1 GetaJointAngle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 10.5.2 GetMultipleJointAngles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 10.5.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 10.5.4 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 10.5.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 10.6 MoveaSingleJoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 10.6.1 MoveaSingleJointtotheAbsolutePosition . . . . . . . . . . . . . . . . . . . . . 177 10.6.2 MoveaSingleJointRelativetotheCurrentPosition . . . . . . . . . . . . . . . . . 178 10.6.3 DelaytheMotionofaLinkbotUsingtheMemberFunctiondelaySeconds() . . . . . 178 10.6.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 10.6.5 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 vii 10.6.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 10.7 GetandSetJointSpeeds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 10.7.1 GetandSetaJointSpeed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 10.7.2 GetandSetJointSpeeds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 10.7.3 GetandSetaJointAngularSpeedRatio . . . . . . . . . . . . . . . . . . . . . . . . 183 10.7.4 GetandSetJointSpeedRatios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 10.7.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 10.7.6 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 10.7.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 10.8 zConvertUnitsofAnglesbetweenDegreesandRadians . . . . . . . . . . . . . . . . . . . 187 10.8.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 10.8.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 10.8.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 11 WritingAdvancedProgramstoControlaSingleLinkbot 190 11.1 PlotRecordedJointAnglesandTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 11.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 11.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 11.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 11.2 MoveJointswithaSpecifiedTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 11.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 11.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 11.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 11.3 HoldtheJointsAtExit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 11.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 11.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 11.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 11.4 MeasuretheClockTimeforMovingaJointUsingtheMemberFunctionsystemTime() . . . 199 11.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 11.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 11.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 12 SensoryInformationforaLinkbot 201 12.1 SetandGettheLEDColorbyNameUsingtheDataTypestring t . . . . . . . . . . . . . . 201 12.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 12.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 12.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 12.2 SetandGettheLEDColorbyRGBValues . . . . . . . . . . . . . . . . . . . . . . . . . . 203 12.2.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 12.2.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 12.2.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 12.3 SettheBuzzerFrequencyofaRobot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 12.3.1 SettheBuzzertoaSpecifiedFrequency . . . . . . . . . . . . . . . . . . . . . . . . 207 12.3.2 SettheBuzzerMultipleTimesUsingawhileLoopwithaUserSpecifiedFrequency 208 12.3.3 ChangetheBuzzerFrequencyforaPredeterminedNumberofTimes . . . . . . . . 209 12.3.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 12.3.5 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 viii 12.3.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 12.4 SettheBuzzerstoSpecifiedFrequenciesforMultipleRobots . . . . . . . . . . . . . . . . . 211 12.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 12.4.2 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 12.5 PlayMelodyandDriveaRobotattheSameTime . . . . . . . . . . . . . . . . . . . . . . 212 12.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 12.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 12.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 12.6 PlayMelodieswithMultipleRobots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 12.6.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 12.6.2 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 12.7 PlayMusicNotesandCreateMelodyFiles . . . . . . . . . . . . . . . . . . . . . . . . . . 216 12.7.1 MusicBasics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 12.7.2 DefiningaMusicNoteinCh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 12.7.3 PlayinganArrayofMusicNotes. . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 12.7.4 WriteandPlayCustomizedMelodyFiles . . . . . . . . . . . . . . . . . . . . . . . 219 12.7.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 12.7.6 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 12.7.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 12.8 PlayMusicNoteswithMultipleRobots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 12.8.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 12.8.2 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 12.9 GettheAccelerometerData. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 12.9.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 12.9.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 12.9.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 12.10GettheBatteryVoltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 12.10.1Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 12.10.2Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 12.10.3Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 13 WritingProgramstoControlMultipleIndividualLinkbots 229 13.1 ControlMultipleLinkbotsUsingtheRobotControlPanel . . . . . . . . . . . . . . . . . . . 229 13.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 13.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 13.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 13.2 ControlMultipleLinkbotsUsingaProgram . . . . . . . . . . . . . . . . . . . . . . . . . . 230 13.2.1 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 13.2.2 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 13.2.3 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 13.3 BlockingversusNon-BlockingFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 13.3.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 13.3.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 13.3.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 13.4 RecordandPlotTwoJointAnglesversusTime . . . . . . . . . . . . . . . . . . . . . . . . 235 13.4.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 13.4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 ix 13.4.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 13.5 SynchronizetheMotionofMultipleLinkbots . . . . . . . . . . . . . . . . . . . . . . . . . 240 13.5.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 13.5.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 13.5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 13.6 MoveMultipleLinkbotswithSpecifiedDistancesorJointAngles . . . . . . . . . . . . . . 244 13.6.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 13.6.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 13.6.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 13.7 PlotRecordedDistancesandTimeforMultipleLinkbots . . . . . . . . . . . . . . . . . . . 248 13.7.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 13.7.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 13.7.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 13.8 MoveMultipleLinkbotswithSpecifiedTime . . . . . . . . . . . . . . . . . . . . . . . . . 253 13.8.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 13.8.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 13.8.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 13.9 MoveMultipleLinkbotsForever . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 13.9.1 ABatonPassingRobotRelayRace . . . . . . . . . . . . . . . . . . . . . . . . . . 263 13.9.2 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 13.9.3 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 13.9.4 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 13.10PlotRecordedDistancesandTimeforMultipleLinkbotswithanOffsetfortheDistance . . 267 13.10.1Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 13.10.2Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 13.10.3Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 13.11zCopyMotionsofaControllerLinkbottoaControlledLinkbot . . . . . . . . . . . . . . . 278 13.11.1RepeatActionsUsingawhileLoop . . . . . . . . . . . . . . . . . . . . . . . . . . 278 13.11.2Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 13.11.3Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 13.11.4Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 14 MovingMultipleRobotsinaCoordinateSystem 283 14.1 MoveMultipleLinkbot-IsinaCoordinateSystem . . . . . . . . . . . . . . . . . . . . . . . 283 14.1.1 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 14.1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 14.1.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 14.2 TraceandRecordthePositionsofMultipleLinkbot-IsinRoboSim . . . . . . . . . . . . . . 287 14.2.1 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 14.3 MoveMultipleLinkbot-IsAlongDifferentTrajectories . . . . . . . . . . . . . . . . . . . . 292 14.3.1 MoveMultipleLinkbot-IsAlongDifferentTrajectoriesUsingExpressions . . . . . 292 14.3.2 MoveMultipleLinkbot-IsAlongDifferentTrajectoriesUsingFunctions . . . . . . . 295 14.3.3 MoveMultipleLinkbot-IsAlongDifferentTrajectoriesUsingaLoop . . . . . . . . 297 14.3.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 14.3.5 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 14.3.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Description: