Giter VIP home page Giter VIP logo

coframe's Introduction

CoFrame

CoFrame is an educational environment used to train operators for collaborative robotic workcells.

We accomplish this with an authoring tool that incorporates a Blockly-based visual programming language called EvD-Script, a simulation environment built in Unity, and an expert checklist that directs the operator to think in four frames: Safety, Program Quality, Robot Performance, and Business Objectives.

System Architecture

The current version of this system involves a web-based front-end and a ROS-based backend used for executing reachability detection and trajectory planning. While the system functions basically without the backend, it is unable to generate data that is useful feedback without this connection. This means that to execute, you will need to install and run the ROS package according to the instructions below.

Note, there is a version of the system that is currently being developed that does not need this backend to function (available in the refactor branch. Currently, this version is not fully functional and may contain errors. We hope to have this new version fully functional soon.

Installation

CoFrame relies on many different components to get it working. Below, installation is described for each subsystem.

evd_authoring_app

We developed the authoring application using React and Fluent UI. All dependencies can be installed by navigating into the evd_authoring_app directory and running:

npm install

evd_ros_backend

First install ROS (one) noetic, preferrably full desktop install.

Then clone this repo into your catkin workspace's src directory. You will also need to install the following packages.

Wisc-HCI Specific Dependencies

General ROS Dependencies

Please also install the following python modules.

evd_unity_sim_app

We developed the Unity application under Windows 10 with Unity 2019.4.5f1. All dependencies are already included within the directory.

Deployment

evd_authoring_app

Just run the following command to load the development server, which should be sufficient for your purposes. Make sure to run this within the evd_authoring_app directory.

npm start

evd_ros_backend

EvD's backend is broken into a library evd_ros_core and the user's application space evd_ros_tasks. To runthe backend, just launch the following with the specific task as an arguement.

roslaunch evd_ros_tasks main.launch task:="<TASK NAME>"

Or just skip the pretext and call the specific task launch file. For example,

roslaunch evd_ros_tasks 3d_printer_machine_tending.launch

Under the hood, this will hook into the core launch files and will also launch task specific nodes.

evd_unity_sim_app

Please don't run this code directly. There is a test build available but the best experience is to use the version embedded within the authoring app.

Future Development

This project is accepting issues, pull-requests, feedback, etc. Our current version is still far away from the aims of this project so any input is appreciated.

For specific development guidence, checkout each subsystem's respective README.

coframe's People

Contributors

abhijeetmanohar avatar andrewjschoen avatar curthenrichs avatar hunterzh37 avatar nwhite365 avatar wischci avatar zhou433433 avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar

coframe's Issues

Pybullet Simulation Pipeline - Implement Basic interpolator

Interpolator sits before Lively-TK and after the robot interface/template.

This module should roughly approximate the low-level movement behavior expected on the UR3e robot.

Module should inherit from robot_template (and/or own a robot template obj)

EvD Trace Processor Test Functionality

I need to use the fake frontend to prove out the core simulation behavior that generates traces for EvD.

Based on the joint processor results, this should be a matter of testing just the node itself and less the underlying simulation.

Blockly Program - Zustandify

After Blockly Spike,

Work on defining blockly's data structure needs? How is EvDscript going to be converted into it. How should it interact with zustand.

Darken Background of Blockly Component

Possibly involves theming or a simple css swap.

Stretch goal: maybe look into how highlighting/selecting blocks could be influenced by the current frame [color].

Implement Graders

  • Performance (time/speed)
  • Collision
  • Pinch-Points
  • Payload
  • Wear-and-Tear
  • Occupancy

FakeEvdData Further Specification Needed

Frontend is currently faking some of EvD's data that will eventually be provided by the backend.

More of the node data (and structure) should be expressed in this file to act as a reference for component development.

(STALLED - Data Comm.) Object registration with Data Server

Tasks should register safety/environment objects and data objects like machines, things, etc. with the data server.

Data server should provide this as a partial update to program.

Data server should provide status updates when state changes (e.g., program loads), which can then trigger object registration.

Move Hololens Codebase into this Repo

Move Hololens code into this repository as a top-level project. That way we can remove the need to separately maintain that repo. Future work may use hololens as reference.

Add Options section in OpenModal

Options are read in from a comm channel (ROS) and can be displayed to the user to support loading in specific versions of applications

(SPIKE) Explore React Blockly Drawer

Confirm features of React Blockly Drawer: https://www.npmjs.com/package/react-blockly-drawer

Also, determine if/how

  • Blockly Highlighting
  • Blockly position of specific blocks in screen space
  • Block instances for skills, locations, waypoints, etc.
  • JSON representation instead of XML?

Then,

  • Define an EvD program structure that makes sense for blockly (how should program be stored so on component rerender blockly can be quickly updated)
  • Rethink parameterization of skills
    • Generally, should skills have parameters (and does this need to be explicitly built into EvD)
    • Specifically, how to best express the built-in skill parameterizations
    • SimplePickAndPlace needs to expose trajectories not just locations

If time allows maybe consider type checking on nodes (in order to prevent behavior like executing a waypoint as a primitive).

Update FeedbackTile from backend and track progress

  • Read from the issues server to determine feedback sections.
  • Handle behavior of checking off sections when children tasks are completed.
  • Handle how making changes to setup/program impacts requirements of re-doing check-offs.

EvD Joint Processor Test Functionality

I need to test out the joint processor for correct generation of joint and trace data.

This will require me to register some locations when I register the rest of the workcell (for the fake frontend).

Getting this to work will prove out the underlying pipeline for the trace process. Leaving only the trajectory generation plan, structure packing, and node logic to test in trace processor.

Implement graders on frontend

I am leaving the actual grader implementation for the frontend as I just don't have the bandwidth for it in the backend plus Andy presumably will be able to make better choices for the format that he needs.

  • Performance graders (time, speed)
  • Wear-and-tear
  • Collision Meshes (we need backend data)
  • Pinch-points (we need backend data ~ this is the most uncertain)
  • Payload
  • Occupancy zones

And anything else Andy thinks of / needs

Data Client - Finish implementation

Mostly need to address set behavior. Currently this is stubbed out.

Should also build in a periodic update scheme.

Should build in a method of getting UUIDs and their associated types without rest of content from backend.

Another computationally cheaper update flag pub should be provided with option to toggle between types at interface creation.

Clean up launch file structure

Current launch files need to be refactored. Better separation of concerns and confirm files in core do not depend on files from tasks.

Add thing types to evd_script context.

Things have a thing_type property as a string. This should probably be handled as a type declaration type. That way the same behavior can be used in machines / regions.

Data Server - Handle reordering for partials

Backend data server does not handle reorder manifest changes. These should probably be treated separately from set changes.

Reorder changes occur either on reorder function falls or on insert function calls.

Frontend ROS Interface

Need to specify the new ROS interface from frontend. Since the data server is being removed, the frontend will need to drive state changes in all ROS nodes.

Delete data_server in backend (and observe the chaos)

Removing the dataserver and shifting responsibilities of it and the issue server to the frontend. This is a pretty large change so things will break but it should simplify the interaction for all nodes in ROS (and all developers).

Pinch points in pybullet

This is the high risk item as it still requires some investigation. I need to detect the minimum distance between bodies except at the point where they actually are joints.

This also theoretically can be done on the frontend since it is a non-intuitive function on the joint state for a particular robot.

Rework Blockly EvD block definitions

Current implementation of blockly needs to be revisited.

  • Locations, waypoints, things, and machines should have their various instances provided in the toolbox. Likewise, each should provide their list of items for the instance dropdown.
  • Skills should have both an instance block and a definition block (including prebuilts). Instance blocks should not take in parameters at this time.
  • Type checking should be enforced. E.g., waypoints should not be inserted into program directly.
  • Parameterization needs to be updated on various blocks to match new backend model (subject to change)

Fill out RegionDetail

Fields to show:

  • Name
  • Description
  • Center Position
  • Center Orientation
  • Free Orientation (T/F)
  • Shape (determine whether it is a cube or sphere based on the presence of the shape-dependent fields, and allow the designer to switch between them)
  • Dimensions (X, Y, Z for cube, Radius for Sphere)

@curthenrichs might have suggestions on the orientation uncertainty fields (I forgot what he said)

Add edit-able and delete-able properties to nodes

Backend EvD script should provide edit-able and delete-able properties on all nodes. Properties should be read only for instantiated objects. Serialization/Deserialization should preserve edit and delete status.

Note that these properties are more or less frontend specific and probably will not build in behavior to check this at the server.

Collision Meshes, Occupancy Zones in Pybullet

I need to be able to receive a dict with environment objects from the configuration topic. I need to convert these into a collision object in pybullet (but one that allows the robot to pass through).

Effectively, I need to capture the minimum distance between each collision object and a set of valid robot bodies.

Same code can work for both collision meshes and occupancy zones.

EvD Script - External Documentation

EvDscript is currently under-documented in the backend.

Need to write a markdown document explaining what it is, how it is structured, and the usage.

Example code snippets from the debug_app should be provided.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.