自動生成相機標定軌跡
需求:在進行單雙目標定時(camera in hand or camera to hand),需要移動機械手,使camera可多角度得對場景的標定板進行採集。
程式碼:
import random
import itertools
import numpy as np
from toolbox import vgl
from enum import Enum
class CameraMountingType(Enum):
CameraToHand = 0
CameraInHand = 1
class GenCaliPoses(object):
def __init__(self, config):
self.config = config
def genPoses(self):
# 事先設定一個初始pose,在該pose下,最好將相機正對標定板
Ttr = vgl.Pose2T(self.config['OriginPose'])
# 用尺子大概量出相機到標定板的距離
Tot = vgl.Pose2T(self.config['CaliRangeConfig_dict']['object_in_tool'])
# 求出object(如標定板)在機械手的座標
Tor = Ttr.dot(Tot)
# 偏移量設定
range_delta_u = self.config['CaliRangeConfig_dict']['range_delta_u']
range_delta_v = self.config['CaliRangeConfig_dict']['range_delta_v']
range_delta_w = self.config['CaliRangeConfig_dict']['range_delta_w']
random_delta_x = self.config['CaliRangeConfig_dict']['random_delta_x']
random_delta_y = self.config['CaliRangeConfig_dict']['random_delta_y']
random_delta_z = self.config['CaliRangeConfig_dict']['random_delta_z']
random_delta_u = self.config['CaliRangeConfig_dict']['random_delta_u']
random_delta_v = self.config['CaliRangeConfig_dict']['random_delta_v']
random_delta_w = self.config['CaliRangeConfig_dict']['random_delta_w']
u_range = np.arange(*range_delta_u)
v_range = np.arange(*range_delta_v)
w_range = np.arange(*range_delta_w)
all_pose = []
for u_delta, v_delta, w_delta in itertools.product(u_range, v_range, w_range):
delta_x = random.uniform(*random_delta_x)
delta_y = random.uniform(*random_delta_y)
delta_z = random.uniform(*random_delta_z)
delta_u = u_delta + random.uniform(*random_delta_u)
delta_v = v_delta + random.uniform(*random_delta_v)
delta_w = w_delta + random.uniform(*random_delta_w)
# 求出object座標的變換
T_obj_change = vgl.Pose2T([0, 0, 0, delta_u, delta_v, delta_w])
# T_obj_change 為object(標定板)相對相機的座標標換
# 在eye in hand 與eye to hand 時需注意是否使用T_obj_change的逆
if self.config['HandEyeType'] == CameraMountingType.CameraToHand:
Ttr_new = (Tor.dot(T_obj_change)).dot(np.linalg.inv(Tot))
else:
Ttr_new = (Tor.dot(np.linalg.inv(T_obj_change))).dot(np.linalg.inv(Tot))
Ttr_new[0, 3] += delta_x
Ttr_new[1, 3] += delta_y
Ttr_new[2, 3] += delta_z
new_pose = (vgl.T2Pose(Ttr_new)).flatten()
all_pose.append(new_pose)
return all_pose
if __name__ == '__main__':
my_config = {
'HandEyeType': CameraMountingType.CameraToHand,
'OriginPose': [480.830, 0, 321.712, -0, -0.033, -180],
'CaliRangeConfig_dict': {
'object_in_tool': [0, 0, 321.7, 0, 0, 180],
'range_delta_u': [-10.0, 11.0, 10.0],
'range_delta_v': [-10.0, 11.0, 10.0],
'range_delta_w': [-10.0, 11.0, 10.0],
'random_delta_x': [-10.0, 10.0],
'random_delta_y': [-5.0, 5.0],
'random_delta_z': [-5.0, 5.0],
'random_delta_u': [-3.0, 3.0],
'random_delta_v': [-3.0, 3.0],
'random_delta_w': [-3.0, 3.0], },
}
gcp = GenCaliPoses(my_config)
gcp.genPoses()
相關文章
- Leaflet 帶箭頭軌跡以及沿軌跡帶方向的動態marker
- Halcon單相機標定
- KITTI_00_SPTAM軌跡和KITTI_00_ORB軌跡ORB
- 百度路書實現軌跡回放(標準)
- 軌跡資料 (三)
- 軌跡規劃理解
- 智慧手環運動軌跡API獲取API
- 軌跡聯邦用到的具體公式 + 軌跡模組的設計公式
- 聊聊 RocketMQ 訊息軌跡MQ
- 智慧手環軌跡APIAPI
- 《黎之軌跡》發售紀念訪談:《軌跡》系列的巨大分水嶺
- not noly go —— 執行軌跡[一]Go
- HybridDBforPostgreSQL軌跡相似(伴隨分析)SQL
- 機器人學之運動學筆記【7】—— 機械手臂軌跡規劃例項機器人筆記
- 1個小時快速搭建一個物流系統(包括軌跡查詢,物流動態提醒,軌跡視覺化,寄件)視覺化
- GPS軌跡記錄器:myTracks for macMac
- 如何繪製完美的滑鼠軌跡
- 阿里「軌跡可控版Sora」,告別「抽卡」,讓影片生成更符合物理規律阿里Sora
- Autoware 標定工具 Calibration Tool Kit 聯合標定 Robosense-16 和 ZED 相機!Zed
- Mapbox 輕鬆規劃起始點軌跡
- cesium製作自己的騎行軌跡
- 風場視覺化:繪製軌跡視覺化
- mapboxgl實現帶箭頭軌跡線
- 百度地圖軌跡(Andriod SDK)地圖
- Python量化交易進階講堂-視覺化隨機漫步軌跡Python視覺化隨機
- 高速攝影機輔助的相機方位線上標定
- 5分鐘學會物流軌跡地圖API嵌入到頁面中,實現物流軌跡視覺化地圖API視覺化
- 擴散模型如何構建新一代決策智慧體?超越自迴歸,同時生成長序列規劃軌跡模型智慧體
- 短視訊標題自動生成工具,助你打造爆款標題
- 2020研究生數模整理(2):plotly雙座標軸繪製多個軌跡
- 【軟體硬體】相機標定(Camera calibration)原理、步驟
- 飛槳Tracking目標跟蹤庫開源!涵蓋業界主流的VOT演算法,精準檢測動態目標軌跡演算法
- 自動生成serialVersionUIDUI
- uuid自動生成UI
- 電腦自動關機怎麼設定 win10怎麼設定自動關機Win10
- w10怎麼設定自動關機_w10如何定時自動關機
- css3實現橢圓軌跡旋轉CSSS3
- 幾何校準 和 ros環境下標定Balser相機ROS