对上交代码进行修改,主要将能量机关去掉,添加了同济的PnP位姿解算,但是同济有个四元数,获取IMU部分没有启用,可能导致精度不够。当前还存在反陀螺功能,修改为逻辑和弹道预测相结合,主要在时间关系上进行调整。

This commit is contained in:
2026-03-21 11:57:34 +08:00
commit 56985997ae
80 changed files with 60253 additions and 0 deletions

232
tools/TrainCNN/backward.py Executable file
View File

@@ -0,0 +1,232 @@
#!/usr/bin/python3
print("Preparing...")
import tensorflow as tf
import os
from tqdm import tqdm
import generate
import forward
import cv2
import numpy as np
import mvsdk
print("Finish!")
def save_kernal(fp, val):
print(val.shape[2], file=fp)
print(val.shape[3], file=fp)
print(val.shape[1], file=fp)
print(val.shape[0], file=fp)
for in_channel in range(val.shape[2]):
for out_channel in range(val.shape[3]):
for row in range(val.shape[0]):
for col in range(val.shape[1]):
print(val[row][col][in_channel][out_channel], file=fp)
def save_weight_mat(fp, val):
print(val.shape[0], file=fp)
print(val.shape[1], file=fp)
for row in range(val.shape[0]):
for col in range(val.shape[1]):
print(val[row][col], file=fp)
def save_bias(fp, val):
print(val.shape[0], file=fp)
for i in range(val.shape[0]):
print(val[i], file=fp)
def save_para(folder, paras, names, info):
os.system("mkdir %s/%s" % (folder, info))
for para, name in zip(paras, names):
fp = open("%s/%s/%s" % (folder, info, name), "w")
if name[-1:] == "b":
save_bias(fp, para)
elif name[:2] == "fc":
save_weight_mat(fp, para)
elif name[:4] == "conv":
save_kernal(fp, para)
fp.close()
STEPS = 100000
BATCH = 40
LEARNING_RATE_BASE = 0.0003
LEARNING_RATE_DECAY = 0.99
MOVING_AVERAGE_DECAY = 0.99
def train(dataset, show_bar=False):
x = tf.placeholder(tf.float32, [None, generate.SRC_ROWS, generate.SRC_COLS, generate.SRC_CHANNELS])
y_ = tf.placeholder(tf.float32, [None, forward.OUTPUT_NODES])
keep_rate = tf.placeholder(tf.float32)
nodes, vars, vars_name = forward.forward(x, 0.01, keep_rate)
y = nodes[-1]
ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1))
# ce = tf.nn.weighted_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1), pos_weight=1)
cem = tf.reduce_mean(ce)
loss = cem + tf.add_n(tf.get_collection("losses"))
global_step = tf.Variable(0, trainable=False)
learning_rate = tf.train.exponential_decay(
LEARNING_RATE_BASE,
global_step,
len(dataset.train_samples) / BATCH,
LEARNING_RATE_DECAY,
staircase=False)
train_step = tf.train.AdamOptimizer(learning_rate).minimize(loss, global_step=global_step)
ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)
ema_op = ema.apply(tf.trainable_variables())
with tf.control_dependencies([train_step, ema_op]):
train_op = tf.no_op(name='train')
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True))
with tf.Session(config=config) as sess:
init_op = tf.global_variables_initializer()
sess.run(init_op)
bar = tqdm(range(STEPS), ascii=True, dynamic_ncols=True)
for i in bar:
images_samples, labels_samples = dataset.sample_train_sets(BATCH, 0.03)
_, loss_value, step = sess.run(
[train_op, loss, global_step],
feed_dict={x: images_samples, y_: labels_samples, keep_rate: 0.3}
)
if step % 500 == 0:
test_images, test_labels = dataset.sample_test_sets(10000)
test_acc, output = sess.run([accuracy, y],
feed_dict={x: test_images, y_: test_labels, keep_rate: 1.0})
output = np.argmax(output, axis=1)
real = np.argmax(test_labels, axis=1)
print("=============test-set===============")
for n in range(forward.OUTPUT_NODES):
print("label: %d, precise: %f, recall: %f" %
(n, np.mean(real[output == n] == n), np.mean(output[real == n] == n)))
train_images, train_labels = dataset.sample_train_sets(10000)
train_acc, output = sess.run([accuracy, y],
feed_dict={x: train_images, y_: train_labels, keep_rate: 1.0})
output = np.argmax(output, axis=1)
real = np.argmax(train_labels, axis=1)
print("=============train-set===============")
for n in range(forward.OUTPUT_NODES):
print("label: %d, precise: %f, recall: %f" %
(n, np.mean(real[output == n] == n), np.mean(output[real == n] == n)))
print("\n")
if train_acc >= 0.99 and test_acc >= 0.99:
vars_val = sess.run(vars)
save_para(
"model",
vars_val,
vars_name,
"steps:%d-train_acc:%f-test_acc:%f" % (step, train_acc, test_acc)
)
bar.set_postfix({"loss": loss_value, "train_acc": train_acc, "test_acc": test_acc})
# print("save done!")
# pred = sess.run(y, feed_dict={x: test_images, keep_rate:1.0})
# nodes_val = sess.run(nodes, feed_dict={x:test_images})
# return vars_val, nodes_val
DevList = mvsdk.CameraEnumerateDevice()
nDev = len(DevList)
if nDev < 1:
print("No camera was found!")
return
for i, DevInfo in enumerate(DevList):
print("{}: {} {}".format(i, DevInfo.GetFriendlyName(), DevInfo.GetPortType()))
i = 0 if nDev == 1 else int(input("Select camera: "))
DevInfo = DevList[i]
print(DevInfo)
# 打开相机
hCamera = 0
try:
hCamera = mvsdk.CameraInit(DevInfo, -1, -1)
except mvsdk.CameraException as e:
print("CameraInit Failed({}): {}".format(e.error_code, e.message))
return
# 获取相机特性描述
cap = mvsdk.CameraGetCapability(hCamera)
# 判断是黑白相机还是彩色相机
monoCamera = (cap.sIspCapacity.bMonoSensor != 0)
# 黑白相机让ISP直接输出MONO数据而不是扩展成R=G=B的24位灰度
if monoCamera:
mvsdk.CameraSetIspOutFormat(hCamera, mvsdk.CAMERA_MEDIA_TYPE_MONO8)
else:
mvsdk.CameraSetIspOutFormat(hCamera, mvsdk.CAMERA_MEDIA_TYPE_BGR8)
# 相机模式切换成连续采集
mvsdk.CameraSetTriggerMode(hCamera, 0)
# 手动曝光曝光时间30ms
mvsdk.CameraSetAeState(hCamera, 0)
mvsdk.CameraSetExposureTime(hCamera, 30 * 1000)
# 让SDK内部取图线程开始工作
mvsdk.CameraPlay(hCamera)
# 计算RGB buffer所需的大小这里直接按照相机的最大分辨率来分配
FrameBufferSize = cap.sResolutionRange.iWidthMax * cap.sResolutionRange.iHeightMax * (1 if monoCamera else 3)
# 分配RGB buffer用来存放ISP输出的图像
# 备注从相机传输到PC端的是RAW数据在PC端通过软件ISP转为RGB数据如果是黑白相机就不需要转换格式但是ISP还有其它处理所以也需要分配这个buffer
pFrameBuffer = mvsdk.CameraAlignMalloc(FrameBufferSize, 16)
while (cv2.waitKey(1) & 0xFF) != ord('q'):
# 从相机取一帧图片
try:
pRawData, FrameHead = mvsdk.CameraGetImageBuffer(hCamera, 200)
mvsdk.CameraImageProcess(hCamera, pRawData, pFrameBuffer, FrameHead)
mvsdk.CameraReleaseImageBuffer(hCamera, pRawData)
# 此时图片已经存储在pFrameBuffer中对于彩色相机pFrameBuffer=RGB数据黑白相机pFrameBuffer=8位灰度数据
# 把pFrameBuffer转换成opencv的图像格式以进行后续算法处理
frame_data = (mvsdk.c_ubyte * FrameHead.uBytes).from_address(pFrameBuffer)
frame = np.frombuffer(frame_data, dtype=np.uint8)
frame = frame.reshape((FrameHead.iHeight, FrameHead.iWidth,
1 if FrameHead.uiMediaType == mvsdk.CAMERA_MEDIA_TYPE_MONO8 else 3))
frame = cv2.resize(frame, (640, 480), interpolation=cv2.INTER_LINEAR)
cv2.imshow("Press q to end", frame)
if (cv2.waitKey(1) & 0xFF) == ord(' '):
roi = cv2.selectROI("roi", frame)
roi = frame[roi[1]:roi[1] + roi[3], roi[0]:roi[0] + roi[2]]
print(roi)
cv2.imshow("box", roi)
image = cv2.resize(roi, (48, 36))
image = image.astype(np.float32) / 255.0
out = sess.run(y, feed_dict={x: [image]})
print(out)
print(np.argmax(out))
except mvsdk.CameraException as e:
if e.error_code != mvsdk.CAMERA_STATUS_TIME_OUT:
print("CameraGetImageBuffer failed({}): {}".format(e.error_code, e.message))
# 关闭相机
mvsdk.CameraUnInit(hCamera)
# 释放帧缓存
mvsdk.CameraAlignFree(pFrameBuffer)
if __name__ == "__main__":
# import os
# os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
# os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
dataset = generate.DataSet("/home/xinyang/Workspace/box_resize")
train(dataset, show_bar=True)
input("press enter to continue...")

94
tools/TrainCNN/cv_grab.py Normal file
View File

@@ -0,0 +1,94 @@
#coding=utf-8
import cv2
import numpy as np
import mvsdk
def main_loop():
# 枚举相机
DevList = mvsdk.CameraEnumerateDevice()
nDev = len(DevList)
if nDev < 1:
print("No camera was found!")
return
for i, DevInfo in enumerate(DevList):
print("{}: {} {}".format(i, DevInfo.GetFriendlyName(), DevInfo.GetPortType()))
i = 0 if nDev == 1 else int(input("Select camera: "))
DevInfo = DevList[i]
print(DevInfo)
# 打开相机
hCamera = 0
try:
hCamera = mvsdk.CameraInit(DevInfo, -1, -1)
except mvsdk.CameraException as e:
print("CameraInit Failed({}): {}".format(e.error_code, e.message) )
return
# 获取相机特性描述
cap = mvsdk.CameraGetCapability(hCamera)
# 判断是黑白相机还是彩色相机
monoCamera = (cap.sIspCapacity.bMonoSensor != 0)
# 黑白相机让ISP直接输出MONO数据而不是扩展成R=G=B的24位灰度
if monoCamera:
mvsdk.CameraSetIspOutFormat(hCamera, mvsdk.CAMERA_MEDIA_TYPE_MONO8)
else:
mvsdk.CameraSetIspOutFormat(hCamera, mvsdk.CAMERA_MEDIA_TYPE_BGR8)
# 相机模式切换成连续采集
mvsdk.CameraSetTriggerMode(hCamera, 0)
# 手动曝光曝光时间30ms
mvsdk.CameraSetAeState(hCamera, 0)
mvsdk.CameraSetExposureTime(hCamera, 30 * 1000)
# 让SDK内部取图线程开始工作
mvsdk.CameraPlay(hCamera)
# 计算RGB buffer所需的大小这里直接按照相机的最大分辨率来分配
FrameBufferSize = cap.sResolutionRange.iWidthMax * cap.sResolutionRange.iHeightMax * (1 if monoCamera else 3)
# 分配RGB buffer用来存放ISP输出的图像
# 备注从相机传输到PC端的是RAW数据在PC端通过软件ISP转为RGB数据如果是黑白相机就不需要转换格式但是ISP还有其它处理所以也需要分配这个buffer
pFrameBuffer = mvsdk.CameraAlignMalloc(FrameBufferSize, 16)
while (cv2.waitKey(1) & 0xFF) != ord('q'):
# 从相机取一帧图片
try:
pRawData, FrameHead = mvsdk.CameraGetImageBuffer(hCamera, 200)
mvsdk.CameraImageProcess(hCamera, pRawData, pFrameBuffer, FrameHead)
mvsdk.CameraReleaseImageBuffer(hCamera, pRawData)
# 此时图片已经存储在pFrameBuffer中对于彩色相机pFrameBuffer=RGB数据黑白相机pFrameBuffer=8位灰度数据
# 把pFrameBuffer转换成opencv的图像格式以进行后续算法处理
frame_data = (mvsdk.c_ubyte * FrameHead.uBytes).from_address(pFrameBuffer)
frame = np.frombuffer(frame_data, dtype=np.uint8)
frame = frame.reshape((FrameHead.iHeight, FrameHead.iWidth, 1 if FrameHead.uiMediaType == mvsdk.CAMERA_MEDIA_TYPE_MONO8 else 3) )
frame = cv2.resize(frame, (640,480), interpolation = cv2.INTER_LINEAR)
cv2.imshow("Press q to end", frame)
roi = cv2.selectROI("roi", frame)
roi = frame[roi[1]:roi[1]+roi[3], roi[0]:roi[0]+roi[2]]
print(roi)
cv2.imshow("box", roi)
except mvsdk.CameraException as e:
if e.error_code != mvsdk.CAMERA_STATUS_TIME_OUT:
print("CameraGetImageBuffer failed({}): {}".format(e.error_code, e.message) )
# 关闭相机
mvsdk.CameraUnInit(hCamera)
# 释放帧缓存
mvsdk.CameraAlignFree(pFrameBuffer)
def main():
try:
main_loop()
finally:
cv2.destroyAllWindows()
main()

114
tools/TrainCNN/forward.py Normal file
View File

@@ -0,0 +1,114 @@
import tensorflow as tf
def get_weight(shape, regularizer=None):
w = tf.Variable(tf.truncated_normal(shape, stddev=0.1))
if regularizer is not None:
tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w))
return w
def get_bias(shape):
b = tf.Variable(tf.zeros(shape))
return b
def conv2d(x, w):
return tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding="VALID")
def avg_pool_2x2(x):
return tf.nn.avg_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="VALID")
def max_pool_2x2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="VALID")
# 第一层卷积核大小
CONV1_KERNAL_SIZE = 5
# 第一层卷积输出通道数
CONV1_OUTPUT_CHANNELS = 6
# 第二层卷积核大小
CONV2_KERNAL_SIZE = 3
# 第二层卷积输出通道数
CONV2_OUTPUT_CHANNELS = 10
# 第三层卷积核大小
CONV3_KERNAL_SIZE = 3
# 第三层卷积输出通道数
CONV3_OUTPUT_CHANNELS = 14
# 第一层全连接宽度
FC1_OUTPUT_NODES = 60
# 第二层全连接宽度(输出标签类型数)
FC2_OUTPUT_NODES = 15
# 输出标签类型数
OUTPUT_NODES = FC2_OUTPUT_NODES
def forward(x, regularizer=None, keep_rate=tf.constant(1.0)):
vars = []
vars_name = []
nodes = []
conv1_w = get_weight(
[CONV1_KERNAL_SIZE, CONV1_KERNAL_SIZE, int(x.shape[3]), CONV1_OUTPUT_CHANNELS]
)
conv1_b = get_bias([CONV1_OUTPUT_CHANNELS])
conv1 = tf.nn.relu(tf.nn.bias_add(conv2d(x, conv1_w), conv1_b))
pool1 = avg_pool_2x2(conv1)
print("conv1: ", conv1.shape)
print("pool1: ", pool1.shape)
vars.extend([conv1_w, conv1_b])
vars_name.extend(["conv1_w", "conv1_b"])
nodes.extend([conv1, pool1])
conv2_w = get_weight(
[CONV2_KERNAL_SIZE, CONV2_KERNAL_SIZE, CONV1_OUTPUT_CHANNELS, CONV2_OUTPUT_CHANNELS]
)
conv2_b = get_bias([CONV2_OUTPUT_CHANNELS])
conv2 = tf.nn.relu(tf.nn.bias_add(conv2d(pool1, conv2_w), conv2_b))
pool2 = avg_pool_2x2(conv2)
print("conv2: ", conv2.shape)
vars.extend([conv2_w, conv2_b])
vars_name.extend(["conv2_w", "conv2_b"])
nodes.extend([conv2, pool2])
conv3_w = get_weight(
[CONV3_KERNAL_SIZE, CONV3_KERNAL_SIZE, CONV2_OUTPUT_CHANNELS, CONV3_OUTPUT_CHANNELS]
)
conv3_b = get_bias([CONV3_OUTPUT_CHANNELS])
conv3 = tf.nn.relu(tf.nn.bias_add(conv2d(pool2, conv3_w), conv3_b))
print("conv3: ", conv3.shape)
vars.extend([conv3_w, conv3_b])
vars_name.extend(["conv3_w", "conv3_b"])
nodes.extend([conv3])
conv_shape = conv3.get_shape().as_list()
node = conv_shape[1] * conv_shape[2] * conv_shape[3]
reshaped = tf.reshape(conv3, [-1, node])
reshaped = tf.nn.dropout(reshaped, keep_rate)
print("reshaped: ", reshaped.shape)
fc1_w = get_weight([node, FC1_OUTPUT_NODES], regularizer)
fc1_b = get_bias([FC1_OUTPUT_NODES])
fc1 = tf.nn.relu(tf.matmul(reshaped, fc1_w) + fc1_b)
vars.extend([fc1_w, fc1_b])
vars_name.extend(["fc1_w", "fc1_b"])
nodes.extend([fc1])
fc2_w = get_weight([FC1_OUTPUT_NODES, FC2_OUTPUT_NODES], regularizer)
fc2_b = get_bias([FC2_OUTPUT_NODES])
fc2 = tf.matmul(fc1, fc2_w) + fc2_b
vars.extend([fc2_w, fc2_b])
vars_name.extend(["fc2_w", "fc2_b"])
nodes.extend([fc2])
return nodes, vars, vars_name

104
tools/TrainCNN/generate.py Normal file
View File

@@ -0,0 +1,104 @@
import numpy as np
import os
import cv2
import random
from tqdm import tqdm
from forward import OUTPUT_NODES
# 原图像行数
SRC_ROWS = 36
# 原图像列数
SRC_COLS = 48
# 原图像通道数
SRC_CHANNELS = 3
class DataSet:
def __init__(self, folder):
self.train_samples = []
self.train_labels = []
self.test_samples = []
self.test_labels = []
self.generate_data_sets(folder)
def file2nparray(self, name):
image = cv2.imread(name)
image = cv2.resize(image, (SRC_COLS, SRC_ROWS))
image = image.astype(np.float32)
return image / 255.0
def id2label(self, id):
a = np.zeros([OUTPUT_NODES])
a[id] = 1
return a[:]
def generate_data_sets(self, folder):
sets = []
for i in range(OUTPUT_NODES):
dir = "%s/id%d" % (folder, i)
files = os.listdir(dir)
for file in tqdm(files, postfix={"loading id": i}, dynamic_ncols=True):
if file[-3:] == "jpg":
sample = self.file2nparray("%s/%s" % (dir, file))
label = self.id2label(i)
if random.random() < 0.7:
self.train_samples.append(sample)
self.train_labels.append(label)
if i == 0:
tmp = sample.copy()
tmp = tmp[:, :, ::-1]
self.train_samples.append(tmp)
self.train_labels.append(label)
else:
tmp = sample.copy()
tmp = 1.2 * tmp
tmp = np.where(tmp > 1, 1, tmp)
tmp = np.where(tmp < 0, 0, tmp)
self.train_samples.append(tmp)
self.train_labels.append(label)
tmp = sample.copy()
tmp = 0.8 * tmp
tmp = np.where(tmp > 1, 1, tmp)
tmp = np.where(tmp < 0, 0, tmp)
self.train_samples.append(tmp)
self.train_labels.append(label)
else:
self.test_samples.append(sample)
self.test_labels.append(label)
self.train_samples = np.array(self.train_samples)
self.train_labels = np.array(self.train_labels)
self.test_samples = np.array(self.test_samples)
self.test_labels = np.array(self.test_labels)
return sets
def sample_train_sets(self, length, std=0.0):
samples = []
labels = []
for i in range(length):
id = random.randint(0, len(self.train_samples) - 1)
samples.append(self.train_samples[id])
labels.append(self.train_labels[id])
samples = np.array(samples).copy()
samples += np.random.normal(0, std, samples.shape)
labels = np.array(labels)
return samples, labels
def sample_test_sets(self, length, std=0.0):
samples = []
labels = []
for i in range(length):
id = random.randint(0, len(self.test_samples) - 1)
samples.append(self.test_samples[id])
labels.append(self.test_labels[id])
samples = np.array(samples).copy()
samples += np.random.normal(0, std, samples.shape)
labels = np.array(labels)
return samples, labels
def all_train_sets(self, std=0.0):
return self.train_samples[:], self.train_labels[:]
def all_test_sets(self, std=0.0):
return self.test_samples[:], self.test_labels[:]

111
tools/TrainCNN/grab.py Normal file
View File

@@ -0,0 +1,111 @@
#coding=utf-8
import mvsdk
def main():
# 枚举相机
DevList = mvsdk.CameraEnumerateDevice()
nDev = len(DevList)
if nDev < 1:
print("No camera was found!")
return
for i, DevInfo in enumerate(DevList):
print("{}: {} {}".format(i, DevInfo.GetFriendlyName(), DevInfo.GetPortType()))
i = 0 if nDev == 1 else int(input("Select camera: "))
DevInfo = DevList[i]
print(DevInfo)
# 打开相机
hCamera = 0
try:
hCamera = mvsdk.CameraInit(DevInfo, -1, -1)
except mvsdk.CameraException as e:
print("CameraInit Failed({}): {}".format(e.error_code, e.message) )
return
# 获取相机特性描述
cap = mvsdk.CameraGetCapability(hCamera)
PrintCapbility(cap)
# 判断是黑白相机还是彩色相机
monoCamera = (cap.sIspCapacity.bMonoSensor != 0)
# 黑白相机让ISP直接输出MONO数据而不是扩展成R=G=B的24位灰度
if monoCamera:
mvsdk.CameraSetIspOutFormat(hCamera, mvsdk.CAMERA_MEDIA_TYPE_MONO8)
# 相机模式切换成连续采集
mvsdk.CameraSetTriggerMode(hCamera, 0)
# 手动曝光曝光时间30ms
mvsdk.CameraSetAeState(hCamera, 0)
mvsdk.CameraSetExposureTime(hCamera, 30 * 1000)
# 让SDK内部取图线程开始工作
mvsdk.CameraPlay(hCamera)
# 计算RGB buffer所需的大小这里直接按照相机的最大分辨率来分配
FrameBufferSize = cap.sResolutionRange.iWidthMax * cap.sResolutionRange.iHeightMax * (1 if monoCamera else 3)
# 分配RGB buffer用来存放ISP输出的图像
# 备注从相机传输到PC端的是RAW数据在PC端通过软件ISP转为RGB数据如果是黑白相机就不需要转换格式但是ISP还有其它处理所以也需要分配这个buffer
pFrameBuffer = mvsdk.CameraAlignMalloc(FrameBufferSize, 16)
# 从相机取一帧图片
try:
pRawData, FrameHead = mvsdk.CameraGetImageBuffer(hCamera, 2000)
mvsdk.CameraImageProcess(hCamera, pRawData, pFrameBuffer, FrameHead)
mvsdk.CameraReleaseImageBuffer(hCamera, pRawData)
# 此时图片已经存储在pFrameBuffer中对于彩色相机pFrameBuffer=RGB数据黑白相机pFrameBuffer=8位灰度数据
# 该示例中我们只是把图片保存到硬盘文件中
status = mvsdk.CameraSaveImage(hCamera, "./grab.bmp", pFrameBuffer, FrameHead, mvsdk.FILE_BMP, 100)
if status == mvsdk.CAMERA_STATUS_SUCCESS:
print("Save image successfully. image_size = {}X{}".format(FrameHead.iWidth, FrameHead.iHeight) )
else:
print("Save image failed. err={}".format(status) )
except mvsdk.CameraException as e:
print("CameraGetImageBuffer failed({}): {}".format(e.error_code, e.message) )
# 关闭相机
mvsdk.CameraUnInit(hCamera)
# 释放帧缓存
mvsdk.CameraAlignFree(pFrameBuffer)
def PrintCapbility(cap):
for i in range(cap.iTriggerDesc):
desc = cap.pTriggerDesc[i]
print("{}: {}".format(desc.iIndex, desc.GetDescription()) )
for i in range(cap.iImageSizeDesc):
desc = cap.pImageSizeDesc[i]
print("{}: {}".format(desc.iIndex, desc.GetDescription()) )
for i in range(cap.iClrTempDesc):
desc = cap.pClrTempDesc[i]
print("{}: {}".format(desc.iIndex, desc.GetDescription()) )
for i in range(cap.iMediaTypeDesc):
desc = cap.pMediaTypeDesc[i]
print("{}: {}".format(desc.iIndex, desc.GetDescription()) )
for i in range(cap.iFrameSpeedDesc):
desc = cap.pFrameSpeedDesc[i]
print("{}: {}".format(desc.iIndex, desc.GetDescription()) )
for i in range(cap.iPackLenDesc):
desc = cap.pPackLenDesc[i]
print("{}: {}".format(desc.iIndex, desc.GetDescription()) )
for i in range(cap.iPresetLut):
desc = cap.pPresetLutDesc[i]
print("{}: {}".format(desc.iIndex, desc.GetDescription()) )
for i in range(cap.iAeAlmSwDesc):
desc = cap.pAeAlmSwDesc[i]
print("{}: {}".format(desc.iIndex, desc.GetDescription()) )
for i in range(cap.iAeAlmHdDesc):
desc = cap.pAeAlmHdDesc[i]
print("{}: {}".format(desc.iIndex, desc.GetDescription()) )
for i in range(cap.iBayerDecAlmSwDesc):
desc = cap.pBayerDecAlmSwDesc[i]
print("{}: {}".format(desc.iIndex, desc.GetDescription()) )
for i in range(cap.iBayerDecAlmHdDesc):
desc = cap.pBayerDecAlmHdDesc[i]
print("{}: {}".format(desc.iIndex, desc.GetDescription()) )
main()

2344
tools/TrainCNN/mvsdk.py Normal file

File diff suppressed because it is too large Load Diff

52
tools/analysis.py Normal file
View File

@@ -0,0 +1,52 @@
import matplotlib.pyplot as plt
import numpy as np
fsend = open("send.info")
frecv = open("recv.info")
send_lines = fsend.readlines()[:-1]
recv_lines = frecv.readlines()[:-1]
send_infos = [line.split(" ") for line in send_lines]
recv_infos = [line.split(" ") for line in recv_lines]
send_times = [float(info[0]) for info in send_infos]
recv_times = [float(info[0]) for info in recv_infos]
send_yaw = [float(info[1]) for info in send_infos]
TargetAngle= [float(info[1]) for info in recv_infos]
RealAngle = [float(info[2]) for info in recv_infos]
length = min(len(send_times), len(recv_times))
send_times = send_times[:length]
recv_times = recv_times[:length]
send_yaw = send_yaw[:length]
TargetAngle= TargetAngle[:length]
RealAngle = RealAngle[:length]
time_base = min(send_times[0], recv_times[0])
send_times = np.array(send_times) - time_base
recv_times = np.array(recv_times) - time_base
TargetAngle = TargetAngle[:300]
RealAngle = RealAngle[:300]
send_times = send_times[:300]
recv_times = recv_times[:300]
send_yaw = send_yaw[:300]
TargetAngle = np.array(TargetAngle)
TargetAngle -= TargetAngle.mean()
RealAngle = np.array(RealAngle)
RealAngle -= RealAngle.mean()
plt.plot(send_times, send_yaw, label="send-yaw")
plt.plot(recv_times, TargetAngle,label="TargetAngle")
plt.plot(recv_times, RealAngle, label="RealAngle")
plt.scatter(send_times, send_yaw, label="send-yaw")
plt.scatter(recv_times, TargetAngle,label="TargetAngle")
plt.scatter(recv_times, RealAngle, label="RealAngle")
plt.legend()
plt.show()

7
tools/auto-pull.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
cd $(dirname $0)/../
timeout 8 git pull
cd cmake-build-debug
cmake ..
make -j4

9
tools/create-startup.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/bash
echo "#!/bin/bash" > $2/startup-run
echo "echo sjturm | sudo -S cpufreq-set -g performance" >> $2/startup-run
echo "mkdir $1/Mark" >> $2/startup-run
echo "mkdir $1/gimbal_video" >> $2/startup-run
echo "mkdir $1/armor_box_photo" >> $2/startup-run
echo "gnome-terminal -- bash -c \"echo sjturm | sudo -S $1/tools/monitor.sh \\\"$2/run --run-with-camera --save-video --save-mark --show-armor-box --wait-uart --save-labelled-boxes\\\"\"" >> $2/startup-run
chmod +x $2/startup-run

8
tools/logger.hpp Normal file
View File

@@ -0,0 +1,8 @@
#pragma once
// Minimal logger stub — no external logging library required.
// Replace with a real logger (e.g. spdlog) if needed.
#include <iostream>
#define LOG_INFO(...) (void)0
#define LOG_WARN(...) (void)0
#define LOG_ERROR(...) (void)0
#define LOG_DEBUG(...) (void)0

68
tools/math_tools.hpp Normal file
View File

@@ -0,0 +1,68 @@
#pragma once
// math_tools.hpp
// 内联实现 solver.cpp 所需的全部数学工具函数,无外部依赖。
#include <cmath>
#include <Eigen/Dense>
namespace tools
{
// ──────────────────────────────────────────────────────────────────────────────
// square(x): 返回 x 的平方
// ──────────────────────────────────────────────────────────────────────────────
inline double square(double x) { return x * x; }
// ──────────────────────────────────────────────────────────────────────────────
// limit_rad(angle): 将弧度角限制在 (-π, π] 范围内
// ──────────────────────────────────────────────────────────────────────────────
inline double limit_rad(double angle)
{
constexpr double two_pi = 2.0 * M_PI;
angle = std::fmod(angle + M_PI, two_pi);
if (angle < 0.0) angle += two_pi;
return angle - M_PI;
}
// ──────────────────────────────────────────────────────────────────────────────
// eulers(R, ax0, ax1, ax2): 从旋转矩阵 R 提取欧拉角(内禀旋转,按 ax0->ax1->ax2 顺序)
//
// 常用调用方式eulers(R, 2, 1, 0) 对应 ZYXYaw-Pitch-Roll顺序。
// 返回 Vector3d { angle_ax0, angle_ax1, angle_ax2 }
// ──────────────────────────────────────────────────────────────────────────────
inline Eigen::Vector3d eulers(const Eigen::Matrix3d & R, int ax0, int ax1, int ax2)
{
// 使用 Eigen 内置的欧拉角接口(内禀旋转)
return R.eulerAngles(ax0, ax1, ax2);
}
// ──────────────────────────────────────────────────────────────────────────────
// xyz2ypd(xyz): 将三维空间坐标转换为 [yaw, pitch, distance]
//
// 坐标系约定(与云台/世界坐标系一致):
// x 轴:前方(射击方向)
// y 轴:左方
// z 轴:上方
//
// 返回 Vector3d { yaw, pitch, distance }(单位:弧度,弧度,米)
// ──────────────────────────────────────────────────────────────────────────────
inline Eigen::Vector3d xyz2ypd(const Eigen::Vector3d & xyz)
{
double distance = xyz.norm();
double yaw = std::atan2(xyz.y(), xyz.x());
double pitch = std::atan2(xyz.z(), std::sqrt(xyz.x() * xyz.x() + xyz.y() * xyz.y()));
return Eigen::Vector3d(yaw, pitch, distance);
}
// ──────────────────────────────────────────────────────────────────────────────
// get_abs_angle(a, b): 返回两个二维向量夹角的绝对值(弧度)
// ──────────────────────────────────────────────────────────────────────────────
inline double get_abs_angle(const Eigen::Vector2d & a, const Eigen::Vector2d & b)
{
double cos_angle = a.normalized().dot(b.normalized());
// 数值钳位避免 acos 域错误
cos_angle = std::max(-1.0, std::min(1.0, cos_angle));
return std::acos(cos_angle);
}
} // namespace tools

53
tools/monitor.bat Normal file
View File

@@ -0,0 +1,53 @@
@echo off
rem <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
set AppName=run.exe
set AppArgs= --run-with-camera --wait-uart --show-armor-box
set AppPath=C:\Users\sjturm\Desktop\AutoAim\build\Release\
title <20><><EFBFBD>̼<EFBFBD><CCBC><EFBFBD>
cls
echo.
echo <20><><EFBFBD>̼<EFBFBD><CCBC>ؿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
echo.
rem <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>
:startjc
rem <20>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>в<EFBFBD><D0B2><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rem <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2>д<EFBFBD><D0B4> qprocess %AppName% >nul <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9B7A2><EFBFBD>󲹳䣩
qprocess|findstr /i %AppName% >nul
rem <20><><EFBFBD><EFBFBD>errorlevel<65><6C>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>в<EFBFBD><D0B2>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
if %errorlevel%==0 (
echo ^>%date:~0,10% %time:~0,8% <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>
)else (
echo ^>%date:~0,10% %time:~0,8% û<>з<EFBFBD><D0B7>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
echo ^>%date:~0,10% %time:~0,8% <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
start %AppPath%%AppName%%AppArgs% 2>nul && echo ^>%date:~0,10% %time:~0,8% <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
)
rem <20><>ping<6E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
ping -n 2 -w 1000 1.1.1.1>nul
goto startjc
echo on

14
tools/monitor.sh Executable file
View File

@@ -0,0 +1,14 @@
#!/bin/sh
# usage: monitor.sh "<the exe file's absolute path and its shell parameter>"
# And then when ever the exe shutdown it will be automatically restart
exe=$1
while true; do
state=`ps aux | grep "$1" | grep -v grep | grep -v $0`
if [ ! "$state" ]; then
exec $exe &
echo "restart $exe"
fi
sleep 0.5
done

7
tools/para/conv1_b Normal file
View File

@@ -0,0 +1,7 @@
6
-0.13957113
0.06878903
0.031124229
1.4302016
-0.1433692
1.1473336

454
tools/para/conv1_w Normal file
View File

@@ -0,0 +1,454 @@
3
6
5
5
0.026539411
0.42253798
0.6257618
0.7803654
0.56751746
0.26718912
0.7051625
0.71628624
0.7642506
0.49248695
0.16620474
0.3780306
0.7110501
0.6030068
0.4948883
0.24835615
0.33591226
0.43040946
0.5077497
0.5212336
-0.027971355
0.2103128
0.25356093
0.07722227
0.18559895
0.32333145
0.345134
0.4201757
0.6501012
0.71342164
0.27166557
0.4905165
0.6236048
0.7930295
0.7500772
0.17779675
0.56028295
0.74555326
0.5372084
0.70782083
0.27072752
0.50543845
0.57856107
0.65362686
0.53758156
0.20370956
0.38661864
0.5690749
0.24994203
0.42308953
-0.05610049
0.0263962
0.16409136
-0.12595575
-0.28413054
-0.08711743
0.3854187
0.18076564
0.08114622
-0.31865782
-0.10122112
0.17201129
0.116371
0.13443075
-0.3267171
-0.23860133
-0.092047565
0.09856403
-0.15966126
-0.42780057
-0.27054727
-0.17382775
-0.19402348
-0.50262624
-0.6701677
0.021166094
-0.15367271
-0.3535248
-0.3223209
-0.3930027
-0.012587458
-0.2514576
-0.028994415
-0.23040394
-0.22344537
-0.28225404
-0.12920779
-0.084865615
-0.079808
-0.24189578
-0.077354565
-0.1364608
-0.08271066
0.015865652
-0.17308144
-0.016932748
-0.10400943
-0.15847488
-0.19929907
-0.024590252
-0.305961
0.41650155
0.71885103
0.5064972
0.2556136
-0.2217093
0.3904318
0.679353
0.41345686
0.1750823
-0.07011908
0.21723142
0.36451343
0.2734496
-0.1827238
-0.2640027
-0.07665969
-0.07281056
-0.17140535
-0.506126
-0.39344314
-0.19199198
-0.43100312
-0.5216478
-0.8140914
-0.22539687
-0.1332064
-0.18383063
-0.3015942
-0.3543749
-0.07875634
-0.046881627
-0.17341466
-0.17210038
-0.16427462
-0.12995729
-0.09128473
-0.07223676
-0.05202489
-0.17732152
0.032028172
0.022708599
-0.07037333
-0.24315825
-0.3907585
0.09521279
-0.07241904
-0.15533188
-0.030434519
-0.262898
0.796653
0.9267637
0.93120253
0.9917096
0.9490124
0.8625081
1.0733354
1.1211755
1.1176518
0.9001717
0.7897956
1.1967996
1.1863062
1.0460231
0.86984694
0.7440283
0.88651806
0.9017338
0.81466335
0.6403854
0.50749934
0.5359783
0.54264694
0.5598802
0.41759288
0.21787402
0.42994195
0.5423997
0.46424487
0.4637137
0.4655036
0.5988346
0.5442244
0.71659744
0.6306643
0.52392393
0.66216165
0.57559747
0.50626665
0.53091234
0.50743634
0.57716715
0.7824497
0.41367468
0.55546504
0.3030582
0.6136134
0.36521676
0.43919942
0.33232304
0.51073956
0.9655301
1.0148821
0.8726425
0.30961013
0.747004
1.1461548
1.3142052
0.889127
0.45464084
0.5808323
1.0770975
1.3939735
0.9165097
0.6586972
0.57355326
0.9547619
0.9447146
0.66483366
0.30041847
0.3404827
0.5929992
0.7068603
0.41881943
-0.11529228
-0.06013718
0.029292889
0.2176899
0.14616063
0.14816451
0.13036805
0.1793373
0.3953
0.51387286
0.35285914
0.06709124
0.2171802
0.6583215
0.5220034
0.44539294
0.054360673
0.18225458
0.47989392
0.5178179
0.4576618
0.16889913
0.27844474
0.32638916
0.39993882
0.119894765
0.67456526
1.4996389
1.7681378
1.6962894
1.266272
0.73875403
1.6141837
1.7386745
1.671539
1.1571932
0.546496
1.1523583
1.2499596
1.2602416
0.7421503
0.19625238
0.6587611
0.66948915
0.43528196
-0.008682725
0.05109705
0.13888682
0.24387836
-0.13002548
-0.3703551
0.06102093
0.0076322197
-0.035532437
-0.029681634
-0.057815406
0.20116982
0.27798048
0.22556874
0.3058461
0.039763346
0.10804575
0.42170766
0.3397586
0.44702667
0.19944976
0.12492277
0.2690411
0.31178012
0.307435
0.09525637
0.31001845
0.20959602
0.30736595
0.2639023
0.07473994
-0.20428133
0.123462535
0.08172282
0.0273528
0.012557347
-0.050085112
0.15972462
0.4576377
0.26537335
0.05294297
0.1920879
0.43903905
0.44806978
0.24177204
0.15497287
0.004198166
0.24119955
0.23940569
0.30403528
0.10443368
-0.03242823
-0.009877937
-0.056617204
-0.034309167
-0.30718032
-0.21831672
-0.33697575
-0.06903099
-0.21208347
-0.26106125
-0.03470626
-0.17156434
-0.034266062
-0.11911982
-0.06517054
-0.0014468514
0.13053921
-0.021993743
0.08158244
-0.048275527
0.073179156
0.11620164
0.18908599
0.090895034
-0.13516097
-0.041694365
0.19145414
0.06233252
-0.015241079
-0.08720653
0.27016148
0.68275934
0.9259101
0.87553996
0.6730488
0.5436024
0.93307287
1.284303
1.215596
0.7024047
0.6535529
1.0312322
1.2054113
1.1569601
0.78507113
0.46270427
0.96070755
1.0094548
0.8725796
0.584176
0.2608554
0.68085426
0.6351991
0.5974386
0.44071475
-0.14620513
-0.051413815
0.123140134
0.3022954
0.3937261
0.14715014
0.14558095
0.37810993
0.6081454
0.4194721
-0.048754267
0.08287452
0.5189599
0.62214893
0.7360417
-0.06856284
0.1070881
0.296386
0.6012432
0.60254496
-0.24324551
0.14447688
0.18799835
0.46327543
0.45924807
0.20411673
1.1002504
1.4868475
1.5346047
1.0632775
0.33373544
1.1446538
1.4786532
1.4592378
0.9056299
0.22967416
1.0249681
1.2026587
1.0556481
0.6419271
0.16762647
0.475342
0.64084166
0.45603147
0.19102122
-0.17340069
0.14535804
0.13595402
0.09039172
-0.185116
0.11963739
0.3589415
0.3841168
0.5203414
0.20129839
0.20421675
0.22073998
0.4301539
0.6149839
0.42226243
0.31898078
0.31484243
0.34544006
0.5597543
0.4067382
0.12620181
0.39053708
0.38691083
0.5219121
0.62844783
0.3108787
0.46809235
0.39197984
0.38944077
0.4951729

11
tools/para/conv2_b Normal file
View File

@@ -0,0 +1,11 @@
10
-0.6072942
1.0412933
-0.34075898
1.2761911
0.16558713
-0.11275745
-0.20701186
1.0942192
0.511572
0.07464832

544
tools/para/conv2_w Normal file
View File

@@ -0,0 +1,544 @@
6
10
3
3
-0.18567735
0.31230295
0.10601954
-0.14635935
0.17529164
0.23833705
-0.07737787
-0.26470512
-0.016763074
0.0732159
0.15613954
0.24339953
0.21809842
0.10773516
0.40015697
0.08531675
0.25792578
0.29302046
-0.14973466
-0.13794622
-0.3174705
0.06396363
-0.1582382
-0.2843077
-0.25538033
-0.23979947
-0.2003432
-0.067921035
0.008744139
-0.12954548
0.07350555
0.016850626
-0.13139062
0.07412223
-0.07210239
-0.042953018
-0.3169445
0.009288535
0.30465534
-0.4208047
0.07115591
0.26925838
-0.38791
0.06488703
0.400365
-0.5090438
-0.05041841
0.28737134
-0.32649037
0.2732965
0.3234882
-0.14768949
0.19571733
0.46035185
-0.1308439
-0.28924602
-0.4150856
-0.1394865
-0.14277102
-0.028665107
0.063959725
-0.08086398
-0.42271927
-1.0998808
-1.7531674
-0.6868419
-0.4679067
-1.1683141
-0.3862623
0.1865768
-0.7758855
0.18598925
-0.2777104
-0.5689085
-0.53544736
0.06992068
0.09683173
-0.05572889
0.497631
0.5235087
0.412554
0.35491413
0.20174716
0.14414282
0.21999303
0.14763339
0.15525024
0.13345838
-0.07630705
-0.007321237
-0.17791471
0.067984045
0.07404319
-0.2620913
-0.020879569
-0.09856246
-0.27126157
-0.19668914
-0.45068544
0.06535956
0.19665721
0.4605025
0.0834005
0.26365396
0.42590958
0.041509036
0.28209603
0.23930955
-0.16162594
-0.22635049
-0.26243812
-0.12631208
-0.22097321
-0.20312756
-0.1772115
-0.33603805
-0.30561772
0.008207564
0.07136626
-0.216243
0.16515563
0.04111277
-0.1260301
0.14099488
0.10370603
-0.010030857
-0.27448004
-0.011123834
0.22102898
-0.25228068
0.039984487
0.24022454
-0.12004822
0.10729556
0.22277792
-0.2681527
0.1929927
0.35833898
-0.1897413
0.2386225
0.59820104
-0.27273512
0.1098645
0.36686987
-0.43986773
-0.18380699
-0.43966547
-0.009675484
-0.25631252
-0.29056635
0.0712151
-0.18025662
-0.48891056
-0.47694656
-0.88816905
-0.06483537
0.013368553
-0.70404077
0.28231522
0.33836752
-0.22945245
0.25680065
-0.0012361507
-0.52792823
-0.2579657
0.3255992
-0.0019560119
-0.046853587
0.24827203
0.34998816
0.27723187
0.31715482
0.34362832
0.12269884
0.13557787
-0.114973396
0.07401403
0.069110855
-0.187023
-0.036038406
0.012674593
0.36098468
0.42171153
0.048450485
0.28105047
0.4715788
-0.023357779
-0.057762705
-0.073359944
-0.16736583
0.12476493
0.0062710703
-0.021589287
-0.13475952
0.030259239
-0.036233522
0.06367138
-0.07908364
0.36171123
0.056995805
0.26451215
0.18291938
0.06195444
0.23869722
0.10497623
0.09330571
0.29085782
-0.2596862
-0.031500176
-0.013901459
0.023374349
0.016828336
0.11964698
0.026195215
0.035629973
0.12736408
-0.42047524
-0.045428358
0.4764139
-0.594475
-0.14393432
0.3904298
-0.18805574
-0.08113497
0.5267287
-0.4067696
-0.32341024
-0.29679683
-0.10745416
0.08389849
0.14507549
-0.024750415
0.4222244
0.16702761
-0.008214667
0.03591805
0.08528825
0.12195521
0.41446808
0.46344396
0.37176162
0.40626523
0.08781661
-0.8886079
-1.0024366
-0.86886346
-0.49839306
-0.8621685
-0.642396
-0.13097173
-0.7362578
-0.22594142
-0.07626368
-0.5901063
-0.3290703
0.14976943
-0.06745293
-0.0820076
0.5327264
0.4384248
0.6160922
0.24003918
0.24436
0.22210835
0.21770608
0.124687046
0.0470902
-0.14859878
-0.321342
-0.08767322
0.20693085
0.42665282
0.33726025
-0.020886194
0.44385502
0.01808433
-0.118666425
-0.15688846
-0.31219846
0.20918387
0.021502182
0.33103526
0.24867874
0.21629289
0.013217075
0.08715608
0.054708257
-0.15127313
0.1508026
0.24620876
0.44316766
0.17231683
0.1236346
0.26164678
-0.08726074
-0.052426733
0.33535057
0.36311948
0.41015378
0.34961388
0.09574385
0.5627171
0.4841079
0.36436325
0.62349635
0.651723
-0.4531835
0.15029465
0.57511115
-0.45798486
0.19631258
0.3225775
-0.103153236
0.19025934
0.48245525
-0.09091705
-0.094119325
-0.38689196
0.14930637
0.09523474
-0.04373269
0.3126633
0.08655161
-0.082390875
-0.053303
0.31841794
0.3719926
0.15074554
0.40985286
0.33657342
0.20797513
0.24987732
0.39347094
0.83306986
0.86048186
0.5689052
0.72829825
0.89263994
0.8195005
0.61129767
0.78122336
0.61171514
-0.319987
-0.25968623
-0.11498821
0.23861922
0.088788316
0.2950782
0.62382466
0.8079981
0.61313707
0.077279635
-0.032932185
0.0890238
0.029694919
0.12197181
-0.042123534
-0.29403502
-0.36851963
0.09636119
0.04346845
0.43912384
0.3536572
0.066943154
0.4024961
0.47593385
0.0759621
0.39561898
0.22179781
-0.35304305
-0.20236854
-0.008968132
-0.09802803
0.054423235
0.23025425
-0.015376655
0.008936614
0.2355261
0.0014180358
0.17833155
0.19288565
0.28466016
-0.02708328
0.05748906
0.115661204
-0.08906293
0.06937998
-0.12015559
-0.11914039
-0.15230455
-0.30971813
0.12253699
-0.1287006
-0.11642937
-0.03524333
0.106573164
-0.46892896
0.048909124
0.35770398
-0.48432148
0.06230857
0.35268116
-0.6384595
0.054048087
0.33101568
-0.7891181
-0.5678995
-0.32257825
-0.30838996
-0.019490078
0.20418139
0.2235779
0.43282986
0.33755836
-0.43536973
-0.18715984
-0.017235223
-0.22174615
0.009737464
0.18385953
0.3702021
0.1722581
0.31182298
-1.5388889
-1.4710528
-0.9808655
-1.2328979
-1.391655
-0.9775159
-0.53418314
-1.0619466
-0.14114031
-0.38471037
-0.91709787
-0.6730362
-0.3246664
-0.50130564
-0.29241592
0.2488604
0.29896885
0.42214942
0.23901664
0.071325876
0.0730879
0.3215266
0.37580463
0.17601205
0.082663685
-0.14512439
-0.02447424
0.036292106
0.190385
0.24941531
-0.15101732
0.16009882
0.022328991
-0.13642876
-0.2557106
-0.23009326
-0.2648493
0.035393387
0.058671933
-0.06313441
0.085322335
0.037474677
-0.09684385
0.021198915
-0.23987578
0.49218395
0.45345736
0.4600616
0.27070585
0.23068464
0.37693858
0.32365304
0.2629329
0.38881606
0.25656843
0.3796918
0.45741585
0.08370856
0.29546905
0.55899864
0.16390188
0.43054807
0.6232953
-0.6125586
0.042835608
0.42402682
-0.4055307
-0.039988685
0.42992234
-0.26697057
0.10284304
0.4822276
-0.32137555
-0.38547745
-0.33756226
0.12396629
0.018000755
0.0040020915
0.09871851
0.19964874
-0.049439877
-0.054510776
0.20413962
0.49790758
0.3678443
0.47925648
0.5145687
0.46790117
0.4268048
0.23691703
0.7796671
0.6537224
0.6620804
0.6199029
0.6739477
0.5245343
0.7053961
0.5178989
0.678157
0.015971098
-0.09368621
-0.1418303
0.2623539
0.27078906
0.26214978
0.450224
0.5519793
0.589996
0.0695408
0.11883035
0.16186124
-0.00019518172
-0.10749374
-0.07061164
-0.37467608
-0.33476043
-0.19680664

15
tools/para/conv3_b Normal file
View File

@@ -0,0 +1,15 @@
14
0.55702305
1.1578506
0.4233094
1.0468913
0.102127574
-0.11887622
0.7552765
0.8270396
-0.037355777
0.863297
0.42967162
0.36658964
0.751224
0.5695708

1264
tools/para/conv3_w Normal file

File diff suppressed because it is too large Load Diff

61
tools/para/fc1_b Normal file
View File

@@ -0,0 +1,61 @@
60
-0.193765
-0.23972291
0.07138973
0.32630488
-0.12837179
0.15837212
-0.171342
0.15245913
0.2655143
0.5132081
-0.36182725
0.5721853
1.1356937
0.478751
-0.19061308
-0.4349855
-0.037231974
0.82266986
0.021297721
0.27819484
-0.3700498
-0.080103956
0.118309975
-0.120765805
-0.21436372
0.38247055
0.9884826
-0.4042391
-0.21405952
-1.1451919
-0.07339987
0.63600576
0.39354753
-0.14708714
0.5753427
-0.06053154
0.6068468
-0.24616803
-0.18896966
-0.06904445
-0.137959
-0.75066173
-0.20227952
0.17195949
-0.13245444
-0.10060697
0.40073013
-0.9563751
0.031663556
0.38514042
-0.061627824
0.14056061
0.7515243
0.7903934
0.8401122
0.29314804
0.2987165
0.39764544
0.3022464
-0.29335007

33602
tools/para/fc1_w Normal file

File diff suppressed because it is too large Load Diff

16
tools/para/fc2_b Normal file
View File

@@ -0,0 +1,16 @@
15
-0.68187517
-0.013023868
-0.012667711
0.12630615
-0.24749278
-0.4987089
0.3616302
0.23901181
0.32909712
-0.25681627
0.21683879
0.72209626
-0.2969338
0.35322607
0.6401797

902
tools/para/fc2_w Normal file
View File

@@ -0,0 +1,902 @@
60
15
0.023721257
-0.056767184
-0.02482725
-0.056625195
-0.013108621
0.16314533
-0.04853894
-0.029597584
-0.046683975
-0.02246394
-0.037572507
-0.03316914
0.17073579
0.1816684
-0.04529307
-0.0248803
-0.030885592
-0.04743719
0.10407687
-0.027138393
0.1133468
-0.024212182
-0.0057777944
-0.05431293
-0.02986296
0.11789993
-0.051923934
0.09167429
-0.045342486
-0.043118663
-0.098115616
-0.006691878
0.022823932
0.016394816
-0.0134537015
-0.0060206857
-0.008312101
0.015749821
0.016666552
-0.007961423
0.0130552165
0.051745173
0.086891346
-0.061654568
-0.022857342
-0.045601845
-0.024637094
-0.025579434
0.024080817
-0.035525665
0.084735304
0.008145681
-0.048479345
-0.01107538
0.0043653576
-0.02404582
-0.0046611303
-0.018547907
0.13898253
-0.0071163056
0.027239176
0.019990532
0.00575406
0.067195065
0.057361092
-0.027234674
0.0034042448
0.07240855
-0.014622719
-0.021772297
-0.018955652
-0.016349709
-0.033501316
-0.012791992
0.009489657
-0.0040843496
-0.06548852
-0.0027336648
-0.02771641
0.003105313
-0.022985559
-0.027811378
0.13901976
-0.069822796
-0.015901526
-0.017430564
0.008845486
0.015278092
-0.0567094
0.1451618
0.10175247
-0.0145240985
0.019893676
0.00060109375
0.0022912938
0.07441637
-0.044775177
-0.02982467
-0.0090249935
0.015784694
-0.0151947895
-0.026377525
0.07452386
-0.057595294
-0.033931956
0.018042305
-0.04521402
-0.014217054
0.010033828
0.009846576
0.0018628535
-0.030086106
-0.0017332508
-0.005574078
-0.00023017552
-0.006606218
0.13216685
-0.010639397
-0.026569739
-0.04215086
0.04924681
-0.043633044
0.1018429
0.0021304227
-0.056588713
-0.058658466
-0.059565447
-0.042487074
0.06225856
-0.027270265
0.0450222
0.07110802
0.049895298
0.042784434
0.05563622
-0.050112586
-0.047793083
-0.06338001
0.07364919
-0.054492526
0.08631582
-0.036124628
0.05227145
-0.037520196
-0.062319368
0.08841054
-0.032051668
0.08331706
-0.043635234
0.04112745
0.06212643
0.007388739
-0.020659756
0.02230651
0.086097695
0.005100613
-0.064036496
0.017601727
-0.05984531
0.011942104
0.008610117
0.086421125
-0.01637438
-0.055868283
-0.05516202
-0.047032513
0.121512815
-0.05508921
-0.012337177
0.0035218787
-0.022240747
0.11666904
-0.06353826
0.060320225
-0.047669224
0.017966691
-0.04024401
-0.025529524
0.069724366
-0.053703915
-0.034110505
-0.029960383
-0.06600948
0.13501477
-0.053031318
0.012389384
-0.022873297
-0.009194736
-0.029105553
-0.045856915
0.12856278
-0.021943325
0.010748578
0.006589677
0.003752689
0.02887515
0.10008096
0.03216688
-0.039296247
-0.047470577
-0.035232235
0.08135979
-0.04116884
0.09727354
0.044263303
-0.05627888
-0.018874492
-0.07279877
0.09413788
-0.036279287
-0.036115322
0.083222285
-0.035373613
-0.002076556
-0.034073725
-0.058003467
-0.011753285
0.064566836
0.1351894
-0.018176533
0.0045275176
-0.0394347
-0.053792067
-0.060081203
0.06741035
0.06952082
-0.070167564
-0.11953224
-0.093335666
-0.092176
-0.06279851
-0.08698778
-0.09178264
0.06140479
0.073674716
0.060297325
0.072911836
0.07054657
0.053970445
0.06798171
-0.013621602
-0.011862524
-0.02278563
0.08397386
-0.029510925
-0.006828416
0.008962611
-0.0060842847
0.057862744
-0.014851122
0.035502855
-0.027666172
-0.01099776
-0.013816966
-0.018422294
-0.07163931
0.011755499
-0.016132606
-0.06628269
0.0060495273
-0.004684206
0.091115616
0.07032679
-0.022980448
-0.027459152
-0.04107013
-0.005020775
-0.0050464333
0.036403414
0.043938298
0.004868387
0.09904006
0.07008151
0.025196165
-0.024412407
-0.041503318
-0.023655541
-0.021237679
0.0059536123
0.07900436
-0.066426545
-0.058976896
-0.042309746
-0.0044052647
0.011788804
-0.06437558
0.050667755
0.003000085
-0.026545258
0.035834778
0.02146158
-0.025112923
-0.013572935
0.07372157
-0.02082975
-0.034076523
0.05821599
0.042366743
-0.06394822
-0.019507725
0.07289588
0.04123546
-0.0401289
-0.028429616
-0.04741946
-0.036297556
0.024062768
-0.03628923
0.076255724
-0.007795125
0.012530167
-0.026342789
-0.029241074
0.032052062
-0.017812248
0.02970647
0.08998527
-0.05396118
0.023024661
0.0052098245
0.016553843
-0.10519745
0.037710346
0.009732182
-0.027681515
-0.03822997
-0.012670474
0.07280391
-0.029706435
0.0014060438
-0.030424576
0.056327637
-0.03691004
0.100075796
0.059969947
-0.009466309
-0.04053178
-0.07394839
0.017282715
-0.038851976
0.07533885
0.022888316
-0.005222714
-0.051790617
-0.039949816
0.045010787
-0.05255461
0.028021902
-0.051901788
0.030317541
-0.016183384
-0.000669922
0.06513011
-0.07717841
-0.020836962
-0.012460537
0.002608653
0.015867954
0.05845073
-0.0021784795
0.07890689
-0.022973057
0.092426814
-0.054843165
0.044392575
-0.021421066
-0.094741575
-0.065930516
-0.022157872
0.12326591
0.014883588
0.026948972
-0.016465168
-0.064375505
-0.023275383
-0.0070997463
-0.033101372
0.09446811
0.10115626
-0.04225017
-0.0007481162
-0.056021266
-0.04811929
-0.051491253
0.068353504
0.08718989
-0.05749272
-0.010089683
-0.046433568
-0.016778694
-0.025272565
-0.013132711
-0.039840337
-0.02110915
-0.03557828
-0.0014030484
0.01924547
0.0789074
0.06009254
-0.025958415
0.020134918
-0.03148343
-0.009884057
0.0061013266
0.08806658
0.0656854
0.009727492
-0.03322069
-0.019033067
0.0035772354
-0.02508404
0.007561759
-0.03869725
0.06390332
0.026551774
0.050207905
-0.043208126
-0.019934112
0.06602689
-0.02860308
-0.0115318475
-0.050741002
-0.012525999
-0.03984677
0.025553342
-0.007472711
-0.03354731
0.120088056
-0.049436986
-0.020271834
-0.036656402
0.01050952
-0.040384356
-0.013354367
0.15239534
0.061574545
-0.0038912655
0.0015946868
-0.0033184527
0.0044296803
-0.026376294
-0.02409796
-0.033598542
-0.038278487
0.0022965355
0.032300834
0.013073122
-0.016868252
0.030710598
0.042514037
-0.017287938
-0.052982263
-0.0025038382
0.04258102
-0.037782636
0.08912471
-0.041155506
-0.020055389
-0.036539547
-0.008155307
0.095901586
-0.045066398
0.07589279
-0.0008031097
-0.042826444
-0.066662736
0.035725113
0.07053888
-0.003361896
0.010324781
0.057961073
-0.060475152
-0.059718084
-0.011133738
0.038670868
0.0045008264
0.00011081969
0.011725977
-0.06017393
-0.037521508
-0.041834593
-0.018241858
0.016014917
-0.022131182
0.09944455
-0.053095143
-0.00742253
-0.03147508
0.018483965
0.00743996
-0.026868168
0.121405125
-0.030068455
-0.020201726
-0.025969878
0.04350136
-0.0021948342
0.06245924
0.027152391
-0.00056066626
-0.009253849
0.012065811
-0.018439502
-0.010880174
0.058823567
0.011996477
-0.040978447
-0.011799242
-0.0050421795
-0.0367865
0.047042668
-0.12227256
0.031531557
0.008638815
-0.021561243
-0.02409996
0.08065916
-0.03862787
-0.069201544
0.035517152
0.025776947
-0.019695587
-0.00736174
0.097198814
-0.0031088917
0.0056593325
-0.06007171
-0.035134632
0.028565645
-0.012346341
-0.022452231
0.14388211
-0.016372552
-0.026357366
-0.011106448
0.0031650758
-0.010229361
-0.025584642
0.07345942
-0.024771154
-0.036477014
-0.06983555
0.06293779
0.10976889
0.016566912
-0.03319916
-0.03126182
-0.042317595
-0.029041866
0.05726187
0.11515596
-0.0073280144
-0.025612779
-0.01186883
-0.046921965
-0.011384405
0.13430771
-0.025325155
-0.027509108
-0.008541601
-0.044411432
0.0004181579
-0.037252396
0.12108238
-0.007830119
-0.020841695
-0.0061824056
-0.0424927
-0.014388491
-0.0126006035
0.026058633
0.07131681
-0.03908185
-0.0034570813
0.011785356
0.006566377
-0.07555411
0.024073388
0.11404315
-0.052582927
-0.01964203
0.012207591
0.003144945
-0.08745947
0.020775186
-0.0035174368
-0.008068929
-0.020500282
0.058456566
0.030612053
-0.022996115
-0.02936319
-0.030847497
0.021455627
-0.059063505
0.05697014
0.010187005
0.06089469
-0.04353769
-0.009652151
0.03238445
-0.0010035908
-0.052168515
-0.029284708
0.003263534
-0.044448454
-0.052631732
-0.07391317
0.038685244
0.036219478
0.035986923
-0.0010210739
0.04722957
0.022612667
0.06024814
0.06373478
0.05212275
0.048431445
0.069127135
0.05499899
0.052656386
0.05041688
0.014507067
-0.06100631
-0.10755678
-0.10481951
-0.090853445
-0.021902813
-0.08386116
0.006706923
-0.0064033153
-0.012173957
-0.0036868856
0.095132016
-0.021994542
-0.004649494
-0.026794076
-0.01632169
-0.010126181
-0.01677234
-0.013022024
-0.005384277
-0.0054797633
0.00015999126
0.013708873
0.09010221
0.11247074
0.0702876
0.07355304
0.07295774
0.09754597
0.079869345
0.11162802
-0.09146599
-0.06617916
-0.05427548
0.012102348
-0.11461164
-0.1239081
-0.09864961
0.08521436
-0.0010414277
0.024066186
0.042577848
0.06795371
0.0033148052
-0.04981378
-0.002585282
-0.0003937899
-0.003339654
0.008448152
-0.035717778
-0.021917287
-0.020991681
-0.016192002
0.03761725
0.034530357
-0.06626378
0.0014098238
-0.076238416
0.029416975
0.018664703
0.03343811
0.038841713
-0.05282685
-0.008477915
-0.050246432
0.04036034
0.03782437
0.04491213
0.0031788559
0.026595125
0.05203974
-0.011356884
0.043487385
-0.055312343
0.03458062
0.040055893
-0.039015166
-0.022881871
0.0063166018
-0.038738396
0.00589617
-0.020359939
-0.012527778
0.064004995
0.010790943
-0.01802895
-0.056990944
-0.051393062
-0.023789257
0.0030616294
0.051064275
0.04010207
0.03371209
0.060095347
0.015607021
0.010104986
0.020415762
0.0019168631
0.04336732
-0.039259564
0.055087548
0.025899537
0.018325731
-0.031002747
-0.033109486
-0.035237692
-0.060989216
0.055961084
0.02822797
0.027010137
-0.025959654
-0.035303224
-0.039628804
-0.05582998
-0.03959532
0.1256905
-0.027060708
-0.05580327
-0.03622858
0.12780237
-0.018839851
-0.03447354
0.08838121
-0.03136378
-0.05799618
-0.023935076
0.078720175
-0.02881707
0.00847261
-0.02233137
-0.013755523
0.014816273
0.004065502
0.11188121
-0.014230934
-0.0056429356
-0.0045665978
-0.00498333
-0.012701793
-0.0019023885
-0.030901533
-0.007683906
-0.020062435
-0.04124341
0.024057284
-0.09335823
-0.03777578
-0.014056007
-0.008580212
0.11240235
0.002323658
0.016537955
-0.07825424
-0.016088892
-0.025930585
0.027807685
0.1700214
-0.019626008
-0.07721867
-0.04162061
0.052601207
0.02577326
-0.040874712
-0.03728593
-0.012193351
0.13011028
-0.041224383
0.057561
-0.010276193
-0.024530202
-0.03962346
-0.040800393
0.13106227
-0.02382709
-0.06445572
0.1744702
-0.047365215
-0.0107749
0.017781138
0.05427503
-0.04871042
-0.010184613
0.14689082
-0.06170824
-0.040328942
-0.050108895
0.07433148
-0.035749625
-0.05033758
-0.034158345
-0.01407411
-0.03855565
0.118630916
0.015975745
-0.025617888
-0.027871372
0.020677658
-0.060416315
-0.011996592
0.15613428
-0.039205384
-0.017144002
-0.016228413
0.01726939
0.11926382
-0.029930148
-0.015833873
-0.036014646
-0.021936195
-0.027379872
-0.006858447
0.036611702
-0.06453845
0.017900916
-0.017864183
0.016977126
0.00013984025
-0.011365406
-0.02641995
0.05642642
-0.02021149
-0.016630339
0.024355782
-0.014129852
0.103316136
-0.041531242
-0.00224662
-0.026749535
-0.01905401
0.0026879937
-0.008229434
0.017593939
-0.018483022
0.019348662
-0.056839425
0.043575108
0.07768085
0.030608702
-0.05727275
0.10484878
-0.06496533
-0.05744542
0.05217385
0.011118693
-0.008622026
-0.02919702
0.031088505
-0.051129196
0.027191278
-0.048688192
0.04744573
-0.054880034
0.07251054
0.017558554
-0.06281788
0.0071332487
-0.05200442
0.08113713
-0.043849833
0.07000845
-0.003035843
-0.035914857
-0.0068447613
0.029527344
-0.060751688
-0.022351053
-0.025395205
0.033314105
0.09969347
-0.03596114
0.007367574
-0.07811931
-0.015391812
-0.010692302
0.02191812
0.06635398
-0.04495509
0.0008100525

3
tools/tty-permission.sh Normal file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
sudo touch /etc/udev/rules.d/70-ttyusb.rules