{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Calibration Postprocessing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Kalibr (D455 to Body IMU)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "from Go2Py.calibration import *\n", "import numpy as np\n", "np.set_printoptions(formatter={'float': lambda x: \"{0:0.6f}\".format(x)})" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "ext_params = [KalibrExtractExtrinsics(f'datasets/calibration/calibration/kalibr/dynamic/all/seq{i+1}.yaml') for i in range(5)]\n", "int_params = KalibrExtractIntrinsics(f'datasets/calibration/calibration/kalibr/dynamic/all/seq{1}.yaml')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def computeSE3Mean(poses):\n", " T0 = poses[0]\n", " log_delta_Ts = []\n", " for T in poses:\n", " log_delta_Ts.append(pin.log6(np.linalg.inv(T0)@T).vector)\n", " log_delta_Ts = np.vstack(log_delta_Ts)\n", " return T0@pin.exp6(np.mean(log_delta_Ts, axis=0)).homogeneous\n", "\n", "\n", "ext_result = {}\n", "int_result = {}\n", "camera_name_map = {'cam0':'infra1',\n", " 'cam1':'infra2',\n", " 'cam2':'color'}\n", "for cam in ['cam0', 'cam1', 'cam2']:\n", " poses = [r[f'{cam}_T_imu'] for r in ext_params]\n", " ext_result[f'{camera_name_map[cam]}_T_imu']=computeSE3Mean(poses)\n", " int_result[camera_name_map[cam]]=int_params[cam]" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'infra1': {'camera_model': 'pinhole',\n", " 'intrinsics': {'fu': 398.0379492735872,\n", " 'fv': 401.10555839769535,\n", " 'pu': 327.56389668833106,\n", " 'pv': 244.66328819850395},\n", " 'distortion_model': 'radtan',\n", " 'distortion_coeffs': {'k1': 0.022437463738179255,\n", " 'k2': -0.006800545399861931,\n", " 'r1': 0.0007861230173005672,\n", " 'r2': 0.0031405110415967147},\n", " 'resolution': [640, 480]},\n", " 'infra2': {'camera_model': 'pinhole',\n", " 'intrinsics': {'fu': 398.170676888213,\n", " 'fv': 401.14236478722404,\n", " 'pu': 324.30936661646456,\n", " 'pv': 244.30665138733275},\n", " 'distortion_model': 'radtan',\n", " 'distortion_coeffs': {'k1': 0.021509683195673927,\n", " 'k2': -0.005685185848086602,\n", " 'r1': 0.0005912786969070088,\n", " 'r2': 0.0015930212849673176},\n", " 'resolution': [640, 480]},\n", " 'color': {'camera_model': 'pinhole',\n", " 'intrinsics': {'fu': 389.87107372397037,\n", " 'fv': 392.45741669539916,\n", " 'pu': 323.75335233916996,\n", " 'pv': 244.24311882848974},\n", " 'distortion_model': 'radtan',\n", " 'distortion_coeffs': {'k1': -0.03133853627816805,\n", " 'k2': 0.04281860405665049,\n", " 'r1': 0.00042180931009971407,\n", " 'r2': 0.0024263659102242005},\n", " 'resolution': [640, 480]}}" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "int_result" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'infra1_T_imu': array([[-0.046, -0.999, 0.017, 0.054],\n", " [-0.092, -0.013, -0.996, 0.067],\n", " [0.995, -0.047, -0.092, -0.343],\n", " [0.000, 0.000, 0.000, 1.000]]),\n", " 'infra2_T_imu': array([[-0.040, -0.999, 0.017, -0.043],\n", " [-0.091, -0.013, -0.996, 0.066],\n", " [0.995, -0.041, -0.091, -0.344],\n", " [0.000, 0.000, 0.000, 1.000]]),\n", " 'color_T_imu': array([[-0.039, -0.999, 0.014, -0.007],\n", " [-0.091, -0.010, -0.996, 0.066],\n", " [0.995, -0.040, -0.090, -0.344],\n", " [0.000, 0.000, 0.000, 1.000]])}" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ext_result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vicon2Gt" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.887, 0.452, 0.097, 0.051],\n", " [-0.454, -0.891, -0.002, 0.006],\n", " [0.086, -0.046, 0.995, 0.017],\n", " [0.000, 0.000, 0.000, 1.000]])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "imu_T_marker = Vicon2GtExtractParams('datasets/calibration/calibration/vicon2gt/seq1/seq1_vicon2gt_info.txt')\n", "imu_T_marker" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Kinematics-Vicon" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "import pickle\n", "with open('datasets/calibration/calibration/kinematic-vicon-dataset/inplace_rotation.pkl', 'rb') as f:\n", " data = pickle.load(f)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "from Go2Py.sim.mujoco import Go2Sim\n", "robot = Go2Sim(dt=0.001)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "import time\n", "import numpy as np\n", "mjworld_Ts_base = []\n", "vworld_Ts_marker = []\n", "Kp = 200\n", "Kv = 5.0\n", "robot.standUpReset()\n", "for i in range(len(data['q'])):\n", " state = robot.getJointStates()\n", " tau = Kp*np.eye(12)@(data['q'][i] - state['q']).reshape(12,1)+data['tau'][i].reshape(12,1) + \\\n", " Kv*np.eye(12)@(data['dq'][i] - state['dq']).reshape(12,1)\n", " robot.setCommands(np.zeros(12), np.zeros(12), np.zeros(12), np.zeros(12), tau)\n", "\n", " t, q = robot.getPose()\n", " R = pin.Quaternion(np.hstack([q[1:], q[0]])).matrix()\n", " mjworld_T_base=np.vstack([np.hstack([R, t.reshape(3,1)]), np.array([0,0,0,1])])\n", " vworld_T_marker = data['world_T_marker'][i]\n", " mjworld_Ts_base.append(mjworld_T_base.reshape(1,4,4))\n", " vworld_Ts_marker.append(vworld_T_marker.reshape(1,4,4))\n", " robot.step()\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "mjworld_Ts_base = np.vstack(mjworld_Ts_base[:-3000])\n", "vworld_Ts_marker = np.vstack(vworld_Ts_marker[:-3000])" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.plot(vworld_Ts_marker[:,0:3,-1])" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(mjworld_Ts_base[:,0:3,-1])" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "from SimpleHandEye.solvers import OpenCVSolver" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "solver = OpenCVSolver()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "A = mjworld_Ts_base\n", "B = vworld_Ts_marker\n", "X , Y = solver.solve(A = A, B = B)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "t1 = np.array([A[i]@X for i in range(A.shape[0])])[:,0:3,-1]\n", "t2 = np.array([Y@B[i] for i in range(B.shape[0])])[:,0:3,-1]\n", "plt.plot(t1)\n", "plt.plot(t2)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.888, 0.453, 0.076, 0.023],\n", " [-0.454, -0.891, -0.004, -0.000],\n", " [0.066, -0.038, 0.997, 0.058],\n", " [0.000, 0.000, 0.000, 1.000]])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "base_T_marker = X\n", "base_T_marker\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Load Lidar to Camera extrinsics" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.124, 0.311, -0.942, -0.140],\n", " [-0.992, 0.014, -0.125, -0.037],\n", " [-0.026, 0.950, 0.310, -0.041],\n", " [0.000, 0.000, 0.000, 1.000]])" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import json\n", "with open('datasets/calibration/calibration/utlidar-camera/calib.json', 'r') as f: \n", " ext = json.load(f)\n", "lidar_T_camera = ext['results']['init_T_lidar_camera']\n", "t = np.array(lidar_T_camera[0:3])\n", "q = np.array(lidar_T_camera[3:])\n", "R = pin.Quaternion(q).matrix()\n", "lidar_T_camera=np.vstack([np.hstack([R, t.reshape(3,1)]), np.array([0,0,0,1])])\n", "lidar_T_camera" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Combine it All" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'infra1_T_imu': array([[-0.046, -0.999, 0.017, 0.054],\n", " [-0.092, -0.013, -0.996, 0.067],\n", " [0.995, -0.047, -0.092, -0.343],\n", " [0.000, 0.000, 0.000, 1.000]]),\n", " 'infra2_T_imu': array([[-0.040, -0.999, 0.017, -0.043],\n", " [-0.091, -0.013, -0.996, 0.066],\n", " [0.995, -0.041, -0.091, -0.344],\n", " [0.000, 0.000, 0.000, 1.000]]),\n", " 'color_T_imu': array([[-0.039, -0.999, 0.014, -0.007],\n", " [-0.091, -0.010, -0.996, 0.066],\n", " [0.995, -0.040, -0.090, -0.344],\n", " [0.000, 0.000, 0.000, 1.000]]),\n", " 'base_T_marker': array([[-0.888, 0.453, 0.076, 0.023],\n", " [-0.454, -0.891, -0.004, -0.000],\n", " [0.066, -0.038, 0.997, 0.058],\n", " [0.000, 0.000, 0.000, 1.000]]),\n", " 'imu_T_marker': array([[-0.887, 0.452, 0.097, 0.051],\n", " [-0.454, -0.891, -0.002, 0.006],\n", " [0.086, -0.046, 0.995, 0.017],\n", " [0.000, 0.000, 0.000, 1.000]]),\n", " 'lidar_T_color': array([[0.124, 0.311, -0.942, -0.140],\n", " [-0.992, 0.014, -0.125, -0.037],\n", " [-0.026, 0.950, 0.310, -0.041],\n", " [0.000, 0.000, 0.000, 1.000]])}" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ext_result['base_T_marker'] = base_T_marker\n", "ext_result['imu_T_marker'] = imu_T_marker\n", "ext_result['lidar_T_color'] = lidar_T_camera\n", "ext_result" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "from Go2Py.calibration import ExtrinsicCalibrationManager\n", "manager = ExtrinsicCalibrationManager()" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "for key, T in zip(ext_result.keys(), ext_result.values()):\n", " parent = key.split('_T_')[0]\n", " child = key.split('_T_')[1]\n", " manager.add(parent=parent, child=child, R=T[0:3,0:3], t=T[0:3,-1])" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "ext_wrt_base = manager.get_all('base')\n", "ext_wrt_imu = manager.get_all('imu')\n", "result = {'ext_wrt_base':ext_wrt_base,\n", " 'ext_wrt_imu':ext_wrt_base}" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "with open('datasets/calibration/final_results.pkl', 'wb') as f:\n", " pickle.dump(result, f)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "import pickle\n", "with open('datasets/calibration/final_results.pkl', 'rb') as f:\n", " result = pickle.load(f)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'infra1_wrt_base': array([[-0.04633745, -0.07139989, 0.99637086, 0.32161791],\n", " [-0.99882303, -0.01099835, -0.04723963, 0.03330488],\n", " [ 0.01433134, -0.99738713, -0.07080622, 0.08162181],\n", " [ 0. , 0. , 0. , 1. ]]),\n", " 'imu_wrt_base': array([[ 9.99781597e-01, -2.84572838e-05, -2.08987443e-02,\n", " -2.73533177e-02],\n", " [-7.00270663e-06, 9.99998561e-01, -1.69667706e-03,\n", " -5.49944525e-03],\n", " [ 2.08987625e-02, 1.69645285e-03, 9.99780158e-01,\n", " 3.99126757e-02],\n", " [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", " 1.00000000e+00]]),\n", " 'infra2_wrt_base': array([[-0.04036617, -0.07029462, 0.9967092 , 0.31796855],\n", " [-0.99908557, -0.01122962, -0.0412544 , -0.06191919],\n", " [ 0.01409262, -0.99746306, -0.06977704, 0.08277337],\n", " [ 0. , 0. , 0. , 1. ]]),\n", " 'color_wrt_base': array([[-0.03955514, -0.07002279, 0.99676085, 0.31941529],\n", " [-0.99915546, -0.00833421, -0.04023564, -0.02578968],\n", " [ 0.01112463, -0.99751058, -0.06963399, 0.08231088],\n", " [ 0. , 0. , 0. , 1. ]]),\n", " 'marker_wrt_base': array([[-8.88383872e-01, 4.52720962e-01, 7.62746821e-02,\n", " 2.29437353e-02],\n", " [-4.54285606e-01, -8.90848853e-01, -3.59301716e-03,\n", " -6.99694933e-06],\n", " [ 6.63225789e-02, -3.78424687e-02, 9.97080369e-01,\n", " 5.84578170e-02],\n", " [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", " 1.00000000e+00]]),\n", " 'lidar_wrt_base': array([[-0.96602083, -0.08677698, 0.24346151, 0.19088012],\n", " [-0.08810804, 0.99609608, 0.00543825, -0.00108608],\n", " [-0.24298297, -0.01619745, -0.96989531, 0.00789635],\n", " [ 0. , 0. , 0. , 1. ]])}" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result['ext_wrt_base']" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'infra1_wrt_base': array([[-0.04633745, -0.07139989, 0.99637086, 0.32161791],\n", " [-0.99882303, -0.01099835, -0.04723963, 0.03330488],\n", " [ 0.01433134, -0.99738713, -0.07080622, 0.08162181],\n", " [ 0. , 0. , 0. , 1. ]]),\n", " 'imu_wrt_base': array([[ 9.99781597e-01, -2.84572838e-05, -2.08987443e-02,\n", " -2.73533177e-02],\n", " [-7.00270663e-06, 9.99998561e-01, -1.69667706e-03,\n", " -5.49944525e-03],\n", " [ 2.08987625e-02, 1.69645285e-03, 9.99780158e-01,\n", " 3.99126757e-02],\n", " [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", " 1.00000000e+00]]),\n", " 'infra2_wrt_base': array([[-0.04036617, -0.07029462, 0.9967092 , 0.31796855],\n", " [-0.99908557, -0.01122962, -0.0412544 , -0.06191919],\n", " [ 0.01409262, -0.99746306, -0.06977704, 0.08277337],\n", " [ 0. , 0. , 0. , 1. ]]),\n", " 'color_wrt_base': array([[-0.03955514, -0.07002279, 0.99676085, 0.31941529],\n", " [-0.99915546, -0.00833421, -0.04023564, -0.02578968],\n", " [ 0.01112463, -0.99751058, -0.06963399, 0.08231088],\n", " [ 0. , 0. , 0. , 1. ]]),\n", " 'marker_wrt_base': array([[-8.88383872e-01, 4.52720962e-01, 7.62746821e-02,\n", " 2.29437353e-02],\n", " [-4.54285606e-01, -8.90848853e-01, -3.59301716e-03,\n", " -6.99694933e-06],\n", " [ 6.63225789e-02, -3.78424687e-02, 9.97080369e-01,\n", " 5.84578170e-02],\n", " [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", " 1.00000000e+00]]),\n", " 'lidar_wrt_base': array([[-0.96602083, -0.08677698, 0.24346151, 0.19088012],\n", " [-0.08810804, 0.99609608, 0.00543825, -0.00108608],\n", " [-0.24298297, -0.01619745, -0.96989531, 0.00789635],\n", " [ 0. , 0. , 0. , 1. ]])}" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result['ext_wrt_imu']" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 0.31941529, -0.02578968, 0.08231088]),\n", " array([-1.64049103, -0.01112486, -1.61036424]))" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pinocchio as pin\n", "T = result['ext_wrt_imu']['color_wrt_base']\n", "from scipy.spatial.transform import Rotation \n", "T[0:3,-1], Rotation.from_matrix(T[0:3,0:3]).as_euler(seq='xyz')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3D Visualizations" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2024-05-28T02:56:54Z WARN re_sdk_comms::tcp_client] Tried to flush while TCP stream was still Pending. Data was possibly dropped.\n", "[2024-05-28T02:56:54Z INFO re_sdk_comms::server] Hosting a SDK server over TCP at 0.0.0.0:9876. Connect with the Rerun logging SDK.\n", "[2024-05-28T02:56:54Z INFO winit::platform_impl::platform::x11::window] Guessed window scale factor: 1\n", "[2024-05-28T02:56:54Z INFO re_sdk_comms::server] New SDK client connected: 127.0.0.1:37256\n", "[2024-05-28T02:56:54Z INFO re_sdk_comms::server] New SDK client connected: 127.0.0.1:37250\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[2024-05-28T02:56:54Z WARN wgpu_hal::vulkan::instance] Unable to find extension: VK_EXT_swapchain_colorspace\n", "MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0\n", "\n", "[2024-05-28T02:56:54Z INFO egui_wgpu] There were 3 available wgpu adapters: {backend: Vulkan, device_type: DiscreteGpu, name: \"NVIDIA GeForce GTX 1050\", driver: \"NVIDIA\", driver_info: \"535.171.04\", vendor: 0x10DE, device: 0x1C8D}, {backend: Vulkan, device_type: IntegratedGpu, name: \"Intel(R) HD Graphics 630 (KBL GT2)\", driver: \"Intel open-source Mesa driver\", driver_info: \"Mesa 21.2.6\", vendor: 0x8086, device: 0x591B}, {backend: Vulkan, device_type: Cpu, name: \"llvmpipe (LLVM 12.0.0, 256 bits)\", driver: \"llvmpipe\", driver_info: \"Mesa 21.2.6 (LLVM 12.0.0)\", vendor: 0x10005}\n" ] } ], "source": [ "import rerun as rr\n", "rr.init('ext_visualization')\n", "rr.spawn()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "rr.log(\"world/base\", rr.Transform3D(translation=[0,0,0], rotation=rr.Quaternion(xyzw=[0,0,0,1])))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "t=[0.28945, 0, -0.046825]\n", "R = Rotation.from_euler(seq='xyz', angles=[0, 2.8782, 0])\n", "q = R.as_quat()\n", "rr.log(\"world/base/lidar\", rr.Transform3D(translation=t, rotation=rr.Quaternion(xyzw=q)))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "result['ext_wrt_base']['lidar_wrt_base']=np.vstack([np.hstack([R.as_matrix(), np.array(t).reshape(3,1)]), np.array([0,0,0,1])])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "base infra1\n", "base imu\n", "base infra2\n", "base color\n", "base marker\n", "base lidar\n" ] } ], "source": [ "import pinocchio as pin\n", "for key, T in result['ext_wrt_base'].items():\n", " child, parent = key.split('_wrt_')\n", " print(parent, child)\n", " qq = pin.Quaternion(T[0:3,0:3])\n", " rr.log(f\"{parent}/{child}\", rr.Transform3D(translation=T[0:3,-1].tolist(), rotation=rr.Quaternion(xyzw=[qq.x,qq.y,qq.z, qq.w])))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 4 }