Test代码记录
应该能够完成:设置不同的场景、速度下的train和test。
注意点:
train记录:
进行训练,在train_setting文件中可以进行batch_size等参数修改
cd agile_autonomy_ws
source catkin_aa/devel/setup.bash
conda activate tf_24
cd /home/freq/agile_autonomy_ws/catkin_aa/src/agile_autonomy/planner_learning
python train.py --settings_file=config/train_settings.yaml
python test_trajectories.py --settings_file=config/test_settings.yaml
开始batch_size为8,out of memory无法运行,
修改为4后可以运行,但还是会有failed to allocate信息:
设为2:
第一次训练结束时会有checkpoint的错误:
第二次训练没有checkpoint的错误:
训练时间:
batch size=4,max_training_epochs=150,
前8个是每epoch存为一个ckpt,后面是每5次epoch存为一个ckpt
Train | Test | Time / min |
---|---|---|
10 | 2 | 35 |
20 | 2 | 55 |
- | - | - |
在forest(密度为6)环境下,速度为7m/s,其余为默认设置:
ckpt | Test Time | 效果 |
---|---|---|
1-20 | 60 | 不好,出现一直打圈,向一个方向偏 |
22 | 60 | 不错,能到达终点,并且路径较贴合glb |
23 | 60 | 也还可以,但是不如22 |
24 | 60 | 一直往左偏,成功率不足1/3 |
(没写完,后面还有很多没尝试) |
test的部分显示:
Setting Tree Spacing to 5
Setting Object Spacing to 5
==========================
RESET SIMULATION
==========================
Unpausing Physics...
Placing quadrotor...
success: True
status_message: "SetModelState: set model state done"
Received call to Clear Buffer and Restart Experiment
/home/freq/anaconda3/envs/tf_24/lib/python3.8/site-packages/tensorflow/python/keras/backend.py:434: UserWarning: `tf.keras.backend.set_learning_phase` is deprecated and will be removed after 2020-10-11. To update it, simply pass a True/False value to the `training` argument of the `__call__` method of your layer or model.
warnings.warn('`tf.keras.backend.set_learning_phase` is deprecated and '
Resetting experiment
Done Reset
Doing experiment 0
Reading pointcloud from ../data_generation/data/rollout_23-03-07_16-18-42/pointcloud-unity.ply
min max pointcloud
[29.90007973 29.90003014 6.70941496]
[-29.90000534 10.09998322 -1.49058318]
Reading Trajectory from ../data_generation/data/rollout_23-03-07_16-18-42/reference_trajectory.csv
Loaded traj ../data_generation/data/rollout_23-03-07_16-18-42/reference_trajectory.csv with 324 elems
/home/freq/anaconda3/envs/tf_24/lib/python3.8/site-packages/numpy/core/_asarray.py:171: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
return array(a, dtype, copy=False, order=order, subok=True)
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Crashing into something!
Crashing into something!
Crashing into something!
Crashing into something!
Crashing into something!
Stopping experiment because quadrotor outside allowed range!
[3.749223200723757, 13.75762263211665, 6.717002034131803]
Giving a stop from python
experiment done
------- 1 Rollout ------------
expert_usage is 23.684
number_crashes is 5.000
travelled_dist is 9.259
closest_distance is 0.166
-------------------------------
Rollout dir is ../data_generation/data/rollout_23-03-07_16-18-42
==========================
RESET SIMULATION
==========================
Stopping experiment because quadrotor outside allowed range!
[7.120322108285449, 14.975754943747933, 6.807366426187068]
Giving a stop from python
Unpausing Physics...
Placing quadrotor...
success: True
status_message: "SetModelState: set model state done"
Received call to Clear Buffer and Restart Experiment
/home/freq/anaconda3/envs/tf_24/lib/python3.8/site-packages/tensorflow/python/keras/backend.py:434: UserWarning: `tf.keras.backend.set_learning_phase` is deprecated and will be removed after 2020-10-11. To update it, simply pass a True/False value to the `training` argument of the `__call__` method of your layer or model.
warnings.warn('`tf.keras.backend.set_learning_phase` is deprecated and '
Resetting experiment
Done Reset
Doing experiment 1
Reading pointcloud from ../data_generation/data/rollout_23-03-07_16-19-52/pointcloud-unity.ply
min max pointcloud
[29.90007973 29.90003967 6.71217346]
[-29.90000534 10.0999918 -1.48782468]
Reading Trajectory from ../data_generation/data/rollout_23-03-07_16-19-52/reference_trajectory.csv
Loaded traj ../data_generation/data/rollout_23-03-07_16-19-52/reference_trajectory.csv with 324 elems
/home/freq/anaconda3/envs/tf_24/lib/python3.8/site-packages/numpy/core/_asarray.py:171: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
return array(a, dtype, copy=False, order=order, subok=True)
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Stopping experiment because quadrotor outside allowed range!
[-9.132061617774474, 10.067377358365672, 5.0206328220405405]
Giving a stop from python
experiment done
------- 2 Rollout ------------
expert_usage is 41.999
number_crashes is 0.000
travelled_dist is 11.380
closest_distance is 0.799
-------------------------------
Rollout dir is ../data_generation/data/rollout_23-03-07_16-19-52
==========================
RESET SIMULATION
==========================
Stopping experiment because quadrotor outside allowed range!
[-6.9012844496315395, 9.30230092949374, 5.508615005073673]
Giving a stop from python
Unpausing Physics...
Placing quadrotor...
success: True
status_message: "SetModelState: set model state done"
Received call to Clear Buffer and Restart Experiment
/home/freq/anaconda3/envs/tf_24/lib/python3.8/site-packages/tensorflow/python/keras/backend.py:434: UserWarning: `tf.keras.backend.set_learning_phase` is deprecated and will be removed after 2020-10-11. To update it, simply pass a True/False value to the `training` argument of the `__call__` method of your layer or model.
warnings.warn('`tf.keras.backend.set_learning_phase` is deprecated and '
Resetting experiment
Done Reset
Doing experiment 2
Reading pointcloud from ../data_generation/data/rollout_23-03-07_16-20-58/pointcloud-unity.ply
min max pointcloud
[29.90007973 29.90004349 6.71478558]
[-29.90000534 10.09999657 -2.28521252]
Reading Trajectory from ../data_generation/data/rollout_23-03-07_16-20-58/reference_trajectory.csv
Loaded traj ../data_generation/data/rollout_23-03-07_16-20-58/reference_trajectory.csv with 324 elems
/home/freq/anaconda3/envs/tf_24/lib/python3.8/site-packages/numpy/core/_asarray.py:171: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
return array(a, dtype, copy=False, order=order, subok=True)
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Starting up!
Crashing into something!
experiment done
------- 3 Rollout ------------
expert_usage is 21.348
number_crashes is 1.000
travelled_dist is 27.267
closest_distance is 0.039
-------------------------------
Rollout dir is ../data_generation/data/rollout_23-03-07_16-20-58
==========================
RESET SIMULATION
==========================
It worked well. (Arrived at 265 / 324)
Giving a stop from python
Unpausing Physics...
Placing quadrotor...
success: True
status_message: "SetModelState: set model state done"
Received call to Clear Buffer and Restart Experiment
/home/freq/anaconda3/envs/tf_24/lib/python3.8/site-packages/tensorflow/python/keras/backend.py:434: UserWarning: `tf.keras.backend.set_learning_phase` is deprecated and will be removed after 2020-10-11. To update it, simply pass a True/False value to the `training` argument of the `__call__` method of your layer or model.
warnings.warn('`tf.keras.backend.set_learning_phase` is deprecated and '
Resetting experiment
Done Reset
每次训练后会得到一组ckpt,可以在test_setting.yaml中修改ckpt-xx来对每个模型进行测试:
在default.yaml中可以设置测试时的速度,默认为7m/s:
在flightmare.yaml中可以设置环境的参数:
ckpt-22的效果,感觉效果还可以捏,不会打圈,也不会总是超出边界:
(没写完)啊啊啊啊啊啊啊啊之前写的怎么不见了啊啊啊
0
4
1
运行分析:
有时候会有两个stopping的内容,搞清楚这两个意思,并且为什么会不同。(还是不懂啊!)
有几个参数(在update_metrics中):
expert_usage
number_crashes
travelled_dist
closest_distance
expert_usage:
利用end_ref_percentage表示目前进程占轨迹总长的比例,在0.8内即视为worked well
利用位置信息判断是否crashed或者超出边界
def check_task_progress(self, _timer):
# go here if there are problems with the generation of traj
# No need to check anymore
if self.maneuver_complete:
return
if not self.planner_succed:
print("Stopping experiment because planner failed!")
self.publish_stop_recording_msg()
self.exp_failed = True
return
# check if pointcloud is ready
if self.pcd is None or (self.pc_min is None):
return
# check if reference is ready
if not self.reference_initialized:
return
if (self.reference_progress / (self.reference_len)) > self.end_ref_percentage:
print("It worked well. (Arrived at %d / %d)" % (self.reference_progress, self.reference_len))
self.publish_stop_recording_msg()
# check if crashed into something
quad_position = [self.odometry.pose.pose.position.x,
self.odometry.pose.pose.position.y,
self.odometry.pose.pose.position.z]
# Check if crashed into ground or outside a box (check in z, x, y)
if (quad_position[0] < self.pc_min[0]) or (quad_position[0] > self.pc_max[0]) or \
(quad_position[1] < self.pc_min[1]) or (quad_position[1] > self.pc_max[1]) or \
(quad_position[2] < self.pc_min[2]) or (quad_position[2] > self.pc_max[2]):
print("Stopping experiment because quadrotor outside allowed range!")
print(quad_position)
self.publish_stop_recording_msg()
return
if self.reference_progress > 50: # first second used to warm up
self.update_metrics(quad_position)
def update_metrics(self, quad_position):
# Meters until crash
if self.metrics['number_crashes'] == 0:
current_velocity = np.array([self.odometry.twist.twist.linear.x,
self.odometry.twist.twist.linear.y,
self.odometry.twist.twist.linear.z]).reshape((3, 1))
travelled_dist = current_velocity * 1. / 20. # frequency of update
travelled_dist = np.linalg.norm(travelled_dist) # integrate
self.metrics['travelled_dist'] += travelled_dist
if self.metrics['travelled_dist'] < 5.0:
# no recording in the first 5 m due to transient
return
# Number of crashes per maneuver
[_, __, dist_squared] = self.pcd_tree.search_knn_vector_3d(quad_position, 1)
closest_distance = np.sqrt(dist_squared)[0]
if self.metrics['closest_distance'] > closest_distance and self.metrics['number_crashes'] == 0:
self.metrics['closest_distance'] = closest_distance
if closest_distance < self.config.crashed_thr and (not self.crashed):
# it crashed into something, stop recording. Will not consider a condition to break the experiment now
print("Crashing into something!")
self.metrics['number_crashes'] += 1
self.crashed = True
# uncomment if you want to stop after crash
# self.publish_stop_recording_msg()
# make sure to not count double crashes
if self.crashed and closest_distance > 1.5 * self.config.crashed_thr:
self.crashed = False
在三种情况下停止飞行:
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.iter
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_1
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_2
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.decay
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.resize_op.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.resize_op.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.img_mergenet.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.img_mergenet.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.img_mergenet.2.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.img_mergenet.2.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.img_mergenet.4.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.img_mergenet.4.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.img_mergenet.6.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.img_mergenet.6.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.resize_op_2.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.resize_op_2.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.states_conv.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.states_conv.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.states_conv.2.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.states_conv.2.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.states_conv.4.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.states_conv.4.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.states_conv.6.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.states_conv.6.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.resize_op_3.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.resize_op_3.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.plan_module.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.plan_module.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.plan_module.2.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.plan_module.2.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.plan_module.4.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.plan_module.4.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.plan_module.6.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).net.plan_module.6.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.resize_op.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.resize_op.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.img_mergenet.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.img_mergenet.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.img_mergenet.2.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.img_mergenet.2.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.img_mergenet.4.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.img_mergenet.4.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.img_mergenet.6.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.img_mergenet.6.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.resize_op_2.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.resize_op_2.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.states_conv.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.states_conv.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.states_conv.2.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.states_conv.2.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.states_conv.4.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.states_conv.4.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.states_conv.6.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.states_conv.6.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.resize_op_3.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.resize_op_3.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.plan_module.0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.plan_module.0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.plan_module.2.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.plan_module.2.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.plan_module.4.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.plan_module.4.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.plan_module.6.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).net.plan_module.6.bias
WARNING:tensorflow:A checkpoint was restored (e.g. tf.train.Checkpoint.restore or tf.keras.Model.load_weights) but not all checkpointed values were used. See above for specific issues. Use expect_partial() on the load status object, e.g. tf.train.Checkpoint.restore(...).expect_partial(), to silence these warnings, or use assert_consumed() to make the check explicit. See https://www.tensorflow.org/guide/checkpoint#loading_mechanics for details.