Authors and Maintainers:
- Ryan King-Shepard (RKS)
- Marshall Johnson
- Matt Short
- Eric Codrea
- Pranav Kaarthik
This package enables the Franka robot to create and serve a variety of drinks.
- Download the
mixotics.rosinstall
file into the /src directory of the catkin workspace. This file will install the ros dependencies required to run this project. - Use
wstool init
andwstool merge mixotics.rosinstall
to initialize the workspace and merge the rosinstall file with the workspace. Runwstool update
to ensure latest versions of all packages are installed. - Install any python dependencies needed to run the software. Refer to the python dependencies section.
- Source and
catkin_make
the workspace (source it assource ~/$(workspace name)/devel_isolated/setup.bash
). - To connect to the robot, plug in the ethernet cord from the robots workstation PC into the ethernet port on the users computer.
- Run
ping robot.franka.de
to ensure that the connection is successful. - Open a web browser and navigate to https://robot.franka.de . Log into the website using the credentials for the robot. This interface enables us to lock/unlock the robot. At this point, ensure that the lights on the robot glow yellow.
- If another user was using the robot prior to connecting, the user will be prompted to request control. a. Press request control b. Press enforce c. When the interfaces prompts the user to, click the button with a circle that is on top of the robot.
- Make sure the robot is disabled by pressing down on the enabling device. On the website interface, from the menu on the right click on the unlock button. The lights should change from green to white. This places the robot in free move mode, and the user can manually move the robot by pressing on the two buttons on the end of the arm.
- Open the hamburger menu on the top right, and select Activate Franka Control Interface (FCI).
- To have control of the Emika Franka robot, open two terminals and source the workspace in both.
a. In the first terminal, run
roscore
. b. In the second terminal, runexport ROS_MASTER_URI=http://$(hostname):11311
where hostname is the name of the users computer. After that, runssh -oSendEnv=ROS_MASTER_URI student@station
. - We can now start the franka_ros controller. To do so, run
roslaunch franka_control franka_control.launch robot_ip:=robot.franka.de
. Keep this terminal open - if this process stops running, it needs to be restarted to be able to run the robot. - Now that the connection to the robot is setup and the franka_ros controllers are running, run
roslaunch final_project_mixotics mixotics.launch
to run thefixed_tag
,vision
,order_handler
,update_scene
andmover
nodes along withpanda_control_moveit_rviz.launch
to run moveit and rviz. - The robot can now fulfill an order! Run
rosservice call /process_order {"orders= 'water', 'water', 'lemonade'"}
to have Sir Mix-a-lot make a drink! The acceptable drink commands are "water", "lemonade", "iced tea"
This package contains:
- nodes:
fixed_tag
: Generates a static transform between the robot and an AprilTag placed in front of the robot base.update_scene
: Adds objects (i.e., ingredients, coasters) marked by AprilTags or color detection to the moveit planning scene.vision
: Detects occupied spaces in the custom drink holder.mover
: Defines services for robot movements (i.e., grab, pour, and stock) using moveit planning and action librariesorder_handler
: Processes user's orders and generates a list of instructions used by the mover node. Once all instructions for an order are complete, sends confirmation to the user.voice
: Processes verbal orders from the user and uses service proxy to integrate withorder_handler
. Note: Integration to move robot using verbal ordering is still in development. Verbal order processing alone is functional.
- config:
menu.xml
: configuration file for the menu containing the name, ingredients, recipe instructions for each drinkobjects.yaml
: contains list of names for ingredients, coasters and tables (optional) as well as associated object dimensionssettings.yaml
: contains AprilTag code parameters such as tag family name and detection parameterstags_color.yaml
: contains list of AprilTag IDs and sizes for each object (used with CV color detection)tags.yaml
: contains list of AprilTag IDs and sizes for each object (used without CV color detection)
- launch:
tag_finder.launch
: sets up the nodes for object detection and planning scene updates using a RealSense d435i cameramixotics.launch
: master launch file for the robot - this runs all the nodes required to update the planning scene as well as move the robot
- srv:
ConfirmOrder.srv
: Request/Response for indicting an order is complete. Includes value to determine if order was mase successfully or notInventoryUpdate.srv
: Request for updating the whether an ingredient is available of notOrder.srv
: Request contain a list of drinks the user wantsPourInstr.srv
: Request structure used to tell the robot to pour an ingredient in a certain cupRefresh.srv
: checks planning scene updates fromupdate_scene/refresh
SetInstr.srv
: Request used to tell the robot which ingredient to grab or stockVerifyInstr.srv
: Request used to confirm robot has completed instuction fromorder_handler
- msg:
CupDetection.msg
: Array to indicate which coaster spot are filled with cups.
- src:
menu_utilities
: custom python package which is responsible for codifing menu and providing helper functions for processing/tracking orders
- test:
- Location of integration testing
- unittest:
- Location of unit testing
- models:
- STL files for ingredient bottle models
- materials:
- PDF files for AprilTags to be printed
- bag:
- location for Rosbag file used for testing
package.xml
- Package configuration
CMakeLists.txt
- Build configuration
README.md
- Hello There!
The process loop of the robot is as follows:
- Take an order from the customer and validate it. Validation ensures the drink is on the menu and the ingredients are in stock to make the drink.
- If the order is valid, the customer is given a postive order number; the system will use this number to track it. If the order is not valid, the system returns an order number of 0 and an explanation of why the order could not be accepted.
- Once the order is accepted, the recipes of each drink in the order are processed into a list of instructions for the robot to execute. Instructions either tell the robot to grab an ingredient, pour an amount into a cup, or stock the ingredient. Until the order is complete, each instruction is sent to the robot one at a time.
- Meanwhile, the robot surveys the workspace and update the planning scene with the location of ingredients and coasters. Based on the type of the instruction, the robot can perform one of the following in 5-7:
- Execute the grab service - the grab service involves the robot resetting to a default location where it has good access to the entire workspace to be used, a cartesian motion to bring the robotic arm to the first ingredient with the grippers in place to grasp the bottle, and finally a grasping action that allows for the bottle to be lightly grasped without squeezing too hard.
- Execute the pour service - the pour service involves the robot executing a cartesian motion to bring the ingredient to a spot offset from the coasters location where it can be squeezed and pour an ingredient into each cup, a joint angle command to tilt the end effector with the bottle which allows the pour to be directly into the cup, a squeeze action which uses force control to squeeze the grippers and finally a reverse of the joint angle command previously sent to bring the gripper horizontal with the table.
- Execute the stock service - the stock service involves the robot executing a cartesian trajectory to return the robotic arm to the initial drink location, and a gripper position command to open the grippers gently and deposit the ingredient back at its starting location.
- Repeat 4-7 in order to fulfil each drink that the customer requires. Multi-ingredient drinks require these steps to be executed multiple times for each ingredient.
This is a link to our verbal order processing system in action: https://www.youtube.com/watch?v=76QoueeHdhA&t=9s
This package was developed and tested in ros-noetic.
- pyrealsesnse2 - Library to use and run the Intel Realsense D435i depth camera.
- MoveIt - The motion planning library used to provide the trajectories that enabled the robot to perform its tasks.
- libfranka/ franka_ros - This library allowed low-level control of the Emika Franka Panda robot and control of the gripper.
All code for this package was developed and test in Python 3.
Additionally, users will need to install OpenCv using:
pip3 install opencv-python
- Emika Franka Panda robot
- Intel Realsense D435i depth sensing camera
- 4 oz. washbottles (3x)
- 9 oz. solo cups (4x)
- Lasercut acrylic cup flight
- 3D printed Apriltag Coasters (3x for washbottles and 4x for flight)
- Safety Spillage Bins
- Tables