CSC 161 Grinnell College Spring, 2015
 
Imperative Problem Solving and Data Structures
 
 

Laboratory Exercise: Using the Scribbler 2

Goals

This lab introduces the Scribbler 2 robot to students and combines the Scribbler 2 with eSpeak.

Class Preparation before Class

Work Started in Class

Getting Started with the Scribbler 2

In this lab, you will experiment with the Scribbler 2 robot's sound capabilities, as well as practice writing and compiling programs that use the robot.

For every program using the Scribbler 2 robot, you first must connect to the robot. At the end of the program (before return 0;), you will disconnect from the robot. The command to connect to the robot is rConnect("/dev/rfcomm0") . This opens a connection to the robot using the port /dev/rfcomm0 . Later in the lab, you will experiment with what happens when the port is not included. The command to disconnect from the robot is rDisconnect() . Here, you do not need to state any port.

Hint: Don't forget to include the library MyroC.h at the beginning of every program.

Connecting to and disconnecting from the robot

In this exercise, you will download the code for a program that connects to the Scribbler, beeps once, and then disconnects from the Scribbler. Read the program and its annotations to further understand what is happening. You will then copy the program to your emacs file and compile the program on your terminal. Finally you will run the program.
Here are the steps to do these:

  1. Open a terminal window and move to the directory you are using for this course.

  2. Start emacs with the command:

    emacs scribblerlab.c & 
    

    Troubleshooting: If your emacs editor opens with a split screen, and if you find the split screen annoying, you might want to review the section on Modifying emacs in the lab on Linux basics.

  3. Copy the program scribblerlab.c to your emacs window. Don't forget to save it every time before you compile.

  4. Compile the program by typing in the terminal. Two approaches are possible.

    • For the MyroC environment, use the line:

        
      gcc -I/home/walker/Myro/include/MyroC -L/home/walker/Myro/lib -lMyroC -lbluetooth -ljpeg -o scribblerlab scribblerlab.c 
                

      The MyroC interacts directly with a bluetooth package for Bluetooth communication in Linux. This requires the additional parameter -lbluetooth. In addition, some Scribbler operations include image processing, and this requires the parameter -ljpeg

    • Alternatively, you can use the command

        
      make scribblerlab 
                

      Commentary: Look at the Makefile you copied to your directory during the lab on Linux basics.

      • The make command utilizes Makefile for information about how to compile.
      • In using make, the program name is given without the .c suffix (e.g., make scribbler-lab).
      • make assumes the program name has a .c extension, and make produces an executable program using the name (without the .c).
      • The variable LDFLAGS identifies the libraries that are needed for MyroC programs when running eSpeak and MyroC. These flags are exactly what appears in the gcc line above.
      • The variable CFLAGS provides guidance in compiling programs.
        • The -Wall flag asks the compiler to notify you of all warnings that something might not be right (read -Wall as "Warnings all").
        • The -std=gnu99 flag specifies that the compiler should utilize the most recent implementation of the C 1999 standard, as implemented by the gnu project of the Free Software Foundation.
      • Altogether, the make approach uses the full gcc line, together with a directive about printing warnings and a specification of which version of C to utilize.

      Troubleshooting:

      • If the gcc command prints errors that there are undefined references to `rConnect', `rBeep', and/or `rDisconnect',

        • Be sure you have included the library flags -lMyroC -lbluetooth -ljpeg in your gcc command.
        • Be sure you included the MyroC material into your .bashrc file, as described in the early parts of the lab on Linux Basics
      • If the gcc command works, but the make command indicates errors with undefined references to `rConnect', `rBeep', and/or `rDisconnect', be sure you have copied the Makefile file to your current directory, as described in the Makefile section of the lab on Linux Basics

  5. With either approach for compilation, run the program in your terminal by typing:

    ./scribblerlab 
    

Experimenting with Connections

  1. In the program scribblerlab.c , delete the /dev/rfcomm0  port that is in rConnect() . What happens when you compile and run? Now type hello  into the port. What happens when you compile and run? Do the same for the null string "" . Replace the port when you are done and save the program.

  2. Delete the include statement. What happens when you try to compile? Replace the include statement and save.

Sound from the Scribbler 2 Robot

Here is the documentation for rBeep() from the development version of the MyroC.h header file:

  
/**
 * @brief Beeps with the given duration and frequency
 * @param duration   length of note in seconds
 * @param frequency  frequency of pitch in cycles per second (hertz)
 * @pre              duration > 0.0
 */
void rBeep (double duration, int freq);
  1. In the original program scribblerlab.c , copy the beep statement and change the frequency to 600, 700, 900, 400, 15000 and 200. Experiment with frequencies. Which frequencies are audible?

  2. Now vary the length of the beeps. Copy the beep statement again and this time change the duration to 0.75, 2, 2.5, 3, 3.1, and 4. Listen to what happens.

Write your own program: Music

  1. Write a program that connects to the robot, makes it beep a short tune that sounds good to you, then disconnects from the robot.

    • Hint: The pitches for various notes can be found on numerous online sources or in the example programs for today.

Homework

Scribbler 2 Robots and eSpeak

A challenge arises when trying to test a robot-based program, in which the robot performs several actions — including movement.

Even with two eyes, watching both the program and the robot can be difficult. The eSpeak package can help resolve this difficulty.

  1. Examine the scribbler-espeak.c program.

    1. Open the scribbler-espeak.c program and copy it to your account.

    2. To compile the program with gcc, you will need to specify both MyroC and eSpeak with one of the following two lines:

      gcc -I/home/walker/Myro/include/MyroC -L/home/walker/Myro/lib -lMyroC -l eSpeakPackage -lbluetooth -ljpeg -o scribbler-espeak scribbler-espeak.c
      

      Alternatively, use the make command:

      make scribbler-espeak
      
    3. Run the program and describe what happens.

    4. Edit the program, make some changes, and compile and run the revised program to check what happens.

Optional Activity: Playing a Duet

  1. Look at the MyroC documentation:

    Find the function rBeep2(). Write a simple program and test how rBeep2() works. If you finish this, go through the rest of the header file and see if there is anything else you want to try testing out.

Feedback Welcome

Development of laboratory exercises is an iterative process. Prof. Walker welcomes your feedback! Feel free to talk to him during class or stop by his office.