diff --git a/README.en.md b/README.en.md index f760ba0..1f545a3 100644 --- a/README.en.md +++ b/README.en.md @@ -89,13 +89,13 @@ USV - Founders: Kun Xiao, Shaochang Tan - Adviser: Xiangke Wang -- Developers: Kun Xiao, Shaochang Tan, Guanzheng Wang, Lan Ma, Qipeng Wang, Xinyu Hu, Wenxin Hu, Yi Bao, Ruoqiao Guan, Xinyu Hu, Keyan Chen, Gao Chen +- Developers: Kun Xiao, Shaochang Tan, Guanzheng Wang, Lan Ma, Qipeng Wang, Xinyu Hu, Ruoqiao Guan, Wenxin Hu, Feng Yi, Jiarun Yan, Yi Bao, Keyan Chen, Gao Chen ### Contributers Sincerely thank you for your contribution to XTDrone. -Changhao Sun, Zihan Lin, Yao He +Changhao Sun, Ying Nie, Fanjie Kong, Chaoran Li, Xudong Li, Zihan Lin, Yao He diff --git a/README.md b/README.md index 1c6a346..665ac42 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ Xiao, K., Ma, L., Tan, S., Cong, Y., Wang, X.: Implementation of UAV Coordinatio - 创立者:肖昆,谭劭昌 - 指导老师:王祥科 -- 开发团队:肖昆,谭劭昌,王冠政,马澜,王齐鹏,胡新雨,胡文信,鲍毅,管若乔,陈科研,陈皋 +- 开发团队:肖昆,谭劭昌,王冠政,马澜,王齐鹏,胡新雨,管若乔,胡文信,易丰,颜佳润,鲍毅,陈科研,陈皋 ### 加入我们 @@ -103,7 +103,7 @@ Xiao, K., Ma, L., Tan, S., Cong, Y., Wang, X.: Implementation of UAV Coordinatio 非常感谢你们为XTDrone的贡献 -孙长浩 林梓涵 何瑶 +孙长浩,聂莹,孔凡杰,李超然,李旭东,林梓涵,何瑶 ### 捐赠 diff --git a/contributer_demo/demo1/README.md b/contributer_demo/demo1/README.md new file mode 100644 index 0000000..c8dad8d --- /dev/null +++ b/contributer_demo/demo1/README.md @@ -0,0 +1,22 @@ + +# UAV Collaborative Simulation + +To simulate UAVs Collaborative for target searching , recognition and localization. + +## Introduction +To run the project, do as follows: +### 1.Source Download +```bash +git clone https://codechina.csdn.net/qq_44715174/uav_collaborative_simulation.git +``` +### 2.Simulation Environment +1.copy .launch and .world to px4 +```bash +cd uav_collaborative_simulation +cp worlds/* ~/PX4_Firmware/Tools/sitl_gazebo/worlds/ +cp launch/* ~/PX4_Firmware/launch/ +``` +2.run the simulation environment +```bash +roslaunch px4 cic2021.launch +``` diff --git a/contributer_demo/demo1/doc/rostopic list b/contributer_demo/demo1/doc/rostopic list new file mode 100644 index 0000000..15a6f27 --- /dev/null +++ b/contributer_demo/demo1/doc/rostopic list @@ -0,0 +1,400 @@ +/clock +/diagnostics +/gazebo/link_states +/gazebo/model_states +/gazebo/parameter_descriptions +/gazebo/parameter_updates +/gazebo/set_link_state +/gazebo/set_model_state +/rosout +/rosout_agg +/tf +/tf_static +/typhoon_h480_0/cgo3_camera/camera_info +/typhoon_h480_0/cgo3_camera/image_raw +/typhoon_h480_0/cgo3_camera/image_raw/compressed +/typhoon_h480_0/cgo3_camera/image_raw/compressed/parameter_descriptions +/typhoon_h480_0/cgo3_camera/image_raw/compressed/parameter_updates +/typhoon_h480_0/cgo3_camera/image_raw/compressedDepth +/typhoon_h480_0/cgo3_camera/image_raw/compressedDepth/parameter_descriptions +/typhoon_h480_0/cgo3_camera/image_raw/compressedDepth/parameter_updates +/typhoon_h480_0/cgo3_camera/image_raw/theora +/typhoon_h480_0/cgo3_camera/image_raw/theora/parameter_descriptions +/typhoon_h480_0/cgo3_camera/image_raw/theora/parameter_updates +/typhoon_h480_0/cgo3_camera/parameter_descriptions +/typhoon_h480_0/cgo3_camera/parameter_updates +/typhoon_h480_0/mavlink/from +/typhoon_h480_0/mavlink/gcs_ip +/typhoon_h480_0/mavlink/to +/typhoon_h480_0/mavros/actuator_control +/typhoon_h480_0/mavros/adsb/send +/typhoon_h480_0/mavros/adsb/vehicle +/typhoon_h480_0/mavros/altitude +/typhoon_h480_0/mavros/battery +/typhoon_h480_0/mavros/cam_imu_sync/cam_imu_stamp +/typhoon_h480_0/mavros/companion_process/status +/typhoon_h480_0/mavros/debug_value/debug +/typhoon_h480_0/mavros/debug_value/debug_vector +/typhoon_h480_0/mavros/debug_value/named_value_float +/typhoon_h480_0/mavros/debug_value/named_value_int +/typhoon_h480_0/mavros/debug_value/send +/typhoon_h480_0/mavros/esc_info +/typhoon_h480_0/mavros/esc_status +/typhoon_h480_0/mavros/estimator_status +/typhoon_h480_0/mavros/extended_state +/typhoon_h480_0/mavros/fake_gps/mocap/tf +/typhoon_h480_0/mavros/global_position/compass_hdg +/typhoon_h480_0/mavros/global_position/global +/typhoon_h480_0/mavros/global_position/gp_lp_offset +/typhoon_h480_0/mavros/global_position/gp_origin +/typhoon_h480_0/mavros/global_position/home +/typhoon_h480_0/mavros/global_position/local +/typhoon_h480_0/mavros/global_position/raw/fix +/typhoon_h480_0/mavros/global_position/raw/gps_vel +/typhoon_h480_0/mavros/global_position/raw/satellites +/typhoon_h480_0/mavros/global_position/rel_alt +/typhoon_h480_0/mavros/global_position/set_gp_origin +/typhoon_h480_0/mavros/gps_rtk/rtk_baseline +/typhoon_h480_0/mavros/gps_rtk/send_rtcm +/typhoon_h480_0/mavros/gpsstatus/gps1/raw +/typhoon_h480_0/mavros/gpsstatus/gps1/rtk +/typhoon_h480_0/mavros/gpsstatus/gps2/raw +/typhoon_h480_0/mavros/gpsstatus/gps2/rtk +/typhoon_h480_0/mavros/hil/actuator_controls +/typhoon_h480_0/mavros/hil/controls +/typhoon_h480_0/mavros/hil/gps +/typhoon_h480_0/mavros/hil/imu_ned +/typhoon_h480_0/mavros/hil/optical_flow +/typhoon_h480_0/mavros/hil/rc_inputs +/typhoon_h480_0/mavros/hil/state +/typhoon_h480_0/mavros/home_position/home +/typhoon_h480_0/mavros/home_position/set +/typhoon_h480_0/mavros/imu/data +/typhoon_h480_0/mavros/imu/data_raw +/typhoon_h480_0/mavros/imu/diff_pressure +/typhoon_h480_0/mavros/imu/mag +/typhoon_h480_0/mavros/imu/static_pressure +/typhoon_h480_0/mavros/imu/temperature_baro +/typhoon_h480_0/mavros/imu/temperature_imu +/typhoon_h480_0/mavros/landing_target/lt_marker +/typhoon_h480_0/mavros/landing_target/pose +/typhoon_h480_0/mavros/landing_target/pose_in +/typhoon_h480_0/mavros/local_position/accel +/typhoon_h480_0/mavros/local_position/odom +/typhoon_h480_0/mavros/local_position/pose +/typhoon_h480_0/mavros/local_position/pose_cov +/typhoon_h480_0/mavros/local_position/velocity_body +/typhoon_h480_0/mavros/local_position/velocity_body_cov +/typhoon_h480_0/mavros/local_position/velocity_local +/typhoon_h480_0/mavros/log_transfer/raw/log_data +/typhoon_h480_0/mavros/log_transfer/raw/log_entry +/typhoon_h480_0/mavros/manual_control/control +/typhoon_h480_0/mavros/manual_control/send +/typhoon_h480_0/mavros/mission/reached +/typhoon_h480_0/mavros/mission/waypoints +/typhoon_h480_0/mavros/mocap/pose +/typhoon_h480_0/mavros/mount_control/command +/typhoon_h480_0/mavros/mount_control/orientation +/typhoon_h480_0/mavros/obstacle/send +/typhoon_h480_0/mavros/odometry/in +/typhoon_h480_0/mavros/odometry/out +/typhoon_h480_0/mavros/onboard_computer/status +/typhoon_h480_0/mavros/param/param_value +/typhoon_h480_0/mavros/play_tune +/typhoon_h480_0/mavros/px4flow/ground_distance +/typhoon_h480_0/mavros/px4flow/raw/optical_flow_rad +/typhoon_h480_0/mavros/px4flow/raw/send +/typhoon_h480_0/mavros/px4flow/temperature +/typhoon_h480_0/mavros/radio_status +/typhoon_h480_0/mavros/rc/in +/typhoon_h480_0/mavros/rc/out +/typhoon_h480_0/mavros/rc/override +/typhoon_h480_0/mavros/setpoint_accel/accel +/typhoon_h480_0/mavros/setpoint_attitude/cmd_vel +/typhoon_h480_0/mavros/setpoint_attitude/thrust +/typhoon_h480_0/mavros/setpoint_position/global +/typhoon_h480_0/mavros/setpoint_position/global_to_local +/typhoon_h480_0/mavros/setpoint_position/local +/typhoon_h480_0/mavros/setpoint_raw/attitude +/typhoon_h480_0/mavros/setpoint_raw/global +/typhoon_h480_0/mavros/setpoint_raw/local +/typhoon_h480_0/mavros/setpoint_raw/target_attitude +/typhoon_h480_0/mavros/setpoint_raw/target_global +/typhoon_h480_0/mavros/setpoint_raw/target_local +/typhoon_h480_0/mavros/setpoint_trajectory/desired +/typhoon_h480_0/mavros/setpoint_trajectory/local +/typhoon_h480_0/mavros/setpoint_velocity/cmd_vel +/typhoon_h480_0/mavros/setpoint_velocity/cmd_vel_unstamped +/typhoon_h480_0/mavros/state +/typhoon_h480_0/mavros/statustext/recv +/typhoon_h480_0/mavros/statustext/send +/typhoon_h480_0/mavros/target_actuator_control +/typhoon_h480_0/mavros/time_reference +/typhoon_h480_0/mavros/timesync_status +/typhoon_h480_0/mavros/trajectory/desired +/typhoon_h480_0/mavros/trajectory/generated +/typhoon_h480_0/mavros/trajectory/path +/typhoon_h480_0/mavros/vfr_hud +/typhoon_h480_0/mavros/vision_pose/pose +/typhoon_h480_0/mavros/vision_pose/pose_cov +/typhoon_h480_0/mavros/vision_speed/speed_twist_cov +/typhoon_h480_0/mavros/wind_estimation +/typhoon_h480_1/cgo3_camera/camera_info +/typhoon_h480_1/cgo3_camera/image_raw +/typhoon_h480_1/cgo3_camera/image_raw/compressed +/typhoon_h480_1/cgo3_camera/image_raw/compressed/parameter_descriptions +/typhoon_h480_1/cgo3_camera/image_raw/compressed/parameter_updates +/typhoon_h480_1/cgo3_camera/image_raw/compressedDepth +/typhoon_h480_1/cgo3_camera/image_raw/compressedDepth/parameter_descriptions +/typhoon_h480_1/cgo3_camera/image_raw/compressedDepth/parameter_updates +/typhoon_h480_1/cgo3_camera/image_raw/theora +/typhoon_h480_1/cgo3_camera/image_raw/theora/parameter_descriptions +/typhoon_h480_1/cgo3_camera/image_raw/theora/parameter_updates +/typhoon_h480_1/cgo3_camera/parameter_descriptions +/typhoon_h480_1/cgo3_camera/parameter_updates +/typhoon_h480_1/mavlink/from +/typhoon_h480_1/mavlink/gcs_ip +/typhoon_h480_1/mavlink/to +/typhoon_h480_1/mavros/actuator_control +/typhoon_h480_1/mavros/adsb/send +/typhoon_h480_1/mavros/adsb/vehicle +/typhoon_h480_1/mavros/altitude +/typhoon_h480_1/mavros/battery +/typhoon_h480_1/mavros/cam_imu_sync/cam_imu_stamp +/typhoon_h480_1/mavros/companion_process/status +/typhoon_h480_1/mavros/debug_value/debug +/typhoon_h480_1/mavros/debug_value/debug_vector +/typhoon_h480_1/mavros/debug_value/named_value_float +/typhoon_h480_1/mavros/debug_value/named_value_int +/typhoon_h480_1/mavros/debug_value/send +/typhoon_h480_1/mavros/esc_info +/typhoon_h480_1/mavros/esc_status +/typhoon_h480_1/mavros/estimator_status +/typhoon_h480_1/mavros/extended_state +/typhoon_h480_1/mavros/fake_gps/mocap/tf +/typhoon_h480_1/mavros/global_position/compass_hdg +/typhoon_h480_1/mavros/global_position/global +/typhoon_h480_1/mavros/global_position/gp_lp_offset +/typhoon_h480_1/mavros/global_position/gp_origin +/typhoon_h480_1/mavros/global_position/home +/typhoon_h480_1/mavros/global_position/local +/typhoon_h480_1/mavros/global_position/raw/fix +/typhoon_h480_1/mavros/global_position/raw/gps_vel +/typhoon_h480_1/mavros/global_position/raw/satellites +/typhoon_h480_1/mavros/global_position/rel_alt +/typhoon_h480_1/mavros/global_position/set_gp_origin +/typhoon_h480_1/mavros/gps_rtk/rtk_baseline +/typhoon_h480_1/mavros/gps_rtk/send_rtcm +/typhoon_h480_1/mavros/gpsstatus/gps1/raw +/typhoon_h480_1/mavros/gpsstatus/gps1/rtk +/typhoon_h480_1/mavros/gpsstatus/gps2/raw +/typhoon_h480_1/mavros/gpsstatus/gps2/rtk +/typhoon_h480_1/mavros/hil/actuator_controls +/typhoon_h480_1/mavros/hil/controls +/typhoon_h480_1/mavros/hil/gps +/typhoon_h480_1/mavros/hil/imu_ned +/typhoon_h480_1/mavros/hil/optical_flow +/typhoon_h480_1/mavros/hil/rc_inputs +/typhoon_h480_1/mavros/hil/state +/typhoon_h480_1/mavros/home_position/home +/typhoon_h480_1/mavros/home_position/set +/typhoon_h480_1/mavros/imu/data +/typhoon_h480_1/mavros/imu/data_raw +/typhoon_h480_1/mavros/imu/diff_pressure +/typhoon_h480_1/mavros/imu/mag +/typhoon_h480_1/mavros/imu/static_pressure +/typhoon_h480_1/mavros/imu/temperature_baro +/typhoon_h480_1/mavros/imu/temperature_imu +/typhoon_h480_1/mavros/landing_target/lt_marker +/typhoon_h480_1/mavros/landing_target/pose +/typhoon_h480_1/mavros/landing_target/pose_in +/typhoon_h480_1/mavros/local_position/accel +/typhoon_h480_1/mavros/local_position/odom +/typhoon_h480_1/mavros/local_position/pose +/typhoon_h480_1/mavros/local_position/pose_cov +/typhoon_h480_1/mavros/local_position/velocity_body +/typhoon_h480_1/mavros/local_position/velocity_body_cov +/typhoon_h480_1/mavros/local_position/velocity_local +/typhoon_h480_1/mavros/log_transfer/raw/log_data +/typhoon_h480_1/mavros/log_transfer/raw/log_entry +/typhoon_h480_1/mavros/manual_control/control +/typhoon_h480_1/mavros/manual_control/send +/typhoon_h480_1/mavros/mission/reached +/typhoon_h480_1/mavros/mission/waypoints +/typhoon_h480_1/mavros/mocap/pose +/typhoon_h480_1/mavros/mount_control/command +/typhoon_h480_1/mavros/mount_control/orientation +/typhoon_h480_1/mavros/obstacle/send +/typhoon_h480_1/mavros/odometry/in +/typhoon_h480_1/mavros/odometry/out +/typhoon_h480_1/mavros/onboard_computer/status +/typhoon_h480_1/mavros/param/param_value +/typhoon_h480_1/mavros/play_tune +/typhoon_h480_1/mavros/px4flow/ground_distance +/typhoon_h480_1/mavros/px4flow/raw/optical_flow_rad +/typhoon_h480_1/mavros/px4flow/raw/send +/typhoon_h480_1/mavros/px4flow/temperature +/typhoon_h480_1/mavros/radio_status +/typhoon_h480_1/mavros/rc/in +/typhoon_h480_1/mavros/rc/out +/typhoon_h480_1/mavros/rc/override +/typhoon_h480_1/mavros/setpoint_accel/accel +/typhoon_h480_1/mavros/setpoint_attitude/cmd_vel +/typhoon_h480_1/mavros/setpoint_attitude/thrust +/typhoon_h480_1/mavros/setpoint_position/global +/typhoon_h480_1/mavros/setpoint_position/global_to_local +/typhoon_h480_1/mavros/setpoint_position/local +/typhoon_h480_1/mavros/setpoint_raw/attitude +/typhoon_h480_1/mavros/setpoint_raw/global +/typhoon_h480_1/mavros/setpoint_raw/local +/typhoon_h480_1/mavros/setpoint_raw/target_attitude +/typhoon_h480_1/mavros/setpoint_raw/target_global +/typhoon_h480_1/mavros/setpoint_raw/target_local +/typhoon_h480_1/mavros/setpoint_trajectory/desired +/typhoon_h480_1/mavros/setpoint_trajectory/local +/typhoon_h480_1/mavros/setpoint_velocity/cmd_vel +/typhoon_h480_1/mavros/setpoint_velocity/cmd_vel_unstamped +/typhoon_h480_1/mavros/state +/typhoon_h480_1/mavros/statustext/recv +/typhoon_h480_1/mavros/statustext/send +/typhoon_h480_1/mavros/target_actuator_control +/typhoon_h480_1/mavros/time_reference +/typhoon_h480_1/mavros/timesync_status +/typhoon_h480_1/mavros/trajectory/desired +/typhoon_h480_1/mavros/trajectory/generated +/typhoon_h480_1/mavros/trajectory/path +/typhoon_h480_1/mavros/vfr_hud +/typhoon_h480_1/mavros/vision_pose/pose +/typhoon_h480_1/mavros/vision_pose/pose_cov +/typhoon_h480_1/mavros/vision_speed/speed_twist_cov +/typhoon_h480_1/mavros/wind_estimation +/typhoon_h480_2/cgo3_camera/camera_info +/typhoon_h480_2/cgo3_camera/image_raw +/typhoon_h480_2/cgo3_camera/image_raw/compressed +/typhoon_h480_2/cgo3_camera/image_raw/compressed/parameter_descriptions +/typhoon_h480_2/cgo3_camera/image_raw/compressed/parameter_updates +/typhoon_h480_2/cgo3_camera/image_raw/compressedDepth +/typhoon_h480_2/cgo3_camera/image_raw/compressedDepth/parameter_descriptions +/typhoon_h480_2/cgo3_camera/image_raw/compressedDepth/parameter_updates +/typhoon_h480_2/cgo3_camera/image_raw/theora +/typhoon_h480_2/cgo3_camera/image_raw/theora/parameter_descriptions +/typhoon_h480_2/cgo3_camera/image_raw/theora/parameter_updates +/typhoon_h480_2/cgo3_camera/parameter_descriptions +/typhoon_h480_2/cgo3_camera/parameter_updates +/typhoon_h480_2/mavlink/from +/typhoon_h480_2/mavlink/gcs_ip +/typhoon_h480_2/mavlink/to +/typhoon_h480_2/mavros/actuator_control +/typhoon_h480_2/mavros/adsb/send +/typhoon_h480_2/mavros/adsb/vehicle +/typhoon_h480_2/mavros/altitude +/typhoon_h480_2/mavros/battery +/typhoon_h480_2/mavros/cam_imu_sync/cam_imu_stamp +/typhoon_h480_2/mavros/companion_process/status +/typhoon_h480_2/mavros/debug_value/debug +/typhoon_h480_2/mavros/debug_value/debug_vector +/typhoon_h480_2/mavros/debug_value/named_value_float +/typhoon_h480_2/mavros/debug_value/named_value_int +/typhoon_h480_2/mavros/debug_value/send +/typhoon_h480_2/mavros/esc_info +/typhoon_h480_2/mavros/esc_status +/typhoon_h480_2/mavros/estimator_status +/typhoon_h480_2/mavros/extended_state +/typhoon_h480_2/mavros/fake_gps/mocap/tf +/typhoon_h480_2/mavros/global_position/compass_hdg +/typhoon_h480_2/mavros/global_position/global +/typhoon_h480_2/mavros/global_position/gp_lp_offset +/typhoon_h480_2/mavros/global_position/gp_origin +/typhoon_h480_2/mavros/global_position/home +/typhoon_h480_2/mavros/global_position/local +/typhoon_h480_2/mavros/global_position/raw/fix +/typhoon_h480_2/mavros/global_position/raw/gps_vel +/typhoon_h480_2/mavros/global_position/raw/satellites +/typhoon_h480_2/mavros/global_position/rel_alt +/typhoon_h480_2/mavros/global_position/set_gp_origin +/typhoon_h480_2/mavros/gps_rtk/rtk_baseline +/typhoon_h480_2/mavros/gps_rtk/send_rtcm +/typhoon_h480_2/mavros/gpsstatus/gps1/raw +/typhoon_h480_2/mavros/gpsstatus/gps1/rtk +/typhoon_h480_2/mavros/gpsstatus/gps2/raw +/typhoon_h480_2/mavros/gpsstatus/gps2/rtk +/typhoon_h480_2/mavros/hil/actuator_controls +/typhoon_h480_2/mavros/hil/controls +/typhoon_h480_2/mavros/hil/gps +/typhoon_h480_2/mavros/hil/imu_ned +/typhoon_h480_2/mavros/hil/optical_flow +/typhoon_h480_2/mavros/hil/rc_inputs +/typhoon_h480_2/mavros/hil/state +/typhoon_h480_2/mavros/home_position/home +/typhoon_h480_2/mavros/home_position/set +/typhoon_h480_2/mavros/imu/data +/typhoon_h480_2/mavros/imu/data_raw +/typhoon_h480_2/mavros/imu/diff_pressure +/typhoon_h480_2/mavros/imu/mag +/typhoon_h480_2/mavros/imu/static_pressure +/typhoon_h480_2/mavros/imu/temperature_baro +/typhoon_h480_2/mavros/imu/temperature_imu +/typhoon_h480_2/mavros/landing_target/lt_marker +/typhoon_h480_2/mavros/landing_target/pose +/typhoon_h480_2/mavros/landing_target/pose_in +/typhoon_h480_2/mavros/local_position/accel +/typhoon_h480_2/mavros/local_position/odom +/typhoon_h480_2/mavros/local_position/pose +/typhoon_h480_2/mavros/local_position/pose_cov +/typhoon_h480_2/mavros/local_position/velocity_body +/typhoon_h480_2/mavros/local_position/velocity_body_cov +/typhoon_h480_2/mavros/local_position/velocity_local +/typhoon_h480_2/mavros/log_transfer/raw/log_data +/typhoon_h480_2/mavros/log_transfer/raw/log_entry +/typhoon_h480_2/mavros/manual_control/control +/typhoon_h480_2/mavros/manual_control/send +/typhoon_h480_2/mavros/mission/reached +/typhoon_h480_2/mavros/mission/waypoints +/typhoon_h480_2/mavros/mocap/pose +/typhoon_h480_2/mavros/mount_control/command +/typhoon_h480_2/mavros/mount_control/orientation +/typhoon_h480_2/mavros/obstacle/send +/typhoon_h480_2/mavros/odometry/in +/typhoon_h480_2/mavros/odometry/out +/typhoon_h480_2/mavros/onboard_computer/status +/typhoon_h480_2/mavros/param/param_value +/typhoon_h480_2/mavros/play_tune +/typhoon_h480_2/mavros/px4flow/ground_distance +/typhoon_h480_2/mavros/px4flow/raw/optical_flow_rad +/typhoon_h480_2/mavros/px4flow/raw/send +/typhoon_h480_2/mavros/px4flow/temperature +/typhoon_h480_2/mavros/radio_status +/typhoon_h480_2/mavros/rc/in +/typhoon_h480_2/mavros/rc/out +/typhoon_h480_2/mavros/rc/override +/typhoon_h480_2/mavros/setpoint_accel/accel +/typhoon_h480_2/mavros/setpoint_attitude/cmd_vel +/typhoon_h480_2/mavros/setpoint_attitude/thrust +/typhoon_h480_2/mavros/setpoint_position/global +/typhoon_h480_2/mavros/setpoint_position/global_to_local +/typhoon_h480_2/mavros/setpoint_position/local +/typhoon_h480_2/mavros/setpoint_raw/attitude +/typhoon_h480_2/mavros/setpoint_raw/global +/typhoon_h480_2/mavros/setpoint_raw/local +/typhoon_h480_2/mavros/setpoint_raw/target_attitude +/typhoon_h480_2/mavros/setpoint_raw/target_global +/typhoon_h480_2/mavros/setpoint_raw/target_local +/typhoon_h480_2/mavros/setpoint_trajectory/desired +/typhoon_h480_2/mavros/setpoint_trajectory/local +/typhoon_h480_2/mavros/setpoint_velocity/cmd_vel +/typhoon_h480_2/mavros/setpoint_velocity/cmd_vel_unstamped +/typhoon_h480_2/mavros/state +/typhoon_h480_2/mavros/statustext/recv +/typhoon_h480_2/mavros/statustext/send +/typhoon_h480_2/mavros/target_actuator_control +/typhoon_h480_2/mavros/time_reference +/typhoon_h480_2/mavros/timesync_status +/typhoon_h480_2/mavros/trajectory/desired +/typhoon_h480_2/mavros/trajectory/generated +/typhoon_h480_2/mavros/trajectory/path +/typhoon_h480_2/mavros/vfr_hud +/typhoon_h480_2/mavros/vision_pose/pose +/typhoon_h480_2/mavros/vision_pose/pose_cov +/typhoon_h480_2/mavros/vision_speed/speed_twist_cov +/typhoon_h480_2/mavros/wind_estimation + diff --git a/contributer_demo/demo1/launch/cic2021.launch b/contributer_demo/demo1/launch/cic2021.launch new file mode 100644 index 0000000..b435393 --- /dev/null +++ b/contributer_demo/demo1/launch/cic2021.launch @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contributer_demo/demo1/src/CMakeLists.txt b/contributer_demo/demo1/src/CMakeLists.txt new file mode 120000 index 0000000..66dd650 --- /dev/null +++ b/contributer_demo/demo1/src/CMakeLists.txt @@ -0,0 +1 @@ +/opt/ros/melodic/share/catkin/cmake/toplevel.cmake \ No newline at end of file diff --git a/contributer_demo/demo1/src/formation/CMakeLists.txt b/contributer_demo/demo1/src/formation/CMakeLists.txt new file mode 100644 index 0000000..21453e5 --- /dev/null +++ b/contributer_demo/demo1/src/formation/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 2.8.3) +project(formation) + +find_package(catkin REQUIRED COMPONENTS + geometry_msgs + rosmsg + rospy + std_msgs + message_generation +) + + +generate_messages( + DEPENDENCIES + std_msgs + geometry_msgs +) + +catkin_package( + CATKIN_DEPENDS + std_msgs + geometry_msgs +) + diff --git a/contributer_demo/demo1/src/formation/package.xml b/contributer_demo/demo1/src/formation/package.xml new file mode 100644 index 0000000..259a5ae --- /dev/null +++ b/contributer_demo/demo1/src/formation/package.xml @@ -0,0 +1,27 @@ + + + formation + 0.0.0 + The PX4 Formation Control package + malan + TODO + + catkin + geometry_msgs + rosmsg + rospy + std_msgs + message_generation + geometry_msgs + rosmsg + rospy + std_msgs + geometry_msgs + rosmsg + rospy + std_msgs + message_runtime + + + + diff --git a/contributer_demo/demo1/src/formation/script/enviroment.py b/contributer_demo/demo1/src/formation/script/enviroment.py new file mode 100644 index 0000000..aeacfa8 --- /dev/null +++ b/contributer_demo/demo1/src/formation/script/enviroment.py @@ -0,0 +1,97 @@ +import numpy as np +import matplotlib.pyplot as plt +import random + +class Env(): + def __init__(self, vehicle_num, target_num, map_size, visualized): + self.visualized = visualized + self.vehicles_position = np.zeros(vehicle_num, dtype=np.int32) + self.vehicles_speed = np.zeros(vehicle_num, dtype=np.int32) + self.targets = np.zeros(shape=(target_num + 1, 4), dtype=np.int32) + self.distant_mat = np.zeros((target_num + 1, target_num + 1), dtype=np.float32) + self.map_size_x = map_size[0] + self.map_size_y = map_size[1] + self.speed_range = [1, 1, 1] + self.time_lim = max(self.map_size_x, self.map_size_y )/ self.speed_range[0] + self.vehicles_lefttime = np.ones(vehicle_num, dtype=np.float32) * self.time_lim + self.assignment = [[] for i in range(vehicle_num)] + self.total_reward = 0 + for i in range(self.vehicles_speed.shape[0]): + speed_type = random.randint(0,2) + self.vehicles_speed[i] = self.speed_range[speed_type] + self.time_limit = max(self.map_size_x, self.map_size_y) / self.speed_range[0] + self.end = False + self.task_generator() + + def task_generator(self): + for i in range(self.targets.shape[0]-1): + self.targets[i+1,0] = random.randint(1,self.map_size_x) - 0.5*self.map_size_x # x position + self.targets[i+1,1] = random.randint(1,self.map_size_y) - 0.5*self.map_size_y # y position + self.targets[i + 1, 2] = random.randint(1, 10) # reward + self.targets[i + 1, 3] = random.randint(5, 30) # time consumption to finish the mission + self.targets[self.targets.shape[0]-2, 0] = 20 + self.targets[self.targets.shape[0] - 2, 1] = -27 + for i in range(self.targets.shape[0]): + for j in range(self.targets.shape[0]-i): + self.distant_mat[i, j] = np.linalg.norm(self.targets[i, :2] - self.targets[j, :2]) + + def visualize(self): + if self.assignment == None: + plt.scatter(x=0,y=0,s=200,c='k') + plt.scatter(x=self.targets[1:,0],y=self.targets[1:,1],s=self.targets[1:,2]*10,c='r') + plt.title('Target distribution') + plt.savefig('task_pic/'+'/'+self.algorithm+ "-%d-%d.png" % (self.play,self.rond)) + plt.cla() + else: + plt.title('Task assignment by '+self.algorithm +', total reward : '+str(self.total_reward)) + plt.scatter(x=0,y=0,s=200,c='k') + plt.scatter(x=self.targets[1:,0],y=self.targets[1:,1],s=self.targets[1:,2]*10,c='r') + for i in range(len(self.assignment)): + trajectory = np.array([[0,0,20]]) + for j in range(len(self.assignment[i])): + position = self.targets[self.assignment[i][j],:3] + trajectory = np.insert(trajectory,j+1,values=position,axis=0) + plt.scatter(x=trajectory[1:,0],y=trajectory[1:,1],s=trajectory[1:,2]*10,c='b') + plt.plot(trajectory[:,0], trajectory[:,1]) + plt.savefig('task_picture/'+self.algorithm+ "-%d-%d.png" % (self.play,self.rond)) + plt.cla() + + def get_total_reward(self): + for i in range(len(self.assignment)): + speed = self.vehicles_speed[i] + for j in range(len(self.assignment[i])): + position = self.targets[self.assignment[i][j],:4] + self.total_reward = self.total_reward + position[2] + if j == 0: + self.vehicles_lefttime[i] = self.vehicles_lefttime[i] - np.linalg.norm(position[:2]) / speed - position[3] + else: + self.vehicles_lefttime[i] = self.vehicles_lefttime[i] - np.linalg.norm(position[:2]-position_last[:2]) / speed - position[3] + position_last = position + if self.vehicles_lefttime[i] > self.time_lim: + self.end = True + break + if self.end: + self.total_reward = 0 + break + + def run(self, assignment, algorithm, play, rond): + self.assignment = assignment + self.algorithm = algorithm + self.play = play + self.rond = rond + self.get_total_reward() + if self.visualized: + self.visualize() + + def reset(self): + self.vehicles_position = np.zeros(self.vehicles_position.shape[0],dtype=np.int32) + self.vehicles_lefttime = np.ones(self.vehicles_position.shape[0],dtype=np.float32) * self.time_lim + self.targets[:,2] = self.targets_value + self.total_reward = 0 + self.reward = 0 + self.end = False + + + + + diff --git a/contributer_demo/demo1/src/formation/script/formation_gcs.py b/contributer_demo/demo1/src/formation/script/formation_gcs.py new file mode 100644 index 0000000..b8bccb7 --- /dev/null +++ b/contributer_demo/demo1/src/formation/script/formation_gcs.py @@ -0,0 +1,181 @@ +# -*- coding: UTF-8 -*- +""" +Framework for Formation GCS + +* send cmd by ros topic + +Before running this code, you need to make sure ros master started: +if not: +$ roscore # start ros master + +And then, you can run this code via: +$ python formation_gcs.py # start gcs +""" + +import rospy +from std_msgs.msg import String +import sys, select, os +import tty, termios +import copy +from enviroment import Env +from ga2 import GA2 +from geometry_msgs.msg import PoseStamped +import math + +msg2ui = """ +Welcome use gcs! +Let's go! +--------------------------- + 1 2 3 4 5 6 7 8 9 0 + t + h l + +t : takeoff +l : land +h : hover +0 : search target +1 : formation 1 +2 : fortion 2 +3~9 : extendable mission(eg.different formation configuration) +q/Q : quit +""" + +uav_type = 'typhoon_h480' + +uav_bias = [[0,0,0],[0,3,0],[0,-3,0]] + +class GroundControler: + def __init__(self): + self.settings = termios.tcgetattr(sys.stdin) + self.gcs_cmd = String() + self.gcs_cmd = 'start' + self.formation_mode = {'FORM_0':'search', 'FORM_1':'straight', 'FORM_2':'triangle'} + # ros publishers + self.gcs_cmd_pub = rospy.Publisher("/formation_gcs/cmd", String, queue_size=10) + + #ga + self.map_size_x = 80 + self.map_size_y = 80 + self.map_size = [self.map_size_x, self.map_size_y] + self.vehicle_num = 3 + self.target_num = 10 + self.target = [PoseStamped() for i in range(self.vehicle_num)] + self.env = Env(self.vehicle_num, self.target_num, self.map_size, False) + self.ga2_result = None + self.ga2 = GA2(self.vehicle_num, self.env.vehicles_speed, self.target_num, self.env.targets, self.env.time_limit) + self.ga_flag = False + self.pos_i = [1 for i in range(self.vehicle_num)] + + # ros subscribers + for i in range(self.vehicle_num): + rospy.Subscriber(uav_type+ '_' + str(i) + "/mavros/local_position/pose", PoseStamped, self.local_pose_callback, i, queue_size = 2) + + # ros publishers + self.local_target_pub = [rospy.Publisher(uav_type + '_' + str(i) + '/mavros/setpoint_position/local', PoseStamped, queue_size=10) for i in range(self.vehicle_num)] + + self.global_pose = [PoseStamped() for i in range(self.vehicle_num)] + + print("Ground Controller Start!") + + def working(self): + rospy.init_node("gcs_control_node") + rate = rospy.Rate(60) + self.print_ui() + while rospy.is_shutdown() is False: + key = self.getKey() + if key == 't' : + self.gcs_cmd = 'TAKEOFF' + self.print_ui() + print(self.gcs_cmd) + self.gcs_cmd_pub.publish(self.gcs_cmd) + + elif key == 'l': + self.gcs_cmd = 'AUTO.LAND' + self.print_ui() + print(self.gcs_cmd) + self.gcs_cmd_pub.publish(self.gcs_cmd) + + elif key == 'h': + self.gcs_cmd = 'HOVOR' + self.print_ui() + print(self.gcs_cmd) + self.gcs_cmd_pub.publish(self.gcs_cmd) + + else: + if key == '0': + if not self.ga_flag: + self.ga2_result = self.ga2.run()[0] + # print(self.ga2_result[0]) + # print(self.env.targets[self.ga2_result[0]]) + # for uav_i in range(self.vehicle_num): + # for i in range(len(self.ga2_result[uav_i])): + # print(self.env.targets[self.ga2_result[uav_i]][i][0],self.env.targets[self.ga2_result[uav_i]][i][1]) + self.ga_flag = True + self.gcs_cmd = 'FORM_' + key + self.print_ui() + print(self.formation_mode[self.gcs_cmd]) + self.gcs_cmd_pub.publish(self.gcs_cmd) + + for i in range(2): + if key == str(i+1): + self.gcs_cmd = 'FORM_'+key + self.print_ui() + print(self.formation_mode[self.gcs_cmd]) + self.gcs_cmd_pub.publish(self.gcs_cmd) + + if key == 'q' or key =='Q': + break + if self.ga_flag: + for uav_i in range(self.vehicle_num): + if uav_i == 1: + print(self.pos_i[uav_i],self.env.targets[self.ga2_result[uav_i]][self.pos_i[uav_i]]) + if self.is_get_target(uav_i,self.env.targets[self.ga2_result[uav_i]][self.pos_i[uav_i]][0],self.env.targets[self.ga2_result[uav_i]][self.pos_i[uav_i]][1]): + self.pos_i[uav_i] += 1 + if self.pos_i[uav_i] < len(self.ga2_result[uav_i]): + self.target[uav_i] = self.construct_target(self.env.targets[self.ga2_result[uav_i]][self.pos_i[uav_i]][0],self.env.targets[self.ga2_result[uav_i]][self.pos_i[uav_i]][1]) + else: + self.pos_i[uav_i] -= 1 + # print(self.pos_i[uav_i]) + self.local_target_pub[uav_i].publish(self.target[uav_i]) + print(self.target[uav_i]) + + rate.sleep() + termios.tcsetattr(sys.stdin, termios.TCSADRAIN, self.settings) + + def construct_target(self,x,y): + target_pos = PoseStamped() + target_pos.pose.position.x = x + target_pos.pose.position.y = y + target_pos.pose.position.z = 6 + print(target_pos) + return target_pos + + def is_get_target(self,i,x,y): + if math.sqrt((self.global_pose[i].pose.position.x-x)*(self.global_pose[i].pose.position.x-x)+\ + (self.global_pose[i].pose.position.y-y)*(self.global_pose[i].pose.position.y-y))< 0.5: + return True + else: + return False + + def local_pose_callback(self, msg, i): + self.global_pose[i] = copy.deepcopy(msg) + self.global_pose[i].pose.position.x += uav_bias[i][0] + self.global_pose[i].pose.position.y += uav_bias[i][1] + self.global_pose[i].pose.position.z += uav_bias[i][2] + + def getKey(self): + tty.setraw(sys.stdin.fileno()) + rlist, _, _ = select.select([sys.stdin], [], [], 0.1) + if rlist: + key = sys.stdin.read(1) + else: + key = '' + termios.tcsetattr(sys.stdin, termios.TCSADRAIN, self.settings) + return key + + def print_ui(self): + print(msg2ui) + +if __name__ == '__main__': + groundcontroler = GroundControler() + groundcontroler.working() \ No newline at end of file diff --git a/contributer_demo/demo1/src/formation/script/formation_sim.py b/contributer_demo/demo1/src/formation/script/formation_sim.py new file mode 100644 index 0000000..fc1d8c4 --- /dev/null +++ b/contributer_demo/demo1/src/formation/script/formation_sim.py @@ -0,0 +1,314 @@ +# -*- coding: UTF-8 -*- +""" +Framework for Formation Control + +* To control all UAV in Gazebo(simulation environment) using MPI + +Before running this code, you need to launch your simulation Environment and px4 via: +$ roslaunch px4 cic2021.launch # 3 UAVs in simulation + +And then, you can run this code via: +$ mpiexec -n 3 python formation_sim.py # 3 UAVs in simulation +""" + +import time +from pyquaternion import Quaternion +from mpi4py import MPI +import rospy +from mavros_msgs.msg import State, PositionTarget +from mavros_msgs.srv import CommandBool, SetMode, SetMavFrame +from geometry_msgs.msg import PoseStamped, TwistStamped +from sensor_msgs.msg import Imu, NavSatFix +from std_msgs.msg import String +import numpy as np +import copy +from fuzzy_pid import FuzzyPID + + +uav_type = 'typhoon_h480' +comm = MPI.COMM_WORLD +uav_id = comm.Get_rank() +uav_num = comm.Get_size() + +uav_bias = [[0,0,0],[0,3,0],[0,-3,0]] + +class Px4Controller: + def __init__(self): + self.uav_id = uav_id + self.namespace = uav_type + '_' + "{proc}".format(proc=self.uav_id) + + self.imu = Imu() + self.gps = NavSatFix() + self.local_pose = PoseStamped() + + self.neighbor_id = [] + + self.current_heading = None + self.takeoff_height = 6 + + self.cur_target_pose = None + self.target_yaw = 0 + + self.takeoff_target_pose = PoseStamped() + self.hover_target_pose = PoseStamped() + self.target_pose = PoseStamped() + self.target_vel = TwistStamped() + self.global_pose = [PoseStamped() for i in range(uav_num)] + + self.received_new_task = False + self.arm_state = False + self.mavros_state = State() + + self.gcs_cmd = String() + self.last_gcs_cmd = String() + self.form_flag = 0 + + # control parameters + self.fuzzy_pid = FuzzyPID() + self.Kpx = 1 + self.Kpy = 1 + self.Kpz = 1 + self.Kpw = 1 + self.velxy_max = 1 + self.velz_max = 1 + self.w_max = 0.5 + + # ros subscribers + for i in range(uav_num): + rospy.Subscriber(uav_type+ '_' + str(i) + "/mavros/local_position/pose", PoseStamped, self.local_pose_callback, i, queue_size = 2) + # self.local_vel_sub = rospy.Subscriber(uav_type + '_' + str(i) + "/mavros/local_position/velocity_local", TwistStamped, self.local_vel_callback) + self.mavros_sub = rospy.Subscriber(self.namespace + "/mavros/state", State, self.mavros_state_callback) + self.gps_sub = rospy.Subscriber(self.namespace + "/mavros/global_position/global", NavSatFix, self.gps_callback) + self.imu_sub = rospy.Subscriber(self.namespace + "/mavros/imu/data", Imu, self.imu_callback) + self.gcs_cmd_sub = rospy.Subscriber("/formation_gcs/cmd", String, self.gcs_cmd_callback) + + # ros publishers + self.local_target_pub = rospy.Publisher(self.namespace + '/mavros/setpoint_raw/local', PositionTarget, queue_size=10) + self.twist_target_pub = rospy.Publisher(self.namespace + '/mavros/setpoint_velocity/cmd_vel', TwistStamped, queue_size=10) + + # ros services + self.armService = rospy.ServiceProxy(self.namespace + '/mavros/cmd/arming', CommandBool) + self.flightModeService = rospy.ServiceProxy(self.namespace + '/mavros/set_mode', SetMode) + self.frameService = rospy.ServiceProxy(self.namespace + '/mavros/setpoint_velocity/mav_frame', SetMavFrame) + print(self.namespace, ": Px4 Controller Start!") + + def working(self): + rospy.init_node(self.namespace + "_control_node") + time.sleep(1) #waiting or node init 1s + rate = rospy.Rate(60) + + for i in range(10): + if self.current_heading is not None: + print(self.namespace, ": initialization finished !") + break + else: + print(self.namespace, ": Waiting for initialization...") + time.sleep(0.5) + + while rospy.is_shutdown() is False: + + if self.gcs_cmd == 'TAKEOFF': + self.last_gcs_cmd = 'TAKEOFF' + self.form_flag = 0 + if self.mavros_state != 'OFFBOARD': + self.flight_mode_set(mode='OFFBOARD') + if not self.arm_state: + self.arm() + + self.target_pose = self.construct_target(self.takeoff_target_pose.pose.position.x, + self.takeoff_target_pose.pose.position.y , self.takeoff_height, + self.current_heading) + self.local_target_pub.publish(self.target_pose) + + if self.takeoff_detection(): + print(self.namespace, ": Takeoff Success !") + else: + print(self.namespace, ": Takeoff Failed !!!") + # self.frameService(1) + + elif self.gcs_cmd == 'FORM_0': + self.last_gcs_cmd = 'FORM_0' + if self.mavros_state != 'OFFBOARD': + self.flight_mode_set(mode='OFFBOARD') + + elif self.gcs_cmd == 'FORM_1': + self.last_gcs_cmd = 'FORM_1' + if self.form_flag != 1: + self.read_set_file('FORM_1_id','FORM_1_pos') + self.form_flag = 1 + if self.mavros_state != 'OFFBOARD': + self.flight_mode_set(mode='OFFBOARD') + self.formation_control() + self.twist_target_pub.publish(self.target_vel) + + elif self.gcs_cmd == 'FORM_2': + self.last_gcs_cmd = 'FORM_2' + if self.form_flag != 2: + self.read_set_file('FORM_2_id','FORM_2_pos') + self.form_flag = 2 + if self.mavros_state != 'OFFBOARD': + self.flight_mode_set(mode='OFFBOARD') + self.formation_control() + self.twist_target_pub.publish(self.target_vel) + + elif self.gcs_cmd == 'AUTO.LAND': + self.last_gcs_cmd = 'AUTO.LAND' + self.form_flag = 0 + if self.mavros_state != "AUTO.LAND": + self.flight_mode_set(mode='AUTO.LAND') + if (self.mavros_state == 'AUTO.LAND') and (self.local_pose.pose.position.z < 0.05): + if self.arm_state: + self.disarm() + print(self.namespace, ": Land Success!") + elif self.gcs_cmd == 'HOVER': + self.last_gcs_cmd = 'HOVER' + self.form_flag = 0 + if self.mavros_state != 'OFFBOARD': + self.flight_mode_set(mode='OFFBOARD') + if not self.arm_state: + self.arm() + + self.target_pose = self.construct_target(self.hover_target_pose.pose.position.x, + self.hover_target_pose.pose.position.y, self.hover_target_pose.pose.position.z, + self.current_heading) + self.local_target_pub.publish(self.target_pose) + else: + self.gcs_cmd = self.last_gcs_cmd + self.form_flag = 0 + + rate.sleep() + + def formation_control(self): + print('formation control here') + neighbor_num = len(self.neighbor_id) + self.target_vel.twist.linear.x = 0 + self.target_vel.twist.linear.y = 0 + self.target_vel.twist.linear.z = 0 + self.target_vel.twist.angular.x = 0 + self.target_vel.twist.angular.y = 0 + self.target_vel.twist.angular.z = self.Kpw*(self.target_yaw-self.current_heading) + # print("neighbor_num",neighbor_num) + for i in range(neighbor_num): + self.target_vel.twist.linear.x += self.global_pose[self.neighbor_id[i]].pose.position.x - self.global_pose[self.uav_id].pose.position.x - \ + self.all_desired_position[self.neighbor_id[i]][0] + self.all_desired_position[self.uav_id][0] + self.target_vel.twist.linear.y += self.global_pose[self.neighbor_id[i]].pose.position.y - self.global_pose[self.uav_id].pose.position.y - \ + self.all_desired_position[self.neighbor_id[i]][1] + self.all_desired_position[self.uav_id][1] + self.target_vel.twist.linear.z += self.global_pose[self.neighbor_id[i]].pose.position.z - self.global_pose[self.uav_id].pose.position.z - \ + self.all_desired_position[self.neighbor_id[i]][2] + self.all_desired_position[self.uav_id][2] + + self.target_vel.twist.linear.x = self.limit(self.target_vel.twist.linear.x * self.Kpx, -self.velxy_max, self.velxy_max) + self.target_vel.twist.linear.y = self.limit(self.target_vel.twist.linear.y * self.Kpy, -self.velxy_max, self.velxy_max) + self.target_vel.twist.linear.z = self.limit(self.target_vel.twist.linear.z * self.Kpz, -self.velz_max, self.velz_max) + self.target_vel.twist.angular.z = self.limit(self.target_vel.twist.angular.z * self.Kpw, -self.w_max, self.w_max) + + def limit(self, data, min, max): + if data <= min: + data = min + elif data >= max: + data = max + return data + + def read_set_file(self,txt_id,txt_pos): + self.neighbor_id =[] + id_path='txt/'+txt_id+'.txt' + pos_path='txt/'+txt_pos+'.txt' + txt_uav_neighbor_num = np.loadtxt(id_path,dtype=int) + self.all_desired_position = np.loadtxt(pos_path) + for i in range(0, len(txt_uav_neighbor_num[:, 0])): + if txt_uav_neighbor_num[i, 0] == self.uav_id: + self.neighbor_id.append(txt_uav_neighbor_num[i, 1]) + print(self.neighbor_id) + + def construct_target(self, x, y, z, yaw): + target_raw_pose = PositionTarget() + target_raw_pose.header.stamp = rospy.Time.now() + + target_raw_pose.coordinate_frame = 7 + + target_raw_pose.position.x = x + target_raw_pose.position.y = y + target_raw_pose.position.z = z + target_raw_pose.yaw = yaw + + target_raw_pose.type_mask = PositionTarget.IGNORE_VX + PositionTarget.IGNORE_VY + PositionTarget.IGNORE_VZ \ + + PositionTarget.IGNORE_AFX + PositionTarget.IGNORE_AFY + PositionTarget.IGNORE_AFZ \ + + PositionTarget.IGNORE_YAW + PositionTarget.IGNORE_YAW_RATE \ + + PositionTarget.FORCE + return target_raw_pose + + ''' + Callback Function + ''' + def gcs_cmd_callback(self, msg): + self.gcs_cmd = msg.data + + def local_pose_callback(self, msg, i): + if i == uav_id: + self.local_pose = copy.deepcopy(msg) + if self.gcs_cmd != 'TAKEOFF': + self.takeoff_target_pose = copy.deepcopy(self.local_pose) + if self.gcs_cmd !='HOVER': + self.hover_target_pose = copy.deepcopy(self.local_pose) + self.global_pose[i] = copy.deepcopy(msg) + self.global_pose[i].pose.position.x += uav_bias[i][0] + self.global_pose[i].pose.position.y += uav_bias[i][1] + self.global_pose[i].pose.position.z += uav_bias[i][2] + # + # def local_vel_callback(self): + # + def mavros_state_callback(self, msg): + self.mavros_state = msg.mode + self.arm_state = msg.armed + + def imu_callback(self, msg): + self.imu = msg + self.current_heading = self.q2yaw(self.imu.orientation) + + def gps_callback(self, msg): + self.gps = msg + + ''' + return yaw from current IMU + ''' + def q2yaw(self, q): + if isinstance(q, Quaternion): + rotate_z_rad = q.yaw_pitch_roll[0] + else: + q_ = Quaternion(q.w, q.x, q.y, q.z) + rotate_z_rad = q_.yaw_pitch_roll[0] + + return rotate_z_rad + + def arm(self): + if self.armService(True): + return True + else: + print("Vehicle arming failed!") + return False + + def disarm(self): + if self.armService(False): + return True + else: + print("Vehicle disarming failed!") + return False + + def flight_mode_set(self, mode): + """ mode selectable + MANUAL, ACRO, ALTCTL, POSCTL, OFFBOARD, STABILIZED, RATTITUDE + AUTO.MISSION, AUTO.LOITER, AUTO.RTL, AUTO.LAND, AUTO.RTGS, AUTO.READY, AUTO.TAKEOFF + """ + if self.flightModeService(custom_mode=mode): + return True + else: + print(self.namespace + mode + "Failed") + + def takeoff_detection(self): + if self.local_pose.pose.position.z > 0.2 and self.arm_state: + return True + else: + return False + +if __name__ == '__main__': + px4controller = Px4Controller() + px4controller.working() diff --git a/contributer_demo/demo1/src/formation/script/fuzzy_pid.py b/contributer_demo/demo1/src/formation/script/fuzzy_pid.py new file mode 100644 index 0000000..f4e00ec --- /dev/null +++ b/contributer_demo/demo1/src/formation/script/fuzzy_pid.py @@ -0,0 +1,74 @@ +# -*- coding: UTF-8 -*- +""" +Fuzzy PID Controller + +* To control all UAV in Gazebo(simulation environment) using MPI + +Before running this code, you need to launch your simulation Environment and px4 via: +$ from fuzzy_pid import FuzzyPID() # 3 UAVs in simulation + +And then, you can run this code via: +$ mpiexec -n 3 python formation_sim.py # 3 UAVs in simulation +""" + +import math + +#fuzzy table +CIC_FUZZY_TABLE = [[0,1,2,3], + [1,2,3,4], + [3,4,4,5], + [5,5,6,6]] +# kp table +CIC_KP_TABLE = [0.5,0.6,0.8,0.9,1.0,1.1,1.2] + +class FuzzyPID(): + def __init__(self): + + self.fuzzy_table = CIC_FUZZY_TABLE + self.kp_table = CIC_KP_TABLE + self.ex_range = 5.0 + self.ey_range = 1.0 + + def get_kp(self, ex, ey): + vx = self.get_x_approximation(ex) + vy = self.get_x_approximation(ey) + vx1 = math.floor(vx) + vy1 = math.floor(vy) + vx2 = vx1 + 1 + vy2 = vy1 + 1 + if vx1 > 3: + vx1 = 3 + if vy1 > 3: + vy1 = 3 + if vx2 > 3: + vx2 = 3 + if vy2 > 3: + vy2 = 3 + X2Y = (self.fuzzy_table[vx1][vy2] - self.fuzzy_table[vx1][vy1]) * (vy - vy1) + self.fuzzy_table[vx1][vy1] + X1Y = (self.fuzzy_table[vx2][vy2] - self.fuzzy_table[vx2][vy1]) * (vy - vy1) + self.fuzzy_table[vx2][vy1] + Y2X = (self.fuzzy_table[vx2][vy1] - self.fuzzy_table[vx1][vy1]) * (vx - vx1) + self.fuzzy_table[vx1][vy1] + Y1X = (self.fuzzy_table[vx2][vy2] - self.fuzzy_table[vx1][vy2]) * (vx - vx1) + self.fuzzy_table[vx1][vy2] + kp_approximation = (X2Y + X1Y + Y2X + Y1X)/4.0 + kp1 = math.floor(kp_approximation) + kp2 = kp1 + 1 + if kp1 > 6: + kp1 = 6 + if kp2 > 6: + kp2 = 6 + return (self.kp_table[kp2]-self.kp_table[kp1])*(kp_approximation-kp1)+self.kp_table[kp1] + + def get_x_approximation(self, ex): + if ex < 0: + ex = -ex + return 3*ex/self.ex_range #divide into 3 parts + + def get_y_approximation(self, ey): + if ey < 0: + ey = -ey + return 3*ey/self.ey_range #divide into 3 parts + + +if __name__ == '__main__': + fuzzy_pid = FuzzyPID() + kp = fuzzy_pid.get_kp(10,50) + print(kp) \ No newline at end of file diff --git a/contributer_demo/demo1/src/formation/script/ga1.py b/contributer_demo/demo1/src/formation/script/ga1.py new file mode 100644 index 0000000..532d3a6 --- /dev/null +++ b/contributer_demo/demo1/src/formation/script/ga1.py @@ -0,0 +1,195 @@ +import numpy as np +import random +import time +import os + + +class GA1(): + def __init__(self, vehicle_num, vehicles_speed, target_num, targets, time_lim): + # vehicles_speed,targets in the type of narray + self.vehicle_num = vehicle_num + self.vehicles_speed = vehicles_speed + self.target_num = target_num + self.targets = targets + self.time_lim = time_lim + self.map = np.zeros(shape=(target_num+1, target_num+1), dtype=float) + self.pop_size = 50 + self.p_cross = 0.6 + self.p_mutate = 0.005 + for i in range(target_num+1): + self.map[i, i] = 0 + for j in range(i): + self.map[j, i] = self.map[i, j] = np.linalg.norm( + targets[i, :2]-targets[j, :2]) + self.pop = np.zeros( + shape=(self.pop_size, vehicle_num-1+target_num-1), dtype=np.int32) + self.ff = np.zeros(self.pop_size, dtype=float) + #use vihecle_num-1 numbers to cut the targets into pieces + #use target_num-1 numbers to code the queue of targets + #encoder() + for i in range(self.pop_size): + for j in range(vehicle_num-1): + self.pop[i, j] = random.randint(0, target_num) + for j in range(target_num-1): + self.pop[i, vehicle_num+j-1] \ + = random.randint(0, target_num-j-1) + self.ff[i] = self.fitness(self.pop[i, :]) + self.tmp_pop = np.array([]) + self.tmp_ff = np.array([]) + self.tmp_size = 0 + + def fitness(self, gene): + #to record the break point + ins = np.zeros(self.target_num+1, dtype=np.int32) + #to decode the queue of targets + seq = np.zeros(self.target_num, dtype=np.int32) + #ins[self.target_num] = 1 + for i in range(self.vehicle_num-1): + ins[gene[i]] += 1 + rest = np.array(range(1, self.target_num+1)) + for i in range(self.target_num-1): + seq[i] = rest[gene[i+self.vehicle_num-1]] + rest = np.delete(rest, gene[i+self.vehicle_num-1]) + seq[self.target_num-1] = rest[0] + vehicle_num_i = 0 # index of vehicle + pre = 0 # index of the last target + post = 0 # index of instant point + cost = 0 + reward = 0 + while vehicle_num_i < self.vehicle_num: + if ins[post] > 0: + vehicle_num_i += 1 + ins[post] -= 1 + pre = 0 + cost = 0 + else: + cost += self.targets[pre, 3] + time_cost = self.map[pre, seq[post]]/self.vehicles_speed[vehicle_num_i] + cost += time_cost + if cost < self.time_lim: + reward += self.targets[seq[post], 2] + pre = seq[post] + #print("seq[post]",pre) + post += 1 + if post > self.target_num-1: + break + return reward + + def selection(self): + roll = np.zeros(self.tmp_size, dtype=float) + roll[0] = self.tmp_ff[0] + for i in range(1, self.tmp_size): + roll[i] = roll[i-1]+self.tmp_ff[i] + for i in range(self.pop_size): + xx = random.uniform(0, roll[self.tmp_size-1]) + j = 0 + while xx > roll[j]: + j += 1 + self.pop[i, :] = self.tmp_pop[j, :] + self.ff[i] = self.tmp_ff[j] + + def crossover(self): + new_pop = [] + new_ff = [] + new_size = 0 + for i in range(0, self.pop_size, 2): + if random.random() < self.p_cross: + x1 = random.randint(0, self.vehicle_num-2) + x2 = random.randint(0, self.target_num-2)+self.vehicle_num + g1 = self.pop[i, :] + g2 = self.pop[i+1, :] + g1[x1:x2] = self.pop[i+1, x1:x2] + g2[x1:x2] = self.pop[i, x1:x2] + new_pop.append(g1) + new_pop.append(g2) + new_ff.append(self.fitness(g1)) + new_ff.append(self.fitness(g2)) + new_size += 2 + self.tmp_size = self.pop_size+new_size + self.tmp_pop = np.zeros( + shape=(self.tmp_size, self.vehicle_num-1+self.target_num-1), dtype=np.int32) + self.tmp_pop[0:self.pop_size, :] = self.pop + self.tmp_pop[self.pop_size:self.tmp_size, :] = np.array(new_pop) + self.tmp_ff = np.zeros(self.tmp_size, dtype=float) + self.tmp_ff[0:self.pop_size] = self.ff + self.tmp_ff[self.pop_size:self.tmp_size] = np.array(new_ff) + + def mutation(self): + for i in range(self.tmp_size): + flag = False + for j in range(self.vehicle_num-1): + if random.random() < self.p_mutate: + self.tmp_pop[i, j] = random.randint(0, self.target_num) + flag = True + for j in range(self.target_num-1): + if random.random() < self.p_mutate: + self.tmp_pop[i, self.vehicle_num+j-1 + ] = random.randint(0, self.target_num-j-1) + flag = True + if flag: + self.tmp_ff[i] = self.fitness(self.tmp_pop[i, :]) + + + + def run(self): + #print("GA start, pid: %s" % os.getpid()) + start_time = time.time() + gene = np.zeros( + shape=(1, self.vehicle_num+self.target_num-1), dtype=np.int32) + cut = 0 + count = 0 + + while count < 300: + self.crossover() + self.mutation() + self.selection() + new_cut = self.tmp_ff.max() + if cut < new_cut: + cut = new_cut + count = 0 + gene = self.tmp_pop[np.argmax(self.tmp_ff)] + else: + count += 1 + + ins = np.zeros(self.target_num + 1, dtype=np.int32) + seq = np.zeros(self.target_num, dtype=np.int32) + #ins[self.target_num] = 1 + for i in range(self.vehicle_num-1): + ins[gene[i]] += 1 + rest = np.array(range(1, self.target_num + 1)) + for i in range(self.target_num - 1): + seq[i] = rest[gene[i + self.vehicle_num-1]] + rest = np.delete(rest, gene[i + self.vehicle_num-1]) + seq[self.target_num - 1] = rest[0] + #print('sequence : ', seq) + #print('ins[]: ', ins) + task_assignment = [[] for i in range(self.vehicle_num)] + i = 0 # index of vehicle + pre = 0 # index of last target + post = 0 # index of instant point + t = 0 + reward = 0 + while i < self.vehicle_num: + if ins[post] > 0: + i += 1 + ins[post] -= 1 + pre = 0 + t = 0 + else: + t += self.targets[pre, 3] + past = self.map[pre, seq[post]] / self.vehicles_speed[i] + t += past + task_assignment[i].append(seq[post]) + if t < self.time_lim: + reward += self.targets[seq[post], 2] + pre = seq[post] + post += 1 + if post > self.target_num - 1: + break + self.reward = reward + print("GA result1:", task_assignment) + end_time = time.time() + print("GA time:", end_time - start_time) + print("total reward1:", reward) + return task_assignment, end_time - start_time + diff --git a/contributer_demo/demo1/src/formation/script/ga2.py b/contributer_demo/demo1/src/formation/script/ga2.py new file mode 100644 index 0000000..1e1f02e --- /dev/null +++ b/contributer_demo/demo1/src/formation/script/ga2.py @@ -0,0 +1,219 @@ +import numpy as np +import random +import time +import os + + +class GA2(): + def __init__(self, vehicle_num, vehicles_speed, target_num, targets, time_lim): + # vehicles_speed,targets in the type of narray + self.vehicle_num = vehicle_num + self.vehicles_speed = vehicles_speed + self.target_num = target_num + self.targets = targets + self.time_lim = time_lim + self.map = np.zeros(shape=(target_num+1, target_num+1), dtype=float) + self.pop_size = 50 + self.p_cross = 0 + self.p_cross1 = 0.9 + self.p_cross2 = 0.6 + self.p_mutate = 0 + self.p_mutate1 = 0.1 + self.p_mutate2 = 0.005 + self.average_ff = 0 + self.max_ff = 1 + for i in range(target_num+1): + self.map[i, i] = 0 + for j in range(i): + self.map[j, i] = self.map[i, j] = np.linalg.norm( + targets[i, :2]-targets[j, :2]) + self.pop = np.zeros( + shape=(self.pop_size, vehicle_num-1+target_num-1), dtype=np.int32) + self.ff = np.zeros(self.pop_size, dtype=float) + #use vihecle_num-1 numbers to cut the targets into pieces + #use target_num-1 numbers to code the queue of targets + #encoder() + for i in range(self.pop_size): + for j in range(vehicle_num-1): + self.pop[i, j] = random.randint(0, target_num) + for j in range(target_num-1): + self.pop[i, vehicle_num+j-1] \ + = random.randint(0, target_num-j-1) + self.ff[i] = self.fitness(self.pop[i, :]) + self.tmp_pop = np.array([]) + self.tmp_ff = np.array([]) + self.tmp_size = 0 + + def fitness(self, gene): + #to record the break point + ins = np.zeros(self.target_num+1, dtype=np.int32) + #to decode the queue of targets + seq = np.zeros(self.target_num, dtype=np.int32) + #ins[self.target_num] = 1 + for i in range(self.vehicle_num-1): + ins[gene[i]] += 1 + rest = np.array(range(1, self.target_num+1)) + for i in range(self.target_num-1): + seq[i] = rest[gene[i+self.vehicle_num-1]] + rest = np.delete(rest, gene[i+self.vehicle_num-1]) + seq[self.target_num-1] = rest[0] + vehicle_num_i = 0 # index of vehicle + pre = 0 # index of the last target + post = 0 # index of instant point + cost = 0 + reward = 0 + while vehicle_num_i < self.vehicle_num: + if ins[post] > 0: + vehicle_num_i += 1 + ins[post] -= 1 + pre = 0 + cost = 0 + else: + cost += self.targets[pre, 3] + time_cost = self.map[pre, seq[post]]/self.vehicles_speed[vehicle_num_i] + cost += time_cost + if cost < self.time_lim: + reward += self.targets[seq[post], 2] + pre = seq[post] + #print("seq[post]",pre) + post += 1 + if post > self.target_num-1: + break + return reward + + def selection(self): + roll = np.zeros(self.tmp_size, dtype=float) + roll[0] = self.tmp_ff[0] + for i in range(1, self.tmp_size): + roll[i] = roll[i-1]+self.tmp_ff[i] + for i in range(self.pop_size): + xx = random.uniform(0, roll[self.tmp_size-1]) + j = 0 + while xx > roll[j]: + j += 1 + self.pop[i, :] = self.tmp_pop[j, :] + self.ff[i] = self.tmp_ff[j] + # adaptive ag + self.average_ff = np.mean(self.ff) + self.max_ff = max(self.ff) + if self.ff[i] >= self.average_ff: + self.p_mutate = self.p_mutate1 - \ + (self.p_mutate1 - self.p_mutate2) * (self.max_ff - self.ff[i]) / ( + self.max_ff - self.average_ff) + else: + self.p_mutate = self.p_mutate1 + + def crossover(self): + new_pop = [] + new_ff = [] + new_size = 0 + ff_bigger = 0 + for i in range(0, self.pop_size, 2): + #adaptive ag + ff_bigger = max(self.ff[i], self.ff[i+1]) + if ff_bigger >= self.average_ff: + self.p_cross = self.p_cross1 -\ + (self.p_cross1-self.p_cross2)/(self.max_ff-self.average_ff) + else: + self.p_cross = self.p_cross1 + if random.random() < self.p_cross: + x1 = random.randint(0, self.vehicle_num-2) + x2 = random.randint(0, self.target_num-2)+self.vehicle_num + g1 = self.pop[i, :] + g2 = self.pop[i+1, :] + g1[x1:x2] = self.pop[i+1, x1:x2] + g2[x1:x2] = self.pop[i, x1:x2] + new_pop.append(g1) + new_pop.append(g2) + new_ff.append(self.fitness(g1)) + new_ff.append(self.fitness(g2)) + new_size += 2 + self.tmp_size = self.pop_size+new_size + self.tmp_pop = np.zeros( + shape=(self.tmp_size, self.vehicle_num-1+self.target_num-1), dtype=np.int32) + self.tmp_pop[0:self.pop_size, :] = self.pop + self.tmp_pop[self.pop_size:self.tmp_size, :] = np.array(new_pop) + self.tmp_ff = np.zeros(self.tmp_size, dtype=float) + self.tmp_ff[0:self.pop_size] = self.ff + self.tmp_ff[self.pop_size:self.tmp_size] = np.array(new_ff) + + + def mutation(self): + for i in range(self.tmp_size): + flag = False + for j in range(self.vehicle_num-1): + if random.random() < self.p_mutate: + self.tmp_pop[i, j] = random.randint(0, self.target_num) + flag = True + for j in range(self.target_num-1): + if random.random() < self.p_mutate: + self.tmp_pop[i, self.vehicle_num+j-1 + ] = random.randint(0, self.target_num-j-1) + flag = True + if flag: + self.tmp_ff[i] = self.fitness(self.tmp_pop[i, :]) + + + + def run(self): + #print("GA start, pid: %s" % os.getpid()) + start_time = time.time() + gene = np.zeros( + shape=(1, self.vehicle_num+self.target_num-1), dtype=np.int32) + cut = 0 + count = 0 + + while count < 300: + self.crossover() + self.mutation() + self.selection() + new_cut = self.tmp_ff.max() + if cut < new_cut: + cut = new_cut + count = 0 + gene = self.tmp_pop[np.argmax(self.tmp_ff)] + else: + count += 1 + + ins = np.zeros(self.target_num + 1, dtype=np.int32) + seq = np.zeros(self.target_num, dtype=np.int32) + #ins[self.target_num] = 1 + for i in range(self.vehicle_num-1): + ins[gene[i]] += 1 + rest = np.array(range(1, self.target_num + 1)) + for i in range(self.target_num - 1): + seq[i] = rest[gene[i + self.vehicle_num-1]] + rest = np.delete(rest, gene[i + self.vehicle_num-1]) + seq[self.target_num - 1] = rest[0] + #print('sequence : ', seq) + #print('ins[]: ', ins) + task_assignment = [[] for i in range(self.vehicle_num)] + i = 0 # index of vehicle + pre = 0 # index of last target + post = 0 # index of ins/seq + t = 0 + reward = 0 + while i < self.vehicle_num: + if ins[post] > 0: + i += 1 + ins[post] -= 1 + pre = 0 + t = 0 + else: + t += self.targets[pre, 3] + past = self.map[pre, seq[post]] / self.vehicles_speed[i] + t += past + task_assignment[i].append(seq[post]) + if t < self.time_lim: + reward += self.targets[seq[post], 2] + pre = seq[post] + post += 1 + if post > self.target_num - 1: + break + self.reward = reward + # print("GA result2:", task_assignment) + end_time = time.time() + # print("GA time:", end_time - start_time) + # print("total reward2:", reward) + return task_assignment, end_time - start_time + diff --git a/contributer_demo/demo1/src/formation/script/main.py b/contributer_demo/demo1/src/formation/script/main.py new file mode 100644 index 0000000..47eb121 --- /dev/null +++ b/contributer_demo/demo1/src/formation/script/main.py @@ -0,0 +1,33 @@ +from enviroment import Env +from ga1 import GA1 +import numpy as np +import matplotlib.pyplot as plt +from ga2 import GA2 +if __name__ == '__main__': + map_size_x = 80 + map_size_y = 80 + map_size = [map_size_x, map_size_y] + vehicle_num = 3 + target_num = 10 + for i in range(5): + env = Env(vehicle_num, target_num, map_size, True) + for j in range(10): + ga1 = GA1(vehicle_num, env.vehicles_speed, target_num, env.targets, env.time_limit) + ga2 = GA2(vehicle_num, env.vehicles_speed, target_num, env.targets, env.time_limit) + ga1_result = ga1.run() + #print("result:", ga1_result[0]) + ga2_result = ga2.run() + + env.run(ga1_result[0], 'GA', i, j) + env.run(ga2_result[0], 'adaptGA', i, j) + + + + + #f_cost = np.zeros(21, dtype=np.int32) + #for i in range(10, 210, 10): + # ga1.run(i) + # f_cost[i//10]=ga1.reward + #plt.plot(np.linspace(10, 200, 21),f_cost,'s-',color = 'r',label = 'iteration_influence') + #plt.savefig("iteration_influence") + #plt.show() diff --git a/contributer_demo/demo1/src/formation/script/txt/FORM_1_id.txt b/contributer_demo/demo1/src/formation/script/txt/FORM_1_id.txt new file mode 100644 index 0000000..27ccd34 --- /dev/null +++ b/contributer_demo/demo1/src/formation/script/txt/FORM_1_id.txt @@ -0,0 +1,2 @@ +1 0 +2 0 diff --git a/contributer_demo/demo1/src/formation/script/txt/FORM_1_pos.txt b/contributer_demo/demo1/src/formation/script/txt/FORM_1_pos.txt new file mode 100644 index 0000000..d5bf4cd --- /dev/null +++ b/contributer_demo/demo1/src/formation/script/txt/FORM_1_pos.txt @@ -0,0 +1,3 @@ +0 0 0 +-1 0 0 +1 0 0 diff --git a/contributer_demo/demo1/src/formation/script/txt/FORM_2_id.txt b/contributer_demo/demo1/src/formation/script/txt/FORM_2_id.txt new file mode 100644 index 0000000..133fec5 --- /dev/null +++ b/contributer_demo/demo1/src/formation/script/txt/FORM_2_id.txt @@ -0,0 +1,5 @@ +0 0 +1 0 +1 1 +2 0 +2 2 \ No newline at end of file diff --git a/contributer_demo/demo1/src/formation/script/txt/FORM_2_pos.txt b/contributer_demo/demo1/src/formation/script/txt/FORM_2_pos.txt new file mode 100644 index 0000000..650bcc3 --- /dev/null +++ b/contributer_demo/demo1/src/formation/script/txt/FORM_2_pos.txt @@ -0,0 +1,3 @@ +0 0 0 +-1 1 0 +1 1 0 diff --git a/contributer_demo/demo1/worlds/cic2021.world b/contributer_demo/demo1/worlds/cic2021.world new file mode 100644 index 0000000..980cd43 --- /dev/null +++ b/contributer_demo/demo1/worlds/cic2021.world @@ -0,0 +1,24399 @@ + + + + + 36.6648 -47.2414 134.625 0 1.27765 1.84097 + orbit + perspective + + + + 0 + 0 + 0.592 0.624 0.635 1 + + + 12 + + + 0.35 0.35 0.35 1 + 1 + + + + + quick + 10 + 1.3 + 0 + + + 0 + 0.2 + 100 + 0.001 + + + 0.004 + 1 + 250 + + + 0 0 1000 0 -0 0 + 1 + 0.8 0.8 0.8 1 + 0.5 0.5 0.5 1 + + 1000 + 0.9 + 0.01 + 0.001 + + -0.5 0.1 -0.4 + + + 1 + + + + + 0 0 1 + 100 100 + + + 10 + + + + + + + + + + + + + + 0 + 0 + 0 + + + + + walk.dae + 1 + + 0 0 0 0 -0 0 + + walk.dae + 1 + 1 + + + + 0 + 0 + + + + walk.dae + 1 1 1 + + + 0 0 0 0 -0 0 + + 0 + + + + walk.dae + 1 1 1 + + + 0 0 0 0 -0 0 + + + + + walk.dae + 1 1 1 + + + 0 0 0 0 -0 0 + + + + + walk.dae + 1 1 1 + + + 0 0 0 0 -0 0 + + + + + walk.dae + 1 1 1 + + + 0 0 0 0 -0 0 + + + + + walk.dae + 1 1 1 + + + 0 0 0 0 -0 0 + + + + 0 + 0 + 0 0 0 0 -0 0 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 0 0 1 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 0.68846 -2.58604 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.097562 -0.10951 -1.5708 -0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.08995 -0.545594 -1.5708 -0.018883 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.081529 -0.991485 -2.86201 -0.004819 1.5644 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.177238 0.080868 -1.02931 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 -0.662808 -0.520328 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.092565 -0.10951 -1.5708 0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.084856 -0.551146 -1.5708 0.018902 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.076537 -0.991221 -2.81408 0.005615 1.57863 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.183038 -0.075721 -1.03795 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 1.76781 -0.000162 1.57081 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.026286 -2.1e-05 0.131687 1.55532 0.026085 1.57059 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.55532 0.001964 1.57097 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.70269 0.004587 1.57496 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.039239 0.004029 0.377767 1.41714 -0.001065 1.57666 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.025197 0.00385 0.468437 1.50823 -4.5e-05 1.57161 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 0.861273 1.26292 1.04166 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018043 0.207494 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.526986 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.792381 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.018043 0.759572 0.313829 -3.14159 0.785398 2.35619 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.17558 -1.21236 1.84664 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.18715 0.330499 0.040063 -1.57079 3.10153 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.51551 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.795053 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 3.14159 -0.785398 0.785398 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 0 -0 0 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 0 0 1 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 0.68846 -2.58604 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.097562 -0.10951 -1.5708 -0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.08995 -0.545594 -1.5708 -0.018883 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.081529 -0.991485 -2.86201 -0.004819 1.5644 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.177238 0.080868 -1.02931 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 -0.662808 -0.520328 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.092565 -0.10951 -1.5708 0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.084856 -0.551146 -1.5708 0.018902 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.076537 -0.991221 -2.81408 0.005615 1.57863 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.183038 -0.075721 -1.03795 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 1.76781 -0.000162 1.57081 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.026286 -2.1e-05 0.131687 1.55532 0.026085 1.57059 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.55532 0.001964 1.57097 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.70269 0.004587 1.57496 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.039239 0.004029 0.377767 1.41714 -0.001065 1.57666 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.025197 0.00385 0.468437 1.50823 -4.5e-05 1.57161 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 0.861273 1.26292 1.04166 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018043 0.207494 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.526986 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.792381 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.018043 0.759572 0.313829 -3.14159 0.785398 2.35619 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.17558 -1.21236 1.84664 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.18715 0.330499 0.040063 -1.57079 3.10153 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.51551 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.795053 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 3.14159 -0.785398 0.785398 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 0 -0 0 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 0 0 1 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 0.68846 -2.58604 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.097562 -0.10951 -1.5708 -0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.08995 -0.545594 -1.5708 -0.018883 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.081529 -0.991485 -2.86201 -0.004819 1.5644 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.177238 0.080868 -1.02931 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 -0.662808 -0.520328 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.092565 -0.10951 -1.5708 0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.084856 -0.551146 -1.5708 0.018902 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.076537 -0.991221 -2.81408 0.005615 1.57863 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.183038 -0.075721 -1.03795 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 1.76781 -0.000162 1.57081 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.026286 -2.1e-05 0.131687 1.55532 0.026085 1.57059 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.55532 0.001964 1.57097 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.70269 0.004587 1.57496 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.039239 0.004029 0.377767 1.41714 -0.001065 1.57666 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.025197 0.00385 0.468437 1.50823 -4.5e-05 1.57161 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 0.861273 1.26292 1.04166 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018043 0.207494 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.526986 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.792381 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.018043 0.759572 0.313829 -3.14159 0.785398 2.35619 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.17558 -1.21236 1.84664 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.18715 0.330499 0.040063 -1.57079 3.10153 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.51551 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.795053 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 3.14159 -0.785398 0.785398 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 0 -0 0 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 0 0 1 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 0.68846 -2.58604 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.097562 -0.10951 -1.5708 -0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.08995 -0.545594 -1.5708 -0.018883 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.081529 -0.991485 -2.86201 -0.004819 1.5644 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.177238 0.080868 -1.02931 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 -0.662808 -0.520328 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.092565 -0.10951 -1.5708 0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.084856 -0.551146 -1.5708 0.018902 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.076537 -0.991221 -2.81408 0.005615 1.57863 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.183038 -0.075721 -1.03795 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 1.76781 -0.000162 1.57081 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.026286 -2.1e-05 0.131687 1.55532 0.026085 1.57059 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.55532 0.001964 1.57097 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.70269 0.004587 1.57496 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.039239 0.004029 0.377767 1.41714 -0.001065 1.57666 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.025197 0.00385 0.468437 1.50823 -4.5e-05 1.57161 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 0.861273 1.26292 1.04166 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018043 0.207494 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.526986 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.792381 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.018043 0.759572 0.313829 -3.14159 0.785398 2.35619 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.17558 -1.21236 1.84664 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.18715 0.330499 0.040063 -1.57079 3.10153 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.51551 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.795053 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 3.14159 -0.785398 0.785398 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 0 -0 0 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 0 0 1 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 0.68846 -2.58604 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.097562 -0.10951 -1.5708 -0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.08995 -0.545594 -1.5708 -0.018883 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.081529 -0.991485 -2.86201 -0.004819 1.5644 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.177238 0.080868 -1.02931 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 -0.662808 -0.520328 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.092565 -0.10951 -1.5708 0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.084856 -0.551146 -1.5708 0.018902 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.076537 -0.991221 -2.81408 0.005615 1.57863 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.183038 -0.075721 -1.03795 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 1.76781 -0.000162 1.57081 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.026286 -2.1e-05 0.131687 1.55532 0.026085 1.57059 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.55532 0.001964 1.57097 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.70269 0.004587 1.57496 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.039239 0.004029 0.377767 1.41714 -0.001065 1.57666 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.025197 0.00385 0.468437 1.50823 -4.5e-05 1.57161 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 0.861273 1.26292 1.04166 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018043 0.207494 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.526986 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.792381 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.018043 0.759572 0.313829 -3.14159 0.785398 2.35619 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.17558 -1.21236 1.84664 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.18715 0.330499 0.040063 -1.57079 3.10153 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.51551 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.795053 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 3.14159 -0.785398 0.785398 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 0 -0 0 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 0 0 1 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 0.68846 -2.58604 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.153556 + + + -0 0.076778 0 -1.5708 -0.436252 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.097562 -0.10951 -1.5708 -0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.43615 + + + -0 0.218075 -0 1.5708 -3e-06 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.08995 -0.545594 -1.5708 -0.018883 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.445971 + + + 0 0.222985 -0 1.5708 -2e-06 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 0.081529 -0.991485 -2.86201 -0.004819 1.5644 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.137078 + + + 0 0.068539 -0 1.57112 -1.56578 3.14127 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.177238 0.080868 -1.02931 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 -1.96446 -0.662808 -0.520328 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.150431 + + + 0 0.075216 0 1.5708 -0.456725 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.092565 -0.10951 -1.5708 0.017454 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.441703 + + + -0 0.220852 0 -1.5708 -2e-05 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.084856 -0.551146 -1.5708 0.018902 -1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.440154 + + + -0 0.220077 -0 -1.5708 -2.9e-05 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.045484 -0.076537 -0.991221 -2.81408 0.005615 1.57863 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.145278 + + + -0 0.072639 -0 -1.57103 -1.56487 0.000233 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.183038 -0.075721 -1.03795 3.14159 -0 1.5708 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0 0 0 1.76781 -0.000162 1.57081 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.134285 + + + 0 0.067142 0 1.5705 -1.56997 -3.14129 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.026286 -2.1e-05 0.131687 1.55532 0.026085 1.57059 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.132976 + + + -0 0.066488 -0 -1.5708 0.535365 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.55532 0.001964 1.57097 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.70269 0.004587 1.57496 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.114158 + + + 0 0.057079 -0 -1.57081 -1.53593 9e-06 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.039239 0.004029 0.377767 1.41714 -0.001065 1.57666 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.091751 + + + -0 0.045875 0 1.57073 1.56383 3.14153 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + 0.025197 0.00385 0.468437 1.50823 -4.5e-05 1.57161 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 0.861273 1.26292 1.04166 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.214115 + + + -0 0.107058 0 -1.5708 0.204274 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018043 0.207494 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.319492 + + + -0 0.159746 0 -1.5708 -0 0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.526986 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.232586 + + + 0 0.116293 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.018042 0.759572 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.032808 + + + 0 0.016404 -0 -1.5708 -0 -0 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.018042 0.792381 0.313829 3e-06 1.57079 3e-06 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.018043 0.759572 0.313829 -3.14159 0.785398 2.35619 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + 0.024228 0.003447 0.264602 1.17558 -1.21236 1.84664 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.203532 + + + 0 0.101766 0 1.5708 0.143241 -3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.18715 0.330499 0.040063 -1.57079 3.10153 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.32836 + + + -0 0.16418 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.51551 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.233209 + + + 0 0.116605 -0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 0 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + + + 0 1 0 1 + + + + + + 0.02 0.02 0.046334 + + + -0 0.023167 0 1.5708 -0 3.14159 + 10 + + + + + + + + + + + + + + 0 + + + 0 + 0 + -0.003261 -0.795053 0.330499 0.042483 -1.57079 3.09911 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + 0 + 0 + -0.003261 -0.748719 0.330499 3.14159 -0.785398 0.785398 + + 0 0 0 0 -0 0 + 1 + + 4e-05 + 0 + 0 + 4e-05 + 0 + 4e-05 + + + + + + 0.02 + + + 0 0 0 0 -0 0 + + + 1 1 0 1 + + + 0 + + + + 1 + + 0 0 -5 0 -0 0 + + + + 0 0 1 + 500 500 + + + 10 + + + + + + + + + + + + + + + + + 0 + + model://ocean/materials/textures/soil_sand_0045_01.jpg + file://media/materials/textures/flat_normal.png + 10 + + + 0 + 1.5 + + + model://ocean/materials/textures/soil_sand_0045_01.jpg + file://media/materials/textures/flat_normal.png + 10 + + + 2.5 + 5 + + + model://city_terrain/materials/textures/forest.jpg + file://media/materials/textures/flat_normal.png + 10 + + model://city_terrain/materials/textures/city_terrain.jpg + 500 500 75 + 40 -20 -5 + + + + 0 + 0 + 0 + + 0 0 0 0 -0 0 + + + 1 + + + 0 0 0 0 -0 0 + + + model://ocean/mesh.dae + 0.5 0.5 0.5 + + + + + + + + 0 0 0 0 -0 0 + + + model://ocean/mesh_below.dae + 0.5 0.5 0.5 + + + + + + + + 250 0 -3.5 3.14159 -1.57079 3.14159 + + + 0 0 1 + 7 500 + + + + + + + + -250 0 -3.5 3.14159 1.57079 3.14159 + + + 0 0 1 + 7 500 + + + + + + + + 0 250 -3.5 1.5708 -0 0 + + + 0 0 1 + 500 7 + + + + + + + + 0 -250 -3.5 -1.5708 0 0 + + + 0 0 1 + 500 7 + + + + + + + 0 + 0 + 0 + + 40 -20 -2 0 -0 0 + + + 7.4 + -45 -48.7 0.01 + -45 49.2 0.01 + + + 7.4 + -15 -48.7 0.01 + -15 49.2 0.01 + + + + + + 7.4 + 45 -48.7 0.01 + 45 49.2 0.01 + + + + + + 7.4 + 110 -48.7 0.01 + 110 49.2 0.01 + + + + + + 7.4 + 120 -48.7 0.01 + 120 49.2 0.01 + + + 8.4 + -41.3 -45 0.015 + 116.3 -45 0.015 + + + 8.4 + -41.3 0 0.015 + 116.3 0 0.015 + + + + + + 8.4 + -41.3 45 0.015 + 116.3 45 0.015 + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -41.3 -40.8 + -41.2755 -40.9545 + -41.2045 -41.0939 + -41.0939 -41.2045 + -40.9545 -41.2755 + -40.8 -41.3 + -19.2 -41.3 + -19.0455 -41.2755 + -18.9061 -41.2045 + -18.7955 -41.0939 + -18.7245 -40.9545 + -18.7 -40.8 + -18.7 -38.8 + -18.7245 -38.6455 + -18.7955 -38.5061 + -18.9061 -38.3955 + -19.0455 -38.3245 + -19.2 -38.3 + -40.8 -38.3 + -40.9545 -38.3245 + -41.0939 -38.3955 + -41.2045 -38.5061 + -41.2755 -38.6455 + -41.3 -38.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -41.3 -6.2 + -41.2755 -6.35451 + -41.2045 -6.49389 + -41.0939 -6.60451 + -40.9545 -6.67553 + -40.8 -6.7 + -19.2 -6.7 + -19.0455 -6.67553 + -18.9061 -6.60451 + -18.7955 -6.49389 + -18.7245 -6.35451 + -18.7 -6.2 + -18.7 -4.2 + -18.7245 -4.04549 + -18.7955 -3.90611 + -18.9061 -3.79549 + -19.0455 -3.72447 + -19.2 -3.7 + -40.8 -3.7 + -40.9545 -3.72447 + -41.0939 -3.79549 + -41.2045 -3.90611 + -41.2755 -4.04549 + -41.3 -4.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -41.3 -40.8 + -41.2755 -40.9545 + -41.2045 -41.0939 + -41.0939 -41.2045 + -40.9545 -41.2755 + -40.8 -41.3 + -38.8 -41.3 + -38.6455 -41.2755 + -38.5061 -41.2045 + -38.3955 -41.0939 + -38.3245 -40.9545 + -38.3 -40.8 + -38.3 -4.2 + -38.3245 -4.04549 + -38.3955 -3.90611 + -38.5061 -3.79549 + -38.6455 -3.72447 + -38.8 -3.7 + -40.8 -3.7 + -40.9545 -3.72447 + -41.0939 -3.79549 + -41.2045 -3.90611 + -41.2755 -4.04549 + -41.3 -4.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -21.7 -40.8 + -21.6755 -40.9545 + -21.6045 -41.0939 + -21.4939 -41.2045 + -21.3545 -41.2755 + -21.2 -41.3 + -19.2 -41.3 + -19.0455 -41.2755 + -18.9061 -41.2045 + -18.7955 -41.0939 + -18.7245 -40.9545 + -18.7 -40.8 + -18.7 -4.2 + -18.7245 -4.04549 + -18.7955 -3.90611 + -18.9061 -3.79549 + -19.0455 -3.72447 + -19.2 -3.7 + -21.2 -3.7 + -21.3545 -3.72447 + -21.4939 -3.79549 + -21.6045 -3.90611 + -21.6755 -4.04549 + -21.7 -4.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -41.3 4.2 + -41.2755 4.04549 + -41.2045 3.90611 + -41.0939 3.79549 + -40.9545 3.72447 + -40.8 3.7 + -19.2 3.7 + -19.0455 3.72447 + -18.9061 3.79549 + -18.7955 3.90611 + -18.7245 4.04549 + -18.7 4.2 + -18.7 6.2 + -18.7245 6.35451 + -18.7955 6.49389 + -18.9061 6.60451 + -19.0455 6.67553 + -19.2 6.7 + -40.8 6.7 + -40.9545 6.67553 + -41.0939 6.60451 + -41.2045 6.49389 + -41.2755 6.35451 + -41.3 6.2 + + + + 0.2 0.2 0.2 1 + + + + + + 0.15 + -41.3 4.2 + -41.2755 4.04549 + -41.2045 3.90611 + -41.0939 3.79549 + -40.9545 3.72447 + -40.8 3.7 + -19.2 3.7 + -19.0455 3.72447 + -18.9061 3.79549 + -18.7955 3.90611 + -18.7245 4.04549 + -18.7 4.2 + -18.7 6.2 + -18.7245 6.35451 + -18.7955 6.49389 + -18.9061 6.60451 + -19.0455 6.67553 + -19.2 6.7 + -40.8 6.7 + -40.9545 6.67553 + -41.0939 6.60451 + -41.2045 6.49389 + -41.2755 6.35451 + -41.3 6.2 + + + 10 + + + + + + + + + + + + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -41.3 38.8 + -41.2755 38.6455 + -41.2045 38.5061 + -41.0939 38.3955 + -40.9545 38.3245 + -40.8 38.3 + -19.2 38.3 + -19.0455 38.3245 + -18.9061 38.3955 + -18.7955 38.5061 + -18.7245 38.6455 + -18.7 38.8 + -18.7 40.8 + -18.7245 40.9545 + -18.7955 41.0939 + -18.9061 41.2045 + -19.0455 41.2755 + -19.2 41.3 + -40.8 41.3 + -40.9545 41.2755 + -41.0939 41.2045 + -41.2045 41.0939 + -41.2755 40.9545 + -41.3 40.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -41.3 4.2 + -41.2755 4.04549 + -41.2045 3.90611 + -41.0939 3.79549 + -40.9545 3.72447 + -40.8 3.7 + -38.8 3.7 + -38.6455 3.72447 + -38.5061 3.79549 + -38.3955 3.90611 + -38.3245 4.04549 + -38.3 4.2 + -38.3 40.8 + -38.3245 40.9545 + -38.3955 41.0939 + -38.5061 41.2045 + -38.6455 41.2755 + -38.8 41.3 + -40.8 41.3 + -40.9545 41.2755 + -41.0939 41.2045 + -41.2045 41.0939 + -41.2755 40.9545 + -41.3 40.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -21.7 4.2 + -21.6755 4.04549 + -21.6045 3.90611 + -21.4939 3.79549 + -21.3545 3.72447 + -21.2 3.7 + -19.2 3.7 + -19.0455 3.72447 + -18.9061 3.79549 + -18.7955 3.90611 + -18.7245 4.04549 + -18.7 4.2 + -18.7 40.8 + -18.7245 40.9545 + -18.7955 41.0939 + -18.9061 41.2045 + -19.0455 41.2755 + -19.2 41.3 + -21.2 41.3 + -21.3545 41.2755 + -21.4939 41.2045 + -21.6045 41.0939 + -21.6755 40.9545 + -21.7 40.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -11.3 -40.8 + -11.2755 -40.9545 + -11.2045 -41.0939 + -11.0939 -41.2045 + -10.9545 -41.2755 + -10.8 -41.3 + 40.8 -41.3 + 40.9545 -41.2755 + 41.0939 -41.2045 + 41.2045 -41.0939 + 41.2755 -40.9545 + 41.3 -40.8 + 41.3 -38.8 + 41.2755 -38.6455 + 41.2045 -38.5061 + 41.0939 -38.3955 + 40.9545 -38.3245 + 40.8 -38.3 + -10.8 -38.3 + -10.9545 -38.3245 + -11.0939 -38.3955 + -11.2045 -38.5061 + -11.2755 -38.6455 + -11.3 -38.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -11.3 -6.2 + -11.2755 -6.35451 + -11.2045 -6.49389 + -11.0939 -6.60451 + -10.9545 -6.67553 + -10.8 -6.7 + 40.8 -6.7 + 40.9545 -6.67553 + 41.0939 -6.60451 + 41.2045 -6.49389 + 41.2755 -6.35451 + 41.3 -6.2 + 41.3 -4.2 + 41.2755 -4.04549 + 41.2045 -3.90611 + 41.0939 -3.79549 + 40.9545 -3.72447 + 40.8 -3.7 + -10.8 -3.7 + -10.9545 -3.72447 + -11.0939 -3.79549 + -11.2045 -3.90611 + -11.2755 -4.04549 + -11.3 -4.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -11.3 -40.8 + -11.2755 -40.9545 + -11.2045 -41.0939 + -11.0939 -41.2045 + -10.9545 -41.2755 + -10.8 -41.3 + -8.8 -41.3 + -8.64549 -41.2755 + -8.50611 -41.2045 + -8.39549 -41.0939 + -8.32447 -40.9545 + -8.3 -40.8 + -8.3 -16.5 + -8.32447 -16.3455 + -8.39549 -16.2061 + -8.50611 -16.0955 + -8.64549 -16.0245 + -8.8 -16 + -10.8 -16 + -10.9545 -16.0245 + -11.0939 -16.0955 + -11.2045 -16.2061 + -11.2755 -16.3455 + -11.3 -16.5 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -11.3 -9.5 + -11.2755 -9.65451 + -11.2045 -9.79389 + -11.0939 -9.90451 + -10.9545 -9.97553 + -10.8 -10 + -8.8 -10 + -8.64549 -9.97553 + -8.50611 -9.90451 + -8.39549 -9.79389 + -8.32447 -9.65451 + -8.3 -9.5 + -8.3 -4.2 + -8.32447 -4.04549 + -8.39549 -3.90611 + -8.50611 -3.79549 + -8.64549 -3.72447 + -8.8 -3.7 + -10.8 -3.7 + -10.9545 -3.72447 + -11.0939 -3.79549 + -11.2045 -3.90611 + -11.2755 -4.04549 + -11.3 -4.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 38.3 -40.8 + 38.3245 -40.9545 + 38.3955 -41.0939 + 38.5061 -41.2045 + 38.6455 -41.2755 + 38.8 -41.3 + 40.8 -41.3 + 40.9545 -41.2755 + 41.0939 -41.2045 + 41.2045 -41.0939 + 41.2755 -40.9545 + 41.3 -40.8 + 41.3 -4.2 + 41.2755 -4.04549 + 41.2045 -3.90611 + 41.0939 -3.79549 + 40.9545 -3.72447 + 40.8 -3.7 + 38.8 -3.7 + 38.6455 -3.72447 + 38.5061 -3.79549 + 38.3955 -3.90611 + 38.3245 -4.04549 + 38.3 -4.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -11.3 4.2 + -11.2755 4.04549 + -11.2045 3.90611 + -11.0939 3.79549 + -10.9545 3.72447 + -10.8 3.7 + 40.8 3.7 + 40.9545 3.72447 + 41.0939 3.79549 + 41.2045 3.90611 + 41.2755 4.04549 + 41.3 4.2 + 41.3 6.2 + 41.2755 6.35451 + 41.2045 6.49389 + 41.0939 6.60451 + 40.9545 6.67553 + 40.8 6.7 + -10.8 6.7 + -10.9545 6.67553 + -11.0939 6.60451 + -11.2045 6.49389 + -11.2755 6.35451 + -11.3 6.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -11.3 38.8 + -11.2755 38.6455 + -11.2045 38.5061 + -11.0939 38.3955 + -10.9545 38.3245 + -10.8 38.3 + 40.8 38.3 + 40.9545 38.3245 + 41.0939 38.3955 + 41.2045 38.5061 + 41.2755 38.6455 + 41.3 38.8 + 41.3 40.8 + 41.2755 40.9545 + 41.2045 41.0939 + 41.0939 41.2045 + 40.9545 41.2755 + 40.8 41.3 + -10.8 41.3 + -10.9545 41.2755 + -11.0939 41.2045 + -11.2045 41.0939 + -11.2755 40.9545 + -11.3 40.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -11.3 4.2 + -11.2755 4.04549 + -11.2045 3.90611 + -11.0939 3.79549 + -10.9545 3.72447 + -10.8 3.7 + -8.8 3.7 + -8.64549 3.72447 + -8.50611 3.79549 + -8.39549 3.90611 + -8.32447 4.04549 + -8.3 4.2 + -8.3 40.8 + -8.32447 40.9545 + -8.39549 41.0939 + -8.50611 41.2045 + -8.64549 41.2755 + -8.8 41.3 + -10.8 41.3 + -10.9545 41.2755 + -11.0939 41.2045 + -11.2045 41.0939 + -11.2755 40.9545 + -11.3 40.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 38.3 4.2 + 38.3245 4.04549 + 38.3955 3.90611 + 38.5061 3.79549 + 38.6455 3.72447 + 38.8 3.7 + 40.8 3.7 + 40.9545 3.72447 + 41.0939 3.79549 + 41.2045 3.90611 + 41.2755 4.04549 + 41.3 4.2 + 41.3 40.8 + 41.2755 40.9545 + 41.2045 41.0939 + 41.0939 41.2045 + 40.9545 41.2755 + 40.8 41.3 + 38.8 41.3 + 38.6455 41.2755 + 38.5061 41.2045 + 38.3955 41.0939 + 38.3245 40.9545 + 38.3 40.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 48.7 -40.8 + 48.7245 -40.9545 + 48.7955 -41.0939 + 48.9061 -41.2045 + 49.0455 -41.2755 + 49.2 -41.3 + 105.8 -41.3 + 105.955 -41.2755 + 106.094 -41.2045 + 106.205 -41.0939 + 106.276 -40.9545 + 106.3 -40.8 + 106.3 -38.8 + 106.276 -38.6455 + 106.205 -38.5061 + 106.094 -38.3955 + 105.955 -38.3245 + 105.8 -38.3 + 49.2 -38.3 + 49.0455 -38.3245 + 48.9061 -38.3955 + 48.7955 -38.5061 + 48.7245 -38.6455 + 48.7 -38.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 48.7 -6.2 + 48.7245 -6.35451 + 48.7955 -6.49389 + 48.9061 -6.60451 + 49.0455 -6.67553 + 49.2 -6.7 + 84.5 -6.7 + 84.6545 -6.67553 + 84.7939 -6.60451 + 84.9045 -6.49389 + 84.9755 -6.35451 + 85 -6.2 + 85 -4.2 + 84.9755 -4.04549 + 84.9045 -3.90611 + 84.7939 -3.79549 + 84.6545 -3.72447 + 84.5 -3.7 + 49.2 -3.7 + 49.0455 -3.72447 + 48.9061 -3.79549 + 48.7955 -3.90611 + 48.7245 -4.04549 + 48.7 -4.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 95 -6.2 + 95.0245 -6.35451 + 95.0955 -6.49389 + 95.2061 -6.60451 + 95.3455 -6.67553 + 95.5 -6.7 + 105.8 -6.7 + 105.955 -6.67553 + 106.094 -6.60451 + 106.205 -6.49389 + 106.276 -6.35451 + 106.3 -6.2 + 106.3 -4.2 + 106.276 -4.04549 + 106.205 -3.90611 + 106.094 -3.79549 + 105.955 -3.72447 + 105.8 -3.7 + 95.5 -3.7 + 95.3455 -3.72447 + 95.2061 -3.79549 + 95.0955 -3.90611 + 95.0245 -4.04549 + 95 -4.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 48.7 -40.8 + 48.7245 -40.9545 + 48.7955 -41.0939 + 48.9061 -41.2045 + 49.0455 -41.2755 + 49.2 -41.3 + 51.2 -41.3 + 51.3545 -41.2755 + 51.4939 -41.2045 + 51.6045 -41.0939 + 51.6755 -40.9545 + 51.7 -40.8 + 51.7 -4.2 + 51.6755 -4.04549 + 51.6045 -3.90611 + 51.4939 -3.79549 + 51.3545 -3.72447 + 51.2 -3.7 + 49.2 -3.7 + 49.0455 -3.72447 + 48.9061 -3.79549 + 48.7955 -3.90611 + 48.7245 -4.04549 + 48.7 -4.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 103.3 -40.8 + 103.324 -40.9545 + 103.395 -41.0939 + 103.506 -41.2045 + 103.645 -41.2755 + 103.8 -41.3 + 105.8 -41.3 + 105.955 -41.2755 + 106.094 -41.2045 + 106.205 -41.0939 + 106.276 -40.9545 + 106.3 -40.8 + 106.3 -4.2 + 106.276 -4.04549 + 106.205 -3.90611 + 106.094 -3.79549 + 105.955 -3.72447 + 105.8 -3.7 + 103.8 -3.7 + 103.645 -3.72447 + 103.506 -3.79549 + 103.395 -3.90611 + 103.324 -4.04549 + 103.3 -4.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 48.7 4.2 + 48.7245 4.04549 + 48.7955 3.90611 + 48.9061 3.79549 + 49.0455 3.72447 + 49.2 3.7 + 105.8 3.7 + 105.955 3.72447 + 106.094 3.79549 + 106.205 3.90611 + 106.276 4.04549 + 106.3 4.2 + 106.3 6.2 + 106.276 6.35451 + 106.205 6.49389 + 106.094 6.60451 + 105.955 6.67553 + 105.8 6.7 + 49.2 6.7 + 49.0455 6.67553 + 48.9061 6.60451 + 48.7955 6.49389 + 48.7245 6.35451 + 48.7 6.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 48.7 38.8 + 48.7245 38.6455 + 48.7955 38.5061 + 48.9061 38.3955 + 49.0455 38.3245 + 49.2 38.3 + 105.8 38.3 + 105.955 38.3245 + 106.094 38.3955 + 106.205 38.5061 + 106.276 38.6455 + 106.3 38.8 + 106.3 40.8 + 106.276 40.9545 + 106.205 41.0939 + 106.094 41.2045 + 105.955 41.2755 + 105.8 41.3 + 49.2 41.3 + 49.0455 41.2755 + 48.9061 41.2045 + 48.7955 41.0939 + 48.7245 40.9545 + 48.7 40.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 48.7 4.2 + 48.7245 4.04549 + 48.7955 3.90611 + 48.9061 3.79549 + 49.0455 3.72447 + 49.2 3.7 + 51.2 3.7 + 51.3545 3.72447 + 51.4939 3.79549 + 51.6045 3.90611 + 51.6755 4.04549 + 51.7 4.2 + 51.7 40.8 + 51.6755 40.9545 + 51.6045 41.0939 + 51.4939 41.2045 + 51.3545 41.2755 + 51.2 41.3 + 49.2 41.3 + 49.0455 41.2755 + 48.9061 41.2045 + 48.7955 41.0939 + 48.7245 40.9545 + 48.7 40.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 103.3 4.2 + 103.324 4.04549 + 103.395 3.90611 + 103.506 3.79549 + 103.645 3.72447 + 103.8 3.7 + 105.8 3.7 + 105.955 3.72447 + 106.094 3.79549 + 106.205 3.90611 + 106.276 4.04549 + 106.3 4.2 + 106.3 40.8 + 106.276 40.9545 + 106.205 41.0939 + 106.094 41.2045 + 105.955 41.2755 + 105.8 41.3 + 103.8 41.3 + 103.645 41.2755 + 103.506 41.2045 + 103.395 41.0939 + 103.324 40.9545 + 103.3 40.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 113.7 -41.2 + 113.705 -41.2309 + 113.719 -41.2588 + 113.741 -41.2809 + 113.769 -41.2951 + 113.8 -41.3 + 116.2 -41.3 + 116.231 -41.2951 + 116.259 -41.2809 + 116.281 -41.2588 + 116.295 -41.2309 + 116.3 -41.2 + 116.3 -40.9 + 116.295 -40.8691 + 116.281 -40.8412 + 116.259 -40.8191 + 116.231 -40.8049 + 116.2 -40.8 + 113.8 -40.8 + 113.769 -40.8049 + 113.741 -40.8191 + 113.719 -40.8412 + 113.705 -40.8691 + 113.7 -40.9 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 113.7 -4.1 + 113.705 -4.1309 + 113.719 -4.15878 + 113.741 -4.1809 + 113.769 -4.19511 + 113.8 -4.2 + 116.2 -4.2 + 116.231 -4.19511 + 116.259 -4.1809 + 116.281 -4.15878 + 116.295 -4.1309 + 116.3 -4.1 + 116.3 -3.8 + 116.295 -3.7691 + 116.281 -3.74122 + 116.259 -3.7191 + 116.231 -3.70489 + 116.2 -3.7 + 113.8 -3.7 + 113.769 -3.70489 + 113.741 -3.7191 + 113.719 -3.74122 + 113.705 -3.7691 + 113.7 -3.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 113.7 -41.2 + 113.705 -41.2309 + 113.719 -41.2588 + 113.741 -41.2809 + 113.769 -41.2951 + 113.8 -41.3 + 114.1 -41.3 + 114.131 -41.2951 + 114.159 -41.2809 + 114.181 -41.2588 + 114.195 -41.2309 + 114.2 -41.2 + 114.2 -3.8 + 114.195 -3.7691 + 114.181 -3.74122 + 114.159 -3.7191 + 114.131 -3.70489 + 114.1 -3.7 + 113.8 -3.7 + 113.769 -3.70489 + 113.741 -3.7191 + 113.719 -3.74122 + 113.705 -3.7691 + 113.7 -3.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 115.8 -41.2 + 115.805 -41.2309 + 115.819 -41.2588 + 115.841 -41.2809 + 115.869 -41.2951 + 115.9 -41.3 + 116.2 -41.3 + 116.231 -41.2951 + 116.259 -41.2809 + 116.281 -41.2588 + 116.295 -41.2309 + 116.3 -41.2 + 116.3 -3.8 + 116.295 -3.7691 + 116.281 -3.74122 + 116.259 -3.7191 + 116.231 -3.70489 + 116.2 -3.7 + 115.9 -3.7 + 115.869 -3.70489 + 115.841 -3.7191 + 115.819 -3.74122 + 115.805 -3.7691 + 115.8 -3.8 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 113.7 3.8 + 113.705 3.7691 + 113.719 3.74122 + 113.741 3.7191 + 113.769 3.70489 + 113.8 3.7 + 116.2 3.7 + 116.231 3.70489 + 116.259 3.7191 + 116.281 3.74122 + 116.295 3.7691 + 116.3 3.8 + 116.3 4.1 + 116.295 4.1309 + 116.281 4.15878 + 116.259 4.1809 + 116.231 4.19511 + 116.2 4.2 + 113.8 4.2 + 113.769 4.19511 + 113.741 4.1809 + 113.719 4.15878 + 113.705 4.1309 + 113.7 4.1 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 113.7 40.9 + 113.705 40.8691 + 113.719 40.8412 + 113.741 40.8191 + 113.769 40.8049 + 113.8 40.8 + 116.2 40.8 + 116.231 40.8049 + 116.259 40.8191 + 116.281 40.8412 + 116.295 40.8691 + 116.3 40.9 + 116.3 41.2 + 116.295 41.2309 + 116.281 41.2588 + 116.259 41.2809 + 116.231 41.2951 + 116.2 41.3 + 113.8 41.3 + 113.769 41.2951 + 113.741 41.2809 + 113.719 41.2588 + 113.705 41.2309 + 113.7 41.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 113.7 3.8 + 113.705 3.7691 + 113.719 3.74122 + 113.741 3.7191 + 113.769 3.70489 + 113.8 3.7 + 114.1 3.7 + 114.131 3.70489 + 114.159 3.7191 + 114.181 3.74122 + 114.195 3.7691 + 114.2 3.8 + 114.2 41.2 + 114.195 41.2309 + 114.181 41.2588 + 114.159 41.2809 + 114.131 41.2951 + 114.1 41.3 + 113.8 41.3 + 113.769 41.2951 + 113.741 41.2809 + 113.719 41.2588 + 113.705 41.2309 + 113.7 41.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 115.8 3.8 + 115.805 3.7691 + 115.819 3.74122 + 115.841 3.7191 + 115.869 3.70489 + 115.9 3.7 + 116.2 3.7 + 116.231 3.70489 + 116.259 3.7191 + 116.281 3.74122 + 116.295 3.7691 + 116.3 3.8 + 116.3 41.2 + 116.295 41.2309 + 116.281 41.2588 + 116.259 41.2809 + 116.231 41.2951 + 116.2 41.3 + 115.9 41.3 + 115.869 41.2951 + 115.841 41.2809 + 115.819 41.2588 + 115.805 41.2309 + 115.8 41.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + 123.7 -51.2 + 123.724 -51.3545 + 123.795 -51.4939 + 123.906 -51.6045 + 124.045 -51.6755 + 124.2 -51.7 + 126.2 -51.7 + 126.355 -51.6755 + 126.494 -51.6045 + 126.605 -51.4939 + 126.676 -51.3545 + 126.7 -51.2 + 126.7 48.2 + 126.676 48.3545 + 126.605 48.4939 + 126.494 48.6045 + 126.355 48.6755 + 126.2 48.7 + 124.2 48.7 + 124.045 48.6755 + 123.906 48.6045 + 123.795 48.4939 + 123.724 48.3545 + 123.7 48.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + 0 0 0 0 -0 0 + + + + + 0.15 + -48.7 -51.2 + -48.6755 -51.3545 + -48.6045 -51.4939 + -48.4939 -51.6045 + -48.3545 -51.6755 + -48.2 -51.7 + 126.2 -51.7 + 126.355 -51.6755 + 126.494 -51.6045 + 126.605 -51.4939 + 126.676 -51.3545 + 126.7 -51.2 + 126.7 -49.2 + 126.676 -49.0455 + 126.605 -48.9061 + 126.494 -48.7955 + 126.355 -48.7245 + 126.2 -48.7 + -48.2 -48.7 + -48.3545 -48.7245 + -48.4939 -48.7955 + -48.6045 -48.9061 + -48.6755 -49.0455 + -48.7 -49.2 + + + + 0.2 0.2 0.2 1 + + + 0 + 0 + 0 + + + + 1 + + + + + model://house_1/meshes/house_1.dae + 1.5 1.5 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://house_1/meshes/house_1.dae + 1.5 1.5 1.5 + + + + + + House_1_Normal.png + + + + 0 + 0 + 0 + + 61.74 22.76 0 0 0 -1.57 + + + 1 + + + + + model://house_1/meshes/house_1.dae + 1.5 1.5 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://house_1/meshes/house_1.dae + 1.5 1.5 1.5 + + + + + + House_1_Normal.png + + + + 0 + 0 + 0 + + 86.62 27.93 0 0 -0 3.14 + + + 1 + + + + + model://house_3/meshes/house_3.dae + 1.5 1.5 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://house_3/meshes/house_3.dae + 1.5 1.5 1.5 + + + + + + model://house_1/materials/textures/House_1_Normal.png + + + + 0 + 0 + 0 + + 96.43 14.14 0 0 -0 0 + + + 1 + + + + + model://house_2/meshes/house_2.dae + 1.5 1.5 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://house_2/meshes/house_2.dae + 1.5 1.5 1.5 + + + + + + model://house_1/materials/textures/House_1_Normal.png + + + + 0 + 0 + 0 + + 76.71 13.4 0 0 -0 0 + + + 1 + 61.88 -30.82 0 0 -0 3.14 + + + + + model://gas_station/meshes/gas_station.dae + + + + + 1 1 1 1 + + + 0 + 0 + 0 + + + + 1 + 61.581 -16.664 0 0 -0 0 + + + + + 20 20 0.05 + + + + + + + 0 + 0 + 0 + + + + 1 + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + 10 + + + + + + + + + + + + + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + + 0 + 0 + 0 + + 103 -4.386 0.15 0 -0 0 + + + 1 + + 0 0 3.15931 0 -0 0 + + + + 3 3 2 + model://fast_food/meshes/fast_food.dae + + + 10 + + + + + + + + + + + + + + + + + 3 3 2 + model://fast_food/meshes/fast_food.dae + + + + + + FastFood_Normal.png + + + + 0 + 0 + 0 + + 28.25 -13.93 0 0 -0 0 + + + + + + + 1.5 1.5 1.5 + model://dumpster/meshes/dumpster.dae + + + 10 + + + + + + + + + + + + + + + + + 1.5 1.5 1.5 + model://dumpster/meshes/dumpster.dae + + + + + + + 0 + + 0 0 0 0 -0 0 + + 1 + 0 + 0 + 1 + 0 + 1 + + 1 + + 0 + 0 + + 15.94 -13.63 0 0 -0 3.14 + + + 1 + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + 10 + + + + + + + + + + + + + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + + 0 + 0 + 0 + + 38.5 -4.38 0.15 0 -0 0 + + + 1 + + + + + model://house_2/meshes/house_2.dae + 1.5 1.5 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://house_2/meshes/house_2.dae + 1.5 1.5 1.5 + + + + + + model://house_1/materials/textures/House_1_Normal.png + + + + 0 + 0 + 0 + + 1.61 -14.15 0 0 -0 3.14 + + + 1 + + + + + model://house_2/meshes/house_2.dae + 1.5 1.5 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://house_2/meshes/house_2.dae + 1.5 1.5 1.5 + + + + + + model://house_1/materials/textures/House_1_Normal.png + + + + 0 + 0 + 0 + + -0.59 -26.6 0 0 0 -1.57 + + + 1 + + + + + model://house_1/meshes/house_1.dae + 1.5 1.5 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://house_1/meshes/house_1.dae + 1.5 1.5 1.5 + + + + + + House_1_Normal.png + + + + 0 + 0 + 0 + + -27.49 25.344 0 0 0 -1.57 + + + -32 8 0 0 -0 0 + + + 2 + + 0.0416667 + 0 + 0 + 0.0566667 + 0 + 0.0683333 + + 0 0 0 0 -0 0 + + + + + 0.5 0.4 0.3 + + + 10 + + + + + + + + + + + + + + + 0 0 -0.15 0 -0 0 + + + model://cardboard_box/meshes/cardboard_box.dae + 1.25932 1.00745 0.755591 + + + + 0 + 0 + 0 + + + + 1 + + + + + model://house_3/meshes/house_3.dae + 1.5 1.5 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://house_3/meshes/house_3.dae + 1.5 1.5 1.5 + + + + + + model://house_1/materials/textures/House_1_Normal.png + + + + 0 + 0 + 0 + + -33.39 -21.3 0 0 0 -1.57 + + + 1 + + + + + model://house_3/meshes/house_3.dae + 1.5 1.5 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://house_3/meshes/house_3.dae + 1.5 1.5 1.5 + + + + + + model://house_1/materials/textures/House_1_Normal.png + + + + 0 + 0 + 0 + + -28.126 -32.93 0 0 -0 0 + + + 1 + + + + + model://house_3/meshes/house_3.dae + 1.5 1.5 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://house_3/meshes/house_3.dae + 1.5 1.5 1.5 + + + + + + model://house_1/materials/textures/House_1_Normal.png + + + + 0 + 0 + 0 + + -25.739 -19.38 0 0 -0 1.57 + + + 1 + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + 10 + + + + + + + + + + + + + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + + 0 + 0 + 0 + + -20.34 -4.38 0.15 0 -0 0 + + + 17.9 + -73 -47.96 0.01 + -73 2.96 0.01 + + + + + + 1 + + + + + model://stop_sign/meshes/stop_sign.dae + + + 10 + + + + + + + + + + + + + + + + + model://stop_sign/meshes/stop_sign.dae + + + + + + + 0 + 0 + 0 + + -11.3 -3.7 0 0 -0 0 + + + 1 + + + + + model://stop_sign/meshes/stop_sign.dae + + + 10 + + + + + + + + + + + + + + + + + model://stop_sign/meshes/stop_sign.dae + + + + + + + 0 + 0 + 0 + + 41.3 -41.3 0 0 -0 3.14 + + + 1 + + + + + model://stop_sign/meshes/stop_sign.dae + + + 10 + + + + + + + + + + + + + + + + + model://stop_sign/meshes/stop_sign.dae + + + + + + + 0 + 0 + 0 + + 41.3 3.7 0 0 -0 3.14 + + + 1 + + + + + model://stop_sign/meshes/stop_sign.dae + + + 10 + + + + + + + + + + + + + + + + + model://stop_sign/meshes/stop_sign.dae + + + + + + + 0 + 0 + 0 + + -18.7 -3.7 0 0 0 -1.57 + + + 1 + + + + + model://stop_sign/meshes/stop_sign.dae + + + 10 + + + + + + + + + + + + + + + + + model://stop_sign/meshes/stop_sign.dae + + + + + + + 0 + 0 + 0 + + 41.3 -3.7 0 0 0 -1.57 + + + 1 + + + + + model://stop_sign/meshes/stop_sign.dae + + + 10 + + + + + + + + + + + + + + + + + model://stop_sign/meshes/stop_sign.dae + + + + + + + 0 + 0 + 0 + + 106.3 -3.7 0 0 0 -1.57 + + + 1 + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + 10 + + + + + + + + + + + + + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + + 0 + 0 + 0 + + -35.1 -3.7 0 0 -0 3.14 + + + 1 + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + 10 + + + + + + + + + + + + + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + + 0 + 0 + 0 + + -25.2 3.7 0 0 -0 0 + + + 1 + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + 10 + + + + + + + + + + + + + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + + 0 + 0 + 0 + + -3 -3.7 0 0 -0 3.14 + + + 1 + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + 10 + + + + + + + + + + + + + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + + 0 + 0 + 0 + + 21 -3.7 0 0 -0 3.14 + + + 1 + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + 10 + + + + + + + + + + + + + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + + 0 + 0 + 0 + + 58 -3.7 0 0 -0 3.14 + + + 1 + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + 10 + + + + + + + + + + + + + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + + 0 + 0 + 0 + + 71 3.7 0 0 -0 0 + + + 1 + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + 10 + + + + + + + + + + + + + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + + 0 + 0 + 0 + + 84 -3.7 0 0 -0 3.14 + + + 1 + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + 10 + + + + + + + + + + + + + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + + 0 + 0 + 0 + + 90.5 3.7 0 0 -0 0 + + 0 0 -9.8 + 6e-06 2.3e-05 -4.2e-05 + + + + EARTH_WGS84 + 0 + 0 + 0 + 0 + + + 2097 624000000 + 349 55330025 + 1618996346 402288157 + 86362 + + 8.4878 32.9372 0.750007 1e-05 -6.3e-05 1.7e-05 + 1 1 1 + + 8.4878 32.9372 0.750007 1e-05 -6.3e-05 1.7e-05 + 0 0 0 0 -0 0 + -2.35945 -1.06016 6.72194 -2.70396 -0.061338 2.20255 + -94.3779 -42.4063 268.877 0 -0 0 + + + + 1.63485 29.1069 0.625007 -1e-05 6.1e-05 9e-05 + 1 1 1 + + 1.63485 29.1069 0.625007 -1e-05 6.1e-05 9e-05 + 0 0 0 0 -0 0 + 2.55256 1.0555 6.97215 2.3522 -0.90108 2.47191 + 102.102 42.2201 278.886 0 -0 0 + + + + 14.2767 34.2183 0.0635 -5e-06 0 0.003392 + 1 1 1 + + 14.2767 34.2183 0.0635 -5e-06 0 0.003392 + 0 0 0 0 -0 0 + 0.061659 -1.14057 3.15599 2.00716 0.972408 0.059004 + 1.54148 -28.5143 78.8998 0 -0 0 + + + + 5.58824 35.6933 0 0 -0 0 + 1 1 1 + + 5.58824 35.6933 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 89.3184 -28.9368 0 0 -0 0 + 1 1 1 + + 89.3184 -28.9368 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 91.0804 -33.1643 0 0 -0 0 + 1 1 1 + + 91.0804 -33.1643 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 82.0143 -33.0749 0 0 -0 0 + 1 1 1 + + 82.0143 -33.0749 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 82.6647 -28.562 0 0 -0 0 + 1 1 1 + + 82.6647 -28.562 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -11.6153 -31.1905 1.01559 1.5881 0.091488 2.84636 + 1 1 1 + + -11.6152 -31.1221 1.47584 1.78814 -0.067998 2.82507 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6195 -31.1667 1.01146 1.59174 0.088817 2.84641 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6195 -31.1667 1.01146 -1.88517 0.622288 -1.26299 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.8385 -31.089 0.798672 -1.5841 0.034783 -1.54837 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.8048 -31.1029 1.33781 -1.73624 -0.02139 -0.582659 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.8385 -31.089 0.798672 -1.84819 0.481694 -0.835132 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6415 -30.8435 0.075563 -3.1123 -0.072367 2.9371 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.8281 -31.1505 1.02275 -1.37255 0.186491 -0.579243 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.8385 -31.089 0.798672 -1.40895 0.218743 -0.759636 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.8549 -31.0842 0.770708 -1.83329 0.361829 -0.798805 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.628 -30.8832 0.519561 -1.49971 0.0617 -0.386049 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6016 -31.1122 1.27107 1.19346 1.2289 2.69762 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6139 -30.7093 0.071558 2.70705 -0.065037 2.94514 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6905 -31.1 0.892803 -1.03032 0.062925 -0.385313 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6195 -31.1667 1.01146 1.88838 0.010217 2.85063 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6016 -31.1122 1.27107 1.48422 0.106186 2.8795 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6158 -31.1186 1.38416 1.53578 -0.016762 2.86421 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6195 -31.1667 1.01146 -2.07754 -0.68577 0.825004 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.3368 -31.0596 0.805508 -1.02119 -0.767045 0.977595 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.417 -31.1783 1.32569 -1.57345 -0.060284 0.126241 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.3368 -31.0596 0.805508 -0.823039 -0.538109 -0.043973 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6613 -31.365 0.072895 -2.69364 -0.062556 2.84556 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.3973 -31.1766 0.997924 -1.06185 -0.333734 0.054361 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.3368 -31.0596 0.805508 -1.08424 -0.367029 0.119571 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.318 -31.0288 0.776337 -0.867282 -0.445006 0.049607 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.5764 -31.2123 0.476848 -1.96095 0.123966 -0.215297 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6016 -31.1122 1.27107 1.41282 -1.29561 2.96173 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6269 -31.2386 0.010095 -3.09695 -0.067077 2.83575 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.5093 -31.1551 0.909668 -1.73039 0.122537 -0.215064 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6087 -31.1262 1.13902 1.68622 -0.026121 2.89256 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6016 -31.1122 1.27107 1.64165 -0.067584 2.90895 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6153 -31.1905 1.01559 1.5881 0.091488 2.84636 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 4.01686 -1.03557 7 -1.6 0 2e-06 + 1 1 1 + + 4.01686 -1.03557 7 -1.54434 1.54158 -1.54353 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 61.581 -16.664 0 0 -0 0 + 1 1 1 + + 61.581 -16.664 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -31.9994 8 0.15 -1.8e-05 1e-06 -2e-06 + 1 1 1 + + -31.9994 8 0.15 -1.8e-05 1e-06 -2e-06 + 0 0 0 0 -0 0 + -0.012492 -4.22249 5.95094 3.03613 -0.040975 0.020538 + -0.024984 -8.44497 11.9019 0 -0 0 + + + + -26.902 13.6572 0 0 -0 0 + 1 1 1 + + -26.902 13.6572 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 47.1776 67.9543 0.427077 -0.000107 -0.061071 -1.1985 + 1 1 1 + + 47.1776 67.9543 0.427077 -0.000107 -0.061071 -1.1985 + 0.000434 -0.007331 -0.01796 0.007019 0.006557 -0.002499 + 2.86979 0.298651 -1.9938 -2.29998 -0.642166 2.18693 + 1952.57 203.199 -1356.56 0 -0 0 + + + 46.942 68.5586 3.2774 -0.000133 -0.591185 -1.19843 + 0.025197 -0.03932 -0.052397 0.013649 0.009211 -0.002765 + 4.33815 2.29184 6.02775 -0.500489 0.36881 2.33023 + 8.67631 4.58368 12.0555 0 -0 0 + + + 47.658 66.7361 -0.340401 3.12834 -0.314953 1.94726 + -0.254556 -0.139783 -1.23879 -0.318047 0.732734 -0.007506 + 56.9735 14.9585 -401.34 -1.63281 1.07897 2.84227 + 113.947 29.9171 -802.68 0 -0 0 + + + 47.2 67.6076 1.58121 -0.061433 -0.58704 -1.20924 + 0.014656 -0.008722 -0.188135 0.076083 0.024726 0.001309 + 6.03876 -1.33836 -8.13271 2.19021 -0.92865 -2.33324 + 12.0775 -2.67672 -16.2654 0 -0 0 + + + 47.3139 67.5505 1.45595 0.00391 -0.591136 -1.21061 + 0.004658 -0.010722 -0.050568 0.018699 0.011219 -0.002529 + 5.75033 -1.25324 -3.82191 0.064682 0.926692 -1.55838 + 11.5007 -2.50647 -7.64383 0 -0 0 + + + 47.8086 66.3387 1.38827 1.59026 -0.059789 -1.19849 + 0.001367 -0.015202 0.001558 -0.026681 0.006019 -0.003653 + 1.4553 -1.13242 0.669719 -2.69408 -0.580607 0.333924 + 26.7338 -20.8026 12.3027 0 -0 0 + + + 46.9748 68.4233 -0.639533 -0.082572 1.33753 -1.2789 + 0.023142 0.041788 -0.076628 0.06604 -0.035924 0.000434 + -6.0429 -2.04267 171.933 -0.73697 -1.17116 -3.01509 + -12.0858 -4.08534 343.866 0 -0 0 + + + 47.1288 68.1745 -0.407666 0.068049 1.00024 -1.14059 + -0.009565 0.011457 -0.066916 0.03506 0.014208 -0.002231 + 0.362262 0.113409 -0.256015 2.37879 0.756625 2.25137 + 0.724524 0.226818 -0.512031 0 -0 0 + + + 47.3965 67.6842 1.58404 0.061338 -0.588362 -1.18763 + 0.054706 -0.005747 0.787351 -0.299574 -0.156513 0.01717 + 8.31026 -5.76892 0.237208 -1.15772 0.747676 1.61179 + 16.6205 -11.5378 0.474417 0 -0 0 + + + 47.3513 67.5649 1.45737 -0.004188 -0.591838 -1.18623 + 0.030094 -0.055875 0.361206 -0.161492 -0.058938 0.000854 + 6.54277 -3.64981 -1.96651 0.440169 0.75554 -2.19766 + 13.0855 -7.29962 -3.93302 0 -0 0 + + + 47.189 67.9587 0.427236 -0.001079 -0.061089 -1.19623 + 0.180054 0.065707 -0.02896 0.003005 0.021158 0.032173 + 3.41658 -0.05916 8.66886 3.1311 -1.43841 0.828374 + 6.83316 -0.11832 17.3377 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 -5 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 15.94 -13.63 0.001319 1e-06 -5.9e-05 3.14 + 1 1 1 + + 15.94 -13.63 0.001319 1e-06 -5.9e-05 3.14 + 0 0 0 0 -0 0 + 0.014095 -2.1e-05 0 -3.12588 -0.439047 -3.14144 + 0.014095 -2.1e-05 0 0 -0 0 + + + + 28.25 -13.93 0 0 -0 0 + 1 1 1 + + 28.25 -13.93 3.15931 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -20.34 -4.38 0.15 0 -0 0 + 1 1 1 + + -20.34 -4.38 0.15 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 103 -4.386 0.15 0 -0 0 + 1 1 1 + + 103 -4.386 0.15 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 38.5 -4.38 0.15 0 -0 0 + 1 1 1 + + 38.5 -4.38 0.15 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 50.1047 -5.16824 0.15 0 -0 0 + 1 1 1 + + 50.1047 -5.16824 0.15 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 35.1055 4.87588 0.15 0 -0 0 + 1 1 1 + + 35.1055 4.87588 0.15 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 39.8693 -39.227 0.15 0 -0 0 + 1 1 1 + + 39.8693 -39.227 0.15 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 22.8289 -40.8522 0.15 0 -0 0 + 1 1 1 + + 22.8289 -40.8522 0.15 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 9.15338 -40.7389 0.15 0 -0 0 + 1 1 1 + + 9.15338 -40.7389 0.15 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -3.54695 -40.9334 0.15 0 -0 0 + 1 1 1 + + -3.54695 -40.9334 0.15 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 61.88 -30.82 0 0 -0 3.14 + 1 1 1 + + 61.88 -30.82 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -27.49 25.344 0 0 0 -1.57 + 1 1 1 + + -27.49 25.344 0 0 0 -1.57 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 12.9955 19.0454 0 0 -0 0.0116 + 1 1 1 + + 12.9955 19.0454 0 0 -0 0.0116 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 61.74 22.76 0 0 0 -1.57 + 1 1 1 + + 61.74 22.76 0 0 0 -1.57 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 86.62 27.93 0 0 -0 3.14 + 1 1 1 + + 86.62 27.93 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 1.61 -14.15 0 0 -0 3.14 + 1 1 1 + + 1.61 -14.15 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -0.59 -26.6 0 0 0 -1.57 + 1 1 1 + + -0.59 -26.6 0 0 0 -1.57 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 76.71 13.4 0 0 -0 0 + 1 1 1 + + 76.71 13.4 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -33.39 -21.3 0 0 0 -1.57 + 1 1 1 + + -33.39 -21.3 0 0 0 -1.57 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -28.126 -32.93 0 0 -0 0 + 1 1 1 + + -28.126 -32.93 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -25.739 -19.38 0 0 -0 1.57 + 1 1 1 + + -25.739 -19.38 0 0 -0 1.57 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 96.43 14.14 0 0 -0 0 + 1 1 1 + + 96.43 14.14 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -35.1 -3.7 0 0 -0 3.14 + 1 1 1 + + -35.1 -3.7 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -25.2 3.7 0 0 -0 0 + 1 1 1 + + -25.2 3.7 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -3 -3.7 0 0 -0 3.14 + 1 1 1 + + -3 -3.7 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 21 -3.7 0 0 -0 3.14 + 1 1 1 + + 21 -3.7 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 58 -3.7 0 0 -0 3.14 + 1 1 1 + + 58 -3.7 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 71 3.7 0 0 -0 0 + 1 1 1 + + 71 3.7 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 84 -3.7 0 0 -0 3.14 + 1 1 1 + + 84 -3.7 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 90.5 3.7 0 0 -0 0 + 1 1 1 + + 90.5 3.7 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 40 -20 -2 0 -0 0 + 1 1 1 + + 40 -20 -2 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 30.2532 23.7282 -0.161234 0 0 -3.13968 + 1 1 1 + + 30.2532 23.7282 -0.161234 0 0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 29.0523 23.0103 0.185736 -1.52 0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 29.0519 23.2259 0.193916 1.5708 -0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 29.0496 24.4415 0.185736 1.52 -0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 29.05 24.2259 0.193916 1.5708 -0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 31.2483 23.0145 0.185736 -1.52 0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 31.2456 24.4457 0.185736 1.52 -0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 30.2532 23.7282 -0.161234 0 0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 29.9581 16.2491 -0.161234 0 0 -3.13968 + 1 1 1 + + 29.9581 16.2491 -0.161234 0 0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 28.7573 15.5312 0.185736 -1.52 0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 28.7569 15.7468 0.193916 1.5708 -0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 28.7545 16.9624 0.185736 1.52 -0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 28.755 16.7468 0.193916 1.5708 -0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 30.9533 15.5354 0.185736 -1.52 0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 30.9505 16.9666 0.185736 1.52 -0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 29.9581 16.2491 -0.161234 0 0 -3.13968 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 19.9272 -26.6256 -0.161234 0 -0 1.56166 + 1 1 1 + + 19.9272 -26.6256 -0.161234 0 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 19.2226 -25.4169 0.185736 -1.52 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 19.4382 -25.4189 0.193916 1.5708 0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 20.6538 -25.43 0.185736 1.52 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 20.4382 -25.428 0.193916 1.5708 0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 19.2025 -27.6128 0.185736 -1.52 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 20.6337 -27.6259 0.185736 1.52 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 19.9272 -26.6256 -0.161234 0 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 26.6941 -30.6479 -0.161234 0 -0 1.56166 + 1 1 1 + + 26.6941 -30.6479 -0.161234 0 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 25.9895 -29.4392 0.185736 -1.52 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 26.2051 -29.4411 0.193916 1.5708 0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 27.4206 -29.4522 0.185736 1.52 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 27.205 -29.4503 0.193916 1.5708 0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 25.9694 -31.6351 0.185736 -1.52 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 27.4006 -31.6482 0.185736 1.52 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 26.6941 -30.6479 -0.161234 0 -0 1.56166 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0.065383 -0.432779 0 0 -0 0 + 1 1 1 + + 0.065383 -0.432779 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -11.3 -3.7 0 0 -0 0 + 1 1 1 + + -11.3 -3.7 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 41.3 -41.3 0 0 -0 3.14 + 1 1 1 + + 41.3 -41.3 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -11.0955 3.92021 0 0 -0 3.14 + 1 1 1 + + -11.0955 3.92021 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 10.9133 -4.26207 0 0 -0 3.14 + 1 1 1 + + 10.9133 -4.26207 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 41.3 3.7 0 0 -0 3.14 + 1 1 1 + + 41.3 3.7 0 0 -0 3.14 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -18.7 -3.7 0 0 0 -1.57 + 1 1 1 + + -18.7 -3.7 0 0 0 -1.57 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 41.3 -3.7 0 0 0 -1.57 + 1 1 1 + + 41.3 -3.7 0 0 0 -1.57 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 106.3 -3.7 0 0 0 -1.57 + 1 1 1 + + 106.3 -3.7 0 0 0 -1.57 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0.024384 -0.012467 0.21894 -0.001083 0.000266 -0.012506 + 1 1 1 + + 0.024384 -0.012467 0.21894 -0.001083 0.000266 -0.012506 + -0.002216 -0.005159 0.005587 -0.077179 -0.055618 -0.140298 + -1.62067 -1.49724 1.37979 -0.933688 0.611219 2.53713 + -3.27376 -3.02442 2.78719 0 -0 0 + + + 0.021833 -0.012541 0.219019 -0.00089 -0.014783 -0.015079 + -0.002837 -0.004122 0.006186 -0.052901 -0.012256 -0.000267 + 0.614327 1.90173 2.2307 -0.424972 0.453086 -0.945544 + 0.061433 0.190173 0.22307 0 -0 0 + + + 0.024278 -0.012585 0.218876 -0.000862 0.000352 -0.0151 + -0.011233 -0.004207 0.00654 -0.053051 -0.061105 -0.001002 + -1.9527 1.55573 1.77163 -0.872375 0.600457 -1.3015 + -0.19527 0.155573 0.177163 0 -0 0 + + + 0.024311 -0.012482 0.218896 -0.001059 0.000362 -0.012524 + -0.008935 -0.004795 0.006557 -0.073532 -0.059605 -0.135066 + 0.853075 2.19054 1.3814 2.20994 1.42255 -2.3104 + 0.085307 0.219054 0.13814 0 -0 0 + + + 0.02428 -0.012553 0.218884 -0.001047 0.000338 -0.015102 + -0.01162 -0.000684 0.006915 -0.074587 -0.065952 -0.00113 + 0.801148 1.80979 1.55775 1.18004 -0.596122 2.19322 + 0.080115 0.180979 0.155775 0 -0 0 + + + 0.026391 -0.012223 0.218886 0.000935 0.003848 -0.023308 + -0.046074 -0.107688 0.04662 0.650912 -0.368276 -0.23898 + -0.968929 7.71053 -14.7553 -0.987868 1.44823 3.0177 + -0.096893 0.771053 -1.47553 0 -0 0 + + + 0.026418 -0.013152 0.218767 0.000603 0.004727 -0.001968 + 0.020089 0.015604 0.018567 -0.067016 0.092216 -0.000905 + 0.261117 -0.069718 0.436081 -2.16318 0.431688 2.99658 + 0.026112 -0.006972 0.043608 0 -0 0 + + + -0.183461 0.112994 0.301057 0.001167 0.000767 1.9861 + 0.010814 0.029868 -0.015955 -0.075651 -0.045114 0.002683 + 1.12445 5.62079 -2.36978 1.59899 -0.318348 -1.79034 + 0.005622 0.028104 -0.011849 0 -0 0 + + + 0.234267 -0.134773 0.301257 -4.3e-05 -0.001154 -2.01801 + -0.023298 -0.027677 0.026536 -0.045378 0.137435 0.002578 + -8.20426 -10.117 5.04029 0.37258 -0.035041 2.50169 + -0.041021 -0.050585 0.025201 0 -0 0 + + + -0.186529 -0.132511 0.301326 0.001147 0.000768 1.98613 + -0.023055 0.030368 0.002337 -0.075786 -0.044768 0.002667 + -8.13879 5.75004 -4.61311 2.19905 -1.2273 1.33509 + -0.040694 0.02875 -0.023066 0 -0 0 + + + 0.23726 0.104734 0.301 -0.000972 0.000137 -0.013297 + 0.009709 -0.028074 0.00869 -0.074344 -0.057086 0.002739 + 0.824085 -10.2203 7.22849 0.148757 0.909081 -2.56763 + 0.00412 -0.051101 0.036142 0 -0 0 + + + 0.02554 0.230333 0.300895 -0.000956 0.000141 -0.015207 + 0.027007 0.001078 -0.012859 -0.074161 -0.057044 0.002726 + 5.55449 -2.2473 3.47036 -0.174828 0.55314 -2.57315 + 0.027772 -0.011236 0.017352 0 -0 0 + + + 0.019472 -0.255039 0.301421 -5.2e-05 -0.001155 -2.01706 + -0.03992 0.001938 0.023316 -0.045353 0.13746 0.002575 + -12.751 -2.02404 -0.96229 3.02036 0.424094 2.48885 + -0.063755 -0.01012 -0.004811 0 -0 0 + + + 0.08 0 -584041 0 -0 3.14159 + 0 0 -3383.35 0 -0 0 + 0 0 -9.8 0 -0 0 + 0 0 -0 0 -0 0 + + + 0.02437 -0.012465 0.218941 -0.001081 0.000141 -0.0125 + -0.001749 -0.004931 0.005352 -0.081733 -0.057105 -0.13765 + -1.71749 -1.49464 1.4557 2.21945 1.5213 3.08313 + -0.025762 -0.02242 0.021836 0 -0 0 + + + + 20.6722 33.4177 0.499884 3e-06 -3e-06 -0.000347 + 1 1 1 + + 20.6722 33.4177 0.499884 3e-06 -3e-06 -0.000347 + 0 0 0 0 -0 0 + 0 0 -9.8 0 -0 0 + 0 0 -9.8 0 -0 0 + + + + 0 0 1000 0 -0 0 + + + 24.0343 3.49866 18 0 -0 0 + + + -70.5235 -10.3411 1 0 -0 0 + + + + 1 + + + + + model://house_1/meshes/house_1.dae + 1.5 1.5 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://house_1/meshes/house_1.dae + 1.5 1.5 1.5 + + + + + + House_1_Normal.png + + + + 0 + 0 + 0 + + 12.9955 19.0454 0 0 0 -1.57 + + + 1 + + + 0 0 0.9 0 -0 0 + + + 0.76 0.33 1.77 + + + 10 + + + + + + + + + + + + + + + 0 0 0.02 0.04 -0 0 + + + model://casual_female/meshes/casual_female.dae + + + + 0 + 0 + 0 + + -26.902 13.6572 0 0 -0 0 + + + 1.63426 29.107 0.625 0 -0 0 + 0 + + + 40 + + 1 + 0 + 0 + 1 + 0 + 1 + + 0 0 0 0 -0 0 + + + + + 1.2 0.8 1.25 + + + 10 + + + + + + + + + + + + + + + + + model://big_box4/meshes/big_box.dae + + + + 0 + 0 + 0 + + + + 8.48888 32.9364 0.75 0 -0 0 + 0 + + + 40 + + 1 + 0 + 0 + 1 + 0 + 1 + + 0 0 0 0 -0 0 + + + + + 1.2 0.8 1.5 + + + 10 + + + + + + + + + + + + + + + + + model://big_box2/meshes/big_box.dae + + + + 0 + 0 + 0 + + + + 14.2768 34.2121 0.0635 0 -0 0 + 0 + + + 25 + + 1 + 0 + 0 + 1 + 0 + 1 + + 0 0 0 0 -0 0 + + + 0 0 0.0625 0 -0 0 + + + 1.2 0.8 0.042 + + + 10 + + + + + + + + + + + + + + + 0.5275 -0.35 0 0 -0 0 + + + 0.145 0.1 0.085 + + + 10 + + + + + + + + + + + + + + + 0.5275 0 0 0 -0 0 + + + 0.145 0.145 0.085 + + + 10 + + + + + + + + + + + + + + + 0.5275 0.35 0 0 -0 0 + + + 0.145 0.1 0.085 + + + 10 + + + + + + + + + + + + + + + 0 -0.35 0 0 -0 0 + + + 0.145 0.1 0.085 + + + 10 + + + + + + + + + + + + + + + 0 0 0 0 -0 0 + + + 0.145 0.145 0.085 + + + 10 + + + + + + + + + + + + + + + 0 0.35 0 0 -0 0 + + + 0.145 0.1 0.085 + + + 10 + + + + + + + + + + + + + + + -0.5275 -0.35 0 0 -0 0 + + + 0.145 0.1 0.085 + + + 10 + + + + + + + + + + + + + + + -0.5275 0 0 0 -0 0 + + + 0.145 0.145 0.085 + + + 10 + + + + + + + + + + + + + + + -0.5275 0.35 0 0 -0 0 + + + 0.145 0.1 0.085 + + + 10 + + + + + + + + + + + + + + + 0 -0.35 -0.053 0 -0 0 + + + 1.2 0.1 0.021 + + + 10 + + + + + + + + + + + + + + + 0 0 -0.053 0 -0 0 + + + 1.2 0.145 0.021 + + + 10 + + + + + + + + + + + + + + + 0 0.35 -0.053 0 -0 0 + + + 1.2 0.1 0.021 + + + 10 + + + + + + + + + + + + + + + + + model://europallet/meshes/europallet.dae + + + + 0 + 0 + 0 + + + + 20.6722 33.4177 0.5 0 -0 0 + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + + + + 0.5 + 1 + + + 10 + + + + + + + + + + + + + + + + + 0.5 + 1 + + + + + + + 0 + 0 + 0 + + + + 1 + + + + + model://shelves_high/meshes/shelves_high_collision.dae + 1 1.2 1.2 + + + 10 + + + + + + + + + + + + + + + + + model://shelves_high/meshes/shelves_high.dae + 1 1.2 1.2 + + + + 0 + 0 + 0 + + 5.58824 35.6933 0 0 -0 0 + + + 1 + + + + + model://shelves_high2/meshes/shelves_high2_collision.dae + 1 1.2 1.2 + + + 10 + + + + + + + + + + + + + + + + + model://shelves_high2/meshes/shelves_high2.dae + 1 1.2 1.2 + + + + 0 + 0 + 0 + + 89.3184 -28.9368 0 0 -0 0 + + + 1 + + + + + model://shelves_high2/meshes/shelves_high2_collision.dae + 1 1.2 1.2 + + + 10 + + + + + + + + + + + + + + + + + model://shelves_high2/meshes/shelves_high2.dae + 1 1.2 1.2 + + + + 0 + 0 + 0 + + 91.0804 -33.1643 0 0 -0 0 + + + 1 + + + + + model://shelves_high2/meshes/shelves_high2_collision.dae + 1 1.2 1.2 + + + 10 + + + + + + + + + + + + + + + + + model://shelves_high2/meshes/shelves_high2.dae + 1 1.2 1.2 + + + + 0 + 0 + 0 + + 82.0143 -33.0749 0 0 -0 0 + + + 1 + + + + + model://shelves_high/meshes/shelves_high_collision.dae + 1 1.2 1.2 + + + 10 + + + + + + + + + + + + + + + + + model://shelves_high/meshes/shelves_high.dae + 1 1.2 1.2 + + + + 0 + 0 + 0 + + 82.6647 -28.562 0 0 -0 0 + + + 34.945 76.978 0.495 0 -0 0 + + + 680.389 + + 1285.32 + 0 + 1824.93 + 0 + 0 + 2666.89 + + -0.0414 0 0.9271 0 -0 0 + + + + + model://cessna/meshes/body.dae + + + 10 + + + + + + + + + + + + + + + + + model://cessna/meshes/body.dae + + + + 0 + 0 + 0 + + + + 2 + + 0.8434 + 0 + 0.0119 + 0 + 0 + 0.855 + + -1.65 3.7 1.5 0.05 -0 -0.12 + + + + + model://cessna/meshes/left_aileron.dae + + + 10 + + + + + + + + + + + + + + + + + model://cessna/meshes/left_aileron.dae + + + + 0 + 0 + 0 + + + + 2 + + 0.6747 + 0 + 0.0242 + 0 + 0 + 0.6962 + + -1.8 1.55 1.43 0.02 -0 0 + + + + + model://cessna/meshes/left_flap.dae + + + 10 + + + + + + + + + + + + + + + + + model://cessna/meshes/left_flap.dae + + + + 0 + 0 + 0 + + + + 2 + + 0.8434 + 0 + 0.0119 + 0 + 0 + 0.855 + + -1.65 -3.7 1.5 -0.05 -0 0.12 + + + + + model://cessna/meshes/right_aileron.dae + + + 10 + + + + + + + + + + + + + + + + + model://cessna/meshes/right_aileron.dae + + + + 0 + 0 + 0 + + + + 2 + + 0.6747 + 0 + 0.0242 + 0 + 0 + 0.6962 + + -1.8 -1.55 1.43 -0.02 0 0 + + + + + model://cessna/meshes/right_flap.dae + + + 10 + + + + + + + + + + + + + + + + + model://cessna/meshes/right_flap.dae + + + + 0 + 0 + 0 + + + + 2 + + 1.5008 + 0 + 0.0274 + 0 + 0 + 1.5266 + + -5.75 0 0.57 0 -0 0 + + + + + model://cessna/meshes/elevators.dae + + + 10 + + + + + + + + + + + + + + + + + model://cessna/meshes/elevators.dae + + + + 0 + 0 + 0 + + + + 2 + + 0.4708 + 0 + 0.5208 + 0 + 0 + 0.0508 + + -6.1 0 1.3 0 -0.35 0 + + + + + model://cessna/meshes/rudder.dae + + + 10 + + + + + + + + + + + + + + + + + model://cessna/meshes/rudder.dae + + + + 0 + 0 + 0 + + + 1.79 0 0.855 0 -0 0 + + 18.37 + + 7.5067 + 0 + 7.515 + 0 + 0 + 0.068275 + + -0.35 0 0 0 -0 0 + + + + + model://cessna/meshes/cessna_prop.dae + + + 10 + + + + + + + + + + + + + + + + + model://cessna/meshes/cessna_prop.dae + + + + 0 + 0 + 0 + + + + 2 + + 0.01786 + 0 + 0.01786 + 0 + 0 + 0.0324 + + 0.712 0 -0.313 1.57079 -0 0 + + + 0.712 0 -0.313 1.57079 -0 0 + + + 0.18 + 0.1 + + + 10 + + + + + + + + + + + + + + + + + model://cessna/meshes/cessna_front_wheel.dae + + + + 0 + 0 + 0 + + + + 2 + + 0.035516 + 0 + 0.035516 + 0 + 0 + 0.0625 + + -1 1.27 -0.25 1.57079 -0 0 + + + -1 1.27 -0.25 1.57079 -0 0 + + + 0.25 + 0.16 + + + 10 + + + + + + + + + + + + + + + + + model://cessna/meshes/cessna_rear_left_wheel.dae + + + + 0 + 0 + 0 + + + + 2 + + 0.035516 + 0 + 0.035516 + 0 + 0 + 0.0625 + + -1 -1.27 -0.25 1.57079 -0 0 + + + -1 -1.27 -0.25 1.57079 -0 0 + + + 0.25 + 0.16 + + + 10 + + + + + + + + + + + + + + + + + model://cessna/meshes/cessna_rear_right_wheel.dae + + + + 0 + 0 + 0 + + + body + left_flap + -1.6 1.55 1.43 0.02 -0 0 + + 0 1 0 + + -0.53 + 0.53 + -1 + -1 + + + 1 + 0 + 0 + + 0 + + + + 1 + + 0 + 0.2 + + + + + + body + left_aileron + -1.45 3.7 1.5 0.05 -0 -0.12 + + 0 1 0 + + -0.53 + 0.53 + -1 + -1 + + + 1 + 0 + 0 + + 0 + + + + 1 + + 0 + 0.2 + + + + + + body + right_flap + -1.6 -1.55 1.43 -0.02 0 0 + + 0 1 0 + + -0.53 + 0.53 + -1 + -1 + + + 1 + 0 + 0 + + 0 + + + + 1 + + 0 + 0.2 + + + + + + body + right_aileron + -1.45 -3.7 1.5 -0.05 -0 0.12 + + 0 1 0 + + -0.53 + 0.53 + -1 + -1 + + + 1 + 0 + 0 + + 0 + + + + 1 + + 0 + 0.2 + + + + + + body + elevators + -5.55 0 0.57 0 -0 0 + + 0 1 0 + + -0.53 + 0.53 + -1 + -1 + + + 1 + 0 + 0 + + 0 + + + + 1 + + 0 + 0.2 + + + + + + body + rudder + -5.9 0 1.3 0 -0.35 0 + + 0 0 1 + + -0.53 + 0.53 + -1 + -1 + + + 1 + 0 + 0 + + 0 + + + + 1 + + 0 + 0.2 + + + + + + body + propeller + + 1 0 0 + + -1e+12 + 1e+12 + -1 + -1 + + + 0.001 + 0 + 0 + + 0 + + + + 1 + + 0 + 0.2 + + + + + + body + front_wheel + 0.712 0 -0.313 0 -0 0 + + 0 1 0 + + -1e+12 + 1e+12 + -1 + -1 + + + 0.01 + 0 + 0 + + 0 + + + + 1 + + 0 + 0.2 + + + + + + body + rear_left_wheel + -1 -1.27 -0.25 0 -0 0 + + 0 1 0 + + -1e+12 + 1e+12 + -1 + -1 + + + 0.01 + 0 + 0 + + 0 + + + + 1 + + 0 + 0.2 + + + + + + body + rear_right_wheel + -1 1.27 -0.25 0 -0 0 + + 0 1 0 + + -1e+12 + 1e+12 + -1 + -1 + + + 0.01 + 0 + 0 + + 0 + + + + 1 + + 0 + 0.2 + + + + + + + 4.01686 -1.03557 3 0 -0 0 + 1 + + 0 0 0 1.57 -0 1.57 + + + + 3 0 + 0.6 -3 + 0.6 -1.6 + -3 -1.6 + -3 1.6 + 0.6 1.6 + 0.6 3 + 3 0 + 0.6 + + + + + + + 0 + 0 + 0 + + + + 24.0343 3.49866 1 0 -0 0 + 0.5 0.5 0.5 1 + 0.1 0.1 0.1 1 + 0.1 0.1 -0.9 + + 20 + 0.5 + 0.01 + 0.001 + + 1 + + + -70.5235 -10.3411 1 0 -0 0 + 0.5 0.5 0.5 1 + 0.1 0.1 0.1 1 + + 20 + 0.5 + 0.01 + 0.001 + + 0 + 0 0 -1 + + + + + 720 + + 140 + 0 + 550 + 0 + 0 + 550 + + 0.1 0 0.4 0 -0 0 + + + 1 + 1000 + + mud_seat + __default_topic__ + + + 0 + 0 + 0 + 0 0 0 0 -0 0 + + 0 0 0 0 0 -1.5708 + + + model://rover/meshes/polaris.dae + + Body +
0
+
+
+
+ + + + + 0 + 1 +
+ + -1 0 1.0323 0 0 -1.5707 + + + model://rover/meshes/polaris.dae + + Bed +
1
+
+
+
+ + + + + 0 + 1 +
+ + -1.492 0 1.03 0 0 -1.5707 + + + model://rover/meshes/polaris.dae + + Tail_Gate +
1
+
+
+
+ + + + + 0 + 1 +
+ + 1.12 -0.57488 0.35516 3.1415 -0 1.5707 + + + model://rover/meshes/polaris.dae + + Brake_Front_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 1.12 0.57488 0.35516 3.1415 -0 1.5707 + + + model://rover/meshes/polaris.dae + + Brake_Front_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0.55 -0.1 0.4 0 -0 0 + + + 0.6 0.15 0.1 + + + + + + + 0 + 1 + + + 0.7 -0.05 0.45 0 -0.5 0 + + + 0.2 0.05 0.1 + + + + + + + 0 + 1 + + + 0.798 -0.125 0.478 0 -0.8 0 + + + 0.129 0.1 0.05 + + + + + + + 0 + 1 + + + 0.8135 -0.05 0.45 0 -0 0 + + + 0.1 0.05 0.1835 + + + + + + + 0 + 1 + + + 0.84 -0.125 0.45 0 -0 0 + + + 0.03 0.1 0.1835 + + + + + + + 0 + 1 + + + 0.82 -0.125 0.475 0 -0 0 + + + 0.03 0.1 0.05 + + + + + + + 0 + 1 + + + 0 + 10 + 0 0 0.62 0 -0 0 + + + 0.52167 1.37206 0.53369 + + + + + + + + + + + + + + + + + 0 + 10 + 0.2 0 0.335 0 -0 0 + + + 1.34 1.65746 0.06 + + + + + + + + + + + + + + + + + 0 + 10 + -1 0 0.921 0 -0 0 + + + 1.04609 1.6998 0.01 + + + + + + + + + + + + + + + + + 0 + 10 + -1.465 0 1.06 0 -0 0 + + + 0.05 1.69982 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.495 0 1.06 0 -0 0 + + + 0.05 1.69982 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.97 0.82491 1.06 0 -0 0 + + + 1.04609 0.05 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.97 -0.82491 1.06 0 -0 0 + + + 1.04609 0.05 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + 0 0 0.86 0 -0 0 + + + 0.52167 1.3 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.26 0 1.125 0 -0.2 0 + + + 0.06 1.37206 0.6 + + + + + + + + + + + + + + + + + 0 + 10 + 1.12 0 0.7 0 -0 0 + + + 0.58 1.3 0.8 + + + + + + + + + + + + + + + + + 0 + 10 + -0.02 0.76 1.936 3.14159 1.54159 3.14159 + + + 0.03 + 0.68 + + + + + + + + + + + + + + + + + 0 + 10 + -0.02 -0.76 1.936 3.14159 1.54159 3.14159 + + + 0.03 + 0.68 + + + + + + + + + + + + + + + + + 0 + 10 + 0.315 0 1.93 0 -1 0 + + + 0.01299 1.54 0.10226 + + + + + + + + + + + + + + + + + 0 + 10 + -0.41 0 1.88 0 -0 0 + + + 0.01299 1.54 0.10226 + + + + + + + + + + + + + + + + + 0 + 10 + 0.602 0.755 1.45 0 -0.54 0 + + + 0.03 + 1.15 + + + + + + + + + + + + + + + + + 0 + 10 + 0.602 -0.755 1.45 0 -0.54 0 + + + 0.03 + 1.15 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 0.755 1.45 0 -0 0 + + + 0.03 + 1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 -0.755 1.45 0 -0 0 + + + 0.03 + 1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.411 0.04 1.445 0.397 -0 0 + + + 0.01392 1.55724 0.078 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 -0.04 1.445 -0.397 0 0 + + + 0.01392 1.55724 0.078 + + + + + + + + + + + + + + + + + 0 + 10 + 0.55 -0.1 0.4 0 -0 0 + + + 0.6 0.15 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + 0.7 -0.05 0.45 0 -0.5 0 + + + 0.2 0.05 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + 0.798 -0.125 0.478 0 -0.8 0 + + + 0.129 0.1 0.05 + + + + + + + + + + + + + + + + + 0 + 10 + 0.8135 -0.05 0.45 0 -0 0 + + + 0.1 0.05 0.1835 + + + + + + + + + + + + + + + + + 0 + 10 + 0.84 -0.125 0.45 0 -0 0 + + + 0.03 0.1 0.1835 + + + + + + + + + + + + + + + + + 0 + 10 + 0.82 -0.125 0.475 0 -0 0 + + + 0.03 0.1 0.05 + + + + + + + + + + + + + + + + + + 1.20223 0.71562 0.34697 -1.52 -0 -0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 -3e-06 1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheel_Front_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 1.20223 0.5 0.35515 1.5708 -0 0 + + 1 + + 0.01 + 0 + 0.01 + 0 + 0 + 0.01 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.05 + 0.01 + + + + + + + + + + + + + + + + + + 1.20223 -0.71562 0.34697 1.52 -0 0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheel_Front_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 1.20223 -0.5 0.35515 1.5708 -0 0 + + 1 + + 0.01 + 0 + 0.01 + 0 + 0 + 0.01 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.05 + 0.01 + + + + + + + + + + + + + + + + + + -0.99377 0.71562 0.34697 -1.52 -0 -0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheels_Rear_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + -0.99377 -0.71562 0.34697 1.52 -0 0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheels_Rear_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 0 0 0 0 -0 0 + + 0 0 0 0 -0 0 + 0.015 + + 1e-05 + 0 + 0 + 1e-05 + 0 + 1e-05 + + + 0 + 0 + 0 + + + base_link + front_left_wheel_steering_block + 0 0 0 0 -0 0 + + 0 0 1 + 1 + + -0.7727 + 0.7727 + -1 + -1 + + + 0 + 0 + 50 + 0 + + + + + + 0 + 0.9 + + + 0 + 0.2 + + + + + + front_left_wheel_steering_block + front_left_wheel + 0 0 0 0 -0 0 + + 0 1 0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + front_right_wheel_steering_block + 0 0 0 0 -0 0 + + 0 0 1 + 1 + + -0.7727 + 0.7727 + -1 + -1 + + + 0 + 0 + 50 + 0 + + + + + + 0 + 0.9 + + + 0 + 0.2 + + + + + + front_right_wheel_steering_block + front_right_wheel + 0 0 0 0 -0 0 + + 0 1 -0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rear_left_wheel + 0 0 0 0 -0 0 + + 0 1 0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rear_right_wheel + 0 0 -0.1 0 -0 0 + + 0 1 -0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rover/imu_link + 0 0 0 0 -0 0 + + 1 0 0 + 1 + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + 1 + 0 + 1.74482 15.0544 -0.161234 0 0 -3.13968 +
+ + + + 720 + + 140 + 0 + 550 + 0 + 0 + 550 + + 0.1 0 0.4 0 -0 0 + + + 1 + 1000 + + mud_seat + __default_topic__ + + + 0 + 0 + 0 + 0 0 0 0 -0 0 + + 0 0 0 0 0 -1.5708 + + + model://rover/meshes/polaris.dae + + Body +
0
+
+
+
+ + + + + 0 + 1 +
+ + -1 0 1.0323 0 0 -1.5707 + + + model://rover/meshes/polaris.dae + + Bed +
1
+
+
+
+ + + + + 0 + 1 +
+ + -1.492 0 1.03 0 0 -1.5707 + + + model://rover/meshes/polaris.dae + + Tail_Gate +
1
+
+
+
+ + + + + 0 + 1 +
+ + 1.12 -0.57488 0.35516 3.1415 -0 1.5707 + + + model://rover/meshes/polaris.dae + + Brake_Front_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 1.12 0.57488 0.35516 3.1415 -0 1.5707 + + + model://rover/meshes/polaris.dae + + Brake_Front_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0.55 -0.1 0.4 0 -0 0 + + + 0.6 0.15 0.1 + + + + + + + 0 + 1 + + + 0.7 -0.05 0.45 0 -0.5 0 + + + 0.2 0.05 0.1 + + + + + + + 0 + 1 + + + 0.798 -0.125 0.478 0 -0.8 0 + + + 0.129 0.1 0.05 + + + + + + + 0 + 1 + + + 0.8135 -0.05 0.45 0 -0 0 + + + 0.1 0.05 0.1835 + + + + + + + 0 + 1 + + + 0.84 -0.125 0.45 0 -0 0 + + + 0.03 0.1 0.1835 + + + + + + + 0 + 1 + + + 0.82 -0.125 0.475 0 -0 0 + + + 0.03 0.1 0.05 + + + + + + + 0 + 1 + + + 0 + 10 + 0 0 0.62 0 -0 0 + + + 0.52167 1.37206 0.53369 + + + + + + + + + + + + + + + + + 0 + 10 + 0.2 0 0.335 0 -0 0 + + + 1.34 1.65746 0.06 + + + + + + + + + + + + + + + + + 0 + 10 + -1 0 0.921 0 -0 0 + + + 1.04609 1.6998 0.01 + + + + + + + + + + + + + + + + + 0 + 10 + -1.465 0 1.06 0 -0 0 + + + 0.05 1.69982 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.495 0 1.06 0 -0 0 + + + 0.05 1.69982 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.97 0.82491 1.06 0 -0 0 + + + 1.04609 0.05 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.97 -0.82491 1.06 0 -0 0 + + + 1.04609 0.05 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + 0 0 0.86 0 -0 0 + + + 0.52167 1.3 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.26 0 1.125 0 -0.2 0 + + + 0.06 1.37206 0.6 + + + + + + + + + + + + + + + + + 0 + 10 + 1.12 0 0.7 0 -0 0 + + + 0.58 1.3 0.8 + + + + + + + + + + + + + + + + + 0 + 10 + -0.02 0.76 1.936 3.14159 1.54159 3.14159 + + + 0.03 + 0.68 + + + + + + + + + + + + + + + + + 0 + 10 + -0.02 -0.76 1.936 3.14159 1.54159 3.14159 + + + 0.03 + 0.68 + + + + + + + + + + + + + + + + + 0 + 10 + 0.315 0 1.93 0 -1 0 + + + 0.01299 1.54 0.10226 + + + + + + + + + + + + + + + + + 0 + 10 + -0.41 0 1.88 0 -0 0 + + + 0.01299 1.54 0.10226 + + + + + + + + + + + + + + + + + 0 + 10 + 0.602 0.755 1.45 0 -0.54 0 + + + 0.03 + 1.15 + + + + + + + + + + + + + + + + + 0 + 10 + 0.602 -0.755 1.45 0 -0.54 0 + + + 0.03 + 1.15 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 0.755 1.45 0 -0 0 + + + 0.03 + 1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 -0.755 1.45 0 -0 0 + + + 0.03 + 1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.411 0.04 1.445 0.397 -0 0 + + + 0.01392 1.55724 0.078 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 -0.04 1.445 -0.397 0 0 + + + 0.01392 1.55724 0.078 + + + + + + + + + + + + + + + + + 0 + 10 + 0.55 -0.1 0.4 0 -0 0 + + + 0.6 0.15 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + 0.7 -0.05 0.45 0 -0.5 0 + + + 0.2 0.05 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + 0.798 -0.125 0.478 0 -0.8 0 + + + 0.129 0.1 0.05 + + + + + + + + + + + + + + + + + 0 + 10 + 0.8135 -0.05 0.45 0 -0 0 + + + 0.1 0.05 0.1835 + + + + + + + + + + + + + + + + + 0 + 10 + 0.84 -0.125 0.45 0 -0 0 + + + 0.03 0.1 0.1835 + + + + + + + + + + + + + + + + + 0 + 10 + 0.82 -0.125 0.475 0 -0 0 + + + 0.03 0.1 0.05 + + + + + + + + + + + + + + + + + + 1.20223 0.71562 0.34697 -1.52 -0 -0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 -3e-06 1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheel_Front_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 1.20223 0.5 0.35515 1.5708 -0 0 + + 1 + + 0.01 + 0 + 0.01 + 0 + 0 + 0.01 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.05 + 0.01 + + + + + + + + + + + + + + + + + + 1.20223 -0.71562 0.34697 1.52 -0 0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheel_Front_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 1.20223 -0.5 0.35515 1.5708 -0 0 + + 1 + + 0.01 + 0 + 0.01 + 0 + 0 + 0.01 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.05 + 0.01 + + + + + + + + + + + + + + + + + + -0.99377 0.71562 0.34697 -1.52 -0 -0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheels_Rear_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + -0.99377 -0.71562 0.34697 1.52 -0 0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheels_Rear_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 0 0 0 0 -0 0 + + 0 0 0 0 -0 0 + 0.015 + + 1e-05 + 0 + 0 + 1e-05 + 0 + 1e-05 + + + 0 + 0 + 0 + + + base_link + front_left_wheel_steering_block + 0 0 0 0 -0 0 + + 0 0 1 + 1 + + -0.7727 + 0.7727 + -1 + -1 + + + 0 + 0 + 50 + 0 + + + + + + 0 + 0.9 + + + 0 + 0.2 + + + + + + front_left_wheel_steering_block + front_left_wheel + 0 0 0 0 -0 0 + + 0 1 0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + front_right_wheel_steering_block + 0 0 0 0 -0 0 + + 0 0 1 + 1 + + -0.7727 + 0.7727 + -1 + -1 + + + 0 + 0 + 50 + 0 + + + + + + 0 + 0.9 + + + 0 + 0.2 + + + + + + front_right_wheel_steering_block + front_right_wheel + 0 0 0 0 -0 0 + + 0 1 -0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rear_left_wheel + 0 0 0 0 -0 0 + + 0 1 0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rear_right_wheel + 0 0 -0.1 0 -0 0 + + 0 1 -0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rover/imu_link + 0 0 0 0 -0 0 + + 1 0 0 + 1 + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + 1 + 0 + 1.85051 12.0935 -0.161234 0 0 -3.13968 +
+ + 1 + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + 10 + + + + + + + + + + + + + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + + 0 + 0 + 0 + + 50.1047 -5.16824 0.15 0 -0 0 + + + 1 + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + 10 + + + + + + + + + + + + + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + + 0 + 0 + 0 + + 35.1055 4.87588 0.15 0 -0 0 + + + 1 + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + 10 + + + + + + + + + + + + + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + + 0 + 0 + 0 + + 39.8693 -39.227 0.15 0 -0 0 + + + 1 + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + 10 + + + + + + + + + + + + + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + + 0 + 0 + 0 + + 22.3117 -40.1336 0.15 0 -0 0 + + + 1 + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + 10 + + + + + + + + + + + + + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + + 0 + 0 + 0 + + 6.82536 -39.9421 0.15 0 -0 0 + + + 1 + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + 10 + + + + + + + + + + + + + + + + + model://fire_hydrant/meshes/fire_hydrant.dae + + + + 0 + 0 + 0 + + -3.54695 -40.9334 0.15 0 -0 0 + + + 1 + + + + + model://stop_sign/meshes/stop_sign.dae + + + 10 + + + + + + + + + + + + + + + + + model://stop_sign/meshes/stop_sign.dae + + + + + + + 0 + 0 + 0 + + -11.0955 3.92021 0 0 -0 3.14 + + + 1 + + + + + model://stop_sign/meshes/stop_sign.dae + + + 10 + + + + + + + + + + + + + + + + + model://stop_sign/meshes/stop_sign.dae + + + + + + + 0 + 0 + 0 + + 10.9133 -4.26207 0 0 -0 3.14 + + 0 0 -9.8066 + 6e-06 2.3e-05 -4.2e-05 + + + 0 0 0 0 -0 0 + + 0.001005 0 -0.009004 0 -0 0 + 2.02 + + 0.011 + 0 + 0 + 0.015 + 0 + 0.021 + + + + 0 0 0 0 -0 0 + + + 0.67 0.67 0.15 + + + + + + 0.001 + 0 + + + + + + + + + + + 10 + + + 0 0 0 0 -0 3.14159 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/main_body_remeshed_v3.stl + + + + + + + 1 + + 0 + 0 + 0 + + + + -0.041 0 -0.162 0 -0 0 + 0.1 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + 0 0 0 0 -0 0 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/cgo3_mount_remeshed_v1.stl + + + + + + + 0 + 0 + 0 + + + cgo3_mount_link + base_link + 0 0 0 0 -0 0 + + 0 0 1 + + 0 + 0 + 100 + -1 + + + 1 + 0 + 0 + + 1 + + + + 1 + + 0 + 0.2 + + + + + + + -0.041 0 -0.162 0 -0 0 + 0.1 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + -0.051 0 0 0 -0 3.14159 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/cgo3_vertical_arm_remeshed_v1.stl + + + + + + + 0 + 0 + 0 + + + cgo3_vertical_arm_link + cgo3_mount_link + -0.026 0 -0.1 0 -0 0 + + 0 0 1 + + -1e+16 + 1e+16 + 100 + -1 + + + 0.1 + 0 + 0 + + 1 + + + + 1 + + 0.1 + 0.2 + + + + + + + -0.041 0 -0.081 0 -0 0 + 0.1 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + -0.05 0 0 0 -0 3.14159 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/cgo3_horizontal_arm_remeshed_v1.stl + + + + + + + 0 + 0 + 0 + + + cgo3_horizontal_arm_link + cgo3_vertical_arm_link + -0.07 0 -0.162 0 -0 0 + + -1 0 0 + + -0.785398 + 0.785398 + 100 + -1 + + + 0.1 + 0 + 0 + + 1 + + + + 1 + + 0.1 + 0.2 + + + + + + + -0.041 0 -0.162 0 -0 0 + 0.1 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + -0.041 0 -0.162 0 -0 0 + + + 0.035 + + + + + + 1 + 1 + + + + + + + + 1e+08 + 1 + 0.01 + 0.001 + + + + + 10 + + + -0.05 0 0 0 -0 3.14159 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/cgo3_camera_remeshed_v1.stl + + + + + + + + 1 + + + + 0 0 -0.162 0 -0 0 + + 2 + + R8G8B8 + 640 + 360 + + + 0.05 + 15000 + + + 1 + 10 + 0 + + + 1 + 30 + /cgo3_camera + image_raw + camera_info + cgo3_camera_optical_frame + 0.0 + 0.0 + 0.0 + 0.0 + 0.0 + 0.0 + + + 0 + 0 + 0 + + + cgo3_camera_link + cgo3_horizontal_arm_link + -0.01 0.03 -0.162 0 -0 0 + + 0 -1 0 + + -1.05 + 2.09 + 100 + -1 + + + 0.1 + 0 + 0 + + 1 + + + + 1 + + 0.1 + 0.2 + + + + + + + 0 -0.14314 -0.207252 0 -0 0 + 0.1 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + -0.005 -0.14314 -0.207252 0 1.56893 0 + + + 0.012209 + 0.3 + + + + + + 1 + 1 + + + + + + + + 1e+08 + 1 + 0.01 + 0.001 + + + + + 10 + + + 0.00052 -0.08503 -0.121187 -0.501318 0 0 + + + 0.00914984 + 0.176893 + + + + + + 1 + 1 + + + + + + + + 1e+08 + 1 + 0.01 + 0.001 + + + + + 10 + + + 0 0 0 0 -0 0 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/leg2_remeshed_v3.stl + + + + + + + 0 + 0 + 0 + + + left_leg + base_link + 0.00026 -0.040515 -0.048 0 -0 0 + + -1 0 0 + + 0 + 1 + 100 + -1 + 1e+08 + 1 + + + 0.1 + 0 + 0 + + 1 + + + + 1 + + 0 + 0.2 + + + + + + 0 0 0 0 -0 0 + + 0 0.14314 -0.207252 0 -0 0 + 0.1 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + -0.005 0.14314 -0.207252 0 1.56893 0 + + + 0.012209 + 0.3 + + + + + + 1 + 1 + + + + + + + + 1e+08 + 1 + 0.01 + 0.001 + + + + + 10 + + + 0.00052 0.08503 -0.121187 0.501318 -0 0 + + + 0.00914984 + 0.176893 + + + + + + 1 + 1 + + + + + + + + 1e+08 + 1 + 0.01 + 0.001 + + + + + 10 + + + 0 0 0 0 -0 0 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/leg1_remeshed_v3.stl + + + + + + + 0 + 0 + 0 + + + right_leg + base_link + 0.00026 0.040515 -0.048 0 -0 0 + + 1 0 0 + + 0 + 1 + 100 + -1 + 1e+08 + 1 + + + 0.1 + 0 + 0 + + 1 + + + + 1 + + 0 + 0.2 + + + + + + 0 0 0 0 -0 0 + + 0 0 0 0 -0 0 + 0.015 + + 1e-05 + 0 + 0 + 1e-05 + 0 + 1e-05 + + + 0 + 0 + 0 + + + typhoon_h480/imu_link + base_link + + 1 0 0 + + 0 + 0 + 0 + 0 + + + 0 + 0 + + 1 + + + + 0.211396 0.119762 0.082219 0 -0 0 + + 0 0 0 0 -0 0 + 0.005 + + 9.75e-07 + 0 + 0 + 0.000273104 + 0 + 0.000274004 + + + + 0 0 0 0 -0 0 + + + 0.005 + 0.128 + + + + + + + + + + + + + + + 10 + + + -0.211396 -0.119762 -0.082219 0 -0 0 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/prop_ccw_assembly_remeshed_v3.stl + + + + + + + 1 + + 0 + 0 + 0 + + + rotor_3 + base_link + + 0 0 1 + + -1e+16 + 1e+16 + 10 + -1 + + + 0.005 + 0 + 0 + + 1 + + + + 1 + + 0 + 0.2 + + + + + + -0.209396 0.122762 0.082219 0 -0 2.0944 + + 0 0 0 0 -0 0 + 0.005 + + 9.75e-07 + 0 + 0 + 0.000273104 + 0 + 0.000274004 + + + + 0 0 0 0 -0 0 + + + 0.005 + 0.128 + + + + + + + + + + + + + + + 10 + + + -0.211396 -0.119762 -0.082219 0 -0 0 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/prop_ccw_assembly_remeshed_v3.stl + + + + + + + 1 + + 0 + 0 + 0 + + + rotor_0 + base_link + + 0 0 1 + + -1e+16 + 1e+16 + 10 + -1 + + + 0.005 + 0 + 0 + + 1 + + + + 1 + + 0 + 0.2 + + + + + + -0.001879 0.242705 0.082217 0 -0 0 + + 0 0 0 0 -0 0 + 0.005 + + 9.75e-07 + 0 + 0 + 0.000273104 + 0 + 0.000274004 + + + + 0 0 0 0 -0 0 + + + 0.005 + 0.128 + + + + + + + + + + + + + + + 10 + + + 0.001879 -0.242705 -0.082217 0 -0 0 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/prop_cw_assembly_remeshed_v3.stl + + + + + + + 1 + + 0 + 0 + 0 + + + rotor_4 + base_link + + 0 0 1 + + -1e+16 + 1e+16 + 10 + -1 + + + 0.005 + 0 + 0 + + 1 + + + + 1 + + 0 + 0.2 + + + + + + 0.211396 -0.119762 0.082219 0 0 -2.0944 + + 0 0 0 0 -0 0 + 0.005 + + 9.75e-07 + 0 + 0 + 0.000273104 + 0 + 0.000274004 + + + + 0 0 0 0 -0 0 + + + 0.005 + 0.128 + + + + + + + + + + + + + + + 10 + + + 0.001879 -0.242705 -0.082217 0 -0 0 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/prop_cw_assembly_remeshed_v3.stl + + + + + + + 1 + + 0 + 0 + 0 + + + rotor_1 + base_link + + 0 0 1 + + -1e+16 + 1e+16 + 10 + -1 + + + 0.005 + 0 + 0 + + 1 + + + + 1 + + 0 + 0.2 + + + + + + -0.001879 -0.242705 0.082217 0 0 -2.0944 + + 0 0 0 0 -0 0 + 0.005 + + 9.75e-07 + 0 + 0 + 0.000273104 + 0 + 0.000274004 + + + + 0 0 0 0 -0 0 + + + 0.005 + 0.128 + + + + + + + + + + + + + + + 10 + + + -0.211396 -0.119762 -0.082219 0 -0 0 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/prop_ccw_assembly_remeshed_v3.stl + + + + + + + 1 + + 0 + 0 + 0 + + + rotor_5 + base_link + + 0 0 1 + + -1e+16 + 1e+16 + 10 + -1 + + + 0.005 + 0 + 0 + + 1 + + + + 1 + + 0 + 0.2 + + + + + + -0.209396 -0.122762 0.082219 0 -0 2.0944 + + 0 0 0 0 -0 0 + 0.005 + + 9.75e-07 + 0 + 0 + 0.000273104 + 0 + 0.000274004 + + + + 0 0 0 0 -0 0 + + + 0.005 + 0.128 + + + + + + + + + + + + + + + 10 + + + 0.001879 -0.242705 -0.082217 0 -0 0 + + + 0.001 0.001 0.001 + model://typhoon_h480/meshes/prop_cw_assembly_remeshed_v3.stl + + + + + + + 1 + + 0 + 0 + 0 + + + rotor_2 + base_link + + 0 0 1 + + -1e+16 + 1e+16 + 10 + -1 + + + 0.005 + 0 + 0 + + 1 + + + + 1 + + 0 + 0.2 + + + + + + 0.08 0 -0.03 0 -0 3.14159 + + 0 0 0 0 -0 0 + 1e-15 + + 2.08333e-07 + 0 + 0 + 2.08333e-07 + 0 + 4.16667e-08 + + + + + + 0.005 0.015 0.005 + + + + + + + + 0 0 0 0 1.57 0 + + 0.02 + 5 + 1.33974 + + + + + 1 + 20 + 0 + + 0 + 0 + 0 + + + sonar::link + typhoon_h480::base_link + + 0 0 1 + + 0 + 0 + + 0 + + 0 + 0 + + + + + + base_link + 10 + + + + rotor_0_joint + rotor_0 + cw + 0.0125 + 0.025 + 1500 + 8.54858e-06 + 0.06 + /gazebo/command/motor_speed + 5 + 0.000806428 + 1e-06 + /motor_speed/5 + 10 + + + + rotor_1_joint + rotor_1 + ccw + 0.0125 + 0.025 + 1500 + 8.54858e-06 + 0.06 + /gazebo/command/motor_speed + 4 + 0.000806428 + 1e-06 + /motor_speed/4 + 10 + + + + rotor_2_joint + rotor_2 + ccw + 0.0125 + 0.025 + 1500 + 8.54858e-06 + 0.06 + /gazebo/command/motor_speed + 3 + 0.000806428 + 1e-06 + /motor_speed/3 + 10 + + + + rotor_3_joint + rotor_3 + cw + 0.0125 + 0.025 + 1500 + 8.54858e-06 + 0.06 + /gazebo/command/motor_speed + 2 + 0.000806428 + 1e-06 + /motor_speed/2 + 10 + + + + rotor_4_joint + rotor_4 + ccw + 0.0125 + 0.025 + 1500 + 8.54858e-06 + 0.06 + /gazebo/command/motor_speed + 1 + 0.000806428 + 1e-06 + /motor_speed/1 + 10 + + + + rotor_5_joint + rotor_5 + cw + 0.0125 + 0.025 + 1500 + 8.54858e-06 + 0.06 + /gazebo/command/motor_speed + 0 + 0.000806428 + 1e-06 + /motor_speed/0 + 10 + + + + 1 + + + + 100 + 0.0004 + 6.4e-06 + 600 + /mag + + + + 50 + /baro + + + + /imu + /gps + /mag + /baro + INADDR_ANY + 14560 + 4560 + 0 + /dev/ttyACM0 + 921600 + INADDR_ANY + 14550 + INADDR_ANY + 14540 + 0 + 0 + 1 + 1 + /gazebo/command/motor_speed + + + 0 + 0 + 1500 + 0 + 100 + velocity + + + 1 + 0 + 1500 + 0 + 100 + velocity + + + 2 + 0 + 1500 + 0 + 100 + velocity + + + 3 + 0 + 1500 + 0 + 100 + velocity + + + 4 + 0 + 1500 + 0 + 100 + velocity + + + 5 + 0 + 1500 + 0 + 100 + velocity + + + 6 + 0 + -3.1415 + 0 + 0 + position_gztopic + /gimbal_roll_cmd + cgo3_camera_joint + + + 7 + 0 + -3.1415 + 0 + 0 + position_gztopic + /gimbal_pitch_cmd + cgo3_camera_joint + + + 8 + 0 + -3.1415 + 0 + 0 + position_gztopic + /gimbal_yaw_cmd + cgo3_vertical_arm_joint + + + 9 + 1 + 0.5 + 0 + 0 + position + +

3.5

+ 0.5 + 0 + 4 + -4 + 6 + -6 +
+ left_leg_joint +
+ + 10 + 1 + 0.5 + 0 + 0 + position + +

3.5

+ 0.5 + 0 + 4 + -4 + 6 + -6 +
+ right_leg_joint +
+
+
+ 0 + + + typhoon_h480/imu_link + /imu + 0.0003394 + 3.8785e-05 + 1000.0 + 0.0087 + 0.004 + 0.006 + 300.0 + 0.196 + + + cgo3_vertical_arm_joint + cgo3_horizontal_arm_joint + cgo3_camera_joint + + + +

0.6

+ 0.1 + 0.02 + 0 + 0 + 1.0 + -1.0 +
+ joint_yaw +
+ + +

0.8

+ 0.035 + 0.02 + 0 + 0 + 0.3 + -0.3 +
+ joint_roll +
+ + +

2.068

+ 0.01245 + 0.01 + 0 + 0 + 0.3 + -0.3 +
+ joint_pitch +
+
+ camera_imu + / +
+ 0 0 0.26 0 -0 0 +
+ + + + 720 + + 140 + 0 + 550 + 0 + 0 + 550 + + 0.1 0 0.4 0 -0 0 + + + 1 + 1000 + + mud_seat + __default_topic__ + + + 0 + 0 + 0 + 0 0 0 0 -0 0 + + 0 0 0 0 0 -1.5708 + + + model://rover/meshes/polaris.dae + + Body +
0
+
+
+
+ + + + + 0 + 1 +
+ + -1 0 1.0323 0 0 -1.5707 + + + model://rover/meshes/polaris.dae + + Bed +
1
+
+
+
+ + + + + 0 + 1 +
+ + -1.492 0 1.03 0 0 -1.5707 + + + model://rover/meshes/polaris.dae + + Tail_Gate +
1
+
+
+
+ + + + + 0 + 1 +
+ + 1.12 -0.57488 0.35516 3.1415 -0 1.5707 + + + model://rover/meshes/polaris.dae + + Brake_Front_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 1.12 0.57488 0.35516 3.1415 -0 1.5707 + + + model://rover/meshes/polaris.dae + + Brake_Front_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0.55 -0.1 0.4 0 -0 0 + + + 0.6 0.15 0.1 + + + + + + + 0 + 1 + + + 0.7 -0.05 0.45 0 -0.5 0 + + + 0.2 0.05 0.1 + + + + + + + 0 + 1 + + + 0.798 -0.125 0.478 0 -0.8 0 + + + 0.129 0.1 0.05 + + + + + + + 0 + 1 + + + 0.8135 -0.05 0.45 0 -0 0 + + + 0.1 0.05 0.1835 + + + + + + + 0 + 1 + + + 0.84 -0.125 0.45 0 -0 0 + + + 0.03 0.1 0.1835 + + + + + + + 0 + 1 + + + 0.82 -0.125 0.475 0 -0 0 + + + 0.03 0.1 0.05 + + + + + + + 0 + 1 + + + 0 + 10 + 0 0 0.62 0 -0 0 + + + 0.52167 1.37206 0.53369 + + + + + + + + + + + + + + + + + 0 + 10 + 0.2 0 0.335 0 -0 0 + + + 1.34 1.65746 0.06 + + + + + + + + + + + + + + + + + 0 + 10 + -1 0 0.921 0 -0 0 + + + 1.04609 1.6998 0.01 + + + + + + + + + + + + + + + + + 0 + 10 + -1.465 0 1.06 0 -0 0 + + + 0.05 1.69982 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.495 0 1.06 0 -0 0 + + + 0.05 1.69982 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.97 0.82491 1.06 0 -0 0 + + + 1.04609 0.05 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.97 -0.82491 1.06 0 -0 0 + + + 1.04609 0.05 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + 0 0 0.86 0 -0 0 + + + 0.52167 1.3 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.26 0 1.125 0 -0.2 0 + + + 0.06 1.37206 0.6 + + + + + + + + + + + + + + + + + 0 + 10 + 1.12 0 0.7 0 -0 0 + + + 0.58 1.3 0.8 + + + + + + + + + + + + + + + + + 0 + 10 + -0.02 0.76 1.936 3.14159 1.54159 3.14159 + + + 0.03 + 0.68 + + + + + + + + + + + + + + + + + 0 + 10 + -0.02 -0.76 1.936 3.14159 1.54159 3.14159 + + + 0.03 + 0.68 + + + + + + + + + + + + + + + + + 0 + 10 + 0.315 0 1.93 0 -1 0 + + + 0.01299 1.54 0.10226 + + + + + + + + + + + + + + + + + 0 + 10 + -0.41 0 1.88 0 -0 0 + + + 0.01299 1.54 0.10226 + + + + + + + + + + + + + + + + + 0 + 10 + 0.602 0.755 1.45 0 -0.54 0 + + + 0.03 + 1.15 + + + + + + + + + + + + + + + + + 0 + 10 + 0.602 -0.755 1.45 0 -0.54 0 + + + 0.03 + 1.15 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 0.755 1.45 0 -0 0 + + + 0.03 + 1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 -0.755 1.45 0 -0 0 + + + 0.03 + 1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.411 0.04 1.445 0.397 -0 0 + + + 0.01392 1.55724 0.078 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 -0.04 1.445 -0.397 0 0 + + + 0.01392 1.55724 0.078 + + + + + + + + + + + + + + + + + 0 + 10 + 0.55 -0.1 0.4 0 -0 0 + + + 0.6 0.15 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + 0.7 -0.05 0.45 0 -0.5 0 + + + 0.2 0.05 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + 0.798 -0.125 0.478 0 -0.8 0 + + + 0.129 0.1 0.05 + + + + + + + + + + + + + + + + + 0 + 10 + 0.8135 -0.05 0.45 0 -0 0 + + + 0.1 0.05 0.1835 + + + + + + + + + + + + + + + + + 0 + 10 + 0.84 -0.125 0.45 0 -0 0 + + + 0.03 0.1 0.1835 + + + + + + + + + + + + + + + + + 0 + 10 + 0.82 -0.125 0.475 0 -0 0 + + + 0.03 0.1 0.05 + + + + + + + + + + + + + + + + + + 1.20223 0.71562 0.34697 -1.52 -0 -0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 -3e-06 1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheel_Front_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 1.20223 0.5 0.35515 1.5708 -0 0 + + 1 + + 0.01 + 0 + 0.01 + 0 + 0 + 0.01 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.05 + 0.01 + + + + + + + + + + + + + + + + + + 1.20223 -0.71562 0.34697 1.52 -0 0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheel_Front_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 1.20223 -0.5 0.35515 1.5708 -0 0 + + 1 + + 0.01 + 0 + 0.01 + 0 + 0 + 0.01 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.05 + 0.01 + + + + + + + + + + + + + + + + + + -0.99377 0.71562 0.34697 -1.52 -0 -0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheels_Rear_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + -0.99377 -0.71562 0.34697 1.52 -0 0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheels_Rear_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 0 0 0 0 -0 0 + + 0 0 0 0 -0 0 + 0.015 + + 1e-05 + 0 + 0 + 1e-05 + 0 + 1e-05 + + + 0 + 0 + 0 + + + base_link + front_left_wheel_steering_block + 0 0 0 0 -0 0 + + 0 0 1 + 1 + + -0.7727 + 0.7727 + -1 + -1 + + + 0 + 0 + 50 + 0 + + + + + + 0 + 0.9 + + + 0 + 0.2 + + + + + + front_left_wheel_steering_block + front_left_wheel + 0 0 0 0 -0 0 + + 0 1 0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + front_right_wheel_steering_block + 0 0 0 0 -0 0 + + 0 0 1 + 1 + + -0.7727 + 0.7727 + -1 + -1 + + + 0 + 0 + 50 + 0 + + + + + + 0 + 0.9 + + + 0 + 0.2 + + + + + + front_right_wheel_steering_block + front_right_wheel + 0 0 0 0 -0 0 + + 0 1 -0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rear_left_wheel + 0 0 0 0 -0 0 + + 0 1 0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rear_right_wheel + 0 0 -0.1 0 -0 0 + + 0 1 -0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rover/imu_link + 0 0 0 0 -0 0 + + 1 0 0 + 1 + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + 1 + 0 + 19.9272 -26.6256 -0.161234 0 -0 1.56166 +
+ + + + 720 + + 140 + 0 + 550 + 0 + 0 + 550 + + 0.1 0 0.4 0 -0 0 + + + 1 + 1000 + + mud_seat + __default_topic__ + + + 0 + 0 + 0 + 0 0 0 0 -0 0 + + 0 0 0 0 0 -1.5708 + + + model://rover/meshes/polaris.dae + + Body +
0
+
+
+
+ + + + + 0 + 1 +
+ + -1 0 1.0323 0 0 -1.5707 + + + model://rover/meshes/polaris.dae + + Bed +
1
+
+
+
+ + + + + 0 + 1 +
+ + -1.492 0 1.03 0 0 -1.5707 + + + model://rover/meshes/polaris.dae + + Tail_Gate +
1
+
+
+
+ + + + + 0 + 1 +
+ + 1.12 -0.57488 0.35516 3.1415 -0 1.5707 + + + model://rover/meshes/polaris.dae + + Brake_Front_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 1.12 0.57488 0.35516 3.1415 -0 1.5707 + + + model://rover/meshes/polaris.dae + + Brake_Front_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0.55 -0.1 0.4 0 -0 0 + + + 0.6 0.15 0.1 + + + + + + + 0 + 1 + + + 0.7 -0.05 0.45 0 -0.5 0 + + + 0.2 0.05 0.1 + + + + + + + 0 + 1 + + + 0.798 -0.125 0.478 0 -0.8 0 + + + 0.129 0.1 0.05 + + + + + + + 0 + 1 + + + 0.8135 -0.05 0.45 0 -0 0 + + + 0.1 0.05 0.1835 + + + + + + + 0 + 1 + + + 0.84 -0.125 0.45 0 -0 0 + + + 0.03 0.1 0.1835 + + + + + + + 0 + 1 + + + 0.82 -0.125 0.475 0 -0 0 + + + 0.03 0.1 0.05 + + + + + + + 0 + 1 + + + 0 + 10 + 0 0 0.62 0 -0 0 + + + 0.52167 1.37206 0.53369 + + + + + + + + + + + + + + + + + 0 + 10 + 0.2 0 0.335 0 -0 0 + + + 1.34 1.65746 0.06 + + + + + + + + + + + + + + + + + 0 + 10 + -1 0 0.921 0 -0 0 + + + 1.04609 1.6998 0.01 + + + + + + + + + + + + + + + + + 0 + 10 + -1.465 0 1.06 0 -0 0 + + + 0.05 1.69982 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.495 0 1.06 0 -0 0 + + + 0.05 1.69982 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.97 0.82491 1.06 0 -0 0 + + + 1.04609 0.05 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + -0.97 -0.82491 1.06 0 -0 0 + + + 1.04609 0.05 0.27 + + + + + + + + + + + + + + + + + 0 + 10 + 0 0 0.86 0 -0 0 + + + 0.52167 1.3 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.26 0 1.125 0 -0.2 0 + + + 0.06 1.37206 0.6 + + + + + + + + + + + + + + + + + 0 + 10 + 1.12 0 0.7 0 -0 0 + + + 0.58 1.3 0.8 + + + + + + + + + + + + + + + + + 0 + 10 + -0.02 0.76 1.936 3.14159 1.54159 3.14159 + + + 0.03 + 0.68 + + + + + + + + + + + + + + + + + 0 + 10 + -0.02 -0.76 1.936 3.14159 1.54159 3.14159 + + + 0.03 + 0.68 + + + + + + + + + + + + + + + + + 0 + 10 + 0.315 0 1.93 0 -1 0 + + + 0.01299 1.54 0.10226 + + + + + + + + + + + + + + + + + 0 + 10 + -0.41 0 1.88 0 -0 0 + + + 0.01299 1.54 0.10226 + + + + + + + + + + + + + + + + + 0 + 10 + 0.602 0.755 1.45 0 -0.54 0 + + + 0.03 + 1.15 + + + + + + + + + + + + + + + + + 0 + 10 + 0.602 -0.755 1.45 0 -0.54 0 + + + 0.03 + 1.15 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 0.755 1.45 0 -0 0 + + + 0.03 + 1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 -0.755 1.45 0 -0 0 + + + 0.03 + 1 + + + + + + + + + + + + + + + + + 0 + 10 + -0.411 0.04 1.445 0.397 -0 0 + + + 0.01392 1.55724 0.078 + + + + + + + + + + + + + + + + + 0 + 10 + -0.4 -0.04 1.445 -0.397 0 0 + + + 0.01392 1.55724 0.078 + + + + + + + + + + + + + + + + + 0 + 10 + 0.55 -0.1 0.4 0 -0 0 + + + 0.6 0.15 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + 0.7 -0.05 0.45 0 -0.5 0 + + + 0.2 0.05 0.1 + + + + + + + + + + + + + + + + + 0 + 10 + 0.798 -0.125 0.478 0 -0.8 0 + + + 0.129 0.1 0.05 + + + + + + + + + + + + + + + + + 0 + 10 + 0.8135 -0.05 0.45 0 -0 0 + + + 0.1 0.05 0.1835 + + + + + + + + + + + + + + + + + 0 + 10 + 0.84 -0.125 0.45 0 -0 0 + + + 0.03 0.1 0.1835 + + + + + + + + + + + + + + + + + 0 + 10 + 0.82 -0.125 0.475 0 -0 0 + + + 0.03 0.1 0.05 + + + + + + + + + + + + + + + + + + 1.20223 0.71562 0.34697 -1.52 -0 -0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 -3e-06 1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheel_Front_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 1.20223 0.5 0.35515 1.5708 -0 0 + + 1 + + 0.01 + 0 + 0.01 + 0 + 0 + 0.01 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.05 + 0.01 + + + + + + + + + + + + + + + + + + 1.20223 -0.71562 0.34697 1.52 -0 0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheel_Front_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 1.20223 -0.5 0.35515 1.5708 -0 0 + + 1 + + 0.01 + 0 + 0.01 + 0 + 0 + 0.01 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.05 + 0.01 + + + + + + + + + + + + + + + + + + -0.99377 0.71562 0.34697 -1.52 -0 -0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheels_Rear_Left +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + -0.99377 -0.71562 0.34697 1.52 -0 0 + + 12 + + 0.5 + 0 + 0.5 + 0 + 0 + 1 + + 0 0 0 0 -0 0 + + 0 + 0 + 0 + + 0 0 0 3.14159 -1.57079 3.14159 + + + model://rover/meshes/polaris.dae + 1.0037 0.8862 0.8862 + + Wheels_Rear_Right +
1
+
+
+
+ + + + + 0 + 1 +
+ + 0 + 1 + 0 0 0 0 -0 0 + + + 0.3175 + 0.2794 + + + + + + + + + + + + + + + + + + 0 0 0 0 -0 0 + + 0 0 0 0 -0 0 + 0.015 + + 1e-05 + 0 + 0 + 1e-05 + 0 + 1e-05 + + + 0 + 0 + 0 + + + base_link + front_left_wheel_steering_block + 0 0 0 0 -0 0 + + 0 0 1 + 1 + + -0.7727 + 0.7727 + -1 + -1 + + + 0 + 0 + 50 + 0 + + + + + + 0 + 0.9 + + + 0 + 0.2 + + + + + + front_left_wheel_steering_block + front_left_wheel + 0 0 0 0 -0 0 + + 0 1 0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + front_right_wheel_steering_block + 0 0 0 0 -0 0 + + 0 0 1 + 1 + + -0.7727 + 0.7727 + -1 + -1 + + + 0 + 0 + 50 + 0 + + + + + + 0 + 0.9 + + + 0 + 0.2 + + + + + + front_right_wheel_steering_block + front_right_wheel + 0 0 0 0 -0 0 + + 0 1 -0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rear_left_wheel + 0 0 0 0 -0 0 + + 0 1 0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rear_right_wheel + 0 0 -0.1 0 -0 0 + + 0 1 -0.05 + 1 + + -1e+16 + 1e+16 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + base_link + rover/imu_link + 0 0 0 0 -0 0 + + 1 0 0 + 1 + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + 1 + 0 + 25.1253 -26.6491 -0.161234 0 -0 1.56166 +
+
+
diff --git a/contributer_demo/demo2/control/keyboard/my_multirotor_keyboard_control.py b/contributer_demo/demo2/control/keyboard/my_multirotor_keyboard_control.py new file mode 100644 index 0000000..b5973d5 --- /dev/null +++ b/contributer_demo/demo2/control/keyboard/my_multirotor_keyboard_control.py @@ -0,0 +1,280 @@ +# encoding: utf-8 +import rospy +from geometry_msgs.msg import Twist +import sys, select, os +import tty, termios +from std_msgs.msg import String + + +MAX_LINEAR = 20 +MAX_ANG_VEL = 3 +LINEAR_STEP_SIZE = 0.1 +ANG_VEL_STEP_SIZE = 0.1 + +cmd_vel_mask = False +ctrl_leader = False #初始 控制所有无人机 + +msg2all = """ +Control Your XTDrone! +To all drones (press g to control the leader) +--------------------------- + 1 2 3 4 5 6 7 8 9 0 + w r t y i + a s d g j k l + x v b n , + +w/x : increase/decrease forward velocity +a/d : increase/decrease leftward velocity +i/, : increase/decrease upward velocity +j/l : increase/decrease orientation +r : return home +t/y : arm/disarm +v/n : takeoff/land +b : offboard +s/k : hover and remove the mask of keyboard control +0~9 : extendable mission(eg.different formation configuration) + this will mask the keyboard control +g : control the leader +CTRL-C to quit +""" + +msg2leader = """ +Control Your XTDrone! +To the leader (press g to control all drones) +--------------------------- + 1 2 3 4 5 6 7 8 9 0 + w r t y i + a s d g j k l + x v b n , + +w/x : increase/decrease forward velocity +a/d : increase/decrease leftward velocity +i/, : increase/decrease upward velocity +j/l : increase/decrease orientation +r : return home +t/y : arm/disarm +v/n : takeoff(disenabled now)/land +b : offboard +s/k : hover and remove the mask of keyboard control +0~9 : extendable mission(eg.different formation configuration) + this will mask the keyboard control +g : control all drones +CTRL-C to quit +""" + +e = """ +Communications Failed +""" + +def getKey(): # 获得键盘按键 + tty.setraw(sys.stdin.fileno()) + rlist, _, _ = select.select([sys.stdin], [], [], 0.1) + if rlist: + key = sys.stdin.read(1) + else: + key = '' + termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings) + return key + +def print_msg(): # 打印提示信息 + if ctrl_leader: + print(msg2leader) + else: + print(msg2all) + +if __name__=="__main__": + + settings = termios.tcgetattr(sys.stdin) + + multirotor_type = sys.argv[1] + multirotor_num = int(sys.argv[2]) + control_type = sys.argv[3] #vel 速度控制 + ''' + if multirotor_num == 18: #多无人机编队 + formation_configs = ['waiting', 'cuboid', 'sphere', 'diamond'] # 0-9的参数 + elif multirotor_num == 9: + formation_configs = ['waiting', 'cube', 'pyramid', 'triangle'] + elif multirotor_num == 6: + formation_configs = ['waiting', 'T', 'diamond', 'triangle'] + ''' # 0 1 2 3 + if multirotor_num == 21: + formation_configs = ['waiting', 'cube21', 'circle21', 'pyramid21', 'diamond21'] + elif multirotor_num == 34: + formation_configs = ['waiting', 'CUBE', 'HEART', '520', 'NUDT', '八一'] + + cmd= String() + twist = Twist() + + rospy.init_node('multirotor_keyboard_multi_control') + + if control_type == 'vel': # 速度控制 + multi_cmd_vel_flu_pub = [None]*multirotor_num + multi_cmd_pub = [None]*multirotor_num + for i in range(multirotor_num): + multi_cmd_vel_flu_pub[i] = rospy.Publisher('/xtdrone/'+multirotor_type+'_'+str(i)+'/cmd_vel_flu', Twist, queue_size=10) + multi_cmd_pub[i] = rospy.Publisher('/xtdrone/'+multirotor_type+'_'+str(i)+'/cmd',String,queue_size=10) + leader_cmd_vel_flu_pub = rospy.Publisher("/xtdrone/leader/cmd_vel_flu", Twist, queue_size=10) + leader_cmd_pub = rospy.Publisher("/xtdrone/leader/cmd", String, queue_size=10) + + else: # 加速度控制 + multi_cmd_accel_flu_pub = [None]*multirotor_num + multi_cmd_pub = [None]*multirotor_num + for i in range(multirotor_num): + multi_cmd_accel_flu_pub[i] = rospy.Publisher('/xtdrone/'+multirotor_type+'_'+str(i)+'/cmd_accel_flu', Twist, queue_size=10) + multi_cmd_pub[i] = rospy.Publisher('/xtdrone/'+multirotor_type+'_'+str(i)+'/cmd',String,queue_size=10) + leader_cmd_accel_flu_pub = rospy.Publisher("/xtdrone/leader/cmd_accel_flu", Twist, queue_size=10) + leader_cmd_pub = rospy.Publisher("/xtdrone/leader/cmd", String, queue_size=10) + + forward = 0.0 + leftward = 0.0 + upward = 0.0 + angular = 0.0 + + print_msg() + while(1): + key = getKey() + if key == 'w' : + forward = forward + LINEAR_STEP_SIZE + print_msg() + if control_type == 'vel': + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + else: + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + + elif key == 'x' : + forward = forward - LINEAR_STEP_SIZE + print_msg() + if control_type == 'vel': + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + else: + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + + elif key == 'a' : + + leftward = leftward + LINEAR_STEP_SIZE + print_msg() + if control_type == 'vel': + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + else: + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + + elif key == 'd' : + leftward = leftward - LINEAR_STEP_SIZE + print_msg() + if control_type == 'vel': + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + else: + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + + elif key == 'i' : + upward = upward + LINEAR_STEP_SIZE + print_msg() + if control_type == 'vel': + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + else: + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + + elif key == ',' : + upward = upward - LINEAR_STEP_SIZE + print_msg() + if control_type == 'vel': + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + else: + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + + elif key == 'j': + angular = angular + ANG_VEL_STEP_SIZE + print_msg() + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + + elif key == 'l': + angular = angular - ANG_VEL_STEP_SIZE + print_msg() + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + + elif key == 'r': # 自动返回起飞点 + cmd = 'AUTO.RTL' + print_msg() + print('Returning home') + elif key == 't': #飞机解锁 + cmd = 'ARM' + print_msg() + print('Arming') + elif key == 'y': # 飞机上锁 + cmd = 'DISARM' + print_msg() + print('Disarming') + elif key == 'v': + cmd = 'AUTO.TAKEOFF' + cmd = '' + print_msg() + #print('Takeoff mode is disenabled now') + elif key == 'b': + cmd = 'OFFBOARD' + print_msg() + print('Offboard') + elif key == 'n': # 自动着陆 + cmd = 'AUTO.LAND' + print_msg() + print('Landing') + elif key == 'g': # 开启或结束编队控制 + ctrl_leader = not ctrl_leader + print_msg() + elif key in ['k', 's']: # 悬停,全部参数归零 + cmd_vel_mask = False + forward = 0.0 + leftward = 0.0 + upward = 0.0 + angular = 0.0 + cmd = 'HOVER' + print_msg() + print("currently:\t forward vel %.2f\t leftward vel %.2f\t upward vel %.2f\t angular %.2f " % (forward, leftward, upward, angular)) + print('Hover') + else: + for i in range(10): # 按键数字 + if key == str(i): + cmd = formation_configs[i] # 编队的队形 + print_msg() + print(cmd) + cmd_vel_mask = True # 有掩模,其他按键无效 + if (key == '\x03'): + break + + if forward > MAX_LINEAR: + forward = MAX_LINEAR + elif forward < -MAX_LINEAR: + forward = -MAX_LINEAR + if leftward > MAX_LINEAR: + leftward = MAX_LINEAR + elif leftward < -MAX_LINEAR: + leftward = -MAX_LINEAR + if upward > MAX_LINEAR: + upward = MAX_LINEAR + elif upward < -MAX_LINEAR: + upward = -MAX_LINEAR + if angular > MAX_ANG_VEL: + angular = MAX_ANG_VEL + elif angular < -MAX_ANG_VEL: + angular = - MAX_ANG_VEL + + twist.linear.x = forward; twist.linear.y = leftward ; twist.linear.z = upward + twist.angular.x = 0.0; twist.angular.y = 0.0; twist.angular.z = angular + + for i in range(multirotor_num): # 无人机数量 + if ctrl_leader: + if control_type == 'vel': + leader_cmd_vel_flu_pub.publish(twist) + else: + leader_cmd_aceel_flu_pub.publish(twist) #无定义 + leader_cmd_pub.publish(cmd) + else: + if not cmd_vel_mask: #只有在输入0-9时,mask为True,其余情况为F 。这里是非数字时 + if control_type == 'vel': + multi_cmd_vel_flu_pub[i].publish(twist) + else: + multi_cmd_accel_flu_pub[i].publish(twist) + multi_cmd_pub[i].publish(cmd) + + cmd = '' + + termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings) diff --git a/contributer_demo/demo2/coordination/formation_demo/avoid.py b/contributer_demo/demo2/coordination/formation_demo/avoid.py new file mode 100644 index 0000000..fe0361a --- /dev/null +++ b/contributer_demo/demo2/coordination/formation_demo/avoid.py @@ -0,0 +1,54 @@ +import rospy +from geometry_msgs.msg import Twist, Vector3, PoseStamped +from std_msgs.msg import String +import time +import math +import numpy +import sys + +vehicle_type = sys.argv[1] +vehicle_num = int(sys.argv[2]) +pose = [None]*vehicle_num +pose_sub = [None]*vehicle_num +avoid_vel_pub = [None]*vehicle_num +avoid_kp = 0.5 +avoid_radius = 1.5 +aid_vec1 = [1, 0, 0] +aid_vec2 = [0, 1, 0] +vehicles_avoid_vel = [Vector3()] * vehicle_num + +def pose_callback(msg, id): + pose[id] = msg + +rospy.init_node('avoid') +for i in range(vehicle_num): + pose_sub[i] = rospy.Subscriber(vehicle_type+'_'+str(i)+'/mavros/local_position/pose',PoseStamped,pose_callback,i) + avoid_vel_pub[i] = rospy.Publisher("/xtdrone/"+vehicle_type+'_'+str(i)+"/avoid_vel", Vector3,queue_size=10) + +time.sleep(1) +rate = rospy.Rate(50) +while not rospy.is_shutdown(): + for i in range(vehicle_num): + position1 = numpy.array([pose[i].pose.position.x, pose[i].pose.position.y, pose[i].pose.position.z]) + for j in range(1, vehicle_num-i): + position2 = numpy.array([pose[i+j].pose.position.x, pose[i+j].pose.position.y, pose[i+j].pose.position.z]) + dir_vec = position1-position2 + if numpy.linalg.norm(dir_vec) < avoid_radius: + cos1 = dir_vec.dot(aid_vec1)/(numpy.linalg.norm(dir_vec) * numpy.linalg.norm(aid_vec1)) + cos2 = dir_vec.dot(aid_vec2)/(numpy.linalg.norm(dir_vec) * numpy.linalg.norm(aid_vec2)) + if abs(cos1) < abs(cos2): + avoid_vel = avoid_kp * numpy.cross(dir_vec, aid_vec1)/numpy.linalg.norm(numpy.cross(dir_vec, aid_vec1)) + else: + avoid_vel = avoid_kp * numpy.cross(dir_vec, aid_vec2)/numpy.linalg.norm(numpy.cross(dir_vec, aid_vec2)) + if dir_vec[2] * avoid_vel[2] > 0: + vehicles_avoid_vel[i] = Vector3(vehicles_avoid_vel[i].x+avoid_vel[0],vehicles_avoid_vel[i].y+avoid_vel[1],vehicles_avoid_vel[i].z+avoid_vel[2]) + vehicles_avoid_vel[i+j] = Vector3(vehicles_avoid_vel[i+j].x-avoid_vel[0],vehicles_avoid_vel[i+j].y-avoid_vel[1],vehicles_avoid_vel[i+j].z-avoid_vel[2]) + else: + vehicles_avoid_vel[i] = Vector3(vehicles_avoid_vel[i].x-avoid_vel[0],vehicles_avoid_vel[i].y-avoid_vel[1],vehicles_avoid_vel[i].z-avoid_vel[2]) + vehicles_avoid_vel[i+j] = Vector3(vehicles_avoid_vel[i+j].x+avoid_vel[0],vehicles_avoid_vel[i+j].y+avoid_vel[1],vehicles_avoid_vel[i+j].z+avoid_vel[2]) + for i in range(vehicle_num): + avoid_vel_pub[i].publish(vehicles_avoid_vel[i]) + vehicles_avoid_vel = [Vector3()] * vehicle_num + rate.sleep() + + diff --git a/contributer_demo/demo2/coordination/formation_demo/my_follower.py b/contributer_demo/demo2/coordination/formation_demo/my_follower.py new file mode 100644 index 0000000..82c552a --- /dev/null +++ b/contributer_demo/demo2/coordination/formation_demo/my_follower.py @@ -0,0 +1,260 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +### This code is about the distributed formation control of consensus protocol with a certain +### Laplacian matrix and the formation transformation based on a task allocation algorithm—— +### KM for the shorest distances of all the UAVs to achieve the new pattern. +### For more information of these two algorithms, please see the latest paper on https://arxiv.org/abs/2005.01125 + +import rospy +from geometry_msgs.msg import Twist, Vector3, PoseStamped, TwistStamped +from std_msgs.msg import String +import sys + +# formation patterns +#if sys.argv[3] == '6': +# from formation_dict import formation_dict_6 as formation_dict +#elif sys.argv[3] == '9': +# from formation_dict import formation_dict_9 as formation_dict +#elif sys.argv[3] == '18': +# from formation_dict import formation_dict_18 as formation_dict +if sys.argv[3] == '21': + from my_formation_dict import formation_dict_my as formation_dict +elif sys.argv[3] == '34': + from my_formation_dict import formation_dict_my as formation_dict + +import numpy +import Queue + + +class Follower: + + def __init__(self, uav_type, uav_id, uav_num): + self.hover = "HOVER" + self.offboard = "OFFBOARD" + self.uav_type = uav_type + self.id = uav_id + self.uav_num = uav_num + self.f = 100 # control/communication rate + self.local_pose = PoseStamped() + self.local_pose_queue = Queue.Queue(self.f/10) + for i in range(self.f/10): + self.local_pose_queue.put(PoseStamped()) + self.local_velocity = TwistStamped() + self.cmd_vel_enu = Twist() + self.avoid_vel = Vector3() + self.following_switch = False # determine whether the formation pattern is required to be changed + self.arrive_print = True # determine whether the target position has been reached + self.following_ids = [] # followers of this uav + self.formation_config = 'waiting' + self.following_count = 0 # the number of followers of this uav + self.Kp = 1 + self.velxy_max = 1 #0.8 + self.velz_max = 1 + self.following_local_pose = [PoseStamped() for i in range(self.uav_num)] # local position of other uavs, and only the position of followers of this uav is not zero + self.following_local_pose_sub = [None]*self.uav_num + self.arrive_count = 0 + ###############起飞位置偏置 + self.bias = [ [3, 3, 0],[6, 3, 0],[9, 3, 0],[12, 3, 0],[15, 3, 0],[18, 3, 0], [0, 6, 0],[3, 6, 0],[6, 6, 0],[9, 6, 0],[12, 6, 0],[15, 6, 0],[18, 6, 0], [0, 9, 0],[3, 9, 0],[6, 9, 0],[9, 9, 0],[12, 9, 0],[15, 9, 0],[18, 9, 0] ] + self.local_pose_sub = rospy.Subscriber(self.uav_type+'_'+str(self.id)+"/mavros/local_position/pose", PoseStamped, self.local_pose_callback) + self.avoid_vel_sub = rospy.Subscriber("/xtdrone/"+self.uav_type+'_'+str(self.id)+"/avoid_vel", Vector3, self.avoid_vel_callback) + self.formation_switch_sub = rospy.Subscriber("/xtdrone/formation_switch",String, self.formation_switch_callback) + self.vel_enu_pub = rospy.Publisher('/xtdrone/'+self.uav_type+'_'+str(self.id)+'/cmd_vel_enu', Twist, queue_size=10) + self.info_pub = rospy.Publisher('/xtdrone/'+self.uav_type+'_'+str(self.id)+'/info', String, queue_size=10) + self.cmd_pub = rospy.Publisher('/xtdrone/'+self.uav_type+'_'+str(self.id)+'/cmd',String,queue_size=10) + self.first_formation = True + self.orig_formation = None + self.new_formation = None + + def local_pose_callback(self, msg): + self.local_pose = msg + self.local_pose.pose.position.x += self.bias[self.id-1][0]###########起飞位置偏置 + self.local_pose.pose.position.y += self.bias[self.id-1][1] + + pose_comparison = self.local_pose_queue.get() + self.local_pose_queue.put(self.local_pose) + comparison = (self.local_pose.pose.position.x - pose_comparison.pose.position.x)**2+(self.local_pose.pose.position.y - pose_comparison.pose.position.y)**2+(self.local_pose.pose.position.z - pose_comparison.pose.position.z)**2 + if comparison < float(self.velxy_max**2+self.velxy_max**2+self.velz_max**2)/1e5: # if the target position is reached, arrive_count ++1 + self.arrive_count += 1 + else: + self.arrive_count = 0 + + def following_local_pose_callback(self, msg, id): + self.following_local_pose[id] = msg + self.following_local_pose[id].pose.position.x += self.bias[id][0]#############起飞位置偏置 + self.following_local_pose[id].pose.position.y += self.bias[id][1] + + # the order of changing the formation pattern + def formation_switch_callback(self, msg): + if not self.formation_config == msg.data: + self.following_switch = True + self.formation_config = msg.data + + def avoid_vel_callback(self, msg): + self.avoid_vel = msg + + def loop(self): + rospy.init_node('follower'+str(self.id-1)) + rate = rospy.Rate(self.f) + while not rospy.is_shutdown(): + if self.arrive_count > 2000 and self.arrive_print: + print("Follower"+str(self.id-1)+":Arrived") + self.arrive_print = False + if self.following_switch: + self.following_switch = False + self.arrive_print = True + self.arrive_count = 0 + for i in range(self.f/10): + self.cmd_pub.publish(self.offboard) + self.info_pub.publish("Received") + print("Follower"+str(self.id-1)+": Switch to Formation "+self.formation_config) + # The Laplacian matrix is invarible in this code, and you can change it if necessary. + if self.formation_config=='waiting': + self.L_matrix = self.get_L_central_matrix() + else: + # Change from the original pattern to the first pattern without KM. + if self.first_formation: + self.first_formation=False + self.orig_formation=formation_dict[self.formation_config] + self.L_matrix = self.get_L_central_matrix() + else: + self.adj_matrix = self.build_graph(self.orig_formation,formation_dict[self.formation_config]) + # These variables are determined for KM algorithm, see examples of KM algorithm on Github. + self.label_left = numpy.max(self.adj_matrix, axis=1) # init label for the left + self.label_right = numpy.array([0]*(self.uav_num-1)) # init label for the right set + self.match_right = numpy.array([-1] *(self.uav_num-1)) + self.visit_left = numpy.array([0]*(self.uav_num-1)) + self.visit_right = numpy.array([0]*(self.uav_num-1)) + self.slack_right = numpy.array([100]*(self.uav_num-1)) + + self.change_id = self.KM() + # Get a new formation pattern of UAVs based on KM. + self.new_formation=self.get_new_formation(self.change_id,formation_dict[self.formation_config]) + self.L_matrix = self.get_L_central_matrix() + self.orig_formation=self.new_formation + if self.id == 3: + print(self.L_matrix) + # Get the followers of this uav based on the Laplacian matrix, and update the position of the followers. + self.following_ids = numpy.argwhere(self.L_matrix[self.id,:] == 1) + self.following_count = 0 + for i in range(self.uav_num): + if not self.following_local_pose_sub[i] == None: + self.following_local_pose_sub[i].unregister() + for following_id in self.following_ids: + self.following_local_pose_sub[following_id[0]] = rospy.Subscriber(self.uav_type+'_'+str(following_id[0])+"/mavros/local_position/pose", PoseStamped , self.following_local_pose_callback,following_id[0]) + self.following_count += 1 + + self.cmd_vel_enu.linear = Vector3(0, 0, 0) + # Code of the consensus protocol, see details on the paper. + for following_id in self.following_ids: + #print(self.id,"following: ", self.following_ids) + self.cmd_vel_enu.linear.x += self.following_local_pose[following_id[0]].pose.position.x - self.local_pose.pose.position.x + self.new_formation[0, self.id-1] + self.cmd_vel_enu.linear.y += self.following_local_pose[following_id[0]].pose.position.y - self.local_pose.pose.position.y + self.new_formation[1, self.id-1] + self.cmd_vel_enu.linear.z += self.following_local_pose[following_id[0]].pose.position.z - self.local_pose.pose.position.z + self.new_formation[2, self.id-1] + if not following_id[0] == 0: + self.cmd_vel_enu.linear.x -= self.new_formation[0, following_id[0]-1] + self.cmd_vel_enu.linear.y -= self.new_formation[1, following_id[0]-1] + self.cmd_vel_enu.linear.z -= self.new_formation[2, following_id[0]-1] + + self.cmd_vel_enu.linear.x = self.Kp * self.cmd_vel_enu.linear.x + self.avoid_vel.x + self.cmd_vel_enu.linear.y = self.Kp * self.cmd_vel_enu.linear.y + self.avoid_vel.y + self.cmd_vel_enu.linear.z = self.Kp * self.cmd_vel_enu.linear.z + self.avoid_vel.z + + if self.cmd_vel_enu.linear.x > self.velxy_max: #越界限制 + self.cmd_vel_enu.linear.x = self.velxy_max + elif self.cmd_vel_enu.linear.x < - self.velxy_max: + self.cmd_vel_enu.linear.x = - self.velxy_max + if self.cmd_vel_enu.linear.y > self.velxy_max: + self.cmd_vel_enu.linear.y = self.velxy_max + elif self.cmd_vel_enu.linear.y < - self.velxy_max: + self.cmd_vel_enu.linear.y = - self.velxy_max + if self.cmd_vel_enu.linear.z > self.velz_max: + self.cmd_vel_enu.linear.z = self.velz_max + elif self.cmd_vel_enu.linear.z < - self.velz_max: + self.cmd_vel_enu.linear.z = - self.velz_max + + if not self.formation_config == 'waiting': + self.vel_enu_pub.publish(self.cmd_vel_enu) + if (self.cmd_vel_enu.linear.x)**2+(self.cmd_vel_enu.linear.y)**2+(self.cmd_vel_enu.linear.z)**2<0.2: #到达目标位置 + self.arrive_count += 1 + else: + self.arrive_count = 0 + rate.sleep() + + # 'build_graph', 'find_path' and 'KM' functions are all determined for KM algorithm. + # A graph of UAVs is established based on distances between them in 'build_graph' function. + def build_graph(self,orig_formation,change_formation): + distance=[[0 for i in range(self.uav_num-1)]for j in range(self.uav_num-1)] #二维0矩阵,行列都为跟随者个数 + for i in range(self.uav_num-1): + for j in range(self.uav_num-1): + distance[i][j]=numpy.linalg.norm(orig_formation[:,i]-change_formation[:,j]) + distance[i][j]=int(50-distance[i][j]) + return distance + + # Determine whether a path has been found. + def find_path(self,i): + self.visit_left[i] = True + for j, match_weight in enumerate(self.adj_matrix[i],start=0): + if self.visit_right[j]: + continue + gap = self.label_left[i] + self.label_right[j] - match_weight + if gap == 0 : + self.visit_right[j] = True + if self.match_right[j]==-1 or self.find_path(self.match_right[j]): + self.match_right[j] = i + return True + else: + self.slack_right[j]=min(gap,self.slack_right[j]) + return False + + # Main body of KM algorithm. + def KM(self): + for i in range(self.uav_num-1): + self.slack_right = numpy.array([100]*(self.uav_num-1)) + while True: + self.visit_left = numpy.array([0]*(self.uav_num-1)) + self.visit_right = numpy.array([0]*(self.uav_num-1)) + if self.find_path(i): + break + d = numpy.inf + for j, slack in enumerate(self.slack_right): + if not self.visit_right[j] : + d = min(d,slack) + for k in range(self.uav_num-1): + if self.visit_left[k]: + self.label_left[k] -= d + if self.visit_right[k]: + self.label_right[k] += d + else: + self.slack_right[k] -=d + return self.match_right + + # The formation patterns designed in the formation dictionaries are random (the old ones), + # and a new formation pattern based on the distances of UAVs of the current pattern is designed as follows. + # Note that only the desired position of each UAV has changed, while the form of the new pattern is the same as the one in the dictionary. + def get_new_formation(self,change_id,change_formation): + new_formation=numpy.zeros((3,self.uav_num-1)) + position=numpy.zeros((3,self.uav_num-1)) + change_id=[i + 1 for i in change_id] + for i in range(0,self.uav_num-1): + position[:,i]=change_formation[:,i] + + for i in range(0,self.uav_num-1): + for j in range(0,self.uav_num-1): + if (j+1)==change_id[i]: + new_formation[:,i]=position[:,j] + return new_formation + + # Laplacian matrix + def get_L_central_matrix(self): + + L=numpy.zeros((self.uav_num,self.uav_num)) + for i in range(1,self.uav_num): + L[i][0]=1 + L[i][i]=-1 + + #L=numpy.array([[-0. ,0. , 0., 0., 0., 0.],[ 1. ,-1. , 0. , 0. , 0. , 0.],[ 0., 1. ,-1. , 0. , 0. , 0.],[ 0., 0., 1. ,-1. , 0. , 0.],[ 0. , 0. , 0. , 1. ,-1. , 0.],[ 0. , 0. , 0. , 0. , 1. ,-1.]]) + return L + +if __name__ == '__main__': + follower = Follower(sys.argv[1],int(sys.argv[2]),int(sys.argv[3])) + follower.loop() diff --git a/contributer_demo/demo2/coordination/formation_demo/my_formation_generator.py b/contributer_demo/demo2/coordination/formation_demo/my_formation_generator.py new file mode 100644 index 0000000..4664a0e --- /dev/null +++ b/contributer_demo/demo2/coordination/formation_demo/my_formation_generator.py @@ -0,0 +1,380 @@ +# encoding: utf-8 +import numpy as np +import random +import matplotlib.pyplot as plt +import math +import os + +UAV_NUM = 33 #无人机数量-1,0 0 0位置不动 +POP_SIZE = 200 #种群数量 +N_GENERATIONS = 200 #迭代次数,迭代50轮 +CROSSOVER_RATE = 0.8 +# MUTATION_RATE = 0.2 + +formation_dict_my = {} +# formation_dict_my["origin34"] = [ # XTDrone中简化仿真的初始位置 +# # [0, 0, 0], +# [0, 1, 0], [0, 2, 0], [1, 0, 0], [1, 1, 0], [1, 2, 0], +# [2, 0, 0], [2, 1, 0], [2, 2, 0], [3, 0, 0], [3, 1, 0], [3, 2, 0], +# [4, 0, 0], [4, 1, 0], [4, 2, 0], [5, 0, 0], [5, 1, 0], [5, 2, 0], +# [6, 0, 0], [6, 1, 0], [6, 2, 0], [7, 0, 0], [7, 1, 0], [7, 2, 0], +# [8, 0, 0], [8, 1, 0], [8, 2, 0], [9, 0, 0], [9, 1, 0], [9, 2, 0], +# [10, 0, 0], [10, 1, 0], [10, 2, 0], [11, 0, 0] ] +formation_dict_my["origin34"] = [ # XTDrone中gazebo仿真的初始位置 + # [0, 3, 0], + [3, 3, 0], [6, 3, 0], [9, 3, 0], [12, 3, 0], + [0, 6, 0], [3, 6, 0], [6, 6, 0], [9, 6, 0], [12, 6, 0], + [0, 9, 0], [3, 9, 0], [6, 9, 0], [9, 9, 0], [12, 9, 0], + [0, 12, 0], [3, 12, 0], [6, 12, 0], [9, 12, 0], [12, 12, 0], + [0, 15, 0], [3, 15, 0], [6, 15, 0], [9, 15, 0], [12, 15, 0], + [0, 18, 0], [3, 18, 0], [6, 18, 0], [9, 18, 0], [12, 18, 0], + [0, 21, 0], [3, 21, 0], [6, 21, 0], [9, 21, 0] ] +formation_dict_my["CUBE"] = [ #自定义位置1,立方体 + # [0, 0, 0], + [0, 0, 0], + [-15, -15, 15], [-15, 15, 15], [15, 15, 15], [15, -15, 15], #上顶点 + [-15, -15, -15], [-15, 15, -15], [15, 15, -15], [15, -15, -15], #下顶点 + [-15, -5, 15], [-15, 5, 15], [-5, 15, 15], [5, 15, 15], #上棱 + [15, 5, 15], [15, -5, 15], [5, -15, 15], [-5, -15, 15], #上棱 + [-15, -5, -15], [-15, 5, -15], [-5, 15, -15], [5, 15, -15], #下棱 + [15, 5, -15], [15, -5, -15], [5, -15, -15], [-5, -15, -15], #下棱 + [-15, -15, -5], [-15, -15, 5], [15, -15, -5], [15, -15, 5], #中棱 + [-15, 15, -5], [-15, 15, 5], [15, 15, -5], [15, 15, 5] ] #中棱 +formation_dict_my["HEART"] = [ #自定义位置2,心形 + # [-0.00000000e+00, 0.00000000e+00, 0.00000000e+00], + [ 1.00000000e+01, 0.00000000e+00, 0.00000000e+00], + [ 8.33179844e+00, 1.31962721e+00, 0.00000000e+00], + [ 6.57163890e+00, 2.13525495e+00, 0.00000000e+00], + [ 4.86498026e+00, 2.47883127e+00, 0.00000000e+00], + [ 3.33488737e+00, 2.42293749e+00, 0.00000000e+00], + [ 2.07106782e+00, 2.07106781e+00, 0.00000000e+00], + [ 1.12256994e+00, 1.54508498e+00, 0.00000000e+00], + [-1.12256995e+00, 1.54508497e+00, 0.00000000e+00], + [-2.07106781e+00, 2.07106781e+00, 0.00000000e+00], + [-3.33488736e+00, 2.42293751e+00, 0.00000000e+00], + [-4.86498028e+00, 2.47883124e+00, 0.00000000e+00], + [-6.57163891e+00, 2.13525491e+00, 0.00000000e+00], + [-8.33179843e+00, 1.31962724e+00, 0.00000000e+00], + [-1.00000000e+01, 3.58979303e-08, 0.00000000e+00], + [-1.14219684e+01,-1.80906211e+00, 0.00000000e+00], + [-1.24494914e+01,-4.04508498e+00, 0.00000000e+00], + [-1.29551502e+01,-6.60097872e+00, 0.00000000e+00], + [-1.28454526e+01,-9.33276749e+00, 0.00000000e+00], + [-1.20710678e+01,-1.20710678e+01, 0.00000000e+00], + [-1.06331351e+01,-1.46352549e+01, 0.00000000e+00], + [-8.62130925e+00,-1.69202720e+01, 0.00000000e+00], + [-6.15270291e+00,-1.89360728e+01, 0.00000000e+00], + [-3.28150749e+00,-2.07186232e+01, 0.00000000e+00], + [-8.84786534e-09,-2.30000000e+01, 0.00000000e+00], + [ 3.28150747e+00,-2.07186232e+01, 0.00000000e+00], + [ 6.15270308e+00,-1.89360727e+01, 0.00000000e+00], + [ 8.62130924e+00,-1.69202720e+01, 0.00000000e+00], + [ 1.06331351e+01,-1.46352549e+01, 0.00000000e+00], + [ 1.20710678e+01,-1.20710679e+01, 0.00000000e+00], + [ 1.28454526e+01,-9.33276750e+00, 0.00000000e+00], + [ 1.29551502e+01,-6.60097873e+00, 0.00000000e+00], + [ 1.24494914e+01,-4.04508499e+00, 0.00000000e+00], + [ 1.14219684e+01,-1.80906212e+00, 0.00000000e+00] ] +formation_dict_my["520"] = [ #自定义位置3,520 + # [0, 0, 0], + [-3, 0, 0], [3, 0, 0], [3, -3, 0], [3, -6, 0], [0, -6, 0],#2 + [-3, -6, 0], [-3, -9, 0], [-3, -12, 0], [0, -12, 0], [3, -12, 0], + [-9, 0, 0], [-12, 0, 0], [-15, 0, 0], [-15, -3, 0], [-15, -6, 0], [-12, -6, 0], #5 + [-9, -6, 0], [-9, -9, 0], [-9, -12, 0], [-12, -12, 0], [-15, -12, 0], + [9, 0, 0], [12, 0, 0], [15, 0, 0], [15, -3, 0], [15, -6, 0], [15, -9, 0], #0 + [15, -12, 0], [12, -12, 0], [9, -12, 0], [9, -9, 0], [9, -6, 0], [9, -3, 0] ] +formation_dict_my["NUDT"] = [ #自定义位置4,国防科大 + # [0, 0, 0], + [0, -4, 0], [0, -8, 0], [-1.2, -11, 0], #U + [-7, 0, 0], [-7, -4, 0], [-7, -8, 0], [-5.8, -11, 0], [-3.5, -12, 0], + [-12, 0, 0], [-12, -6, 0], [-12, -12, 0], #N + [-18, 0, 0], [-18, -6, 0], [-18, -12, 0], + [-16.5, -3, 0], [-15, -6, 0], [-13.5, -9, 0], + [5, 0, 0], [5, -3, 0], [5, -6, 0], [5, -9, 0], [5, -12, 0], #D + [8, -0.5, 0], [9.5, -3, 0], [10.5, -6, 0], [9.5, -9, 0], [8, -11.5, 0], + [15, 0, 0], [18, 0, 0], [21, 0, 0], [18, -4, 0], [18, -8, 0], [18, -12, 0] ]#T +formation_dict_my["八一"] = [ #自定义位置5,八一军徽 + # [0, 0, 0], + [-2, 0, 0], [2, 0, 0], [-2, -3, 0], [-2.5, -4, 0], [-3.5, -4.5, 0], + [2, -1, 0], [2.5, -2, 0], [3, -3, 0], [4, -4.5, 0], #八 + [-3, -8, 0], [-1, -8, 0], [1, -8, 0], [3, -8, 0], #一 + [-22, 2, -5], [-13.4, 2, -5], [-5.2, 2, -5], [-2.6, 10, -5], [0, 18, -5], + [2.6, 10, -5], [5.2, 2, -5], [13.4, 2, -5], [22, 2, -5], #上 + [15.2, -3, -5], [8.4, -8, -5], [11, -16, -5], [13.4, -24, -5], [6.8, -19, -5], + [0, -14, -5], [-6.8, -19, -5], [-13.6, -24, -5], [-11, -16, -5], [-8.4, -8, -5], [-15.2, -3, -5] ] #下 + + +def plot_uav_pos(): +###画无人机位置 + pre_x = np.zeros((1, UAV_NUM)) #初始位置 + pre_y = np.zeros((1, UAV_NUM)) + pre_z = np.zeros((1, UAV_NUM)) + past_x = np.zeros((1, UAV_NUM)) #编队后位置 + past_y = np.zeros((1, UAV_NUM)) + past_z = np.zeros((1, UAV_NUM)) + for i in range(UAV_NUM): + pre_x[0][i] = UAV_pre[i][0] + pre_y[0][i] = UAV_pre[i][1] + pre_z[0][i] = UAV_pre[i][2] + past_x[0][i] = UAV_past[i][0] + past_y[0][i] = UAV_past[i][1] + past_z[0][i] = UAV_past[i][2] + fig = plt.figure() + ax = fig.add_subplot(111, projection='3d') + + ax.set_xlim(-10, 10)#坐标轴范围 + ax.set_ylim(-10, 10) + ax.set_zlim(-10, 10) + ax.set_xlabel('X Axes') + ax.set_ylabel('Y Axes') + ax.set_zlabel('Z Axes') + sc = ax.scatter3D(pre_x, pre_y, pre_z, color='r', alpha=0.7, marker='1', linewidth = 10) #初始位置 红 + sc = ax.scatter3D(past_x, past_y, past_z, color='y', alpha=0.7, marker='1', linewidth = 10) #编队后位置 黄 +#画无人机位置的辅助线 + #编队后位置 + # DING_LIST = [[-4, -3], [6, -3], [6, 9], [-4, 9]] + # DingX, DingY = [], [] + # for each in DING_LIST: + # DingX.append(each[0]) + # DingY.append(each[1]) + # DingX.append(DING_LIST[0][0]) #X和Y行程闭环 + # DingY.append(DING_LIST[0][1]) + # ax.plot(DingX, DingY, color = 'black', linestyle = ':') + # #初始位置 + # r = 5 + # a, b = (0,0) + # x = np.arange( a-r, a+r+1e-3, 0.1) + # y = b + np.sqrt( r**2 - (x - a)**2) + # ax.plot(x, y, color = 'black', linestyle = ':') # 上半部 + # ax.plot(x, -y, color = 'black', linestyle = ':') # 下半部 + # plt.show() + + +###计算全部无人机从初始位置分别到终止位置的距离 +def calu_pre2past_dis(): + distance = [] + for i in range(UAV_NUM): + single_pre = UAV_pre[i] + pre = np.tile(single_pre, (UAV_NUM ,1 ))#矩阵增广,用于将 原先的位置-编队后的位置 + dis_pre2past = np.sqrt( np.dot( (pre - UAV_past)**2, np.array([ [1],[1],[1] ]) ) ) #计算无人机编队前后的距离 + #编队前位置-编队后位置,再对x和y分别平方,再相加,最后开方。两点间的距离 + dis_pre2past = dis_pre2past.reshape(-1,) #(10,1)转化为(10,) + distance.append( dis_pre2past ) #每一行代表初始的一架无人机,变换到编队后所有位置的距离 + distance = np.array(distance) # distance[x][y]表示初始第x号飞到编队后第y号位置的距离 + return distance + +###初始化种群 +def initpop(): + pop = np.zeros((POP_SIZE, UAV_NUM), int) + #100行 * 10列,用来表示初始的x架无人机0~9编队后到达的位置的下标0~9 + # print(pop) + # print(type(pop[1][1])) + for i in range(POP_SIZE): + select = [x for x in range( UAV_NUM )] #随机产生种群的每个个体 + random.shuffle(select) #产生一种随机的分配方案 + pop[i, :] = select + return pop +# print(pop) + +###交叉 变异 +def crossover_and_mutation(pop): + pre_pop = pop.copy() #prechoose是不经过交叉变异的,newchoose后期经过交叉变异 + for row in range(0, (np.shape(pop))[0], 2): # 两个为一组互相交叉 + if CROSSOVER_RATE > random.random(): + gen_1 = pop[row, :].copy() + gen_2 = pop[row + 1, :].copy() + select = [x for x in range(UAV_NUM)] + random.shuffle(select) + p1 = select[0] #保证两个交叉点的位置不一样 + p2 = select[1] + p1, p2 = min(p1, p2), max(p1, p2) # 保证 p1 < p2 + cross1, cross2 = gen_1[p1:p2 + 1].copy(), gen_2[p1:p2 + 1].copy() #两个基因的交叉片段 + # print(p1, p2, cross1, cross2) + for cro_pos_i in range(p2 - p1 + 1): # 遍历交叉片段 + gen_pos1 = np.where(gen_1 == cross2[cro_pos_i]) + gen_1[gen_pos1] = (gen_1[p1:p2 + 1])[cro_pos_i].copy() + # a = gen_1 + for cro_pos_i in range(p2 - p1 + 1): + gen_pos2 = np.where(gen_2 == cross1[cro_pos_i]) + gen_2[gen_pos2] = (gen_2[p1:p2 + 1])[cro_pos_i].copy() + # b = gen_2 + gen_1[p1:p2 + 1] = cross2.copy() #gen2的交叉片段给gen1 + gen_2[p1:p2 + 1] = cross1.copy() + pop[row, :] = gen_1.copy() #放回到种群中 + pop[row + 1, :] = gen_2.copy() + + for row in range(0, (np.shape(pop))[0]): #遍历每个基因,以一定概率变异 + if MUTATION_RATE > random.random(): + select = [x for x in range(UAV_NUM)] + random.shuffle(select) + p1 = select[0] #保证变异的两个点位不一样 + p2 = select[1] + gen = pop[row, :].copy() + gen[p1], gen[p2] = gen[p2], gen[p1] #交换两个变异的点位 + pop[row, :] = gen.copy() #放回到种群中 + # print(p1,p2,gen[p1],gen[p2]) + # print(pop,'--------') + # print(pre_pop) + pop = np.append(pre_pop, pop, 0) + #经过交叉变异的种群和未经过的,组合成一个两倍于POPSIZE的种群,下一轮会选择前POPSIZE个 + return pop + # print(pop.shape) + +###计算每一种分配情况,最远距离和最近距离之差 +def calu_allocate_dis(pop, dist): + all_pop_dis = [] #种群100个个体分配情况的时间,列表,行向量 + + for allocate_i in pop: #遍历每一种分配方案 + distances = np.zeros(UAV_NUM) + for i in range(UAV_NUM): + uav_no_ = allocate_i[i] + distances[i] = dist[uav_no_][i] + all_pop_dis.append(max(distances) - min(distances)) + all_pop_dis = np.array(all_pop_dis).reshape(-1, 1) # 列表转列向量 + # unselect_pop_n = all_pop_dis.shape[0] + return all_pop_dis #每种分配方案的距离 + # print(all_pop_dis) + +# ###计算每一种分配的总距离 +# def calu_allocate_dis(pop, dist): +# all_pop_dis = [] #种群100个个体分配情况的时间,列表,行向量 +# for allocate_i in pop: #遍历每一种分配方案 +# single_array_sum_time = 0 #一种分配情况的总时间 +# for i in range(UAV_NUM): +# uav_no_ = allocate_i[i] +# single_array_sum_time += dist[uav_no_][i] +# all_pop_dis.append(single_array_sum_time) +# all_pop_dis = np.array(all_pop_dis).reshape(-1, 1) # 列表转列向量 +# # unselect_pop_n = all_pop_dis.shape[0] +# return all_pop_dis #每种分配方案的距离 + + +###排序并计算适应度 +def get_fitness(all_pop_dis, pop): + index = np.argsort(all_pop_dis, 0) #升序排列,下标 + all_pop_dis = all_pop_dis[index].reshape(all_pop_dis.shape[0], 1)[0:POP_SIZE, :] + #距离升序排列,种群经过交叉变异,数量扩大一倍,这里选择前POP_SIZE个(距离最短的前n个) + pop = pop[index].reshape(pop.shape[0], UAV_NUM)[0:POP_SIZE, :] # 距离短的前n个种群个体 + '''计算适值和适应度''' + fit = 1000 - all_pop_dis[:] # 适应度,时间的反比,时间短=适应度大 + fitplus = np.cumsum(fit).reshape(-1, 1) # 适值向下叠加 + # print(fitplus[POP_SIZE-1, :]) + fitlevelplus = fitplus[:] / fitplus[POP_SIZE - 1, :] # 适应度向下叠加 + fitlevelplus = np.insert(fitlevelplus, 0, np.array([0]), 0) # 在第一行添加0 + # print(fitlevelplus) + # a = (np.shape(fitlevelplus))[0] + return fitlevelplus, all_pop_dis, pop + +###选择 +def select(pop, fitlevelplus, all_pop_dis): + newchoose_pop = [] #根据适应度选择的新种群 + new_pop_dis = [] #新种群的每个个体,分配方案的距离 + for _ in range(POP_SIZE): + rand = random.random() + for row in range(POP_SIZE): + if rand > fitlevelplus[row, :] and rand < fitlevelplus[row + 1, :]: + newchoose_pop.append(pop[row, :]) + new_pop_dis.append(all_pop_dis[row, :]) + break + newchoose_pop = np.array(newchoose_pop) + new_pop_dis = np.array(new_pop_dis) + return newchoose_pop, new_pop_dis + # print(newchoose) + # print((np.shape(newchoose))[0]) + # print(new_pop_dis) + +#将种群和每个分配方案的距离排序 +def sortdis(sortpop, dist): + index = np.argsort(dist, 0) #升序排列,下标 + dist = dist[index].reshape(dist.shape[0], 1) + #距离升序排列,种群经过交叉变异,数量扩大一倍,这里选择前POP_SIZE个(距离最短的前n个) + sortpop = sortpop[index].reshape(sortpop.shape[0], UAV_NUM) + return sortpop, dist + +def plot_allocate(best_allc):#best_allc是0~9个编队后位置分给初始的第几号无人机 + plot_uav_pos() + for i in range(UAV_NUM): + uav_x = [] + uav_y = [] + uav_z = [] + uav_x.append( UAV_past[i][0] ) #编队后的位置给初始的第几号无人机 + uav_y.append( UAV_past[i][1] ) + uav_z.append( UAV_past[i][2] ) + uav_id_pre = best_allc[i] + uav_x.append( UAV_pre[uav_id_pre][0] ) + uav_y.append( UAV_pre[uav_id_pre][1] ) + uav_z.append( UAV_pre[uav_id_pre][2] ) + plt.plot(uav_x, uav_y, uav_z, color = 'black', linestyle = ':') + plt.show() + +def outputfile(best_allc, form_name): + allo_index = np.argsort(best_allc, 0) #升序排列,下标。排序后的下标,是初始无人机0~9到达终止位置的第几号 + # 编队结果:6 3 5 9 0 1 7 2 8 4 + # 排序下标:4 5 7 1 9 2 0 6 8 3 + # 0号对应编队第4号位置, 1号对应编队第5号位置 + filename = 'my_formation_dict.py' + filepath = os.getcwd() + '\\' + filename # 输出的文件所在完整路径 + if not os.path.exists(filepath): #如果文件不存在,则在文件里添加第一行 + with open(filename, 'w') as f: + f.write( "import numpy as np\n\n" ) + f.write( "formation_dict_my = {}\n" ) + with open(filename, 'a') as f: + f.write( 'formation_dict_my["' + form_name + '"] = np.array([ ' ) + for i in range(0, UAV_NUM-1): + f.write( str(UAV_past[allo_index[i]]) + ",") + f.write( str(UAV_past[allo_index[UAV_NUM-1]]) + "])\n") + f.write( 'formation_dict_my["' + form_name + '"] = np.transpose(formation_dict_my["' + form_name + '"]*1)\n') + +def plot_info(best_distances, dist, pop): + best_distances = np.array(best_distances) + # print(best_distances) + print(dist[0, :]) #最短距离 + # print(pop[0, :]) #对应的分配方案 + + x = [a for a in range(1, N_GENERATIONS+1)] + y = best_distances + plt.plot(x, y) + plt.xlabel('迭代次数') + plt.ylabel('距离之差') + plt.rcParams['font.sans-serif'] = ['SimHei'] + plt.show() + +def calu_best_dis(best_allc, dis): + best_dis = 0 + # allo_index = np.argsort(best_allc, 0) #升序排列,下标 + for i in range(UAV_NUM): + uav_no_ = best_allc[i] + best_dis += dis[uav_no_][i] + # pos_past = UAV_past[allo_index[i]] + # pos_pre = UAV_pre[i] + # curr_dis = math.sqrt((pos_pre[0] - pos_past[0]) ** 2 + (pos_pre[1] - pos_past[1]) ** 2) + # best_dis += curr_dis + print(best_dis) + +if __name__ == "__main__": + dic_i = 0 + for key in formation_dict_my.keys(): + MUTATION_RATE = 0.2 # 每开始新的一轮循环,新的编队 + form_name = key + UAV_past = formation_dict_my[key] + if dic_i: + plot_uav_pos() + plt.show() #画无人机初始位置和编队后的位置 + distance = calu_pre2past_dis() #计算全部无人机从初始位置分别到终止位置的距离 + pop = initpop() #初始化种群 + best_distances = [] #每一轮最短的距离,用于绘图 + for generation_n in range(N_GENERATIONS): #迭代N代 + if generation_n == int(N_GENERATIONS/2):#迭代到一半时,变异率扩大一倍 + MUTATION_RATE = MUTATION_RATE*3 + pop = crossover_and_mutation(pop) #先交叉变异,pop扩大为原来的两倍 + all_pop_dis = calu_allocate_dis(pop, distance) #每种分配方案的距离,分配方案的数量 + fitlevelplus, all_pop_dis, pop = get_fitness(all_pop_dis, pop) #种群排序,取前n,求适应度 + # pop, all_pop_dis = select(pop, fitlevelplus, all_pop_dis) #选择 + # sort_pop, sort_pop_dis = sortdis(pop, all_pop_dis) + best_distances.append(all_pop_dis[0, :]) #当前种群里,最短距离 + plot_allocate(pop[0, :]) #画无人机前后分配线 + outputfile(pop[0, :], form_name) #无人机位置输出到文件 + plot_info(best_distances, all_pop_dis, pop) #绘制最短距离随迭代次数变化曲线 + # calu_best_dis(pop[0, :], distance) + UAV_pre = formation_dict_my[key] + dic_i += 1 diff --git a/contributer_demo/demo2/coordination/formation_demo/my_leader.py b/contributer_demo/demo2/coordination/formation_demo/my_leader.py new file mode 100644 index 0000000..6a3f3c4 --- /dev/null +++ b/contributer_demo/demo2/coordination/formation_demo/my_leader.py @@ -0,0 +1,101 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +import rospy +from geometry_msgs.msg import Twist, Vector3, PoseStamped +from std_msgs.msg import String +from pyquaternion import Quaternion +import time +import math +import numpy +import sys +#if sys.argv[2] == '6': #formation_dict是该文件夹下的文件 +# from formation_dict import formation_dict_6 as formation_dict +#elif sys.argv[2] == '9': +# from formation_dict import formation_dict_9 as formation_dict +#elif sys.argv[2] == '18': +# from formation_dict import formation_dict_18 as formation_dict +if sys.argv[2] == '21': + from my_formation_dict import formation_dict_my as formation_dict +elif sys.argv[2] == '34': + from my_formation_dict import formation_dict_my as formation_dict + +class Leader: + + def __init__(self, uav_type, leader_id, uav_num): + self.hover = True + self.id = leader_id + self.local_pose = PoseStamped() + self.cmd_vel_enu = Twist() + self.follower_num = uav_num - 1 + self.followers_info = ["Moving"]*self.follower_num + self.follower_arrived_num = 0 + self.follower_all_arrived = True + self.avoid_accel = Vector3(0,0,0) + self.formation_config = 'waiting' + self.target_height_recorded = False + self.cmd = String() + self.f = 200 + self.Kz = 0.5 + self.local_pose_sub = rospy.Subscriber(uav_type+'_'+str(self.id)+"/mavros/local_position/pose", PoseStamped , self.local_pose_callback) + self.cmd_vel_sub = rospy.Subscriber("/xtdrone/leader/cmd_vel_flu", Twist, self.cmd_vel_callback) + self.avoid_vel_sub = rospy.Subscriber("/xtdrone/"+uav_type+'_'+str(self.id)+"/avoid_accel", Vector3, self.avoid_accel_callback) + self.leader_cmd_sub = rospy.Subscriber("/xtdrone/leader/cmd",String, self.cmd_callback) + + for i in range(self.follower_num):#遍历所有跟随者 + rospy.Subscriber('/xtdrone/'+uav_type+'_'+str(i+1)+'/info',String,self.followers_info_callback,i) + self.local_pose_pub = rospy.Publisher("/xtdrone/leader/pose", PoseStamped , queue_size=10) + self.formation_switch_pub = rospy.Publisher("/xtdrone/formation_switch",String, queue_size=10) + self.vel_enu_pub = rospy.Publisher('/xtdrone/'+uav_type+'_'+str(self.id)+'/cmd_vel_enu', Twist, queue_size=10) + self.cmd_pub = rospy.Publisher('/xtdrone/'+uav_type+'_'+str(self.id)+'/cmd', String, queue_size=10) + + def local_pose_callback(self, msg): + self.local_pose = msg + + def cmd_vel_callback(self, msg): + self.cmd_vel_enu = msg + if msg.linear.z == 0: + self.hover = True #悬停 + else: + self.hover = False + + def cmd_callback(self, msg): + if msg.data in formation_dict.keys(): + self.formation_config = msg.data + else: + self.cmd = msg.data + + def avoid_accel_callback(self, msg): + self.avoid_accel = msg + + def followers_info_callback(self, msg, id): + self.followers_info[id] = msg.data + #print("follower"+str(id)+":"+ msg.data) + + def loop(self): + rospy.init_node('leader') + rate = rospy.Rate(self.f) + while True: + #self.cmd_vel_enu = Twist() + for follower_info in self.followers_info: + if follower_info == "Arrived": # 一架到达 + self.follower_arrived_num += 1 + if self.follower_arrived_num > self.follower_num - 1: + self.follower_all_arrived = True #全部到达 + if self.follower_all_arrived: + self.formation_switch_pub.publish(self.formation_config) + if self.formation_config == 'pyramid': + if not self.target_height_recorded: + target_height = self.local_pose.pose.position.z + 2 + self.target_height_recorded = True + self.cmd_vel_enu.linear.z = self.Kz * (target_height - self.local_pose.pose.position.z) + self.cmd_vel_enu.linear.x += self.avoid_accel.x + self.cmd_vel_enu.linear.y += self.avoid_accel.y + self.cmd_vel_enu.linear.z += self.avoid_accel.z + self.vel_enu_pub.publish(self.cmd_vel_enu) + self.local_pose_pub.publish(self.local_pose) + self.cmd_pub.publish(self.cmd) + rate.sleep() + +if __name__ == '__main__': + leader = Leader(sys.argv[1], 0, int(sys.argv[2])) + leader.loop() diff --git a/contributer_demo/demo2/coordination/formation_demo/my_run_formation.sh b/contributer_demo/demo2/coordination/formation_demo/my_run_formation.sh new file mode 100644 index 0000000..c284794 --- /dev/null +++ b/contributer_demo/demo2/coordination/formation_demo/my_run_formation.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# -*- coding: UTF-8 -*- +python my_leader.py $1 $2 & #第一架飞机是 引领,其余飞机是 跟随。$1是飞机类型如iris,$2是数量 +uav_num=1 +while(( $uav_num< $2 )) +do + python my_follower.py $1 $uav_num $2& + let "uav_num++" +done diff --git a/contributer_demo/demo2/coordination/formation_demo/stop_formation.sh b/contributer_demo/demo2/coordination/formation_demo/stop_formation.sh new file mode 100644 index 0000000..1898ec2 --- /dev/null +++ b/contributer_demo/demo2/coordination/formation_demo/stop_formation.sh @@ -0,0 +1,2 @@ +kill -9 $(ps -ef|grep follower.py|gawk '$0 !~/grep/ {print $2}' |tr -s '\n' ' ') +kill -9 $(ps -ef|grep leader.py|gawk '$0 !~/grep/ {print $2}' |tr -s '\n' ' ') diff --git a/contributer_demo/demo2/px4launch/multi_vehicle21.launch b/contributer_demo/demo2/px4launch/multi_vehicle21.launch new file mode 100644 index 0000000..c567c0c --- /dev/null +++ b/contributer_demo/demo2/px4launch/multi_vehicle21.launch @@ -0,0 +1,631 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/contributer_demo/demo2/px4launch/multi_vehicle34.launch b/contributer_demo/demo2/px4launch/multi_vehicle34.launch new file mode 100644 index 0000000..b7fc42b --- /dev/null +++ b/contributer_demo/demo2/px4launch/multi_vehicle34.launch @@ -0,0 +1,1008 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/contributer_demo/demo3/ACO/aco.py b/contributer_demo/demo3/ACO/aco.py new file mode 100644 index 0000000..0dc95a0 --- /dev/null +++ b/contributer_demo/demo3/ACO/aco.py @@ -0,0 +1,164 @@ +import random +import numpy as np +import math +import time +import os +from geographiclib.geodesic import Geodesic +import math +geod = Geodesic.WGS84 + +# 计算方位角函数 +def azimuthAngle(pos): + if(pos[0] > 0 and pos[1] > 0): + angle = math.atan(pos[1] / pos[0]) + elif(pos[0] > 0 and pos[1] < 0): + angle = math.atan(pos[1] / pos[0]) + 2 * math.pi + elif(pos[0] < 0 and pos[1] > 0): + angle = math.atan(pos[1] / pos[0]) + math.pi + elif(pos[0] < 0 and pos[1] < 0): + angle = math.atan(pos[1] / pos[0]) + math.pi + + return (angle * 180 / math.pi) + +def angle_dis(pos): + angle = azimuthAngle(pos) + distance = math.sqrt(pow(pos[0],2)+pow(pos[1],2)) + return angle, distance + +class ACO(): + def __init__(self, vehicle_num, target_num,vehicle_speed, target, time_lim): + self.num_type_ant = vehicle_num + self.num_city = target_num+1 #number of cities + self.group = 200 # 200组蚂蚁,每组蚂蚁有6只 + self.num_ant = self.group*self.num_type_ant #number of ants + self.ant_vel = vehicle_speed + self.cut_time = time_lim + self.oneee = np.zeros((4,1)) + self.target = target + self.alpha = 1 #pheromone + self.beta = 2 + self.k1 = 0.03 + self.iter_max = 50 + #matrix of the distances between cities + def distance_matrix(self): + dis_mat = [] + for i in range(self.num_city): + dis_mat_each = [] + for j in range(self.num_city): + dis = math.sqrt(pow(self.target[i][0]-self.target[j][0],2)+pow(self.target[i][1]-self.target[j][1],2)) + dis_mat_each.append(dis) + dis_mat.append(dis_mat_each) + return dis_mat + def run(self): + print("ACO start, pid: %s" % os.getpid()) + start_time = time.time() + #distances of nodes + dis_list = self.distance_matrix() + dis_mat = np.array(dis_list) + value_init = self.target[:,2].transpose() + delay_init = self.target[:,3].transpose() + pheromone_mat = np.ones((self.num_type_ant,self.num_city,self.num_city)) # 信息素矩阵6*31*31,6只蚂蚁在31*31条的路径上留下的信息素 + #velocity of ants + path_new = [[0]for i in range (self.num_type_ant)] + count_iter = 0 + while count_iter < self.iter_max: + path_sum = np.zeros((self.num_ant,1)) + time_sum = np.zeros((self.num_ant,1)) + value_sum = np.zeros((self.num_ant,1)) + path_mat=[[0]for i in range (self.num_ant)] + value = np.zeros((self.group,1)) + atten = np.ones((self.num_type_ant,1)) * 0.2 + for ant in range(self.num_ant): # 对每只蚂蚁 + ant_type = ant % self.num_type_ant + visit = 0 # 当前节点 + if ant_type == 0: + unvisit_list=list(range(1,self.num_city))#have not visit + for j in range(1,self.num_city): # 行走的第几个城市 + #choice of next city + trans_list=[] + tran_sum=0 + trans=0 + #if len(unvisit_list)==0: + #print('len(unvisit_list)==0') + for k in range(len(unvisit_list)): # 计算本组蚂蚁没走过的城市的启发式函数 + trans +=np.power(pheromone_mat[ant_type][visit][unvisit_list[k]],self.alpha)*np.power(value_init[unvisit_list[k]]*self.ant_vel[ant_type]/(dis_mat[visit][unvisit_list[k]]*delay_init[unvisit_list[k]]),self.beta) + #trans +=np.power(pheromone_mat[ant_type][unvisit_list[k]],self.alpha)*np.power(0.05*value_init[unvisit_list[k]],self.beta) + trans_list.append(trans) + tran_sum = trans + rand = random.uniform(0,tran_sum) + for t in range(len(trans_list)): # 轮盘赌选择下一个点 + if(rand <= trans_list[t]): + visit_next = unvisit_list[t] + break + else: + continue + path_mat[ant].append(visit_next) # 每只蚂蚁走过的路径 + path_sum[ant] += dis_mat[path_mat[ant][j-1]][path_mat[ant][j]] # 每只蚂蚁走过的总路径长度 + time_sum[ant] += path_sum[ant] / self.ant_vel[ant_type] + delay_init[visit_next] # 每只蚂蚁使用的时间 + if time_sum[ant] > self.cut_time: + time_sum[ant]-=path_sum[ant] / self.ant_vel[ant_type] + delay_init[visit_next] + path_mat[ant].pop() + break + value_sum[ant] += value_init[visit_next] # 每只蚂蚁的value + unvisit_list.remove(visit_next)#update + visit = visit_next + if (ant_type) == self.num_type_ant-1: + small_group = int(ant/self.num_type_ant) + for k in range (self.num_type_ant): + value[small_group]+= value_sum[ant-k] # 每组蚂蚁的value + #iteration + if count_iter == 0: + value_new = max(value) + value = value.tolist() + for k in range (0,self.num_type_ant): + path_new[k] = path_mat[value.index(value_new)*self.num_type_ant+k] # 200组蚂蚁中value最大的蚂蚁的路径 + path_new[k].remove(0) # 移除起点 + else: + if max(value) > value_new: + value_new = max(value) + value = value.tolist() + for k in range (0,self.num_type_ant): + path_new[k] = path_mat[value.index(value_new)*self.num_type_ant+k] + path_new[k].remove(0) + + #update pheromone + pheromone_change = np.zeros((self.num_type_ant,self.num_city,self.num_city)) + for i in range(self.num_ant): + length = len(path_mat[i]) + m = i%self.num_type_ant + n = int(i/self.num_type_ant) + for j in range(length-1): + pheromone_change[m][path_mat[i][j]][path_mat[i][j+1]]+= value_init[path_mat[i][j+1]]*self.ant_vel[m]/(dis_mat[path_mat[i][j]][path_mat[i][j+1]]*delay_init[path_mat[i][j+1]]) + atten[m] += (value_sum[i]/(np.power((value_new-value[n]),4)+1))/self.group + + for k in range (self.num_type_ant): + pheromone_mat[k]=(1-atten[k])*pheromone_mat[k]+pheromone_change[k] + count_iter += 1 + + print("ACO result:", path_new) + middle_point = [47.3978502, 8.5455944] + path_new_point = [] + for z in range(len(path_new)): + path_new_point.append(self.target[path_new[z], 0:2]) + print("ACO path points m: ", path_new_point) + + path_ang_dis = [] + log = [] + for i in range(len(path_new_point)): + a_path_ang_dis = [] + a_log = [] + for j in range(len(path_new_point[i])): + angle, distance = angle_dis(path_new_point[i][j]) + g = geod.Direct(middle_point[0], middle_point[1], angle, distance) + a_log.append([g['lat2'], g['lon2']]) + a_path_ang_dis.append([angle, distance]) + path_ang_dis.append(a_path_ang_dis) + log.append(a_log) + + print("ACO angle and distance: ", path_ang_dis) + + print("ACO log: ", log) + end_time = time.time() + print("ACO time:", end_time - start_time) + return path_new, end_time - start_time + diff --git a/contributer_demo/demo3/ACO/evaluate.py b/contributer_demo/demo3/ACO/evaluate.py new file mode 100644 index 0000000..d029ce5 --- /dev/null +++ b/contributer_demo/demo3/ACO/evaluate.py @@ -0,0 +1,128 @@ +import numpy as np +import matplotlib.pyplot as plt +import random +import pandas as pd +import copy +from aco import ACO +from geographiclib.geodesic import Geodesic +import math +geod = Geodesic.WGS84 + +class Env(): + def __init__(self, vehicle_num, target_num, map_size, visualized=True, time_cost=None, repeat_cost=None): + self.vehicles_position = np.zeros(vehicle_num,dtype=np.int32) # 无人机位置 + self.vehicles_speed = np.zeros(vehicle_num,dtype=np.int32) # 无人机速度 + self.targets = np.zeros(shape=(target_num+1,4),dtype=np.int32) # 目标属性 + if vehicle_num==6: + self.size='small' + self.map_size = map_size + self.speed_range = [10, 10, 10] + #self.time_lim = 1e6 + self.time_lim = self.map_size / self.speed_range[1] + self.vehicles_lefttime = np.ones(vehicle_num,dtype=np.float32) * self.time_lim # 剩余的可用时间 + self.distant_mat = np.zeros((target_num+1,target_num+1),dtype=np.float32) + self.total_reward = 0 + self.reward = 0 + self.visualized = visualized + self.time = 0 + self.time_cost = time_cost + self.repeat_cost = repeat_cost + self.end = False + self.assignment = [[] for i in range(vehicle_num)] # 最终的分配路径 + self.task_generator() + + def task_generator(self): + for i in range(self.vehicles_speed.shape[0]): # 确定每个无人机的速度 + choose = random.randint(0,2) + self.vehicles_speed[i] = self.speed_range[choose] + for i in range(self.targets.shape[0]-1): # 确定每个目标点的坐标位置和奖励、消耗值 + self.targets[i+1,0] = random.randint(1,self.map_size) - 0.5*self.map_size # x position + self.targets[i+1,1] = random.randint(1,self.map_size) - 0.5*self.map_size # y position + self.targets[i+1,2] = random.randint(1,10) # reward + self.targets[i+1,3] = random.randint(5,10) # time consumption to finish the mission + for i in range(self.targets.shape[0]): # 计算距离矩阵 + for j in range(self.targets.shape[0]): + self.distant_mat[i,j] = np.linalg.norm(self.targets[i,:2]-self.targets[j,:2]) + self.targets_value = copy.deepcopy((self.targets[:,2])) + + def run(self, assignment, algorithm, play, rond): + self.assignment = assignment + self.algorithm = algorithm + self.play = play + self.rond = rond + self.get_total_reward() + if self.visualized: + self.visualize() + + def reset(self): + self.vehicles_position = np.zeros(self.vehicles_position.shape[0],dtype=np.int32) + self.vehicles_lefttime = np.ones(self.vehicles_position.shape[0],dtype=np.float32) * self.time_lim + self.targets[:,2] = self.targets_value + self.total_reward = 0 + self.reward = 0 + self.end = False + + def get_total_reward(self): + for i in range(len(self.assignment)): + speed = self.vehicles_speed[i] + for j in range(len(self.assignment[i])): + position = self.targets[self.assignment[i][j],:4] + self.total_reward = self.total_reward + position[2] + if j == 0: + self.vehicles_lefttime[i] = self.vehicles_lefttime[i] - np.linalg.norm(position[:2]) / speed - position[3] + else: + self.vehicles_lefttime[i] = self.vehicles_lefttime[i] - np.linalg.norm(position[:2]-position_last[:2]) / speed - position[3] + position_last = position + if self.vehicles_lefttime[i] > self.time_lim: + self.end = True + break + if self.end: + self.total_reward = 0 + break + + def visualize(self): + if self.assignment == None: + plt.scatter(x=0,y=0,s=200,c='k') + plt.scatter(x=self.targets[1:,0],y=self.targets[1:,1],s=self.targets[1:,2]*10,c='r') + plt.title('Target distribution') + plt.savefig('task_pic/'+self.size+'/'+self.algorithm+ "-%d-%d.png" % (self.play,self.rond)) + plt.cla() + else: + plt.title('Task assignment by '+self.algorithm +', total reward : '+str(self.total_reward)) + plt.scatter(x=0,y=0,s=200,c='k') + plt.scatter(x=self.targets[1:,0],y=self.targets[1:,1],s=self.targets[1:,2]*10,c='r') + for i in range(len(self.assignment)): + trajectory = np.array([[0,0,20]]) + for j in range(len(self.assignment[i])): + position = self.targets[self.assignment[i][j],:3] + trajectory = np.insert(trajectory,j+1,values=position,axis=0) + plt.scatter(x=trajectory[1:,0],y=trajectory[1:,1],s=trajectory[1:,2]*10,c='b') + plt.plot(trajectory[:,0], trajectory[:,1]) + plt.savefig('task_pic/'+self.size+'/'+self.algorithm+ "-%d-%d.png" % (self.play,self.rond)) + plt.cla() + +def evaluate(vehicle_num, target_num, map_size): + if vehicle_num==6: + size='small' + + re_aco=[[] for i in range(2)] + for i in range(1): + env = Env(vehicle_num,target_num,map_size,visualized=True) + for j in range(1): + aco = ACO(vehicle_num,target_num,env.vehicles_speed,env.targets,env.time_lim) + path_new, time = aco.run() + env.run(path_new,'ACO',i+1,j+1) + re_aco[i].append((env.total_reward,time)) + env.reset() + + + +if __name__=='__main__': + ''' + vehicle number: scalar + speeds of vehicles: array + target number: scalar + targets: array, the first line is depot, the first column is x position, the second column is y position, the third column is reward and the forth column is time consumption to finish the mission + time limit: scalar + ''' + evaluate(6,30,1e3) diff --git a/contributer_demo/demo3/Astar/Astar.py b/contributer_demo/demo3/Astar/Astar.py new file mode 100644 index 0000000..31a6ba3 --- /dev/null +++ b/contributer_demo/demo3/Astar/Astar.py @@ -0,0 +1,248 @@ +# -*- coding: utf-8 -*- +import numpy as np +import matplotlib.pyplot as plt +import collections +import heapq +import itertools +import time +from xlrd import open_workbook +import matplotlib.pyplot as plt +plt.rcParams['font.family'] = "kaiti" +import mpl_toolkits.mplot3d +from mpl_toolkits.mplot3d import Axes3D + +def getDist(pos1, pos2): + return np.sqrt(sum([(pos1[0] - pos2[0]) ** 2, (pos1[1] - pos2[1]) ** 2, (pos1[2] - pos2[2]) ** 2])) + +def heuristic_fun(initparams, k, t): + distance = getDist(k, t) + need_full_point = distance / 100 * 4 / 4 + need_comfort_point = distance / 100 * 4 / 4 + + return need_comfort_point + need_full_point + +def draw_path(sheet, path): + x = sheet.col_values(1)[1:] + y = sheet.col_values(2)[1:] + z = sheet.col_values(3)[1:] + list_length = len(sheet.col_values(4)[1:]) + food_index = [i for i in range(list_length) if sheet.col_values(4)[1:][i] == 1] + fire_index = [i for i in range(list_length) if sheet.col_values(4)[1:][i] == 0] + fig = plt.figure(figsize=(10,10)) + ax = fig.add_subplot(projection = '3d') + for i in range(list_length): + if i in food_index: + ax.scatter(x[i], y[i], z[i], s=10, c='k', marker='.') + else: + ax.scatter(x[i], y[i], z[i], s=10, c='r', marker='.') + ax.set_title('规划路径结果') + ax.set_xlabel('x') + ax.set_ylabel('y') + ax.set_zlabel('z') + path = np.array(path) + ax.plot3D(path[:, 0].tolist(), path[:, 1].tolist(), path[:, 2].tolist(), 'blue') + plt.show() + +class MinheapPQ: + ''' + 堆排序返回代价最小的可行点 + 已封装好,使用put向堆加入可行点,使用get获取代价值最小的可行点 + ''' + def __init__(self): + self.pq = [] + self.nodes = set() + self.entry_finder = {} + self.counter = itertools.count() + self.REMOVED = '' + + def put(self, item, priority): + if item in self.entry_finder: + self.check_remove(item) + count = next(self.counter) + entry = [priority, count, item] + self.entry_finder[item] = entry + heapq.heappush(self.pq, entry) + self.nodes.add(item) + + def check_remove(self, item): + if item not in self.entry_finder: + return + entry = self.entry_finder.pop(item) + entry[-1] = self.REMOVED + self.nodes.remove(item) + + def get(self): + while self.pq: + priority, count, item = heapq.heappop(self.pq) + if item is not self.REMOVED: + del self.entry_finder[item] + self.nodes.remove(item) + return item + raise KeyError('pop from an empty priority queue') + + def top_key(self): + return self.pq[0][0] + + def enumerate(self): + return self.pq + + def allnodes(self): + return self.nodes + +class Weighted_A_star(object): + def __init__(self): + self.start, self.goal = tuple(np.array([0, 500, 500])), tuple(np.array([1000, 555.67, 442.022])) + self.g = {self.start:-20,self.goal:np.inf} # 记录从起点到各个点的g,g值是固定的,当通过另一个点能有一个更小的g时改变 + self.Parent = {self.start:self.start} + self.CLOSED = set() + self.Path = [] + self.OPEN = MinheapPQ() # 存储节点及其代价 + self.full = {self.start:10} + self.comfort = {self.start:10} + self.OPEN.put(self.start, self.g[self.start] + heuristic_fun(self, self.start, self.goal)) # item, priority = g + h + self.lastpoint = self.start + self.lastg = {} + self.pathparent = {} + + def run(self): + xt = self.goal + xi = self.start + last_xi = xi + ban_xi = {} + flag = 0 + while(1): # 当没有到达终点时循环 + # 找到一个有可行食物点、篝火点的节点作为当前点 + xi = self.OPEN.get() + distance = getDist(xi, self.Parent[xi]) + full_change = (np.sign(xi[2] - self.Parent[xi][2]) + 5) * distance / 100 + reachable_full, reachable_comfort = self.reachable_point(xi) + + while((self.full[xi] > self.comfort[xi] and len(reachable_comfort) < 2 and xi[0] < 300) \ + or (self.full[xi] <= self.comfort[xi] and len(reachable_full) < 2 and xi[0] < 300) \ + or (self.full[xi] > self.comfort[xi] and len(reachable_comfort) < 2 and xi[0] < 300) \ + or (self.full[xi] <= self.comfort[xi] and len(reachable_full) < 2 and xi[0] < 300) \ + or(self.full[xi] > self.comfort[xi] and len(reachable_comfort) < 1 and xi[0] > 300) \ + or(self.full[xi] <= self.comfort[xi] and len(reachable_full) < 1 and xi[0] > 300) \ + or (xi in self.CLOSED) or xi[0] == 397.14 \ + or xi[0] == 604.287 or xi[0] == 632.907 or (xi[0] == 686.951 and self.Parent[xi][0] == 594.039)): + ban_xi[xi] = self.g[xi] + heuristic_fun(self, xi, self.goal) + xi = self.OPEN.get() + distance = getDist(xi, self.Parent[xi]) + full_change = (np.sign(xi[2] - self.Parent[xi][2]) + 5) * distance / 100 + reachable_full, reachable_comfort = self.reachable_point(xi) + + # 对当前点的后续处理 + print(xi, self.Parent[xi], self.full[xi], self.comfort[xi], len(reachable_full), len(reachable_comfort)) + self.pathparent[xi] = self.Parent[xi] + self.CLOSED.add(xi) + for xz in ban_xi: + self.OPEN.put(xz, ban_xi[xz]) + ban_xi = {} + if(self.goal in reachable_full or self.goal in reachable_comfort): + self.Parent[self.goal] = xi + self.pathparent[self.goal] = xi + break + + + if(int(100000 * self.full[xi]) > int(100000 * self.comfort[xi])): + self.process_child(xi, reachable_comfort, False) + if(int(100000 * self.full[xi]) < int(100000 * self.comfort[xi])): + self.process_child(xi, reachable_full, True) + if(int(100000 * self.full[xi]) == int(100000 * self.comfort[xi])): + self.process_child(xi, reachable_full, True) + self.process_child(xi, reachable_comfort, False) + + last_xi = xi + flag += 1 + + self.lastpoint = xi + self.Path = self.path() + draw_path(sheet, self.Path) + + + def process_child(self, xi, points, isfull): + # 对当前点后继可行节点的处理 + for xj in list(points.keys()): + if xj not in self.g: + self.g[xj] = np.inf + distance = getDist(xi, xj) + + if isfull: + self.full[xj] = self.full[xi] + points[xj] - (np.sign(xj[2] - xi[2]) + 5) * distance / 100 + self.comfort[xj] = self.comfort[xi] - (np.sign(xj[2] - xi[2]) + 5) * distance / 100 + else: + self.full[xj] = self.full[xi] - (np.sign(xj[2] - xi[2]) + 5) * distance / 100 + self.comfort[xj] = self.comfort[xi] + points[xj] - (np.sign(xj[2] - xi[2]) + 5) * distance / 100 + + a = self.g[xi] + 1 - self.full[xj] - self.comfort[xj] + self.lastg[xj] = self.g[xj] + self.g[xj] = a + self.Parent[xj] = xi + self.OPEN.put(xj, a + heuristic_fun(self, xj, self.goal)) + + def path(self): + path = [] + x = self.lastpoint + path.append([1000, 555.67, 442.022]) + i = 1 + start = self.start + while x != start: + path.append(list(x)) + x = self.pathparent[x] + i += 1 + path.append([0, 500, 500]) + print(path) + print(i + 1) + return path + + def reachable_point(self, xi): + # 输入:当前点坐标 + # 返回:可行食物点坐标及补充量,可行篝火点坐标及补充量 + fulldown = (self.full[xi] + 5) / 4 * 100 + comfortdown = (self.comfort[xi] + 5) / 4 * 100 + fullup = (self.full[xi] + 5) / 6 * 100 + comfortup = (self.comfort[xi] + 5) / 6 * 100 + + condition = (content[:, 1] <= xi[0] + fulldown) & (content[:, 1] > xi[0] - fulldown) &\ + (content[:, 2] <= xi[1] + fulldown) & (content[:, 2] >= xi[1] - fulldown) &\ + (content[:, 3] >= xi[2] - fulldown) & (content[:, 3] <= xi[2] + fullup) &\ + (content[:, 1] <= xi[0] + comfortdown) & (content[:, 1] > xi[0] - comfortdown) &\ + (content[:, 2] <= xi[1] + comfortdown) & (content[:, 2] >= xi[1] - comfortdown) &\ + (content[:, 3] >= xi[2] - comfortdown) & (content[:, 3] <= xi[2] + comfortup) & (content[:, 1] != xi[0]) + full_condition = condition & (content[:, 4] == 1) + comfort_condition = condition & (content[:, 4] == 0) + + reachable_full = dict(zip(list(map(tuple, content[full_condition][:, 1:4])), content[full_condition][:, -1])) + reachable_comfort = dict(zip(list(map(tuple, content[comfort_condition][:, 1:4])), content[comfort_condition][:, -1])) + + for xj in list(reachable_full.keys()): + distance = getDist(xi, xj) + xj_full = self.full[xi] - (np.sign(xj[2] - xi[2]) + 5) * distance / 100 + xj_comfort = self.comfort[xi] - (np.sign(xj[2] - xi[2]) + 5) * distance / 100 + if xj == (1000, 555.67, 442.022) and (xj_full <-3 or xj_comfort < -3): + del reachable_full[xj] + elif(xj_full < -5 or xj_comfort < -5): + del reachable_full[xj] + for xj in list(reachable_comfort.keys()): + distance = getDist(xi, xj) + xj_full = self.full[xi] - (np.sign(xj[2] - xi[2]) + 5) * distance / 100 + xj_comfort = self.comfort[xi] - (np.sign(xj[2] - xi[2]) + 5) * distance / 100 + if xj == (1000, 555.67, 442.022) and (xj_full <-3 or xj_comfort < -3): + del reachable_comfort[xj] + elif(xj_full < -5 or xj_comfort < -5): + del reachable_comfort[xj] + + return reachable_full, reachable_comfort + + +if __name__ == '__main__': + + workbook = open_workbook(r'附件.xlsx') + sheet = workbook.sheet_by_index(0) + content = np.array([sheet.row_values(i) for i in range(2, 589)]) + + Astar = Weighted_A_star() + sta = time.time() + path = Astar.run() + print(time.time() - sta) + draw_path(sheet, path) diff --git a/contributer_demo/demo3/Astar/judge.py b/contributer_demo/demo3/Astar/judge.py new file mode 100644 index 0000000..5f0bd93 --- /dev/null +++ b/contributer_demo/demo3/Astar/judge.py @@ -0,0 +1,108 @@ +from xlrd import open_workbook +import numpy as np +import copy + +def getDist(pos1, pos2): + return np.sqrt(sum([(pos1[0] - pos2[0]) ** 2, (pos1[1] - pos2[1]) ** 2, (pos1[2] - pos2[2]) ** 2])) + +def judge_path(path): + full = 10 + comfort = 10 + for i in range(1, len(path)): + distance = getDist(path[i], path[i - 1]) + full = full - (np.sign(path[i][2] - path[i-1][2]) + 5) * distance / 100 + comfort = comfort - (np.sign(path[i][2] - path[i-1][2]) + 5) * distance / 100 + if(full <= -5 or comfort <= -5): + return 0 + if(content[np.where(content[:, 1] == path[i][0]), 4] == 0): + comfort = comfort + content[np.where(content[:, 1] == path[i][0]), 5] + else: + full = full + content[np.where(content[:, 1] == path[i][0]), 5] + if(full > -3 and comfort > -3): + if(len(path) == 22): + if(path not in all_paths): + all_paths.append(path) + return 1 + else: + return 0 + + +def compute(all_paths): + for w in range(len(all_paths)): + + thispath = all_paths[w] + print('**********************************************') + print(len(thispath)) + print(thispath) + path = thispath + + full = 10 + comfort = 10 + for i in range(1, len(thispath)): + distance = getDist(path[i], path[i - 1]) + full = full - (np.sign(path[i][2] - path[i-1][2]) + 5) * distance / 100 + comfort = comfort - (np.sign(path[i][2] - path[i-1][2]) + 5) * distance / 100 + print(full, comfort) + if(content[np.where(content[:, 1] == path[i][0]), 4] == 0): + comfort = comfort + content[np.where(content[:, 1] == path[i][0]), 5] + else: + full = full + content[np.where(content[:, 1] == path[i][0]), 5] + + print(full, comfort) + + +if __name__ == '__main__': + + all_paths = [] + workbook = open_workbook(r'附件.xlsx') + sheet = workbook.sheet_by_index(0) + content = np.array([sheet.row_values(i) for i in range(1, 589)]) + + path = [[0, 500, 500], [49.2701, 501.378, 474.378], [66.4539, 493.45, 485.579], [205.93, 530.015, 462.304], [325.373, 562.813, 450.432], [341.06, 554.258, 440.06], [396.166, 557.686, 463.285], [414.847, 550.557, 458.839], [432.744, 544.693, 464.194], [466.047, 540.082, 447.639], [497.857, 539.374, 473.068], [518.037, 544.067, 478.518], [594.039, 532.547, 476.9], [649.996, 543.743, 471.353], [668.799, 533.409, 475.24], [686.951, 534.936, 468.021], [703.063, 520.512, 467.263], [739.278, 513.132, 452.663], [758.889, 512.304, 450.352], [803.157, 544.765, 446.707], [866.403, 557.739, 448.524], [904.524, 552.094, 445.804], [965.271, 559.438, 441.67], [979.678, 552.128, 452.517], [1000, 555.67, 442.022]] + for k in range(0, len(path) - 2): + index1 = int(np.where(content[:, 1] == path[k][0])[0]) + 1 + index2 = int(np.where(content[:, 1] == path[k + 2][0])[0]) + change_nodes = content[index1:index2, 1:4].tolist() + for j in range(len(change_nodes)): + path_copy1 = path.copy() + path_copy1[k+1] = change_nodes[j] + flag = judge_path(path_copy1) + if(flag == 0): + continue + + for z in range(1, len(path_copy1) - 1): + pathj = path_copy1.copy() + del pathj[z] + flag = judge_path(pathj) + if(flag == 0): + continue + + for a in range(1, len(pathj) - 1): + patha = pathj.copy() + del patha[a] + flag = judge_path(patha) + if(flag == 0): + continue + + for b in range(1, len(patha) - 1): + pathb = patha.copy() + del pathb[b] + judge_path(pathb) + if(flag == 0): + continue + + print('************************************************************') + for i in all_paths: + print(i) + print(len(all_paths)) + compute(all_paths) + + + + + + + + + + diff --git a/coordination/formation_demo/run_formation.sh b/coordination/formation_demo/run_formation.sh index d276989..4365866 100755 --- a/coordination/formation_demo/run_formation.sh +++ b/coordination/formation_demo/run_formation.sh @@ -3,6 +3,6 @@ python2.7 leader.py $1 $2 & uav_num=1 while(( $uav_num< $2 )) do - python2.7 follower_consensus.py $1 $uav_num $2& + python2.7 follower.py $1 $uav_num $2& let "uav_num++" done