This GitHub Organization hosts code that is developed and maintained by the members of the Neuro-Mechatronics Lab (NML) at Carnegie Mellon University.
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.
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. |
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. |
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.
Please refer to this guide for how to contribute your own code.
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!
I've added links to some general and code-specific resources that I've found helpful.
- 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.
- 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.
- 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.
- 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.)
- Notepad++
- This is a small text editor that opens everything.
- Also I will fight you if you tell me this is not an IDE.
- 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.)
- Really nice tool for visualizing/segmenting MRI image datasets (i.e.
- 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.
- This is what I use to slice
- 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.