Skip to content

Instantly share code, notes, and snippets.

@jamesgregson
jamesgregson / ik.py
Last active October 16, 2020 05:01
Simple & compact damped least-squares IK solver in <100 lines of python
'''
james.gregson@gmail.com
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
jamesgregson / jacobian_fd.py
Last active October 4, 2020 23:31
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
jamesgregson / filter.py
Created July 10, 2020 03:11
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
Args:
- offy (integer sequence): vertical offsets of filter coefficients
@jamesgregson
jamesgregson / jsonrpc_example.py
Created January 4, 2020 19:05
(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}}' http://127.0.0.1:8000
curl -X POST -H "Content-type: application/json" -d '{"jsonrpc": "2.0", "id": 1, "method": "say_hello", "params": {"name": "James"}}' http://127.0.0.1:8000
curl -X POST -H "Content-type: application/json" -d '{"jsonrpc": "2.0", "id": 1, "method": "say_hello", "params": ["James", 10]}' http://127.0.0.1:8000
curl -X POST -H "Content-type: application/json" -d '{"jsonrpc": "2.0", "id": 1, "method": "say_hello", "params": ["James"]}' http://127.0.0.1:8000
'''
@jamesgregson
jamesgregson / arap.py
Last active March 17, 2023 22:10
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
jamesgregson / contract.py
Last active October 26, 2019 23:26
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
jamesgregson / server.py
Created October 16, 2019 04:01
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_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
@jamesgregson
jamesgregson / camera-server.py
Created September 29, 2019 20:50
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
jamesgregson / kd_tree.h
Last active September 24, 2019 14:29
Simple KDTree (3D)
#ifndef __KD_TREE_HEADER_H
#define __KD_TREE_HEADER_H
#include <set>
#include <list>
#include <tuple>
#include <queue>
#include <vector>
#include <algorithm>
@jamesgregson
jamesgregson / fsm.cpp
Created September 13, 2019 15:41
Fast Sweeping Method in 2D and 3D using PyBind11
/*cppimport
<%
setup_pybind11(cfg)
%>
*/
#include <pybind11/numpy.h>
#include <pybind11/pybind11.h>
namespace py = pybind11;
#include <cmath>