Software framework to enable agile robotic assembly applications.

Related tags

Hardware ConnTact
Overview

ConnTact

Software framework to enable agile robotic assembly applications.

(Connect + Tactile)

Overview

Framework diagram

Installation

Development of framework was done under Ubuntu Focal (20.04) using ROS Noetic.

  • Clone the repository into the src/ directory of a ROS workspace (e.g., ~/ros_ws/src)
  • Install Python dependencies pip install transitions modern_robotics
  • Install ROS source dependencies:
    • cd ~/ros_ws/src
    • vcs import < conntact/dependencies.rosinstall
  • Install ROS package dependencies: rosdep install --rosdistro noetic --ignore-src --from-paths .
  • Source ROS and build the workspace: . /opt/ros/noetic/setup.bash, catkin build

Examples

The repository is currently set up with examples that demonstrate assembly tasks for the NIST assembly task board using a Universal Robots UR10e. Currently two algorithms are implemented that perform peg insertion tasks using a vertical searching method and a corner-contact searching method to find the holes.

To run these examples, open a terminals sourced to the built project workspace and run:

roslaunch conntact ur10e_upload_compliance.launch algorithm_selected:=
   

   

Where is either spiral_search_node or corner_search_node.

Usage

Detailed documentation coming soon...

Setting up a workcell

Configuring a new application

Acknowledgements

This project is primarily supported by the National Institute of Standards and Technology through the Agile Performance of Robotic Systems program under grant award number 70NANB21H018

Comments
  • Wrench orientation incorrect with non-vertical TCP orientation

    Wrench orientation incorrect with non-vertical TCP orientation

    The wrench transform pipeline doesn't handle angled contacts correctly. This should be fairly easy to solve with some transform math. The original wrench is already Stamped, so we should be able to do a DoTransform, or maybe convert the two vectors to Point objects and transform them individually.

    opened by John-Bonnin 2
  • Separate ConnStep from ConnTask module

    Separate ConnStep from ConnTask module

    Right now the two still live in one module, but best practice is to split them. This way it's easier to refer to the base class while developing your implementation.

    opened by John-Bonnin 1
  • Class Var/Config Values Purge

    Class Var/Config Values Purge

    We need to move as many configuration variable as possible to YAML files and document them clearly. Users should expect AssemblyTools to be a closed box and Algorithm Blocks and their Algorithm program to be their work site.

    opened by John-Bonnin 1
  • Force Boundary Comparison Overhaul

    Force Boundary Comparison Overhaul

    Every Algorithm Block uses speed and force "region checks" to move to the next state. These bound checks are very complicated invocations, going on for multiple lines. This kind of reasoning is critical to the re-usability of the system so this invocation needs to be much more streamlined. We should probably wrap the entire "situation sensing" operation, including a) conditions and b) confidence reasoning into its own method or maybe Class.

    We discussed moving the state reasoning to a new node entirely, the "Assembly State Emitter", but I don't remember how that was supposed to work. Each state is designed with only a few sets of very specific exit conditions; either ASE would need to be reconfigured per state (so it's no better than a sub-class) or it would need to be constantly checking all possible collision conditions.

    To check collision conditions, input force and position inputs have to be compared with the force-torque-position feedback from the environment; that is, we detect a surface by poking it, and we detect an edge by running over it. The ASE would need to be able to periodically "probe" in different directions, which would necessarily interrupt the algorithm's other motion commands, creating a very unpredictable behavior.

    I think we should create a Class of short-lived (i.e. until state transition) "Collision Checks" and iterate them each loop. Starting a new State instantiates little "watchers" with internal "confidence" levels and condition probes they can "request". Surface-finding "watcher" will request a motion toward the expected surface position. "Hole insertion watchers" will require small circles to return a circling normal force to indicate collision in all directions about an axis. Maybe this is good enough? Need to discuss.

    opened by John-Bonnin 1
  • Wrench Reinterpretation

    Wrench Reinterpretation

    Referring to the data flow diagram: on the "front and back" ends, right inside the input from hardware, the FT reading from hardware needs to be transformed to the TCP. This required transformation is the one which reinterprets incoming forces about the wrist as torques about the TCP, and reinterprets torques about the wrist as forces through the TCP. This should cause no change to current program functionality; it just corrects the high torque-to-force ratio when operating in corner mode.

    opened by John-Bonnin 1
  • Feature/wrench reinterpret

    Feature/wrench reinterpret

    Wrench reinterpretation includes both ends of the wrench pipeline

    • Incoming measurements from the load cell are reoriented to be relative to the goal frame.
    • forces and torques are reinterpreted under the assumption that the forces occur at the position of the TCP.
    • Commanded forces in world space are reoriented to match TCP orientation, maintaining consistency between inputs (mention above) and resultant outputs.

    Also conducted some minor tweaks to plot visuals, and removed some irrelevant comments.

    opened by John-Bonnin 0
  • Clean Up AssemblyTools Init, Move Config Values to YAML

    Clean Up AssemblyTools Init, Move Config Values to YAML

    Added Conntact_Config.yaml; Organized AssemblyTools class member instantiation; all constants are now drawn from Conntact_Config; Renaming and cleanup of "spiral_search_motion" method, and changed to rely on yaml params. Tested on hardware; runs properly on Spiral Search or Corner Search.

    opened by John-Bonnin 0
  • Peg Position Touchoff

    Peg Position Touchoff

    Make the "Find Surface" state call configurable enough to command "Find Reference Surface" which makes the robot poke its own stand, which has a known location, and thereby measure precisely the tip position of the peg in its grip. That would be easy to do if we add the right level of configurability.

    opened by John-Bonnin 0
  • Function Culling

    Function Culling

    AssemblyTools is messy! There are like 50 functions with very niche uses. We should pare them down or organize them so that users can identify the most useful and most important functions. This probably involves the reinstatement of the Utils class/subclass/tag.

    opened by John-Bonnin 0
  • Fixed wrench reinterpretation

    Fixed wrench reinterpretation

    Incoming wrench readings (conntext.average_wrench_gripper ) and outgoing wrench commands (topic ccc/target_wrench) are now correctly reoriented into task space and reinterpreted so that torques are about the tool tip.

    opened by John-Bonnin 0
  • Inconsistent Units in connfig, conntact_params, etc

    Inconsistent Units in connfig, conntact_params, etc

    Find all instances of the scalar "1000" and delete them so we can ask the user to always enter data into the configuration yamls in meters. In conntext, get_pose_from_yaml is a big offender. Make sure to fix the data in the yamls as you fix the code!

    opened by John-Bonnin 0
  • Clarify and Streamline Config Files

    Clarify and Streamline Config Files

    There are several layers of config files:

    • peg_in_hole_params for the example ROS nodes
    • conntact_params for the conntact instance on this hardware
    • connfig for the current task instance

    There's a lot of junk DNA in each of these files, and they don't include inline comment instructions about how to complete them.

    We need to

    • Delete unused items, or comment why they might be enabled for an application
    • Add guidance comments so these files work as templates for new users
    opened by John-Bonnin 0
  • Speed Parameters

    Speed Parameters

    No rotation speed parameter is exposed in conntext config. Actual speed of move/rotation achieved does not match conntext config file values. The robot moves much faster than the default ".03 m" max speed passed in. Make those values more accurate.

    opened by John-Bonnin 0
  • Enable rotation/ motion system overhaul

    Enable rotation/ motion system overhaul

    The robot currently can't receive an orientation command relative to the hole. Changing orientations is dangerous, causing fast unplanned motion of the wrist as it orbits around the TCP. To enable this feature while mitigating the risk of damaging collision, we need a reliable and transparent system for setting the desired position command and controlling the motion speed. A new motion command system is probably needed.

    opened by John-Bonnin 1
Owner
Southwest Research Institute Robotics
Open Source Robotics Programs
Southwest Research Institute Robotics
Robo Arm :: Rigging is a rigging addon for Blender that helps animating industrial robotic arms.

Robo Arm :: Rigging Robo Arm :: Rigging is a rigging addon for Blender that helps animating industrial robotic arms. It construct serial links(a kind

null 2 Nov 18, 2021
Example Python code for building RPi-controlled robotic systems

RPi Example Code Example Python code for building RPi-controlled robotic systems These python files have been compiled / developed by the Neurobionics

Elliott Rouse 2 Feb 4, 2022
A python script for macOS to enable scrolling with the 3M ergonomic mouse EM500GPS in any application.

A python script for macOS to enable scrolling with the 3M ergonomic mouse EM500GPS in any application.

null 3 Feb 19, 2022
The software that powers the sPot: a 4th generation

This code is meant to accompany this project in which a Spotify client is built into an iPod "Classic" from 2004. Everything is meant to run on a Raspberry Pi Zero W.

Guy Dupont 683 Dec 28, 2022
a fork of the OnionShare software better optimized for lower spec lightweight machines and ARM processors

OnionShare-Optimized A fork of the OnionShare software better optimized for lower spec lightweight machines and ARM processors such as Raspberry Pi or

ALTPORT 4 Aug 5, 2021
OpenStickFirmware is open source software designed to handle any and all tasks required in a custom Fight Stick

OpenStickFirmware is open source software designed to handle any and all tasks required in a custom Fight Stick. It can handle being the brains of your entire stick, or just handling the bells and whistles while your Brook board talks to your console.

Sleep Unit 23 Nov 24, 2022
Inykcal is a software written in python for selected E-Paper displays.

Inykcal is a software written in python for selected E-Paper displays. It converts these displays into useful information dashboards. It's open-source, free for personal use, fully modular and user-friendly. Despite all this, Inkycal can run well even on the Raspberry Pi Zero W. Oh, and it's open for third-party modules! Hooray!

Ace 727 Jan 2, 2023
Poupool is an overflow swimming pool control software

Poupool - The swimming pool controller Poupool is a swimming pool control software. It is based on Transitions, Pykka and Paho MQTT. The user interfac

Cyril Jaquier 8 Jul 18, 2022
Mycodo is open source software for the Raspberry Pi that couples inputs and outputs in interesting ways to sense and manipulate the environment.

Mycodo Environmental Regulation System Latest version: 8.12.9 Mycodo is open source software for the Raspberry Pi that couples inputs and outputs in i

Kyle Gabriel 2.3k Dec 29, 2022
Event-based hardware simulation framework

An event-based multi-device simulation framework providing configuration and orchestration of complex multi-device simulations.

Diamond Light Source Controls Group 3 Feb 1, 2022
A battery pack simulation tool that uses the PyBaMM framework

Overview of liionpack liionpack takes a 1D PyBaMM model and makes it into a pack. You can either specify the configuration e.g. 16 cells in parallel a

PyBaMM Team 40 Jan 5, 2023
Robot Framework keyword library wrapper for atlassian-python-api

Robot Framework keyword library wrapper for atlassian-python-api

Marcin Koperski 3 Jul 29, 2022
Python information display framework aimed at e-ink devices

My display, using a Raspberry Pi Zero W and Waveshare 6" e-paper hat infodisplay Modular information display framework aimed at e-ink devices. Built u

Niek Blankers 3 Apr 8, 2022
This is an incredible led matrix simulation using the ultimate mosaik co-simulation framework.

This project uses the mosaik co-simulation framework, developed by the brilliant developers at the high-ranked Offis institue for computer science, Oldenburg, Germany, to simulate multidimensional LED matrices.

Felix 1 Jan 28, 2022
:P Some basic stuff I'm gonna use for my upcoming Agile Software Development and Devops

reverse-image-search-py bash script.sh img_name.jpg Requirements pip install requests pip install pyshorteners Dry run [kunal@Gordonfreeman]$ bash sc

Sudhanva M 3 Dec 18, 2021
Self-supervised Deep LiDAR Odometry for Robotic Applications

DeLORA: Self-supervised Deep LiDAR Odometry for Robotic Applications Overview Paper: link Video: link ICRA Presentation: link This is the correspondin

Robotic Systems Lab - Legged Robotics at ETH Zürich 181 Dec 29, 2022
:truck: Agile Data Preparation Workflows made easy with dask, cudf, dask_cudf and pyspark

To launch a live notebook server to test optimus using binder or Colab, click on one of the following badges: Optimus is the missing framework to prof

Iron 1.3k Dec 30, 2022
Agile project management platform. Built on top of Django and AngularJS

Taiga Backend Documentation Currently, we have authored three main documentation hubs: API: Our API documentation and reference for developing from Ta

Taiga.io 5.8k Jan 5, 2023
Apache Liminal is an end-to-end platform for data engineers & scientists, allowing them to build, train and deploy machine learning models in a robust and agile way

Apache Liminals goal is to operationalise the machine learning process, allowing data scientists to quickly transition from a successful experiment to an automated pipeline of model training, validation, deployment and inference in production. Liminal provides a Domain Specific Language to build ML workflows on top of Apache Airflow.

The Apache Software Foundation 121 Dec 28, 2022
Agile Threat Modeling Toolkit

Threagile is an open-source toolkit for agile threat modeling:

Threagile 425 Jan 7, 2023