diff --git a/box_calibration/grand_tour_ceres_apps/ros_camera_camera_program.cpp b/box_calibration/grand_tour_ceres_apps/ros_camera_camera_program.cpp index 0a31a488..e839fe01 100644 --- a/box_calibration/grand_tour_ceres_apps/ros_camera_camera_program.cpp +++ b/box_calibration/grand_tour_ceres_apps/ros_camera_camera_program.cpp @@ -442,7 +442,7 @@ void ROSCameraCameraProgram::setBoardPoseParametersVariable() { } fs::path ROSCameraCameraProgram::fetchOutputPath() { - if (output_path == "") { + // if (output_path == "") { std::string calib_package_name = "box_calibration"; std::filesystem::path calib_root_path = ros::package::getPath(calib_package_name); if (calib_root_path.empty()) { @@ -453,6 +453,6 @@ fs::path ROSCameraCameraProgram::fetchOutputPath() { "calibration/raw_calibration_output/cameras-intrinsics-extrinsics_latest.yaml"; std::filesystem::path path = calib_root_path / relative_output_path; return path; - } - return output_path; + // } + // return output_path; } diff --git a/box_calibration/grand_tour_ceres_apps/ros_camera_camera_program.h b/box_calibration/grand_tour_ceres_apps/ros_camera_camera_program.h index 870619bd..5ba7ac79 100644 --- a/box_calibration/grand_tour_ceres_apps/ros_camera_camera_program.h +++ b/box_calibration/grand_tour_ceres_apps/ros_camera_camera_program.h @@ -32,7 +32,7 @@ class ROSCameraCameraProgram : public CameraCameraProgram { return is_valid; } private: - + std::filesystem::path fetchOutputPath(); bool computeAndPopulateInitialGuessModelPose(Observations2dModelPoints3dPointIDsPose3dSensorName &observation); bool diff --git a/box_configuration/anymal/lpc/.bashrc b/box_configuration/anymal/lpc/.bashrc index 6c8f1806..9a5d3852 100644 --- a/box_configuration/anymal/lpc/.bashrc +++ b/box_configuration/anymal/lpc/.bashrc @@ -16,8 +16,8 @@ HISTCONTROL=ignoreboth shopt -s histappend # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) -HISTSIZE=1000 -HISTFILESIZE=2000 +HISTSIZE=100000 +HISTFILESIZE=200000 # check the window size after each command and, if necessary, # update the values of LINES and COLUMNS. diff --git a/box_configuration/anymal/lpc/alias.sh b/box_configuration/anymal/lpc/alias.sh index ee9e35bf..45b9803f 100644 --- a/box_configuration/anymal/lpc/alias.sh +++ b/box_configuration/anymal/lpc/alias.sh @@ -3,12 +3,11 @@ #alias tk='tmux kill-server' #alias tk_dev='tmux kill-session -a' -alias l-lpc='tmuxp load /home/rsl/git/grand_tour_box/box_launch/tmux/lpc.yaml' -alias l-recording='tmuxp load /home/rsl/git/grand_tour_box/box_launch/tmux/lpc_recording.yaml' +alias l-lpc='tmuxp load /home/${USER}/${GRANDTOUR_SCRIPT_WORKSPACE}/src/grand_tour_box/box_launch/tmux/lpc.yaml' # Here sim-link does not work -alias chrony_set_box="sudo killall chronyd; sudo rm -f /etc/chrony/chrony.conf; sudo cp /home/rsl/git/grand_tour_box/box_configuration/anymal/lpc/chrony.conf /etc/chrony/chrony.conf; sudo chronyd" +alias chrony_set_box="sudo killall chronyd; sudo rm -f /etc/chrony/chrony.conf; sudo cp /home/${USER}/${GRANDTOUR_SCRIPT_WORKSPACE}/src/grand_tour_box/box_configuration/anymal/lpc/chrony.conf /etc/chrony/chrony.conf; sudo chronyd" alias chrony_set_default="sudo killall chronyd; sudo rm -f /etc/chrony/chrony.conf; sudo cp /etc/chrony/chrony.conf.orig /etc/chrony/chrony.conf; sudo chronyd" -alias sync-clocks="chrony_set_box; sudo killall chronyd; sudo chronyd" +alias sync-clocks="sudo killall chronyd; sudo chronyd" alias tk="tmux kill-session -t lpc-box" \ No newline at end of file diff --git a/box_configuration/anymal/lpc/chrony.conf b/box_configuration/anymal/lpc/chrony.conf index 88b7be39..6ba34432 100644 --- a/box_configuration/anymal/lpc/chrony.conf +++ b/box_configuration/anymal/lpc/chrony.conf @@ -5,7 +5,7 @@ allow 192.168.0.149 allow 10.8.0 ##########################3 ENABLE FOR BOX ############################################## -#allow 192.168.2.51 +allow 192.168.2.51 ###################################################################################### # Get the time from the ntp server pool @@ -37,7 +37,7 @@ maxupdateskew 100 #rtcsync # set process priority -sched_priority 90 +sched_priority 95 # lock chronyd into RAM so that it will never be paged out (for lower and more consistent latency) lock_all @@ -49,7 +49,6 @@ logdir /var/log/chrony # set the threshold for the adjustment of the system clock that will generate a syslog message logchange 0.5 -# Step the system clock ############################## ENABLE FOR BOX ################################## server 192.168.2.51 iburst minpoll -4 maxpoll -4 prefer @@ -58,11 +57,8 @@ server 192.168.2.51 iburst minpoll -4 maxpoll -4 prefer server anymal-d039-lpc noselect server anymal-d039-npc noselect +# Step the system clock hwtimestamp * minpoll -10 -# makestep 0.1 -1 # This always steps automatically - -# This always steps automatically -# makestep 0.1 -1 # This does not step automatically makestep 1.0 10 diff --git a/box_configuration/anymal/lpc/powerline.service b/box_configuration/anymal/lpc/powerline.service index 2da7e67b..98ed327e 100644 --- a/box_configuration/anymal/lpc/powerline.service +++ b/box_configuration/anymal/lpc/powerline.service @@ -5,7 +5,7 @@ After=anymal-customer-12V-startup.target [Service] Type=simple User=rsl -ExecStart=/bin/bash -c 'source /opt/ros/noetic/setup.bash && source /home/rsl/catkin_ws/devel/setup.bash && python3 /home/rsl/git/grand_tour_box/box_configuration/anymal/lpc/powerline.py' +ExecStart=/bin/bash -c 'source /opt/ros/noetic/setup.bash && source /home/integration/catkin_ws/devel/setup.bash && python3 /home/integration/catkin_ws/src/grand_tour_box/box_configuration/anymal/lpc/powerline.py' Restart=on-failure RestartSec=5 diff --git a/box_configuration/anymal/npc/alias.sh b/box_configuration/anymal/npc/alias.sh index cadbf51a..f95ed1a1 100644 --- a/box_configuration/anymal/npc/alias.sh +++ b/box_configuration/anymal/npc/alias.sh @@ -3,11 +3,9 @@ #alias tk='tmux kill-server' #alias tk_dev='tmux kill-session -a' -alias l-npc='tmuxp load /home/rsl/git/grand_tour_box/box_launch/tmux/npc.yaml' +# This is the alais to run on the NPC of the robot. +alias l-npc='tmuxp load /home/${USER}/${GRANDTOUR_SCRIPT_WORKSPACE}/src/grand_tour_box/box_launch/tmux/npc.yaml' -# Here sim-link does not work -alias chrony_set_box="sudo killall chronyd; sudo rm -f /etc/chrony/chrony.conf; sudo cp /home/rsl/git/grand_tour_box/box_configuration/anymal/npc/chrony.conf /etc/chrony/chrony.conf; sudo chronyd" -alias chrony_set_default="sudo killall chronyd; sudo rm -f /etc/chrony/chrony.conf; sudo cp /etc/chrony/grand_tour_box/chrony_robot.conf /etc/chrony/chrony.conf; sudo chronyd" -alias sync-clocks="chrony_set_box; sudo killall chronyd; sudo chronyd" +alias sync-clocks="sudo killall chronyd; sudo chronyd" alias tk="tmux kill-session -t npc-box" \ No newline at end of file diff --git a/box_configuration/anymal/npc/chrony.conf b/box_configuration/anymal/npc/chrony.conf deleted file mode 100644 index 892b4d60..00000000 --- a/box_configuration/anymal/npc/chrony.conf +++ /dev/null @@ -1,48 +0,0 @@ -## server config - -# file containing authentication info -keyfile /etc/chrony/chrony.keys - -## Generic config -# Note: We do not have a `makestep` configuration, as we want to have this disabled. We run it manually on specific points in time, see -# `chrony-wait.service`. - -driftfile /var/lib/chrony/chrony.drift -dumpdir /var/lib/chrony - -# Save NTS keys and cookies. -ntsdumpdir /var/lib/chrony - -# Sets the threshold for determining whether an estimate might be so unreliable that it should not be used (ppm) -maxupdateskew 100 - -# This directive enables kernel synchronisation (every 11 minutes) of the real-time clock. -#rtcsync - -# set process priority -sched_priority 90 - -# lock chronyd into RAM so that it will never be paged out (for lower and more consistent latency) -lock_all - -## log config -log measurements statistics tracking -logdir /var/log/chrony - -# set the threshold for the adjustment of the system clock that will generate a syslog message -logchange 0.5 - - -server 192.168.2.51 iburst minpoll -4 maxpoll -4 prefer -# server 192.168.0.128 noselect - -hwtimestamp * minpoll -10 - - -# This always steps automatically -# makestep 0.1 -1 - -# This does not step automatically -makestep 1.0 10 - -rtcsync \ No newline at end of file diff --git a/box_launch/scripts/cleanup_session_robot.sh b/box_launch/scripts/cleanup_session_robot.sh index 40105ace..3d6b24cc 100755 --- a/box_launch/scripts/cleanup_session_robot.sh +++ b/box_launch/scripts/cleanup_session_robot.sh @@ -5,6 +5,13 @@ killall node_manager yes y | rosnode cleanup rm -rf /dev/shm/COSMO_SHM +# On the robot +export GRANDTOUR_WORKSPACE="i_hate_docker_ws" +export GRANDTOUR_SCRIPT_WORKSPACE="boxi_scripts_ws" + +# On the Box +export BOX_WORKSPACE="catkin_ws" + if ps aux | grep '[f]kie' > /dev/null; then ps aux | grep '[f]kie' | awk '{print $2}' | xargs kill fi \ No newline at end of file diff --git a/box_launch/tmux/lpc.yaml b/box_launch/tmux/lpc.yaml index 4d059b2b..a6daf0b0 100755 --- a/box_launch/tmux/lpc.yaml +++ b/box_launch/tmux/lpc.yaml @@ -15,10 +15,10 @@ windows: panes: - shell_command: - source /opt/ros/noetic/setup.bash - - source ~/catkin_ws/devel/setup.bash + - source /home/${USER}/${GRANDTOUR_WORKSPACE}/devel/setup.bash - roslaunch box_recording rosbag_record_node_lpc.launch - shell_command: - source /opt/ros/noetic/setup.bash - - source ~/catkin_ws/devel/setup.bash + - source /home/${USER}/${GRANDTOUR_WORKSPACE}/devel/setup.bash - df -h /data focus: true \ No newline at end of file diff --git a/box_launch/tmux/lpc_recording.yaml b/box_launch/tmux/lpc_recording.yaml index d34cfb72..4724b77a 100755 --- a/box_launch/tmux/lpc_recording.yaml +++ b/box_launch/tmux/lpc_recording.yaml @@ -15,7 +15,7 @@ windows: panes: - shell_command: - source /opt/ros/noetic/setup.bash - - source ~/catkin_ws/devel/setup.bash + - source /home/${USER}/${BOX_WORKSPACE}/devel/setup.bash - roslaunch bringup_fkie fkie_lpc.launch autostart_launch_files:=" $(rospack find box_recording)/launch/rosbag_record_node_lpc.launch @@ -23,6 +23,6 @@ windows: use_gui:=false - shell_command: - source /opt/ros/noetic/setup.bash - - source ~/catkin_ws/devel/setup.bash + - source /home/${USER}/${BOX_WORKSPACE}/devel/setup.bash - df -h /data focus: true \ No newline at end of file diff --git a/box_launch/tmux/npc.yaml b/box_launch/tmux/npc.yaml index ac3b6d96..ac5648ff 100755 --- a/box_launch/tmux/npc.yaml +++ b/box_launch/tmux/npc.yaml @@ -16,10 +16,10 @@ windows: - shell_command: - source /etc/robot/ros.conf - source /opt/ros/noetic/setup.bash - - source ~/catkin_ws/devel/setup.bash + - source /home/${USER}/${GRANDTOUR_WORKSPACE}/devel/setup.bash - roslaunch box_recording rosbag_record_node_npc.launch - shell_command: - source /opt/ros/noetic/setup.bash - - source ~/catkin_ws/devel/setup.bash + - source /home/${USER}/${GRANDTOUR_WORKSPACE}/devel/setup.bash - df -h /data focus: true \ No newline at end of file diff --git a/box_utils/box_recording/src/box_recording/rosbag_record_node_grpc.py b/box_utils/box_recording/src/box_recording/rosbag_record_node_grpc.py index c00fc340..1ab5a816 100755 --- a/box_utils/box_recording/src/box_recording/rosbag_record_node_grpc.py +++ b/box_utils/box_recording/src/box_recording/rosbag_record_node_grpc.py @@ -74,7 +74,8 @@ def SendMessage(self, request, context): if self.recorder_node.store_debug_logs: store_debug_logs_to_folder( self.recorder_node.start_recording_time, - directory="/home/rsl/.ros", + rospy.Time.now(), + directory=os.path.expanduser("~/.ros"), copy_to=os.path.join(self.recorder_node.bag_base_path, "ros_logs_" + self.recorder_node.node), ) @@ -108,22 +109,36 @@ def __init__(self): self.namespace = rospy.get_namespace() self.bag_running = False - default_path = rospkg.RosPack().get_path("box_recording") + "/data" + default_path = "/data" + # TODO: maybe customizable better + # try: + # default_path = rospkg.RosPack().get_path("box_recording") + "/data" + # except rospkg.ResourceNotFound: + # # fallback path if package is not built/installed + # rospy.logwarn("[RosbagRecordNode(" + self.node + ")] Package 'box_recording' not found. It may not be built or installed correctly.") + # default_path = "/data" + self.data_path = rospy.get_param("~data_path", default_path) self.port = rospy.get_param("~port") self.info_string = "" if not os.path.exists(self.data_path): - self.data_path = default_path - rospy.logwarn( - "[RosbagRecordNode(" - + self.node - + ")] Data path " - + self.data_path - + " does not exist. Will write to " - + default_path - ) + try: + os.makedirs(self.data_path, exist_ok=True) + rospy.loginfo("[RosbagRecordNodeGRPC(" + self.node + ")] Created data path: " + self.data_path) + except Exception as e: + rospy.logwarn( + "[RosbagRecordNodeGRPC(" + + self.node + + ")] Failed to create data path " + + self.data_path + + ": " + + str(e) + + ". Will write to " + + default_path + ) + self.data_path = default_path rp = rospkg.RosPack() self.rosbag_recorder_bash_script = os.path.join(rp.get_path("box_recording"), "bin/record_bag.sh") @@ -139,11 +154,6 @@ def __init__(self): # server.wait_for_termination() -# tomorrow start out by working on wrapping up the correct ports and addresses for the grpc server and client for lpc and npc. -# push the code to a branch on boxi opc - use boxi opc to update the box. -# change all of the fkie setting to the minimum. - - if __name__ == "__main__": rospy.loginfo("Starting ROS bag record node") RosbagRecordNodeGrpc() diff --git a/box_utils/box_rviz/cfg/recording.rviz b/box_utils/box_rviz/cfg/recording.rviz index ea64c407..4ae9186b 100755 --- a/box_utils/box_rviz/cfg/recording.rviz +++ b/box_utils/box_rviz/cfg/recording.rviz @@ -4,11 +4,14 @@ Panels: Name: Displays Property Tree Widget: Expanded: - - /Global Options1 + - /Box1/Status1 + - /IMU1/Stim320 IMU1/Status1 - /Lidar1/HesaiXT32 Lidar1/Autocompute Value Bounds1 - /Lidar1/Livox Lidar1/Autocompute Value Bounds1 - Splitter Ratio: 0.5338541865348816 - Tree Height: 1447 + - /HDR [live]1/HDR Center (ROS2)1 + - /HDR [live]1/HDR Center (ROS2)1/Status1 + Splitter Ratio: 0.5456026196479797 + Tree Height: 702 - Class: rviz/Selection Name: Selection - Class: rviz/Tool Properties @@ -47,7 +50,7 @@ Panels: - /ZED2i1 - /HDR [live]1 Splitter Ratio: 0.5601415038108826 - Tree Height: 303 + Tree Height: 270 Preferences: PromptSaveOnExit: true Toolbars: @@ -114,6 +117,8 @@ Visualization Manager: Value: true cpt7_antenna_back: Value: true + cpt7_antenna_back_model: + Value: true cpt7_antenna_front: Value: true cpt7_imu: @@ -189,6 +194,8 @@ Visualization Manager: {} ap20_imu: {} + box_base_model: + {} cpt7_imu: cpt7_antenna_back: {} @@ -212,11 +219,11 @@ Visualization Manager: livox_model: {} prism: - prism_model: - {} + {} + prism_model: + {} stim320_imu: - box_base_model: - {} + {} zed_base_link: zed2i_base_link: zed2i_camera_center: @@ -227,6 +234,8 @@ Visualization Manager: zed2i_right_camera_optical_frame: zed2i_right_camera_frame: {} + cpt7_antenna_back_model: + {} Update Interval: 0 Value: true - Alpha: 1 @@ -308,6 +317,11 @@ Visualization Manager: Alpha: 1 Show Axes: false Show Trail: false + cpt7_antenna_back_model: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true cpt7_antenna_front: Alpha: 1 Show Axes: false @@ -340,7 +354,6 @@ Visualization Manager: Alpha: 1 Show Axes: false Show Trail: false - Value: true imu_sensor_frame: Alpha: 1 Show Axes: false @@ -357,7 +370,6 @@ Visualization Manager: Alpha: 1 Show Axes: false Show Trail: false - Value: true prism: Alpha: 1 Show Axes: false @@ -404,7 +416,7 @@ Visualization Manager: Show Axes: false Show Trail: false Name: Box - Robot Description: robot_description + Robot Description: boxi_description TF Prefix: "" Update Interval: 0 Value: true @@ -538,20 +550,20 @@ Visualization Manager: Transport Hint: compressed Unreliable: false Value: true - Enabled: false + Enabled: true Name: Alphasense - Class: rviz/Group Displays: - Alpha: 1 Class: rviz_plugin_tutorials/Imu Color: 204; 51; 204 - Enabled: true + Enabled: false History Length: 1 Name: Adis IMU Queue Size: 10 Topic: /gt_box/adis16475_node/imu Unreliable: false - Value: true + Value: false - Alpha: 1 Class: rviz_plugin_tutorials/Imu Color: 204; 51; 204 @@ -579,10 +591,20 @@ Visualization Manager: History Length: 1 Name: Stim320 IMU Queue Size: 10 - Topic: /gt_box/stim320 + Topic: /gt_box/stim320/imu Unreliable: false Value: false - Enabled: false + - Alpha: 1 + Class: rviz_plugin_tutorials/Imu + Color: 204; 51; 204 + Enabled: true + History Length: 1 + Name: cpt7_imu_live + Queue Size: 10 + Topic: /gt_box/cpt7/imu/data_raw + Unreliable: false + Value: true + Enabled: true Name: IMU - Class: rviz/Group Displays: @@ -624,7 +646,7 @@ Visualization Manager: Channel Name: intensity Class: rviz/PointCloud2 Color: 252; 175; 62 - Color Transformer: AxisColor + Color Transformer: FlatColor Decay Time: 0 Enabled: true Invert Rainbow: false @@ -812,7 +834,7 @@ Visualization Manager: Views: Current: Class: rviz/Orbit - Distance: 5.507778167724609 + Distance: 2.3071579933166504 Enable Stereo Rendering: Stereo Eye Separation: 0.05999999865889549 Stereo Focal Distance: 1 @@ -828,9 +850,9 @@ Visualization Manager: Invert Z Axis: true Name: Current View Near Clip Distance: 0.009999999776482582 - Pitch: 0.30539754033088684 + Pitch: 0.27039697766304016 Target Frame: box_base - Yaw: 2.860380172729492 + Yaw: 2.0640134811401367 Saved: - Class: rviz/Orbit Distance: 1.1776375770568848 @@ -877,10 +899,10 @@ Window Geometry: collapsed: false HDR Right: collapsed: false - Height: 1736 + Height: 1672 Hide Left Dock: false Hide Right Dock: true - QMainWindow State: 000000ff00000000fd0000000400000000000001820000066efc0200000016fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb0000001a004b0069006e006500630074002000430061006d0065007200610000000191000001010000000000000000fb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0056006900650077007302000004c000000196000001d000000134fb000000100044006900730070006c006100790073010000003d0000066e000000c900fffffffb0000001a004b0069006e006500630074002000430061006d0065007200610000000000ffffffff0000000000000000fb0000000c00430061006d00650072006100000001d20000007c0000000000000000fb00000016005a006f006f006d002000430061006d0065007200610100000131000000160000000000000000fb0000001c0054006800650072006d0061006c002000430061006d006500720061010000014d000000160000000000000000fb0000001a0042006c00610063006b0066006c0079002000720065006100720000000000ffffffff0000000000000000fb0000001c0042006c00610063006b0066006c0079002000660072006f006e00740000000000ffffffff0000000000000000fb0000000a0049006d0061006700650200000df00000019100000280000001e0fb0000000a0049006d006100670065000000006e000003cd0000000000000000fb0000000a0049006d00610067006502000005b40000033b00000280000001e0fb0000000a0049006d006100670065000000006e000008b60000000000000000fb0000000a0049006d006100670065000000006e000008b60000000000000000fb0000000a0049006d006100670065000000006e000008b60000000000000000fb0000000a0049006d006100670065000000006e000007f2000000000000000000000001000003e20000043efc0200000009fb000000100044006900730070006c006100790073000000003d0000043e000000c900fffffffb0000001e0054006f006f006c002000500072006f0070006500720074006900650073000000003c000000b80000005c00fffffffc0000003d000002b70000000000fffffffa000000000100000003fb00000012005000610074006800500061006e0065006c0000000000ffffffff0000000000000000fb00000012005000610074006800500061006e0065006c0100000000ffffffff0000000000000000fb0000000a0056006900650077007300000004ba000001720000010000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b20000000000000000fb000000140046006500650064006200610063006b00200031000000003d000000360000000000000000fb000000140046006500650064006200610063006b002000340000000079000000360000000000000000fb000000140046006500650064006200610063006b0020003300000000b5000000360000000000000000fb000000140046006500650064006200610063006b0020003200000000f1000000360000000000000000fb0000000c0052006500730075006c0074000000012d0000003600000000000000000000000200000f9a00000182fc0100000001fb0000001e0054006f006f006c002000500072006f007000650072007400690065007300000000000000075a00000000000000000000000300000af80000022afc0100000014fb0000001e0041006c00700068006100730065006e007300650020004c0065006600740000000000000001d8000000ba00fffffffb0000002a0041006c00700068006100730065006e00730065002000460072006f006e00740020004c00650066007400000001de0000023d000000e200fffffffb0000002e0041006c00700068006100730065006e00730065002000460072006f006e00740020004d006900640064006c006500000004210000026e000000f500fffffffb0000002c0041006c00700068006100730065006e00730065002000460072006f006e0074002000520069006700680074000000069500000254000000eb00fffffffb000000200041006c00700068006100730065006e0073006500200052006900670068007400000008ef00000209000000c200fffffffb00000012004800440052002000460072006f006e00740000000464000000fb0000009300fffffffb000000140048004400520020004d006900640064006c00650100000697000001540000000000000000fb000000120048004400520020005200690067006800740000000565000000bf0000009300fffffffb00000014005a00450044003200690020004c0065006600740000000467000001810000009400fffffffb00000016005a004500440032006900200052006900670068007400000005ee000004680000009c00fffffffb0000001e0048004400520020004c006500660074002000280052004f005300320029000000075f000002b4000000bd00fffffffb000000100048004400520020004c0065006600740000000902000001f60000008a00fffffffb000000100048004400520020004c0065006600740000000d43000002880000000000000000fb00000022004800440052002000430065006e007400650072002000280052004f0053003200290000000a1900000234000000cf00fffffffb00000020004800440052002000520049006700680074002000280052004f0053003200290000000c5300000265000000c600fffffffb0000000a0049006d0061006700650100000ae6000001d10000000000000000fb0000000a0049006d0061006700650100000cc3000002c40000000000000000fb0000000a0049006d0061006700650100000f930000021a0000000000000000fb0000000800540069006d006500000000000000073f0000041800fffffffb0000000800540069006d00650100000000000004500000000000000000000009700000066e00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + QMainWindow State: 000000ff00000000fd000000040000000000000268000003b6fc0200000016fb0000001200530065006c0065006300740069006f006e00000001e10000009b000000b000fffffffb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb0000001a004b0069006e006500630074002000430061006d0065007200610000000191000001010000000000000000fb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0056006900650077007302000004c000000196000001d000000134fb000000100044006900730070006c006100790073010000006e000003b60000018200fffffffb0000001a004b0069006e006500630074002000430061006d0065007200610000000000ffffffff0000000000000000fb0000000c00430061006d00650072006100000001d20000007c0000000000000000fb00000016005a006f006f006d002000430061006d0065007200610100000131000000160000000000000000fb0000001c0054006800650072006d0061006c002000430061006d006500720061010000014d000000160000000000000000fb0000001a0042006c00610063006b0066006c0079002000720065006100720000000000ffffffff0000000000000000fb0000001c0042006c00610063006b0066006c0079002000660072006f006e00740000000000ffffffff0000000000000000fb0000000a0049006d0061006700650200000df00000019100000280000001e0fb0000000a0049006d006100670065000000006e000003cd0000000000000000fb0000000a0049006d00610067006502000005b40000033b00000280000001e0fb0000000a0049006d006100670065000000006e000008b60000000000000000fb0000000a0049006d006100670065000000006e000008b60000000000000000fb0000000a0049006d006100670065000000006e000008b60000000000000000fb0000000a0049006d006100670065000000006e000007f2000000000000000000000001000003e20000043efc0200000009fb000000100044006900730070006c006100790073000000003d0000043e0000018200fffffffb0000001e0054006f006f006c002000500072006f0070006500720074006900650073000000003c000000b8000000b000fffffffc0000003d000002b70000000000fffffffa000000000100000003fb00000012005000610074006800500061006e0065006c0000000000ffffffff0000000000000000fb00000012005000610074006800500061006e0065006c0100000000ffffffff0000000000000000fb0000000a0056006900650077007300000004ba000001720000015f00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b20000000000000000fb000000140046006500650064006200610063006b00200031000000003d000000360000000000000000fb000000140046006500650064006200610063006b002000340000000079000000360000000000000000fb000000140046006500650064006200610063006b0020003300000000b5000000360000000000000000fb000000140046006500650064006200610063006b0020003200000000f1000000360000000000000000fb0000000c0052006500730075006c0074000000012d0000003600000000000000000000000200000f9a00000182fc0100000001fb0000001e0054006f006f006c002000500072006f007000650072007400690065007300000000000000075a00000000000000000000000300000ab00000022afc0100000014fb0000001e0041006c00700068006100730065006e007300650020004c0065006600740100000000000001c10000013200fffffffb0000002a0041006c00700068006100730065006e00730065002000460072006f006e00740020004c00650066007401000001cd000002320000018000fffffffb0000002e0041006c00700068006100730065006e00730065002000460072006f006e00740020004d006900640064006c0065010000040b0000026b000001a500fffffffb0000002c0041006c00700068006100730065006e00730065002000460072006f006e007400200052006900670068007401000006820000024a0000019000fffffffb000000200041006c00700068006100730065006e0073006500200052006900670068007401000008d8000001d80000014200fffffffb00000012004800440052002000460072006f006e00740000000464000000fb000000e800fffffffb000000140048004400520020004d006900640064006c00650100000697000001540000000000000000fb000000120048004400520020005200690067006800740000000565000000bf000000e700fffffffb00000014005a00450044003200690020004c006500660074000000000000000789000000e800fffffffb00000016005a004500440032006900200052006900670068007400000007950000031b000000f900fffffffb0000001e0048004400520020004c006500660074002000280052004f0053003200290000000765000001380000013800fffffffb000000100048004400520020004c0065006600740000000902000001f6000000d600fffffffb000000100048004400520020004c0065006600740000000d43000002880000000000000000fb00000022004800440052002000430065006e007400650072002000280052004f00530032002900000008a90000015b0000015b00fffffffb00000020004800440052002000520049006700680074002000280052004f0053003200290000000a10000001490000014900fffffffb0000000a0049006d0061006700650100000ae6000001d10000000000000000fb0000000a0049006d0061006700650100000cc3000002c40000000000000000fb0000000a0049006d0061006700650100000f930000021a0000000000000000fb0000000800540069006d006500000000000000073f0000077d00fffffffb0000000800540069006d006501000000000000045000000000000000000000083c000003b600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 Selection: collapsed: false Time: @@ -889,9 +911,9 @@ Window Geometry: collapsed: false Views: collapsed: false - Width: 2808 - X: 72 - Y: 27 + Width: 2736 + X: 144 + Y: 54 ZED2i Left: collapsed: false ZED2i Right: