Skip to content

Instantly share code, notes, and snippets.

jamesgregson /
Last active Oct 16, 2020
Simple & compact damped least-squares IK solver in <100 lines of python
A pretty small 3D IK solver, < 100 lines of code but > 100 lines of comments.
Low dependency (numpy, opencv-python, matplotlib) and includes visualization.
Not particularly fast.
Solves for joint rotations needed in a kinematic skeleton to minimize errors of a set
of end-effectors with respect to a corresponding set of target positions. Assumes
jamesgregson /
Last active Oct 4, 2020
Finite difference Jacobians of numeric functions
'''Finite difference Jacobians
Author: James Gregson
Date: 2020-10-04
Utility function to differentiate numeric functions with finite differences.
Useful for checking analytically derived Jacobian & gradient computations.
See bottom of file for example usage.
jamesgregson /
Created Jul 10, 2020
Spatial, Fourier and matrix representations of 2D filtering operations
import unittest
import numpy as np
import scipy.sparse as sparse
class Filter2D:
def __init__( self, offy, offx, vals ):
'''2D filtering operation with spatial, fourier and matrix features
- offy (integer sequence): vertical offsets of filter coefficients
jamesgregson /
Created Jan 4, 2020
(Over) Simplified JSONRPC in Python
'''Very simplified JSON-RPC server with endpoint registration
Try with:
curl -X POST -H "Content-type: application/json" -d '{"jsonrpc": "2.0", "id": 1, "method": "say_hello", "params": {"name": "James", "age": 11}}'
curl -X POST -H "Content-type: application/json" -d '{"jsonrpc": "2.0", "id": 1, "method": "say_hello", "params": {"name": "James"}}'
curl -X POST -H "Content-type: application/json" -d '{"jsonrpc": "2.0", "id": 1, "method": "say_hello", "params": ["James", 10]}'
curl -X POST -H "Content-type: application/json" -d '{"jsonrpc": "2.0", "id": 1, "method": "say_hello", "params": ["James"]}'
jamesgregson /
Last active Nov 9, 2019
Python ARAP mesh deformation
from typing import *
import time
import numpy as np
import scipy.sparse as sparse
import scipy.sparse.linalg as spla
def build_cotan_laplacian( points: np.ndarray, tris: np.ndarray ):
a,b,c = (tris[:,0],tris[:,1],tris[:,2])
A = np.take( points, a, axis=1 )
B = np.take( points, b, axis=1 )
jamesgregson /
Last active Oct 26, 2019
Simple contract implementation with decorator
import inspect
def contract( expects=[], ensures=[] ):
def func_wrapper( func ):
return Contract(function=func,preconditions=expects,postconditions=ensures )
return func_wrapper
class Contract:
class Args:
jamesgregson /
Created Oct 16, 2019
Python3 http.server with basic authorization
import time
import base64
from http.server import BaseHTTPRequestHandler, HTTPServer
class MyHandler(BaseHTTPRequestHandler):
def do_HEAD(self):
self.send_header('Content-type', 'text/html')
jamesgregson /
Created Sep 29, 2019
Python3 Stereo MJPG streaming with opencv
import cv2
import numpy as np
from http.server import BaseHTTPRequestHandler,HTTPServer
import io
import socket
import time
capture0 = None
capture1 = None
jamesgregson / kd_tree.h
Last active Sep 24, 2019
Simple KDTree (3D)
View kd_tree.h
#ifndef __KD_TREE_HEADER_H
#define __KD_TREE_HEADER_H
#include <set>
#include <list>
#include <tuple>
#include <queue>
#include <vector>
#include <algorithm>
jamesgregson / fsm.cpp
Created Sep 13, 2019
Fast Sweeping Method in 2D and 3D using PyBind11
View fsm.cpp
#include <pybind11/numpy.h>
#include <pybind11/pybind11.h>
namespace py = pybind11;
#include <cmath>