From DSCL

ME530707 2017

Jump to: navigation, search

530.707 Robot Systems Programming Course Home Page

http://dscl.lcsr.jhu.edu/ME530707_2017

Rosorg-logo.png

Important Notices

Linux and ROS Versions

Note that as of January 13, 2016 we have revised the version of Linix and ROS that we will use in the course for spring 2017. We will use Ubuntu 16.04 LTS Xenial Xerus (http://releases.ubuntu.com/16.04) or one of its variants such as Xubuntu 16.04 LTS (http://xubuntu.org/getxubuntu) and ROS Kinetic Kame (http://wiki.ros.org/kinetic)

EduMIP Robots

In this course we hope to use EduMIP mobile robots - see The EduMIP Mobile Robot: Running the EduMIP as a ROS Node for more information

530.707 Spring 2016 Class Photo - Click here for higher resolution image.

Contents

Article and Photos of Spring 2016 Independent Class Projects

Course Description

This course seeks to introduce students to open-source software tools that are available today for building complex experimental and fieldable robotic systems. The course is grouped into four sections, each of which building on the previous in increasing complexity and specificity: tools and frameworks supporting robotics research, robotics-specific software frameworks, integrating complete robotic systems, and culminates with an independent project of the student's own design using small mobile robots or other robots in the lab. Students will need to provide a computer (with at least a few GB of memory and a few tens of GB of disc space) running Ubuntu 16.04 LTS Xenial Xerus (http://releases.ubuntu.com/16.04) or one of its variants such as Xubuntu 16.04 LTS (http://xubuntu.org/getxubuntu) and ROS Kinetic Kame (http://wiki.ros.org/kinetic) Ubuntu 14.04 LTS Trusty Tahr (http://releases.ubuntu.com/14.04 or one of its variants such as Xubuntu 14.04 LTS) and ROS kinetic Igloo (http://wiki.ros.org/kinetic) - note that these specific versions of Linux and ROS are required! Students should have an understanding of intermediate programming in C/C++ (including data structures and dynamic memory allocation) Familiarity with Linux programming. Familiarity with software version control systems (e.g. subversion, mercurial, git), linear algebra. Required Course Background: EN.530.646 Robot Devices, Kinematics, Dynamics, and Control and EN.600.636 Algorithms for Sensor Based Robotics.

The course is open to undergraduates (4 credit) with the permission of the instructor.

Instructors

Faculty

Professor Louis L. Whitcomb
Department of Mechanical Engineering
G.W.C. Whiting School of Engineering
The Johns Hopkins University
office: 223C Latrobe Hall
Phone: 410-516-6724
email: [email]
Office Hours: During regular problem sessions during class or by appointment. For an appointment, please contact my Senior Asministrative Coordinator Ms. Deana Santoni [email]

Teaching Assistants

  • Mr. Laughlin Barker [email]
  • Mr. Shahriar Sefati [email]
  • Mr. Andrew Spielvogel [email]

Class Schedule

  • Tuesday 5:00PM-6:30PM - Room 228 Malone Hall
  • Thursday 5:00PM-6:30PM - Room 228 Malone Hall

Office Hours in the Wyman 140 Lab

We are available to answer individual questions during regular office hours in the Wyman 140 lab. You are welcome to bring your computer to Wyman 140 to work on the assignments during office hours, or to use the desktop computers provided in this lab.

  • Monday 1:30-2:30 - Andrew Spielvogel
  • Monday 4:30-5:30 - Laughlin Barker
  • Friday 12:30-1:30 - Shahriar Sefati

Textbooks

Although there is no required text for the course, if you are new to ROS we recommend that you get and read one or more of the following two introductory ROS texts:

Electronic books available through the Milton Eisenhower Library are accessible from on-camps IP addresses. If you are off-campus, you will need to VPN into the campus network to access these electronic books.

Prerequisites

This course will benefit you the most if you are already familiar with the following subjects:

  • Kinematics & Dynamics
  • Linear Control Theory
  • Basic Machine Vision
  • Basic Probability Theory and Random Processes
  • Some Digital Signal Processing

This course requires that you are already familiar with:

  • The Linux Operating System
  • Imperative Programming Languages
  • Markup Languages
  • Data Structures
  • Linear Algebra

This course will require you to:

  • Use the following programming languages:
    • C++
    • bash
    • Python
  • Use the following markup languages:
    • YAML
    • HTML
    • XML
    • JSON
  • Use the following software tools:
    • Version control systems
      • subversion (svn)
      • git
      • mercurial (hg)
    • gdb
    • valgrind
    • CMake, GNU Make

EduMIP Robots

In this course we hope to use the EduMIP mobile robots - see The EduMIP Mobile Robot and Running the EduMIP as a ROS Node for more information

Wyman 140 Lab

We have 6 computers as dual boot with Windows and 64-bit Xubuntu Linux 16.04 LTS and ROS Kinetic (aka ROS Kinetic Kameo) installed and five turtlebot 2s mobile robots in the Wyman 140 Lab. By Jan 29 or so we hope to have everything set up so that you can boot the computers into Linux, and log in with your JHED ID and password.

  • If you have problems logging in for the First Time on a Workstation: There is a BUG in likewise that sometimes crops up: The first time you log in to a workstation using likewise, the graphical login may fail. Workaround: for your very first (and only the first) login with likewise on a machine:
      • 1. Type CTRL-ALT-F1 to get an ASCII console.
      • 2. Log in with your JHED ID and password. Your home directory on the machine will be named by your jhed id, for my case it is: /home/lwhitco1
      • 3. Log out.
      • 5. Type CTRL-ALT-F7 to get the X-windows login screen.
      • 6. Log in normally using the graphical login screen with you JHED ID and password.
      • 7. For all future logins on this machine, you can log in in normally using the graphical login screen with you JHED ID and password.

Wyman 140 Lab Etiquette:

    • Your account has sudo privileges so BE CAREFUL WHEN USING sudo! The only sudo command you should ever use is "sudo apt-get install ros-kinetic-packagename" where "packagename" is the name of a ros package.
    • Do not edit or modify and ROS files under /opt/ros. If you want to modify a standard ROS package, then download the kinetic versoin of the source-code for the package into your catkin workspace, and modify your local copy. ROS will automatically detect your local copy and use it instead of the system version in /opt/ros.
    • The only version of the operating system we will support is Xubuntu 16.04 64-bit.
    • DO NOT upgrade the operating system to more recent releases.
    • The only version of ROS we will support is ROS kinetic
    • DO NOT install other versions of ROS other than ROS kinetic.
    • Leave the lab spotless.
    • Never not "lock" a workstation with a screen-saver. Locked computers will be powered off.
    • No Backup!: The files on these computers are NOT BACKED UP. Any files that you leave in your account on these computers can disappear at any time. Use https://git.lcsr.jhu.edu to save your projects during and after every work session.
    • When you are finished a work session, log off the computer.
    • If you encounter a problem: Notify Prof. Whitcomb and the TAs if you have any problems with the lab or its equipment. Put "530.707" in the subject line of any email regarding this course.

Turtlebot Computers: Lenovo Thinkpad Yoga 260

The Intel 8260 WiFi/Bluetooth chipset on this computer is not supported under 14.04, so we have installed a backport driver as described here. Every time you update the kernel on these computers (e.g. if sudo apt-get upgrade or sudo apt-get dist-upgrade downloads a new linux kernel), then you need to recompile and reinstall the backport driver for the intel 8260 WiFi chipset with the following commands from within the "turtlebot" account:

  • cd ~/Downloads/backports-20150923
  • make clean
  • make defconfig-iwlwifi
  • make
  • sudo make install

and then reboot the computer with

  • sudo reboot now

The 8260 Bluetooth functionality is not supported under Ubuntu 14.04 so we have purchased Panda Wireless Bluetooth 4.0 USB adapters for teams that need Bluetooth. To enable these devices in ubuntu sound settings we execute the following commands from within the "turtlebot"to install the "blueman" ubuntu bluetooth manager (thanks to this page):

  • sudo add-apt-repository ppa:blueman/ppa
  • sudo apt-get update
  • sudo apt-get dist-upgrade

and then reboot the computer with

  • sudo reboot now

Wyman 140 Ethernet Network

Workstations 1-6 are set up on a local turtlebot network. The turtlebot netbook computers and workstations 1-6 are set to static IP addresses via a static DHCP lease. Here is the list of computers and IP addresses you should use when working with the turtlebots. If we need additional workstations for working with the turtlebots, we can add them to the turtlebot network.

Computer IP Address Location Status
turtlebot-01 192.168.1.111 turtlebot 1 OK
turtlebot-02 192.168.1.112 turtlebot 2 Not yet configured or tested, do not use for now.
turtlebot-03 192.168.1.113 turtlebot 3 OK
turtlebot-04 192.168.1.114 turtlebot 4 OK
turtlebot-05 192.168.1.115 turtlebot 5 OK
turtlebot-06 192.168.1.116 spare, for general purpose class project use OK
turtlebot-07 192.168.1.117 spare, for general purpose class project use OK
workstation-1 191.168.1.121 station 1 OK
workstation-2 191.168.1.122 station 2 OK
workstation-3 191.168.1.123 station 3 OK
workstation-4 191.168.1.124 station 4 OK
workstation-5 191.168.1.125 station 5 OK
workstation-6 191.168.1.126 station 6 OK

Wyman 140 Turtlebot WIFI network

The SSIDs for the turtlebot WIFI networks are turtlebot-2.4GHZ. See the TA or instructor for the WIFI password for the turtlebot WIFI network.

Wyman 140 Lab Access

  • Wyman Park Building: Show your J-Card at the front desk during business hours. After hours, you should be able to enter the building front door with your J-Card. If this does not work for any reason, please call the JHU Campus Police on their non-emergency phone number 410-616-4600 to ask them to come and let you into the building. Let us know if you have an problems.
  • Wyman 140 Room Access: Use your J-Card to swipe in.
  • Wyman 140 Lab Hours of Availability and NON-AVAILABILITY: You can use the lab any time EXCEPT when another class has a weekly lab session scheduled. Here are the times the lab is NOT available to you:
    • 530.343 DADS Labs
      • Mondays 6-9PM
      • Tuesdays 3-6PM
      • Thursdays 2:30-5:30PM
      • Fridays 1:30-4:30PM

You are not permitted to use Wyman 140 during the above times when other classes have lab sessions scheduled.

Syllabus

Week 1: Jan 30 & Feb 1: Course Overview and ROS Basics

NOTE: in this course we will exclusively use Ubuntu 16.04 LTS (or an equivalent release such as Xubuntu 16.04 LTS) and the stable ROS Kinetic Kame release.

  • Topics
    • Course Overview
      • Course Description
      • Prerequisites
      • Assignments
      • Class Project
      • Ethics
    • Background of Robot Software Frameworks and The Open-Source Robotics Community
    • Development Tools, Managing Code, Environments, Installing Software, Building Code
    • The ROS core systems: Packaging, Buildsystems, Messaging, CLI & GUI tools, creating packages, nodes, topics, services, and paramaters.
    • Writing a Simple Publisher and Subscriber (C++)
    • Examining the Simple Publisher and Subscriber
    • Writing a Simple Service and Client (C++)
    • Examining the Simple Service and Client
  • Reading
  • Assignments to do this week
    • Install Ubuntu 16.04 LTS (or an equivalent release such as Xubuntu 16.04 LTS).
    • Install ROS Kinetic Kame
    • Complete these Tutorials
      • Installing and Configuring Your ROS Environment. NOTE: in this course we will exclusively use Ubuntu 16.04 LTS Xenial Xerus (http://releases.ubuntu.com/16.04) or one of its variants such as Xubuntu 16.04 LTS (http://xubuntu.org/getxubuntu) and ROS Kinetic Kame (http://wiki.ros.org/kinetic).
      • Navigating the ROS Filesystem
      • Creating a ROS Package
      • Building a ROS Package
      • Understanding ROS Nodes
      • Understanding ROS Topics
      • Understanding ROS Services and Parameters
      • Using rqt_console and roslaunch
      • Using rosed to edit files in ROS
      • Creating a ROS msg and a ROS srv
      • Writing a publisher and subscriber in C++
      • Writing a Simple Publisher and Subscriber (C++)
      • Examining the Simple Publisher and Subscriber
      • Writing a service and client in C++
      • Examining the Simple Service and Client
  • Assignments to hand in this week
  • Homework #1: Assignments to hand in this week. DUE 5:00PM Tuesday Feb 7, 2017.
    • Write and test a publisher node that publishes a TOPIC and subscriber node that subscribes to this TOPIC.
    • Write and test a server node that provides a SERVICE and client node that calls this SERVICE.
    • Hand in your code project "beginner_tutorials" on https://git.lcsr.jhu.edu
      • Login to our GIT server at https://git.lcsr.jhu.edu via the "LDAP" login tab using your JHED ID and password. If you do not already have one, create an ssh id on your computer and, add your ssh key to your account on git.lcsr.jhu.edu.
      • If this is the first time you are using this GIT server, email lcsr-it@jhu.edu to ask Anton Deguet to increase your quota on git.lcsr.jhu.edu so that you can push your assignments to the server. Be sure to include your JHED ID with your request.
      • Create a project called "beginner_tutorials" on https://git.lcsr.jhu.edu,
      • Add the TAs and the instructor as members of the project
      • Initialize your project "beginner_tutorials" as a git repository
      • Add the files to the repo
      • Commit them to the repo
      • Add the remote repository
      • Push your files
      • Push the repo to the server
      • Email the TAs and instructor when done, with "530.707 Assignment 1" in the subject line.
      • See us with questions.

Week 2: Feb 6 & 8: Roslaunch, Nodes, tf, Parameters, and Rosbag

Week 3: Feb 13 & 15: EduMIPs, Joy, and ROS Node development in C++

  • Topics
    • Assembling the EduMIP mobile robot
    • Installing and testing joysticks
    • Publishing /joy topic with the ROS joy package
    • Joystick tutorials - including teleoperating a robot from a joystick
    • ROS timers
    • Writing your own package to subscribe to the joystick /joy and publish a geometry_msgs/Twist topic to command the EduMIP.
    • Writing launch files for same.
    • Running ROS systems spanning more than one computers.
  • Reading
  • Homework #3: Assignments to hand in this week. DUE 5PM PM Tuesday Feb 21, 2017.
    • Assemble and Test the EduMIP as described here Assembling_and_Testing_the_EduMIP_Kit.
    • Set Up Your Beaglebone Black Wireless Board for Your EduMIP: Install a 32GB Debian Jesse image pre-loaded with ROS Kinetic and support for the Robotics Cape on a Micro-SD card on your BBBW. Follow the instructions here:ME530707_2017_EduMIP_ROS#Setting_Up_Your_Beaglebone_Black_Wireless_Board_for_Your_EduMIP
    • Joystick Assignment #1 of 3: Install your joystick and test it (nothing to hand in for this part of the assignment)
      • Plug in and test your USB joystick
        • List the usb devices on your computer with the "lsusb" command with the joystick plugged USB cable connected and also when disconnected.
        • See that the device /dev/input/js0 appears when your joystick is connected, and that this device vanishes when the joystick is disconnected
        • Use the command "jstest /dev/input/js0" to test your joystick. This utility gives text output of the joystick data.
        • Alternatively, test the joystick with the graphical widget "jstest-gtk".
          • Install this utility with the command "sudo apt-get install jstest-gtk"
          • Run this utility it with the command "jstest-gtk".
    • Joystick Assignment #2 of 3: Tutorial: Configuring and Using a Linux-Supported Joystick with ROS (nothing to hand in for this part of the assignment)
      • Notes on this tutorial for most Ubuntu 16.04 installations:
        • The default joystick is /dev/input/js0 (where "0" is numeral zero, not the letter O.
        • The permissions for /dev/input/js0 are already OK, i.e. you NOT need to change the permissions for /dev/input/js0 with the command "sudo chmod a+rw /dev/input/js0".
        • The ROS joy_node automatically looks for the device /dev/input/js0. You do NOT need to set the parameter with the command "rosparam set joy_node/dev "/dev/input/js0".
      • Run "roscore" in one terminal, then run "rosrun joy joy_node" and look at the topic /joy
      • Be sure to use the commands "rosnode list", "rostopic list", and rostopic echo /joy" to explore the /joy topic messages.
    • Joystick Assignment #3 of 3 (to hand in) (Git Project name: joy_twist ):
      • Create a ROS C++ package entitled "joy_twist", with dependancies to roscpp, std_msgs, geometry_msgs, and sensor_msgs with the command "catkin_create_pkg joy_twist roscpp std_msgs geometry_msgs sensor_msgs".
      • In this package create a C++ node entitled joy_twist.cpp that subscribes to a sensor_msgs/Joy joystick topic entitled "/joy" and publishes a geometry_msgs/Twist topic named "/edumip/cmd". We suggest you use a ROS Timer callback function to publish the Twist messages at 10Hz - see ROS Timer documentation for details.
        • Your node should assign joystick axis 1 to twist.linear.x, and joystick axis 2 to twisr.angular.z --- you may need to change a sign in the assignment so that pushing the joystick forward makes twist.linear.x positive, and pushing the joystick to the right makes the twist.angular.z positive.
      • In this package create a launch file entitled joy_twist.launch in the /launch directory that (1) launches a joystick node from the ROS joy package, and (2) launches your joy_twist node.
      • Be sure to use the commands "rosnode list", "rostopic list", "rostopic echo", "rostopic type", and "rostopic hz" to explore the /joy and /edumip/cmd topics.
      • Run rqt_graph to see the nodes and topics graphically.
    • Joystick Control of the EduMIP and multi-computer ROS Programming: You will "hand in" this part of the assignment by demonstrating joystick control of your EduMIP to one of the TAs during office hours next week on Feb 20 or Feb 24. See above for office hours.
    1. Running ROS Across Multiple Machines: Do the tutorial Running ROS Across Multiple Machines. Do not hand in anything for this tutorial, it is just to get you started on running ROS across multiple computers.
    2. Configure WiFi on your EduMIP: Follow the instructions here ME530707_2017_EduMIP_ROS#WiFi_.28BBB_Wireless_and_BBB_Classic_.2B_USB_WiFi_Adapter
    3. Determine the IP addresses of your PC and your EdhMIP:
      • ifconfig: Use the command "ifconfig" to see all configured network interfaces (Ethernet, WiFi, USB, etc) on your machine.
      • iwconfig: Use the command "iwconfig" to see all configured WiFi network interfaces on your machine.
      • Who am I? The easiest way to determine the IP address (or addresses) of a Linux machine is to log into it and use the command "ifconfig".
    4. In this example I will assume the following IP addresses (YOURS WILL BE DIFFERENT):
      • My PC has IP address 192.168.1.51
      • My EduMIP BBBW has IP address 192.168.1.54
    5. On your PC set the ROS environment variables to look for the ros master (roscore) on the PC with the .bashrc commands:
      • "export ROS_MASTER_URI=http://192.168.1.51:11311" <- this tells ROS the IP address of the machine that is running the ros master (roscore).
      • "export ROS_IP=192.168.1.51" <- this tells ROS the IP address of this machine (your PC).
    6. On your EduMIP set the ROS environment variables to look for the ros master (roscore) on the PC with the .bashrc commands:
      • "export ROS_MASTER_URI=http://192.168.1.51:11311" <- this tells ROS the IP address of the machine that is running the ros master (roscore).
      • "export ROS_IP=192.168.1.54" <- this tells ROS the IP address of this machine (your EduMIP).
    7. Test your configuration:
      1. On your PC, in a new shell, run roscore.
      2. On your PC, in a new shell, run "rostopic list", you should see the standard default topics from the roscore on your PC.
      3. On your EduMIP, in a new shell, run "rostopic list", you should see the standard default topics from the roscore on your PC. Yay!
      4. You can now publish a topic on one machine, and subscribe to the topic on the other machine. For example
        1. On your EduMip, publish a topic with command "rostopic pub -r 1 my_topic std_msgs/String "hello there"
        2. On your PC, subscribe to this topic with "rostopic echo /my_topic"
        3. On your PC, run "rqt_graph" to visualize the nodes and topics.
    8. Now you can control your EduMIP from a joystick on your PC:
      1. On your PC run your joy_twist launch file with the command "roslaunch joy_twist joy_twist.launch" to run roscore, joy and joy_twist nodes.
      2. On your EduMIP run edumip_balance_ros with the command "rosrun edumip_balance_ros edumip_balance_ros".
      3. Stand up your EduMIP and take it for a drive.
      4. Explore the ROS topics, and rqt_graph.
    9. DEMO IT TO YOUR TA (REQUIRED): Demo to a TA during office hours in Wyman 140.

Week 4: Feb 20 & 22: URDF and Robot State Publisher

  • Topics
    • Unified Robot Description Format (URDF)
    • Robot State Publisher
  • Reading
  • Notes from Class: In class we downloaded the urdef tutorial package into my catkin workspace. Here are few notes on the steps taken to do this. In this example we will download a local copy of the urdef_tutorial ROS package into my catkin workspace~/ros_catkin_ws/src/urdf_tutorial. You can edit the local copy in your workspace. The system copy located here /opt/ros/kinetic/share/urdf_tutorial but you cannot edit these files because they are protected system files. Better to edit your own local copy in your catkin workspace rather than mucking with the system copy. This is an example of workspace overlay where we create a package in a local workspace that ROS will use in preference to the default system package of the same name. Linux commands are shown in bold font. Comments are in italic font.
    • cd ~/ros+catkin_ws/src (cd to ~/ros_catkin_ws/src)
    • git clone https://github.com/ros/urdf_tutorial.git (clone the git tutorial from github. Note that this creates the directory ~/catkin_ws/src/urdf_tutorial and associated subdirectories.)
    • cd ~/catkin_ws (cd to ~/catkin_ws)
    • rm -r devel build (remove the catkin_ws/devel and catkin_ws/build directory trees, which deletes ~/catkin_ws/devel/setup.bash
    • catkin_make (Builds everything in my workspace from scratch, including generate a new ~/catkin_ws/devel/setup.bash)
    • source devel/setup.bash (Source the newly created file ~/catkin_ws/devel/setup.bash to add this new workspace to the ROS bash environment variables, in particular it will add the present workspace to the ROS_PACKAGE_PATH environment variable)
    • echo $ROS_PACKAGE_PATH (Look again at the ROS_PACKAGE_PATH environment variable that was set by the previous command. It should NOW be a string with your catkin workspace listed at the first element, followed by the standard package path like this: ROS_PACKAGE_PATH=/home/llw/ros_catkin_ws/src:/opt/ros/kinetic/share )
    • rospack profile (This command forces rospack to rebuild the cache of the ros package path that is used by roscd. The cache the text file ~/.ros/rospack_cache).
    • roscd urdf_tutorial (Now roscd will take me to my local copy of the urdef tutorial in ~/catkin_ws/src/urdf_tutorial instead of taking me to the system copy located here /opt/ros/kinetic/share/urdf_tutorial )
    • roslaunch urdf_tutorial display.launch model:=urdf/01-myfirst.urdf (Now I can run the tutorial exercise and edit the local URDF files in ~/catkin_ws/src/urdf_tutorial/urdf)
    • Note that the later tutorial urdf files such as urdf/05-visual.urdf refer to a PR2 gripper model mesh files. If you get error messages from RVIZ like "[ERROR] [1393792989.872632824]: Could not load resource [package://pr2_description/meshes/gripper_v0/l_finger.dae]: Unable to open file "package://pr2_description/meshes/gripper_v0/l_finger.dae" then you need to install the PR2 mesh files. You can install the PR2 model files with the command sudo apt-get install ros-kinetic-pr2-common
    • Note that beginning with urdf/05-visual.urdf RVIZ throws lots of warnings like "TIFFFieldWithTag: Internal error, unknown tag 0x829a." but the program runs OK.
  • Assignments to do this week:
    • Learning URDF Step by Step
      • 1. Building a Visual Robot Model with URDF from Scratch
      • 2. Building a Movable Robot Model with URDF
      • 3. Adding Physical and Collision Properties to a URDF Model
      • 4. Using Xacro to Clean Up a URDF File
    • Learning URDF (including C++ API)
      • 1. Create your own urdf file
      • 2. Parse a urdf file
      • 3. Using the robot state publisher on your own robot
      • 4. Start using the KDL parser (You can skip this tutorial for now if you like, it is not required for this week's assignment.)
      • 5. Using urdf with robot_state_publisher
    • Homework #4: Assignment to hand in this week - DUE 5PM Tuesday Feb 28, 2017: Develop a ROS package named edumip_my_robot for your EduMIP.
      • Your package should consist of at least the following:
        • An URDF file named urdf/edumip_my_robot.urdf' (or better yet a xacro file urdf/edumip_my_robot.xacro ) describing the robot links and joints. Your link and joint names should be prcisely the following:
          • A body link named "edumip_body"
          • A left wheel link named "wheelL"
          • A right wheel link named "wheelR"
          • A left continuous joint named "jointL" with parent link "edumip_body" and child link "wheelL".
          • A right continuous joint named "jointR" with parent link "edumip_body" and child link "wheelR".
          • Here are the measured parameters I used in my xacro file:
            • <xacro:property name="wheel_separation" value="0.070" />
            • <xacro:property name="wheel_radius" value="0.034" />
            • <xacro:property name="wheel_width" value="0.010" />
            • <xacro:property name="body_height" value="0.1" />
            • <xacro:property name="body_width" value="0.050" />
            • <xacro:property name="body_length" value="0.035" />
        • A C++ node named src/edumup_my_robot_publisher.cpp
          • Your node should subscribe to the /edumip/state message that has recently been expanded to include wheel joint angles and odometry data (i.e. robot X, Y, and heading).
          • Your node should publish the following:
            • sensor_msgs/JointState messages for this robot on the topic/joint_state_publisher .
            • A tf transform from the fixed "world" frame to this robot's "robot_base" frame that specified the moving position of the robot with resepect to the fixed "world" frame.
        • A RVIZ initialization file called "rviz/edumip_my_robot.rviz" that displays your robot and the its various frames.
        • A launch file named 'launch/edumip_my_robot.launch that
          1. Launches a joy node from the system-defined joy ROS package.
          2. Launches your joy_twist node from the joy_twist package that you wrote for last week's assignment.
          3. Launches your custom edumup_my_robot_publisher C++ node from your edumip_my_robot package that you wrote for this week's assignment.
          4. Launches a standard robot_state_publisher node from the robot_state_publisher package.
          5. Sets the parameter "robot_description" to load your urdf/edumip_my_robot.urdf' (or .xacro) that you wrote his week to model your edumip.
          6. Launches RVIZ specifying the correct rviz initialization file.
      • Push the finished package to edumip_my_robot https://git-teach.lcsr.jhu.edu and share it with the course instructors.

Week 5: Feb 27 & Mar 1: Gazebo Intro, SDF, worlds, and ROS IDEs

  • Topics
    • Simulating robots, their environments, and robot-environment interaction with Gazebo
    • Gazebo ROS integration.
    • NOTE: You do not need to install Gazebo. Your full ROS kinetic desktop installation will have installed Gazebo V2.2.6 So DO NOT follow the installation instructions on gazebosim.org. If for some reason the ros gazebo package is not installed, install it with sudo apt-get install ros-kinetic-gazebo-ros ros-kinetic-gazebo-ros-pkgs ros-kinetic-gazebo-ros-control
    • NOTE: Gazebo is CPU-intensive, and may not run very well in virtual boxes. A lab full powerful desktop PCs are available for you to use in Lab Room 140 of the Wyman Park Building.
  • Reading
  • Assignments to do this week
    • Gazebo Version 2.2 Tutorials
      • Get Started
        • Skip "Install". Do not install Gazebo, it was installed when your installed the full ROS kinetic desktop.
        • Quick Start: How to run Gazebo with a simple environment.
        • Components: This page provides and overview of the basic components in a Gazebo simulation.
        • Architecture:Overview of Gazebo's code structure.
        • Screen Shots
      • Build a Robot
        • Model Structure and Requirements: How Gazebo finds and load models, and requirements for creating a model.
        • How to contribute a model (you can skip his one for now).
        • Make a model: Describes how to make models.
        • Make a mobile robot: How to make model for a 2-wheeled mobile robot.
        • Using the GUI: How to use the graphical interface.
        • Import Meshes
        • Attach Meshes
        • Adding a Sensor to the Robot
        • Make a simple gripper
        • Attach the gripper to the robot.
      • Build a World
        • Building a world
        • Modifying a world
        • Skip "Digital Elevation Models", "Population of models", and "Building Editor" for now --- you can return to them at a later date when and if you need them.
      • Friction: How to set friction properties. Be sure to experiment with the more exhaustive friction example linked at the very end of this tutorial. This is the example that I showed in class with sliding blocks. Modify the gravity, friction, and initial position/orientation of the objects to observe different dynamics.
      • Connect to ROS: ROS integration
        • Skip this: Which combination of ROS/Gazebo versions to use You can skip this as you will use the default versio 2.2.x that comes with ROS kinetic --- see gazebo ROS installation notes above.
        • Installing gazebo_ros_pkgs
        • Using roslaunch: Using roslaunch to start Gazebo, world files and URDF models
        • URDF in Gazebo: Using a URDF in Gazebo
    • Homework #5: Assignments to hand in this week - DUE 4:30PM Monday March 6, 2017:
      Screen shot of rviz displaying a simple two-wheeled robot. Click thumbnail for higher resolution image.
      • Create a new Gazebo ROS package named gazebo_ros_my_mobile_robot_project with the standard directory structure specified in the Creating your own Gazebo ROS Package tutorial and exemplified in the URDF in Gazebo RRBot package that you downloaded and used in this tutorial. Your project should have at least the following subdirectories:
        • gazebo_ros_my_mobile_robot_project/urdf
        • gazebo_ros_my_mobile_robot_project/launch
        • gazebo_ros_my_mobile_robot_project/worlds
      • Create both an URDF file and a SDF file for a simple new mobile robot of your own original creation, named my_mobile_robot.urdf and my_mobile_robot.sdf.
        Screen shot of Gazebo displaying a simple two-wheeled robot at the gas station. Click thumbnail for higher resolution image.
        • You can create the URDF and SDF file directly by editing them seprately (the hard way!), or create an URDF file with extra fields for SDF parameters (the easy way!) and then automatically generate the SDF my_mobile_robot.sdf file from the URDF file my_mobile_robot.urdf with gzsdf as described in URDF in Gazebo with the command gzsdf print my_mobile_robot.urdf > my_mobile_robot.sdf.
        • Using the XACRO macro package will save a lot of time and effort in the end.
        • Your new robot should have at least two wheels (or legs) to enable its motion.
        • Your new robot should be statically stable at rest in a normal gravitational field when on a flat surface.
        • It should have nice colors.
        • Create a launch file named my_mobile_robot_rviz.launch which launches a joint state publisher, a robot state publisher, and rviz set to display your robot --- recall that the launch file from the urdef_tutorial example did just this.
      • Create a gazebo world file named my_mobile_robot.world which provides at least horizontal plane, gravity, and your new robot. In Gazebo you should be able to cause the robot to move on the plane by applying torques to the wheel (or leg) joints.
      • Create a launch file named my_mobile_robot_gazebo.launch which launches your robot world with your robot in it --- recall that you did this in the assigned tutorial section on roslaunch with gazebo.
      • Push the finished package gazebo_ros_my_mobile_robot_project as a new repo on https://git.lcsr.jhu.edu and share it with the course instructors.

Week 6: Mar 6 & 8: Gazebo physical simulation, ROS Integration,

  • Topics
    • Simulating robots, their environments, and robot-environment interaction with Gazebo
    • Gazebo ROS integration.
    • Gazebo Intermediate Concepts
  • Reading
  • Assignments to do this week
    • Gazebo Version 2.2 Tutorials
      Rviz screen shot showing the RRBot camera and laser-scanner sensor data. Click for higher resolution image.
      • Connect to Ros: ROS Integration
        • Gazebo plugins in ROS
          • Note: As mentioned in class, if you are running a PC or VirtualBox without a GPU graphics adapter then gzserver will crash when you run the launch file with an error message beginning something like [gazebo-1] process has died [pid 3207, exit code 139, cmd /opt/ros/kinetic/lib/gazebo_ros/gzserver... - so you will need to modify the rrbot.gazebo sdf file to use non-GPU hokuto laser plugin as follows:
            • Replace <sensor type="gpu_ray" name="head_hokuyo_sensor"> with <sensor type="ray" name="head_hokuyo_sensor">
            • Replace <plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_gpu_laser.so"> with <plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_laser.so">
          • Note: To visualize the laser in gazebo as shown in the Gazebo figure on the right of this web page and in the tutorial
            Gazebo screen shot showing the RRBot camera and laser-scanner sensor data. Click for higher resolution image.
            here you will also need to set the visualize property of the hokuyo laser plugin to true (i.e. "<visualize>true</visualize>").
        • ROS control Before you do this tutorial be sure that you have the kinetic ros-control packages installed with the command "sudo apt-get install ros-kinetic-ros-control ros-kinetic-ros-controllers". If these packages are not installed on your system you will get error messages like [ERROR] [WallTime: 1395611537.772305] [8.025000] Failed to load joint_state_controller and [ERROR] [WallTime: 1395611538.776561] [9.025000] Failed to load joint1_position_controller.
        • ROS communication with Gazebo
          • Note that there is an error in the Set Model State Example of this tutorial --- the first "rosservice call..." command example specifies an orientation on the coke can that causes it to fall over ("orientation: {x: 0, y: 0.491983115673, z: 0, w: 0.870604813099 } }") Your command should instead specify the correct upright orientation ("orientation: {x: 0, y: 0.0, z: 0, w: 1.0 }"').
        • ROS Plugins
          • Note: There are typos in both commands given in Create a ROS Package section of this tutorial.
          • Note: If you previously downloaded the gazebo_ros_demos tutorial package from this tutorial then you do not need to create a new custom package names "gazebo_tutorials" for this tutorial since the "gazebo_tutorials" package is already present in the directory ~/catkin_ws/src/gazebo_ros_demos/custom_plugin_tutorial .
        • Advanced ROS integration
    • Homework #6: Assignments to hand in this week
    • Expand upon a package that you developed for last week's assignment (or create a new robot package if you prefer). Use standard ROS plug-ins (or write your own if you prefer) for control and sensing of one robot that you developed URDF and/or URDF/SDFs for last week. Use at least one one physical plug-in (ros control of the joints, differential drive, etc) and sensor plugin (e.g. camera, laser, projector, video).
    • Push your package to the git server and share with the instructor and TAs.
    • Demonstrate your robot and its operating plugins to one of the TAs during the regular office hours.

Week 7: Mar 13 & 15 Turtlebot Simulation in Gazebo, SLAM Navigation

  • Reading
  • Assignments to do this week
    • Install the turtlebot packages and the turtlebot simulator Gazebo and Rviz packages.
      • Install the turtlebot packages as described in the Turtlebot Installation Tutorial Do the "Ubuntu Package Installation with the command sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-rviz-launchers ros-kinetic-turtlebot-simulator ros-kinetic-turtlesim ros-kinetic-turtlebot-teleop ros-kinetic-kobuki-ftdi
        • Note: You DO NOT need to do a source installation
      • Note that you do not need to run the command rosrun kobuki_ftdi create_udev_rules because your notebook computer will not be physically connected to the kobuki base with a USB cable. The notebook computers that are physically on the turtlebot will be connected to the kbuki base with a USB cable. Your computer will communicate to the turtlebot's on-board netbook via WiFi.
    • Read about the Turtlebot simulator package for ROS kinetic.
    • Do the Turtlebot Simulator Tutorials for Gazebo (do not do the "Stage" simulator tutorials).
      • Turtlebot bringup guide for ROS kinetic
      • Explore a Gazebo world with a simulated turtlebot
        • To command the turtlebot motion from the keyboard, this node allows you to use the arrow-keys (up, down, left, right): roslaunch kobuki_keyop safe_keyop.launch
        • Install the additional turtlebot simulator and
        • Be sure to
          • List and examine the nodes, topics, service
          • Echo some of the published topics
          • Run rqt_graph to visualize the topic data paths
      • Make a SLAM map and navigate with it.
        • Be sure to
          • List and examine the nodes, topics, service
          • Echo some of the the published topics
          • Run rqt_graph to visualize the topic data paths
          • Save your map to files with your name as part of the filename - for example I might use the command rosrun map_server map_saver -f map_by_louis to generate the map occupancy grid data file map_by_louis.pgm and its associated meta-data file map_by_louis.yaml.
            • Examine the contents of the .pgm map file with an image viewer such as gimp.
            • Examine the contents of the .yaml metadata map with a text editor or more.
          • Note: To run the AMCL mapping demo, you need to specify the full path name of the .yaml map file, e.g. roslaunch turtlebot_gazebo amcl_demo.launch map_file:=/home/llw/my_first_map.yaml
  • Homework #7: Assignments to hand in this week
    • Email the two map files (.pgm and .yaml) that you generated to the instructor and the TAs with the subject line "530.707 HW# 7 by your_firstname your_lastname".
    • Demonstrate to the TAs or instructor using your map to navigate the playground world with amcl particle filter navigation (you did this in the last part of the SLAM navigation tutorial).

Spring Break: Mar 20 & 22

  • Spring Break

Week 8: Mar 27 & 29: Using and Programming Turtlebot in the Lab

  • Topics
  • Reading
  • Assignments to do this week
    • Read and understand the Spring 2014 530.707 Robot Systems Programming Turtlebot_Inventory_and_Network
    • When you start using a turtlebot:
      • Verify that that the netbook is turned on and charged.
      • Verify that that the kobuki base is turned on and charged.
    • Before driving a turtlebot, disconnect all power from the netbook and base.
    • When you finish using a turtlebot
      • Plug in the netbook to charge.
      • Plug in the kobuki base to charge.
      • Log out of the workstation and netbook
    • Turtlebot Tutorials
    • 1. Installation
      • 1. Installation
        • Wyman 157 Workstations and Turtlebot Netbooks:The necessary turtlebot ROS packages are already installed on Wyman 157 Workstations 9-14 and all Turtlebot Netbooks.
        • Installing Turtlebot Packages on Your Personal Notebook: If you want to do turtlebot development on your notebook PC, you will need to install turtlebot packages on your notebook. Most of the packages have already been installed on the turtlebots and the desktop workstations. The command is sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-viz ros-kinetic-turtlebot-simulator ros-kinetic-kobuki-ftdi
        • Note that the command rosrun kobuki_ftdi create_udev_rules has ALREADY BEEN RUN to create the device /dev/kobuki for the turtlebot USB connection on the Turtlebot netbooks. You do not need run this command again on the netbooks. You do not need to run this command on the desktop development stations or on your own notebook PC.
      • 2. Post-Installation Setup of the Turtlebot Netbook READ THIS TUTORIAL, BU DO NOT DO IT, WE ALREADY DID IT FOR EACH TURTLEBOT.
        • Network time protocol service "chrony" is already installed on the turtlebot netbooks and the desktop development PCs.
      • 3. Workstation Installation
        • Don't forget to install the turtlebot packages onto your own laptop (termed "Worksation" in the tutorial) as described. in this tutorial. These packages are already installed on the lab desktop PCs.
      • 4. Network Configuration
        • Follow these steps to configure the ROS environment variables so that your development machine ROS nodes can talk to ROS nodes on the turtlebot netbook.
        • You will need to configure your personal account's .bashrc to set ROS environment variables on your development machine (termed "Worksation" in the tutorial) as described in this tutorial.
        • You will need to configure your personal account's .bashrc to set ROS environment variables on the turtlebot netbook as described in this tutorial.
        • IF YOU USE A DIFFERENT WORKSTATION OR TURTLEBOT, YOU NEED TO CHANGE THESE ENVIRONMENT VARIABLES BOTH ON YOUR ACCOUNT ON YOUR WORKSTATION AND ON YOUR ACCOUNT ON THE TURTLEBOT NETBOOK.
    • 2. Getting Started
      • 2.1 Bringup
        • 1. TurtleBot Bringup How to start the TurtleBot software.
        • 2. TurtleBot Care and Feeding This tutorials explains how to charge and maintain your TurtleBot.
        • 3.3D Visualisation Visualising 3d and camera data from the kinect/asus.
          • Note: There is an error in this tutorial as noted here. The command roslaunch turtlebot_bringup 3dsensor.launch fails to publish sensor topic data (e.g. no depth maps, and the scan data is all NAN). Use the command roslaunch turtlebot_bringup 3dsensor.launch depth_registration:=false to get sensor topic data.
      • 2.2 Teleoperation
        • 1. Keyboard Teleop Keyboard teleoperation of a turtlebot
          • We recommend using this keyboard teleop node: roslaunch kobuki_keyop safe_keyop.launch rather than the default turtlebot keyop node.
          • NOTE:Sometimes the kobuki_keyop safe_keyop.launch is wonky if you do not run a persistent roscore before launching anything.
          • Run the keyboard teleop while 3D sensor and image information are being displayed in RVIZ.
          • Drive the turtlebot around.
          • Try not to crash or to push against immobile objects (the turtlebot wheel motors could overheat and burn out).
    • 3. Advanced Usage
  • Homework #8: Assignments to hand in this week
    • Demonstrate to the TAs or instructor keyboard teleop of the turtlebot with 3D sensor data being displayed in RVIZ.
    • Demonstrate to the TAs or instructor using your map to navigate the Wyman 157 lab with amcl particle filter navigation using the map that you created.

Week 9: Apr 3 & 5: Independent Project: Project Proposal

Week 10: Apr 10 & 12: Independent Project: Project Implementation and Testing

  • Topics
    • Additional topics TBD
  • Reading
    • TBD
  • Assignments to do this week
    • Week 2 of project development.
    • Use class time and office hours
  • Homework #10: Assignments to hand in this week
    • Project Progress report #1 (email to instructor and TAs)

Week 11: Apr 17 & 19: Independent Project: Project Implementation and Testing

  • Topics
    • Additional topics TBD
  • Reading
    • TBD
  • Assignments to do this week
    • Week 3 of project development.
    • Use class time and office hours
  • Homework #11: Assignments to hand in this week
    • Project Progress report #2 (email to instructor and TAs)

Week 12: Apr 24 & 26: Independent Project: Project Implementation and Testing

  • Topics
    • Additional topics TBD
  • Reading
    • TBD
  • Assignments to do this week
    • Week 4 of [project development.
    • Use class time and office hours
  • Homework #12: Assignments to hand in this week
    • Project Progress report #3 (email to instructor and TAs)

Week 13: May 1 & 3: Independent Project: Project Implementation and Testing

  • Topics
    • Additional topics TBD
  • Reading
    • TBD
  • Assignments to do this week
    • Week 5 of project development.
    • Use class time and office hours
  • Homework #13: Assignments to hand in this week
    • Project Progress report #4 (email to instructor and TAs)

May 11: Independent Project Demonstrations, TBA time TBA day May TBA, 2017

  • Schedule For Class Project Demonstrations TBA time TBA day May TBA, 2017 (exact times may vary)
    • 2:00PM Krieger 70 Hi Bay
      • 2:00PM TBA
      • 2:20PM TBA
      • 2:40PM TBA
      • 3:00PM walk to Hackerman Hall
    • 3:10PM Demo Location: in or near Hackerman Hall - Robotic scale-model self-driving cars!
      • 3:10PM Class Photo (you can bring your robot if you like)
      • 3:20PM TBA
      • 3:40PM TBA
      • 4:00PM TBA
    • 4:10PM Demo Location: 140 Wyman Park Building - Mobile robots navigating and interacting with people in the lab!
    • 4:10PM TBA
    • 4:40PM TBA
  • Final report is due by end of exam period. Here is the outline:
    • Project report (PDF) Email PDF project report of your project to the Instructor and TAs. Be sure to put 530.707 in email subject line. Your project report should include
      • Project Title, Author(s) (i.e. team members), Date
      • Description of proposed project goals
      • Software
        • List and description of the new ros packages you implemented to accomplish your project. Include git repository URL for each package.
        • List of the major existing ROS packages you utilized
      • Hardware and infrastructure
        • List and description of any new or additional hardware and infrastructure you needed to implement your project.
        • List of existing and infrastructure you needed to implement your project.
      • Sample Data Products (if any) from the project
      • Link to brief online video of your project in action (desired but not required).
      • Project "Lessons Learned"
      • Suggestions for future projects
      • References - list of any references cited in your text
    • Project video (desired but not required).
    • Add section on your project to the new Projects section of course web page. Content is cut-and-paste from your project report.

2017 Independent Class Projects

Article and Photos of Previous Independent Class Projects

Project title, by Student Name and Student Name

  • Project Goals

The Main goal of this project is to

  • Software
    • Software package we created

We created 4 packages for this project:

  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
    • Nodes:
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
    • Launch files:
      • launchfile_name.launch: description
      • launchfile_name.launch: description
      • launchfile_name.launch: description
  • Hardware and Infrastructure
  • Hardware we created:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • Hardware provided:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
  • Project "Lessons Learned"
    • Lesson description.
    • Lesson description.
    • Lesson description.
  • Suggestions for future projects
    • Suggested project.
    • Suggested project.
    • Suggested project.
    • Suggested project.
  • Possible future work
    • suggested future work.
    • suggested future work.
    • suggested future work.
    • suggested future work.


Project title, by Student Name and Student Name

  • Project Goals

The Main goal of this project is to

  • Software
    • Software package we created

We created 4 packages for this project:

  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
    • Nodes:
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
    • Launch files:
      • launchfile_name.launch: description
      • launchfile_name.launch: description
      • launchfile_name.launch: description
  • Hardware and Infrastructure
  • Hardware we created:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • Hardware provided:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
  • Project "Lessons Learned"
    • Lesson description.
    • Lesson description.
    • Lesson description.
  • Suggestions for future projects
    • Suggested project.
    • Suggested project.
    • Suggested project.
    • Suggested project.
  • Possible future work
    • suggested future work.
    • suggested future work.
    • suggested future work.
    • suggested future work.


Project title, by Student Name and Student Name

  • Project Goals

The Main goal of this project is to

  • Software
    • Software package we created

We created 4 packages for this project:

  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
    • Nodes:
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
    • Launch files:
      • launchfile_name.launch: description
      • launchfile_name.launch: description
      • launchfile_name.launch: description
  • Hardware and Infrastructure
  • Hardware we created:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • Hardware provided:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
  • Project "Lessons Learned"
    • Lesson description.
    • Lesson description.
    • Lesson description.
  • Suggestions for future projects
    • Suggested project.
    • Suggested project.
    • Suggested project.
    • Suggested project.
  • Possible future work
    • suggested future work.
    • suggested future work.
    • suggested future work.
    • suggested future work.


Project title, by Student Name and Student Name

  • Project Goals

The Main goal of this project is to

  • Software
    • Software package we created

We created 4 packages for this project:

  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
    • Nodes:
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
    • Launch files:
      • launchfile_name.launch: description
      • launchfile_name.launch: description
      • launchfile_name.launch: description
  • Hardware and Infrastructure
  • Hardware we created:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • Hardware provided:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
  • Project "Lessons Learned"
    • Lesson description.
    • Lesson description.
    • Lesson description.
  • Suggestions for future projects
    • Suggested project.
    • Suggested project.
    • Suggested project.
    • Suggested project.
  • Possible future work
    • suggested future work.
    • suggested future work.
    • suggested future work.
    • suggested future work.

Project title, by Student Name and Student Name

  • Project Goals

The Main goal of this project is to

  • Software
    • Software package we created

We created 4 packages for this project:

  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
    • Nodes:
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
    • Launch files:
      • launchfile_name.launch: description
      • launchfile_name.launch: description
      • launchfile_name.launch: description
  • Hardware and Infrastructure
  • Hardware we created:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • Hardware provided:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
  • Project "Lessons Learned"
    • Lesson description.
    • Lesson description.
    • Lesson description.
  • Suggestions for future projects
    • Suggested project.
    • Suggested project.
    • Suggested project.
    • Suggested project.
  • Possible future work
    • suggested future work.
    • suggested future work.
    • suggested future work.
    • suggested future work.


Project title, by Student Name and Student Name

  • Project Goals

The Main goal of this project is to

  • Software
    • Software package we created

We created 4 packages for this project:

  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
    • Nodes:
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
    • Launch files:
      • launchfile_name.launch: description
      • launchfile_name.launch: description
      • launchfile_name.launch: description
  • Hardware and Infrastructure
  • Hardware we created:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • Hardware provided:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
  • Project "Lessons Learned"
    • Lesson description.
    • Lesson description.
    • Lesson description.
  • Suggestions for future projects
    • Suggested project.
    • Suggested project.
    • Suggested project.
    • Suggested project.
  • Possible future work
    • suggested future work.
    • suggested future work.
    • suggested future work.
    • suggested future work.


Project title, by Student Name and Student Name

  • Project Goals

The Main goal of this project is to

  • Software
    • Software package we created

We created 4 packages for this project:

  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
  • package name: Package description.
    • Nodes:
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
      • node_name.cpp: Node description.
    • Launch files:
      • launchfile_name.launch: description
      • launchfile_name.launch: description
      • launchfile_name.launch: description
  • Hardware and Infrastructure
  • Hardware we created:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • Hardware provided:
    • hardware name: Hardware description.
    • hardware name: Hardware description.
    • hardware name: Hardware description.
  • Project "Lessons Learned"
    • Lesson description.
    • Lesson description.
    • Lesson description.
  • Suggestions for future projects
    • Suggested project.
    • Suggested project.
    • Suggested project.
    • Suggested project.
  • Possible future work
    • suggested future work.
    • suggested future work.
    • suggested future work.
    • suggested future work.

Ethics

Students are encouraged to work in groups to learn, brainstorm, and collaborate in learning how to solve problems.

Problem Sets and Lab Assignments Final Writeups: Your final writeups for pre-lab exercises and lab assignments must be done independently without reference to any notes from group sessions, the work of others, or other sources such as the internet.

While working on your final writeups for assignments, you may refer to your own class notes, your own laboratory notes, and the text.

Disclosure of Outside Sources: If you use outside sources other than your class notes and your text to solve problems in the pre-lab and lab assignments (i.e. if you have used sources such as your roommate, study partner, the Internet, another textbook, a file from your office-mate's files) then you must disclose the outside source and what you took from the source in your writeup.

In this course, we adopt the ethical guidelines articulated by Professor Lester Su for M.E. 530.101 Freshman experiences in mechanical engineering I, which are quoted with permission as follows:

Cheating is wrong. Cheating hurts our community by undermining academic integrity, creating mistrust, and fostering unfair competition. The university will punish cheaters with failure on an assignment, failure in a course, permanent transcript notation, suspension, and/or expulsion.

Offenses may be reported to medical, law or other professional or graduate schools when a cheater applies. Violations can include cheating on exams, plagiarism, reuse of assignments without permission, improper use of the Internet and electronic devices, unauthorized collaboration, alteration of graded assignments, forgery and falsification, lying, facilitating academic dishonesty, and unfair competition. Ignorance of these rules is not an excuse.

On every exam, you will sign the following pledge: "I agree to complete this exam without unauthorized assistance from any person, materials or device. [Signed and dated]"

For more information, see the guide on "Academic Ethics for Undergraduates" and the Ethics Board web site (http://ethics.jhu.edu).

I do want to make clear that I'm aware that the vast majority of students are honest, and the last thing I want to do is discourage students from working together. After all, working together on assignments is one of the most effective ways to learn, both through learning from and explaining things to others. The ethics rules are in place to ensure that the playing field is level for all students. The following examples will hopefully help explain the distinction between what constitutes acceptable cooperation and what is not allowable.

Student 1: Yo, I dunno how to do problem 2 on the homework, can you clue me in? 

Student 2: Well, to be brief, I simply applied the **** principle
that is thoroughly explained in  Chapter **** in the course text.

Student 1: Dude, thanks! (Goes off to work on problem.)

- This scenario describes an acceptable interaction. 
There is nothing wrong with pointing someone in the right direction.


Student Y: The homework is due in fifteen minutes and I haven't 
done number 5 yet! Help me!

Student Z: Sure, but I don't have time to explain it to you, so
here. Don't just copy it, though.
(Hands over completed assignment.)

Student Y: I owe you one, man. (Goes off to copy number 5.)

 - This scenario is a textbook ethics violation on the part of 
 both students. Student Y's offense is obvious; student Z is 
 guilty by virtue of facilitating plagiarism, even though he/she 
 is unaware of what student Y actually did.


Joe Student: Geez, I am so swamped, I can't possibly write up the 
lab report and do the lab data calculations before it's all due.

Jane student: Well, since we were lab partners and collected all 
the data together...maybe you could just use my Excel spreadsheet
with the calculations, as long as you did the write-up yourself....

Joe Student: Yeah, that's a great idea!

- That is not a great idea. By turning in a lab report with Jane's
spreadsheet included, Joe is submitting something that isn't his 
own work.


Study group member I: All right, since there's three of us and
there's six problems on the homework, let's each do two. I'll 
do one and two and give you copies when I'm done.

Study group member II: Good idea, that'll save us a lot of work.
I'll take three and five.

Study group member III: Then I guess I'll do four and six. Are you
guys sure this is OK? Seems fishy to me.

Study group member I: What's the problem? It's not like we're
copying the entire assignment. Two problems each is still a lot 
of work.

- This is clearly wrong. Copying is copying even if it's only 
part of an assignment.


Mike (just before class): Hey, can you help me? I lost my
calculator, so I've got all the problems worked out but I 
couldn't get the numerical answers. What is the answer for 
problem 1?

Ike: Let's see (flips through assignment)... I got 2.16542.
 
Mike: (Writing) Two point one six five four two...what about 
number 2?

Ike: For that one... I got 16.0.

Mike: (Writing) Sixteen point oh...great, got it, thanks. 
Helping out a friend totally rules!

- Helping out a friend this way does not rule, totally or 
partially. As minor as this offense seems, Mike is still 
submitting Ike's work as his own when Mike gets the numerical 
answer and copies it in this way.


This page was last modified on 20 February 2017, at 19:54.