Skip to content
@Neuro-Mechatronics-Interfaces

Neuromechatronics Lab

Code repos towards developing and deploying neuro-mechatronics interfaces and related experiments/simulations.

NML GitHub

This GitHub Organization hosts code that is developed and maintained by the members of the Neuro-Mechatronics Lab (NML) at Carnegie Mellon University.

Contents


Repos

This README is a continual work-in-progress. Please add a brief snippet and link where you feel is appropriate, if you add any repository to this organization. This is typically better to do when you are just starting a project, as that is a good time to outline documentation for how you think the code should be organized anyways.

MATLAB

I've tried to start moving any MATLAB "packages" (folders led with + e.g. +plot, which effectively creates a namespace for functions in those folders e.g. plot.data() for function data.m in the +plot folder).
Any such code repositories in this GitHub organization should start with the name convention matlab_package__ and should be initialized as a gitmodule with the folder name specified at the top-level of that repo (e.g. +opx for matlab_package__opx). Note that there are a couple of older repos from when I was just starting off, which do not follow this convention but to avoid making everyone's lives miserable I haven't gone back and changed the repo name.

Name Maintainer Description
+bd Max Murphy MATLAB package for handling behavioral metadata such as trial success rate, trajectory curvature, etc...
+buf Max Murphy MATLAB package for efficient circle buffer using compiled mex functions. About twice as fast as MATLAB 2024 circshift.
+circ Adapted by Max from Philipp Berens (MATLAB FEX originally) Statistics package for distributions on circles.
+ckc multiple MATLAB package for organizing data for CKC, primarily meant to have pre-processing and CKC reader functions.
+cm Max Murphy Colormaps for MATLAB projects scattered throughout this organization's repos.
+charts Max Murphy MATLAB chart-classes (primarily for use with HD surface-EMG datasets).
+default Max Murphy Max's favorite default overrides for MATLAB built-ins such as figure.
+digilent Max Murphy Parsing/processing for csv snippets collected using the Digilent Analog Discovery 2 in Oscilloscope mode using the Waveforms software.
+ds8r Jonathan Shulgach & Max Murphy MATLAB package gitmodule for running multiple DS8R via DAQ.
+enum Max Murphy Enumeration classes commonly used by Max.
+error Max Murphy MATLAB package gitmodule for error-handling that raises "standard" MATLAB exceptions.
+gui Max Murphy "Light-weight" GUIs (not .mlapp applications) for data curation (and presumably other purposes).
+io Max Murphy Class with "loader" or "reader" functions (particularly useful for repos that access raptor).
+mats Adapted by Max from Mats et al. 2021 JNE (and elsewhere) MATLAB package containing Mats' mystical field visualization tools.
+opx Adapted by Max from Plexon MATLAB package gitmodule for working with OmniPlex (Plexon).
+plot Max Murphy MATLAB package for different types of NML data plots.
+sounds Max Murphy Package with sound files (if initialized repo with Git-LFS) and function to play them.
+TMSiSAGA Adapted by Max from TMSi This repository contains code for the MATLAB and Python APIs compatible with Windows 10 v2.0.0 drivers and beyond for use with the TMSi SAGA data recorder.
+utils Max Murphy Package with generic matlab utility functions, like parameter parsing from varargin, etc.

ROS2

Different ROS2 nodes (probably in Python3) that let task-devices communicate with other environments, such as Unity.

Name Maintainer Description
NML Bag Andrew Whitford A simple Python package for working with ROS2 bag files.
Force Dimension ROS2 package Andrew Whitford A ROS2 package for interfacing with Force Dimension haptics robots.
ROS2 Data Agent Jonathan Shulgach Code for a multipurpose file explorer specializing in reading ROS2 topic data from '.bag' or '.db3' files.
ROS2 Reward Dispenser Jonathan Shulgach A ROS2 package with Arduino sketches to operate a water reward system using serial commands. LED matrix display and loadcell measuring scale supported.

Contributing

Using git

If you are not familiar with git or version-control in general, it's recommended to familiarize yourself (it is a lot easier than you would think) by going here.

Contributing code

Please refer to this guide for how to contribute your own code.

Documenting contributions

Please refer to this guide for how to document your code contributions. If you add a repo to this GitHub organization, please follow these instructions when setting it up!


Resources

I've added links to some general and code-specific resources that I've found helpful.

NML

  • Lab "wiki"
    • More of an internal lab webpage since it's technically not a wiki (sorry Doug).
  • Lab manual
    • This is a helpful document that was primarily compiled by Ashley.
  • Lab onboarding
    • This onboarding document continues to evolve as students/staff join.
  • Raptor
    • Andrew put together documentation and internally-hosted repos here.

Version Control

  • git
    • Start here if you are new to VCS and git in general.
  • GitKraken
    • This is my favorite GitHub desktop graphical interface.
    • It is pretty useful for tracking projects with multiple developers and branches.

IDEs

  • Arduino
    • My favorite tool for flashing code onto microcontrollers.
    • Also, see this tutorial for CH34X drivers (in case you use cheap alternatives off Amazon like me, and always forget how to install...)
  • Thonny
    • Anaconda and PyCharm are both nice, but they are too big. Thonny is a light-weight IDE for Python that works right away on every platform I've ever tried (including running MicroPython or CircuitPython on Pi Pico, etc.)
      • Incidentally, this is my favorite evaluation board that uses the RP2040 chipset. It has a hardwired TCP/IP controller that makes it easy to network on a local ethernet switch.
  • Notepad++
    • This is a small text editor that opens everything.
    • Also I will fight you if you tell me this is not an IDE.

CAD

  • OpenSCAD
    • This is a free, light-weight CAD tool.
    • Also, check-out all the free model libraries others have shared!
      • (Although, note that they do use GPL-3.0 license, if you care about that kind of stuff.)
  • 3D Slicer
    • Really nice tool for visualizing/segmenting MRI image datasets (i.e. .dcm or .nifti, etc.)
  • PrusaSlicer
    • This is what I use to slice .stl files to get the .gcode for using my 3D-printer, which anybody in NML can use if they want.

Graphics

  • Inkscape
    • This is a free tool that you can use instead of Adobe PhotoShop.
    • Also, check out this helpful Inkscape Tutorial by Ashley!
  • GIMP
    • This is also free, you can use it instead of Adobe Illustrator.

Pinned Loading

  1. .github .github Public

    Public-facing wiki for Neuro-Mechatronics-Interfaces GitHub organization.

  2. 2TMSi_MATLAB_Interface 2TMSi_MATLAB_Interface Public

    MATLAB

Repositories

Showing 10 of 53 repositories
  • Intan_EMG_Python Public

    Tools and demos for working with EMG data from intan using python

    Neuro-Mechatronics-Interfaces/Intan_EMG_Python’s past year of commit activity
    Python 0 MIT 0 0 0 Updated Nov 12, 2024
  • MATLAB_Data_Plots Public

    Import as +plot to use as gitmodule in MATLAB repo.

    Neuro-Mechatronics-Interfaces/MATLAB_Data_Plots’s past year of commit activity
    MATLAB 1 0 0 0 Updated Oct 30, 2024
  • Mouse_SCS Public

    For running Mouse SCS experiments

    Neuro-Mechatronics-Interfaces/Mouse_SCS’s past year of commit activity
    MATLAB 0 0 0 0 Updated Oct 28, 2024
  • matlab_package__msg Public

    This should be initialized as gitmodule with name `+msg` to use as a MATLAB package.

    Neuro-Mechatronics-Interfaces/matlab_package__msg’s past year of commit activity
    MATLAB 0 0 0 0 Updated Oct 28, 2024
  • matlab_package__cm Public Forked from m053m716/cm

    Initialize as gitmodule with name `+cm`

    Neuro-Mechatronics-Interfaces/matlab_package__cm’s past year of commit activity
    MATLAB 0 1 0 0 Updated Oct 27, 2024
  • matlab_package__io Public Forked from m053m716/-io

    Matlab package for input/output conventional consistency; initialize as submodule with name `+io`.

    Neuro-Mechatronics-Interfaces/matlab_package__io’s past year of commit activity
    MATLAB 0 1 0 0 Updated Oct 27, 2024
  • matlab_package__ckc Public

    This should be initialized as gitmodule with name `+ckc` to use as a MATLAB package.

    Neuro-Mechatronics-Interfaces/matlab_package__ckc’s past year of commit activity
    MATLAB 0 0 0 0 Updated Oct 24, 2024
  • Decomposition-Export Public

    Examples/instructions on how to export data from .poly5 or Intan RHD for DEMUSE pipeline.

    Neuro-Mechatronics-Interfaces/Decomposition-Export’s past year of commit activity
    MATLAB 0 0 0 0 Updated Oct 22, 2024
  • Neuro-Mechatronics-Interfaces/2TMSi_MATLAB_Interface’s past year of commit activity
    MATLAB 0 0 0 0 Updated Sep 24, 2024
  • KiCAD_Utilities Public

    MATLAB or Python functions/scripts to help with things like electrode coordinate placement etc. on PCB layouts in KiCAD specifically.

    Neuro-Mechatronics-Interfaces/KiCAD_Utilities’s past year of commit activity
    Python 0 0 0 0 Updated Sep 10, 2024

Top languages

Loading…

Most used topics

Loading…