Skip to content

Instantly share code, notes, and snippets.

@jamesgregson
jamesgregson / euler.py
Last active September 6, 2019 13:26
Euler angles to rotation matrices and vice versa
"""Euler-angle to matrix and matrix to Euler-angle utility routines
This module provides utility routines to convert between 4x4 homogeneous
transformation matrices and Euler angles (and vice versa). It supports
all six rotation orders ('xyz','xzy','yxz','yzx','zxy','zyx') for rotations
around body axes.
Two primary functions are provided:
- rotation( theta, order='xyz' ): given input rotation angles in radians
@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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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>