Commit b145d527 authored by 唐永康's avatar 唐永康

Add RealMan RM75 demos and docs

parent 723933d0
build
cmake-build-*/
.vscode/
linker_hand/build
TODO.md
PROJECT_ANALYSIS.md
realman_slow_motion_demo
reports/realman_hardware_tests/*.log
reports/realman_hardware_tests/*.pid
......@@ -45,6 +45,98 @@ message(STATUS "Found linkerhand_cpp_sdk library: ${LINKER_HAND_LIB}")
message(STATUS "Found LinkerHand headers: ${LINKER_HAND_INCLUDE_DIR}")
#-----------------------------------------------------------------------------
# REALMAN_RM_API2
#-----------------------------------------------------------------------------
unset(REALMAN_ARM_LIB CACHE)
unset(REALMAN_ARM_LIB_CANDIDATE CACHE)
set(REALMAN_RM_API2_ROOT "" CACHE PATH "Path to RealMan RM_API2 C++ SDK root, for example /home/mashiro/RM_API2/C++")
set(REALMAN_ARM_ROOT "")
set(REALMAN_ARM_INCLUDE_DIR "")
set(REALMAN_ARM_LIB_DIR "")
set(REALMAN_ARM_LIB "")
set(REALMAN_ARM_CANDIDATE_ROOTS)
if(REALMAN_RM_API2_ROOT)
list(APPEND REALMAN_ARM_CANDIDATE_ROOTS ${REALMAN_RM_API2_ROOT})
endif()
list(APPEND REALMAN_ARM_CANDIDATE_ROOTS
/home/mashiro/RM_API2/C++
${CMAKE_CURRENT_SOURCE_DIR}/third_party/Robotic_Arm
)
list(REMOVE_DUPLICATES REALMAN_ARM_CANDIDATE_ROOTS)
foreach(CANDIDATE_ROOT ${REALMAN_ARM_CANDIDATE_ROOTS})
if(REALMAN_ARM_LIB)
break()
endif()
set(CANDIDATE_INCLUDE_DIR ${CANDIDATE_ROOT}/include)
if(NOT EXISTS ${CANDIDATE_INCLUDE_DIR}/rm_interface.h)
continue()
endif()
set(CANDIDATE_LIB_DIRS)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64")
file(GLOB CANDIDATE_RELEASE_LIB_DIRS CONFIGURE_DEPENDS ${CANDIDATE_ROOT}/linux/linux_x86_c++_vv*)
file(GLOB CANDIDATE_DEBUG_LIB_DIRS CONFIGURE_DEPENDS ${CANDIDATE_ROOT}/linux/linux_x86_c++_debug*)
list(APPEND CANDIDATE_LIB_DIRS
${CANDIDATE_RELEASE_LIB_DIRS}
${CANDIDATE_DEBUG_LIB_DIRS}
${CANDIDATE_ROOT}/linux/lib
)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64")
file(GLOB CANDIDATE_RELEASE_LIB_DIRS CONFIGURE_DEPENDS ${CANDIDATE_ROOT}/linux/linux_arm64_c++_vv*)
file(GLOB CANDIDATE_DEBUG_LIB_DIRS CONFIGURE_DEPENDS ${CANDIDATE_ROOT}/linux/linux_arm64_c++_debug*)
list(APPEND CANDIDATE_LIB_DIRS
${CANDIDATE_RELEASE_LIB_DIRS}
${CANDIDATE_DEBUG_LIB_DIRS}
${CANDIDATE_ROOT}/linux/lib
)
else()
file(GLOB CANDIDATE_LIB_DIRS CONFIGURE_DEPENDS
${CANDIDATE_ROOT}/linux/*c++*
${CANDIDATE_ROOT}/linux/lib
)
endif()
unset(REALMAN_ARM_LIB_CANDIDATE CACHE)
find_library(REALMAN_ARM_LIB_CANDIDATE
NAMES api_cpp libapi_cpp
PATHS ${CANDIDATE_LIB_DIRS}
NO_DEFAULT_PATH
)
if(REALMAN_ARM_LIB_CANDIDATE)
set(REALMAN_ARM_ROOT ${CANDIDATE_ROOT})
set(REALMAN_ARM_INCLUDE_DIR ${CANDIDATE_INCLUDE_DIR})
get_filename_component(REALMAN_ARM_LIB_DIR ${REALMAN_ARM_LIB_CANDIDATE} DIRECTORY)
set(REALMAN_ARM_LIB ${REALMAN_ARM_LIB_CANDIDATE})
endif()
endforeach()
if(REALMAN_ARM_LIB AND EXISTS ${REALMAN_ARM_INCLUDE_DIR}/rm_interface.h)
file(READ ${REALMAN_ARM_INCLUDE_DIR}/rm_interface.h REALMAN_INTERFACE_HEADER)
if(REALMAN_INTERFACE_HEADER MATCHES "rm_destroy")
set(REALMAN_DESTROY_COMPILE_DEFINITION REALMAN_RM_API_HAS_RM_DESTROY=1)
else()
set(REALMAN_DESTROY_COMPILE_DEFINITION REALMAN_RM_API_HAS_RM_DESTORY=1)
endif()
add_library(realman_api_cpp SHARED IMPORTED GLOBAL)
set_target_properties(realman_api_cpp PROPERTIES
IMPORTED_LOCATION ${REALMAN_ARM_LIB}
INTERFACE_INCLUDE_DIRECTORIES ${REALMAN_ARM_INCLUDE_DIR}
INTERFACE_COMPILE_DEFINITIONS ${REALMAN_DESTROY_COMPILE_DEFINITION}
)
message(STATUS "Found RealMan RM_API2 root: ${REALMAN_ARM_ROOT}")
message(STATUS "Found RealMan RM_API2 library: ${REALMAN_ARM_LIB}")
message(STATUS "Found RealMan RM_API2 headers: ${REALMAN_ARM_INCLUDE_DIR}")
else()
message(WARNING "RealMan RM_API2 library or headers not found; RealMan demos will not be built.")
endif()
#-----------------------------------------------------------------------------
# INCLUDE_DIRECTORIES
#-----------------------------------------------------------------------------
include_directories(
......@@ -52,6 +144,17 @@ include_directories(
${LINKER_HAND_INCLUDE_DIR}
)
if(REALMAN_ARM_INCLUDE_DIR)
include_directories(${REALMAN_ARM_INCLUDE_DIR})
endif()
option(REALMAN_BUILD_HARDWARE_TESTS "Build independent RealMan hardware module test executables" ON)
option(REALMAN_REGISTER_HARDWARE_TESTS "Register independent RealMan hardware module tests with CTest" ON)
if(REALMAN_REGISTER_HARDWARE_TESTS)
enable_testing()
endif()
#-----------------------------------------------------------------------------
# EXECUTABLE
#-----------------------------------------------------------------------------
......@@ -67,6 +170,131 @@ target_link_libraries(action_group_show_l10 ${LINKER_HAND_LIB} pthread)
add_executable(o6_async_reader examples/o6_async_reader.cpp)
target_link_libraries(o6_async_reader ${LINKER_HAND_LIB} pthread)
if(TARGET realman_api_cpp)
function(add_realman_demo TARGET_NAME SOURCE_FILE)
add_executable(${TARGET_NAME} ${SOURCE_FILE})
target_compile_features(${TARGET_NAME} PRIVATE cxx_std_17)
target_include_directories(${TARGET_NAME} PRIVATE ${REALMAN_ARM_INCLUDE_DIR})
target_compile_definitions(${TARGET_NAME} PRIVATE LINKERHAND_PROJECT_ROOT="${CMAKE_CURRENT_SOURCE_DIR}")
target_link_libraries(${TARGET_NAME} PRIVATE realman_api_cpp pthread)
set_target_properties(${TARGET_NAME} PROPERTIES
BUILD_RPATH ${REALMAN_ARM_LIB_DIR}
INSTALL_RPATH ${REALMAN_ARM_LIB_DIR}
)
endfunction()
add_realman_demo(realman_minimal_demo examples/realman_minimal_demo.cpp)
add_realman_demo(realman_slow_motion_demo examples/realman_slow_motion_demo.cpp)
add_realman_demo(realman_joint_pose_config_demo examples/realman_joint_pose_config_demo.cpp)
add_realman_demo(realman_metrics_test examples/realman_metrics_test.cpp)
add_realman_demo(realman_trajectory_record examples/realman_trajectory_record.cpp)
add_realman_demo(realman_trajectory_replay examples/realman_trajectory_replay.cpp)
if(REALMAN_BUILD_HARDWARE_TESTS)
function(add_realman_hardware_test TARGET_NAME SOURCE_FILE TEST_LABEL TEST_TIMEOUT)
add_realman_demo(${TARGET_NAME} ${SOURCE_FILE})
target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests/realman_hardware)
if(REALMAN_REGISTER_HARDWARE_TESTS)
add_test(NAME ${TARGET_NAME} COMMAND $<TARGET_FILE:${TARGET_NAME}>)
set_tests_properties(${TARGET_NAME} PROPERTIES
LABELS "realman;hardware;${TEST_LABEL}"
RESOURCE_LOCK realman_robot
TIMEOUT ${TEST_TIMEOUT}
)
endif()
endfunction()
add_realman_hardware_test(realman_hw_test_connection
tests/realman_hardware/test_realman_connection.cpp readonly 20)
add_realman_hardware_test(realman_hw_test_joint_telemetry
tests/realman_hardware/test_realman_joint_telemetry.cpp readonly 20)
add_realman_hardware_test(realman_hw_test_force_sensor
tests/realman_hardware/test_realman_force_sensor.cpp readonly 30)
add_realman_hardware_test(realman_hw_test_controller_state
tests/realman_hardware/test_realman_controller_state.cpp readonly 20)
add_realman_hardware_test(realman_hw_test_motion_tracking
tests/realman_hardware/test_realman_motion_tracking.cpp motion 60)
add_realman_hardware_test(rm75_acceptance_preflight
tests/rm75_acceptance/test_rm75_acceptance_preflight.cpp "rm75;acceptance;readonly" 30)
add_realman_hardware_test(rm75_acceptance_communication
tests/rm75_acceptance/test_rm75_acceptance_communication.cpp "rm75;acceptance;readonly" 60)
add_realman_demo(realman_hw_test_force_retreat
tests/realman_hardware/test_realman_force_retreat.cpp)
target_include_directories(realman_hw_test_force_retreat PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests/realman_hardware)
add_realman_demo(realman_hw_test_force_retreat_hold
tests/realman_hardware/test_realman_force_retreat_hold.cpp)
target_include_directories(realman_hw_test_force_retreat_hold PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests/realman_hardware)
if(REALMAN_REGISTER_HARDWARE_TESTS)
add_test(NAME realman_hw_test_force_retreat COMMAND $<TARGET_FILE:realman_hw_test_force_retreat>)
set_tests_properties(realman_hw_test_force_retreat PROPERTIES
LABELS "hardware;manual;force_retreat"
RESOURCE_LOCK realman_robot
TIMEOUT 90
SKIP_RETURN_CODE 77
)
endif()
add_custom_target(realman_hardware_readonly_tests
DEPENDS
realman_hw_test_connection
realman_hw_test_joint_telemetry
realman_hw_test_force_sensor
realman_hw_test_controller_state
)
add_custom_target(rm75_acceptance_readonly_tests
DEPENDS
rm75_acceptance_preflight
rm75_acceptance_communication
)
add_custom_target(realman_hardware_tests
DEPENDS
realman_hw_test_connection
realman_hw_test_joint_telemetry
realman_hw_test_force_sensor
realman_hw_test_controller_state
realman_hw_test_motion_tracking
)
add_custom_target(realman_hardware_manual_tests
DEPENDS
realman_hw_test_force_retreat
realman_hw_test_force_retreat_hold
)
if(REALMAN_REGISTER_HARDWARE_TESTS)
add_custom_target(run_realman_hardware_readonly_tests
COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure --label-regex "readonly"
DEPENDS realman_hardware_readonly_tests
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_custom_target(run_rm75_acceptance_readonly_tests
COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure --label-regex "rm75"
DEPENDS rm75_acceptance_readonly_tests
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_custom_target(run_realman_hardware_tests
COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure --label-regex "realman"
DEPENDS realman_hardware_tests
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_custom_target(run_realman_hardware_manual_tests
COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -R realman_hw_test_force_retreat
DEPENDS realman_hardware_manual_tests
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
endif()
endif()
endif()
#-----------------------------------------------------------------------------
# INSTALL TARGETS
#-----------------------------------------------------------------------------
......
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 15,
"patch": 0
},
"configurePresets": [
{
"name": "clion-debug",
"displayName": "CLion Debug",
"description": "Debug build for CLion. Tests are disabled by default to keep the RealMan demo build self-contained.",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/cmake-build-debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"BUILD_TESTING": "OFF",
"REALMAN_BUILD_HARDWARE_TESTS": "ON",
"REALMAN_REGISTER_HARDWARE_TESTS": "ON",
"REALMAN_RM_API2_ROOT": "/home/mashiro/RM_API2/C++"
}
},
{
"name": "clion-release",
"displayName": "CLion Release",
"description": "Release build for CLion. Tests are disabled by default to keep the RealMan demo build self-contained.",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/cmake-build-clion-release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"BUILD_TESTING": "OFF",
"REALMAN_BUILD_HARDWARE_TESTS": "ON",
"REALMAN_REGISTER_HARDWARE_TESTS": "ON",
"REALMAN_RM_API2_ROOT": "/home/mashiro/RM_API2/C++"
}
}
],
"buildPresets": [
{
"name": "realman-demo-debug",
"configurePreset": "clion-debug",
"targets": [
"realman_minimal_demo"
]
},
{
"name": "realman-slow-motion-debug",
"configurePreset": "clion-debug",
"targets": [
"realman_slow_motion_demo"
]
},
{
"name": "realman-joint-pose-config-debug",
"configurePreset": "clion-debug",
"targets": [
"realman_joint_pose_config_demo"
]
},
{
"name": "realman-metrics-test-debug",
"configurePreset": "clion-debug",
"targets": [
"realman_metrics_test"
]
},
{
"name": "realman-trajectory-record-debug",
"configurePreset": "clion-debug",
"targets": [
"realman_trajectory_record"
]
},
{
"name": "realman-trajectory-replay-debug",
"configurePreset": "clion-debug",
"targets": [
"realman_trajectory_replay"
]
},
{
"name": "realman-hw-readonly-tests-debug",
"configurePreset": "clion-debug",
"targets": [
"realman_hardware_readonly_tests"
]
},
{
"name": "rm75-acceptance-readonly-debug",
"configurePreset": "clion-debug",
"targets": [
"rm75_acceptance_readonly_tests"
]
},
{
"name": "realman-hw-tests-debug",
"configurePreset": "clion-debug",
"targets": [
"realman_hardware_tests"
]
},
{
"name": "realman-hw-run-readonly-tests-debug",
"configurePreset": "clion-debug",
"targets": [
"run_realman_hardware_readonly_tests"
]
},
{
"name": "rm75-acceptance-run-readonly-debug",
"configurePreset": "clion-debug",
"targets": [
"run_rm75_acceptance_readonly_tests"
]
},
{
"name": "realman-hw-run-tests-debug",
"configurePreset": "clion-debug",
"targets": [
"run_realman_hardware_tests"
]
},
{
"name": "realman-hw-force-retreat-debug",
"configurePreset": "clion-debug",
"targets": [
"realman_hw_test_force_retreat"
]
},
{
"name": "realman-hw-force-retreat-hold-debug",
"configurePreset": "clion-debug",
"targets": [
"realman_hw_test_force_retreat_hold"
]
},
{
"name": "realman-hw-run-manual-tests-debug",
"configurePreset": "clion-debug",
"targets": [
"run_realman_hardware_manual_tests"
]
},
{
"name": "realman-demo-release",
"configurePreset": "clion-release",
"targets": [
"realman_minimal_demo"
]
},
{
"name": "realman-slow-motion-release",
"configurePreset": "clion-release",
"targets": [
"realman_slow_motion_demo"
]
},
{
"name": "realman-joint-pose-config-release",
"configurePreset": "clion-release",
"targets": [
"realman_joint_pose_config_demo"
]
},
{
"name": "realman-metrics-test-release",
"configurePreset": "clion-release",
"targets": [
"realman_metrics_test"
]
},
{
"name": "realman-trajectory-record-release",
"configurePreset": "clion-release",
"targets": [
"realman_trajectory_record"
]
},
{
"name": "realman-trajectory-replay-release",
"configurePreset": "clion-release",
"targets": [
"realman_trajectory_replay"
]
},
{
"name": "realman-hw-readonly-tests-release",
"configurePreset": "clion-release",
"targets": [
"realman_hardware_readonly_tests"
]
},
{
"name": "rm75-acceptance-readonly-release",
"configurePreset": "clion-release",
"targets": [
"rm75_acceptance_readonly_tests"
]
},
{
"name": "realman-hw-tests-release",
"configurePreset": "clion-release",
"targets": [
"realman_hardware_tests"
]
},
{
"name": "realman-hw-run-readonly-tests-release",
"configurePreset": "clion-release",
"targets": [
"run_realman_hardware_readonly_tests"
]
},
{
"name": "rm75-acceptance-run-readonly-release",
"configurePreset": "clion-release",
"targets": [
"run_rm75_acceptance_readonly_tests"
]
},
{
"name": "realman-hw-run-tests-release",
"configurePreset": "clion-release",
"targets": [
"run_realman_hardware_tests"
]
},
{
"name": "realman-hw-force-retreat-release",
"configurePreset": "clion-release",
"targets": [
"realman_hw_test_force_retreat"
]
},
{
"name": "realman-hw-force-retreat-hold-release",
"configurePreset": "clion-release",
"targets": [
"realman_hw_test_force_retreat_hold"
]
},
{
"name": "realman-hw-run-manual-tests-release",
"configurePreset": "clion-release",
"targets": [
"run_realman_hardware_manual_tests"
]
}
]
}
......@@ -237,6 +237,18 @@ auto state_arc = hand.getStateArc();
更多示例请参考 `examples/` 目录。详细说明请查看 [示例代码文档](examples/README.md)
睿尔曼 RealMan C++ SDK 的 CLion 搭建说明请查看 [CLion 搭建睿尔曼 RealMan C++ SDK](docs/REALMAN_CLION_SETUP.md)
睿尔曼 RealMan 机械臂最小连接 Demo 请查看 [睿尔曼机械臂最小 Demo](docs/REALMAN_MINIMAL_DEMO.md),CLion 可直接构建目标 `realman_minimal_demo`
睿尔曼 RealMan 机械臂低速小幅运动 Demo 请查看 [睿尔曼机械臂低速运动 Demo 操作手册](docs/REALMAN_SLOW_MOTION_MANUAL.md),CLion 可直接构建目标 `realman_slow_motion_demo`
睿尔曼 RealMan 机械臂源码参数调姿态 Demo 请查看 [睿尔曼机械臂源码参数调姿态 Demo](docs/REALMAN_JOINT_POSE_CONFIG_DEMO.md),CLion 可直接构建目标 `realman_joint_pose_config_demo`
睿尔曼 RealMan 机械臂力/力矩与关节指标测试请查看 [睿尔曼机械臂力/力矩与关节指标测试 README](docs/REALMAN_METRICS_TEST_README.md),CLion 可直接构建目标 `realman_metrics_test`,运行后生成 `reports/REALMAN_METRICS_TEST_RESULT.md`
睿尔曼 RealMan 机械臂独立硬件模块测试请查看 [睿尔曼 RealMan 硬件模块测试](tests/realman_hardware/README.md),包含连接、关节遥测、六维力/力矩、控制器状态、低速运动跟踪、外力方向退让等独立测试。
## 📚 API 文档
详细的 API 文档请参考:[API 参考文档](docs/API-Reference.md)
......
build/
cmake-build-*/
cmake_minimum_required(VERSION 3.16)
# RM 是独立机械臂子工程,和仓库根目录的 LinkerHand 灵巧手工程分开构建。
# 这样后续更换机械臂品牌时,不会影响灵巧手 SDK 的 CMake 目标。
project(RMJsonControl
VERSION 0.1.0
LANGUAGES CXX
DESCRIPTION "Standalone JSON-command RealMan robotic arm control project"
)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
option(RM_BUILD_TESTING "Build RM JSON command parser tests" ON)
# core 库只包含 JSON 解析和命令执行流程,不链接任何真实硬件 SDK。
# 这样 parser/runner 的单元测试可以在没有机械臂的机器上运行。
add_library(rm_json_core
src/config/simple_json.cpp
src/config/json_command.cpp
src/core/json_command_runner.cpp
)
target_include_directories(rm_json_core
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_compile_features(rm_json_core PUBLIC cxx_std_17)
add_library(rm_trajectory_core
src/modules/trajectory/trajectory_file_store.cpp
src/core/drag_teach_recorder.cpp
)
target_include_directories(rm_trajectory_core
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_compile_features(rm_trajectory_core PUBLIC cxx_std_17)
target_compile_definitions(rm_trajectory_core
PUBLIC
RM_PROJECT_ROOT="${CMAKE_CURRENT_SOURCE_DIR}"
)
add_executable(rm_trajectory_convert
src/trajectory_convert_main.cpp
)
target_link_libraries(rm_trajectory_convert
PRIVATE
rm_trajectory_core
)
set(REALMAN_RM_API2_ROOT "" CACHE PATH "Path to RealMan RM_API2 C++ SDK root, for example /home/mashiro/RM_API2/C++")
set(REALMAN_ARM_ROOT "")
set(REALMAN_ARM_INCLUDE_DIR "")
set(REALMAN_ARM_LIB_DIR "")
set(REALMAN_ARM_LIB "")
set(REALMAN_ARM_CANDIDATE_ROOTS)
if(REALMAN_RM_API2_ROOT)
list(APPEND REALMAN_ARM_CANDIDATE_ROOTS ${REALMAN_RM_API2_ROOT})
endif()
list(APPEND REALMAN_ARM_CANDIDATE_ROOTS
/home/mashiro/RM_API2/C++
${CMAKE_CURRENT_LIST_DIR}/../third_party/Robotic_Arm
)
list(REMOVE_DUPLICATES REALMAN_ARM_CANDIDATE_ROOTS)
foreach(CANDIDATE_ROOT ${REALMAN_ARM_CANDIDATE_ROOTS})
# 兼容本机 SDK 路径和仓库 third_party 备份路径。
if(REALMAN_ARM_LIB)
break()
endif()
set(CANDIDATE_INCLUDE_DIR ${CANDIDATE_ROOT}/include)
if(NOT EXISTS ${CANDIDATE_INCLUDE_DIR}/rm_interface.h)
continue()
endif()
set(CANDIDATE_LIB_DIRS)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64")
file(GLOB CANDIDATE_RELEASE_LIB_DIRS CONFIGURE_DEPENDS ${CANDIDATE_ROOT}/linux/linux_x86_c++_vv*)
file(GLOB CANDIDATE_DEBUG_LIB_DIRS CONFIGURE_DEPENDS ${CANDIDATE_ROOT}/linux/linux_x86_c++_debug*)
list(APPEND CANDIDATE_LIB_DIRS
${CANDIDATE_RELEASE_LIB_DIRS}
${CANDIDATE_DEBUG_LIB_DIRS}
${CANDIDATE_ROOT}/linux/lib
)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64")
file(GLOB CANDIDATE_RELEASE_LIB_DIRS CONFIGURE_DEPENDS ${CANDIDATE_ROOT}/linux/linux_arm64_c++_vv*)
file(GLOB CANDIDATE_DEBUG_LIB_DIRS CONFIGURE_DEPENDS ${CANDIDATE_ROOT}/linux/linux_arm64_c++_debug*)
list(APPEND CANDIDATE_LIB_DIRS
${CANDIDATE_RELEASE_LIB_DIRS}
${CANDIDATE_DEBUG_LIB_DIRS}
${CANDIDATE_ROOT}/linux/lib
)
else()
file(GLOB CANDIDATE_LIB_DIRS CONFIGURE_DEPENDS
${CANDIDATE_ROOT}/linux/*c++*
${CANDIDATE_ROOT}/linux/lib
)
endif()
unset(REALMAN_ARM_LIB_CANDIDATE CACHE)
find_library(REALMAN_ARM_LIB_CANDIDATE
NAMES api_cpp libapi_cpp
PATHS ${CANDIDATE_LIB_DIRS}
NO_DEFAULT_PATH
)
if(REALMAN_ARM_LIB_CANDIDATE)
set(REALMAN_ARM_ROOT ${CANDIDATE_ROOT})
set(REALMAN_ARM_INCLUDE_DIR ${CANDIDATE_INCLUDE_DIR})
get_filename_component(REALMAN_ARM_LIB_DIR ${REALMAN_ARM_LIB_CANDIDATE} DIRECTORY)
set(REALMAN_ARM_LIB ${REALMAN_ARM_LIB_CANDIDATE})
endif()
endforeach()
if(REALMAN_ARM_LIB AND EXISTS ${REALMAN_ARM_INCLUDE_DIR}/rm_interface.h)
# 不同版本 RM_API2 的销毁函数可能拼写不同:
# 有的版本是 rm_destroy,有的版本是 rm_destory。
# 这里在配置阶段读取头文件,给 C++ 代码注入对应宏。
file(READ ${REALMAN_ARM_INCLUDE_DIR}/rm_interface.h REALMAN_INTERFACE_HEADER)
if(REALMAN_INTERFACE_HEADER MATCHES "rm_destroy")
set(REALMAN_DESTROY_COMPILE_DEFINITION REALMAN_RM_API_HAS_RM_DESTROY=1)
else()
set(REALMAN_DESTROY_COMPILE_DEFINITION REALMAN_RM_API_HAS_RM_DESTORY=1)
endif()
add_library(realman_api_cpp SHARED IMPORTED GLOBAL)
set_target_properties(realman_api_cpp PROPERTIES
IMPORTED_LOCATION ${REALMAN_ARM_LIB}
INTERFACE_INCLUDE_DIRECTORIES ${REALMAN_ARM_INCLUDE_DIR}
INTERFACE_COMPILE_DEFINITIONS ${REALMAN_DESTROY_COMPILE_DEFINITION}
)
add_library(rm_realman_driver
src/drivers/realman/realman_robot_arm.cpp
)
target_link_libraries(rm_realman_driver
PUBLIC
rm_json_core
realman_api_cpp
PRIVATE
pthread
)
add_executable(rm_json_runner
src/main.cpp
)
target_link_libraries(rm_json_runner
PRIVATE
rm_json_core
rm_realman_driver
)
set_target_properties(rm_json_runner PROPERTIES
BUILD_RPATH ${REALMAN_ARM_LIB_DIR}
INSTALL_RPATH ${REALMAN_ARM_LIB_DIR}
)
add_executable(rm_drag_teach_record
src/drag_teach_record_main.cpp
)
target_link_libraries(rm_drag_teach_record
PRIVATE
rm_trajectory_core
rm_realman_driver
)
set_target_properties(rm_drag_teach_record PROPERTIES
BUILD_RPATH ${REALMAN_ARM_LIB_DIR}
INSTALL_RPATH ${REALMAN_ARM_LIB_DIR}
)
message(STATUS "Found RealMan RM_API2 root: ${REALMAN_ARM_ROOT}")
message(STATUS "Found RealMan RM_API2 library: ${REALMAN_ARM_LIB}")
message(STATUS "Found RealMan RM_API2 headers: ${REALMAN_ARM_INCLUDE_DIR}")
else()
message(WARNING "RealMan RM_API2 library or headers not found; rm_json_runner will not be built.")
endif()
if(RM_BUILD_TESTING)
# 当前测试只测 JSON/命令解析,不访问真实机械臂。
enable_testing()
add_executable(rm_json_command_tests
tests/test_json_command_parser.cpp
)
target_link_libraries(rm_json_command_tests
PRIVATE
rm_json_core
)
add_test(NAME rm_json_command_tests COMMAND rm_json_command_tests)
add_executable(rm_trajectory_file_store_tests
tests/test_trajectory_file_store.cpp
)
target_link_libraries(rm_trajectory_file_store_tests
PRIVATE
rm_trajectory_core
)
target_compile_definitions(rm_trajectory_file_store_tests
PRIVATE
RM_TEST_OUTPUT_DIR="${CMAKE_CURRENT_BINARY_DIR}/test_outputs"
)
add_test(NAME rm_trajectory_file_store_tests COMMAND rm_trajectory_file_store_tests)
endif()
# RM JSON 机械臂控制子工程
这个目录只放机械臂相关代码,和上层 LinkerHand 灵巧手代码分开维护。后续如果机械臂从睿尔曼换成其他品牌,优先保留 `interfaces/``core/``config/`,只新增或替换 `drivers/<vendor>/`
## 目录结构
```text
RM/
├── CMakeLists.txt
├── README.md
├── config/
│ ├── sample_readonly.json
│ └── sample_movej_delta_dry_run.json
├── include/rm_control/
│ ├── common/:Result、Pose、RobotInfo 等通用类型
│ ├── interfaces/:IRobotArm 抽象机械臂接口
│ ├── config/:JSON 解析和命令结构
│ ├── core/:JsonCommandRunner、DragTeachRecorder 等流程编排
│ ├── modules/trajectory/:轨迹目录、CSV、C++ waypoint 转换
│ └── drivers/realman/:睿尔曼 RM_API2 适配层
├── src/
│ ├── config/
│ ├── core/
│ ├── modules/trajectory/
│ ├── drivers/realman/
│ ├── main.cpp
│ ├── drag_teach_record_main.cpp
│ └── trajectory_convert_main.cpp
├── data/trajectories/
│ ├── csv/
│ ├── vendor/
│ ├── converted/
│ └── reports/
└── tests/:不依赖真实硬件的命令解析测试
```
## JSON 指令格式
顶层字段:
```json
{
"connection": {
"ip": "192.168.1.18",
"port": 8080,
"timeout_ms": 1000
},
"safety": {
"dry_run": true,
"allow_motion": false,
"max_speed_percent": 10,
"max_joint_delta_deg": 2.0,
"max_cartesian_step_m": 0.02,
"max_euler_delta_rad": 0.2
},
"commands": []
}
```
安全字段含义:
| 字段 | 含义 |
|---|---|
| `dry_run` | 为 `true` 时只校验运动指令,不发送 `rm_movej/rm_movel` |
| `allow_motion` | 为 `false` 时禁止真实运动 |
| `max_speed_percent` | 运动速度上限 |
| `max_joint_delta_deg` | 单次关节运动最大角度差 |
| `max_cartesian_step_m` | 单次直线运动最大 xyz 位移 |
| `max_euler_delta_rad` | 单次直线运动最大欧拉角变化 |
支持的 `commands`
```json
{"type": "get_robot_info"}
```
```json
{"type": "get_current_arm_state"}
```
```json
{"type": "get_force_data"}
```
```json
{"type": "sleep_ms", "duration_ms": 500}
```
绝对关节目标,单位是度:
```json
{
"type": "movej",
"joints_deg": [0, 0, 0, 0, 0, 0, 0],
"speed_percent": 5,
"blocking": true
}
```
相对关节增量,单位是度。推荐初期用这个:
```json
{
"type": "movej_delta",
"delta_deg": [0, 1, 0, 0, 0, 0, 0],
"speed_percent": 5,
"blocking": true
}
```
绝对笛卡尔直线目标,位置单位是米,姿态单位是弧度:
```json
{
"type": "movel",
"pose": {
"x": 0.30,
"y": 0.00,
"z": 0.25,
"rx": 3.14,
"ry": 0.00,
"rz": 0.00
},
"speed_percent": 5,
"blocking": true
}
```
## 编译
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake -S RM -B RM/build -DCMAKE_BUILD_TYPE=Debug
cmake --build RM/build -j
ctest --test-dir RM/build --output-on-failure
```
本机默认会优先查找:
```text
/home/mashiro/RM_API2/C++
RM/../third_party/Robotic_Arm
```
如果 SDK 在其他位置:
```bash
cmake -S RM -B RM/build -DREALMAN_RM_API2_ROOT=/path/to/RM_API2/C++
```
## 运行
只校验 JSON,不连接 SDK:
```bash
./RM/build/rm_json_runner RM/config/sample_readonly.json --validate-only
```
执行只读指令,读取机器人信息、当前状态和六维力:
```bash
./RM/build/rm_json_runner RM/config/sample_readonly.json
```
校验一个相对关节运动,但不发送运动:
```bash
./RM/build/rm_json_runner RM/config/sample_movej_delta_dry_run.json
```
需要真实运动时,把 JSON 改成:
```json
"safety": {
"dry_run": false,
"allow_motion": true,
"max_speed_percent": 10,
"max_joint_delta_deg": 2.0
}
```
第一次真实运动必须清空工作空间,低速、小角度,并保证急停可触达。
## 拖动示教轨迹
录制 RM75 末端六维力位置+姿态拖动示教,同步保存 CSV:
```bash
./RM/build/rm_drag_teach_record demo_pick_path 15 100
```
默认写入:
```text
RM/data/trajectories/csv/demo_pick_path.csv
RM/data/trajectories/vendor/demo_pick_path_vendor.txt
```
把 CSV 转成 C++ TCP waypoint 表:
```bash
./RM/build/rm_trajectory_convert RM/data/trajectories/csv/demo_pick_path.csv
```
默认输出:
```text
RM/data/trajectories/converted/demo_pick_path_tcp_path.cpp
```
维护边界:
- `drivers/realman` 只封装 RM SDK 调用。
- `core/drag_teach_recorder` 负责编排拖动示教、采样、停止和保存。
- `modules/trajectory` 负责目录、CSV 和 C++ 文件转换,不访问硬件。
## 后续换机械臂怎么改
不要改 `JsonCommandRunner` 和 JSON 格式。新增一个驱动:
```text
include/rm_control/drivers/new_vendor/new_vendor_robot_arm.h
src/drivers/new_vendor/new_vendor_robot_arm.cpp
```
新驱动实现 `IRobotArm`
```cpp
class NewVendorRobotArm final : public rm_control::interfaces::IRobotArm {
// connect / getCurrentArmState / moveJ / moveL ...
};
```
然后在 `src/main.cpp` 里把 `RealManRobotArm` 换成新驱动即可。上层 JSON 指令、解析、校验和执行流程不需要重写。
{
"connection": {
"ip": "192.168.1.18",
"port": 8080,
"timeout_ms": 1000
},
"safety": {
"dry_run": false,
"allow_motion": true,
"max_speed_percent": 20,
"max_joint_delta_deg": 1.2,
"max_cartesian_step_m": 0.02,
"max_euler_delta_rad": 0.2
},
"commands": [
{
"type": "get_current_arm_state",
"name": "read current state before 20 degree stepped motion"
},
{
"type": "movej_delta",
"name": "J2 positive step 01 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 02 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 03 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 04 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 05 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 06 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 07 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 08 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 09 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 10 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 11 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 12 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 13 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 14 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 15 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 16 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 17 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 18 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 19 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 positive step 20 of 20",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "sleep_ms",
"name": "observe hold at 20 degree peak",
"duration_ms": 8000
},
{
"type": "movej_delta",
"name": "J2 return step 01 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 02 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 03 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 04 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 05 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 06 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 07 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 08 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 09 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 10 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 11 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 12 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 13 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 14 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 15 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 16 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 17 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 18 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 19 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "movej_delta",
"name": "J2 return step 20 of 20",
"delta_deg": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 20,
"blocking": true
},
{
"type": "get_current_arm_state",
"name": "read final state after 20 degree stepped motion"
}
]
}
{
"connection": {
"ip": "192.168.1.18",
"port": 8080,
"timeout_ms": 1000
},
"safety": {
"dry_run": true,
"allow_motion": false,
"max_speed_percent": 10,
"max_joint_delta_deg": 2.0,
"max_cartesian_step_m": 0.02,
"max_euler_delta_rad": 0.2
},
"commands": [
{
"type": "get_current_arm_state",
"name": "read current state before relative motion"
},
{
"type": "movej_delta",
"name": "dry-run small J2 positive delta",
"delta_deg": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"speed_percent": 5,
"blocking": true
},
{
"type": "sleep_ms",
"name": "wait after dry run",
"duration_ms": 500
}
]
}
{
"connection": {
"ip": "192.168.1.18",
"port": 8080,
"timeout_ms": 1000
},
"safety": {
"dry_run": true,
"allow_motion": false,
"max_speed_percent": 20,
"max_joint_delta_deg": 5.0,
"max_cartesian_step_m": 0.02,
"max_euler_delta_rad": 0.2
},
"commands": [
{
"type": "get_robot_info",
"name": "read robot model and controller"
},
{
"type": "get_current_arm_state",
"name": "read current joints and tcp pose"
},
{
"type": "get_force_data",
"name": "read six-axis force data"
}
]
}
{
"connection": {
"ip": "192.168.1.18",
"port": 8080,
"timeout_ms": 1000
},
"safety": {
"dry_run": false,
"allow_motion": true,
"max_speed_percent": 20,
"max_joint_delta_deg": 1.2,
"max_cartesian_step_m": 0.02,
"max_euler_delta_rad": 0.2
},
"commands": [
{
"type": "get_current_arm_state",
"name": "read current state before visible J4 motion"
},
{
"type": "movej_delta_steps",
"name": "visible J4 positive 20 degree stepped motion",
"delta_deg": [0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 0.0],
"steps": 20,
"step_sleep_ms": 20,
"speed_percent": 20,
"blocking": true
},
{
"type": "sleep_ms",
"name": "observe hold at visible J4 peak",
"duration_ms": 8000
},
{
"type": "movej_delta_steps",
"name": "visible J4 return 20 degree stepped motion",
"delta_deg": [0.0, 0.0, 0.0, -20.0, 0.0, 0.0, 0.0],
"steps": 20,
"step_sleep_ms": 20,
"speed_percent": 20,
"blocking": true
},
{
"type": "get_current_arm_state",
"name": "read final state after visible J4 motion"
}
]
}
#pragma once
#include <string>
namespace rm_control::common {
// 工程内部统一返回类型:
// - ok=true 表示调用成功,value 存放结果;
// - ok=false 表示调用失败,error_message 存放可打印的错误原因。
// 这样上层不用混用异常、错误码和 bool,便于测试和排查硬件调用失败。
template <typename T>
struct Result {
bool ok = false;
T value{};
std::string error_message;
static Result<T> success(const T &value) {
return Result<T>{true, value, ""};
}
static Result<T> failure(const std::string &message) {
return Result<T>{false, T{}, message};
}
};
// void 特化用于“只关心成功/失败、不需要返回值”的动作类接口,
// 例如 connect、moveJ、moveL。
template <>
struct Result<void> {
bool ok = false;
std::string error_message;
static Result<void> success() {
return Result<void>{true, ""};
}
static Result<void> failure(const std::string &message) {
return Result<void>{false, message};
}
};
} // namespace rm_control::common
#pragma once
#include <array>
#include <string>
#include <vector>
namespace rm_control::common {
// 机械臂连接参数。当前默认值是本地 RM75 控制器,
// 后续换机械臂或换 IP 时应优先通过 JSON 覆盖,而不是改驱动代码。
struct RobotConnectionConfig {
std::string ip = "192.168.1.18";
int port = 8080;
int timeout_ms = 1000;
};
// 通用 TCP 位姿结构,位置单位为 m,欧拉角单位为 rad。
// 这里不用 rm_pose_t,是为了让 core/config 不直接依赖睿尔曼 SDK。
struct Pose {
float x = 0.0F;
float y = 0.0F;
float z = 0.0F;
float rx = 0.0F;
float ry = 0.0F;
float rz = 0.0F;
};
// 只保留上层业务真正需要的机器人基础信息,避免把 RM SDK 结构体泄漏到 core。
struct RobotInfo {
int arm_dof = 0;
int arm_model = 0;
int force_type = 0;
int controller_version = 0;
};
// 当前机械臂状态:关节角、TCP 位姿、错误码。
// joints_deg 的长度由真实机械臂自由度决定,RM75 当前是 7。
struct ArmState {
std::vector<float> joints_deg;
Pose tcp_pose;
std::vector<int> error_codes;
};
// 六维力数据。数组顺序固定为 Fx, Fy, Fz, Mx, My, Mz。
// raw/zero/work_zero/tool_zero 对应 RM_API2 返回的四组力数据。
struct ForceData {
std::array<float, 6> raw{};
std::array<float, 6> zero{};
std::array<float, 6> work_zero{};
std::array<float, 6> tool_zero{};
};
enum class DragTeachMode {
OrdinaryRecorded,
SixDofForcePositionAndOrientation,
};
struct DragTeachStartOptions {
DragTeachMode mode = DragTeachMode::SixDofForcePositionAndOrientation;
bool record_vendor_trajectory = true;
bool enable_singular_wall = true;
};
struct SavedVendorTrajectory {
std::string path;
int point_count = 0;
};
struct TrajectorySample {
long long elapsed_ms = 0;
std::vector<float> joints_deg;
Pose tcp_pose;
};
} // namespace rm_control::common
#pragma once
#include "rm_control/common/result.h"
#include "rm_control/common/robot_types.h"
#include <string>
#include <vector>
namespace rm_control::config {
// JSON 支持的动作类型。
// 这里把“只读命令”和“运动命令”放在同一个枚举里,执行器可以集中做安全校验。
enum class CommandType {
GetRobotInfo,
GetCurrentArmState,
GetForceData,
SleepMs,
MoveJ,
MoveJDelta,
MoveJDeltaSteps,
MoveL,
};
// 单条运动命令的通用选项,对应 RM_API2 moveJ/moveL 的速度、平滑半径、
// 轨迹连接和阻塞执行参数。
struct MotionOptions {
int speed_percent = 5;
int blend_radius = 0;
int trajectory_connect = 0;
bool blocking = true;
};
// JSON 中的一条命令被解析后的结构体。
// 不同命令只使用其中一部分字段,例如 movej 使用 joints_deg,
// movej_delta_steps 使用 joint_delta_deg + steps。
struct ArmCommand {
std::string name;
CommandType type = CommandType::GetRobotInfo;
std::vector<float> joints_deg;
std::vector<float> joint_delta_deg;
common::Pose pose;
int duration_ms = 0;
int steps = 1;
int step_sleep_ms = 0;
MotionOptions motion;
};
// 全局安全限制。默认 dry_run=true 且 allow_motion=false,
// 是为了避免首次运行 JSON 文件时误发真实运动指令。
struct SafetyOptions {
bool dry_run = true;
bool allow_motion = false;
int max_speed_percent = 20;
float max_joint_delta_deg = 5.0F;
float max_cartesian_step_m = 0.02F;
float max_euler_delta_rad = 0.2F;
};
// 一个完整 JSON 指令文件:连接参数 + 安全策略 + 命令列表。
struct JsonCommandProgram {
common::RobotConnectionConfig connection;
SafetyOptions safety;
std::vector<ArmCommand> commands;
};
// 从字符串或文件加载 JSON 指令,并完成字段类型校验和默认值填充。
common::Result<JsonCommandProgram> parseCommandProgramText(const std::string &text);
common::Result<JsonCommandProgram> loadCommandProgramFromFile(const std::string &path);
const char *commandTypeName(CommandType type);
} // namespace rm_control::config
#pragma once
#include "rm_control/common/result.h"
#include <map>
#include <string>
#include <vector>
namespace rm_control::config {
// 轻量 JSON 值对象。
// 这里没有引入 nlohmann/json,是因为本机环境没有现成依赖;
// 为了让 RM 子工程离线可编译,只实现命令文件需要的 JSON 子集。
class JsonValue {
public:
enum class Type {
Null,
Bool,
Number,
String,
Array,
Object,
};
using Array = std::vector<JsonValue>;
using Object = std::map<std::string, JsonValue>;
JsonValue() = default;
explicit JsonValue(bool value);
explicit JsonValue(double value);
explicit JsonValue(std::string value);
explicit JsonValue(Array value);
explicit JsonValue(Object value);
Type type() const;
bool isNull() const;
bool isBool() const;
bool isNumber() const;
bool isString() const;
bool isArray() const;
bool isObject() const;
bool asBool() const;
double asNumber() const;
const std::string &asString() const;
const Array &asArray() const;
const Object &asObject() const;
const JsonValue *find(const std::string &key) const;
private:
Type type_ = Type::Null;
bool bool_value_ = false;
double number_value_ = 0.0;
std::string string_value_;
Array array_value_;
Object object_value_;
};
// 解析标准 JSON 文本。返回 Result,避免解析失败时直接抛异常给 main。
common::Result<JsonValue> parseJson(const std::string &text);
} // namespace rm_control::config
#pragma once
#include "rm_control/common/result.h"
#include "rm_control/common/robot_types.h"
#include "rm_control/interfaces/robot_arm.h"
#include "rm_control/modules/trajectory/trajectory_file_store.h"
#include <iosfwd>
#include <string>
namespace rm_control::core {
struct DragTeachRecordConfig {
std::string storage_root;
std::string session_name;
int duration_seconds = 15;
int sample_period_ms = 100;
bool save_vendor_trajectory = true;
common::DragTeachStartOptions drag_options;
};
struct DragTeachRecordSummary {
modules::trajectory::TrajectoryFileSet files;
int sample_count = 0;
bool vendor_trajectory_saved = false;
std::string vendor_save_message;
};
class DragTeachRecorder {
public:
explicit DragTeachRecorder(interfaces::IRobotArm &robot);
common::Result<DragTeachRecordSummary> record(const DragTeachRecordConfig &config,
std::ostream &out);
private:
common::Result<void> validateConfig(const DragTeachRecordConfig &config) const;
interfaces::IRobotArm &robot_;
};
} // namespace rm_control::core
#pragma once
#include "rm_control/common/result.h"
#include "rm_control/config/json_command.h"
#include "rm_control/interfaces/robot_arm.h"
#include <iosfwd>
namespace rm_control::core {
// JSON 指令执行器。
// 这个类只负责流程编排和安全校验,不直接包含 rm_interface.h。
// 真实硬件动作通过 IRobotArm 注入,保证后续可替换机械臂驱动。
class JsonCommandRunner {
public:
explicit JsonCommandRunner(interfaces::IRobotArm &robot);
common::Result<void> run(const config::JsonCommandProgram &program, std::ostream &out);
private:
// 所有运动命令发送前都必须经过这里。
// 绝对 movej 检查“目标与当前值差值”,相对 movej_delta 检查“单次增量”,
// movej_delta_steps 检查“每步增量”,避免 JSON 写错导致大幅跳动。
common::Result<void> validateMotionCommand(const config::JsonCommandProgram &program,
const config::ArmCommand &command,
const common::ArmState &current_state) const;
interfaces::IRobotArm &robot_;
};
} // namespace rm_control::core
#pragma once
#include "rm_control/interfaces/robot_arm.h"
#include "rm_interface.h"
namespace rm_control::drivers::realman {
// 睿尔曼 RM_API2 的具体驱动实现。
// 这是 RM 子工程中唯一直接依赖 rm_interface.h 的位置之一;
// core/config/interfaces 都不应该 include 睿尔曼 SDK 头文件。
class RealManRobotArm final : public interfaces::IRobotArm {
public:
RealManRobotArm() = default;
RealManRobotArm(const RealManRobotArm &) = delete;
RealManRobotArm &operator=(const RealManRobotArm &) = delete;
~RealManRobotArm() override;
common::Result<void> connect(const common::RobotConnectionConfig &config) override;
void disconnect() override;
common::Result<common::RobotInfo> getRobotInfo() override;
common::Result<common::ArmState> getCurrentArmState() override;
common::Result<common::ForceData> getForceData() override;
common::Result<void> moveJ(const std::vector<float> &joints_deg,
int speed_percent,
int blend_radius,
int trajectory_connect,
bool blocking) override;
common::Result<void> moveL(const common::Pose &pose,
int speed_percent,
int blend_radius,
int trajectory_connect,
bool blocking) override;
common::Result<void> startDragTeach(const common::DragTeachStartOptions &options) override;
common::Result<void> stopDragTeach() override;
common::Result<common::SavedVendorTrajectory>
saveDragTeachTrajectory(const std::string &path) override;
private:
// 所有 SDK 读写前先检查连接状态,防止空句柄传入 C SDK。
common::Result<void> ensureConnected() const;
// RM_API2 使用裸指针句柄,因此必须由本类析构函数集中释放。
rm_robot_handle *handle_ = nullptr;
bool initialized_ = false;
int dof_ = 0;
};
} // namespace rm_control::drivers::realman
#pragma once
#include "rm_control/common/result.h"
#include "rm_control/common/robot_types.h"
#include <string>
#include <vector>
namespace rm_control::interfaces {
// 机械臂抽象接口。
// core 只依赖这个接口,不直接依赖 RealManRobotArm 或 rm_interface.h。
// 后续如果更换机械臂品牌,只要新增一个实现 IRobotArm 的 driver,
// JSON 指令解析和 JsonCommandRunner 都可以继续复用。
class IRobotArm {
public:
virtual ~IRobotArm() = default;
// 建立/释放硬件连接。具体 SDK 初始化细节放在 drivers 层。
virtual common::Result<void> connect(const common::RobotConnectionConfig &config) = 0;
virtual void disconnect() = 0;
// 只读接口:适合自动诊断和状态显示,不会造成机械臂运动。
virtual common::Result<common::RobotInfo> getRobotInfo() = 0;
virtual common::Result<common::ArmState> getCurrentArmState() = 0;
virtual common::Result<common::ForceData> getForceData() = 0;
// 关节空间运动。joints_deg 是绝对关节角,单位为度。
virtual common::Result<void> moveJ(const std::vector<float> &joints_deg,
int speed_percent,
int blend_radius,
int trajectory_connect,
bool blocking) = 0;
// 笛卡尔直线运动。pose 是绝对 TCP 位姿,单位见 common::Pose。
virtual common::Result<void> moveL(const common::Pose &pose,
int speed_percent,
int blend_radius,
int trajectory_connect,
bool blocking) = 0;
// 拖动示教生命周期。上层只表达“开始/停止/保存”,具体使用普通拖动、
// 六维力复合拖动或厂商文件格式都由 driver 实现。
virtual common::Result<void> startDragTeach(const common::DragTeachStartOptions &options) = 0;
virtual common::Result<void> stopDragTeach() = 0;
virtual common::Result<common::SavedVendorTrajectory>
saveDragTeachTrajectory(const std::string &path) = 0;
};
} // namespace rm_control::interfaces
#pragma once
#include "rm_control/common/result.h"
#include "rm_control/common/robot_types.h"
#include <string>
#include <vector>
namespace rm_control::modules::trajectory {
struct TrajectoryStoragePaths {
std::string root_dir;
std::string csv_dir;
std::string vendor_dir;
std::string converted_dir;
std::string reports_dir;
};
struct TrajectoryFileSet {
std::string session_name;
std::string csv_path;
std::string vendor_path;
std::string converted_cpp_path;
std::string report_path;
};
std::string timestampString();
std::string sanitizeSessionName(const std::string &raw_name);
std::string defaultTrajectoryStorageRoot();
common::Result<TrajectoryStoragePaths> ensureTrajectoryStorage(const std::string &root_dir);
common::Result<TrajectoryFileSet> makeTrajectoryFileSet(const std::string &root_dir,
const std::string &session_name);
common::Result<void> writeTrajectoryCsv(const std::string &csv_path,
const std::vector<common::TrajectorySample> &samples);
common::Result<std::vector<common::TrajectorySample>> loadTrajectoryCsv(const std::string &csv_path);
common::Result<void> exportTcpPathCpp(const std::string &cpp_path,
const std::vector<common::TrajectorySample> &samples,
const std::string &session_name);
} // namespace rm_control::modules::trajectory
#include "rm_control/config/json_command.h"
#include "rm_control/config/simple_json.h"
#include <cmath>
#include <fstream>
#include <sstream>
namespace rm_control::config {
namespace {
using common::Result;
Result<void> requireObject(const JsonValue &value, const std::string &name) {
// 命令文件顶层和 connection/safety/command 都必须是对象。
if (!value.isObject()) {
return Result<void>::failure(name + " must be an object");
}
return Result<void>::success();
}
Result<std::string> requiredString(const JsonValue &object,
const std::string &field,
const std::string &context) {
const JsonValue *value = object.find(field);
if (value == nullptr || !value->isString()) {
return Result<std::string>::failure(context + "." + field + " must be a string");
}
return Result<std::string>::success(value->asString());
}
Result<double> requiredNumber(const JsonValue &object,
const std::string &field,
const std::string &context) {
const JsonValue *value = object.find(field);
if (value == nullptr || !value->isNumber() || !std::isfinite(value->asNumber())) {
return Result<double>::failure(context + "." + field + " must be a finite number");
}
return Result<double>::success(value->asNumber());
}
Result<void> optionalString(const JsonValue &object,
const std::string &field,
std::string *target,
const std::string &context) {
const JsonValue *value = object.find(field);
if (value == nullptr) {
return Result<void>::success();
}
if (!value->isString()) {
return Result<void>::failure(context + "." + field + " must be a string");
}
*target = value->asString();
return Result<void>::success();
}
Result<void> optionalInt(const JsonValue &object,
const std::string &field,
int *target,
const std::string &context) {
const JsonValue *value = object.find(field);
if (value == nullptr) {
return Result<void>::success();
}
if (!value->isNumber() || !std::isfinite(value->asNumber())) {
return Result<void>::failure(context + "." + field + " must be a finite number");
}
*target = static_cast<int>(value->asNumber());
return Result<void>::success();
}
Result<void> optionalFloat(const JsonValue &object,
const std::string &field,
float *target,
const std::string &context) {
const JsonValue *value = object.find(field);
if (value == nullptr) {
return Result<void>::success();
}
if (!value->isNumber() || !std::isfinite(value->asNumber())) {
return Result<void>::failure(context + "." + field + " must be a finite number");
}
*target = static_cast<float>(value->asNumber());
return Result<void>::success();
}
Result<void> optionalBool(const JsonValue &object,
const std::string &field,
bool *target,
const std::string &context) {
const JsonValue *value = object.find(field);
if (value == nullptr) {
return Result<void>::success();
}
if (!value->isBool()) {
return Result<void>::failure(context + "." + field + " must be a bool");
}
*target = value->asBool();
return Result<void>::success();
}
Result<std::vector<float>> requiredNumberArray(const JsonValue &object,
const std::string &field,
const std::string &context) {
// 关节角数组必须全部是有限数字,不能出现 null/string/NaN。
const JsonValue *value = object.find(field);
if (value == nullptr || !value->isArray()) {
return Result<std::vector<float>>::failure(context + "." + field + " must be an array");
}
std::vector<float> numbers;
for (const JsonValue &item : value->asArray()) {
if (!item.isNumber() || !std::isfinite(item.asNumber())) {
return Result<std::vector<float>>::failure(context + "." + field + " must contain finite numbers");
}
numbers.push_back(static_cast<float>(item.asNumber()));
}
return Result<std::vector<float>>::success(numbers);
}
Result<CommandType> parseCommandType(const std::string &type) {
// JSON 文本中的 type 和内部枚举在这里集中映射。
// 后续新增命令时,需要同时更新 commandTypeName 和测试。
if (type == "get_robot_info") {
return Result<CommandType>::success(CommandType::GetRobotInfo);
}
if (type == "get_current_arm_state") {
return Result<CommandType>::success(CommandType::GetCurrentArmState);
}
if (type == "get_force_data") {
return Result<CommandType>::success(CommandType::GetForceData);
}
if (type == "sleep_ms") {
return Result<CommandType>::success(CommandType::SleepMs);
}
if (type == "movej") {
return Result<CommandType>::success(CommandType::MoveJ);
}
if (type == "movej_delta") {
return Result<CommandType>::success(CommandType::MoveJDelta);
}
if (type == "movej_delta_steps") {
return Result<CommandType>::success(CommandType::MoveJDeltaSteps);
}
if (type == "movel") {
return Result<CommandType>::success(CommandType::MoveL);
}
return Result<CommandType>::failure("unsupported command type: " + type);
}
Result<common::Pose> parsePose(const JsonValue &command, const std::string &context) {
// pose 支持两种写法:
// 1. 数组:[x,y,z,rx,ry,rz]
// 2. 对象:{"x":...,"y":...}
// 对象形式更适合人工编辑,数组形式更紧凑。
const JsonValue *pose_value = command.find("pose");
if (pose_value == nullptr) {
return Result<common::Pose>::failure(context + ".pose is required");
}
common::Pose pose;
if (pose_value->isArray()) {
const auto &array = pose_value->asArray();
if (array.size() != 6) {
return Result<common::Pose>::failure(context + ".pose array must contain [x,y,z,rx,ry,rz]");
}
for (const JsonValue &item : array) {
if (!item.isNumber() || !std::isfinite(item.asNumber())) {
return Result<common::Pose>::failure(context + ".pose must contain finite numbers");
}
}
pose.x = static_cast<float>(array[0].asNumber());
pose.y = static_cast<float>(array[1].asNumber());
pose.z = static_cast<float>(array[2].asNumber());
pose.rx = static_cast<float>(array[3].asNumber());
pose.ry = static_cast<float>(array[4].asNumber());
pose.rz = static_cast<float>(array[5].asNumber());
return Result<common::Pose>::success(pose);
}
if (!pose_value->isObject()) {
return Result<common::Pose>::failure(context + ".pose must be an object or array");
}
const auto x = requiredNumber(*pose_value, "x", context + ".pose");
const auto y = requiredNumber(*pose_value, "y", context + ".pose");
const auto z = requiredNumber(*pose_value, "z", context + ".pose");
const auto rx = requiredNumber(*pose_value, "rx", context + ".pose");
const auto ry = requiredNumber(*pose_value, "ry", context + ".pose");
const auto rz = requiredNumber(*pose_value, "rz", context + ".pose");
if (!x.ok) {
return Result<common::Pose>::failure(x.error_message);
}
if (!y.ok) {
return Result<common::Pose>::failure(y.error_message);
}
if (!z.ok) {
return Result<common::Pose>::failure(z.error_message);
}
if (!rx.ok) {
return Result<common::Pose>::failure(rx.error_message);
}
if (!ry.ok) {
return Result<common::Pose>::failure(ry.error_message);
}
if (!rz.ok) {
return Result<common::Pose>::failure(rz.error_message);
}
pose.x = static_cast<float>(x.value);
pose.y = static_cast<float>(y.value);
pose.z = static_cast<float>(z.value);
pose.rx = static_cast<float>(rx.value);
pose.ry = static_cast<float>(ry.value);
pose.rz = static_cast<float>(rz.value);
return Result<common::Pose>::success(pose);
}
Result<void> parseConnection(const JsonValue &root, common::RobotConnectionConfig *connection) {
// connection 可省略;省略时使用 RobotConnectionConfig 的默认 RM75 地址。
const JsonValue *value = root.find("connection");
if (value == nullptr) {
return Result<void>::success();
}
auto object_ok = requireObject(*value, "connection");
if (!object_ok.ok) {
return object_ok;
}
auto result = optionalString(*value, "ip", &connection->ip, "connection");
if (!result.ok) {
return result;
}
result = optionalInt(*value, "port", &connection->port, "connection");
if (!result.ok) {
return result;
}
result = optionalInt(*value, "timeout_ms", &connection->timeout_ms, "connection");
if (!result.ok) {
return result;
}
if (connection->ip.empty()) {
return Result<void>::failure("connection.ip must not be empty");
}
if (connection->port <= 0 || connection->port > 65535) {
return Result<void>::failure("connection.port must be in range 1..65535");
}
if (connection->timeout_ms <= 0) {
return Result<void>::failure("connection.timeout_ms must be greater than 0");
}
return Result<void>::success();
}
Result<void> parseSafety(const JsonValue &root, SafetyOptions *safety) {
// safety 可省略;省略时保持 dry_run=true/allow_motion=false,默认不动真机。
const JsonValue *value = root.find("safety");
if (value == nullptr) {
return Result<void>::success();
}
auto object_ok = requireObject(*value, "safety");
if (!object_ok.ok) {
return object_ok;
}
auto result = optionalBool(*value, "dry_run", &safety->dry_run, "safety");
if (!result.ok) {
return result;
}
result = optionalBool(*value, "allow_motion", &safety->allow_motion, "safety");
if (!result.ok) {
return result;
}
result = optionalInt(*value, "max_speed_percent", &safety->max_speed_percent, "safety");
if (!result.ok) {
return result;
}
result = optionalFloat(*value, "max_joint_delta_deg", &safety->max_joint_delta_deg, "safety");
if (!result.ok) {
return result;
}
result = optionalFloat(*value, "max_cartesian_step_m", &safety->max_cartesian_step_m, "safety");
if (!result.ok) {
return result;
}
result = optionalFloat(*value, "max_euler_delta_rad", &safety->max_euler_delta_rad, "safety");
if (!result.ok) {
return result;
}
if (safety->max_speed_percent < 1 || safety->max_speed_percent > 100) {
return Result<void>::failure("safety.max_speed_percent must be in range 1..100");
}
if (safety->max_joint_delta_deg <= 0.0F) {
return Result<void>::failure("safety.max_joint_delta_deg must be positive");
}
if (safety->max_cartesian_step_m <= 0.0F) {
return Result<void>::failure("safety.max_cartesian_step_m must be positive");
}
if (safety->max_euler_delta_rad <= 0.0F) {
return Result<void>::failure("safety.max_euler_delta_rad must be positive");
}
return Result<void>::success();
}
Result<MotionOptions> parseMotionOptions(const JsonValue &command, const std::string &context) {
// 运动参数可以写在每条命令上,未写时使用保守默认值。
MotionOptions motion;
auto result = optionalInt(command, "speed_percent", &motion.speed_percent, context);
if (!result.ok) {
return Result<MotionOptions>::failure(result.error_message);
}
result = optionalInt(command, "blend_radius", &motion.blend_radius, context);
if (!result.ok) {
return Result<MotionOptions>::failure(result.error_message);
}
result = optionalInt(command, "trajectory_connect", &motion.trajectory_connect, context);
if (!result.ok) {
return Result<MotionOptions>::failure(result.error_message);
}
result = optionalBool(command, "blocking", &motion.blocking, context);
if (!result.ok) {
return Result<MotionOptions>::failure(result.error_message);
}
if (motion.speed_percent < 1 || motion.speed_percent > 100) {
return Result<MotionOptions>::failure(context + ".speed_percent must be in range 1..100");
}
if (motion.blend_radius < 0) {
return Result<MotionOptions>::failure(context + ".blend_radius must not be negative");
}
if (motion.trajectory_connect != 0 && motion.trajectory_connect != 1) {
return Result<MotionOptions>::failure(context + ".trajectory_connect must be 0 or 1");
}
return Result<MotionOptions>::success(motion);
}
Result<ArmCommand> parseCommand(const JsonValue &value, size_t index) {
// 单条命令解析只负责把 JSON 转成结构体,不访问硬件、不做运动安全判断。
// 运动安全判断统一放在 JsonCommandRunner::validateMotionCommand。
const std::string context = "commands[" + std::to_string(index) + "]";
auto object_ok = requireObject(value, context);
if (!object_ok.ok) {
return Result<ArmCommand>::failure(object_ok.error_message);
}
auto type_text = requiredString(value, "type", context);
if (!type_text.ok) {
return Result<ArmCommand>::failure(type_text.error_message);
}
auto parsed_type = parseCommandType(type_text.value);
if (!parsed_type.ok) {
return Result<ArmCommand>::failure(context + ": " + parsed_type.error_message);
}
ArmCommand command;
command.type = parsed_type.value;
command.name = type_text.value;
auto optional_name = optionalString(value, "name", &command.name, context);
if (!optional_name.ok) {
return Result<ArmCommand>::failure(optional_name.error_message);
}
auto motion = parseMotionOptions(value, context);
if (!motion.ok) {
return Result<ArmCommand>::failure(motion.error_message);
}
command.motion = motion.value;
if (command.type == CommandType::SleepMs) {
auto duration = requiredNumber(value, "duration_ms", context);
if (!duration.ok) {
return Result<ArmCommand>::failure(duration.error_message);
}
command.duration_ms = static_cast<int>(duration.value);
if (command.duration_ms < 0) {
return Result<ArmCommand>::failure(context + ".duration_ms must not be negative");
}
} else if (command.type == CommandType::MoveJ) {
auto joints = requiredNumberArray(value, "joints_deg", context);
if (!joints.ok) {
return Result<ArmCommand>::failure(joints.error_message);
}
if (joints.value.empty()) {
return Result<ArmCommand>::failure(context + ".joints_deg must not be empty");
}
command.joints_deg = joints.value;
} else if (command.type == CommandType::MoveJDelta ||
command.type == CommandType::MoveJDeltaSteps) {
auto joints = requiredNumberArray(value, "delta_deg", context);
if (!joints.ok) {
return Result<ArmCommand>::failure(joints.error_message);
}
if (joints.value.empty()) {
return Result<ArmCommand>::failure(context + ".delta_deg must not be empty");
}
command.joint_delta_deg = joints.value;
if (command.type == CommandType::MoveJDeltaSteps) {
auto steps_result = optionalInt(value, "steps", &command.steps, context);
if (!steps_result.ok) {
return Result<ArmCommand>::failure(steps_result.error_message);
}
steps_result = optionalInt(value, "step_sleep_ms", &command.step_sleep_ms, context);
if (!steps_result.ok) {
return Result<ArmCommand>::failure(steps_result.error_message);
}
if (command.steps <= 0) {
return Result<ArmCommand>::failure(context + ".steps must be greater than 0");
}
if (command.step_sleep_ms < 0) {
return Result<ArmCommand>::failure(context + ".step_sleep_ms must not be negative");
}
}
} else if (command.type == CommandType::MoveL) {
auto pose = parsePose(value, context);
if (!pose.ok) {
return Result<ArmCommand>::failure(pose.error_message);
}
command.pose = pose.value;
}
return Result<ArmCommand>::success(command);
}
} // namespace
Result<JsonCommandProgram> parseCommandProgramText(const std::string &text) {
// 顶层解析顺序:JSON 语法 -> connection -> safety -> commands。
// 任意一步失败都返回明确错误,不继续执行后续硬件动作。
auto root = parseJson(text);
if (!root.ok) {
return Result<JsonCommandProgram>::failure(root.error_message);
}
if (!root.value.isObject()) {
return Result<JsonCommandProgram>::failure("root JSON value must be an object");
}
JsonCommandProgram program;
auto result = parseConnection(root.value, &program.connection);
if (!result.ok) {
return Result<JsonCommandProgram>::failure(result.error_message);
}
result = parseSafety(root.value, &program.safety);
if (!result.ok) {
return Result<JsonCommandProgram>::failure(result.error_message);
}
const JsonValue *commands = root.value.find("commands");
if (commands == nullptr || !commands->isArray()) {
return Result<JsonCommandProgram>::failure("commands must be an array");
}
if (commands->asArray().empty()) {
return Result<JsonCommandProgram>::failure("commands must not be empty");
}
for (size_t i = 0; i < commands->asArray().size(); ++i) {
auto command = parseCommand(commands->asArray()[i], i);
if (!command.ok) {
return Result<JsonCommandProgram>::failure(command.error_message);
}
program.commands.push_back(command.value);
}
return Result<JsonCommandProgram>::success(program);
}
Result<JsonCommandProgram> loadCommandProgramFromFile(const std::string &path) {
// 文件读取放在 config 层,main 不关心 JSON 解析细节。
std::ifstream file(path);
if (!file) {
return Result<JsonCommandProgram>::failure("failed to open command file: " + path);
}
std::ostringstream buffer;
buffer << file.rdbuf();
return parseCommandProgramText(buffer.str());
}
const char *commandTypeName(CommandType type) {
switch (type) {
case CommandType::GetRobotInfo:
return "get_robot_info";
case CommandType::GetCurrentArmState:
return "get_current_arm_state";
case CommandType::GetForceData:
return "get_force_data";
case CommandType::SleepMs:
return "sleep_ms";
case CommandType::MoveJ:
return "movej";
case CommandType::MoveJDelta:
return "movej_delta";
case CommandType::MoveJDeltaSteps:
return "movej_delta_steps";
case CommandType::MoveL:
return "movel";
}
return "unknown";
}
} // namespace rm_control::config
#include "rm_control/config/simple_json.h"
#include <cerrno>
#include <cstdlib>
#include <stdexcept>
#include <utility>
namespace rm_control::config {
namespace {
class Parser {
public:
explicit Parser(const std::string &text)
: text_(text) {}
common::Result<JsonValue> parse() {
skipWhitespace();
auto value = parseValue();
if (!value.ok) {
return value;
}
skipWhitespace();
if (pos_ != text_.size()) {
return fail("unexpected trailing characters");
}
return value;
}
private:
common::Result<JsonValue> parseValue() {
// JSON 值只在这里分发,后续新增类型时也只改这一处。
skipWhitespace();
if (pos_ >= text_.size()) {
return fail("unexpected end of input");
}
const char ch = text_[pos_];
if (ch == '{') {
return parseObject();
}
if (ch == '[') {
return parseArray();
}
if (ch == '"') {
return parseString();
}
if (ch == '-' || (ch >= '0' && ch <= '9')) {
return parseNumber();
}
if (matchLiteral("true")) {
return common::Result<JsonValue>::success(JsonValue(true));
}
if (matchLiteral("false")) {
return common::Result<JsonValue>::success(JsonValue(false));
}
if (matchLiteral("null")) {
return common::Result<JsonValue>::success(JsonValue());
}
return fail("invalid JSON value");
}
common::Result<JsonValue> parseObject() {
// 解析 { "key": value }。使用 std::map 存储,方便按字段名查找。
++pos_;
JsonValue::Object object;
skipWhitespace();
if (consume('}')) {
return common::Result<JsonValue>::success(JsonValue(std::move(object)));
}
while (true) {
skipWhitespace();
if (pos_ >= text_.size() || text_[pos_] != '"') {
return fail("object key must be a string");
}
auto key = parseString();
if (!key.ok) {
return key;
}
skipWhitespace();
if (!consume(':')) {
return fail("expected ':' after object key");
}
auto value = parseValue();
if (!value.ok) {
return value;
}
object[key.value.asString()] = value.value;
skipWhitespace();
if (consume('}')) {
break;
}
if (!consume(',')) {
return fail("expected ',' or '}' in object");
}
}
return common::Result<JsonValue>::success(JsonValue(std::move(object)));
}
common::Result<JsonValue> parseArray() {
// 解析数组,命令文件里主要用于 joints_deg、delta_deg 和 pose。
++pos_;
JsonValue::Array array;
skipWhitespace();
if (consume(']')) {
return common::Result<JsonValue>::success(JsonValue(std::move(array)));
}
while (true) {
auto value = parseValue();
if (!value.ok) {
return value;
}
array.push_back(value.value);
skipWhitespace();
if (consume(']')) {
break;
}
if (!consume(',')) {
return fail("expected ',' or ']' in array");
}
}
return common::Result<JsonValue>::success(JsonValue(std::move(array)));
}
common::Result<JsonValue> parseString() {
// 解析字符串并处理常见转义。unicode 转义当前只做合法性检查,
// 因为命令字段名和数值不依赖中文字符串内容。
if (!consume('"')) {
return fail("expected string");
}
std::string output;
while (pos_ < text_.size()) {
const char ch = text_[pos_++];
if (ch == '"') {
return common::Result<JsonValue>::success(JsonValue(std::move(output)));
}
if (static_cast<unsigned char>(ch) < 0x20U) {
return fail("control character in string");
}
if (ch != '\\') {
output.push_back(ch);
continue;
}
if (pos_ >= text_.size()) {
return fail("unfinished escape sequence");
}
const char escaped = text_[pos_++];
switch (escaped) {
case '"':
case '\\':
case '/':
output.push_back(escaped);
break;
case 'b':
output.push_back('\b');
break;
case 'f':
output.push_back('\f');
break;
case 'n':
output.push_back('\n');
break;
case 'r':
output.push_back('\r');
break;
case 't':
output.push_back('\t');
break;
case 'u':
// 命令文件字段名不需要 unicode 转义;这里跳过合法的 4 位十六进制并保留占位符。
if (pos_ + 4 > text_.size()) {
return fail("unfinished unicode escape");
}
for (int i = 0; i < 4; ++i) {
const char hex = text_[pos_ + static_cast<size_t>(i)];
const bool valid = (hex >= '0' && hex <= '9') ||
(hex >= 'a' && hex <= 'f') ||
(hex >= 'A' && hex <= 'F');
if (!valid) {
return fail("invalid unicode escape");
}
}
pos_ += 4;
output.push_back('?');
break;
default:
return fail("invalid escape sequence");
}
}
return fail("unterminated string");
}
common::Result<JsonValue> parseNumber() {
// strtod 支持整数、小数和科学计数法;外层会继续检查是否有限值。
const char *begin = text_.c_str() + pos_;
char *end = nullptr;
errno = 0;
const double value = std::strtod(begin, &end);
if (errno != 0 || end == begin) {
return fail("invalid number");
}
pos_ = static_cast<size_t>(end - text_.c_str());
return common::Result<JsonValue>::success(JsonValue(value));
}
bool matchLiteral(const char *literal) {
const std::string token(literal);
if (text_.compare(pos_, token.size(), token) != 0) {
return false;
}
pos_ += token.size();
return true;
}
bool consume(char expected) {
if (pos_ < text_.size() && text_[pos_] == expected) {
++pos_;
return true;
}
return false;
}
void skipWhitespace() {
while (pos_ < text_.size()) {
const char ch = text_[pos_];
if (ch != ' ' && ch != '\n' && ch != '\r' && ch != '\t') {
break;
}
++pos_;
}
}
common::Result<JsonValue> fail(const std::string &message) const {
// 带上字节位置,方便用户定位 JSON 文件中的错误字段。
return common::Result<JsonValue>::failure(message + " at byte " + std::to_string(pos_));
}
const std::string &text_;
size_t pos_ = 0;
};
} // namespace
JsonValue::JsonValue(bool value)
: type_(Type::Bool), bool_value_(value) {}
JsonValue::JsonValue(double value)
: type_(Type::Number), number_value_(value) {}
JsonValue::JsonValue(std::string value)
: type_(Type::String), string_value_(std::move(value)) {}
JsonValue::JsonValue(Array value)
: type_(Type::Array), array_value_(std::move(value)) {}
JsonValue::JsonValue(Object value)
: type_(Type::Object), object_value_(std::move(value)) {}
JsonValue::Type JsonValue::type() const {
return type_;
}
bool JsonValue::isNull() const {
return type_ == Type::Null;
}
bool JsonValue::isBool() const {
return type_ == Type::Bool;
}
bool JsonValue::isNumber() const {
return type_ == Type::Number;
}
bool JsonValue::isString() const {
return type_ == Type::String;
}
bool JsonValue::isArray() const {
return type_ == Type::Array;
}
bool JsonValue::isObject() const {
return type_ == Type::Object;
}
bool JsonValue::asBool() const {
if (!isBool()) {
throw std::logic_error("JSON value is not a bool");
}
return bool_value_;
}
double JsonValue::asNumber() const {
if (!isNumber()) {
throw std::logic_error("JSON value is not a number");
}
return number_value_;
}
const std::string &JsonValue::asString() const {
if (!isString()) {
throw std::logic_error("JSON value is not a string");
}
return string_value_;
}
const JsonValue::Array &JsonValue::asArray() const {
if (!isArray()) {
throw std::logic_error("JSON value is not an array");
}
return array_value_;
}
const JsonValue::Object &JsonValue::asObject() const {
if (!isObject()) {
throw std::logic_error("JSON value is not an object");
}
return object_value_;
}
const JsonValue *JsonValue::find(const std::string &key) const {
if (!isObject()) {
return nullptr;
}
const auto iter = object_value_.find(key);
return iter == object_value_.end() ? nullptr : &iter->second;
}
common::Result<JsonValue> parseJson(const std::string &text) {
// 对外只暴露一个函数,避免调用方依赖 Parser 的内部状态。
Parser parser(text);
return parser.parse();
}
} // namespace rm_control::config
#include "rm_control/core/drag_teach_recorder.h"
#include <chrono>
#include <iostream>
#include <thread>
#include <vector>
namespace rm_control::core {
namespace {
constexpr int kMinimumSamplePeriodMs = 50;
constexpr int kMaximumDurationSeconds = 3600;
constexpr int kSafetyCountdownSeconds = 5;
common::TrajectorySample makeSample(long long elapsed_ms, const common::ArmState &state) {
common::TrajectorySample sample;
sample.elapsed_ms = elapsed_ms;
sample.joints_deg = state.joints_deg;
sample.tcp_pose = state.tcp_pose;
return sample;
}
void printCountdown(std::ostream &out) {
out << "Prepare for six-dof force drag teach. Clear workspace and keep E-stop reachable.\n";
for (int second = kSafetyCountdownSeconds; second > 0; --second) {
out << "Drag teach starts in " << second << "...\n";
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
} // namespace
DragTeachRecorder::DragTeachRecorder(interfaces::IRobotArm &robot)
: robot_(robot) {}
common::Result<DragTeachRecordSummary> DragTeachRecorder::record(const DragTeachRecordConfig &config,
std::ostream &out) {
auto validation = validateConfig(config);
if (!validation.ok) {
return common::Result<DragTeachRecordSummary>::failure(validation.error_message);
}
auto files = modules::trajectory::makeTrajectoryFileSet(config.storage_root, config.session_name);
if (!files.ok) {
return common::Result<DragTeachRecordSummary>::failure(files.error_message);
}
printCountdown(out);
auto start_result = robot_.startDragTeach(config.drag_options);
if (!start_result.ok) {
return common::Result<DragTeachRecordSummary>::failure(start_result.error_message);
}
std::vector<common::TrajectorySample> samples;
const auto start_time = std::chrono::steady_clock::now();
const int total_samples = (config.duration_seconds * 1000) / config.sample_period_ms + 1;
common::Result<void> sample_result = common::Result<void>::success();
for (int sample_index = 0; sample_index < total_samples; ++sample_index) {
const auto target_time = start_time + std::chrono::milliseconds(sample_index * config.sample_period_ms);
std::this_thread::sleep_until(target_time);
auto state = robot_.getCurrentArmState();
if (!state.ok) {
sample_result = common::Result<void>::failure(state.error_message);
break;
}
const auto now = std::chrono::steady_clock::now();
const long long elapsed_ms =
std::chrono::duration_cast<std::chrono::milliseconds>(now - start_time).count();
samples.push_back(makeSample(elapsed_ms, state.value));
if (sample_index == 0 || sample_index == total_samples - 1) {
out << "sample " << sample_index << "/" << (total_samples - 1)
<< " elapsed_ms=" << elapsed_ms << '\n';
}
}
auto stop_result = robot_.stopDragTeach();
if (!sample_result.ok) {
return common::Result<DragTeachRecordSummary>::failure(sample_result.error_message);
}
if (!stop_result.ok) {
return common::Result<DragTeachRecordSummary>::failure(stop_result.error_message);
}
auto write_result = modules::trajectory::writeTrajectoryCsv(files.value.csv_path, samples);
if (!write_result.ok) {
return common::Result<DragTeachRecordSummary>::failure(write_result.error_message);
}
DragTeachRecordSummary summary;
summary.files = files.value;
summary.sample_count = static_cast<int>(samples.size());
if (config.save_vendor_trajectory) {
auto vendor_result = robot_.saveDragTeachTrajectory(files.value.vendor_path);
if (vendor_result.ok) {
summary.vendor_trajectory_saved = true;
summary.vendor_save_message = "saved " + std::to_string(vendor_result.value.point_count) +
" vendor points";
} else {
summary.vendor_save_message = vendor_result.error_message;
}
} else {
summary.vendor_save_message = "vendor trajectory save disabled";
}
out << "CSV saved: " << summary.files.csv_path << '\n';
out << "Vendor trajectory: " << summary.vendor_save_message << '\n';
return common::Result<DragTeachRecordSummary>::success(summary);
}
common::Result<void> DragTeachRecorder::validateConfig(const DragTeachRecordConfig &config) const {
if (config.storage_root.empty()) {
return common::Result<void>::failure("storage_root must not be empty");
}
if (config.session_name.empty()) {
return common::Result<void>::failure("session_name must not be empty");
}
if (config.duration_seconds <= 0 || config.duration_seconds > kMaximumDurationSeconds) {
return common::Result<void>::failure("duration_seconds must be in range 1.." +
std::to_string(kMaximumDurationSeconds));
}
if (config.sample_period_ms < kMinimumSamplePeriodMs) {
return common::Result<void>::failure("sample_period_ms must be at least " +
std::to_string(kMinimumSamplePeriodMs));
}
return common::Result<void>::success();
}
} // namespace rm_control::core
#include "rm_control/core/json_command_runner.h"
#include <algorithm>
#include <chrono>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <thread>
namespace rm_control::core {
namespace {
float absDiff(float left, float right) {
return std::fabs(left - right);
}
void printPose(std::ostream &out, const common::Pose &pose) {
out << std::fixed << std::setprecision(4)
<< "pos_m=(" << pose.x << "," << pose.y << "," << pose.z << ")"
<< ", euler_rad=(" << pose.rx << "," << pose.ry << "," << pose.rz << ")";
}
void printJoints(std::ostream &out, const std::vector<float> &joints) {
out << std::fixed << std::setprecision(3) << "[";
for (size_t i = 0; i < joints.size(); ++i) {
if (i > 0) {
out << ", ";
}
out << "J" << (i + 1) << "=" << joints[i];
}
out << "]";
}
} // namespace
JsonCommandRunner::JsonCommandRunner(interfaces::IRobotArm &robot)
: robot_(robot) {}
common::Result<void> JsonCommandRunner::run(const config::JsonCommandProgram &program, std::ostream &out) {
// 执行顺序固定:先连接,再按 commands 顺序逐条执行。
// 这里不做文件解析,保证 runner 可以直接用结构体做单元测试。
out << "Connecting to RealMan arm at " << program.connection.ip << ':'
<< program.connection.port << " timeout=" << program.connection.timeout_ms << " ms\n";
out << "Safety: dry_run=" << (program.safety.dry_run ? "true" : "false")
<< ", allow_motion=" << (program.safety.allow_motion ? "true" : "false")
<< ", max_speed_percent=" << program.safety.max_speed_percent
<< ", max_joint_delta_deg=" << program.safety.max_joint_delta_deg
<< ", max_cartesian_step_m=" << program.safety.max_cartesian_step_m << '\n';
auto connect_result = robot_.connect(program.connection);
if (!connect_result.ok) {
return connect_result;
}
for (size_t i = 0; i < program.commands.size(); ++i) {
const config::ArmCommand &command = program.commands[i];
out << "\n[" << (i + 1) << "/" << program.commands.size() << "] "
<< command.name << " (" << config::commandTypeName(command.type) << ")\n";
switch (command.type) {
case config::CommandType::GetRobotInfo: {
auto info = robot_.getRobotInfo();
if (!info.ok) {
return common::Result<void>::failure(info.error_message);
}
out << "arm_dof=" << info.value.arm_dof
<< ", arm_model=" << info.value.arm_model
<< ", force_type=" << info.value.force_type
<< ", controller_version=" << info.value.controller_version << '\n';
break;
}
case config::CommandType::GetCurrentArmState: {
auto state = robot_.getCurrentArmState();
if (!state.ok) {
return common::Result<void>::failure(state.error_message);
}
out << "joints_deg=";
printJoints(out, state.value.joints_deg);
out << ", tcp_pose=";
printPose(out, state.value.tcp_pose);
out << ", error_count=" << state.value.error_codes.size() << '\n';
break;
}
case config::CommandType::GetForceData: {
auto force = robot_.getForceData();
if (!force.ok) {
return common::Result<void>::failure(force.error_message);
}
out << std::fixed << std::setprecision(4)
<< "work_zero_force=[Fx=" << force.value.work_zero[0]
<< ", Fy=" << force.value.work_zero[1]
<< ", Fz=" << force.value.work_zero[2]
<< ", Mx=" << force.value.work_zero[3]
<< ", My=" << force.value.work_zero[4]
<< ", Mz=" << force.value.work_zero[5] << "]\n";
break;
}
case config::CommandType::SleepMs:
out << "sleep " << command.duration_ms << " ms\n";
std::this_thread::sleep_for(std::chrono::milliseconds(command.duration_ms));
break;
case config::CommandType::MoveJ:
case config::CommandType::MoveJDelta:
case config::CommandType::MoveJDeltaSteps:
case config::CommandType::MoveL: {
auto current_state = robot_.getCurrentArmState();
if (!current_state.ok) {
return common::Result<void>::failure(current_state.error_message);
}
auto validation = validateMotionCommand(program, command, current_state.value);
if (!validation.ok) {
return validation;
}
if (program.safety.dry_run) {
// dry_run 仍然会连接并读取当前状态,以便验证安全边界;
// 但不会发送 rm_movej/rm_movel。
out << "dry_run=true, motion command validated but not sent.\n";
break;
}
if (!program.safety.allow_motion) {
return common::Result<void>::failure(
"motion command refused because safety.allow_motion is false");
}
common::Result<void> move_result;
if (command.type == config::CommandType::MoveJ) {
out << "sending rm_movej target=";
printJoints(out, command.joints_deg);
out << ", speed=" << command.motion.speed_percent << "%\n";
move_result = robot_.moveJ(command.joints_deg,
command.motion.speed_percent,
command.motion.blend_radius,
command.motion.trajectory_connect,
command.motion.blocking);
} else if (command.type == config::CommandType::MoveJDelta) {
// 相对关节运动:每次发送前基于当前读数生成绝对目标。
// RM_API2 的 rm_movej 需要绝对关节角,不接受相对增量。
std::vector<float> target = current_state.value.joints_deg;
for (size_t joint = 0; joint < target.size(); ++joint) {
target[joint] += command.joint_delta_deg[joint];
}
out << "sending rm_movej relative delta=";
printJoints(out, command.joint_delta_deg);
out << ", target=";
printJoints(out, target);
out << ", speed=" << command.motion.speed_percent << "%\n";
move_result = robot_.moveJ(target,
command.motion.speed_percent,
command.motion.blend_radius,
command.motion.trajectory_connect,
command.motion.blocking);
} else if (command.type == config::CommandType::MoveJDeltaSteps) {
// 阶梯相对运动:适合把 20 度这类较大总幅度拆成多次小步,
// 既便于观察,也避免单条命令产生大幅跳动。
out << "sending stepped rm_movej total_delta=";
printJoints(out, command.joint_delta_deg);
out << ", steps=" << command.steps
<< ", speed=" << command.motion.speed_percent << "%\n";
move_result = common::Result<void>::success();
for (int step = 0; step < command.steps; ++step) {
// 每一步都重新读取当前状态,而不是用上一条目标值递推。
// 这样可以吸收控制器实际到位误差,避免累计误差越来越大。
auto step_state = robot_.getCurrentArmState();
if (!step_state.ok) {
move_result = common::Result<void>::failure(step_state.error_message);
break;
}
std::vector<float> target = step_state.value.joints_deg;
for (size_t joint = 0; joint < target.size(); ++joint) {
target[joint] += command.joint_delta_deg[joint] / static_cast<float>(command.steps);
}
out << " step " << (step + 1) << "/" << command.steps << " target=";
printJoints(out, target);
out << '\n';
move_result = robot_.moveJ(target,
command.motion.speed_percent,
command.motion.blend_radius,
command.motion.trajectory_connect,
command.motion.blocking);
if (!move_result.ok) {
break;
}
if (command.step_sleep_ms > 0) {
std::this_thread::sleep_for(std::chrono::milliseconds(command.step_sleep_ms));
}
}
} else {
out << "sending rm_movel target=";
printPose(out, command.pose);
out << ", speed=" << command.motion.speed_percent << "%\n";
move_result = robot_.moveL(command.pose,
command.motion.speed_percent,
command.motion.blend_radius,
command.motion.trajectory_connect,
command.motion.blocking);
}
if (!move_result.ok) {
return move_result;
}
break;
}
}
}
return common::Result<void>::success();
}
common::Result<void> JsonCommandRunner::validateMotionCommand(
const config::JsonCommandProgram &program,
const config::ArmCommand &command,
const common::ArmState &current_state) const {
if (command.motion.speed_percent > program.safety.max_speed_percent) {
// 速度上限是全局安全策略,不允许单条命令绕过。
return common::Result<void>::failure("motion speed exceeds safety.max_speed_percent");
}
if (command.type == config::CommandType::MoveJ) {
// 绝对关节目标最容易写错,所以用当前关节值计算差值做限幅。
if (command.joints_deg.size() != current_state.joints_deg.size()) {
return common::Result<void>::failure(
"movej joints_deg size must match current robot DOF");
}
for (size_t i = 0; i < command.joints_deg.size(); ++i) {
const float delta = absDiff(command.joints_deg[i], current_state.joints_deg[i]);
if (delta > program.safety.max_joint_delta_deg) {
return common::Result<void>::failure(
"movej J" + std::to_string(i + 1) + " delta " + std::to_string(delta) +
" deg exceeds safety.max_joint_delta_deg");
}
}
return common::Result<void>::success();
}
if (command.type == config::CommandType::MoveJDelta) {
// 相对关节目标直接检查每个关节的增量绝对值。
if (command.joint_delta_deg.size() != current_state.joints_deg.size()) {
return common::Result<void>::failure(
"movej_delta delta_deg size must match current robot DOF");
}
for (size_t i = 0; i < command.joint_delta_deg.size(); ++i) {
const float delta = std::fabs(command.joint_delta_deg[i]);
if (delta > program.safety.max_joint_delta_deg) {
return common::Result<void>::failure(
"movej_delta J" + std::to_string(i + 1) + " delta " + std::to_string(delta) +
" deg exceeds safety.max_joint_delta_deg");
}
}
return common::Result<void>::success();
}
if (command.type == config::CommandType::MoveJDeltaSteps) {
// 阶梯运动允许总幅度较大,但每一步仍必须满足安全步进限制。
if (command.joint_delta_deg.size() != current_state.joints_deg.size()) {
return common::Result<void>::failure(
"movej_delta_steps delta_deg size must match current robot DOF");
}
if (command.steps <= 0) {
return common::Result<void>::failure("movej_delta_steps steps must be greater than 0");
}
for (size_t i = 0; i < command.joint_delta_deg.size(); ++i) {
const float per_step_delta = std::fabs(command.joint_delta_deg[i]) /
static_cast<float>(command.steps);
if (per_step_delta > program.safety.max_joint_delta_deg) {
return common::Result<void>::failure(
"movej_delta_steps J" + std::to_string(i + 1) + " per-step delta " +
std::to_string(per_step_delta) +
" deg exceeds safety.max_joint_delta_deg");
}
}
return common::Result<void>::success();
}
const float dx = absDiff(command.pose.x, current_state.tcp_pose.x);
// 笛卡尔运动按 xyz 和欧拉角分别限幅,避免误把 m/rad 写成 mm/deg。
const float dy = absDiff(command.pose.y, current_state.tcp_pose.y);
const float dz = absDiff(command.pose.z, current_state.tcp_pose.z);
if (dx > program.safety.max_cartesian_step_m ||
dy > program.safety.max_cartesian_step_m ||
dz > program.safety.max_cartesian_step_m) {
return common::Result<void>::failure("movel Cartesian delta exceeds safety.max_cartesian_step_m");
}
const float drx = absDiff(command.pose.rx, current_state.tcp_pose.rx);
const float dry = absDiff(command.pose.ry, current_state.tcp_pose.ry);
const float drz = absDiff(command.pose.rz, current_state.tcp_pose.rz);
if (drx > program.safety.max_euler_delta_rad ||
dry > program.safety.max_euler_delta_rad ||
drz > program.safety.max_euler_delta_rad) {
return common::Result<void>::failure("movel Euler delta exceeds safety.max_euler_delta_rad");
}
return common::Result<void>::success();
}
} // namespace rm_control::core
#include "rm_control/core/drag_teach_recorder.h"
#include "rm_control/drivers/realman/realman_robot_arm.h"
#include "rm_control/modules/trajectory/trajectory_file_store.h"
#include <cstdlib>
#include <iostream>
#include <string>
namespace {
using rm_control::core::DragTeachRecordConfig;
void printUsage(const char *program_name) {
std::cout << "Usage: " << program_name
<< " [session_name] [duration_seconds] [sample_period_ms] [storage_root]"
<< " [--no-vendor-save] [--ordinary-recorded] [--no-singular-wall]\n"
<< "\n"
<< "Default mode is RM75 six-dof force drag teach with position and orientation enabled.\n"
<< "The program records synchronized CSV as the primary artifact.\n";
}
bool parseInt(const char *value, int *out) {
if (value == nullptr || out == nullptr || value[0] == '\0') {
return false;
}
char *end = nullptr;
const long parsed = std::strtol(value, &end, 10);
if (end == value || *end != '\0') {
return false;
}
*out = static_cast<int>(parsed);
return true;
}
std::string defaultSessionName() {
return "rm75_drag_pose_" + rm_control::modules::trajectory::timestampString();
}
bool parseArguments(int argc, char **argv, DragTeachRecordConfig *config) {
if (config == nullptr) {
return false;
}
if (argc > 1 && (std::string(argv[1]) == "-h" || std::string(argv[1]) == "--help")) {
printUsage(argv[0]);
std::exit(0);
}
config->session_name = defaultSessionName();
config->storage_root = rm_control::modules::trajectory::defaultTrajectoryStorageRoot();
config->drag_options.mode = rm_control::common::DragTeachMode::SixDofForcePositionAndOrientation;
config->drag_options.enable_singular_wall = true;
config->drag_options.record_vendor_trajectory = true;
int positional_index = 0;
for (int i = 1; i < argc; ++i) {
const std::string arg = argv[i] == nullptr ? "" : argv[i];
if (arg == "--no-vendor-save") {
config->save_vendor_trajectory = false;
continue;
}
if (arg == "--ordinary-recorded") {
config->drag_options.mode = rm_control::common::DragTeachMode::OrdinaryRecorded;
continue;
}
if (arg == "--no-singular-wall") {
config->drag_options.enable_singular_wall = false;
continue;
}
if (!arg.empty() && arg[0] == '-') {
std::cerr << "Unknown option: " << arg << '\n';
return false;
}
++positional_index;
if (positional_index == 1) {
config->session_name = arg;
} else if (positional_index == 2) {
if (!parseInt(arg.c_str(), &config->duration_seconds)) {
std::cerr << "Invalid duration_seconds: " << arg << '\n';
return false;
}
} else if (positional_index == 3) {
if (!parseInt(arg.c_str(), &config->sample_period_ms)) {
std::cerr << "Invalid sample_period_ms: " << arg << '\n';
return false;
}
} else if (positional_index == 4) {
config->storage_root = arg;
} else {
std::cerr << "Too many positional arguments.\n";
return false;
}
}
return true;
}
} // namespace
int main(int argc, char **argv) {
DragTeachRecordConfig config;
if (!parseArguments(argc, argv, &config)) {
printUsage(argv[0]);
return 64;
}
rm_control::drivers::realman::RealManRobotArm robot;
rm_control::common::RobotConnectionConfig connection;
auto connect_result = robot.connect(connection);
if (!connect_result.ok) {
std::cerr << "Failed to connect RM75: " << connect_result.error_message << '\n';
return 1;
}
rm_control::core::DragTeachRecorder recorder(robot);
auto summary = recorder.record(config, std::cout);
if (!summary.ok) {
std::cerr << "Drag teach record failed: " << summary.error_message << '\n';
return 2;
}
std::cout << "Recorded samples: " << summary.value.sample_count << '\n'
<< "CSV: " << summary.value.files.csv_path << '\n'
<< "Vendor: " << summary.value.files.vendor_path << '\n'
<< "Converted C++ target path: " << summary.value.files.converted_cpp_path << '\n';
return 0;
}
#include "rm_control/drivers/realman/realman_robot_arm.h"
#include <cstdarg>
#include <cstdio>
#include <string>
namespace rm_control::drivers::realman {
namespace {
void apiLogCallback(const char *message, va_list args) {
// RM_API2 的日志回调是 C 风格 va_list,这里统一转到 stderr。
if (message == nullptr) {
return;
}
char buffer[1024] = {};
std::vsnprintf(buffer, sizeof(buffer), message, args);
std::fprintf(stderr, "[rm_api] %s\n", buffer);
}
int destroyApi() {
// 兼容不同版本 RM_API2:有些头文件拼写为 rm_destroy,有些为 rm_destory。
#if defined(REALMAN_RM_API_HAS_RM_DESTROY)
return rm_destroy();
#else
return rm_destory();
#endif
}
common::Pose convertPose(const rm_pose_t &pose) {
// 只把上层需要的位置和欧拉角带出去,四元数留在驱动内部。
common::Pose result;
result.x = pose.position.x;
result.y = pose.position.y;
result.z = pose.position.z;
result.rx = pose.euler.rx;
result.ry = pose.euler.ry;
result.rz = pose.euler.rz;
return result;
}
rm_pose_t toRmPose(const common::Pose &pose) {
// RM_API2 的 rm_pose_t 同时包含四元数和欧拉角。
// 当前 JSON 使用欧拉角表达,四元数给单位值作为安全默认。
rm_pose_t result = {};
result.position.x = pose.x;
result.position.y = pose.y;
result.position.z = pose.z;
result.euler.rx = pose.rx;
result.euler.ry = pose.ry;
result.euler.rz = pose.rz;
result.quaternion.w = 1.0F;
return result;
}
} // namespace
RealManRobotArm::~RealManRobotArm() {
// RAII:无论调用方是否显式 disconnect,析构时都释放 SDK 资源。
disconnect();
}
common::Result<void> RealManRobotArm::connect(const common::RobotConnectionConfig &config) {
// 先断开旧连接,保证重复 connect 不会泄漏旧句柄。
disconnect();
rm_set_log_call_back(apiLogCallback, 2);
rm_set_timeout(config.timeout_ms);
const int init_result = rm_init(RM_TRIPLE_MODE_E);
initialized_ = init_result == 0;
if (!initialized_) {
return common::Result<void>::failure("rm_init failed, error=" + std::to_string(init_result));
}
handle_ = rm_create_robot_arm(config.ip.c_str(), config.port);
if (handle_ == nullptr || handle_->id < 0) {
disconnect();
return common::Result<void>::failure("rm_create_robot_arm failed: " + config.ip + ":" +
std::to_string(config.port));
}
auto info = getRobotInfo();
if (!info.ok) {
disconnect();
return common::Result<void>::failure(info.error_message);
}
dof_ = info.value.arm_dof;
// dof_ 后续用于校验 moveJ 目标长度,避免给 7 轴机械臂传错数组长度。
return common::Result<void>::success();
}
void RealManRobotArm::disconnect() {
// RM_API2 要求先 delete robot arm,再 destroy API。
if (handle_ != nullptr) {
rm_delete_robot_arm(handle_);
handle_ = nullptr;
}
if (initialized_) {
destroyApi();
initialized_ = false;
}
dof_ = 0;
}
common::Result<common::RobotInfo> RealManRobotArm::getRobotInfo() {
// 把 SDK 原始枚举转成 int,避免公共头文件暴露 RM SDK 类型。
auto connected = ensureConnected();
if (!connected.ok) {
return common::Result<common::RobotInfo>::failure(connected.error_message);
}
rm_robot_info_t info = {};
const int result = rm_get_robot_info(handle_, &info);
if (result != 0) {
return common::Result<common::RobotInfo>::failure(
"rm_get_robot_info failed, error=" + std::to_string(result));
}
common::RobotInfo output;
output.arm_dof = static_cast<int>(info.arm_dof);
output.arm_model = static_cast<int>(info.arm_model);
output.force_type = static_cast<int>(info.force_type);
output.controller_version = static_cast<int>(info.robot_controller_version);
return common::Result<common::RobotInfo>::success(output);
}
common::Result<common::ArmState> RealManRobotArm::getCurrentArmState() {
// 当前状态是所有相对运动和安全校验的基础数据。
auto connected = ensureConnected();
if (!connected.ok) {
return common::Result<common::ArmState>::failure(connected.error_message);
}
rm_current_arm_state_t state = {};
const int result = rm_get_current_arm_state(handle_, &state);
if (result != 0) {
return common::Result<common::ArmState>::failure(
"rm_get_current_arm_state failed, error=" + std::to_string(result));
}
const int dof = dof_ > 0 ? dof_ : ARM_DOF;
common::ArmState output;
output.joints_deg.assign(state.joint, state.joint + dof);
output.tcp_pose = convertPose(state.pose);
for (int i = 0; i < static_cast<int>(state.err.err_len) && i < 24; ++i) {
output.error_codes.push_back(state.err.err[i]);
}
return common::Result<common::ArmState>::success(output);
}
common::Result<common::ForceData> RealManRobotArm::getForceData() {
// 力数据当前只读不控制,主要用于状态观察和后续力控模块。
auto connected = ensureConnected();
if (!connected.ok) {
return common::Result<common::ForceData>::failure(connected.error_message);
}
rm_force_data_t data = {};
const int result = rm_get_force_data(handle_, &data);
if (result != 0) {
return common::Result<common::ForceData>::failure(
"rm_get_force_data failed, error=" + std::to_string(result));
}
common::ForceData output;
for (size_t i = 0; i < output.raw.size(); ++i) {
output.raw[i] = data.force_data[i];
output.zero[i] = data.zero_force_data[i];
output.work_zero[i] = data.work_zero_force_data[i];
output.tool_zero[i] = data.tool_zero_force_data[i];
}
return common::Result<common::ForceData>::success(output);
}
common::Result<void> RealManRobotArm::moveJ(const std::vector<float> &joints_deg,
int speed_percent,
int blend_radius,
int trajectory_connect,
bool blocking) {
// IRobotArm 接口使用 vector,但 RM_API2 需要固定长度 C 数组。
// 这里集中做长度校验和数组转换。
auto connected = ensureConnected();
if (!connected.ok) {
return connected;
}
if (static_cast<int>(joints_deg.size()) != dof_) {
return common::Result<void>::failure("moveJ target size must match robot DOF");
}
float target[ARM_DOF] = {};
for (int i = 0; i < dof_; ++i) {
target[i] = joints_deg[static_cast<size_t>(i)];
}
const int result = rm_movej(handle_, target, speed_percent, blend_radius,
trajectory_connect, blocking ? 1 : 0);
if (result != 0) {
return common::Result<void>::failure("rm_movej failed, error=" + std::to_string(result));
}
return common::Result<void>::success();
}
common::Result<void> RealManRobotArm::moveL(const common::Pose &pose,
int speed_percent,
int blend_radius,
int trajectory_connect,
bool blocking) {
// 笛卡尔直线运动保持在驱动层,core 只负责安全限幅和流程编排。
auto connected = ensureConnected();
if (!connected.ok) {
return connected;
}
const rm_pose_t target = toRmPose(pose);
const int result = rm_movel(handle_, target, speed_percent, blend_radius,
trajectory_connect, blocking ? 1 : 0);
if (result != 0) {
return common::Result<void>::failure("rm_movel failed, error=" + std::to_string(result));
}
return common::Result<void>::success();
}
common::Result<void> RealManRobotArm::startDragTeach(const common::DragTeachStartOptions &options) {
auto connected = ensureConnected();
if (!connected.ok) {
return connected;
}
if (options.mode == common::DragTeachMode::OrdinaryRecorded) {
const int record_flag = options.record_vendor_trajectory ? 1 : 0;
const int result = rm_start_drag_teach(handle_, record_flag);
if (result != 0) {
return common::Result<void>::failure(
"rm_start_drag_teach failed, error=" + std::to_string(result));
}
return common::Result<void>::success();
}
// RM75 三代控制器支持复合拖动示教;mode=3 表示六维力位置和姿态同时可拖动。
const int mode = 3;
const int singular_wall = options.enable_singular_wall ? 1 : 0;
const int result = rm_start_multi_drag_teach(handle_, mode, singular_wall);
if (result != 0) {
return common::Result<void>::failure(
"rm_start_multi_drag_teach(mode=3) failed, error=" + std::to_string(result));
}
return common::Result<void>::success();
}
common::Result<void> RealManRobotArm::stopDragTeach() {
auto connected = ensureConnected();
if (!connected.ok) {
return connected;
}
const int result = rm_stop_drag_teach(handle_);
if (result != 0) {
return common::Result<void>::failure("rm_stop_drag_teach failed, error=" + std::to_string(result));
}
return common::Result<void>::success();
}
common::Result<common::SavedVendorTrajectory>
RealManRobotArm::saveDragTeachTrajectory(const std::string &path) {
auto connected = ensureConnected();
if (!connected.ok) {
return common::Result<common::SavedVendorTrajectory>::failure(connected.error_message);
}
if (path.empty()) {
return common::Result<common::SavedVendorTrajectory>::failure("vendor trajectory path must not be empty");
}
if (path.size() > 299) {
return common::Result<common::SavedVendorTrajectory>::failure(
"vendor trajectory path must be shorter than 300 characters for rm_save_trajectory");
}
int point_count = 0;
const int result = rm_save_trajectory(handle_, path.c_str(), &point_count);
if (result != 0) {
return common::Result<common::SavedVendorTrajectory>::failure(
"rm_save_trajectory failed, error=" + std::to_string(result));
}
common::SavedVendorTrajectory output;
output.path = path;
output.point_count = point_count;
return common::Result<common::SavedVendorTrajectory>::success(output);
}
common::Result<void> RealManRobotArm::ensureConnected() const {
// 所有 SDK 调用前统一检查,避免空指针进入 C SDK。
if (!initialized_ || handle_ == nullptr || handle_->id < 0) {
return common::Result<void>::failure("RealMan robot is not connected");
}
return common::Result<void>::success();
}
} // namespace rm_control::drivers::realman
#include "rm_control/config/json_command.h"
#include "rm_control/core/json_command_runner.h"
#include "rm_control/drivers/realman/realman_robot_arm.h"
#include <cstdlib>
#include <iostream>
#include <string>
namespace {
void printUsage(const char *program_name) {
std::cout << "Usage: " << program_name << " <commands.json> [--validate-only]\n"
<< "\n"
<< "Examples:\n"
<< " " << program_name << " ../config/sample_commands.json --validate-only\n"
<< " " << program_name << " ../config/sample_commands.json\n"
<< "\n"
<< "Safety:\n"
<< " JSON defaults should keep dry_run=true and allow_motion=false first.\n"
<< " Set safety.dry_run=false and safety.allow_motion=true only after checking the target.\n";
}
} // namespace
int main(int argc, char **argv) {
// main 只负责参数解析、加载 JSON、创建具体驱动并启动 runner。
// 具体安全校验和硬件调用都放在 core/drivers 中,避免入口文件膨胀。
if (argc < 2 || argc > 3) {
printUsage(argv[0]);
return 64;
}
const std::string first_arg = argv[1] == nullptr ? "" : argv[1];
if (first_arg == "-h" || first_arg == "--help") {
printUsage(argv[0]);
return 0;
}
bool validate_only = false;
if (argc == 3) {
const std::string option = argv[2] == nullptr ? "" : argv[2];
if (option != "--validate-only") {
std::cerr << "Unknown option: " << option << '\n';
printUsage(argv[0]);
return 64;
}
validate_only = true;
}
auto program = rm_control::config::loadCommandProgramFromFile(first_arg);
if (!program.ok) {
std::cerr << "Failed to load JSON command file: " << program.error_message << '\n';
return 1;
}
std::cout << "JSON command file parsed successfully. command_count="
<< program.value.commands.size() << '\n';
if (validate_only) {
// 只校验 JSON 结构,不连接 SDK、不访问真实机械臂。
// 调试新 JSON 时建议先跑这个模式。
std::cout << "validate-only mode: no SDK connection or command execution.\n";
return 0;
}
// 这里选择 RealMan 驱动。以后更换机械臂品牌,只需要替换这个具体实现,
// JsonCommandRunner 和 JSON 格式不需要变。
rm_control::drivers::realman::RealManRobotArm robot;
rm_control::core::JsonCommandRunner runner(robot);
auto result = runner.run(program.value, std::cout);
if (!result.ok) {
std::cerr << "Command execution failed: " << result.error_message << '\n';
return 2;
}
std::cout << "\nAll JSON commands finished.\n";
return 0;
}
#include "rm_control/modules/trajectory/trajectory_file_store.h"
#include <algorithm>
#include <cerrno>
#include <cctype>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <sstream>
#include <sys/stat.h>
#include <vector>
#ifndef RM_PROJECT_ROOT
#define RM_PROJECT_ROOT "."
#endif
namespace rm_control::modules::trajectory {
namespace {
constexpr int kExpectedCsvColumnCount = 15;
bool isPathSeparator(char value) {
return value == '/';
}
std::string parentPath(const std::string &path) {
const size_t slash = path.find_last_of('/');
if (slash == std::string::npos) {
return "";
}
if (slash == 0) {
return "/";
}
return path.substr(0, slash);
}
bool directoryExists(const std::string &path) {
struct stat status = {};
return ::stat(path.c_str(), &status) == 0 && S_ISDIR(status.st_mode);
}
common::Result<void> ensureDirectoryRecursive(const std::string &path) {
if (path.empty() || directoryExists(path)) {
return common::Result<void>::success();
}
const std::string parent = parentPath(path);
if (!parent.empty() && parent != path) {
auto parent_result = ensureDirectoryRecursive(parent);
if (!parent_result.ok) {
return parent_result;
}
}
if (::mkdir(path.c_str(), 0755) == 0 || errno == EEXIST) {
return common::Result<void>::success();
}
return common::Result<void>::failure("mkdir failed for " + path + ": " + std::strerror(errno));
}
std::string joinPath(const std::string &left, const std::string &right) {
if (left.empty()) {
return right;
}
if (right.empty()) {
return left;
}
if (isPathSeparator(left.back())) {
return left + right;
}
return left + "/" + right;
}
std::string trimCopy(const std::string &value) {
const std::string whitespace = " \t\r\n";
const size_t begin = value.find_first_not_of(whitespace);
if (begin == std::string::npos) {
return "";
}
const size_t end = value.find_last_not_of(whitespace);
return value.substr(begin, end - begin + 1);
}
std::vector<std::string> splitCsvLine(const std::string &line) {
std::vector<std::string> columns;
std::stringstream input(line);
std::string column;
while (std::getline(input, column, ',')) {
columns.push_back(trimCopy(column));
}
return columns;
}
bool parseFloat(const std::string &value, float *out) {
if (value.empty() || out == nullptr) {
return false;
}
errno = 0;
char *end = nullptr;
const float parsed = std::strtof(value.c_str(), &end);
if (errno != 0 || end == value.c_str() || *end != '\0' || !std::isfinite(parsed)) {
return false;
}
*out = parsed;
return true;
}
bool parseLongLong(const std::string &value, long long *out) {
if (value.empty() || out == nullptr) {
return false;
}
errno = 0;
char *end = nullptr;
const long long parsed = std::strtoll(value.c_str(), &end, 10);
if (errno != 0 || end == value.c_str() || *end != '\0') {
return false;
}
*out = parsed;
return true;
}
common::Result<common::TrajectorySample> parseSample(const std::vector<std::string> &columns,
int line_number) {
if (columns.size() != kExpectedCsvColumnCount) {
return common::Result<common::TrajectorySample>::failure(
"CSV line " + std::to_string(line_number) + " must have " +
std::to_string(kExpectedCsvColumnCount) + " columns");
}
long long ignored_sample_index = 0;
common::TrajectorySample sample;
if (!parseLongLong(columns[0], &ignored_sample_index) ||
!parseLongLong(columns[1], &sample.elapsed_ms)) {
return common::Result<common::TrajectorySample>::failure(
"CSV line " + std::to_string(line_number) + " has invalid sample_index or elapsed_ms");
}
sample.joints_deg.resize(7);
for (int i = 0; i < 7; ++i) {
if (!parseFloat(columns[2 + i], &sample.joints_deg[static_cast<size_t>(i)])) {
return common::Result<common::TrajectorySample>::failure(
"CSV line " + std::to_string(line_number) + " has invalid J" + std::to_string(i + 1));
}
}
if (!parseFloat(columns[9], &sample.tcp_pose.x) ||
!parseFloat(columns[10], &sample.tcp_pose.y) ||
!parseFloat(columns[11], &sample.tcp_pose.z) ||
!parseFloat(columns[12], &sample.tcp_pose.rx) ||
!parseFloat(columns[13], &sample.tcp_pose.ry) ||
!parseFloat(columns[14], &sample.tcp_pose.rz)) {
return common::Result<common::TrajectorySample>::failure(
"CSV line " + std::to_string(line_number) + " has invalid TCP pose");
}
return common::Result<common::TrajectorySample>::success(sample);
}
void writeCsvHeader(std::ostream &out) {
out << "sample_index,elapsed_ms,"
<< "j1_deg,j2_deg,j3_deg,j4_deg,j5_deg,j6_deg,j7_deg,"
<< "tcp_x_m,tcp_y_m,tcp_z_m,tcp_rx_rad,tcp_ry_rad,tcp_rz_rad\n";
}
void writeCsvSample(std::ostream &out, int sample_index, const common::TrajectorySample &sample) {
out << sample_index << ',' << sample.elapsed_ms;
out << std::fixed << std::setprecision(6);
for (float joint : sample.joints_deg) {
out << ',' << joint;
}
out << ',' << sample.tcp_pose.x
<< ',' << sample.tcp_pose.y
<< ',' << sample.tcp_pose.z
<< ',' << sample.tcp_pose.rx
<< ',' << sample.tcp_pose.ry
<< ',' << sample.tcp_pose.rz << '\n';
}
std::string makeCppIdentifier(const std::string &session_name) {
std::string identifier = sanitizeSessionName(session_name);
std::replace(identifier.begin(), identifier.end(), '-', '_');
if (identifier.empty() || std::isdigit(static_cast<unsigned char>(identifier[0]))) {
identifier = "trajectory_" + identifier;
}
return identifier;
}
} // namespace
std::string timestampString() {
const std::time_t now = std::time(nullptr);
std::tm local_time = {};
localtime_r(&now, &local_time);
std::ostringstream out;
out << std::put_time(&local_time, "%Y%m%d_%H%M%S");
return out.str();
}
std::string sanitizeSessionName(const std::string &raw_name) {
std::string output;
for (char value : raw_name) {
const unsigned char ch = static_cast<unsigned char>(value);
if (std::isalnum(ch) || value == '_' || value == '-') {
output.push_back(value);
} else {
output.push_back('_');
}
}
while (!output.empty() && output.front() == '_') {
output.erase(output.begin());
}
while (!output.empty() && output.back() == '_') {
output.pop_back();
}
if (output.empty()) {
return "rm75_drag_" + timestampString();
}
return output;
}
std::string defaultTrajectoryStorageRoot() {
return std::string(RM_PROJECT_ROOT) + "/data/trajectories";
}
common::Result<TrajectoryStoragePaths> ensureTrajectoryStorage(const std::string &root_dir) {
if (root_dir.empty()) {
return common::Result<TrajectoryStoragePaths>::failure("trajectory storage root must not be empty");
}
TrajectoryStoragePaths paths;
paths.root_dir = root_dir;
paths.csv_dir = joinPath(root_dir, "csv");
paths.vendor_dir = joinPath(root_dir, "vendor");
paths.converted_dir = joinPath(root_dir, "converted");
paths.reports_dir = joinPath(root_dir, "reports");
for (const std::string &path : {paths.root_dir, paths.csv_dir, paths.vendor_dir,
paths.converted_dir, paths.reports_dir}) {
auto result = ensureDirectoryRecursive(path);
if (!result.ok) {
return common::Result<TrajectoryStoragePaths>::failure(result.error_message);
}
}
return common::Result<TrajectoryStoragePaths>::success(paths);
}
common::Result<TrajectoryFileSet> makeTrajectoryFileSet(const std::string &root_dir,
const std::string &session_name) {
auto storage = ensureTrajectoryStorage(root_dir);
if (!storage.ok) {
return common::Result<TrajectoryFileSet>::failure(storage.error_message);
}
const std::string safe_name = sanitizeSessionName(session_name);
TrajectoryFileSet files;
files.session_name = safe_name;
files.csv_path = joinPath(storage.value.csv_dir, safe_name + ".csv");
files.vendor_path = joinPath(storage.value.vendor_dir, safe_name + "_vendor.txt");
files.converted_cpp_path = joinPath(storage.value.converted_dir, safe_name + "_tcp_path.cpp");
files.report_path = joinPath(storage.value.reports_dir, safe_name + "_summary.md");
return common::Result<TrajectoryFileSet>::success(files);
}
common::Result<void> writeTrajectoryCsv(const std::string &csv_path,
const std::vector<common::TrajectorySample> &samples) {
if (samples.empty()) {
return common::Result<void>::failure("trajectory sample list must not be empty");
}
auto parent_result = ensureDirectoryRecursive(parentPath(csv_path));
if (!parent_result.ok) {
return parent_result;
}
std::ofstream output(csv_path);
if (!output) {
return common::Result<void>::failure("failed to open CSV for writing: " + csv_path);
}
writeCsvHeader(output);
for (size_t i = 0; i < samples.size(); ++i) {
if (samples[i].joints_deg.size() != 7) {
return common::Result<void>::failure("trajectory sample joints_deg size must be 7");
}
writeCsvSample(output, static_cast<int>(i), samples[i]);
}
return common::Result<void>::success();
}
common::Result<std::vector<common::TrajectorySample>> loadTrajectoryCsv(const std::string &csv_path) {
std::ifstream input(csv_path);
if (!input) {
return common::Result<std::vector<common::TrajectorySample>>::failure(
"failed to open CSV for reading: " + csv_path);
}
std::vector<common::TrajectorySample> samples;
std::string line;
int line_number = 0;
while (std::getline(input, line)) {
++line_number;
if (line_number == 1 || trimCopy(line).empty()) {
continue;
}
auto sample = parseSample(splitCsvLine(line), line_number);
if (!sample.ok) {
return common::Result<std::vector<common::TrajectorySample>>::failure(sample.error_message);
}
samples.push_back(sample.value);
}
if (samples.empty()) {
return common::Result<std::vector<common::TrajectorySample>>::failure("trajectory CSV contains no samples");
}
return common::Result<std::vector<common::TrajectorySample>>::success(samples);
}
common::Result<void> exportTcpPathCpp(const std::string &cpp_path,
const std::vector<common::TrajectorySample> &samples,
const std::string &session_name) {
if (samples.empty()) {
return common::Result<void>::failure("trajectory sample list must not be empty");
}
auto parent_result = ensureDirectoryRecursive(parentPath(cpp_path));
if (!parent_result.ok) {
return parent_result;
}
std::ofstream output(cpp_path);
if (!output) {
return common::Result<void>::failure("failed to open C++ output: " + cpp_path);
}
const std::string variable_name = "kTcpPath_" + makeCppIdentifier(session_name);
output << "#include <cstdint>\n"
<< "#include <vector>\n\n"
<< "namespace rm_control_generated {\n\n"
<< "struct TcpWaypoint {\n"
<< " std::int64_t elapsed_ms;\n"
<< " float x;\n"
<< " float y;\n"
<< " float z;\n"
<< " float rx;\n"
<< " float ry;\n"
<< " float rz;\n"
<< "};\n\n"
<< "const std::vector<TcpWaypoint> " << variable_name << " = {\n";
output << std::fixed << std::setprecision(6);
for (const auto &sample : samples) {
output << " {" << sample.elapsed_ms
<< ", " << sample.tcp_pose.x
<< "F, " << sample.tcp_pose.y
<< "F, " << sample.tcp_pose.z
<< "F, " << sample.tcp_pose.rx
<< "F, " << sample.tcp_pose.ry
<< "F, " << sample.tcp_pose.rz
<< "F},\n";
}
output << "};\n\n"
<< "} // namespace rm_control_generated\n";
return common::Result<void>::success();
}
} // namespace rm_control::modules::trajectory
#include "rm_control/modules/trajectory/trajectory_file_store.h"
#include <iostream>
#include <string>
namespace {
void printUsage(const char *program_name) {
std::cout << "Usage: " << program_name << " <input_csv> [output_cpp]\n"
<< "\n"
<< "Converts recorded CSV into a C++ TCP waypoint table. It does not connect to the robot.\n";
}
std::string fileStem(const std::string &path) {
const size_t slash = path.find_last_of('/');
const size_t begin = slash == std::string::npos ? 0 : slash + 1;
const size_t dot = path.find_last_of('.');
const size_t end = dot == std::string::npos || dot < begin ? path.size() : dot;
return path.substr(begin, end - begin);
}
std::string defaultOutputPath(const std::string &input_csv) {
const std::string session_name = rm_control::modules::trajectory::sanitizeSessionName(fileStem(input_csv));
auto files = rm_control::modules::trajectory::makeTrajectoryFileSet(
rm_control::modules::trajectory::defaultTrajectoryStorageRoot(), session_name);
if (!files.ok) {
return session_name + "_tcp_path.cpp";
}
return files.value.converted_cpp_path;
}
} // namespace
int main(int argc, char **argv) {
if (argc < 2 || argc > 3) {
printUsage(argv[0]);
return 64;
}
const std::string first_arg = argv[1] == nullptr ? "" : argv[1];
if (first_arg == "-h" || first_arg == "--help") {
printUsage(argv[0]);
return 0;
}
const std::string input_csv = first_arg;
const std::string output_cpp = argc == 3 ? std::string(argv[2]) : defaultOutputPath(input_csv);
auto samples = rm_control::modules::trajectory::loadTrajectoryCsv(input_csv);
if (!samples.ok) {
std::cerr << "Failed to load CSV: " << samples.error_message << '\n';
return 1;
}
const std::string session_name = rm_control::modules::trajectory::sanitizeSessionName(fileStem(input_csv));
auto export_result = rm_control::modules::trajectory::exportTcpPathCpp(
output_cpp, samples.value, session_name);
if (!export_result.ok) {
std::cerr << "Failed to export C++: " << export_result.error_message << '\n';
return 2;
}
std::cout << "Loaded samples: " << samples.value.size() << '\n'
<< "C++ TCP path: " << output_cpp << '\n';
return 0;
}
#include "rm_control/config/json_command.h"
#include <iostream>
#include <string>
namespace {
int g_failures = 0;
void expect(bool condition, const std::string &message) {
// 这里不用 gtest,保持 RM 子工程测试零外部依赖,方便离线编译。
if (!condition) {
++g_failures;
std::cerr << "[FAIL] " << message << '\n';
}
}
void testParseReadonlyProgram() {
// 只读命令必须能在不打开真实硬件的情况下完成解析。
const std::string text = R"json(
{
"connection": {
"ip": "192.168.1.18",
"port": 8080,
"timeout_ms": 1000
},
"safety": {
"dry_run": true,
"allow_motion": false,
"max_speed_percent": 20,
"max_joint_delta_deg": 5
},
"commands": [
{"type": "get_robot_info"},
{"type": "get_current_arm_state"},
{"type": "get_force_data"},
{"type": "sleep_ms", "duration_ms": 10}
]
}
)json";
auto program = rm_control::config::parseCommandProgramText(text);
expect(program.ok, "read-only JSON should parse");
if (!program.ok) {
return;
}
expect(program.value.connection.ip == "192.168.1.18", "connection IP parsed");
expect(program.value.commands.size() == 4, "command count parsed");
expect(program.value.safety.dry_run, "dry_run parsed");
expect(!program.value.safety.allow_motion, "allow_motion parsed");
}
void testParseMoveJDeltaProgram() {
// 相对关节命令是人工调试最常用格式,必须保证 delta 和速度能正确解析。
const std::string text = R"json(
{
"commands": [
{
"type": "movej_delta",
"name": "small J2 test",
"delta_deg": [0, 1, 0, 0, 0, 0, 0],
"speed_percent": 5,
"blocking": true
}
]
}
)json";
auto program = rm_control::config::parseCommandProgramText(text);
expect(program.ok, "movej_delta JSON should parse");
if (!program.ok) {
return;
}
expect(program.value.commands[0].joint_delta_deg.size() == 7, "delta size parsed");
expect(program.value.commands[0].motion.speed_percent == 5, "speed parsed");
}
void testParseMoveJDeltaStepsProgram() {
// 阶梯运动用于把较大总幅度拆成小步,核心字段是 steps 和 step_sleep_ms。
const std::string text = R"json(
{
"commands": [
{
"type": "movej_delta_steps",
"name": "visible J4 test",
"delta_deg": [0, 0, 0, 20, 0, 0, 0],
"steps": 20,
"step_sleep_ms": 20,
"speed_percent": 20,
"blocking": true
}
]
}
)json";
auto program = rm_control::config::parseCommandProgramText(text);
expect(program.ok, "movej_delta_steps JSON should parse");
if (!program.ok) {
return;
}
expect(program.value.commands[0].steps == 20, "steps parsed");
expect(program.value.commands[0].step_sleep_ms == 20, "step sleep parsed");
}
void testRejectInvalidProgram() {
// 缺少必要字段时必须拒绝,避免不完整 JSON 被发送到真实机械臂。
const std::string text = R"json({"commands":[{"type":"movej"}]})json";
auto program = rm_control::config::parseCommandProgramText(text);
expect(!program.ok, "movej without joints_deg should be rejected");
}
} // namespace
int main() {
testParseReadonlyProgram();
testParseMoveJDeltaProgram();
testParseMoveJDeltaStepsProgram();
testRejectInvalidProgram();
if (g_failures == 0) {
std::cout << "[PASS] rm_json_command_tests\n";
return 0;
}
std::cerr << g_failures << " test(s) failed\n";
return 1;
}
#include "rm_control/modules/trajectory/trajectory_file_store.h"
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#ifndef RM_TEST_OUTPUT_DIR
#define RM_TEST_OUTPUT_DIR "."
#endif
namespace {
int g_failures = 0;
void expect(bool condition, const std::string &message) {
if (!condition) {
++g_failures;
std::cerr << "[FAIL] " << message << '\n';
}
}
rm_control::common::TrajectorySample makeSample(long long elapsed_ms, float j2_deg) {
rm_control::common::TrajectorySample sample;
sample.elapsed_ms = elapsed_ms;
sample.joints_deg = {0.0F, j2_deg, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F};
sample.tcp_pose.x = 0.1F;
sample.tcp_pose.y = 0.2F;
sample.tcp_pose.z = 0.3F;
sample.tcp_pose.rx = 0.01F;
sample.tcp_pose.ry = 0.02F;
sample.tcp_pose.rz = 0.03F;
return sample;
}
std::string readTextFile(const std::string &path) {
std::ifstream input(path);
std::ostringstream buffer;
buffer << input.rdbuf();
return buffer.str();
}
void testStoragePathsAndCsvRoundTrip() {
const std::string root = std::string(RM_TEST_OUTPUT_DIR) + "/trajectory_store_test";
auto files = rm_control::modules::trajectory::makeTrajectoryFileSet(root, "demo session");
expect(files.ok, "file set should be created");
if (!files.ok) {
return;
}
expect(files.value.session_name == "demo_session", "session name should be sanitized");
std::vector<rm_control::common::TrajectorySample> samples;
samples.push_back(makeSample(0, 0.0F));
samples.push_back(makeSample(100, 1.0F));
auto write_result = rm_control::modules::trajectory::writeTrajectoryCsv(files.value.csv_path, samples);
expect(write_result.ok, "CSV should be written");
auto loaded = rm_control::modules::trajectory::loadTrajectoryCsv(files.value.csv_path);
expect(loaded.ok, "CSV should be loaded");
if (!loaded.ok) {
return;
}
expect(loaded.value.size() == 2, "loaded sample count should match");
expect(loaded.value[1].joints_deg[1] == 1.0F, "loaded J2 should match");
}
void testExportTcpPathCpp() {
const std::string root = std::string(RM_TEST_OUTPUT_DIR) + "/trajectory_export_test";
auto files = rm_control::modules::trajectory::makeTrajectoryFileSet(root, "tcp demo");
expect(files.ok, "file set should be created for export");
if (!files.ok) {
return;
}
std::vector<rm_control::common::TrajectorySample> samples;
samples.push_back(makeSample(0, 0.0F));
samples.push_back(makeSample(100, 1.0F));
auto export_result = rm_control::modules::trajectory::exportTcpPathCpp(
files.value.converted_cpp_path, samples, files.value.session_name);
expect(export_result.ok, "C++ TCP path should be exported");
const std::string text = readTextFile(files.value.converted_cpp_path);
expect(text.find("struct TcpWaypoint") != std::string::npos, "export should contain TcpWaypoint");
expect(text.find("kTcpPath_tcp_demo") != std::string::npos, "export should contain sanitized variable");
}
} // namespace
int main() {
testStoragePathsAndCsvRoundTrip();
testExportTcpPathCpp();
if (g_failures == 0) {
std::cout << "[PASS] rm_trajectory_file_store_tests\n";
return 0;
}
std::cerr << g_failures << " test(s) failed\n";
return 1;
}
# CLion 搭建睿尔曼 RealMan C++ SDK
本文档说明当前项目中睿尔曼 RealMan RM_API2 C++ SDK 的 CLion 配置方式。
## 当前配置
本项目的 CMake 已接入睿尔曼 C++ SDK:
| 项目 | 当前值 |
| --- | --- |
| 首选 SDK 根目录 | `/home/mashiro/RM_API2/C++` |
| 头文件目录 | `/home/mashiro/RM_API2/C++/include` |
| x86_64 动态库 | `/home/mashiro/RM_API2/C++/linux/linux_x86_c++_vv1.1.5/libapi_cpp.so` |
| fallback SDK | `third_party/Robotic_Arm` |
| CMake imported target | `realman_api_cpp` |
CMake 会优先使用 `REALMAN_RM_API2_ROOT` 指定的 SDK;如果该路径不可用,会回退到项目内置的 `third_party/Robotic_Arm`
## CLion 打开项目
1. 打开 CLion。
2. 选择 `Open`
3. 打开目录:
```bash
/home/mashiro/project/linkerhand-cpp-sdk
```
4. 选择 CMake preset:
```text
CLion Debug
```
或:
```text
CLion Release
```
5. 点击 `Reload CMake Project`
## 可运行目标
CLion 中会出现以下睿尔曼相关 targets:
| Target | 说明 |
| --- | --- |
| `realman_minimal_demo` | 连接机械臂,读取 API/软件/基础信息,不发送运动指令 |
| `realman_slow_motion_demo` | 低速小幅关节往返运动,默认 `J2 ±5°`,速度 `10%` |
| `realman_joint_pose_config_demo` | 在源码顶部修改关节目标/偏移参数,用于 CLion 内调姿态 |
| `realman_metrics_test` | 采集六维力/力矩、关节电流、电压、温度和低速运动跟踪指标,并生成报告 |
| `realman_trajectory_record` | 录制关节角/TCP 位姿到 CSV,只读不发送运动指令 |
| `realman_trajectory_replay` | 从 CSV 低速逐点回放关节角,默认 dry-run,显式 execute 才运动 |
| `realman_hw_test_connection` | 独立连接/基础信息硬件测试 |
| `realman_hw_test_joint_telemetry` | 独立关节遥测硬件测试 |
| `realman_hw_test_force_sensor` | 独立六维力/力矩传感器硬件测试 |
| `realman_hw_test_controller_state` | 独立控制器状态硬件测试 |
| `realman_hw_test_motion_tracking` | 独立低速运动跟踪硬件测试 |
| `realman_hw_test_force_retreat` | 手动外力方向退让测试,检测末端受力后小步后退 |
| `realman_hw_test_force_retreat_hold` | 持续外力方向退让保持模式,被推就小步退让,直到手动停止 |
## CMake Presets
`CMakePresets.json` 已配置:
```json
"REALMAN_RM_API2_ROOT": "/home/mashiro/RM_API2/C++"
```
命令行也可以直接构建:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-debug
cmake --build --preset realman-demo-debug
cmake --build --preset realman-slow-motion-debug
cmake --build --preset realman-joint-pose-config-debug
cmake --build --preset realman-metrics-test-debug
cmake --build --preset realman-trajectory-record-debug
cmake --build --preset realman-trajectory-replay-debug
cmake --build --preset realman-hw-tests-debug
cmake --build --preset realman-hw-force-retreat-debug
cmake --build --preset realman-hw-force-retreat-hold-debug
```
Release:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-release
cmake --build --preset realman-demo-release
cmake --build --preset realman-slow-motion-release
cmake --build --preset realman-joint-pose-config-release
cmake --build --preset realman-metrics-test-release
cmake --build --preset realman-trajectory-record-release
cmake --build --preset realman-trajectory-replay-release
cmake --build --preset realman-hw-tests-release
cmake --build --preset realman-hw-force-retreat-release
cmake --build --preset realman-hw-force-retreat-hold-release
```
## 最小连接验证
在 CLion 里运行:
```text
realman_minimal_demo
```
默认参数等价于:
```bash
./cmake-build-debug/realman_minimal_demo 192.168.1.18 8080 1000
```
成功时会打印机械臂型号、自由度、软件版本等信息。
当前环境已验证:
| 项目 | 结果 |
| --- | --- |
| 运行目标 | `realman_minimal_demo` |
| 动态库 | `/home/mashiro/RM_API2/C++/linux/linux_x86_c++_vv1.1.5/libapi_cpp.so` |
| API 版本 | `v1.1.5` |
| 控制器地址 | `192.168.1.18:8080` |
| 机械臂型号 | `RM75-6FB` |
| 自由度 | `7` |
| 运行结果 | 成功 |
## 低速运动验证
在 CLion 里运行:
```text
realman_slow_motion_demo
```
默认参数等价于:
```bash
./cmake-build-debug/realman_slow_motion_demo 192.168.1.18 8080 1000 2 5 10
```
含义:
| 参数 | 含义 |
| --- | --- |
| `192.168.1.18` | 机械臂控制器 IP |
| `8080` | SDK 控制端口 |
| `1000` | SDK 超时时间,单位 ms |
| `2` | 关节序号 J2 |
| `5` | 运动幅度 5° |
| `10` | 速度比例 10% |
## 源码参数调姿态
在 CLion 中运行:
```text
realman_joint_pose_config_demo
```
修改文件顶部的参数:
```text
examples/realman_joint_pose_config_demo.cpp
```
常用修改点:
| 参数 | 说明 |
| --- | --- |
| `kTargetMode` | `kRelativeJointOffset` 为相对当前姿态偏移,`kAbsoluteJointAngles` 为绝对关节角 |
| `kRelativeJointOffsetsDeg` | 相对偏移,单位度,例如 `{0, 5, 0, 0, 0, 0, 0}` 表示 `J2 +5°` |
| `kAbsoluteTargetJointsDeg` | 绝对目标关节角,单位度 |
| `kSpeedPercent` | 速度比例 |
| `kReturnToStartAfterMove` | 是否执行后回到起点 |
| `kDryRunOnly` | 只打印目标,不发送运动指令 |
详细说明见 [睿尔曼机械臂源码参数调姿态 Demo](REALMAN_JOINT_POSE_CONFIG_DEMO.md)。
## 力/力矩与关节指标测试
在 CLion 中运行:
```text
realman_metrics_test
```
运行后生成:
```text
reports/REALMAN_METRICS_TEST_RESULT.md
reports/realman_metrics_latest.csv
```
详细说明见 [睿尔曼机械臂力/力矩与关节指标测试 README](REALMAN_METRICS_TEST_README.md)。
## 轨迹录制与回放
在 CLion 中可以分别运行:
```text
realman_trajectory_record
realman_trajectory_replay
```
命令行示例:
```bash
./cmake-build-debug/realman_trajectory_record reports/realman_trajectories/demo.csv 15 100
./cmake-build-debug/realman_trajectory_replay reports/realman_trajectories/demo.csv dry-run
./cmake-build-debug/realman_trajectory_replay reports/realman_trajectories/demo.csv execute 5 5 5
```
详细说明见 [RM75 轨迹录制与回放](REALMAN_TRAJECTORY_RECORD_REPLAY.md)。
## 独立硬件模块测试
这套测试类似单元测试组织方式,但对象是真实机械臂硬件。每个模块都是独立进程,单独连接、单独断开、单独出报告。
只运行只读测试:
```bash
ctest --test-dir cmake-build-debug --output-on-failure --label-regex readonly
```
运行单个模块:
```bash
ctest --test-dir cmake-build-debug --output-on-failure -R realman_hw_test_force_sensor
```
运行全部硬件测试:
```bash
ctest --test-dir cmake-build-debug --output-on-failure --label-regex realman
```
手动运行外力方向退让测试:
```bash
ctest --test-dir cmake-build-debug --output-on-failure -R realman_hw_test_force_retreat
```
持续保持外力方向退让状态:
```bash
./cmake-build-debug/realman_hw_test_force_retreat_hold
```
详细说明见 [睿尔曼 RealMan 硬件模块测试](../tests/realman_hardware/README.md)。
## Web 示教器
控制器 Web 示教器入口:
```text
http://192.168.1.18/
```
8080 是 SDK 控制端口,不是 Web 页面入口。
## 更换 SDK 路径
如果后续 SDK 放到其他目录,在 CLion 的 CMake cache 或 `CMakePresets.json` 中修改:
```text
REALMAN_RM_API2_ROOT=/path/to/RM_API2/C++
```
目录应包含:
```text
include/rm_interface.h
linux/linux_x86_c++_*/libapi_cpp.so
```
## 常见问题
| 现象 | 处理 |
| --- | --- |
| CLion 看不到 RealMan target | `Reload CMake Project` |
| 找不到 `rm_interface.h` | 检查 `REALMAN_RM_API2_ROOT` 是否指向 `RM_API2/C++` |
| 运行时报 `libapi_cpp.so` 找不到 | 使用本项目 target 构建,CMake 已设置 rpath |
| 修改源码后 CLion 仍运行旧动作 | 重新 Build `realman_joint_pose_config_demo`,不要运行旧的 `realman_slow_motion_demo` |
| 指标测试后找不到报告 | 查看项目根目录下 `reports/REALMAN_METRICS_TEST_RESULT.md` |
| 连接失败 | 检查 `192.168.1.18:8080`、网线、网段和控制器电源 |
| Web 示教器打不开 | 浏览器访问 `http://192.168.1.18/`,并绕过代理 |
# 睿尔曼机械臂源码参数调姿态 Demo
本文档说明如何使用 `realman_joint_pose_config_demo` 在 CLion 中通过修改 C++ 源码顶部参数来调整机械臂姿态。
## 文件位置
| 文件 | 说明 |
| --- | --- |
| `examples/realman_joint_pose_config_demo.cpp` | 源码参数调姿态示例 |
| `CMakeLists.txt` | 已注册 `realman_joint_pose_config_demo` target |
| `CMakePresets.json` | 已注册 Debug/Release 构建 preset |
## CLion 运行
1. 用 CLion 打开项目:
```bash
/home/mashiro/project/linkerhand-cpp-sdk
```
2. 点击 `Reload CMake Project`
3. 打开文件:
```text
examples/realman_joint_pose_config_demo.cpp
```
4. 修改源码顶部的“用户主要修改区”。
5. 运行 target:
```text
realman_joint_pose_config_demo
```
## 主要参数
默认推荐使用相对关节偏移模式:
```cpp
constexpr TargetMode kTargetMode = TargetMode::kRelativeJointOffset;
constexpr std::array<float, ARM_DOF> kRelativeJointOffsetsDeg = {
0.0F, 5.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
};
```
这表示在当前姿态基础上让 `J2 +5°`,其他关节不动。
如果要改成其他姿态,例如 `J2 +3°`、`J4 -2°`:
```cpp
constexpr std::array<float, ARM_DOF> kRelativeJointOffsetsDeg = {
0.0F, 3.0F, 0.0F, -2.0F, 0.0F, 0.0F, 0.0F,
};
```
速度参数:
```cpp
constexpr int kSpeedPercent = 10;
```
安全限幅:
```cpp
constexpr float kMaxSingleJointDeltaDeg = 10.0F;
constexpr int kMaxAllowedSpeedPercent = 20;
```
程序会拒绝超过限幅的动作,避免误把机械臂一次移动太大。
## 绝对关节角模式
需要直接给目标关节角时,改为:
```cpp
constexpr TargetMode kTargetMode = TargetMode::kAbsoluteJointAngles;
constexpr std::array<float, ARM_DOF> kAbsoluteTargetJointsDeg = {
0.0F, 5.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
};
```
首次使用绝对模式前,建议先运行一次程序,看输出的 `Current joints`,把当前角度复制到 `kAbsoluteTargetJointsDeg`,然后只小幅修改其中一个或两个关节。
## 是否回到起点
默认移动到目标姿态后停在目标位置:
```cpp
constexpr bool kReturnToStartAfterMove = false;
```
如果只是测试动作,希望执行后回到起始姿态:
```cpp
constexpr bool kReturnToStartAfterMove = true;
```
## 只预览不运动
如果只想检查目标角度,不发送运动指令:
```cpp
constexpr bool kDryRunOnly = true;
```
程序会打印当前关节角和目标关节角,但不会调用 `rm_movej`。
## 命令行构建
Debug:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-debug
cmake --build --preset realman-joint-pose-config-debug
```
Release:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-release
cmake --build --preset realman-joint-pose-config-release
```
## 安全建议
- 优先使用 `kRelativeJointOffset`
- 首次调姿态时,每个关节变化控制在 `1°..5°`
- 速度先保持 `5..10`
- 每次只改一个或两个关节,确认方向和空间余量后再组合动作。
- 运行前确认工作空间无人,急停按钮可触达。
# 睿尔曼机械臂力/力矩与关节指标测试 README
本文档说明如何使用 `realman_metrics_test` 对当前睿尔曼机械臂做保守指标测试,并生成 CSV 原始数据和 Markdown 报告。
## 测试对象
| 项目 | 当前值 |
| --- | --- |
| 控制器地址 | `192.168.1.18:8080` |
| SDK | `/home/mashiro/RM_API2/C++` |
| 动态库 | `/home/mashiro/RM_API2/C++/linux/linux_x86_c++_vv1.1.5/libapi_cpp.so` |
| CLion target | `realman_metrics_test` |
## 已测试指标
| 类别 | 指标 | 数据来源 |
| --- | --- | --- |
| 末端六维力/力矩 | `Fx/Fy/Fz/Mx/My/Mz` 原始值与清零后系统外受力 | `rm_get_force_data` |
| 关节负载代理量 | 关节电流均值、标准差、峰值、峰峰值 | `rm_get_current_joint_current` |
| 关节状态 | 关节角度、电压、温度 | `rm_get_current_arm_state``rm_get_current_joint_voltage``rm_get_current_joint_temperature` |
| 控制器状态 | 控制器电压、电流、温度、错误码 | `rm_get_controller_state` |
| 低速运动指标 | J2 `+3° -> 原位 -> -3° -> 原位` 的耗时与到位误差 | `rm_movej` + 到位后状态读取 |
## 未自动测试的指标
以下项目需要额外治具或外部传感器,本程序不会自动执行:
| 指标 | 原因 |
| --- | --- |
| 接触式力位混合控制闭环精度 | 需要固定接触面、接触方向限位和外部测力基准 |
| 外部负载下输出力矩精度 | 需要力矩传感器、已知力臂或标定负载 |
| 碰撞阈值/柔顺控制边界 | 涉及真实接触风险,需要急停监护和保护工装 |
| 裸关节力矩指令跟踪 | 当前 RM_API2 C++ 头文件未暴露直接关节力矩命令接口 |
因此本文中的“关节侧力矩相关表现”以关节电流变化作为负载代理量;末端力矩使用六维力传感器的 `Mx/My/Mz`
## 安全策略
程序默认只做低风险动作:
```text
静态采样 -> 5 秒安全倒计时 -> J2 +3° -> 原位 -> J2 -3° -> 原位 -> 静态采样
```
内置限制:
| 参数 | 默认值 | 限制 |
| --- | ---: | --- |
| `kMotionDeltaDeg` | `3.0` | 不超过 `5°` |
| `kMotionSpeedPercent` | `5` | 不超过 `10%` |
| `kSamplePeriodMs` | `50` | 不低于 `20ms` |
如需只采样、不运动,在源码中改:
```cpp
constexpr bool kRunMotionTrackingTest = false;
```
如需只预览动作、不发送 `rm_movej`
```cpp
constexpr bool kDryRunOnly = true;
```
## CLion 使用
1. 打开项目:
```bash
/home/mashiro/project/linkerhand-cpp-sdk
```
2. 点击 `Reload CMake Project`
3. 选择运行目标:
```text
realman_metrics_test
```
4. 运行结束后查看:
```text
reports/REALMAN_METRICS_TEST_RESULT.md
reports/realman_metrics_latest.csv
```
## 命令行构建与运行
Debug:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-debug
cmake --build --preset realman-metrics-test-debug
./cmake-build-debug/realman_metrics_test
```
Release:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-release
cmake --build --preset realman-metrics-test-release
./cmake-build-clion-release/realman_metrics_test
```
## 本次实测结果
已生成最新报告:
```text
reports/REALMAN_METRICS_TEST_RESULT.md
```
本次结果摘要:
| 指标 | 结果 |
| --- | --- |
| 总样本数 | `205` |
| 六维力接口失败次数 | `0` |
| 关节电流接口失败次数 | `0` |
| 控制器状态接口失败次数 | `0` |
| J2 `+3°` 到位最大误差 | `0.004°` |
| J2 返回原位最大误差 | `0.004°` |
| J2 `-3°` 到位最大误差 | `0.003°` |
| 最终返回原位最大误差 | `0.007°` |
| 控制器电压均值 | `23.3421 V` |
| 控制器温度均值 | `45.8516 C` |
详细统计以 `reports/REALMAN_METRICS_TEST_RESULT.md` 和 CSV 原始数据为准。
## 后续扩展建议
如果要进一步测试真实力控能力,建议增加以下前置条件后再启用 `rm_set_force_position``rm_force_position_move_*`
- 固定机械臂底座和接触工件。
- 明确接触方向,设置机械限位或软限位。
- 使用外部六维力传感器、力矩传感器或标定砝码做基准。
- 每次只测试一个轴向,目标力从 `1N..3N` 小值开始。
- 测试期间保持急停按钮可触达。
# 睿尔曼机械臂最小 Demo
本文档说明如何在本项目中构建并运行睿尔曼 RealMan RM_API2 最小 C++ Demo。
该 Demo 目标是验证 SDK、动态库、网络连接和控制器通信是否可用。程序只执行以下动作:
1. 初始化 RM_API2。
2. 连接机械臂控制器。
3. 打印 API 版本。
4. 读取机械臂软件版本信息。
5. 读取机械臂基础信息。
6. 断开连接并销毁 SDK 线程。
Demo 不会发送任何运动指令,适合作为首次联调入口。
## 文件位置
| 文件 | 说明 |
| --- | --- |
| `examples/realman_minimal_demo.cpp` | 最小机械臂连接与信息读取示例 |
| `/home/mashiro/RM_API2/C++/include` | 首选睿尔曼 RM_API2 C++ 头文件 |
| `/home/mashiro/RM_API2/C++/linux/linux_x86_c++_vv1.1.5/libapi_cpp.so` | 首选睿尔曼 RM_API2 Linux x86_64 动态库 |
| `third_party/Robotic_Arm` | fallback SDK 路径 |
| `CMakePresets.json` | CLion/命令行可直接使用的 CMake presets |
## 环境要求
- Ubuntu/Linux x86_64。
- GCC/G++ 7.5 或更高版本。
- CMake 3.15 或更高版本。
- 机械臂控制器与电脑在同一网络内。
- 默认控制器地址为 `192.168.1.18:8080`,可通过参数覆盖。
## CLion 使用方式
1. 打开 CLion。
2. 选择 `Open`,打开项目目录:
```bash
/home/mashiro/project/linkerhand-cpp-sdk
```
3. CLion 识别 `CMakePresets.json` 后,选择 `CLion Debug``CLion Release`
4. 在 Run/Debug Configuration 中选择目标 `realman_minimal_demo`
5. 如果机械臂 IP 不是默认值,在 Program arguments 中填写:
```text
192.168.1.18 8080
```
第三个参数可设置 SDK 超时时间,单位 ms:
```text
192.168.1.18 8080 1500
```
6. 点击 Build 或 Run。
## 命令行构建
Debug 构建:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-debug
cmake --build --preset realman-demo-debug
```
Release 构建:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-release
cmake --build --preset realman-demo-release
```
## 运行方式
使用默认地址 `192.168.1.18:8080`:
```bash
./cmake-build-debug/realman_minimal_demo
```
指定 IP 和端口:
```bash
./cmake-build-debug/realman_minimal_demo 192.168.1.18 8080
```
指定 IP、端口和超时时间:
```bash
./cmake-build-debug/realman_minimal_demo 192.168.1.18 8080 1500
```
查看帮助:
```bash
./cmake-build-debug/realman_minimal_demo --help
```
## 预期输出
连接成功时会看到类似输出:
```text
RealMan API version: ...
Connecting to 192.168.1.18:8080 with timeout 1000 ms...
Robot handle created, id: 1
================ RealMan Arm Software Info ================
Product Version: ...
Algorithm Version: ...
Control Layer Version: ...
===========================================================
================ RealMan Arm Basic Info ====================
Arm DOF: 6
Arm Model: RM_65 (0)
Force Type: Standard (0)
Controller Version: 4
===========================================================
RealMan minimal demo finished successfully.
```
如果未连接真实机械臂,程序会在连接阶段失败并提示检查 IP、端口、网络和电源状态。这说明本地程序已能启动,剩余问题在设备连接侧。
## 网络检查
运行前建议先检查网络连通性:
```bash
ping 192.168.1.18
nc -vz 192.168.1.18 8080
```
如果 `nc` 未安装:
```bash
sudo apt update
sudo apt install netcat-openbsd
```
## 常见问题
| 现象 | 可能原因 | 处理方式 |
| --- | --- | --- |
| `Failed to connect to RealMan arm` | IP/端口不对、控制器未上电、电脑不在同一网段 | 检查控制器地址、网线、网卡 IP、防火墙 |
| 找不到 `libapi_cpp.so` | 运行时动态库路径未生效 | 使用本文的 CMake target 构建;目标已设置 rpath |
| CLion 没看到 `realman_minimal_demo` | CMake 未重新加载 | 点击 Reload CMake Project |
| 构建时找不到 `rm_interface.h` | SDK 路径不对 | 确认 `REALMAN_RM_API2_ROOT` 指向 `/home/mashiro/RM_API2/C++`,或 fallback `third_party/Robotic_Arm/include/rm_interface.h` 存在 |
## 后续开发建议
- 先确认本 Demo 能稳定读取机械臂信息,再加入运动控制。
- 新增运动控制前,优先做小速度、非危险空间、急停可触达的测试。
- 把所有运动参数做成配置,不要把生产动作硬编码在 demo 中。
# 睿尔曼机械臂低速运动 Demo 操作手册
本文档说明如何使用 `realman_slow_motion_demo` 让睿尔曼机械臂做一次小幅、低速、可观察的关节空间往返运动。
该 Demo 的默认动作是:
```text
读取当前关节角 -> J2 +5 deg -> 回到起始角 -> J2 -5 deg -> 回到起始角
```
默认速度比例为 `10%`。程序使用 `rm_movej` 阻塞运动,不执行笛卡尔空间轨迹、不做轨迹融合、不连续抖动。
## 文件位置
| 文件 | 说明 |
| --- | --- |
| `examples/realman_slow_motion_demo.cpp` | 低速小幅运动 Demo |
| `CMakeLists.txt` | 已注册 `realman_slow_motion_demo` target |
| `CMakePresets.json` | 已注册 Debug/Release 构建 preset |
| `/home/mashiro/RM_API2/C++` | 首选睿尔曼 RM_API2 C++ SDK |
| `third_party/Robotic_Arm` | fallback SDK 路径 |
## 安全前置检查
运行前必须确认:
1. 机械臂工作空间内无人、无松散物体。
2. 急停按钮可触达。
3. 机械臂末端、线缆、夹具不会与桌面、支架、相机、电脑等发生碰撞。
4. 控制器 IP 和端口正确,默认是 `192.168.1.18:8080`
5. 首次运行保持默认参数,不要直接增大角度或速度。
程序内置 5 秒倒计时,倒计时期间可以用 `Ctrl+C` 取消。
## CLion 运行
1. 用 CLion 打开项目:
```bash
/home/mashiro/project/linkerhand-cpp-sdk
```
2. 选择 CMake preset:
- `CLion Debug`
- 或 `CLion Release`
3. 选择运行目标:
```text
realman_slow_motion_demo
```
4. 默认无需填写 Program arguments。若要显式指定参数:
```text
192.168.1.18 8080 1000 2 5 10
```
## 命令行构建
Debug:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-debug
cmake --build --preset realman-slow-motion-debug
```
Release:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-release
cmake --build --preset realman-slow-motion-release
```
## 命令行运行
使用默认参数:
```bash
./cmake-build-debug/realman_slow_motion_demo
```
完整参数格式:
```bash
./cmake-build-debug/realman_slow_motion_demo [robot_ip] [port] [timeout_ms] [joint] [delta_deg] [speed_percent]
```
示例:
```bash
./cmake-build-debug/realman_slow_motion_demo 192.168.1.18 8080 1000 2 5 10
```
更保守的动作:
```bash
./cmake-build-debug/realman_slow_motion_demo 192.168.1.18 8080 1000 2 3 5
```
## 参数说明
| 参数 | 默认值 | 范围 | 说明 |
| --- | --- | --- | --- |
| `robot_ip` | `192.168.1.18` | 有效 IP | 机械臂控制器 IP |
| `port` | `8080` | `1..65535` | 控制器端口 |
| `timeout_ms` | `1000` | `>0` | SDK 接收超时时间 |
| `joint` | `7` | `1..当前自由度` | 1-based 关节序号 |
| `delta_deg` | `2` | `(0, 5]` | 往返运动角度,单位度 |
| `speed_percent` | `5` | `1..20` | 速度比例。此 Demo 限制在低速范围 |
## 程序流程
1. 初始化 RM_API2,设置日志和超时时间。
2. 连接机械臂。
3. 读取机械臂自由度和当前关节角。
4. 打印起始关节角。
5. 5 秒安全倒计时。
6. 执行 `+delta`、回原位、`-delta`、回原位。
7. 读取并打印最终关节角。
8. 断开连接并销毁 SDK 线程。
任一步 `rm_movej` 失败时,程序会调用 `rm_set_arm_stop`,随后断开连接。
## 预期输出
```text
RealMan API version: 1.1.0
Connecting to 192.168.1.18:8080...
Connected. Arm DOF: 7, selected joint: J2, delta: 5 deg, speed: 10%
Current joints: [J1=..., J2=..., ...]
Safety countdown before motion. Clear the workspace and keep E-stop reachable.
Moving in 5...
...
Step 1 target (+delta): [...]
Step 2 return home: [...]
Step 3 target (-delta): [...]
Step 4 return home: [...]
Final joints: [...]
Slow motion demo finished successfully.
```
## 本机实测记录
已在当前连接的睿尔曼机械臂上执行成功:
```bash
./cmake-build-debug/realman_slow_motion_demo 192.168.1.18 8080 1000 2 5 10
```
实测信息:
| 项目 | 结果 |
| --- | --- |
| 控制器地址 | `192.168.1.18:8080` |
| API 版本 | `1.1.0` |
| 机械臂自由度 | `7` |
| 运动关节 | `J2` |
| 运动幅度 | `+5° -> 原位 -> -5° -> 原位` |
| 速度比例 | `10%` |
| 执行结果 | 成功 |
实测起始关节角:
```text
[J1=0.001, J2=0.002, J3=0.004, J4=0.000, J5=-0.001, J6=0.005, J7=-0.001] deg
```
实测结束关节角:
```text
[J1=0.001, J2=-0.001, J3=0.005, J4=0.000, J5=0.000, J6=0.001, J7=-0.001] deg
```
## 问题定位记录
如果程序返回成功但肉眼看不到动作,优先检查以下点:
1. 旧默认动作是 `J7 ±2°`。J7 是末端腕部旋转,小角度时没有工具或末端标记会很不明显。
2. 当前控制器已确认不是仿真模式:`run_mode=1`
3. 当前 7 个关节均已使能,错误码均为 `0`,抱闸均为打开状态。
4. 已用 `J2 +5° -> 回原位` 实测验证,编码器读数从 `J2=0.002°``J2=5.001°`,再回到 `J2=-0.001°`
因此默认动作已改为更容易观察的 `J2 ±5°`、速度 `10%`,并在每一步后读取实际关节角。
## 故障处理
| 现象 | 处理 |
| --- | --- |
| 连接失败 | 检查控制器 IP、端口、网线、电脑网段、电源状态 |
| 目标运行失败 | 降低 `delta_deg`,例如 `1`;降低速度,例如 `3` |
| CLion 看不到 target | 点击 `Reload CMake Project` |
| 动态库加载失败 | 使用本项目 CMake target 构建运行,target 已设置 rpath |
## 后续扩展
确认本 Demo 稳定后,再考虑新增更复杂动作。建议保持以下策略:
- 先读当前关节角,再基于当前位置做相对小幅运动。
- 优先关节空间 `movej`,避免一开始使用笛卡尔空间大轨迹。
- 运动参数配置化,不把生产动作硬编码进示例。
- 每次新增动作后先以 `delta_deg <= 2``speed_percent <= 5` 验证。
# 睿尔曼 RM75 测试项目架构说明
本文说明当前 RealMan/RM75-6F 测试代码的分层、模块职责和设计取舍。
## 总体结构
```text
linkerhand-cpp-sdk/
├── CMakeLists.txt
├── CMakePresets.json
├── examples/
│ ├── realman_minimal_demo.cpp
│ ├── realman_slow_motion_demo.cpp
│ ├── realman_joint_pose_config_demo.cpp
│ └── realman_metrics_test.cpp
├── tests/
│ ├── realman_hardware/
│ │ ├── realman_hw_test_common.hpp
│ │ ├── test_realman_connection.cpp
│ │ ├── test_realman_joint_telemetry.cpp
│ │ ├── test_realman_force_sensor.cpp
│ │ ├── test_realman_controller_state.cpp
│ │ ├── test_realman_motion_tracking.cpp
│ │ ├── test_realman_force_retreat.cpp
│ │ └── test_realman_force_retreat_hold.cpp
│ └── rm75_acceptance/
│ ├── test_rm75_acceptance_preflight.cpp
│ ├── test_rm75_acceptance_communication.cpp
│ └── README.md
├── docs/
│ ├── REALMAN_CLION_SETUP.md
│ ├── REALMAN_METRICS_TEST_README.md
│ └── REALMAN_TEST_ARCHITECTURE.md
└── reports/
└── realman_hardware_tests/
```
## 分层职责
| 层级 | 目录/文件 | 职责 |
| --- | --- | --- |
| 构建层 | `CMakeLists.txt`, `CMakePresets.json` | 发现 RM_API2 SDK,导入 `libapi_cpp.so`,暴露 CLion target 和 CTest target |
| Demo 层 | `examples/` | 给使用者提供最小连接、慢速运动、源码调参、综合指标测试 |
| 测试基础设施 | `tests/realman_hardware/realman_hw_test_common.hpp` | 统一连接参数、SDK 生命周期、断言输出、Markdown 报告路径 |
| 独立硬件模块测试 | `tests/realman_hardware/test_*.cpp` | 每个模块独立 `main()`,分别测试连接、关节、控制器、力传感器、运动、力退让 |
| 文档验收层 | `tests/rm75_acceptance/` | 按 RM75-6F 测试文档组织验收项,自动执行只读项目,手动项目写入 README |
| 报告层 | `reports/realman_hardware_tests/` | 每个测试生成 latest 和带时间戳的 Markdown/CSV 报告 |
## 为什么每个测试都是独立可执行文件
机械臂不是普通纯软件模块,它有真实状态、网络连接、运动风险和 SDK 全局初始化状态。把每个测试做成独立 `main()` 有几个好处:
- 单个模块失败不会污染后续模块。
- 每个模块都独立执行 `rm_init``rm_create_robot_arm``rm_delete_robot_arm``rm_destroy/rm_destory`
- 在 CLion 里可以像单元测试一样单独运行某个 target。
- CTest 可以通过 `RESOURCE_LOCK realman_robot` 防止多个测试并发抢同一台机械臂。
- 报告天然按模块拆分,便于定位是通信、关节、力传感器还是运动问题。
## 为什么区分只读测试和运动/手动测试
RM75-6F 测试文档要求不能绕过安全确认。项目里把测试分成三类:
| 类型 | 示例 target | 默认是否可自动运行 | 原因 |
| --- | --- | --- | --- |
| 只读测试 | `rm75_acceptance_preflight`, `realman_hw_test_force_sensor` | 是 | 只调用 `rm_get_*`,不会移动机械臂或修改控制器参数 |
| 低速运动测试 | `realman_hw_test_motion_tracking`, `realman_slow_motion_demo` | 否,需要用户明确要求 | 会发送运动指令,必须确认工作空间和急停 |
| 手动/外部设备测试 | 载荷、急停、重复定位、真实接触力控 | 否 | 需要人现场观察、治具、载荷、测量设备或监护 |
这样做的核心原因是:自动化测试应该提高效率,但不能替代物理安全确认。
## 为什么 `rm75_acceptance` 不直接复用所有硬件测试
`realman_hardware` 是“模块测试”,关注某一个硬件能力是否正常。
`rm75_acceptance` 是“验收流程”,关注测试文档里的阶段和数据字段是否被覆盖。
两者不是重复关系:
- `realman_hardware` 适合调试单个故障点。
- `rm75_acceptance` 适合给验收人员一个按文档组织的入口和报告。
- 验收层会复用公共基础设施,但不把所有模块串成强耦合流程。
## 为什么报告同时有 Markdown 和 CSV
Markdown 用于人读:
- 每个断言 PASS/FAIL。
- 每个模块的关键状态摘要。
- 适合直接发给测试人员或写入验收记录。
CSV 用于机器分析:
- `rm75_acceptance_communication` 按测试文档保留固定字段。
- 后续可以导入 Excel、Python、数据库或绘图工具。
- `latest.csv` 方便固定路径读取,带时间戳 CSV 方便追溯历史。
## 为什么 `err_len=1,codes=[0]` 不判失败
实测 RM75 控制器在 `rm_get_current_arm_state``rm_get_arm_all_state` 中可能返回:
```text
err_len=1, codes=[0]
```
这表示错误列表里只有一个零码占位,不是实际故障。代码里统一使用 `errListClear()`,只要错误码数组没有非零值,就视为无故障。这样可以避免把 SDK 的占位返回误判为验收失败。
## 为什么力退让持续模式使用绝对目标位姿
早期使用 `rm_movel_offset` 做连续退让时,当前控制器曾出现 `error=-7`。现在的持续模式流程是:
```text
读取当前 TCP 位姿
读取工作坐标系外力
根据外力方向和大小计算小步退让
生成 current_pose + delta 的绝对目标位姿
调用 rm_movel(target_pose, ...)
```
这样写的原因:
- 方向计算和数据来源都在工作坐标系语义下,减少坐标混用。
- 绝对目标位姿比连续 offset 在当前固件上更稳定。
- 每一步都能重新读取当前状态,便于遇到错误立即停止。
- 单步距离、速度和累计距离都有上限,方便人工测试。
## 为什么参数写在源码常量里
`realman_hw_test_force_retreat_hold.cpp` 里的阈值、速度、步长是 `constexpr` 常量。这样对初学者更直观:
- 打开一个文件就能看到所有关键参数。
- CLion 修改后重新编译即可验证。
- 避免命令行参数传错导致危险动作。
- 参数自检 `validateConfig()` 会在运动前拦截明显危险配置。
后续如果要做大量实验,可以再把这些常量抽成配置文件;当前阶段优先保证简单、可读、可控。
## 推荐开发流程
1. 修改代码前先确认目标模块。
2. 只读逻辑优先跑:
```bash
cmake --build --preset rm75-acceptance-readonly-debug
ctest --test-dir cmake-build-debug --output-on-failure --label-regex rm75
```
3. 修改运动逻辑时先构建,不自动运行:
```bash
cmake --build --preset realman-hw-force-retreat-hold-debug
```
4. 运行任何运动测试前,确认工作空间、急停、载荷和人工监护。
# RM75 Drag Teach Trajectory Workflow
本文档说明正式的 RM75 末端拖动示教、同步 CSV 记录、C++ TCP 路径转换和 skill 封装边界。
`examples/realman_trajectory_record.cpp``examples/realman_trajectory_replay.cpp` 是早期最小验证入口。后续维护优先看 `RM/` 子工程。
## 目标
- C++ 底层模块:在 `RM/include/rm_control``RM/src` 中维护,可编译、可测试。
- Codex skill:在 `skills/rm75-drag-trajectory``~/.codex/skills/rm75-drag-trajectory` 中维护,负责指导以后如何安全操作。
- 数据目录:用文件夹管理轨迹产物,避免 CSV、厂商文件、转换代码混在一起。
## 维护边界
| 层 | 路径 | 维护内容 |
| --- | --- | --- |
| HAL/interface | `RM/include/rm_control/interfaces/robot_arm.h` | 抽象机械臂能力,不包含 RM SDK 头文件 |
| Driver | `RM/include/rm_control/drivers/realman`, `RM/src/drivers/realman` | `rm_start_multi_drag_teach``rm_stop_drag_teach``rm_save_trajectory` 等 RM SDK 调用 |
| Core | `RM/include/rm_control/core/drag_teach_recorder.h`, `RM/src/core/drag_teach_recorder.cpp` | 拖动示教记录流程、采样、停止、保存 |
| Module | `RM/include/rm_control/modules/trajectory`, `RM/src/modules/trajectory` | CSV 读写、目录管理、C++ TCP 路径导出 |
| Application | `RM/src/drag_teach_record_main.cpp`, `RM/src/trajectory_convert_main.cpp` | 参数解析、驱动装配、启动流程 |
| Skill | `skills/rm75-drag-trajectory` | 给 Codex 的操作步骤和安全约束 |
## 数据目录
默认根目录:
```text
RM/data/trajectories/
├── csv/ # 我们同步采样的主数据源
├── vendor/ # rm_save_trajectory 尽力保存的厂商轨迹文件
├── converted/ # CSV 转成的 C++ TCP waypoint 文件
└── reports/ # 后续扩展:记录摘要、误差报告、回放日志
```
## CSV 格式
```text
sample_index,elapsed_ms,j1_deg,j2_deg,j3_deg,j4_deg,j5_deg,j6_deg,j7_deg,tcp_x_m,tcp_y_m,tcp_z_m,tcp_rx_rad,tcp_ry_rad,tcp_rz_rad
```
当前主目标是 TCP 空间路径复现,因此转换阶段会把 `tcp_*` 字段导出为 C++ waypoint 表。`j1_deg..j7_deg` 仍保留,用于复现原始姿态、做逆解种子或误差对比。
## 构建
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake -S RM -B RM/build -DCMAKE_BUILD_TYPE=Debug
cmake --build RM/build -j
ctest --test-dir RM/build --output-on-failure
```
## 六维力拖动示教录制
```bash
./RM/build/rm_drag_teach_record
```
默认行为:
- 连接 `192.168.1.18:8080`
- 使用 RM75 三代控制器复合拖动示教:`mode=3`,即六维力位置和姿态同时可拖动
- 默认开启拖动奇异墙
- 录制 `15`
- 采样周期 `100 ms`
- 主产物写到 `RM/data/trajectories/csv/<session>.csv`
- 停止拖动后尝试把厂商轨迹保存到 `RM/data/trajectories/vendor/<session>_vendor.txt`
自定义 session、时长和采样周期:
```bash
./RM/build/rm_drag_teach_record \
demo_pick_path \
15 \
100
```
完整参数:
```text
rm_drag_teach_record [session_name] [duration_seconds] [sample_period_ms] [storage_root] [--no-vendor-save] [--ordinary-recorded] [--no-singular-wall]
```
## CSV 转 C++ TCP 路径
离线转换,不连接机械臂:
```bash
./RM/build/rm_trajectory_convert \
RM/data/trajectories/csv/demo_pick_path.csv
```
默认输出:
```text
RM/data/trajectories/converted/demo_pick_path_tcp_path.cpp
```
完整参数:
```text
rm_trajectory_convert <input_csv> [output_cpp]
```
## 安全边界
- `rm_drag_teach_record` 会启动拖动示教,必须清空工作空间,急停可触达。
- 当前实现不自动执行 TCP 回放;转换出来的 C++ 文件只是 waypoint 数据。
- 六维力复合拖动接口没有暴露 `trajectory_record` 开关,CSV 是主数据源;厂商轨迹保存失败只作为警告处理。
- 后续做 TCP 复现时,应先用 CSV 里的关节角作为逆解参考,再做低速、小步、dry-run 校验。
# RM75 + O6 目标软件架构与最小可行重构计划
本文承接工程理解阶段的结论,说明适合睿尔曼 RM75 机械臂与灵心巧手 O6 的目标软件架构、当前工程差距,以及最小可行重构计划。
当前阶段只定义架构和重构边界,不修改业务代码,不引入未确认的厂商 API 签名。
## 1. 目标软件架构
目标不是推翻现有工程,而是把已有 `RM/` 子工程中的机械臂接口化思路,扩展成“机械臂 + O6 手”的统一控制栈。
建议目录形态:
```text
applications/
move_arm_then_grasp_task.cpp
core/
coordinated_arm_hand_controller.h
coordinated_arm_hand_controller.cpp
motion_safety_guard.h
motion_safety_guard.cpp
modules/
arm_motion_service.h
arm_motion_service.cpp
o6_grasp_service.h
o6_grasp_service.cpp
arm_hand_task_planner.h
arm_hand_task_planner.cpp
interfaces/
robot_arm.h
dexterous_hand.h
tool_modbus_bus.h
drivers/
realman/realman_robot_arm.h
realman/realman_robot_arm.cpp
realman/realman_tool_modbus_bus.h
realman/realman_tool_modbus_bus.cpp
linkerhand/o6_modbus_hand.h
linkerhand/o6_modbus_hand.cpp
linkerhand/o6_sdk_hand.h
linkerhand/o6_sdk_hand.cpp
common/
result.h
robot_types.h
hand_types.h
```
依赖方向固定为:
```text
main/applications -> core -> modules -> interfaces <- drivers
```
### 1.1 应用层
应用层只表达任务顺序,例如:
- `runMoveArmThenGraspTask()`
- `runArmSwingWithO6GraspTask()`
应用层禁止直接包含或调用:
- `rm_interface.h`
- `LinkerHandApi.h`
- 串口 API
- TCP Socket
- Modbus 寄存器读写
- RM_API2 原生函数
### 1.2 Core 层
Core 层负责流程编排、生命周期和安全入口。
建议核心类:
- `CoordinatedArmHandController`
- `MotionSafetyGuard`
职责:
- 组合机械臂动作和 O6 动作;
- 在运动前做速度、幅度、步长限制;
- 遇到失败时简单记录错误并停止当前流程;
- 不直接依赖 RM SDK 或 LinkerHand SDK。
### 1.3 Modules 层
Modules 层负责可测试的业务语义。
建议模块:
- `ArmMotionService`
- `moveArmToJointTarget()`
- `moveArmBySmallJointDelta()`
- `returnArmToRecordedStartPose()`
- `O6GraspService`
- `openO6HandToSafePose()`
- `moveO6HandToPreGraspPose()`
- `closeO6HandForPinchGrasp()`
- `holdO6HandForObjectTransfer()`
- `ArmHandTaskPlanner`
- 生成最小抓取任务的步骤列表;
- 不访问任何真实硬件。
### 1.4 Interfaces 层
接口层定义抽象能力,不写硬件实现。
已有机械臂接口可以继续沿用:
- `IRobotArm`
建议新增:
- `IDexterousHand`
- `IToolModbusBus`
示意职责:
```text
IDexterousHand
connect()
disconnect()
readIdentity()
moveToJointPose()
openToSafePose()
IToolModbusBus
configureToolPowerAndModbus()
readInputRegisters()
writeRegisters()
writeSingleRegister()
```
### 1.5 Drivers 层
Drivers 层承接真实 SDK、通信协议和寄存器细节。
建议实现:
- `RealManRobotArm`
- 继续包装 `rm_init``rm_create_robot_arm``rm_movej``rm_movel` 等 RM_API2 调用。
- `RealManToolModbusBus`
- 包装 RM75 工具端电源和工具端 Modbus。
- 包含 `rm_set_tool_voltage(handle, 3)`
- 包含 `rm_set_modbus_mode(handle, 1, 115200, 10)`
- 包含 `rm_read_multiple_input_registers``rm_write_registers``rm_write_single_register`
- `O6ModbusHand`
- 通过 `IToolModbusBus` 操作 O6。
- 管理 O6 右手 ID `0x27`
- 管理身份寄存器 `30..35`
- 管理 6 维关节姿态寄存器。
- `O6SdkHand`
- 可选保留,用于 PC USB/CAN 直连基线。
- 直接包装 `LinkerHandApi`
## 2. 当前工程与目标架构的差距
### 2.1 已经符合目标架构的部分
`RM/` 子工程已经有比较清晰的机械臂分层:
- `IRobotArm` 已把机械臂能力抽象出来;
- `RealManRobotArm` 已把 RM_API2 细节压在 driver 层;
- `JsonCommandRunner` 已经只依赖 `IRobotArm`,并负责运动安全校验;
- `Result<T>``Pose``ArmState``ForceData` 已经具备公共类型雏形。
这些内容应复用,而不是重写。
### 2.2 主要差距
1. O6 还没有接口层。
当前根目录 `src/main.cpp` 直接构造 `LinkerHandApi` 并执行抓取流程。它把应用逻辑、O6 姿态、力传感读取和硬件 API 混在入口文件里。
2. RM75 工具端 Modbus 还没有 driver 层。
当前 `tools/realman_tool_modbus_o6_*` 里直接调用 RM_API2 的工具端电源、Modbus 模式和寄存器读写函数。这些逻辑应该进入 `RealManToolModbusBus`
3. 机械臂和手部协调逻辑还在临时工具程序里。
`tools/realman_tool_modbus_o6_grasp_with_arm_swing.cpp` 同时包含:
- 参数解析;
- RM SDK 初始化;
- 工具端 RS485 配置;
- O6 寄存器写入;
- J2/J3 摆动目标生成;
- 机械臂运动等待;
- 手部抓取动作序列。
这些职责需要拆到 application、core、modules、drivers。
4. CMake 形态尚未统一。
根目录 CMake 同时管理 LinkerHand 示例、RealMan 示例、硬件测试;`RM/` 又有较干净的独立子工程。后续应选择一个稳定边界,避免正式控制栈和临时 demo 混在一起。
5. 手部公共类型缺失。
目前只有机械臂公共类型,没有 `O6JointPose``O6HandIdentity``O6HandConfig``DexterousHandState` 等手部语义类型。
## 3. 最小可行重构计划
### Phase 1: 先建立接口和类型边界
目标:不搬业务代码,只建立未来代码该放的位置。
新增:
- `IDexterousHand`
- `IToolModbusBus`
- `O6JointPose`
- `O6HandConfig`
- `O6HandIdentity`
约束:
- 不引入未确认的新厂商 API。
- 不自动运行真实硬件。
- 不改现有 demo 行为。
验收标准:
- 新增接口可被 fake 实现用于单元测试。
- 应用层未来不需要包含 RM SDK 或 LinkerHand SDK 头文件。
### Phase 2: 抽出 RM75 工具端 Modbus driver
目标:把 RM75 工具端 RS485 访问从工具程序中移出。
新增:
- `RealManToolModbusBus`
迁移内容:
- `rm_set_tool_voltage(handle, 3)`
- `rm_set_modbus_mode(handle, 1, 115200, 10)`
- `rm_get_tool_RS485_mode`
- `rm_read_multiple_input_registers`
- `rm_write_registers`
- `rm_write_single_register`
验收标准:
- 工具端 Modbus 配置只存在于 driver 层。
- O6 driver 只依赖 `IToolModbusBus`
### Phase 3: 抽出 O6 Modbus 手部 driver
目标:把 O6 寄存器语义从工具程序移到 driver。
新增:
- `O6ModbusHand`
最小支持:
- `readIdentity()`
- `moveToJointPose()`
- `openToSafePose()`
- `moveToPreGraspPose()`
- `closeForPinchGrasp()`
约束:
- 先保留右手 ID `0x27` 作为默认配置。
- 保留寄存器地址 `30..35` 和 6 维关节姿态语义。
- 写失败时简单返回错误,不做复杂重试。
### Phase 4: 抽出协调控制和任务流程
目标:让应用层只表达“任务步骤”,不碰硬件细节。
新增:
- `ArmMotionService`
- `O6GraspService`
- `CoordinatedArmHandController`
- `MoveArmThenGraspTask`
从工具程序迁移:
- J2/J3 小幅摆动目标生成;
- pre-grasp / grasp / hold / safe-open 姿态;
- 机械臂动作启动后写手部姿态;
- 到位等待;
- 失败时停止机械臂并返回错误。
MVP 失败策略:
- 打印错误;
- 停止当前动作;
- 返回失败;
- 不做复杂恢复、不做自动重试。
### Phase 5: 增加无硬件单元测试
优先测试:
- O6 姿态长度校验;
- 抓取姿态生成;
- 安全限幅;
- fake arm + fake hand 的调用顺序;
- 失败时是否停止流程。
不自动测试:
- 真实机械臂运动;
- 真实 O6 抓取;
- 长时间力控;
- 需要人工监护的动作。
### Phase 6: 收敛 CMake
短期策略:
- 保留现有根目录目标和 `RM/` 子工程;
- 新增一个小的控制库,例如 `rm_o6_control_core`
- 不一次性重排整个仓库。
后续策略:
- 若 MVP 跑通,再决定是否把 `RM/` 子工程并入统一 `control/` 目录;
- 或继续保持 `RM/` 独立,只把 O6 协调控制作为上层应用库。
## 4. 推荐第一轮落地范围
确认后建议只做以下最小修改:
1. 新增 `IDexterousHand``IToolModbusBus` 和 O6 公共类型;
2. 新增 `RealManToolModbusBus` 骨架;
3. 不迁移工具程序;
4. 不改现有 demo;
5. 增加 fake 测试,验证接口可用。
这样第一轮风险最低,并能立即建立正确边界。
## 5. 当前硬件事实约束
当前 RM75 + O6 调试结论会影响架构实现顺序:
- PC USB-RS485 直连 O6 已验证可用;
- O6 右手 Modbus ID 为 `0x27`
- 直连路径可读取身份寄存器 `30..35`
- RM75 末端工具端 24V 和 Modbus 模式配置可成功;
- RM75 末端 RS485 到 O6 目前仍无回包,常见返回为 `-2``write_state:false`
- 该现象更像物理链路、A/B、共地或接线位置问题,不应优先继续堆寄存器编码逻辑。
因此软件重构应先把边界建好,但真实末端 RS485 动作验证仍要等硬件链路确认后再执行。
......@@ -19,6 +19,12 @@
| `toolset_example.cpp` | 交互式工具集,演示所有 API 功能 | 所有型号 | 中级 |
| `o6_async_reader.cpp` | O6 后台采集示例,主线程只消费快照 | O6/L6 | 中级 |
| `action_group_show_l10.cpp` | L10 型号的动作组演示 | L10 | 初级 |
| `realman_minimal_demo.cpp` | 睿尔曼机械臂最小连接与版本/信息读取 Demo,不发送运动指令 | RealMan 机械臂 | 初级 |
| `realman_slow_motion_demo.cpp` | 睿尔曼机械臂低速小幅关节往返运动 Demo | RealMan 机械臂 | 初级 |
| `realman_joint_pose_config_demo.cpp` | 睿尔曼机械臂源码参数调姿态 Demo | RealMan 机械臂 | 初级 |
| `realman_metrics_test.cpp` | 睿尔曼机械臂六维力/力矩、关节电流和低速运动指标测试 | RealMan 机械臂 | 中级 |
| `realman_trajectory_record.cpp` | 睿尔曼机械臂关节角/TCP 位姿 CSV 录制,只读不运动 | RealMan 机械臂 | 初级 |
| `realman_trajectory_replay.cpp` | 睿尔曼机械臂 CSV 轨迹低速逐点回放,默认 dry-run | RealMan 机械臂 | 中级 |
---
......@@ -43,6 +49,12 @@ make
./toolset_example
./o6_async_reader
./action_group_show_l10
./realman_minimal_demo 192.168.1.18 8080
./realman_slow_motion_demo 192.168.1.18 8080 1000 2 5 10
./realman_joint_pose_config_demo
./realman_metrics_test
./realman_trajectory_record
./realman_trajectory_replay reports/realman_trajectories/demo.csv dry-run
```
### 方法三:直接编译示例
......@@ -61,10 +73,133 @@ g++ -std=c++11 examples/o6_async_reader.cpp -I./include \
./o6_async_reader
```
---
## 示例详细说明
### realman_minimal_demo.cpp
**功能描述**
睿尔曼 RealMan RM_API2 最小 C++ 示例,用于验证项目内置的机械臂 SDK、动态库、网络连接和控制器通信是否可用。
**主要功能**:
1. 初始化 RM_API2
2. 连接机械臂控制器
3. 打印 API 版本
4. 读取机械臂软件版本信息
5. 读取机械臂基础信息
6. 断开连接并销毁 SDK 线程
**安全边界**:
- 不发送运动指令
- 默认只读信息
- 支持通过命令行覆盖 IP、端口和超时时间
**使用示例**:
```bash
./realman_minimal_demo
./realman_minimal_demo 192.168.1.18 8080
./realman_minimal_demo 192.168.1.18 8080 1500
```
详细说明见 [睿尔曼机械臂最小 Demo](../docs/REALMAN_MINIMAL_DEMO.md)
### realman_slow_motion_demo.cpp
**功能描述**
睿尔曼 RealMan RM_API2 低速小幅运动示例,用于确认机械臂可以稳定、缓慢地执行关节空间运动。
**默认动作**:
1. 读取当前关节角
2. 第 2 关节低速 `+5°`
3. 回到起始关节角
4. 第 2 关节低速 `-5°`
5. 回到起始关节角
**安全边界**:
- 默认速度比例 `10%`
- 默认角度幅度 `5°`
- 参数校验限制速度不超过 `20%`,幅度不超过 `5°`
- 每一步阻塞等待完成,失败时发送停止指令
**使用示例**:
```bash
./realman_slow_motion_demo
./realman_slow_motion_demo 192.168.1.18 8080 1000 2 5 10
./realman_slow_motion_demo 192.168.1.18 8080 1000 2 3 5
```
详细说明见 [睿尔曼机械臂低速运动 Demo 操作手册](../docs/REALMAN_SLOW_MOTION_MANUAL.md)
### realman_joint_pose_config_demo.cpp
**功能描述**
睿尔曼 RealMan RM_API2 源码参数调姿态示例。适合在 CLion 中直接修改 C++ 文件顶部参数,然后重新构建运行。
**主要修改区**:
```cpp
constexpr TargetMode kTargetMode = TargetMode::kRelativeJointOffset;
constexpr std::array<float, ARM_DOF> kRelativeJointOffsetsDeg = {
0.0F, 5.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
};
constexpr int kSpeedPercent = 10;
```
**安全边界**:
- 默认相对当前姿态执行 `J2 +5°`
- 默认速度比例 `10%`
- 单关节单次变化超过 `10°` 会拒绝执行
- 运行前有 5 秒安全倒计时
- 可设置 `kDryRunOnly = true` 只预览目标,不发送运动指令
**使用示例**:
```bash
./realman_joint_pose_config_demo
```
详细说明见 [睿尔曼机械臂源码参数调姿态 Demo](../docs/REALMAN_JOINT_POSE_CONFIG_DEMO.md)
### realman_metrics_test.cpp
**功能描述**
睿尔曼 RealMan RM_API2 指标测试示例。程序会采集六维力/力矩、关节电流、电压、温度、控制器状态,并执行一次低速小幅 J2 往返运动,用于评估基础运动到位误差和负载代理量变化。
**默认测试流程**:
1. 静态采样
2. 5 秒安全倒计时
3. J2 `+3°`
4. 返回起始姿态
5. J2 `-3°`
6. 返回起始姿态
7. 结束静态采样
8. 写入 CSV 和 Markdown 报告
**输出文件**:
```bash
reports/REALMAN_METRICS_TEST_RESULT.md
reports/realman_metrics_latest.csv
```
**安全边界**:
- 默认速度比例 `5%`
- 默认运动幅度 `3°`
- 程序限制速度不超过 `10%`,幅度不超过 `5°`
- 不自动启用接触式力位混合控制
详细说明见 [睿尔曼机械臂力/力矩与关节指标测试 README](../docs/REALMAN_METRICS_TEST_README.md)
### realman_trajectory_record.cpp / realman_trajectory_replay.cpp
**功能描述**
睿尔曼 RealMan RM_API2 最小轨迹录制/回放方案。录制程序读取 `J1..J7` 关节角和 TCP 位姿写入 CSV;回放程序读取 CSV,默认只做 dry-run 校验,显式传 `execute` 才低速逐点调用 `rm_movej`
**使用示例**:
```bash
./realman_trajectory_record reports/realman_trajectories/demo.csv 15 100
./realman_trajectory_replay reports/realman_trajectories/demo.csv dry-run
./realman_trajectory_replay reports/realman_trajectories/demo.csv execute 5 5 5
```
详细说明见 [RM75 轨迹录制与回放](../docs/REALMAN_TRAJECTORY_RECORD_REPLAY.md)
### toolset_example.cpp
**功能描述**
......
#include "rm_interface.h"
#include <array>
#include <chrono>
#include <cmath>
#include <cstdarg>
#include <cstdio>
#include <iomanip>
#include <iostream>
#include <thread>
namespace {
// ===== 用户主要修改区:在 CLion 里改这里,然后重新 Build/Run =====
constexpr const char *kRobotIp = "192.168.1.18";
constexpr int kRobotPort = 8080;
constexpr int kTimeoutMs = 1000;
enum class TargetMode {
kRelativeJointOffset, // 基于当前关节角做偏移,更适合调试
kAbsoluteJointAngles, // 直接移动到指定绝对关节角
};
constexpr TargetMode kTargetMode = TargetMode::kRelativeJointOffset;
// 7 自由度关节角,单位:度。RM75 使用 J1..J7。
// 相对模式:目标 = 当前关节角 + kRelativeJointOffsetsDeg。
constexpr std::array<float, ARM_DOF> kRelativeJointOffsetsDeg = {
0.0F, 5.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
};
// 绝对模式:目标 = kAbsoluteTargetJointsDeg。
// 首次使用绝对模式前,建议先把程序打印的 Current joints 复制到这里,再小幅修改。
constexpr std::array<float, ARM_DOF> kAbsoluteTargetJointsDeg = {
0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
};
constexpr int kSpeedPercent = 10;
constexpr bool kReturnToStartAfterMove = false;
constexpr bool kDryRunOnly = false;
// 安全限幅。需要更大动作时,先在低速、小幅验证后再调大。
constexpr float kMaxSingleJointDeltaDeg = 10.0F;
constexpr int kMaxAllowedSpeedPercent = 20;
constexpr int kSafetyCountdownSeconds = 5;
// ===== 用户主要修改区结束 =====
void apiLogCallback(const char *message, va_list args) {
if (message == nullptr) {
return;
}
char buffer[1024] = {};
std::vsnprintf(buffer, sizeof(buffer), message, args);
std::cerr << "[rm_api] " << buffer << '\n';
}
int destroyApi() {
#if defined(REALMAN_RM_API_HAS_RM_DESTROY)
return rm_destroy();
#else
return rm_destory();
#endif
}
void cleanup(rm_robot_handle *handle) {
if (handle != nullptr) {
const int delete_result = rm_delete_robot_arm(handle);
if (delete_result != 0) {
std::cerr << "rm_delete_robot_arm failed, error code: " << delete_result << '\n';
}
}
const int destroy_result = destroyApi();
if (destroy_result != 0) {
std::cerr << "RealMan API destroy failed, error code: " << destroy_result << '\n';
}
}
void printJoints(const char *label, const float joints[ARM_DOF], int dof) {
std::cout << label;
for (int i = 0; i < dof; ++i) {
std::cout << (i == 0 ? " [" : ", ")
<< "J" << (i + 1) << "=" << std::fixed << std::setprecision(3) << joints[i];
}
std::cout << "] deg\n";
}
void printPose(const char *label, const rm_pose_t &pose) {
std::cout << label
<< " position[m]=(" << std::fixed << std::setprecision(4)
<< pose.position.x << ", " << pose.position.y << ", " << pose.position.z
<< "), euler[rad]=(" << pose.euler.rx << ", " << pose.euler.ry << ", " << pose.euler.rz
<< ")\n";
}
bool readArmState(rm_robot_handle *handle, rm_current_arm_state_t *state) {
if (handle == nullptr || state == nullptr) {
return false;
}
const int result = rm_get_current_arm_state(handle, state);
if (result != 0) {
std::cerr << "rm_get_current_arm_state failed, error code: " << result << '\n';
return false;
}
return true;
}
bool allFinite(const float joints[ARM_DOF], int dof) {
for (int i = 0; i < dof; ++i) {
if (!std::isfinite(joints[i])) {
std::cerr << "Joint J" << (i + 1) << " is not finite: " << joints[i] << '\n';
return false;
}
}
return true;
}
bool validateSpeed() {
if (kSpeedPercent < 1 || kSpeedPercent > kMaxAllowedSpeedPercent) {
std::cerr << "kSpeedPercent must be in range 1.." << kMaxAllowedSpeedPercent
<< ". Current value: " << kSpeedPercent << '\n';
return false;
}
return true;
}
bool validateTargetDelta(const float current[ARM_DOF], const float target[ARM_DOF], int dof) {
if (!allFinite(current, dof) || !allFinite(target, dof)) {
return false;
}
bool has_motion = false;
for (int i = 0; i < dof; ++i) {
const float delta = target[i] - current[i];
if (std::fabs(delta) > 0.001F) {
has_motion = true;
}
if (std::fabs(delta) > kMaxSingleJointDeltaDeg) {
std::cerr << "Refuse to move J" << (i + 1) << " by " << delta
<< " deg. Limit is +/-" << kMaxSingleJointDeltaDeg << " deg.\n";
return false;
}
}
if (!has_motion) {
std::cerr << "Target equals current joints; no motion will be sent.\n";
return false;
}
return true;
}
void buildTargetJoints(const float current[ARM_DOF], float target[ARM_DOF], int dof) {
for (int i = 0; i < dof; ++i) {
if (kTargetMode == TargetMode::kRelativeJointOffset) {
target[i] = current[i] + kRelativeJointOffsetsDeg[static_cast<size_t>(i)];
} else {
target[i] = kAbsoluteTargetJointsDeg[static_cast<size_t>(i)];
}
}
for (int i = dof; i < ARM_DOF; ++i) {
target[i] = current[i];
}
}
void countdownBeforeMotion() {
std::cout << "\nSafety countdown before motion. Clear workspace and keep E-stop reachable.\n";
for (int second = kSafetyCountdownSeconds; second > 0; --second) {
std::cout << "Moving in " << second << "...\n";
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
bool moveJointTarget(rm_robot_handle *handle,
const char *label,
const float target[ARM_DOF],
int dof) {
printJoints(label, target, dof);
if (kDryRunOnly) {
std::cout << "Dry run enabled. rm_movej was not sent.\n";
return true;
}
const int result = rm_movej(handle, target, kSpeedPercent, 0, 0, 1);
if (result != 0) {
std::cerr << "rm_movej failed, error code: " << result << '\n';
const int stop_result = rm_set_arm_stop(handle);
if (stop_result != 0) {
std::cerr << "rm_set_arm_stop failed, error code: " << stop_result << '\n';
}
return false;
}
rm_current_arm_state_t actual = {};
if (!readArmState(handle, &actual)) {
return false;
}
printJoints("Actual joints after move:", actual.joint, dof);
printPose("Actual TCP pose:", actual.pose);
return true;
}
} // namespace
int main() {
std::cout.setf(std::ios::unitbuf);
std::cerr.setf(std::ios::unitbuf);
if (!validateSpeed()) {
return 64;
}
rm_set_log_call_back(apiLogCallback, 2);
rm_set_timeout(kTimeoutMs);
const int init_result = rm_init(RM_TRIPLE_MODE_E);
if (init_result != 0) {
std::cerr << "rm_init failed, error code: " << init_result << '\n';
return 1;
}
std::cout << "RealMan API version: " << rm_api_version() << '\n'
<< "Connecting to " << kRobotIp << ':' << kRobotPort << "...\n";
rm_robot_handle *handle = rm_create_robot_arm(kRobotIp, kRobotPort);
if (handle == nullptr || handle->id < 0) {
std::cerr << "Failed to connect to RealMan arm.\n";
cleanup(handle);
return 2;
}
rm_robot_info_t robot_info = {};
int result = rm_get_robot_info(handle, &robot_info);
if (result != 0) {
std::cerr << "rm_get_robot_info failed, error code: " << result << '\n';
cleanup(handle);
return 3;
}
const int dof = static_cast<int>(robot_info.arm_dof);
if (dof <= 0 || dof > ARM_DOF) {
std::cerr << "Invalid arm DOF reported by controller: " << dof << '\n';
cleanup(handle);
return 4;
}
rm_current_arm_state_t start_state = {};
if (!readArmState(handle, &start_state)) {
cleanup(handle);
return 5;
}
float target[ARM_DOF] = {};
buildTargetJoints(start_state.joint, target, dof);
std::cout << "Connected. Arm DOF: " << dof << ", speed: " << kSpeedPercent << "%\n"
<< "Target mode: "
<< (kTargetMode == TargetMode::kRelativeJointOffset ? "relative joint offset" : "absolute joint angles")
<< '\n';
printJoints("Current joints:", start_state.joint, dof);
printPose("Current TCP pose:", start_state.pose);
printJoints("Planned target joints:", target, dof);
if (!validateTargetDelta(start_state.joint, target, dof)) {
cleanup(handle);
return 6;
}
countdownBeforeMotion();
if (!moveJointTarget(handle, "Move target:", target, dof)) {
cleanup(handle);
return 7;
}
if (kReturnToStartAfterMove) {
if (!moveJointTarget(handle, "Return to start:", start_state.joint, dof)) {
cleanup(handle);
return 8;
}
}
cleanup(handle);
std::cout << "Joint pose config demo finished successfully.\n";
return 0;
}
#include "rm_interface.h"
#include <array>
#include <atomic>
#include <cerrno>
#include <chrono>
#include <cmath>
#include <cstdarg>
#include <cstdio>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <limits>
#include <sstream>
#include <string>
#include <sys/stat.h>
#include <sys/types.h>
#include <thread>
namespace {
#ifndef LINKERHAND_PROJECT_ROOT
#define LINKERHAND_PROJECT_ROOT "."
#endif
// ===== 测试参数区:需要改测试强度时改这里 =====
constexpr const char *kRobotIp = "192.168.1.18";
constexpr int kRobotPort = 8080;
constexpr int kTimeoutMs = 1000;
constexpr int kSamplePeriodMs = 50;
constexpr int kStaticBaselineSeconds = 5;
constexpr int kFinalStaticSeconds = 3;
constexpr int kSafetyCountdownSeconds = 5;
constexpr int kMotionJoint = 2; // 1-based joint index
constexpr float kMotionDeltaDeg = 3.0F;
constexpr int kMotionSpeedPercent = 5;
constexpr bool kRunMotionTrackingTest = true;
constexpr bool kDryRunOnly = false;
constexpr float kMaxAllowedDeltaDeg = 5.0F;
constexpr int kMaxAllowedSpeedPercent = 10;
// ===== 测试参数区结束 =====
constexpr int kAxisCount = 6;
constexpr int kPhaseCount = 6;
constexpr std::array<const char *, kPhaseCount> kPhaseNames = {
"static_baseline",
"move_positive",
"return_positive",
"move_negative",
"return_negative",
"final_static",
};
struct Stats {
int count = 0;
double mean = 0.0;
double m2 = 0.0;
double min = std::numeric_limits<double>::infinity();
double max = -std::numeric_limits<double>::infinity();
void add(double value) {
if (!std::isfinite(value)) {
return;
}
++count;
const double delta = value - mean;
mean += delta / count;
const double delta2 = value - mean;
m2 += delta * delta2;
if (value < min) {
min = value;
}
if (value > max) {
max = value;
}
}
double stddev() const {
return count > 1 ? std::sqrt(m2 / static_cast<double>(count - 1)) : 0.0;
}
double range() const {
return count > 0 ? max - min : 0.0;
}
};
struct Metrics {
std::array<int, kPhaseCount> phase_samples = {};
std::array<Stats, ARM_DOF> static_joint_current;
std::array<Stats, ARM_DOF> motion_joint_current;
std::array<Stats, ARM_DOF> static_joint_voltage;
std::array<Stats, ARM_DOF> static_joint_temperature;
std::array<Stats, kAxisCount> static_zero_force;
std::array<Stats, kAxisCount> static_raw_force;
std::array<Stats, kAxisCount> motion_zero_force;
Stats controller_voltage;
Stats controller_current;
Stats controller_temperature;
int total_samples = 0;
int arm_state_failures = 0;
int joint_current_failures = 0;
int joint_voltage_failures = 0;
int joint_temperature_failures = 0;
int force_failures = 0;
int controller_failures = 0;
};
struct Sample {
rm_current_arm_state_t arm_state = {};
std::array<float, ARM_DOF> joint_current = {};
std::array<float, ARM_DOF> joint_voltage = {};
std::array<float, ARM_DOF> joint_temperature = {};
rm_force_data_t force = {};
float controller_voltage = std::numeric_limits<float>::quiet_NaN();
float controller_current = std::numeric_limits<float>::quiet_NaN();
float controller_temperature = std::numeric_limits<float>::quiet_NaN();
int controller_err = 0;
bool arm_state_ok = false;
bool joint_current_ok = false;
bool joint_voltage_ok = false;
bool joint_temperature_ok = false;
bool force_ok = false;
bool controller_ok = false;
};
void apiLogCallback(const char *message, va_list args) {
if (message == nullptr) {
return;
}
char buffer[1024] = {};
std::vsnprintf(buffer, sizeof(buffer), message, args);
std::cerr << "[rm_api] " << buffer << '\n';
}
int destroyApi() {
#if defined(REALMAN_RM_API_HAS_RM_DESTROY)
return rm_destroy();
#else
return rm_destory();
#endif
}
void cleanup(rm_robot_handle *handle) {
if (handle != nullptr) {
const int delete_result = rm_delete_robot_arm(handle);
if (delete_result != 0) {
std::cerr << "rm_delete_robot_arm failed, error code: " << delete_result << '\n';
}
}
const int destroy_result = destroyApi();
if (destroy_result != 0) {
std::cerr << "RealMan API destroy failed, error code: " << destroy_result << '\n';
}
}
bool ensureDirectory(const std::string &path) {
if (::mkdir(path.c_str(), 0755) == 0 || errno == EEXIST) {
return true;
}
std::cerr << "Failed to create directory: " << path << '\n';
return false;
}
std::string timestampString() {
const std::time_t now = std::time(nullptr);
std::tm local_time = {};
localtime_r(&now, &local_time);
std::ostringstream out;
out << std::put_time(&local_time, "%Y%m%d_%H%M%S");
return out.str();
}
void printJoints(const char *label, const float joints[ARM_DOF], int dof) {
std::cout << label;
for (int i = 0; i < dof; ++i) {
std::cout << (i == 0 ? " [" : ", ")
<< "J" << (i + 1) << "=" << std::fixed << std::setprecision(3) << joints[i];
}
std::cout << "] deg\n";
}
bool readSample(rm_robot_handle *handle, Sample *sample, Metrics *metrics) {
if (handle == nullptr || sample == nullptr || metrics == nullptr) {
return false;
}
int result = rm_get_current_arm_state(handle, &sample->arm_state);
sample->arm_state_ok = result == 0;
if (!sample->arm_state_ok) {
++metrics->arm_state_failures;
}
result = rm_get_current_joint_current(handle, sample->joint_current.data());
sample->joint_current_ok = result == 0;
if (!sample->joint_current_ok) {
++metrics->joint_current_failures;
}
result = rm_get_current_joint_voltage(handle, sample->joint_voltage.data());
sample->joint_voltage_ok = result == 0;
if (!sample->joint_voltage_ok) {
++metrics->joint_voltage_failures;
}
result = rm_get_current_joint_temperature(handle, sample->joint_temperature.data());
sample->joint_temperature_ok = result == 0;
if (!sample->joint_temperature_ok) {
++metrics->joint_temperature_failures;
}
result = rm_get_force_data(handle, &sample->force);
sample->force_ok = result == 0;
if (!sample->force_ok) {
++metrics->force_failures;
}
result = rm_get_controller_state(handle,
&sample->controller_voltage,
&sample->controller_current,
&sample->controller_temperature,
&sample->controller_err);
sample->controller_ok = result == 0;
if (!sample->controller_ok) {
++metrics->controller_failures;
}
return sample->arm_state_ok;
}
void writeCsvHeader(std::ofstream *csv) {
*csv << "elapsed_ms,phase";
for (int i = 0; i < ARM_DOF; ++i) {
*csv << ",joint" << (i + 1) << "_deg";
}
for (int i = 0; i < ARM_DOF; ++i) {
*csv << ",joint" << (i + 1) << "_current_mA";
}
for (int i = 0; i < ARM_DOF; ++i) {
*csv << ",joint" << (i + 1) << "_voltage_V";
}
for (int i = 0; i < ARM_DOF; ++i) {
*csv << ",joint" << (i + 1) << "_temperature_C";
}
for (const char *axis : {"Fx", "Fy", "Fz", "Mx", "My", "Mz"}) {
*csv << ",raw_" << axis;
}
for (const char *axis : {"Fx", "Fy", "Fz", "Mx", "My", "Mz"}) {
*csv << ",zero_" << axis;
}
*csv << ",controller_voltage_V,controller_current_A,controller_temperature_C,controller_err\n";
}
void writeCsvSample(std::ofstream *csv, long long elapsed_ms, const char *phase, const Sample &sample) {
*csv << elapsed_ms << ',' << phase;
for (int i = 0; i < ARM_DOF; ++i) {
*csv << ',' << (sample.arm_state_ok ? sample.arm_state.joint[i] : std::numeric_limits<float>::quiet_NaN());
}
for (int i = 0; i < ARM_DOF; ++i) {
*csv << ',' << (sample.joint_current_ok ? sample.joint_current[static_cast<size_t>(i)]
: std::numeric_limits<float>::quiet_NaN());
}
for (int i = 0; i < ARM_DOF; ++i) {
*csv << ',' << (sample.joint_voltage_ok ? sample.joint_voltage[static_cast<size_t>(i)]
: std::numeric_limits<float>::quiet_NaN());
}
for (int i = 0; i < ARM_DOF; ++i) {
*csv << ',' << (sample.joint_temperature_ok ? sample.joint_temperature[static_cast<size_t>(i)]
: std::numeric_limits<float>::quiet_NaN());
}
for (int i = 0; i < kAxisCount; ++i) {
*csv << ',' << (sample.force_ok ? sample.force.force_data[i] : std::numeric_limits<float>::quiet_NaN());
}
for (int i = 0; i < kAxisCount; ++i) {
*csv << ',' << (sample.force_ok ? sample.force.zero_force_data[i] : std::numeric_limits<float>::quiet_NaN());
}
*csv << ',' << (sample.controller_ok ? sample.controller_voltage : std::numeric_limits<float>::quiet_NaN())
<< ',' << (sample.controller_ok ? sample.controller_current : std::numeric_limits<float>::quiet_NaN())
<< ',' << (sample.controller_ok ? sample.controller_temperature : std::numeric_limits<float>::quiet_NaN())
<< ',' << (sample.controller_ok ? sample.controller_err : -1)
<< '\n';
}
void updateMetrics(int phase_index, const Sample &sample, Metrics *metrics) {
++metrics->total_samples;
if (phase_index >= 0 && phase_index < kPhaseCount) {
++metrics->phase_samples[static_cast<size_t>(phase_index)];
}
const bool is_static = phase_index == 0 || phase_index == 5;
const bool is_motion = phase_index >= 1 && phase_index <= 4;
if (sample.joint_current_ok) {
for (int i = 0; i < ARM_DOF; ++i) {
if (is_static) {
metrics->static_joint_current[static_cast<size_t>(i)].add(sample.joint_current[static_cast<size_t>(i)]);
}
if (is_motion) {
metrics->motion_joint_current[static_cast<size_t>(i)].add(sample.joint_current[static_cast<size_t>(i)]);
}
}
}
if (sample.joint_voltage_ok && is_static) {
for (int i = 0; i < ARM_DOF; ++i) {
metrics->static_joint_voltage[static_cast<size_t>(i)].add(sample.joint_voltage[static_cast<size_t>(i)]);
}
}
if (sample.joint_temperature_ok && is_static) {
for (int i = 0; i < ARM_DOF; ++i) {
metrics->static_joint_temperature[static_cast<size_t>(i)].add(sample.joint_temperature[static_cast<size_t>(i)]);
}
}
if (sample.force_ok) {
for (int i = 0; i < kAxisCount; ++i) {
if (is_static) {
metrics->static_zero_force[static_cast<size_t>(i)].add(sample.force.zero_force_data[i]);
metrics->static_raw_force[static_cast<size_t>(i)].add(sample.force.force_data[i]);
}
if (is_motion) {
metrics->motion_zero_force[static_cast<size_t>(i)].add(sample.force.zero_force_data[i]);
}
}
}
if (sample.controller_ok) {
metrics->controller_voltage.add(sample.controller_voltage);
metrics->controller_current.add(sample.controller_current);
metrics->controller_temperature.add(sample.controller_temperature);
}
}
void samplerLoop(rm_robot_handle *handle,
const std::string &csv_path,
std::atomic<int> *phase_index,
std::atomic<bool> *running,
Metrics *metrics) {
std::ofstream csv(csv_path);
if (!csv) {
std::cerr << "Failed to open CSV file: " << csv_path << '\n';
running->store(false);
return;
}
csv << std::fixed << std::setprecision(6);
writeCsvHeader(&csv);
const auto start = std::chrono::steady_clock::now();
while (running->load()) {
const auto now = std::chrono::steady_clock::now();
const auto elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>(now - start).count();
const int phase = phase_index->load();
const char *phase_name = (phase >= 0 && phase < kPhaseCount) ? kPhaseNames[static_cast<size_t>(phase)] : "unknown";
Sample sample;
readSample(handle, &sample, metrics);
writeCsvSample(&csv, elapsed_ms, phase_name, sample);
updateMetrics(phase, sample, metrics);
std::this_thread::sleep_for(std::chrono::milliseconds(kSamplePeriodMs));
}
}
void sleepSeconds(int seconds) {
for (int i = 0; i < seconds; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
bool copyJoints(const float source[ARM_DOF], float target[ARM_DOF]) {
if (source == nullptr || target == nullptr) {
return false;
}
for (int i = 0; i < ARM_DOF; ++i) {
target[i] = source[i];
}
return true;
}
bool validateTestConfig(int dof) {
if (kSamplePeriodMs < 20) {
std::cerr << "kSamplePeriodMs must be >= 20 ms.\n";
return false;
}
if (kMotionJoint < 1 || kMotionJoint > dof) {
std::cerr << "kMotionJoint must be in range 1.." << dof << ".\n";
return false;
}
if (kMotionDeltaDeg <= 0.0F || kMotionDeltaDeg > kMaxAllowedDeltaDeg) {
std::cerr << "kMotionDeltaDeg must be in range (0, " << kMaxAllowedDeltaDeg << "].\n";
return false;
}
if (kMotionSpeedPercent < 1 || kMotionSpeedPercent > kMaxAllowedSpeedPercent) {
std::cerr << "kMotionSpeedPercent must be in range 1.." << kMaxAllowedSpeedPercent << ".\n";
return false;
}
return true;
}
bool moveAndMeasure(rm_robot_handle *handle,
std::atomic<int> *phase_index,
int phase,
const char *label,
const float target[ARM_DOF],
int dof,
double *duration_seconds,
double *max_final_error_deg) {
phase_index->store(phase);
printJoints(label, target, dof);
const auto start = std::chrono::steady_clock::now();
int result = 0;
if (!kDryRunOnly) {
result = rm_movej(handle, target, kMotionSpeedPercent, 0, 0, 1);
}
const auto end = std::chrono::steady_clock::now();
*duration_seconds = std::chrono::duration<double>(end - start).count();
if (result != 0) {
std::cerr << "rm_movej failed at " << label << ", error code: " << result << '\n';
const int stop_result = rm_set_arm_stop(handle);
if (stop_result != 0) {
std::cerr << "rm_set_arm_stop failed, error code: " << stop_result << '\n';
}
return false;
}
rm_current_arm_state_t actual = {};
result = rm_get_current_arm_state(handle, &actual);
if (result != 0) {
std::cerr << "rm_get_current_arm_state after move failed, error code: " << result << '\n';
return false;
}
double max_error = 0.0;
for (int i = 0; i < dof; ++i) {
max_error = std::max(max_error, std::fabs(static_cast<double>(actual.joint[i] - target[i])));
}
*max_final_error_deg = max_error;
printJoints("Actual after move:", actual.joint, dof);
std::cout << "Move duration: " << std::fixed << std::setprecision(3) << *duration_seconds
<< " s, max final joint error: " << max_error << " deg\n";
return true;
}
const char *forceTypeName(rm_force_type_e type) {
switch (type) {
case RM_MODEL_RM_B_E:
return "Standard";
case RM_MODEL_RM_ZF_E:
return "1D force";
case RM_MODEL_RM_SF_E:
return "6D force";
case RM_MODEL_RM_ISF_E:
return "Integrated 6D force";
default:
return "Unknown";
}
}
void writeStatsRow(std::ofstream *md, const char *name, const char *unit, const Stats &stats) {
*md << "| " << name << " | " << stats.count << " | "
<< std::fixed << std::setprecision(4) << stats.mean << " | "
<< stats.stddev() << " | "
<< stats.min << " | "
<< stats.max << " | "
<< stats.range() << " | " << unit << " |\n";
}
bool writeMarkdownReport(const std::string &report_path,
const std::string &csv_path,
const std::string &timestamp,
const rm_robot_info_t &robot_info,
const rm_arm_software_version_t &software_info,
const Metrics &metrics,
const std::array<double, 4> &move_durations,
const std::array<double, 4> &move_errors,
bool motion_test_ok) {
std::ofstream md(report_path);
if (!md) {
std::cerr << "Failed to open report file: " << report_path << '\n';
return false;
}
md << "# 睿尔曼机械臂力/力矩与关节指标测试报告\n\n"
<< "| 项目 | 值 |\n"
<< "| --- | --- |\n"
<< "| 测试时间 | `" << timestamp << "` |\n"
<< "| 控制器地址 | `" << kRobotIp << ':' << kRobotPort << "` |\n"
<< "| API 版本 | `" << rm_api_version() << "` |\n"
<< "| 产品版本 | `" << software_info.product_version << "` |\n"
<< "| 软件控制器版本 | `" << software_info.robot_controller_version << "` |\n"
<< "| 控制器代际 | `" << static_cast<int>(robot_info.robot_controller_version) << "` |\n"
<< "| 自由度 | `" << static_cast<int>(robot_info.arm_dof) << "` |\n"
<< "| 力传感器类型 | `" << forceTypeName(robot_info.force_type) << "` |\n"
<< "| 原始 CSV | `" << csv_path << "` |\n\n";
md << "## 测试范围\n\n"
<< "- 已测试:六维力/力矩传感器读数、静态噪声/漂移、关节电流/电压/温度、控制器电压/电流/温度、低速小幅关节运动跟踪误差。\n"
<< "- 未测试:接触式力位混合控制闭环精度、外部负载下输出力矩精度、碰撞阈值。这些需要固定工装、标定砝码/力传感器和明确接触方向。\n"
<< "- SDK 当前暴露的是关节电流和末端六维力/力矩数据,没有裸关节力矩指令接口;因此本文中的关节侧“力矩相关”指标以电流作为负载代理量。\n\n";
md << "## 采样概况\n\n"
<< "| Phase | 样本数 |\n"
<< "| --- | ---: |\n";
for (int i = 0; i < kPhaseCount; ++i) {
md << "| `" << kPhaseNames[static_cast<size_t>(i)] << "` | "
<< metrics.phase_samples[static_cast<size_t>(i)] << " |\n";
}
md << "| **合计** | **" << metrics.total_samples << "** |\n\n";
md << "## 静态六维力/力矩噪声\n\n"
<< "单位:`Fx/Fy/Fz = N`,`Mx/My/Mz = Nm`。统计对象为系统外受力 `zero_force_data`。\n\n"
<< "| 轴 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |\n"
<< "| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |\n";
const std::array<const char *, kAxisCount> axes = {"Fx", "Fy", "Fz", "Mx", "My", "Mz"};
for (int i = 0; i < kAxisCount; ++i) {
writeStatsRow(&md,
axes[static_cast<size_t>(i)],
i < 3 ? "N" : "Nm",
metrics.static_zero_force[static_cast<size_t>(i)]);
}
md << "\n## 静态关节电流\n\n"
<< "| 关节 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |\n"
<< "| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |\n";
for (int i = 0; i < static_cast<int>(robot_info.arm_dof); ++i) {
const std::string joint = "J" + std::to_string(i + 1);
writeStatsRow(&md, joint.c_str(), "mA", metrics.static_joint_current[static_cast<size_t>(i)]);
}
md << "\n## 运动过程关节电流\n\n"
<< "| 关节 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |\n"
<< "| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |\n";
for (int i = 0; i < static_cast<int>(robot_info.arm_dof); ++i) {
const std::string joint = "J" + std::to_string(i + 1);
writeStatsRow(&md, joint.c_str(), "mA", metrics.motion_joint_current[static_cast<size_t>(i)]);
}
md << "\n## 低速小幅运动跟踪\n\n"
<< "| 步骤 | 持续时间 s | 到位最大关节误差 deg |\n"
<< "| --- | ---: | ---: |\n";
const std::array<const char *, 4> move_names = {
"J2 +delta", "return from +delta", "J2 -delta", "return from -delta",
};
for (int i = 0; i < 4; ++i) {
md << "| " << move_names[static_cast<size_t>(i)] << " | "
<< std::fixed << std::setprecision(3) << move_durations[static_cast<size_t>(i)] << " | "
<< std::setprecision(4) << move_errors[static_cast<size_t>(i)] << " |\n";
}
md << "\n运动测试结果:`" << (motion_test_ok ? "通过" : "未通过或未执行") << "`。\n\n";
md << "## 控制器状态\n\n"
<< "| 指标 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |\n"
<< "| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |\n";
writeStatsRow(&md, "controller_voltage", "V", metrics.controller_voltage);
writeStatsRow(&md, "controller_current", "A", metrics.controller_current);
writeStatsRow(&md, "controller_temperature", "C", metrics.controller_temperature);
md << "\n## 接口失败计数\n\n"
<< "| 接口 | 失败次数 |\n"
<< "| --- | ---: |\n"
<< "| rm_get_current_arm_state | " << metrics.arm_state_failures << " |\n"
<< "| rm_get_current_joint_current | " << metrics.joint_current_failures << " |\n"
<< "| rm_get_current_joint_voltage | " << metrics.joint_voltage_failures << " |\n"
<< "| rm_get_current_joint_temperature | " << metrics.joint_temperature_failures << " |\n"
<< "| rm_get_force_data | " << metrics.force_failures << " |\n"
<< "| rm_get_controller_state | " << metrics.controller_failures << " |\n\n";
md << "## 结论\n\n"
<< "- 本次测试可以评估静态六维力/力矩读数稳定性、关节电流负载变化、基础运动到位误差和控制器供电状态。\n"
<< "- 若要测试真实接触力控或力矩输出能力,需要增加外部测力设备、刚性固定治具、接触方向限位和急停监护,再启用 `rm_set_force_position` 或 `rm_force_position_move_*`。\n";
return true;
}
} // namespace
int main() {
std::cout.setf(std::ios::unitbuf);
std::cerr.setf(std::ios::unitbuf);
rm_set_log_call_back(apiLogCallback, 2);
rm_set_timeout(kTimeoutMs);
int result = rm_init(RM_TRIPLE_MODE_E);
if (result != 0) {
std::cerr << "rm_init failed, error code: " << result << '\n';
return 1;
}
std::cout << "RealMan API version: " << rm_api_version() << '\n'
<< "Connecting to " << kRobotIp << ':' << kRobotPort << "...\n";
rm_robot_handle *handle = rm_create_robot_arm(kRobotIp, kRobotPort);
if (handle == nullptr || handle->id < 0) {
std::cerr << "Failed to connect to RealMan arm.\n";
cleanup(handle);
return 2;
}
rm_robot_info_t robot_info = {};
result = rm_get_robot_info(handle, &robot_info);
if (result != 0) {
std::cerr << "rm_get_robot_info failed, error code: " << result << '\n';
cleanup(handle);
return 3;
}
const int dof = static_cast<int>(robot_info.arm_dof);
if (dof <= 0 || dof > ARM_DOF) {
std::cerr << "Invalid arm DOF reported by controller: " << dof << '\n';
cleanup(handle);
return 4;
}
if (!validateTestConfig(dof)) {
cleanup(handle);
return 5;
}
rm_arm_software_version_t software_info = {};
result = rm_get_arm_software_info(handle, &software_info);
if (result != 0) {
std::cerr << "rm_get_arm_software_info failed, error code: " << result << '\n';
}
rm_current_arm_state_t start_state = {};
result = rm_get_current_arm_state(handle, &start_state);
if (result != 0) {
std::cerr << "rm_get_current_arm_state failed, error code: " << result << '\n';
cleanup(handle);
return 6;
}
std::cout << "Connected. Arm DOF: " << dof
<< ", force type: " << forceTypeName(robot_info.force_type)
<< ", sample period: " << kSamplePeriodMs << " ms\n";
printJoints("Start joints:", start_state.joint, dof);
const std::string report_dir = std::string(LINKERHAND_PROJECT_ROOT) + "/reports";
if (!ensureDirectory(report_dir)) {
cleanup(handle);
return 7;
}
const std::string timestamp = timestampString();
const std::string csv_path = report_dir + "/realman_metrics_" + timestamp + ".csv";
const std::string latest_csv_path = report_dir + "/realman_metrics_latest.csv";
const std::string report_path = report_dir + "/realman_metrics_" + timestamp + ".md";
const std::string latest_report_path = report_dir + "/REALMAN_METRICS_TEST_RESULT.md";
Metrics metrics;
std::atomic<int> phase_index(0);
std::atomic<bool> running(true);
std::thread sampler(samplerLoop, handle, csv_path, &phase_index, &running, &metrics);
std::cout << "Static baseline sampling for " << kStaticBaselineSeconds << " s...\n";
sleepSeconds(kStaticBaselineSeconds);
std::array<double, 4> move_durations = {};
std::array<double, 4> move_errors = {};
bool motion_test_ok = true;
if (kRunMotionTrackingTest) {
std::cout << "\nSafety countdown before motion. Clear workspace and keep E-stop reachable.\n";
for (int second = kSafetyCountdownSeconds; second > 0; --second) {
std::cout << "Moving in " << second << "...\n";
sleepSeconds(1);
}
float positive[ARM_DOF] = {};
float negative[ARM_DOF] = {};
copyJoints(start_state.joint, positive);
copyJoints(start_state.joint, negative);
positive[kMotionJoint - 1] += kMotionDeltaDeg;
negative[kMotionJoint - 1] -= kMotionDeltaDeg;
motion_test_ok = motion_test_ok && moveAndMeasure(handle, &phase_index, 1, "Move positive target:", positive, dof, &move_durations[0], &move_errors[0]);
motion_test_ok = motion_test_ok && moveAndMeasure(handle, &phase_index, 2, "Return from positive:", start_state.joint, dof, &move_durations[1], &move_errors[1]);
motion_test_ok = motion_test_ok && moveAndMeasure(handle, &phase_index, 3, "Move negative target:", negative, dof, &move_durations[2], &move_errors[2]);
motion_test_ok = motion_test_ok && moveAndMeasure(handle, &phase_index, 4, "Return from negative:", start_state.joint, dof, &move_durations[3], &move_errors[3]);
}
phase_index.store(5);
std::cout << "Final static sampling for " << kFinalStaticSeconds << " s...\n";
sleepSeconds(kFinalStaticSeconds);
running.store(false);
sampler.join();
cleanup(handle);
// Keep stable "latest" filenames for CLion users while preserving timestamped artifacts.
{
std::ifstream src(csv_path, std::ios::binary);
std::ofstream dst(latest_csv_path, std::ios::binary);
dst << src.rdbuf();
}
if (!writeMarkdownReport(report_path,
csv_path,
timestamp,
robot_info,
software_info,
metrics,
move_durations,
move_errors,
motion_test_ok)) {
return 8;
}
if (!writeMarkdownReport(latest_report_path,
latest_csv_path,
timestamp,
robot_info,
software_info,
metrics,
move_durations,
move_errors,
motion_test_ok)) {
return 9;
}
std::cout << "Metrics test finished.\n"
<< "CSV: " << csv_path << '\n'
<< "Report: " << report_path << '\n'
<< "Latest report: " << latest_report_path << '\n';
return motion_test_ok ? 0 : 10;
}
#include "rm_interface.h"
#include <cerrno>
#include <climits>
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <string>
namespace {
constexpr const char *kDefaultRobotIp = "192.168.1.18";
constexpr int kDefaultRobotPort = 8080;
constexpr int kDefaultTimeoutMs = 1000;
struct Config {
std::string ip = kDefaultRobotIp;
int port = kDefaultRobotPort;
int timeout_ms = kDefaultTimeoutMs;
};
void printUsage(const char *program_name) {
std::cout << "Usage: " << program_name << " [robot_ip] [port] [timeout_ms]\n"
<< "\n"
<< "Examples:\n"
<< " " << program_name << "\n"
<< " " << program_name << " 192.168.1.18 8080\n"
<< " " << program_name << " 192.168.1.18 8080 1500\n"
<< "\n"
<< "This minimal demo only connects to the RealMan arm, reads version/info,\n"
<< "and disconnects. It does not send motion commands.\n";
}
bool parseInt(const char *value, int *out) {
if (value == nullptr || out == nullptr || value[0] == '\0') {
return false;
}
errno = 0;
char *end = nullptr;
const long parsed = std::strtol(value, &end, 10);
if (errno != 0 || end == value || *end != '\0' || parsed < INT_MIN || parsed > INT_MAX) {
return false;
}
*out = static_cast<int>(parsed);
return true;
}
bool parseArgs(int argc, char **argv, Config *config) {
if (config == nullptr) {
return false;
}
if (argc > 1) {
const std::string first_arg = argv[1] == nullptr ? "" : argv[1];
if (first_arg == "-h" || first_arg == "--help") {
printUsage(argv[0]);
std::exit(0);
}
config->ip = first_arg;
}
if (argc > 2 && !parseInt(argv[2], &config->port)) {
std::cerr << "Invalid port: " << argv[2] << "\n";
return false;
}
if (argc > 3 && !parseInt(argv[3], &config->timeout_ms)) {
std::cerr << "Invalid timeout_ms: " << argv[3] << "\n";
return false;
}
if (argc > 4) {
std::cerr << "Too many arguments.\n";
return false;
}
if (config->ip.empty()) {
std::cerr << "Robot IP must not be empty.\n";
return false;
}
if (config->port <= 0 || config->port > 65535) {
std::cerr << "Port must be in range 1..65535.\n";
return false;
}
if (config->timeout_ms <= 0) {
std::cerr << "timeout_ms must be greater than 0.\n";
return false;
}
return true;
}
void apiLogCallback(const char *message, va_list args) {
if (message == nullptr) {
return;
}
char buffer[1024] = {};
std::vsnprintf(buffer, sizeof(buffer), message, args);
std::cerr << "[rm_api] " << buffer << '\n';
}
const char *armModelName(rm_robot_arm_model_e model) {
switch (model) {
case RM_MODEL_RM_65_E:
return "RM_65";
case RM_MODEL_RM_75_E:
return "RM_75";
case RM_MODEL_RM_63_I_E:
return "RML_63I";
case RM_MODEL_RM_63_II_E:
return "RML_63II";
case RM_MODEL_RM_63_III_E:
return "RML_63III";
case RM_MODEL_ECO_65_E:
return "ECO_65";
case RM_MODEL_ECO_62_E:
return "ECO_62";
case RM_MODEL_GEN_72_E:
return "GEN_72";
case RM_MODEL_ECO_63_E:
return "ECO_63";
case RM_MODEL_UNIVERSAL_E:
return "UNIVERSAL";
default:
return "UNKNOWN";
}
}
const char *forceTypeName(rm_force_type_e type) {
switch (type) {
case RM_MODEL_RM_B_E:
return "Standard";
case RM_MODEL_RM_ZF_E:
return "1D force";
case RM_MODEL_RM_SF_E:
return "6D force";
case RM_MODEL_RM_ISF_E:
return "Integrated 6D force";
default:
return "Unknown";
}
}
void printSoftwareInfo(const rm_arm_software_version_t &info) {
std::cout << "\n================ RealMan Arm Software Info ================\n"
<< "Product Version: " << info.product_version << '\n'
<< "Robot Controller Version: " << info.robot_controller_version << '\n'
<< "Algorithm Version: " << info.algorithm_info.version << '\n'
<< "Control Layer Version: " << info.ctrl_info.version << '\n'
<< "Control Layer Build Time: " << info.ctrl_info.build_time << '\n'
<< "Dynamics Model Version: " << info.dynamic_info.model_version << '\n'
<< "Planning Layer Version: " << info.plan_info.version << '\n'
<< "Planning Layer Build Time: " << info.plan_info.build_time << '\n'
<< "===========================================================\n";
}
void printRobotInfo(const rm_robot_info_t &info) {
std::cout << "\n================ RealMan Arm Basic Info ====================\n"
<< "Arm DOF: " << static_cast<int>(info.arm_dof) << '\n'
<< "Arm Model: " << armModelName(info.arm_model)
<< " (" << static_cast<int>(info.arm_model) << ")\n"
<< "Force Type: " << forceTypeName(info.force_type)
<< " (" << static_cast<int>(info.force_type) << ")\n"
<< "Controller Version: " << static_cast<int>(info.robot_controller_version) << '\n'
<< "===========================================================\n";
}
int destroyApi() {
#if defined(REALMAN_RM_API_HAS_RM_DESTROY)
return rm_destroy();
#else
return rm_destory();
#endif
}
} // namespace
int main(int argc, char **argv) {
Config config;
if (!parseArgs(argc, argv, &config)) {
printUsage(argv[0]);
return 64;
}
rm_set_log_call_back(apiLogCallback, 2);
rm_set_timeout(config.timeout_ms);
const int init_result = rm_init(RM_TRIPLE_MODE_E);
if (init_result != 0) {
std::cerr << "rm_init failed, error code: " << init_result << '\n';
return 1;
}
int exit_code = 0;
rm_robot_handle *handle = nullptr;
std::cout << "RealMan API version: " << rm_api_version() << '\n'
<< "Connecting to " << config.ip << ':' << config.port
<< " with timeout " << config.timeout_ms << " ms...\n";
handle = rm_create_robot_arm(config.ip.c_str(), config.port);
if (handle == nullptr || handle->id < 0) {
std::cerr << "Failed to connect to RealMan arm. Check IP, port, network, and robot power state.\n";
exit_code = 2;
if (handle != nullptr) {
rm_delete_robot_arm(handle);
handle = nullptr;
}
destroyApi();
return exit_code;
}
std::cout << "Robot handle created, id: " << handle->id << '\n';
rm_arm_software_version_t software_info = {};
const int software_result = rm_get_arm_software_info(handle, &software_info);
if (software_result == 0) {
printSoftwareInfo(software_info);
} else {
std::cerr << "rm_get_arm_software_info failed, error code: " << software_result << '\n';
exit_code = 3;
}
rm_robot_info_t robot_info = {};
const int robot_info_result = rm_get_robot_info(handle, &robot_info);
if (robot_info_result == 0) {
printRobotInfo(robot_info);
} else {
std::cerr << "rm_get_robot_info failed, error code: " << robot_info_result << '\n';
if (exit_code == 0) {
exit_code = 4;
}
}
const int delete_result = rm_delete_robot_arm(handle);
if (delete_result != 0) {
std::cerr << "rm_delete_robot_arm failed, error code: " << delete_result << '\n';
if (exit_code == 0) {
exit_code = 5;
}
}
const int destroy_result = destroyApi();
if (destroy_result != 0) {
std::cerr << "RealMan API destroy failed, error code: " << destroy_result << '\n';
if (exit_code == 0) {
exit_code = 6;
}
}
if (exit_code == 0) {
std::cout << "RealMan minimal demo finished successfully.\n";
}
return exit_code;
}
#include "rm_interface.h"
#include <cerrno>
#include <climits>
#include <cmath>
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <string>
#include <thread>
namespace {
constexpr const char *kDefaultRobotIp = "192.168.1.18";
constexpr int kDefaultRobotPort = 8080;
constexpr int kDefaultTimeoutMs = 1000;
constexpr int kDefaultJoint = 2;
constexpr float kDefaultDeltaDeg = 5.0F;
constexpr int kDefaultSpeedPercent = 10;
constexpr int kSafetyCountdownSeconds = 5;
struct Config {
std::string ip = kDefaultRobotIp;
int port = kDefaultRobotPort;
int timeout_ms = kDefaultTimeoutMs;
int joint = kDefaultJoint;
float delta_deg = kDefaultDeltaDeg;
int speed_percent = kDefaultSpeedPercent;
};
void printUsage(const char *program_name) {
std::cout << "Usage: " << program_name
<< " [robot_ip] [port] [timeout_ms] [joint] [delta_deg] [speed_percent]\n"
<< "\n"
<< "Defaults:\n"
<< " robot_ip " << kDefaultRobotIp << "\n"
<< " port " << kDefaultRobotPort << "\n"
<< " timeout_ms " << kDefaultTimeoutMs << "\n"
<< " joint " << kDefaultJoint << " (1-based joint index)\n"
<< " delta_deg " << kDefaultDeltaDeg << "\n"
<< " speed_percent " << kDefaultSpeedPercent << "\n"
<< "\n"
<< "Motion plan:\n"
<< " read current joints -> +delta -> return -> -delta -> return\n"
<< " no Cartesian motion, no blending, blocking movej only.\n"
<< "\n"
<< "Examples:\n"
<< " " << program_name << "\n"
<< " " << program_name << " 192.168.1.18 8080 1000 2 5 10\n"
<< " " << program_name << " 192.168.1.18 8080 1000 2 3 5\n";
}
bool parseInt(const char *value, int *out) {
if (value == nullptr || out == nullptr || value[0] == '\0') {
return false;
}
errno = 0;
char *end = nullptr;
const long parsed = std::strtol(value, &end, 10);
if (errno != 0 || end == value || *end != '\0' || parsed < INT_MIN || parsed > INT_MAX) {
return false;
}
*out = static_cast<int>(parsed);
return true;
}
bool parseFloat(const char *value, float *out) {
if (value == nullptr || out == nullptr || value[0] == '\0') {
return false;
}
errno = 0;
char *end = nullptr;
const float parsed = std::strtof(value, &end);
if (errno != 0 || end == value || *end != '\0' || !std::isfinite(parsed)) {
return false;
}
*out = parsed;
return true;
}
bool parseArgs(int argc, char **argv, Config *config) {
if (config == nullptr) {
return false;
}
if (argc > 1) {
const std::string first_arg = argv[1] == nullptr ? "" : argv[1];
if (first_arg == "-h" || first_arg == "--help") {
printUsage(argv[0]);
std::exit(0);
}
config->ip = first_arg;
}
if (argc > 2 && !parseInt(argv[2], &config->port)) {
std::cerr << "Invalid port: " << argv[2] << "\n";
return false;
}
if (argc > 3 && !parseInt(argv[3], &config->timeout_ms)) {
std::cerr << "Invalid timeout_ms: " << argv[3] << "\n";
return false;
}
if (argc > 4 && !parseInt(argv[4], &config->joint)) {
std::cerr << "Invalid joint: " << argv[4] << "\n";
return false;
}
if (argc > 5 && !parseFloat(argv[5], &config->delta_deg)) {
std::cerr << "Invalid delta_deg: " << argv[5] << "\n";
return false;
}
if (argc > 6 && !parseInt(argv[6], &config->speed_percent)) {
std::cerr << "Invalid speed_percent: " << argv[6] << "\n";
return false;
}
if (argc > 7) {
std::cerr << "Too many arguments.\n";
return false;
}
if (config->ip.empty()) {
std::cerr << "Robot IP must not be empty.\n";
return false;
}
if (config->port <= 0 || config->port > 65535) {
std::cerr << "Port must be in range 1..65535.\n";
return false;
}
if (config->timeout_ms <= 0) {
std::cerr << "timeout_ms must be greater than 0.\n";
return false;
}
if (config->joint < 1 || config->joint > ARM_DOF) {
std::cerr << "Joint must be in range 1.." << ARM_DOF << ".\n";
return false;
}
if (config->delta_deg <= 0.0F || config->delta_deg > 5.0F) {
std::cerr << "delta_deg must be in range (0, 5]. Keep this demo slow and small.\n";
return false;
}
if (config->speed_percent < 1 || config->speed_percent > 20) {
std::cerr << "speed_percent must be in range 1..20 for this slow-motion demo.\n";
return false;
}
return true;
}
void apiLogCallback(const char *message, va_list args) {
if (message == nullptr) {
return;
}
char buffer[1024] = {};
std::vsnprintf(buffer, sizeof(buffer), message, args);
std::cerr << "[rm_api] " << buffer << '\n';
}
void printJoints(const char *label, const float joints[ARM_DOF], int dof) {
std::cout << label;
for (int i = 0; i < dof; ++i) {
std::cout << (i == 0 ? " [" : ", ")
<< "J" << (i + 1) << "=" << std::fixed << std::setprecision(3) << joints[i];
}
std::cout << "] deg\n";
}
void copyJoints(const float source[ARM_DOF], float target[ARM_DOF]) {
for (int i = 0; i < ARM_DOF; ++i) {
target[i] = source[i];
}
}
bool readJoints(rm_robot_handle *handle, float joints[ARM_DOF]) {
if (handle == nullptr || joints == nullptr) {
return false;
}
const int result = rm_get_joint_degree(handle, joints);
if (result != 0) {
std::cerr << "rm_get_joint_degree failed, error code: " << result << '\n';
return false;
}
return true;
}
bool moveJointTarget(rm_robot_handle *handle,
const char *label,
const float target[ARM_DOF],
int dof,
int speed_percent) {
printJoints(label, target, dof);
const int result = rm_movej(handle, target, speed_percent, 0, 0, 1);
if (result != 0) {
std::cerr << "rm_movej failed at step \"" << label << "\", error code: " << result << '\n';
return false;
}
float actual[ARM_DOF] = {};
if (!readJoints(handle, actual)) {
return false;
}
printJoints("Actual joints after step:", actual, dof);
return true;
}
int destroyApi() {
#if defined(REALMAN_RM_API_HAS_RM_DESTROY)
return rm_destroy();
#else
return rm_destory();
#endif
}
void cleanup(rm_robot_handle *handle) {
if (handle != nullptr) {
const int delete_result = rm_delete_robot_arm(handle);
if (delete_result != 0) {
std::cerr << "rm_delete_robot_arm failed, error code: " << delete_result << '\n';
}
}
const int destroy_result = destroyApi();
if (destroy_result != 0) {
std::cerr << "RealMan API destroy failed, error code: " << destroy_result << '\n';
}
}
} // namespace
int main(int argc, char **argv) {
std::cout.setf(std::ios::unitbuf);
std::cerr.setf(std::ios::unitbuf);
Config config;
if (!parseArgs(argc, argv, &config)) {
printUsage(argv[0]);
return 64;
}
rm_set_log_call_back(apiLogCallback, 2);
rm_set_timeout(config.timeout_ms);
const int init_result = rm_init(RM_TRIPLE_MODE_E);
if (init_result != 0) {
std::cerr << "rm_init failed, error code: " << init_result << '\n';
return 1;
}
std::cout << "RealMan API version: " << rm_api_version() << '\n'
<< "Connecting to " << config.ip << ':' << config.port << "...\n";
rm_robot_handle *handle = rm_create_robot_arm(config.ip.c_str(), config.port);
if (handle == nullptr || handle->id < 0) {
std::cerr << "Failed to connect to RealMan arm.\n";
cleanup(handle);
return 2;
}
rm_robot_info_t robot_info = {};
int result = rm_get_robot_info(handle, &robot_info);
if (result != 0) {
std::cerr << "rm_get_robot_info failed, error code: " << result << '\n';
cleanup(handle);
return 3;
}
const int dof = static_cast<int>(robot_info.arm_dof);
if (dof <= 0 || dof > ARM_DOF) {
std::cerr << "Invalid arm DOF reported by controller: " << dof << '\n';
cleanup(handle);
return 4;
}
if (config.joint > dof) {
std::cerr << "Selected joint J" << config.joint << " exceeds current arm DOF " << dof << ".\n";
cleanup(handle);
return 5;
}
float start[ARM_DOF] = {};
if (!readJoints(handle, start)) {
cleanup(handle);
return 6;
}
std::cout << "Connected. Arm DOF: " << dof
<< ", selected joint: J" << config.joint
<< ", delta: " << config.delta_deg
<< " deg, speed: " << config.speed_percent << "%\n";
printJoints("Current joints:", start, dof);
std::cout << "\nSafety countdown before motion. Clear the workspace and keep E-stop reachable.\n";
for (int second = kSafetyCountdownSeconds; second > 0; --second) {
std::cout << "Moving in " << second << "...\n";
std::this_thread::sleep_for(std::chrono::seconds(1));
}
float positive[ARM_DOF] = {};
float negative[ARM_DOF] = {};
copyJoints(start, positive);
copyJoints(start, negative);
const int joint_index = config.joint - 1;
positive[joint_index] += config.delta_deg;
negative[joint_index] -= config.delta_deg;
bool ok = true;
ok = ok && moveJointTarget(handle, "Step 1 target (+delta):", positive, dof, config.speed_percent);
ok = ok && moveJointTarget(handle, "Step 2 return home:", start, dof, config.speed_percent);
ok = ok && moveJointTarget(handle, "Step 3 target (-delta):", negative, dof, config.speed_percent);
ok = ok && moveJointTarget(handle, "Step 4 return home:", start, dof, config.speed_percent);
if (!ok) {
const int stop_result = rm_set_arm_stop(handle);
if (stop_result != 0) {
std::cerr << "rm_set_arm_stop failed, error code: " << stop_result << '\n';
}
cleanup(handle);
return 7;
}
float final_joints[ARM_DOF] = {};
if (readJoints(handle, final_joints)) {
printJoints("Final joints:", final_joints, dof);
}
cleanup(handle);
std::cout << "Slow motion demo finished successfully.\n";
return 0;
}
#pragma once
#include "rm_interface.h"
#include <array>
#include <algorithm>
#include <cerrno>
#include <chrono>
#include <cmath>
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <string>
#include <sys/stat.h>
#include <utility>
#include <vector>
#ifndef LINKERHAND_PROJECT_ROOT
#define LINKERHAND_PROJECT_ROOT "."
#endif
namespace realman_trajectory {
constexpr const char *kDefaultRobotIp = "192.168.1.18";
constexpr int kDefaultRobotPort = 8080;
constexpr int kDefaultTimeoutMs = 1000;
constexpr int kExpectedRm75Dof = 7;
constexpr int kCsvColumnCount = 15;
struct RobotConnectionConfig {
std::string robot_ip = kDefaultRobotIp;
int robot_port = kDefaultRobotPort;
int timeout_ms = kDefaultTimeoutMs;
};
struct TrajectoryPoint {
long long elapsed_ms = 0;
std::array<float, ARM_DOF> joint_deg = {};
rm_pose_t tcp_pose = {};
};
inline void apiLogCallback(const char *message, va_list args) {
if (message == nullptr) {
return;
}
char buffer[1024] = {};
std::vsnprintf(buffer, sizeof(buffer), message, args);
std::cerr << "[rm_api] " << buffer << '\n';
}
inline int destroyApi() {
#if defined(REALMAN_RM_API_HAS_RM_DESTROY)
return rm_destroy();
#else
return rm_destory();
#endif
}
inline bool parseIntArgument(const char *value, int *out) {
if (value == nullptr || out == nullptr || value[0] == '\0') {
return false;
}
errno = 0;
char *end = nullptr;
const long parsed = std::strtol(value, &end, 10);
if (errno != 0 || end == value || *end != '\0') {
return false;
}
if (parsed < -2147483647L - 1L || parsed > 2147483647L) {
return false;
}
*out = static_cast<int>(parsed);
return true;
}
inline bool parseLongLongArgument(const std::string &value, long long *out) {
if (value.empty() || out == nullptr) {
return false;
}
errno = 0;
char *end = nullptr;
const long long parsed = std::strtoll(value.c_str(), &end, 10);
if (errno != 0 || end == value.c_str() || *end != '\0') {
return false;
}
*out = parsed;
return true;
}
inline bool parseFloatArgument(const std::string &value, float *out) {
if (value.empty() || out == nullptr) {
return false;
}
errno = 0;
char *end = nullptr;
const float parsed = std::strtof(value.c_str(), &end);
if (errno != 0 || end == value.c_str() || *end != '\0' || !std::isfinite(parsed)) {
return false;
}
*out = parsed;
return true;
}
inline std::string trimCopy(const std::string &value) {
const std::string whitespace = " \t\r\n";
const size_t begin = value.find_first_not_of(whitespace);
if (begin == std::string::npos) {
return "";
}
const size_t end = value.find_last_not_of(whitespace);
return value.substr(begin, end - begin + 1);
}
inline std::vector<std::string> splitCsvLine(const std::string &line) {
std::vector<std::string> columns;
std::stringstream input(line);
std::string column;
while (std::getline(input, column, ',')) {
columns.push_back(trimCopy(column));
}
return columns;
}
inline std::string trajectoryCsvHeader() {
return "sample_index,elapsed_ms,"
"j1_deg,j2_deg,j3_deg,j4_deg,j5_deg,j6_deg,j7_deg,"
"tcp_x_m,tcp_y_m,tcp_z_m,tcp_rx_rad,tcp_ry_rad,tcp_rz_rad";
}
inline bool ensureDirectoryExists(const std::string &path) {
struct stat status = {};
if (::stat(path.c_str(), &status) == 0 && S_ISDIR(status.st_mode)) {
return true;
}
if (::mkdir(path.c_str(), 0755) == 0) {
return true;
}
std::cerr << "Failed to create directory: " << path << '\n';
return false;
}
inline std::string timestampString() {
const std::time_t now = std::time(nullptr);
std::tm local_time = {};
localtime_r(&now, &local_time);
std::ostringstream out;
out << std::put_time(&local_time, "%Y%m%d_%H%M%S");
return out.str();
}
inline std::string defaultTrajectoryDirectory() {
const std::string reports = std::string(LINKERHAND_PROJECT_ROOT) + "/reports";
const std::string trajectories = reports + "/realman_trajectories";
ensureDirectoryExists(reports);
ensureDirectoryExists(trajectories);
return trajectories;
}
inline std::string defaultRecordedTrajectoryPath() {
return defaultTrajectoryDirectory() + "/rm75_trajectory_" + timestampString() + ".csv";
}
inline bool poseIsFinite(const rm_pose_t &pose) {
return std::isfinite(pose.position.x) && std::isfinite(pose.position.y) &&
std::isfinite(pose.position.z) && std::isfinite(pose.euler.rx) &&
std::isfinite(pose.euler.ry) && std::isfinite(pose.euler.rz);
}
inline bool trajectoryPointIsFinite(const TrajectoryPoint &point) {
for (float joint : point.joint_deg) {
if (!std::isfinite(joint)) {
return false;
}
}
return poseIsFinite(point.tcp_pose);
}
inline void writeTrajectoryPointCsv(std::ostream *out, int sample_index, const TrajectoryPoint &point) {
if (out == nullptr) {
return;
}
*out << sample_index << ',' << point.elapsed_ms;
for (float joint : point.joint_deg) {
*out << ',' << std::fixed << std::setprecision(6) << joint;
}
*out << ',' << point.tcp_pose.position.x
<< ',' << point.tcp_pose.position.y
<< ',' << point.tcp_pose.position.z
<< ',' << point.tcp_pose.euler.rx
<< ',' << point.tcp_pose.euler.ry
<< ',' << point.tcp_pose.euler.rz << '\n';
}
inline bool parseTrajectoryPointColumns(const std::vector<std::string> &columns,
int line_number,
TrajectoryPoint *point) {
if (columns.size() != kCsvColumnCount || point == nullptr) {
std::cerr << "CSV line " << line_number << " must have " << kCsvColumnCount << " columns.\n";
return false;
}
long long ignored_sample_index = 0;
if (!parseLongLongArgument(columns[0], &ignored_sample_index) ||
!parseLongLongArgument(columns[1], &point->elapsed_ms)) {
std::cerr << "CSV line " << line_number << " has invalid sample_index or elapsed_ms.\n";
return false;
}
for (int i = 0; i < ARM_DOF; ++i) {
if (!parseFloatArgument(columns[2 + i], &point->joint_deg[static_cast<size_t>(i)])) {
std::cerr << "CSV line " << line_number << " has invalid joint value J" << (i + 1) << ".\n";
return false;
}
}
return parseFloatArgument(columns[9], &point->tcp_pose.position.x) &&
parseFloatArgument(columns[10], &point->tcp_pose.position.y) &&
parseFloatArgument(columns[11], &point->tcp_pose.position.z) &&
parseFloatArgument(columns[12], &point->tcp_pose.euler.rx) &&
parseFloatArgument(columns[13], &point->tcp_pose.euler.ry) &&
parseFloatArgument(columns[14], &point->tcp_pose.euler.rz);
}
inline bool loadTrajectoryCsv(const std::string &csv_path, std::vector<TrajectoryPoint> *points) {
if (points == nullptr) {
return false;
}
std::ifstream input(csv_path);
if (!input) {
std::cerr << "Failed to open trajectory CSV: " << csv_path << '\n';
return false;
}
points->clear();
std::string line;
int line_number = 0;
while (std::getline(input, line)) {
++line_number;
if (line_number == 1 || trimCopy(line).empty()) {
continue;
}
TrajectoryPoint point = {};
if (!parseTrajectoryPointColumns(splitCsvLine(line), line_number, &point)) {
return false;
}
if (!trajectoryPointIsFinite(point)) {
std::cerr << "CSV line " << line_number << " contains non-finite values.\n";
return false;
}
points->push_back(point);
}
if (points->empty()) {
std::cerr << "Trajectory CSV has no trajectory points: " << csv_path << '\n';
return false;
}
return true;
}
inline bool readCurrentArmState(rm_robot_handle *handle, rm_current_arm_state_t *state) {
const int result = rm_get_current_arm_state(handle, state);
if (result != 0) {
std::cerr << "rm_get_current_arm_state failed, error code: " << result << '\n';
return false;
}
return true;
}
inline bool readAndValidateRobotDof(rm_robot_handle *handle, int *dof) {
rm_robot_info_t robot_info = {};
const int result = rm_get_robot_info(handle, &robot_info);
if (result != 0) {
std::cerr << "rm_get_robot_info failed, error code: " << result << '\n';
return false;
}
*dof = static_cast<int>(robot_info.arm_dof);
if (*dof != kExpectedRm75Dof || *dof <= 0 || *dof > ARM_DOF) {
std::cerr << "Expected RM75 DOF " << kExpectedRm75Dof << ", actual DOF: " << *dof << '\n';
return false;
}
return true;
}
inline std::string formatJoints(const std::array<float, ARM_DOF> &joints, int dof) {
std::ostringstream out;
out << std::fixed << std::setprecision(3);
for (int i = 0; i < dof; ++i) {
out << (i == 0 ? "[" : ", ") << "J" << (i + 1) << "=" << joints[static_cast<size_t>(i)];
}
out << "]";
return out.str();
}
inline float maxAbsJointDelta(const std::array<float, ARM_DOF> &first,
const std::array<float, ARM_DOF> &second,
int dof) {
float max_delta = 0.0F;
for (int i = 0; i < dof; ++i) {
const float delta = std::fabs(first[static_cast<size_t>(i)] - second[static_cast<size_t>(i)]);
max_delta = std::max(max_delta, delta);
}
return max_delta;
}
inline std::array<float, ARM_DOF> copyJointArray(const float source[ARM_DOF]) {
std::array<float, ARM_DOF> joints = {};
for (int i = 0; i < ARM_DOF; ++i) {
joints[static_cast<size_t>(i)] = source[i];
}
return joints;
}
class RobotSession {
public:
explicit RobotSession(RobotConnectionConfig config)
: config_(std::move(config)) {}
RobotSession(const RobotSession &) = delete;
RobotSession &operator=(const RobotSession &) = delete;
~RobotSession() {
if (handle_ != nullptr) {
const int delete_result = rm_delete_robot_arm(handle_);
if (delete_result != 0) {
std::cerr << "rm_delete_robot_arm failed, error code: " << delete_result << '\n';
}
}
if (initialized_) {
const int destroy_result = destroyApi();
if (destroy_result != 0) {
std::cerr << "RealMan API destroy failed, error code: " << destroy_result << '\n';
}
}
}
bool connect() {
rm_set_log_call_back(apiLogCallback, 2);
rm_set_timeout(config_.timeout_ms);
const int init_result = rm_init(RM_TRIPLE_MODE_E);
initialized_ = init_result == 0;
if (!initialized_) {
std::cerr << "rm_init failed, error code: " << init_result << '\n';
return false;
}
std::cout << "Connecting to " << config_.robot_ip << ':' << config_.robot_port << "...\n";
handle_ = rm_create_robot_arm(config_.robot_ip.c_str(), config_.robot_port);
if (handle_ == nullptr || handle_->id < 0) {
std::cerr << "Failed to connect to RealMan arm.\n";
return false;
}
return true;
}
rm_robot_handle *handle() const {
return handle_;
}
private:
RobotConnectionConfig config_;
rm_robot_handle *handle_ = nullptr;
bool initialized_ = false;
};
} // namespace realman_trajectory
#include "realman_trajectory_common.hpp"
#include <thread>
namespace {
using realman_trajectory::RobotConnectionConfig;
using realman_trajectory::RobotSession;
using realman_trajectory::TrajectoryPoint;
constexpr int kDefaultDurationSeconds = 10;
constexpr int kDefaultSamplePeriodMs = 100;
constexpr int kMinimumSamplePeriodMs = 50;
constexpr int kMaximumDurationSeconds = 3600;
struct RecordConfig {
std::string output_csv_path;
int duration_seconds = kDefaultDurationSeconds;
int sample_period_ms = kDefaultSamplePeriodMs;
RobotConnectionConfig robot;
};
void printUsage(const char *program_name) {
std::cout << "Usage: " << program_name
<< " [output_csv] [duration_seconds] [sample_period_ms] [robot_ip] [port] [timeout_ms]\n"
<< "\n"
<< "Examples:\n"
<< " " << program_name << "\n"
<< " " << program_name << " reports/realman_trajectories/demo.csv 15 100\n"
<< "\n"
<< "This program only records current joints and TCP pose. It does not send motion commands.\n";
}
bool parseRecordArguments(int argc, char **argv, RecordConfig *config) {
if (config == nullptr) {
return false;
}
if (argc > 1 && (std::string(argv[1]) == "-h" || std::string(argv[1]) == "--help")) {
printUsage(argv[0]);
std::exit(0);
}
if (argc > 1) {
config->output_csv_path = argv[1];
}
if (argc > 2 && !realman_trajectory::parseIntArgument(argv[2], &config->duration_seconds)) {
std::cerr << "Invalid duration_seconds: " << argv[2] << '\n';
return false;
}
if (argc > 3 && !realman_trajectory::parseIntArgument(argv[3], &config->sample_period_ms)) {
std::cerr << "Invalid sample_period_ms: " << argv[3] << '\n';
return false;
}
if (argc > 4) {
config->robot.robot_ip = argv[4];
}
if (argc > 5 && !realman_trajectory::parseIntArgument(argv[5], &config->robot.robot_port)) {
std::cerr << "Invalid port: " << argv[5] << '\n';
return false;
}
if (argc > 6 && !realman_trajectory::parseIntArgument(argv[6], &config->robot.timeout_ms)) {
std::cerr << "Invalid timeout_ms: " << argv[6] << '\n';
return false;
}
if (argc > 7) {
std::cerr << "Too many arguments.\n";
return false;
}
if (config->output_csv_path.empty()) {
config->output_csv_path = realman_trajectory::defaultRecordedTrajectoryPath();
}
return true;
}
bool validateRecordConfig(const RecordConfig &config) {
if (config.output_csv_path.empty()) {
std::cerr << "output_csv must not be empty.\n";
return false;
}
if (config.duration_seconds <= 0 || config.duration_seconds > kMaximumDurationSeconds) {
std::cerr << "duration_seconds must be in range 1.." << kMaximumDurationSeconds << ".\n";
return false;
}
if (config.sample_period_ms < kMinimumSamplePeriodMs) {
std::cerr << "sample_period_ms must be at least " << kMinimumSamplePeriodMs << ".\n";
return false;
}
if (config.robot.robot_port <= 0 || config.robot.robot_port > 65535) {
std::cerr << "port must be in range 1..65535.\n";
return false;
}
return config.robot.timeout_ms > 0;
}
TrajectoryPoint makeTrajectoryPoint(long long elapsed_ms, const rm_current_arm_state_t &state) {
TrajectoryPoint point = {};
point.elapsed_ms = elapsed_ms;
point.joint_deg = realman_trajectory::copyJointArray(state.joint);
point.tcp_pose = state.pose;
return point;
}
bool recordTrajectoryCsv(rm_robot_handle *handle, const RecordConfig &config, int dof) {
std::ofstream output(config.output_csv_path);
if (!output) {
std::cerr << "Failed to open output CSV: " << config.output_csv_path << '\n';
return false;
}
output << realman_trajectory::trajectoryCsvHeader() << '\n';
const auto start_time = std::chrono::steady_clock::now();
const int total_samples = (config.duration_seconds * 1000) / config.sample_period_ms + 1;
for (int sample_index = 0; sample_index < total_samples; ++sample_index) {
const auto target_time = start_time + std::chrono::milliseconds(sample_index * config.sample_period_ms);
std::this_thread::sleep_until(target_time);
rm_current_arm_state_t state = {};
if (!realman_trajectory::readCurrentArmState(handle, &state)) {
return false;
}
const auto now = std::chrono::steady_clock::now();
const long long elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>(now - start_time).count();
const TrajectoryPoint point = makeTrajectoryPoint(elapsed_ms, state);
realman_trajectory::writeTrajectoryPointCsv(&output, sample_index, point);
if (sample_index == 0 || sample_index == total_samples - 1) {
std::cout << "Sample " << sample_index << " joints "
<< realman_trajectory::formatJoints(point.joint_deg, dof) << '\n';
}
}
std::cout << "Recorded " << total_samples << " samples to " << config.output_csv_path << '\n';
return true;
}
} // namespace
int main(int argc, char **argv) {
std::cout.setf(std::ios::unitbuf);
std::cerr.setf(std::ios::unitbuf);
RecordConfig config;
if (!parseRecordArguments(argc, argv, &config) || !validateRecordConfig(config)) {
printUsage(argv[0]);
return 64;
}
RobotSession session(config.robot);
if (!session.connect()) {
return 1;
}
int dof = 0;
if (!realman_trajectory::readAndValidateRobotDof(session.handle(), &dof)) {
return 2;
}
if (!recordTrajectoryCsv(session.handle(), config, dof)) {
return 3;
}
return 0;
}
#include "realman_trajectory_common.hpp"
#include <thread>
namespace {
using realman_trajectory::RobotConnectionConfig;
using realman_trajectory::RobotSession;
using realman_trajectory::TrajectoryPoint;
constexpr int kDefaultReplaySpeedPercent = 5;
constexpr int kMaximumReplaySpeedPercent = 20;
constexpr float kDefaultMaxStepDeltaDeg = 5.0F;
constexpr float kDefaultStartToleranceDeg = 5.0F;
constexpr int kSafetyCountdownSeconds = 5;
struct ReplayConfig {
std::string input_csv_path;
bool execute_motion = false;
int speed_percent = kDefaultReplaySpeedPercent;
float max_step_delta_deg = kDefaultMaxStepDeltaDeg;
float start_tolerance_deg = kDefaultStartToleranceDeg;
RobotConnectionConfig robot;
};
void printUsage(const char *program_name) {
std::cout << "Usage: " << program_name
<< " <input_csv> [dry-run|execute] [speed_percent] [max_step_delta_deg]"
<< " [start_tolerance_deg] [robot_ip] [port] [timeout_ms]\n"
<< "\n"
<< "Examples:\n"
<< " " << program_name << " reports/realman_trajectories/demo.csv dry-run\n"
<< " " << program_name << " reports/realman_trajectories/demo.csv execute 5 5 5\n"
<< "\n"
<< "Dry-run is the default. Use execute only with a clear workspace and reachable E-stop.\n";
}
bool parseReplayMode(const char *value, ReplayConfig *config) {
if (value == nullptr || config == nullptr) {
return false;
}
const std::string mode = value;
if (mode == "dry-run") {
config->execute_motion = false;
return true;
}
if (mode == "execute") {
config->execute_motion = true;
return true;
}
std::cerr << "Replay mode must be dry-run or execute. Actual: " << mode << '\n';
return false;
}
bool parseReplayArguments(int argc, char **argv, ReplayConfig *config) {
if (config == nullptr) {
return false;
}
if (argc > 1 && (std::string(argv[1]) == "-h" || std::string(argv[1]) == "--help")) {
printUsage(argv[0]);
std::exit(0);
}
if (argc < 2) {
std::cerr << "input_csv is required.\n";
return false;
}
config->input_csv_path = argv[1];
if (argc > 2 && !parseReplayMode(argv[2], config)) {
return false;
}
if (argc > 3 && !realman_trajectory::parseIntArgument(argv[3], &config->speed_percent)) {
std::cerr << "Invalid speed_percent: " << argv[3] << '\n';
return false;
}
if (argc > 4 && !realman_trajectory::parseFloatArgument(argv[4], &config->max_step_delta_deg)) {
std::cerr << "Invalid max_step_delta_deg: " << argv[4] << '\n';
return false;
}
if (argc > 5 && !realman_trajectory::parseFloatArgument(argv[5], &config->start_tolerance_deg)) {
std::cerr << "Invalid start_tolerance_deg: " << argv[5] << '\n';
return false;
}
return argc <= 9;
}
bool parseReplayConnectionArguments(int argc, char **argv, ReplayConfig *config) {
if (argc > 6) {
config->robot.robot_ip = argv[6];
}
if (argc > 7 && !realman_trajectory::parseIntArgument(argv[7], &config->robot.robot_port)) {
std::cerr << "Invalid port: " << argv[7] << '\n';
return false;
}
if (argc > 8 && !realman_trajectory::parseIntArgument(argv[8], &config->robot.timeout_ms)) {
std::cerr << "Invalid timeout_ms: " << argv[8] << '\n';
return false;
}
if (argc > 9) {
std::cerr << "Too many arguments.\n";
return false;
}
return true;
}
bool validateReplayConfig(const ReplayConfig &config) {
if (config.input_csv_path.empty()) {
std::cerr << "input_csv must not be empty.\n";
return false;
}
if (config.speed_percent <= 0 || config.speed_percent > kMaximumReplaySpeedPercent) {
std::cerr << "speed_percent must be in range 1.." << kMaximumReplaySpeedPercent << ".\n";
return false;
}
if (config.max_step_delta_deg <= 0.0F || config.start_tolerance_deg <= 0.0F) {
std::cerr << "max_step_delta_deg and start_tolerance_deg must be greater than 0.\n";
return false;
}
return config.robot.robot_port > 0 && config.robot.robot_port <= 65535 && config.robot.timeout_ms > 0;
}
bool validateConsecutiveStepDeltas(const std::vector<TrajectoryPoint> &points,
int dof,
float max_step_delta_deg) {
for (size_t i = 1; i < points.size(); ++i) {
const float step_delta = realman_trajectory::maxAbsJointDelta(points[i - 1].joint_deg, points[i].joint_deg, dof);
if (step_delta > max_step_delta_deg) {
std::cerr << "Refuse trajectory: step " << i << " joint delta " << step_delta
<< " deg exceeds limit " << max_step_delta_deg << " deg.\n";
return false;
}
}
return true;
}
bool validateRobotStartsNearFirstPoint(rm_robot_handle *handle,
const TrajectoryPoint &first_point,
int dof,
float tolerance_deg) {
rm_current_arm_state_t current_state = {};
if (!realman_trajectory::readCurrentArmState(handle, &current_state)) {
return false;
}
const std::array<float, ARM_DOF> current_joints = realman_trajectory::copyJointArray(current_state.joint);
const float start_delta = realman_trajectory::maxAbsJointDelta(current_joints, first_point.joint_deg, dof);
std::cout << "Current joints: " << realman_trajectory::formatJoints(current_joints, dof) << '\n';
std::cout << "CSV first point: " << realman_trajectory::formatJoints(first_point.joint_deg, dof) << '\n';
if (start_delta > tolerance_deg) {
std::cerr << "Robot is not near the first trajectory point. Max delta " << start_delta
<< " deg exceeds tolerance " << tolerance_deg << " deg.\n";
return false;
}
return true;
}
void countdownBeforeMotion() {
std::cout << "Safety countdown before trajectory replay.\n";
for (int second = kSafetyCountdownSeconds; second > 0; --second) {
std::cout << "Moving in " << second << "...\n";
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
bool sendJointPoint(rm_robot_handle *handle, const TrajectoryPoint &point, int speed_percent) {
const int result = rm_movej(handle, point.joint_deg.data(), speed_percent, 0, 0, 1);
if (result != 0) {
std::cerr << "rm_movej failed, error code: " << result << '\n';
const int stop_result = rm_set_arm_stop(handle);
if (stop_result != 0) {
std::cerr << "rm_set_arm_stop failed, error code: " << stop_result << '\n';
}
return false;
}
return true;
}
bool replayTrajectory(rm_robot_handle *handle,
const std::vector<TrajectoryPoint> &points,
const ReplayConfig &config,
int dof) {
countdownBeforeMotion();
for (size_t i = 1; i < points.size(); ++i) {
if (!sendJointPoint(handle, points[i], config.speed_percent)) {
return false;
}
if (i == points.size() - 1 || i % 10 == 0) {
std::cout << "Reached point " << i << "/" << (points.size() - 1)
<< " joints " << realman_trajectory::formatJoints(points[i].joint_deg, dof) << '\n';
}
}
return true;
}
void printTrajectorySummary(const std::vector<TrajectoryPoint> &points, int dof) {
std::cout << "Loaded " << points.size() << " trajectory points.\n";
std::cout << "First point: " << realman_trajectory::formatJoints(points.front().joint_deg, dof) << '\n';
std::cout << "Last point: " << realman_trajectory::formatJoints(points.back().joint_deg, dof) << '\n';
}
} // namespace
int main(int argc, char **argv) {
std::cout.setf(std::ios::unitbuf);
std::cerr.setf(std::ios::unitbuf);
ReplayConfig config;
if (!parseReplayArguments(argc, argv, &config) ||
!parseReplayConnectionArguments(argc, argv, &config) ||
!validateReplayConfig(config)) {
printUsage(argv[0]);
return 64;
}
std::vector<TrajectoryPoint> trajectory_points;
if (!realman_trajectory::loadTrajectoryCsv(config.input_csv_path, &trajectory_points)) {
return 1;
}
const int dof = realman_trajectory::kExpectedRm75Dof;
printTrajectorySummary(trajectory_points, dof);
if (!validateConsecutiveStepDeltas(trajectory_points, dof, config.max_step_delta_deg)) {
return 2;
}
if (!config.execute_motion) {
std::cout << "Dry-run finished. No motion command was sent.\n";
return 0;
}
RobotSession session(config.robot);
if (!session.connect()) {
return 3;
}
int robot_dof = 0;
if (!realman_trajectory::readAndValidateRobotDof(session.handle(), &robot_dof)) {
return 4;
}
if (!validateRobotStartsNearFirstPoint(session.handle(), trajectory_points.front(), robot_dof, config.start_tolerance_deg)) {
return 5;
}
if (!replayTrajectory(session.handle(), trajectory_points, config, robot_dof)) {
return 6;
}
std::cout << "Trajectory replay finished successfully.\n";
return 0;
}
# 睿尔曼机械臂力/力矩与关节指标测试报告
| 项目 | 值 |
| --- | --- |
| 测试时间 | `20260701_151000` |
| 控制器地址 | `192.168.1.18:8080` |
| API 版本 | `v1.1.5` |
| 产品版本 | `RM75-6FB` |
| 软件控制器版本 | `` |
| 控制器代际 | `3` |
| 自由度 | `7` |
| 力传感器类型 | `Integrated 6D force` |
| 原始 CSV | `/home/mashiro/project/linkerhand-cpp-sdk/reports/realman_metrics_latest.csv` |
## 测试范围
- 已测试:六维力/力矩传感器读数、静态噪声/漂移、关节电流/电压/温度、控制器电压/电流/温度、低速小幅关节运动跟踪误差。
- 未测试:接触式力位混合控制闭环精度、外部负载下输出力矩精度、碰撞阈值。这些需要固定工装、标定砝码/力传感器和明确接触方向。
- SDK 当前暴露的是关节电流和末端六维力/力矩数据,没有裸关节力矩指令接口;因此本文中的关节侧“力矩相关”指标以电流作为负载代理量。
## 采样概况
| Phase | 样本数 |
| --- | ---: |
| `static_baseline` | 118 |
| `move_positive` | 14 |
| `return_positive` | 12 |
| `move_negative` | 13 |
| `return_negative` | 13 |
| `final_static` | 36 |
| **合计** | **206** |
## 静态六维力/力矩噪声
单位:`Fx/Fy/Fz = N`,`Mx/My/Mz = Nm`。统计对象为系统外受力 `zero_force_data`。
| 轴 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| Fx | 154 | -0.3477 | 0.0705 | -0.5400 | -0.1990 | 0.3410 | N |
| Fy | 154 | 0.2370 | 0.0779 | 0.0670 | 0.4430 | 0.3760 | N |
| Fz | 154 | -0.5346 | 0.0887 | -0.7630 | -0.2650 | 0.4980 | N |
| Mx | 154 | 0.0298 | 0.0013 | 0.0270 | 0.0330 | 0.0060 | Nm |
| My | 154 | 0.0045 | 0.0014 | 0.0010 | 0.0080 | 0.0070 | Nm |
| Mz | 154 | -0.0215 | 0.0039 | -0.0300 | -0.0130 | 0.0170 | Nm |
## 静态关节电流
| 关节 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| J1 | 154 | -55.6558 | 47.3187 | -163.0000 | 6.0000 | 169.0000 | mA |
| J2 | 154 | 52.0519 | 58.5963 | -19.0000 | 403.0000 | 422.0000 | mA |
| J3 | 154 | 19.2987 | 175.7725 | -158.0000 | 454.0000 | 612.0000 | mA |
| J4 | 154 | 471.2727 | 167.7482 | 139.0000 | 604.0000 | 465.0000 | mA |
| J5 | 154 | 23.9740 | 67.6378 | -123.0000 | 81.0000 | 204.0000 | mA |
| J6 | 154 | -52.0000 | 77.8223 | -113.0000 | 141.0000 | 254.0000 | mA |
| J7 | 154 | 72.8377 | 11.9883 | 43.0000 | 115.0000 | 72.0000 | mA |
## 运动过程关节电流
| 关节 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| J1 | 52 | -150.1154 | 29.9435 | -217.0000 | -44.0000 | 173.0000 | mA |
| J2 | 52 | 15.9615 | 478.3927 | -694.0000 | 740.0000 | 1434.0000 | mA |
| J3 | 52 | 78.9423 | 304.9889 | -505.0000 | 365.0000 | 870.0000 | mA |
| J4 | 52 | 320.8846 | 158.5494 | 177.0000 | 592.0000 | 415.0000 | mA |
| J5 | 52 | 8.1731 | 40.3406 | -63.0000 | 74.0000 | 137.0000 | mA |
| J6 | 52 | 64.4615 | 59.2388 | -97.0000 | 143.0000 | 240.0000 | mA |
| J7 | 52 | 77.8462 | 9.5945 | 62.0000 | 100.0000 | 38.0000 | mA |
## 低速小幅运动跟踪
| 步骤 | 持续时间 s | 到位最大关节误差 deg |
| --- | ---: | ---: |
| J2 +delta | 1.148 | 0.0030 |
| return from +delta | 1.148 | 0.0040 |
| J2 -delta | 1.154 | 0.0200 |
| return from -delta | 1.151 | 0.0160 |
运动测试结果:`通过`。
## 控制器状态
| 指标 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| controller_voltage | 206 | 23.3328 | 0.0149 | 23.2890 | 23.3720 | 0.0830 | V |
| controller_current | 206 | 0.5883 | 0.0092 | 0.5650 | 0.6140 | 0.0490 | A |
| controller_temperature | 206 | 35.1682 | 0.0992 | 34.9540 | 35.3530 | 0.3990 | C |
## 接口失败计数
| 接口 | 失败次数 |
| --- | ---: |
| rm_get_current_arm_state | 0 |
| rm_get_current_joint_current | 0 |
| rm_get_current_joint_voltage | 0 |
| rm_get_current_joint_temperature | 0 |
| rm_get_force_data | 0 |
| rm_get_controller_state | 0 |
## 结论
- 本次测试可以评估静态六维力/力矩读数稳定性、关节电流负载变化、基础运动到位误差和控制器供电状态。
- 若要测试真实接触力控或力矩输出能力,需要增加外部测力设备、刚性固定治具、接触方向限位和急停监护,再启用 `rm_set_force_position` 或 `rm_force_position_move_*`
# realman_hw_connection
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| api_version | INFO | v1.1.5 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| expected_integrated_6d_force | PASS | actual=Integrated 6D force |
| controller_generation_valid | PASS | actual=3 |
| rm_get_arm_software_info | PASS | error=0 |
| product_version | INFO | RM75-6FB |
| product_version_not_empty | PASS | RM75-6FB |
Assertions: 8, failures: 0
# realman_hw_connection
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| api_version | INFO | v1.1.5 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| expected_integrated_6d_force | PASS | actual=Integrated 6D force |
| controller_generation_valid | PASS | actual=3 |
| rm_get_arm_software_info | PASS | error=0 |
| product_version | INFO | RM75-6FB |
| product_version_not_empty | PASS | RM75-6FB |
Assertions: 8, failures: 0
# realman_hw_controller_state
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_controller_state_samples | PASS | failures=0 |
| controller_voltage_mean_V | INFO | 23.340700 |
| controller_current_mean_A | INFO | 0.601900 |
| controller_temperature_mean_C | INFO | 51.690701 |
| controller_voltage_range | PASS | |
| controller_current_range | PASS | |
| controller_temperature_range | PASS | |
| controller_error_flag_zero | PASS | nonzero=0 |
Assertions: 7, failures: 0
# realman_hw_controller_state
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_controller_state_samples | PASS | failures=0 |
| controller_voltage_mean_V | INFO | 23.340700 |
| controller_current_mean_A | INFO | 0.601900 |
| controller_temperature_mean_C | INFO | 51.690701 |
| controller_voltage_range | PASS | |
| controller_current_range | PASS | |
| controller_temperature_range | PASS | |
| controller_error_flag_zero | PASS | nonzero=0 |
Assertions: 7, failures: 0
# realman_hw_force_retreat_hold
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| six_axis_force_supported | PASS | actual=Integrated 6D force |
| force_threshold_gt_release | PASS | |
| retreat_step_safe | PASS | step_m=0.004000 |
| max_cumulative_retreat_safe | PASS | max_m=0.120000 |
| retreat_speed_safe | PASS | speed_percent=3 |
| retreat_direction_sign_valid | PASS | sign=1.000000 |
| stop_reason | INFO | signal_requested |
| move_count | INFO | 0 |
| cumulative_retreat_m | INFO | 0.000000 |
| force_retreat_hold_sequence_ok | PASS | |
Assertions: 10, failures: 0
# realman_hw_force_retreat_hold
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| six_axis_force_supported | PASS | actual=Integrated 6D force |
| force_threshold_gt_release | PASS | |
| retreat_step_range_safe | PASS | min_m=0.004000, max_m=0.014000 |
| retreat_step_gain_safe | PASS | gain_m_per_N=0.001500 |
| max_cumulative_retreat_safe | PASS | max_m=0.200000 |
| retreat_speed_range_safe | PASS | min_percent=2, max_percent=15 |
| retreat_speed_gain_safe | PASS | gain_percent_per_N=1.500000 |
| retreat_direction_sign_valid | PASS | sign=1.000000 |
| stop_reason | INFO | signal_requested |
| move_count | INFO | 0 |
| cumulative_retreat_m | INFO | 0.000000 |
| force_retreat_hold_sequence_ok | PASS | |
Assertions: 12, failures: 0
# realman_hw_force_retreat_hold
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| six_axis_force_supported | PASS | actual=Integrated 6D force |
| force_threshold_gt_release | PASS | |
| retreat_step_range_safe | PASS | min_m=0.004000, max_m=0.014000 |
| retreat_step_gain_safe | PASS | gain_m_per_N=0.001500 |
| max_cumulative_retreat_safe | PASS | max_m=0.200000 |
| retreat_speed_range_safe | PASS | min_percent=2, max_percent=15 |
| retreat_speed_gain_safe | PASS | gain_percent_per_N=1.500000 |
| retreat_direction_sign_valid | PASS | sign=1.000000 |
| move_1 | INFO | dx=-0.0053, dy=0.0051, dz=0.0010 m, force_norm_N=3.062762, step_m=0.007394, speed_percent=4 |
| move_2 | INFO | dx=-0.0114, dy=0.0079, dz=-0.0020 m, force_norm_N=17.188154, step_m=0.014000, speed_percent=15 |
| move_3 | INFO | dx=-0.0075, dy=0.0063, dz=-0.0020 m, force_norm_N=4.787042, step_m=0.009981, speed_percent=6 |
| move_4 | INFO | dx=-0.0121, dy=0.0064, dz=-0.0029 m, force_norm_N=16.756907, step_m=0.014000, speed_percent=15 |
| move_5 | INFO | dx=-0.0130, dy=0.0043, dz=-0.0028 m, force_norm_N=13.664407, step_m=0.014000, speed_percent=15 |
| move_6 | INFO | dx=-0.0134, dy=0.0029, dz=-0.0029 m, force_norm_N=17.555237, step_m=0.014000, speed_percent=15 |
| move_7 | INFO | dx=-0.0010, dy=-0.0047, dz=-0.0074 m, force_norm_N=4.012828, step_m=0.008819, speed_percent=5 |
| move_8 | INFO | dx=0.0024, dy=-0.0047, dz=-0.0128 m, force_norm_N=7.392604, step_m=0.013889, speed_percent=10 |
| move_9 | INFO | dx=0.0015, dy=-0.0044, dz=-0.0120 m, force_norm_N=6.722959, step_m=0.012884, speed_percent=9 |
| move_10 | INFO | dx=0.0011, dy=-0.0046, dz=-0.0122 m, force_norm_N=6.867019, step_m=0.013101, speed_percent=9 |
| move_11 | INFO | dx=0.0003, dy=-0.0046, dz=-0.0126 m, force_norm_N=7.107656, step_m=0.013461, speed_percent=10 |
| move_12 | INFO | dx=-0.0031, dy=-0.0036, dz=-0.0132 m, force_norm_N=16.401739, step_m=0.014000, speed_percent=15 |
| move_13 | INFO | dx=-0.0028, dy=-0.0036, dz=-0.0132 m, force_norm_N=14.364263, step_m=0.014000, speed_percent=15 |
| move_14 | INFO | dx=-0.0029, dy=-0.0039, dz=-0.0131 m, force_norm_N=11.190488, step_m=0.014000, speed_percent=15 |
| move_15 | INFO | dx=-0.0044, dy=-0.0042, dz=-0.0126 m, force_norm_N=12.655540, step_m=0.014000, speed_percent=15 |
| move_16 | INFO | dx=0.0003, dy=0.0004, dz=0.0058 m, force_norm_N=2.006104, step_m=0.005809, speed_percent=2 |
| max_cumulative_retreat_reached | FAIL | total_m=0.197338 |
| stop_reason | INFO | safety_or_error |
| move_count | INFO | 16 |
| cumulative_retreat_m | INFO | 0.197338 |
| force_retreat_hold_sequence_ok | FAIL | |
Assertions: 13, failures: 2
# realman_hw_force_retreat_hold
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| six_axis_force_supported | PASS | actual=Integrated 6D force |
| force_threshold_gt_release | PASS | |
| retreat_step_range_safe | PASS | min_m=0.004000, max_m=0.014000 |
| retreat_step_gain_safe | PASS | gain_m_per_N=0.001500 |
| max_cumulative_retreat_safe | PASS | max_m=0.200000 |
| retreat_speed_range_safe | PASS | min_percent=2, max_percent=15 |
| retreat_speed_gain_safe | PASS | gain_percent_per_N=1.500000 |
| retreat_direction_sign_valid | PASS | sign=1.000000 |
| move_1 | INFO | dx=-0.0053, dy=0.0051, dz=0.0010 m, force_norm_N=3.062762, step_m=0.007394, speed_percent=4 |
| move_2 | INFO | dx=-0.0114, dy=0.0079, dz=-0.0020 m, force_norm_N=17.188154, step_m=0.014000, speed_percent=15 |
| move_3 | INFO | dx=-0.0075, dy=0.0063, dz=-0.0020 m, force_norm_N=4.787042, step_m=0.009981, speed_percent=6 |
| move_4 | INFO | dx=-0.0121, dy=0.0064, dz=-0.0029 m, force_norm_N=16.756907, step_m=0.014000, speed_percent=15 |
| move_5 | INFO | dx=-0.0130, dy=0.0043, dz=-0.0028 m, force_norm_N=13.664407, step_m=0.014000, speed_percent=15 |
| move_6 | INFO | dx=-0.0134, dy=0.0029, dz=-0.0029 m, force_norm_N=17.555237, step_m=0.014000, speed_percent=15 |
| move_7 | INFO | dx=-0.0010, dy=-0.0047, dz=-0.0074 m, force_norm_N=4.012828, step_m=0.008819, speed_percent=5 |
| move_8 | INFO | dx=0.0024, dy=-0.0047, dz=-0.0128 m, force_norm_N=7.392604, step_m=0.013889, speed_percent=10 |
| move_9 | INFO | dx=0.0015, dy=-0.0044, dz=-0.0120 m, force_norm_N=6.722959, step_m=0.012884, speed_percent=9 |
| move_10 | INFO | dx=0.0011, dy=-0.0046, dz=-0.0122 m, force_norm_N=6.867019, step_m=0.013101, speed_percent=9 |
| move_11 | INFO | dx=0.0003, dy=-0.0046, dz=-0.0126 m, force_norm_N=7.107656, step_m=0.013461, speed_percent=10 |
| move_12 | INFO | dx=-0.0031, dy=-0.0036, dz=-0.0132 m, force_norm_N=16.401739, step_m=0.014000, speed_percent=15 |
| move_13 | INFO | dx=-0.0028, dy=-0.0036, dz=-0.0132 m, force_norm_N=14.364263, step_m=0.014000, speed_percent=15 |
| move_14 | INFO | dx=-0.0029, dy=-0.0039, dz=-0.0131 m, force_norm_N=11.190488, step_m=0.014000, speed_percent=15 |
| move_15 | INFO | dx=-0.0044, dy=-0.0042, dz=-0.0126 m, force_norm_N=12.655540, step_m=0.014000, speed_percent=15 |
| move_16 | INFO | dx=0.0003, dy=0.0004, dz=0.0058 m, force_norm_N=2.006104, step_m=0.005809, speed_percent=2 |
| max_cumulative_retreat_reached | FAIL | total_m=0.197338 |
| stop_reason | INFO | safety_or_error |
| move_count | INFO | 16 |
| cumulative_retreat_m | INFO | 0.197338 |
| force_retreat_hold_sequence_ok | FAIL | |
Assertions: 13, failures: 2
# realman_hw_force_sensor
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| six_axis_force_supported | PASS | actual=Integrated 6D force |
| rm_get_force_data_samples | PASS | failures=0 |
| raw_force_stats | INFO | Fx_mean=0.0648, range=0.8340; Fy_mean=0.4577, range=0.9820; Fz_mean=-1.0225, range=1.6020; Mx_mean=-0.0226, range=0.0140; My_mean=-0.0029, range=0.0110; Mz_mean=0.0000, range=0.0770 |
| zero_force_stats | INFO | Fx_mean=-0.2143, range=0.3000; Fy_mean=0.2472, range=0.2810; Fz_mean=0.2040, range=0.4060; Mx_mean=-0.0012, range=0.0060; My_mean=0.0038, range=0.0040; Mz_mean=-0.0013, range=0.0180 |
| raw_force_mean_within_sensor_range | PASS | |
| zero_force_mean_within_static_range | PASS | |
Assertions: 7, failures: 0
# realman_hw_force_sensor
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| six_axis_force_supported | PASS | actual=Integrated 6D force |
| rm_get_force_data_samples | PASS | failures=0 |
| raw_force_stats | INFO | Fx_mean=0.0648, range=0.8340; Fy_mean=0.4577, range=0.9820; Fz_mean=-1.0225, range=1.6020; Mx_mean=-0.0226, range=0.0140; My_mean=-0.0029, range=0.0110; Mz_mean=0.0000, range=0.0770 |
| zero_force_stats | INFO | Fx_mean=-0.2143, range=0.3000; Fy_mean=0.2472, range=0.2810; Fz_mean=0.2040, range=0.4060; Mx_mean=-0.0012, range=0.0060; My_mean=0.0038, range=0.0040; Mz_mean=-0.0013, range=0.0180 |
| raw_force_mean_within_sensor_range | PASS | |
| zero_force_mean_within_static_range | PASS | |
Assertions: 7, failures: 0
# realman_hw_joint_telemetry
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| rm_get_current_arm_state | PASS | error=0 |
| arm_state_joints_finite | PASS | [J1=-0.001, J2=9.998, J3=0.000, J4=0.000, J5=-0.001, J6=-0.001, J7=0.001] |
| rm_get_joint_degree | PASS | error=0 |
| joint_degree_matches_arm_state | PASS | max_diff_deg=0.003000 |
| rm_get_current_joint_current | PASS | error=0 |
| joint_current_range | PASS | [J1=169.000, J2=-320.000, J3=-13.000, J4=190.000, J5=30.000, J6=28.000, J7=27.000] |
| rm_get_current_joint_voltage | PASS | error=0 |
| joint_voltage_range | PASS | [J1=23.000, J2=22.000, J3=23.000, J4=23.000, J5=23.000, J6=23.000, J7=23.000] |
| rm_get_current_joint_temperature | PASS | error=0 |
| joint_temperature_range | PASS | [J1=40.000, J2=39.000, J3=38.000, J4=38.000, J5=38.000, J6=38.000, J7=41.000] |
| rm_get_joint_en_state | PASS | error=0 |
| all_joints_enabled | PASS | |
| rm_get_joint_err_flag | PASS | error=0 |
| joint_error_flags_zero | PASS | |
Assertions: 18, failures: 0
# realman_hw_joint_telemetry
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| rm_get_current_arm_state | PASS | error=0 |
| arm_state_joints_finite | PASS | [J1=30.017, J2=3.631, J3=0.473, J4=-9.905, J5=-0.083, J6=-8.326, J7=-0.035] |
| rm_get_joint_degree | PASS | error=0 |
| joint_degree_matches_arm_state | PASS | max_diff_deg=0.003000 |
| rm_get_current_joint_current | PASS | error=0 |
| joint_current_range | PASS | [J1=-91.000, J2=95.000, J3=348.000, J4=777.000, J5=250.000, J6=-68.000, J7=84.000] |
| rm_get_current_joint_voltage | PASS | error=0 |
| joint_voltage_range | PASS | [J1=23.000, J2=22.000, J3=23.000, J4=23.000, J5=23.000, J6=23.000, J7=22.000] |
| rm_get_current_joint_temperature | PASS | error=0 |
| joint_temperature_range | PASS | [J1=31.000, J2=30.000, J3=30.000, J4=30.000, J5=31.000, J6=31.000, J7=33.000] |
| rm_get_joint_en_state | PASS | error=0 |
| all_joints_enabled | PASS | |
| rm_get_joint_err_flag | PASS | error=0 |
| joint_error_flags_zero | PASS | |
Assertions: 18, failures: 0
# realman_hw_joint_telemetry
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| rm_get_current_arm_state | PASS | error=0 |
| arm_state_joints_finite | PASS | [J1=30.018, J2=3.628, J3=0.472, J4=-9.902, J5=-0.083, J6=-8.327, J7=-0.035] |
| rm_get_joint_degree | PASS | error=0 |
| joint_degree_matches_arm_state | PASS | max_diff_deg=0.002000 |
| rm_get_current_joint_current | PASS | error=0 |
| joint_current_range | PASS | [J1=-192.000, J2=151.000, J3=-599.000, J4=-215.000, J5=-357.000, J6=26.000, J7=83.000] |
| rm_get_current_joint_voltage | PASS | error=0 |
| joint_voltage_range | PASS | [J1=23.000, J2=22.000, J3=23.000, J4=23.000, J5=23.000, J6=23.000, J7=22.000] |
| rm_get_current_joint_temperature | PASS | error=0 |
| joint_temperature_range | PASS | [J1=32.000, J2=31.000, J3=30.000, J4=30.000, J5=31.000, J6=31.000, J7=34.000] |
| rm_get_joint_en_state | PASS | error=0 |
| all_joints_enabled | PASS | |
| rm_get_joint_err_flag | PASS | error=0 |
| joint_error_flags_zero | PASS | |
Assertions: 18, failures: 0
# realman_hw_joint_telemetry
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| rm_get_current_arm_state | PASS | error=0 |
| arm_state_joints_finite | PASS | [J1=30.017, J2=3.628, J3=0.472, J4=-9.904, J5=-0.085, J6=-8.327, J7=-0.034] |
| rm_get_joint_degree | PASS | error=0 |
| joint_degree_matches_arm_state | PASS | max_diff_deg=0.004000 |
| rm_get_current_joint_current | PASS | error=0 |
| joint_current_range | PASS | [J1=-37.000, J2=101.000, J3=115.000, J4=-77.000, J5=-250.000, J6=121.000, J7=44.000] |
| rm_get_current_joint_voltage | PASS | error=0 |
| joint_voltage_range | PASS | [J1=23.000, J2=22.000, J3=23.000, J4=23.000, J5=23.000, J6=23.000, J7=23.000] |
| rm_get_current_joint_temperature | PASS | error=0 |
| joint_temperature_range | PASS | [J1=32.000, J2=31.000, J3=30.000, J4=31.000, J5=31.000, J6=31.000, J7=34.000] |
| rm_get_joint_en_state | PASS | error=0 |
| all_joints_enabled | PASS | |
| rm_get_joint_err_flag | PASS | error=0 |
| joint_error_flags_zero | PASS | |
Assertions: 18, failures: 0
# realman_hw_joint_telemetry
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| rm_get_current_arm_state | PASS | error=0 |
| arm_state_joints_finite | PASS | [J1=30.017, J2=3.628, J3=0.475, J4=-9.901, J5=-0.085, J6=-8.324, J7=-0.035] |
| rm_get_joint_degree | PASS | error=0 |
| joint_degree_matches_arm_state | PASS | max_diff_deg=0.002000 |
| rm_get_current_joint_current | PASS | error=0 |
| joint_current_range | PASS | [J1=-174.000, J2=78.000, J3=-85.000, J4=-329.000, J5=-180.000, J6=-61.000, J7=80.000] |
| rm_get_current_joint_voltage | PASS | error=0 |
| joint_voltage_range | PASS | [J1=23.000, J2=22.000, J3=23.000, J4=23.000, J5=23.000, J6=22.000, J7=22.000] |
| rm_get_current_joint_temperature | PASS | error=0 |
| joint_temperature_range | PASS | [J1=32.000, J2=31.000, J3=30.000, J4=31.000, J5=31.000, J6=32.000, J7=34.000] |
| rm_get_joint_en_state | PASS | error=0 |
| all_joints_enabled | PASS | |
| rm_get_joint_err_flag | PASS | error=0 |
| joint_error_flags_zero | PASS | |
Assertions: 18, failures: 0
# realman_hw_joint_telemetry
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| rm_get_current_arm_state | PASS | error=0 |
| arm_state_joints_finite | PASS | [J1=30.017, J2=3.628, J3=0.475, J4=-9.901, J5=-0.085, J6=-8.324, J7=-0.035] |
| rm_get_joint_degree | PASS | error=0 |
| joint_degree_matches_arm_state | PASS | max_diff_deg=0.002000 |
| rm_get_current_joint_current | PASS | error=0 |
| joint_current_range | PASS | [J1=-174.000, J2=78.000, J3=-85.000, J4=-329.000, J5=-180.000, J6=-61.000, J7=80.000] |
| rm_get_current_joint_voltage | PASS | error=0 |
| joint_voltage_range | PASS | [J1=23.000, J2=22.000, J3=23.000, J4=23.000, J5=23.000, J6=22.000, J7=22.000] |
| rm_get_current_joint_temperature | PASS | error=0 |
| joint_temperature_range | PASS | [J1=32.000, J2=31.000, J3=30.000, J4=31.000, J5=31.000, J6=32.000, J7=34.000] |
| rm_get_joint_en_state | PASS | error=0 |
| all_joints_enabled | PASS | |
| rm_get_joint_err_flag | PASS | error=0 |
| joint_error_flags_zero | PASS | |
Assertions: 18, failures: 0
# realman_hw_motion_tracking
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| motion_joint_valid | PASS | |
| motion_delta_safe | PASS | delta_deg=2.000000 |
| motion_speed_safe | PASS | speed_percent=5 |
| read_start_state | PASS | error=0 |
| start_joints | INFO | [J1=-0.001, J2=10.000, J3=0.000, J4=-0.002, J5=-0.001, J6=-0.004, J7=0.000] |
| move_positive_rm_movej | PASS | error=0 |
| move_positive_read_actual | PASS | error=0 |
| move_positive_duration_s | INFO | 0.919758 |
| move_positive_final_error_deg | INFO | 0.010000 |
| move_positive_final_error_limit | PASS | error_deg=0.010000 |
| return_positive_rm_movej | PASS | error=0 |
| return_positive_read_actual | PASS | error=0 |
| return_positive_duration_s | INFO | 0.925660 |
| return_positive_final_error_deg | INFO | 0.002000 |
| return_positive_final_error_limit | PASS | error_deg=0.002000 |
| move_negative_rm_movej | PASS | error=0 |
| move_negative_read_actual | PASS | error=0 |
| move_negative_duration_s | INFO | 0.914565 |
| move_negative_final_error_deg | INFO | 0.012000 |
| move_negative_final_error_limit | PASS | error_deg=0.012000 |
| return_negative_rm_movej | PASS | error=0 |
| return_negative_read_actual | PASS | error=0 |
| return_negative_duration_s | INFO | 0.917783 |
| return_negative_final_error_deg | INFO | 0.008000 |
| return_negative_final_error_limit | PASS | error_deg=0.008000 |
Assertions: 20, failures: 0
# realman_hw_motion_tracking
| Check | Result | Detail |
| --- | --- | --- |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| motion_joint_valid | PASS | |
| motion_delta_safe | PASS | delta_deg=2.000000 |
| motion_speed_safe | PASS | speed_percent=5 |
| read_start_state | PASS | error=0 |
| start_joints | INFO | [J1=-0.001, J2=10.000, J3=0.000, J4=-0.002, J5=-0.001, J6=-0.004, J7=0.000] |
| move_positive_rm_movej | PASS | error=0 |
| move_positive_read_actual | PASS | error=0 |
| move_positive_duration_s | INFO | 0.919758 |
| move_positive_final_error_deg | INFO | 0.010000 |
| move_positive_final_error_limit | PASS | error_deg=0.010000 |
| return_positive_rm_movej | PASS | error=0 |
| return_positive_read_actual | PASS | error=0 |
| return_positive_duration_s | INFO | 0.925660 |
| return_positive_final_error_deg | INFO | 0.002000 |
| return_positive_final_error_limit | PASS | error_deg=0.002000 |
| move_negative_rm_movej | PASS | error=0 |
| move_negative_read_actual | PASS | error=0 |
| move_negative_duration_s | INFO | 0.914565 |
| move_negative_final_error_deg | INFO | 0.012000 |
| move_negative_final_error_limit | PASS | error_deg=0.012000 |
| return_negative_rm_movej | PASS | error=0 |
| return_negative_read_actual | PASS | error=0 |
| return_negative_duration_s | INFO | 0.917783 |
| return_negative_final_error_deg | INFO | 0.008000 |
| return_negative_final_error_limit | PASS | error_deg=0.008000 |
Assertions: 20, failures: 0
timestamp_ms,test_id,robot_model,robot_ip,motion_mode,speed_percent,payload_kg,target_joints_deg,actual_joints_deg,target_tcp_pose,actual_tcp_pose,force_torque,joint_current,joint_temperature,voltage,power,error_code,safety_state,comment
1781261391766,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;0.0010;-0.0010;0.0000;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0500;0.2060;-4.4900;-0.0240;0.0380;-0.0060,114.000;20.000;-129.000;-836.000;-26.000;33.000;28.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.886110,arm_err_len=1;controller_err=0,error_present,ok
1781261391892,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0010;-0.0010;-0.0020;-0.0010;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0740;0.2280;-4.5290;-0.0230;0.0350;-0.0110,123.000;22.000;-120.000;-830.000;-14.000;43.000;23.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.316999,13.780347,arm_err_len=1;controller_err=0,error_present,ok
1781261392020,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0020;0.0000;-0.0020;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0610;0.0290;-4.6740;-0.0270;0.0370;-0.0130,114.000;38.000;-135.000;-831.000;-20.000;47.000;18.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.326000,13.739014,arm_err_len=1;controller_err=0,error_present,ok
1781261392146,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1010;-0.0340;-4.5850;-0.0270;0.0370;-0.0120,105.000;45.000;-128.000;-834.000;-16.000;51.000;16.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.364000,13.808125,arm_err_len=1;controller_err=0,error_present,ok
1781261392270,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0300;0.2840;-4.4640;-0.0220;0.0370;-0.0030,112.000;31.000;-138.000;-835.000;-17.000;38.000;33.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.323000,13.364079,arm_err_len=1;controller_err=0,error_present,ok
1781261392400,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;-0.0010;0.0000;-0.0010;0.0020;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1830;0.1010;-4.6060;-0.0250;0.0380;-0.0200,112.000;23.000;-118.000;-845.000;-12.000;42.000;25.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.353001,13.708212,arm_err_len=1;controller_err=0,error_present,ok
1781261392530,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0020;0.0000;-0.0010;0.0000;-0.0020,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.1170;0.2270;-4.5580;-0.0220;0.0330;-0.0070,101.000;7.000;-107.000;-861.000;-16.000;43.000;10.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.350000,13.939950,arm_err_len=1;controller_err=0,error_present,ok
1781261392658,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0020;0.0010;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0710;-0.0220;-4.8630;-0.0280;0.0370;-0.0180,100.000;5.000;-118.000;-857.000;-19.000;40.000;8.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.368000,13.693649,arm_err_len=1;controller_err=0,error_present,ok
1781261392788,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0020;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0280;0.1950;-4.5580;-0.0240;0.0370;-0.0060,101.000;0.000;-122.000;-840.000;-21.000;28.000;8.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.333000,14.093131,arm_err_len=1;controller_err=0,error_present,ok
1781261392918,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0000;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2150;0.0350;-4.7300;-0.0240;0.0380;-0.0170,109.000;6.000;-117.000;-863.000;-20.000;32.000;27.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.327999,13.670208,arm_err_len=1;controller_err=0,error_present,ok
1781261393042,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0760;0.0330;-4.6650;-0.0260;0.0380;-0.0120,118.000;-2.000;-98.000;-860.000;-29.000;26.000;10.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.358999,13.828528,arm_err_len=1;controller_err=0,error_present,ok
1781261393174,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1600;0.1380;-4.7380;-0.0240;0.0380;-0.0100,125.000;5.000;-103.000;-849.000;-29.000;53.000;6.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.343000,13.819056,arm_err_len=1;controller_err=0,error_present,ok
1781261393314,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1360;0.0080;-4.5340;-0.0260;0.0390;-0.0170,120.000;15.000;-76.000;-830.000;-32.000;38.000;8.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351999,13.707624,arm_err_len=1;controller_err=0,error_present,ok
1781261393438,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1950;0.0630;-4.7210;-0.0250;0.0370;-0.0200,100.000;1.000;-70.000;-844.000;-31.000;10.000;10.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351999,13.707624,arm_err_len=1;controller_err=0,error_present,ok
1781261393568,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1320;0.1070;-4.5190;-0.0250;0.0360;-0.0080,96.000;-14.000;-78.000;-833.000;-22.000;15.000;0.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.348000,13.681928,arm_err_len=1;controller_err=0,error_present,ok
1781261393698,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2100;0.0850;-4.7320;-0.0250;0.0370;-0.0210,90.000;-22.000;-68.000;-842.000;-27.000;43.000;-2.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.330000,14.347950,arm_err_len=1;controller_err=0,error_present,ok
1781261393824,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0020;0.0020;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0520;0.0040;-4.7390;-0.0270;0.0370;-0.0150,100.000;-20.000;-91.000;-845.000;-26.000;27.000;7.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.330000,14.347950,arm_err_len=1;controller_err=0,error_present,ok
1781261393973,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0760;0.1440;-4.6820;-0.0250;0.0370;-0.0160,109.000;-26.000;-57.000;-849.000;-25.000;24.000;11.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337000,13.978862,arm_err_len=1;controller_err=0,error_present,ok
1781261394120,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;-0.0010;-0.0010;-0.0010;-0.0020,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0880;0.0890;-4.7500;-0.0260;0.0380;-0.0200,105.000;0.000;-62.000;-830.000;-20.000;25.000;12.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.349001,13.892656,arm_err_len=1;controller_err=0,error_present,ok
1781261394248,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0370;0.0400;-4.6310;-0.0250;0.0380;-0.0050,115.000;-14.000;-53.000;-839.000;-10.000;24.000;11.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.354000,13.755506,arm_err_len=1;controller_err=0,error_present,ok
1781261394374,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0010;-0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0270;-0.0420;-4.6210;-0.0270;0.0370;-0.0090,111.000;11.000;-57.000;-842.000;-20.000;23.000;0.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.354000,13.755506,arm_err_len=1;controller_err=0,error_present,ok
1781261394508,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0020;0.0020;-0.0020;-0.0010;0.0000;-0.0020,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1580;0.0510;-4.6540;-0.0260;0.0380;-0.0030,117.000;20.000;-68.000;-832.000;-20.000;20.000;-13.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.316000,13.663177,arm_err_len=1;controller_err=0,error_present,ok
1781261394634,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2050;0.1150;-4.8760;-0.0250;0.0380;-0.0190,128.000;35.000;-60.000;-840.000;-13.000;21.000;4.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.362000,14.367630,arm_err_len=1;controller_err=0,error_present,ok
1781261394768,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1450;0.1690;-4.6610;-0.0240;0.0390;-0.0120,127.000;37.000;-51.000;-843.000;-10.000;18.000;-14.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.347000,13.704689,arm_err_len=1;controller_err=0,error_present,ok
1781261394897,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0000;0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0960;0.1200;-4.5880;-0.0240;0.0370;-0.0140,122.000;57.000;-40.000;-839.000;-8.000;28.000;2.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.334000,13.767059,arm_err_len=1;controller_err=0,error_present,ok
1781261395023,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0890;0.1130;-4.3580;-0.0240;0.0380;-0.0040,120.000;61.000;-38.000;-833.000;-12.000;33.000;9.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.309999,13.846139,arm_err_len=1;controller_err=0,error_present,ok
1781261395154,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2610;0.0900;-4.6550;-0.0250;0.0400;-0.0150,111.000;90.000;-49.000;-823.000;-10.000;36.000;13.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.344000,13.819648,arm_err_len=1;controller_err=0,error_present,ok
1781261395278,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1740;0.0030;-4.7640;-0.0250;0.0360;-0.0190,108.000;79.000;-54.000;-822.000;-8.000;19.000;13.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.325001,13.178625,arm_err_len=1;controller_err=0,error_present,ok
1781261395403,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0490;0.2830;-4.3810;-0.0250;0.0350;-0.0080,116.000;93.000;-42.000;-825.000;-17.000;24.000;19.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.344999,14.077034,arm_err_len=1;controller_err=0,error_present,ok
1781261395540,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1430;0.2230;-4.4210;-0.0240;0.0380;-0.0070,119.000;90.000;-62.000;-841.000;-17.000;30.000;18.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.334000,13.743725,arm_err_len=1;controller_err=0,error_present,ok
1781261395685,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0020;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1190;0.0520;-4.7610;-0.0260;0.0370;-0.0170,139.000;95.000;-44.000;-821.000;-20.000;16.000;19.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.343000,13.655655,arm_err_len=1;controller_err=0,error_present,ok
1781261395809,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1160;0.1150;-4.7270;-0.0240;0.0360;-0.0050,126.000;99.000;-58.000;-826.000;-23.000;23.000;16.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.349001,13.845957,arm_err_len=1;controller_err=0,error_present,ok
1781261395935,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1080;-0.0560;-4.5400;-0.0280;0.0380;-0.0130,112.000;118.000;-50.000;-834.000;-29.000;21.000;24.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.341999,13.538359,arm_err_len=1;controller_err=0,error_present,ok
1781261396060,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0640;0.0430;-4.7990;-0.0240;0.0350;-0.0180,110.000;104.000;-62.000;-828.000;-27.000;8.000;12.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.363001,13.807534,arm_err_len=1;controller_err=0,error_present,ok
1781261396188,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;-0.0010;-0.0010;0.0010;0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1400;0.0580;-4.5670;-0.0260;0.0370;-0.0100,109.000;111.000;-70.000;-848.000;-27.000;27.000;15.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.336000,13.581553,arm_err_len=1;controller_err=0,error_present,ok
1781261396319,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0020;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0970;0.1000;-4.4330;-0.0240;0.0370;-0.0120,110.000;112.000;-74.000;-861.000;-28.000;21.000;29.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337000,13.675483,arm_err_len=1;controller_err=0,error_present,ok
1781261396457,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0010;-0.0010;0.0000;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1780;0.1420;-4.6900;-0.0260;0.0380;-0.0140,105.000;133.000;-60.000;-841.000;-20.000;22.000;23.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.346001,13.587373,arm_err_len=1;controller_err=0,error_present,ok
1781261396586,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0000;0.0000;-0.0020;0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0020;0.1810;-4.3340;-0.0240;0.0350;-0.0020,103.000;125.000;-87.000;-852.000;-17.000;12.000;23.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.332001,13.345905,arm_err_len=1;controller_err=0,error_present,ok
1781261396716,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;0.0010;-0.0020;0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1030;0.0290;-4.7850;-0.0270;0.0360;-0.0190,116.000;125.000;-75.000;-855.000;-21.000;24.000;22.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.722744,arm_err_len=1;controller_err=0,error_present,ok
1781261396846,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2830;0.0470;-4.7220;-0.0260;0.0390;-0.0230,115.000;143.000;-44.000;-865.000;-25.000;32.000;19.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.722744,arm_err_len=1;controller_err=0,error_present,ok
1781261396970,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0810;0.3430;-4.5380;-0.0240;0.0380;-0.0040,110.000;136.000;-19.000;-854.000;-17.000;37.000;18.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.340000,13.770599,arm_err_len=1;controller_err=0,error_present,ok
1781261397100,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0020;0.0000;0.0000;-0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0510;0.1340;-4.6430;-0.0250;0.0360;-0.0170,108.000;166.000;-3.000;-863.000;-7.000;22.000;13.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.340000,13.770599,arm_err_len=1;controller_err=0,error_present,ok
1781261397234,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;-0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0200;0.2930;-4.5150;-0.0240;0.0380;-0.0010,100.000;150.000;3.000;-859.000;-8.000;18.000;20.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.313999,13.638689,arm_err_len=1;controller_err=0,error_present,ok
1781261397360,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1800;0.0340;-4.9130;-0.0260;0.0360;-0.0200,88.000;149.000;6.000;-845.000;-17.000;28.000;9.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.358000,14.014800,arm_err_len=1;controller_err=0,error_present,ok
1781261397486,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0520;0.0540;-4.6130;-0.0250;0.0360;-0.0080,94.000;139.000;33.000;-849.000;-10.000;20.000;33.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.329000,13.670795,arm_err_len=1;controller_err=0,error_present,ok
1781261397611,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1190;0.2350;-4.6180;-0.0230;0.0370;-0.0120,89.000;161.000;4.000;-848.000;-21.000;26.000;22.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.329000,13.670795,arm_err_len=1;controller_err=0,error_present,ok
1781261397755,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1840;0.1210;-4.7710;-0.0240;0.0380;-0.0150,90.000;141.000;14.000;-850.000;-16.000;25.000;28.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.862771,arm_err_len=1;controller_err=0,error_present,ok
1781261397898,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1860;0.0150;-4.7950;-0.0270;0.0380;-0.0170,112.000;147.000;6.000;-842.000;-13.000;16.000;38.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.316000,13.709808,arm_err_len=1;controller_err=0,error_present,ok
1781261398030,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0000;-0.0020;0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1690;0.1660;-4.5040;-0.0240;0.0380;-0.0050,98.000;143.000;0.000;-841.000;-7.000;24.000;15.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.346001,13.750794,arm_err_len=1;controller_err=0,error_present,ok
1781261398154,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0000;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1770;0.0390;-4.6530;-0.0250;0.0380;-0.0200,99.000;145.000;1.000;-841.000;-4.000;14.000;35.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.346001,13.750794,arm_err_len=1;controller_err=0,error_present,ok
1781261398279,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;0.0000;-0.0020;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1810;0.0250;-4.7120;-0.0240;0.0390;-0.0130,93.000;166.000;-6.000;-857.000;-9.000;5.000;37.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.302659,arm_err_len=1;controller_err=0,error_present,ok
1781261398405,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0010;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0160;0.2200;-4.6160;-0.0240;0.0390;-0.0080,96.000;170.000;-25.000;-857.000;-7.000;69.000;20.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.365999,13.528913,arm_err_len=1;controller_err=0,error_present,ok
1781261398535,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0000;-0.0010;-0.0020;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0270;0.1490;-4.6390;-0.0260;0.0360;-0.0080,90.000;177.000;-26.000;-867.000;-13.000;55.000;25.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.358000,13.080480,arm_err_len=1;controller_err=0,error_present,ok
1781261398680,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1330;0.1120;-4.6330;-0.0230;0.0380;-0.0060,92.000;183.000;-39.000;-873.000;-8.000;53.000;38.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.358000,13.080480,arm_err_len=1;controller_err=0,error_present,ok
1781261398812,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0020;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0730;0.2120;-4.5130;-0.0240;0.0370;-0.0080,82.000;172.000;-35.000;-871.000;-5.000;41.000;27.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.370001,13.718191,arm_err_len=1;controller_err=0,error_present,ok
1781261398944,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0150;0.1090;-4.5300;-0.0250;0.0350;-0.0170,87.000;155.000;-26.000;-871.000;-14.000;36.000;19.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.365000,14.159190,arm_err_len=1;controller_err=0,error_present,ok
1781261399085,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0440;0.1920;-4.8300;-0.0240;0.0350;-0.0160,89.000;129.000;-35.000;-868.000;-9.000;53.000;40.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.341999,13.655069,arm_err_len=1;controller_err=0,error_present,ok
1781261399213,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0010;0.0000;-0.0020;0.0000;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0210;0.1740;-4.4590;-0.0220;0.0360;-0.0070,81.000;116.000;-34.000;-847.000;-13.000;40.000;33.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.334000,13.977065,arm_err_len=1;controller_err=0,error_present,ok
1781261399338,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2310;0.0320;-4.7270;-0.0270;0.0390;-0.0130,76.000;96.000;-48.000;-853.000;-12.000;42.000;40.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.356001,14.200448,arm_err_len=1;controller_err=0,error_present,ok
1781261399470,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1380;0.0650;-4.6030;-0.0250;0.0400;-0.0120,87.000;62.000;-57.000;-866.000;-15.000;25.000;43.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.347000,13.634648,arm_err_len=1;controller_err=0,error_present,ok
1781261399594,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2260;0.1080;-4.7540;-0.0260;0.0390;-0.0220,89.000;55.000;-40.000;-856.000;-12.000;39.000;26.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.365000,13.808715,arm_err_len=1;controller_err=0,error_present,ok
1781261399726,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0040;0.0020;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00005;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1750;0.0970;-4.6950;-0.0260;0.0390;-0.0140,93.000;38.000;-46.000;-864.000;-11.000;22.000;33.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.353001,13.427975,arm_err_len=1;controller_err=0,error_present,ok
1781261399865,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;-0.0010;-0.0010;0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0670;0.1080;-4.2970;-0.0240;0.0380;-0.0010,107.000;23.000;-59.000;-860.000;-11.000;36.000;34.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.336000,13.978264,arm_err_len=1;controller_err=0,error_present,ok
1781261399991,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0410;0.1370;-4.6640;-0.0240;0.0370;-0.0070,104.000;3.000;-7.000;-858.000;-9.000;41.000;16.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.306000,13.610704,arm_err_len=1;controller_err=0,error_present,ok
1781261400114,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0020;0.0020;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2520;0.1930;-4.7370;-0.0240;0.0390;-0.0140,100.000;-18.000;-19.000;-859.000;-15.000;50.000;26.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.349001,13.729213,arm_err_len=1;controller_err=0,error_present,ok
1781261400244,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0040;0.0000;0.0000;-0.0010;-0.0020;0.0010,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2770;0.0890;-4.7880;-0.0270;0.0390;-0.0140,93.000;-43.000;-32.000;-852.000;-16.000;30.000;32.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.344999,13.423374,arm_err_len=1;controller_err=0,error_present,ok
1781261400375,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0010;-0.0020;0.0000;0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0190;0.1440;-4.6680;-0.0220;0.0380;-0.0100,91.000;-54.000;-36.000;-867.000;-15.000;38.000;36.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.357000,13.780630,arm_err_len=1;controller_err=0,error_present,ok
1781261400500,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1230;-0.0020;-4.7300;-0.0260;0.0370;-0.0100,93.000;-30.000;-37.000;-867.000;-11.000;36.000;46.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.339001,14.050078,arm_err_len=1;controller_err=0,error_present,ok
1781261400631,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1850;0.1200;-4.5760;-0.0230;0.0400;-0.0090,95.000;-30.000;-38.000;-867.000;-11.000;38.000;30.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.792758,arm_err_len=1;controller_err=0,error_present,ok
1781261400754,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0270;0.0720;-4.6250;-0.0270;0.0370;-0.0160,120.000;-29.000;-20.000;-857.000;-14.000;38.000;40.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.792758,arm_err_len=1;controller_err=0,error_present,ok
1781261400891,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0010;0.0000;-0.0010;0.0010;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0440;0.2830;-4.6550;-0.0230;0.0380;-0.0070,132.000;-24.000;-31.000;-855.000;-11.000;41.000;41.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.334999,13.697645,arm_err_len=1;controller_err=0,error_present,ok
1781261401027,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0910;-0.0070;-4.6100;-0.0260;0.0370;-0.0230,130.000;-3.000;-28.000;-849.000;-15.000;14.000;49.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.341000,13.631144,arm_err_len=1;controller_err=0,error_present,ok
1781261401154,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2020;-0.1310;-4.9280;-0.0280;0.0370;-0.0230,122.000;1.000;-33.000;-857.000;-10.000;48.000;29.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.340000,13.793941,arm_err_len=1;controller_err=0,error_present,ok
1781261401282,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0000;-0.0010;0.0010;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0640;0.1440;-4.8500;-0.0230;0.0350;-0.0210,125.000;4.000;-32.000;-867.000;-14.000;46.000;38.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.367001,13.599595,arm_err_len=1;controller_err=0,error_present,ok
1781261401416,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0010;0.0000;-0.0020;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0630;0.0690;-4.5610;-0.0230;0.0380;-0.0130,112.000;31.000;-35.000;-855.000;-13.000;35.000;46.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.367001,13.599595,arm_err_len=1;controller_err=0,error_present,ok
1781261401541,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;0.0000;0.0010;-0.0020;0.0000;-0.0020,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1540;0.0150;-4.8790;-0.0260;0.0370;-0.0200,112.000;31.000;-30.000;-845.000;-8.000;31.000;34.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.336000,14.001601,arm_err_len=1;controller_err=0,error_present,ok
1781261401667,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0010;0.0000;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1530;0.1750;-4.5750;-0.0250;0.0410;-0.0070,123.000;50.000;-21.000;-834.000;-19.000;33.000;32.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.344999,13.726860,arm_err_len=1;controller_err=0,error_present,ok
1781261401801,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1150;0.0380;-4.6450;-0.0250;0.0380;-0.0150,130.000;53.000;-37.000;-839.000;-20.000;24.000;32.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.336000,13.838248,arm_err_len=1;controller_err=0,error_present,ok
1781261401931,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0010;-0.0020;-0.0010;0.0010;0.0020,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1000;0.0570;-4.6280;-0.0240;0.0360;-0.0130,122.000;70.000;-33.000;-839.000;-15.000;21.000;45.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.340000,13.793941,arm_err_len=1;controller_err=0,error_present,ok
1781261402063,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0580;0.0730;-4.7340;-0.0260;0.0330;-0.0150,136.000;59.000;-10.000;-834.000;-23.000;18.000;49.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.333000,13.696471,arm_err_len=1;controller_err=0,error_present,ok
1781261402193,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0070;0.2230;-4.5120;-0.0220;0.0380;-0.0040,121.000;87.000;-6.000;-821.000;-27.000;29.000;49.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.320000,13.548919,arm_err_len=1;controller_err=0,error_present,ok
1781261402329,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0520;0.1530;-4.6390;-0.0240;0.0360;-0.0120,113.000;84.000;-13.000;-822.000;-20.000;15.000;49.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.341999,13.818464,arm_err_len=1;controller_err=0,error_present,ok
1781261402455,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0000;0.0020;-0.0010;0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1780;0.0270;-4.8850;-0.0260;0.0360;-0.0240,99.000;88.000;-11.000;-826.000;-17.000;28.000;53.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.358999,14.178912,arm_err_len=1;controller_err=0,error_present,ok
1781261402584,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1040;0.1320;-4.6610;-0.0240;0.0380;-0.0150,85.000;83.000;-7.000;-824.000;-10.000;33.000;37.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.322001,13.829946,arm_err_len=1;controller_err=0,error_present,ok
1781261402714,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0240;0.1170;-4.6530;-0.0260;0.0370;-0.0140,89.000;61.000;-8.000;-823.000;-16.000;34.000;38.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.340000,13.747260,arm_err_len=1;controller_err=0,error_present,ok
1781261402840,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0020;0.0010;0.0010;-0.0010;-0.0010;0.0010,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2090;0.0520;-4.6770;-0.0250;0.0380;-0.0210,91.000;80.000;-23.000;-826.000;-19.000;23.000;49.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.364000,14.065128,arm_err_len=1;controller_err=0,error_present,ok
1781261402966,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0020;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0510;0.1730;-4.5810;-0.0250;0.0380;-0.0080,88.000;75.000;-28.000;-820.000;-16.000;39.000;40.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.339001,13.863366,arm_err_len=1;controller_err=0,error_present,ok
1781261403089,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0020;0.0000;-0.0010;-0.0020;-0.0020,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1150;0.1610;-4.5420;-0.0240;0.0390;-0.0110,99.000;82.000;-18.000;-803.000;-21.000;14.000;26.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.330999,13.788621,arm_err_len=1;controller_err=0,error_present,ok
1781261403229,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0020;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0510;0.0520;-4.7720;-0.0260;0.0360;-0.0180,99.000;93.000;-28.000;-798.000;-12.000;36.000;19.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351000,13.870493,arm_err_len=1;controller_err=0,error_present,ok
1781261403365,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;0.0010;0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2050;0.0240;-4.8130;-0.0250;0.0380;-0.0170,90.000;79.000;-27.000;-796.000;-17.000;19.000;31.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.368999,13.740972,arm_err_len=1;controller_err=0,error_present,ok
1781261403491,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0780;0.2180;-4.6500;-0.0240;0.0360;-0.0110,93.000;98.000;-33.000;-805.000;-12.000;15.000;38.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.341999,13.841805,arm_err_len=1;controller_err=0,error_present,ok
1781261403625,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0620;0.0270;-4.8140;-0.0260;0.0360;-0.0190,86.000;95.000;-37.000;-802.000;-12.000;24.000;25.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351999,13.707624,arm_err_len=1;controller_err=0,error_present,ok
1781261403761,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;-0.0010;-0.0010;0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0750;0.0490;-4.5210;-0.0240;0.0370;-0.0120,92.000;95.000;-7.000;-795.000;-12.000;51.000;29.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.372000,13.438900,arm_err_len=1;controller_err=0,error_present,ok
1781261403892,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1390;0.0240;-4.6090;-0.0260;0.0370;-0.0100,92.000;105.000;-9.000;-803.000;-12.000;33.000;44.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.323000,13.690601,arm_err_len=1;controller_err=0,error_present,ok
1781261404020,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0040;0.1080;-4.6160;-0.0240;0.0360;-0.0130,94.000;113.000;14.000;-810.000;-10.000;31.000;27.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.323000,13.690601,arm_err_len=1;controller_err=0,error_present,ok
1781261404155,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0020;-0.0020;-0.0010;0.0000;0.0010,NA,x=-0.00005;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2520;0.0260;-4.5710;-0.0250;0.0390;-0.0120,102.000;119.000;-4.000;-816.000;-14.000;30.000;32.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.319000,13.781530,arm_err_len=1;controller_err=0,error_present,ok
1781261404285,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1170;0.1460;-4.6340;-0.0230;0.0360;-0.0100,116.000;115.000;11.000;-831.000;-9.000;22.000;30.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.339001,13.956722,arm_err_len=1;controller_err=0,error_present,ok
1781261404421,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;-0.0020;-0.0010;-0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0920;0.0480;-4.5630;-0.0260;0.0370;-0.0060,99.000;130.000;22.000;-834.000;-14.000;27.000;15.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.339001,13.956722,arm_err_len=1;controller_err=0,error_present,ok
1781261404545,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0850;0.1130;-4.5690;-0.0250;0.0360;-0.0080,97.000;148.000;15.000;-828.000;-12.000;27.000;23.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.333000,13.766469,arm_err_len=1;controller_err=0,error_present,ok
1781261404669,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0010;0.0000;-0.0010;0.0000;-0.0020,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0710;0.1470;-4.5830;-0.0230;0.0370;-0.0080,88.000;150.000;21.000;-835.000;-10.000;28.000;22.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351999,13.801032,arm_err_len=1;controller_err=0,error_present,ok
1781261404796,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0020;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0130;0.1380;-4.5590;-0.0230;0.0360;-0.0120,89.000;142.000;22.000;-805.000;-5.000;43.000;14.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.327000,13.669622,arm_err_len=1;controller_err=0,error_present,ok
1781261404924,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0010;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0620;0.0890;-4.6890;-0.0240;0.0350;-0.0140,80.000;143.000;6.000;-817.000;-7.000;43.000;26.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.327000,13.669622,arm_err_len=1;controller_err=0,error_present,ok
1781261405055,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2450;-0.0190;-4.7900;-0.0260;0.0400;-0.0190,86.000;135.000;16.000;-810.000;-10.000;12.000;22.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.319000,13.688253,arm_err_len=1;controller_err=0,error_present,ok
1781261405180,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2110;0.1070;-4.7380;-0.0240;0.0380;-0.0090,72.000;145.000;23.000;-828.000;-4.000;28.000;27.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.322001,13.736658,arm_err_len=1;controller_err=0,error_present,ok
1781261405306,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1050;0.1420;-4.5550;-0.0230;0.0380;-0.0030,79.000;160.000;23.000;-798.000;-2.000;34.000;26.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.322001,13.736658,arm_err_len=1;controller_err=0,error_present,ok
1781261405436,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0420;0.1250;-4.5060;-0.0260;0.0370;-0.0040,92.000;154.000;37.000;-809.000;-5.000;28.000;36.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.341000,13.841213,arm_err_len=1;controller_err=0,error_present,ok
1781261405564,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0010;0.1470;-4.3980;-0.0260;0.0370;-0.0050,86.000;149.000;40.000;-811.000;-12.000;26.000;28.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.332001,13.625888,arm_err_len=1;controller_err=0,error_present,ok
1781261405699,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;-0.0010;-0.0010;-0.0010;0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0310;0.1340;-4.6250;-0.0250;0.0380;-0.0130,92.000;158.000;39.000;-824.000;-14.000;38.000;28.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.332001,13.625888,arm_err_len=1;controller_err=0,error_present,ok
1781261405825,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;-0.0020;0.0020;-0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0950;0.0520;-4.3630;-0.0250;0.0390;-0.0070,103.000;138.000;36.000;-821.000;-14.000;34.000;30.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.334999,13.954329,arm_err_len=1;controller_err=0,error_present,ok
1781261405950,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0910;0.1080;-4.6220;-0.0250;0.0380;-0.0100,109.000;138.000;34.000;-820.000;-11.000;24.000;25.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.347000,13.634648,arm_err_len=1;controller_err=0,error_present,ok
1781261406077,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;0.0000;0.0000;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2230;0.0260;-4.7610;-0.0250;0.0390;-0.0200,97.000;157.000;32.000;-815.000;-17.000;26.000;25.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.350000,13.683101,arm_err_len=1;controller_err=0,error_present,ok
1781261406217,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1590;0.1470;-4.5890;-0.0250;0.0380;-0.0070,81.000;142.000;39.000;-824.000;-15.000;35.000;30.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.350000,13.356201,arm_err_len=1;controller_err=0,error_present,ok
1781261406345,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0720;0.2040;-4.4710;-0.0240;0.0380;-0.0030,68.000;146.000;27.000;-819.000;-8.000;30.000;27.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.327999,13.576896,arm_err_len=1;controller_err=0,error_present,ok
1781261406475,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0020;0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0770;0.1950;-4.6390;-0.0240;0.0380;-0.0060,57.000;158.000;64.000;-838.000;-12.000;37.000;40.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.334999,13.744314,arm_err_len=1;controller_err=0,error_present,ok
1781261406600,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1110;0.0250;-4.8330;-0.0270;0.0350;-0.0170,66.000;160.000;59.000;-839.000;-11.000;49.000;28.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.349001,13.845957,arm_err_len=1;controller_err=0,error_present,ok
1781261406724,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0670;0.1020;-4.4760;-0.0250;0.0360;-0.0080,51.000;149.000;45.000;-845.000;-8.000;34.000;27.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.323000,13.853862,arm_err_len=1;controller_err=0,error_present,ok
1781261406850,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0010;-0.0020;-0.0020;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0570;0.1060;-4.5230;-0.0260;0.0380;-0.0110,58.000;146.000;29.000;-836.000;-5.000;39.000;27.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.320999,14.202489,arm_err_len=1;controller_err=0,error_present,ok
1781261406975,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0010;0.0010;-0.0010;0.0010;0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2060;0.0440;-4.5940;-0.0260;0.0370;-0.0210,59.000;162.000;49.000;-826.000;-10.000;38.000;44.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351000,13.753739,arm_err_len=1;controller_err=0,error_present,ok
1781261407106,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0020;0.0010;0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3110;-0.0360;-4.7320;-0.0270;0.0370;-0.0220,74.000;159.000;41.000;-836.000;-5.000;46.000;22.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.319000,13.968081,arm_err_len=1;controller_err=0,error_present,ok
1781261407231,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0010;0.0000;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1750;0.1500;-4.6780;-0.0230;0.0390;-0.0100,53.000;167.000;24.000;-829.000;-6.000;28.000;35.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.356001,13.663260,arm_err_len=1;controller_err=0,error_present,ok
1781261407359,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0130;-0.0090;-4.7620;-0.0270;0.0360;-0.0150,52.000;174.000;26.000;-836.000;-12.000;20.000;22.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351000,13.613633,arm_err_len=1;controller_err=0,error_present,ok
1781261407484,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0020;0.0000;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0170;0.0450;-4.4900;-0.0250;0.0370;-0.0060,49.000;166.000;20.000;-846.000;-15.000;47.000;24.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.341000,13.701167,arm_err_len=1;controller_err=0,error_present,ok
1781261407610,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0020;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1510;0.0430;-4.4300;-0.0280;0.0370;-0.0090,51.000;162.000;24.000;-849.000;-9.000;27.000;31.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.364000,13.738032,arm_err_len=1;controller_err=0,error_present,ok
1781261407740,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1520;-0.1020;-4.8280;-0.0270;0.0380;-0.0230,60.000;171.000;16.000;-813.000;-15.000;33.000;16.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.343000,13.048738,arm_err_len=1;controller_err=0,error_present,ok
1781261407866,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0010;0.0000;-0.0020;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0520;0.0550;-4.6060;-0.0250;0.0360;-0.0130,67.000;153.000;1.000;-836.000;-18.000;39.000;15.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.365000,13.855445,arm_err_len=1;controller_err=0,error_present,ok
1781261407996,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2210;0.0490;-4.9010;-0.0250;0.0380;-0.0180,54.000;169.000;-3.000;-837.000;-8.000;38.000;15.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.362000,13.900390,arm_err_len=1;controller_err=0,error_present,ok
1781261408122,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0020;-0.0010;0.0000;-0.0010;-0.0010;0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1790;0.0450;-4.8170;-0.0260;0.0380;-0.0220,52.000;175.000;16.000;-840.000;-5.000;38.000;21.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.362000,13.900390,arm_err_len=1;controller_err=0,error_present,ok
1781261408245,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;-0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0210;0.1790;-4.5520;-0.0230;0.0360;-0.0110,54.000;181.000;31.000;-859.000;-4.000;42.000;43.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.360001,13.665600,arm_err_len=1;controller_err=0,error_present,ok
1781261408374,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0020;0.0010;-0.0020;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1630;0.0510;-4.6030;-0.0260;0.0390;-0.0160,50.000;187.000;12.000;-847.000;-2.000;34.000;35.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.676068,arm_err_len=1;controller_err=0,error_present,ok
1781261408512,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0980;0.0660;-4.6430;-0.0270;0.0350;-0.0070,47.000;188.000;8.000;-851.000;-4.000;35.000;28.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337000,13.768829,arm_err_len=1;controller_err=0,error_present,ok
1781261408639,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0020;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2550;0.0180;-4.9170;-0.0260;0.0360;-0.0230,47.000;194.000;-9.000;-837.000;-5.000;40.000;20.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337000,13.768829,arm_err_len=1;controller_err=0,error_present,ok
1781261408767,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0020;-0.0010;0.0000;0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0230;0.2750;-4.6480;-0.0210;0.0360;-0.0070,47.000;183.000;-15.000;-830.000;-5.000;40.000;7.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.347000,13.751383,arm_err_len=1;controller_err=0,error_present,ok
1781261408897,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1680;0.0740;-4.7520;-0.0250;0.0370;-0.0160,46.000;196.000;-13.000;-838.000;-9.000;34.000;21.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.326000,13.972274,arm_err_len=1;controller_err=0,error_present,ok
1781261409020,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0020,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0330;0.1080;-4.4900;-0.0250;0.0380;-0.0040,48.000;176.000;-20.000;-840.000;-3.000;34.000;24.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.341000,14.027941,arm_err_len=1;controller_err=0,error_present,ok
1781261409150,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;-0.0010;-0.0010;0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1920;0.0590;-4.8150;-0.0250;0.0380;-0.0250,46.000;166.000;-17.000;-851.000;-11.000;30.000;20.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.341000,14.027941,arm_err_len=1;controller_err=0,error_present,ok
1781261409295,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1820;0.0900;-4.9060;-0.0250;0.0380;-0.0210,46.000;174.000;-38.000;-857.000;-2.000;28.000;21.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.318001,14.200663,arm_err_len=1;controller_err=0,error_present,ok
1781261409422,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;0.0000;-0.0010;-0.0020;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1960;0.1000;-4.7100;-0.0250;0.0380;-0.0130,66.000;165.000;-21.000;-847.000;-4.000;31.000;28.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.348000,13.495144,arm_err_len=1;controller_err=0,error_present,ok
1781261409548,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0020;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0450;0.1120;-4.6230;-0.0240;0.0360;-0.0060,55.000;172.000;-23.000;-851.000;-2.000;38.000;20.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.336000,13.908257,arm_err_len=1;controller_err=0,error_present,ok
1781261409677,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3160;0.0340;-4.7270;-0.0240;0.0380;-0.0210,48.000;144.000;-32.000;-847.000;-13.000;27.000;20.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.344999,13.773549,arm_err_len=1;controller_err=0,error_present,ok
1781261409805,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;-0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1370;0.1260;-4.4910;-0.0250;0.0380;-0.0100,72.000;145.000;-23.000;-839.000;-7.000;32.000;22.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.347000,13.938159,arm_err_len=1;controller_err=0,error_present,ok
1781261409937,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0020;-0.0010;-0.0010;-0.0020;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1310;0.1360;-4.7640;-0.0250;0.0390;-0.0120,63.000;152.000;-35.000;-833.000;-8.000;28.000;27.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.361000,13.526019,arm_err_len=1;controller_err=0,error_present,ok
1781261410062,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0780;0.1880;-4.4710;-0.0230;0.0370;-0.0030,53.000;150.000;-32.000;-837.000;-12.000;22.000;21.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.361000,13.526019,arm_err_len=1;controller_err=0,error_present,ok
1781261410201,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0020;-0.0010;-0.0010;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2180;-0.0180;-4.8970;-0.0270;0.0380;-0.0190,57.000;133.000;-25.000;-842.000;-7.000;34.000;22.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.334000,13.767059,arm_err_len=1;controller_err=0,error_present,ok
1781261410332,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1300;0.1210;-4.5280;-0.0240;0.0400;-0.0080,51.000;162.000;-38.000;-835.000;-6.000;37.000;20.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.357000,13.663845,arm_err_len=1;controller_err=0,error_present,ok
1781261410461,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1190;0.0540;-4.6190;-0.0250;0.0380;-0.0100,50.000;127.000;-23.000;-837.000;-14.000;52.000;25.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.325001,13.691776,arm_err_len=1;controller_err=0,error_present,ok
1781261410585,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0010;-0.0010;-0.0020;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0070;0.0590;-4.4340;-0.0260;0.0380;-0.0050,49.000;130.000;-28.000;-815.000;-11.000;36.000;30.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.343000,13.959114,arm_err_len=1;controller_err=0,error_present,ok
1781261410720,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;-0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1480;-0.0490;-4.8660;-0.0270;0.0380;-0.0210,48.000;129.000;-12.000;-828.000;-4.000;29.000;26.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.330000,13.484740,arm_err_len=1;controller_err=0,error_present,ok
1781261410851,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0010;-0.0020;-0.0010;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1030;0.1260;-4.5270;-0.0240;0.0360;-0.0070,54.000;98.000;6.000;-829.000;-11.000;40.000;19.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.339001,13.746671,arm_err_len=1;controller_err=0,error_present,ok
1781261410977,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0020;0.0000;-0.0020;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1160;-0.1200;-4.8850;-0.0280;0.0340;-0.0250,56.000;103.000;-5.000;-841.000;-16.000;40.000;32.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.358000,13.757862,arm_err_len=1;controller_err=0,error_present,ok
1781261411107,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0610;0.1560;-4.5050;-0.0230;0.0380;0.0000,66.000;82.000;-11.000;-821.000;-13.000;34.000;29.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.322001,13.736658,arm_err_len=1;controller_err=0,error_present,ok
1781261411248,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0040;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2160;-0.0390;-5.0250;-0.0270;0.0360;-0.0180,73.000;67.000;10.000;-822.000;-14.000;18.000;27.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.334000,13.650389,arm_err_len=1;controller_err=0,error_present,ok
1781261411384,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2100;-0.1420;-4.9170;-0.0290;0.0380;-0.0200,73.000;34.000;-4.000;-830.000;-17.000;29.000;37.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.334000,13.650389,arm_err_len=1;controller_err=0,error_present,ok
1781261411510,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0040;-0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00005;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.1220;0.1870;-4.5370;-0.0230;0.0350;-0.0080,83.000;24.000;0.000;-816.000;-29.000;18.000;37.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.349336,arm_err_len=1;controller_err=0,error_present,ok
1781261411643,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0020;-0.0040;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1310;-0.1510;-4.8390;-0.0290;0.0380;-0.0150,101.000;8.000;-9.000;-811.000;-20.000;24.000;16.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.343000,13.608969,arm_err_len=1;controller_err=0,error_present,ok
1781261411769,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0020;0.0010;-0.0010;0.0000;-0.0010;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2340;-0.0760;-4.5920;-0.0270;0.0400;-0.0150,99.000;35.000;-38.000;-824.000;-16.000;8.000;33.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.350000,13.729800,arm_err_len=1;controller_err=0,error_present,ok
1781261411897,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0890;0.0820;-4.6400;-0.0250;0.0370;-0.0130,102.000;47.000;-29.000;-826.000;-14.000;26.000;45.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.350000,13.729800,arm_err_len=1;controller_err=0,error_present,ok
1781261412024,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0340;0.1540;-4.5550;-0.0240;0.0360;-0.0110,106.000;32.000;-8.000;-821.000;-17.000;18.000;42.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.372000,13.836224,arm_err_len=1;controller_err=0,error_present,ok
1781261412153,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;-0.0020;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0120;0.0660;-4.6800;-0.0250;0.0350;-0.0110,100.000;43.000;-20.000;-823.000;-15.000;23.000;28.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.322001,13.620048,arm_err_len=1;controller_err=0,error_present,ok
1781261412285,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0020;-0.0010;-0.0010;-0.0020;-0.0010;0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0410;-0.0620;-4.7410;-0.0280;0.0360;-0.0170,97.000;23.000;-28.000;-833.000;-17.000;39.000;56.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.322001,13.620048,arm_err_len=1;controller_err=0,error_present,ok
1781261412428,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1390;0.0860;-4.6450;-0.0250;0.0370;-0.0120,104.000;18.000;-20.000;-830.000;-16.000;29.000;44.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.365999,13.739208,arm_err_len=1;controller_err=0,error_present,ok
1781261412554,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0520;0.0670;-4.7900;-0.0260;0.0350;-0.0210,106.000;14.000;-26.000;-820.000;-14.000;21.000;36.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351000,13.777089,arm_err_len=1;controller_err=0,error_present,ok
1781261412678,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0020;0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1760;-0.0450;-4.8330;-0.0280;0.0390;-0.0200,97.000;0.000;-8.000;-802.000;-13.000;31.000;44.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.323999,13.901104,arm_err_len=1;controller_err=0,error_present,ok
1781261412808,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0000;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1410;0.0050;-4.7430;-0.0260;0.0390;-0.0120,99.000;-13.000;-9.000;-818.000;-14.000;9.000;45.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.323999,13.901104,arm_err_len=1;controller_err=0,error_present,ok
1781261412933,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0160;0.1110;-4.6320;-0.0240;0.0360;-0.0120,93.000;-3.000;-11.000;-824.000;-5.000;30.000;50.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.323000,13.573986,arm_err_len=1;controller_err=0,error_present,ok
1781261413063,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0020;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1600;0.1440;-4.5740;-0.0250;0.0380;-0.0030,113.000;3.000;-30.000;-824.000;-2.000;33.000;32.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.402000,13.736975,arm_err_len=1;controller_err=0,error_present,ok
1781261413208,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1700;0.0800;-4.6350;-0.0240;0.0390;-0.0170,112.000;22.000;-39.000;-821.000;-7.000;25.000;48.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.364000,13.691305,arm_err_len=1;controller_err=0,error_present,ok
1781261413334,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0120;0.1710;-4.7310;-0.0240;0.0350;-0.0130,97.000;12.000;-61.000;-825.000;-2.000;18.000;38.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.325001,13.855050,arm_err_len=1;controller_err=0,error_present,ok
1781261413466,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;0.0020;-0.0010;0.0010;-0.0010,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0870;0.1660;-4.3990;-0.0250;0.0370;-0.0060,102.000;18.000;-68.000;-822.000;-4.000;32.000;33.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.344000,13.679585,arm_err_len=1;controller_err=0,error_present,ok
1781261413592,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2020;-0.0610;-4.7940;-0.0260;0.0390;-0.0210,98.000;4.000;-70.000;-819.000;-1.000;15.000;44.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.344000,13.679585,arm_err_len=1;controller_err=0,error_present,ok
1781261413729,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0000;-0.0010;-0.0010;0.0000;-0.0020,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1990;0.0270;-4.6720;-0.0270;0.0380;-0.0200,100.000;16.000;-56.000;-818.000;0.000;10.000;42.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.363001,13.667355,arm_err_len=1;controller_err=0,error_present,ok
1781261413857,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1950;0.1020;-4.7650;-0.0240;0.0370;-0.0140,92.000;8.000;-53.000;-818.000;0.000;34.000;41.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.302000,13.748179,arm_err_len=1;controller_err=0,error_present,ok
1781261413987,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0710;0.1840;-4.5000;-0.0230;0.0350;-0.0080,102.000;17.000;-42.000;-801.000;-1.000;27.000;23.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351000,13.753739,arm_err_len=1;controller_err=0,error_present,ok
1781261414113,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1360;-0.0200;-4.6260;-0.0260;0.0370;-0.0120,116.000;29.000;-76.000;-816.000;-5.000;28.000;31.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.349001,13.612468,arm_err_len=1;controller_err=0,error_present,ok
1781261414241,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0020;0.0010;0.0020;-0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2130;0.0580;-4.6240;-0.0270;0.0380;-0.0230,119.000;27.000;-55.000;-830.000;-2.000;45.000;33.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.361000,13.876434,arm_err_len=1;controller_err=0,error_present,ok
1781261414377,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0010;0.0000;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0440;0.2990;-4.4780;-0.0220;0.0360;-0.0060,119.000;20.000;-55.000;-850.000;2.000;20.000;39.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.333000,13.603139,arm_err_len=1;controller_err=0,error_present,ok
1781261414504,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0010;-0.0010;-0.0010;-0.0020;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1120;0.1430;-4.5670;-0.0240;0.0360;-0.0080,124.000;13.000;-48.000;-851.000;0.000;12.000;18.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.333000,13.393142,arm_err_len=1;controller_err=0,error_present,ok
1781261414644,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0010;-0.0010;0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1380;0.0600;-4.6910;-0.0250;0.0370;-0.0180,131.000;-1.000;-58.000;-858.000;-1.000;36.000;25.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.325001,13.458526,arm_err_len=1;controller_err=0,error_present,ok
1781261414789,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0020;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2570;-0.1100;-4.8180;-0.0290;0.0390;-0.0200,125.000;-5.000;-74.000;-856.000;-2.000;52.000;29.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.325001,13.971675,arm_err_len=1;controller_err=0,error_present,ok
1781261414917,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2030;0.1280;-4.6360;-0.0250;0.0380;-0.0160,126.000;0.000;-73.000;-852.000;-3.000;34.000;38.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.358000,13.570997,arm_err_len=1;controller_err=0,error_present,ok
1781261415048,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;-0.0010;-0.0010;0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0630;0.0650;-4.5040;-0.0250;0.0380;-0.0070,129.000;14.000;-90.000;-850.000;-3.000;32.000;25.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.336000,13.978264,arm_err_len=1;controller_err=0,error_present,ok
1781261415174,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1540;-0.0880;-4.6790;-0.0290;0.0370;-0.0190,139.000;2.000;-82.000;-848.000;-1.000;35.000;40.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.336000,13.978264,arm_err_len=1;controller_err=0,error_present,ok
1781261415310,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0000;0.0000;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0200;0.2260;-4.4700;-0.0220;0.0340;-0.0020,138.000;6.000;-79.000;-846.000;4.000;18.000;53.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.355000,13.896225,arm_err_len=1;controller_err=0,error_present,ok
1781261415440,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0020;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1900;-0.0200;-4.7500;-0.0260;0.0380;-0.0250,129.000;-1.000;-88.000;-836.000;0.000;37.000;38.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.368000,13.927328,arm_err_len=1;controller_err=0,error_present,ok
1781261415575,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0890;0.0350;-4.5640;-0.0260;0.0370;-0.0120,136.000;2.000;-82.000;-833.000;1.000;34.000;40.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351000,13.590282,arm_err_len=1;controller_err=0,error_present,ok
1781261415704,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0010;-0.0020;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1880;-0.1280;-4.7510;-0.0290;0.0360;-0.0220,129.000;11.000;-38.000;-822.000;3.000;19.000;43.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351000,13.590282,arm_err_len=1;controller_err=0,error_present,ok
1781261415829,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;-0.0020;-0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0300;0.1960;-4.5580;-0.0250;0.0360;-0.0050,141.000;10.000;-41.000;-823.000;3.000;45.000;46.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.365000,13.388145,arm_err_len=1;controller_err=0,error_present,ok
1781261415959,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1710;-0.0020;-4.6950;-0.0270;0.0370;-0.0120,146.000;15.000;-49.000;-830.000;3.000;41.000;36.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337000,13.628808,arm_err_len=1;controller_err=0,error_present,ok
1781261416087,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0000;-0.0010;0.0000;-0.0020,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0840;0.1640;-4.6450;-0.0250;0.0360;-0.0110,141.000;13.000;-43.000;-822.000;4.000;38.000;46.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.346001,13.517334,arm_err_len=1;controller_err=0,error_present,ok
1781261416213,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0020;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2720;-0.1780;-5.0760;-0.0280;0.0350;-0.0270,137.000;-13.000;-30.000;-821.000;-1.000;36.000;55.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.346001,13.517334,arm_err_len=1;controller_err=0,error_present,ok
1781261416349,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0850;0.1860;-4.5890;-0.0240;0.0370;-0.0070,141.000;-16.000;-37.000;-810.000;2.000;28.000;60.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337000,13.605471,arm_err_len=1;controller_err=0,error_present,ok
1781261416483,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1550;0.0300;-4.8370;-0.0250;0.0360;-0.0210,145.000;-3.000;-22.000;-827.000;4.000;34.000;65.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.320999,13.689427,arm_err_len=1;controller_err=0,error_present,ok
1781261416613,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0710;0.2460;-4.3920;-0.0200;0.0360;-0.0010,145.000;24.000;-34.000;-825.000;2.000;30.000;51.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.344999,13.796895,arm_err_len=1;controller_err=0,error_present,ok
1781261416743,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2840;0.0640;-4.7470;-0.0260;0.0380;-0.0210,149.000;7.000;-23.000;-817.000;6.000;30.000;52.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.341999,13.818464,arm_err_len=1;controller_err=0,error_present,ok
1781261416870,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1060;-0.0240;-4.6330;-0.0270;0.0370;-0.0070,161.000;24.000;-35.000;-794.000;10.000;34.000;48.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.344999,13.820240,arm_err_len=1;controller_err=0,error_present,ok
1781261416993,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0010;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2270;0.1140;-4.6400;-0.0250;0.0390;-0.0150,160.000;22.000;-29.000;-810.000;11.000;31.000;44.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.327999,13.576896,arm_err_len=1;controller_err=0,error_present,ok
1781261417127,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;0.0000;0.0010;-0.0020,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2560;0.0230;-4.6290;-0.0250;0.0410;-0.0120,168.000;10.000;-27.000;-802.000;8.000;44.000;44.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.315001,13.825795,arm_err_len=1;controller_err=0,error_present,ok
1781261417259,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;0.0010;0.0010;-0.0010;0.0020;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0620;0.1110;-4.5790;-0.0240;0.0360;-0.0150,148.000;-4.000;-36.000;-814.000;3.000;21.000;33.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.357000,13.687203,arm_err_len=1;controller_err=0,error_present,ok
1781261417383,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;-0.0020;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0050;0.0860;-4.6310;-0.0240;0.0350;-0.0070,143.000;17.000;-26.000;-821.000;5.000;38.000;44.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.316999,13.523859,arm_err_len=1;controller_err=0,error_present,ok
1781261417517,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0010;-0.0010;-0.0020;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0920;0.0670;-4.5520;-0.0230;0.0370;-0.0130,149.000;5.000;-30.000;-819.000;-1.000;36.000;47.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.722744,arm_err_len=1;controller_err=0,error_present,ok
1781261417649,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1500;0.1020;-4.6730;-0.0250;0.0380;-0.0170,142.000;0.000;-38.000;-824.000;-12.000;44.000;42.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.344000,13.562863,arm_err_len=1;controller_err=0,error_present,ok
1781261417773,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0020;0.0000;0.0020;-0.0010;0.0000;-0.0010,NA,x=0.00005;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3490;0.0610;-4.9680;-0.0260;0.0400;-0.0230,153.000;-5.000;-40.000;-833.000;-3.000;18.000;37.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.377001,13.745676,arm_err_len=1;controller_err=0,error_present,ok
1781261417907,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1710;0.1090;-4.6660;-0.0250;0.0370;-0.0160,161.000;2.000;-46.000;-838.000;-8.000;38.000;42.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.334000,13.907064,arm_err_len=1;controller_err=0,error_present,ok
1781261418039,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1290;0.1370;-4.7230;-0.0240;0.0350;-0.0170,167.000;4.000;-70.000;-844.000;-2.000;44.000;47.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.327000,13.646294,arm_err_len=1;controller_err=0,error_present,ok
1781261418173,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0770;0.0950;-4.3960;-0.0230;0.0370;-0.0030,169.000;-31.000;-53.000;-842.000;0.000;35.000;39.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.344999,13.213269,arm_err_len=1;controller_err=0,error_present,ok
1781261418299,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3000;-0.1160;-4.6500;-0.0280;0.0390;-0.0190,158.000;-38.000;-35.000;-853.000;0.000;24.000;45.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.340000,13.957320,arm_err_len=1;controller_err=0,error_present,ok
1781261418425,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0040;-0.0010;0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0980;-0.0450;-4.6200;-0.0260;0.0370;-0.0130,152.000;-38.000;-57.000;-835.000;-2.000;22.000;39.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.792758,arm_err_len=1;controller_err=0,error_present,ok
1781261418551,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0890;0.1550;-4.6830;-0.0240;0.0380;-0.0110,148.000;8.000;-46.000;-864.000;5.000;42.000;41.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.652729,arm_err_len=1;controller_err=0,error_present,ok
1781261418688,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0020;-0.0010;-0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.1240;0.1630;-4.3640;-0.0240;0.0350;-0.0020,162.000;36.000;-62.000;-856.000;2.000;44.000;32.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.652729,arm_err_len=1;controller_err=0,error_present,ok
1781261418824,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0010;0.0010;-0.0020;0.0000;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1330;0.0460;-4.7610;-0.0260;0.0370;-0.0200,165.000;34.000;-67.000;-857.000;1.000;36.000;42.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.357000,13.617131,arm_err_len=1;controller_err=0,error_present,ok
1781261418950,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0020;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0290;0.0770;-4.3710;-0.0250;0.0380;-0.0060,157.000;42.000;-60.000;-865.000;3.000;47.000;41.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.323999,14.134344,arm_err_len=1;controller_err=0,error_present,ok
1781261419085,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1660;-0.0360;-4.7990;-0.0250;0.0370;-0.0220,158.000;30.000;-60.000;-867.000;3.000;52.000;55.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.336000,13.838248,arm_err_len=1;controller_err=0,error_present,ok
1781261419219,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0000;-0.0010;0.0020;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0120;0.1410;-4.6210;-0.0250;0.0370;-0.0020,158.000;14.000;-31.000;-861.000;2.000;36.000;48.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.336000,13.838248,arm_err_len=1;controller_err=0,error_present,ok
1781261419344,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0160;0.0910;-4.5760;-0.0260;0.0380;-0.0100,156.000;26.000;-34.000;-850.000;-1.000;27.000;38.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.316000,13.779756,arm_err_len=1;controller_err=0,error_present,ok
1781261419474,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0020;0.0000;0.0020;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0160;0.0790;-4.5430;-0.0260;0.0370;-0.0100,155.000;72.000;-45.000;-845.000;2.000;29.000;34.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351000,13.590282,arm_err_len=1;controller_err=0,error_present,ok
1781261419613,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;-0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0270;0.0600;-4.6040;-0.0260;0.0360;-0.0080,169.000;70.000;-33.000;-840.000;2.000;61.000;36.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.351000,13.590282,arm_err_len=1;controller_err=0,error_present,ok
1781261419743,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1890;-0.0290;-4.6160;-0.0280;0.0380;-0.0220,164.000;81.000;-40.000;-842.000;0.000;54.000;31.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.353001,13.988447,arm_err_len=1;controller_err=0,error_present,ok
1781261419873,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0010;0.0000;-0.0010;-0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1530;0.1830;-4.5990;-0.0250;0.0370;-0.0140,170.000;90.000;-50.000;-848.000;5.000;45.000;28.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.327999,13.506911,arm_err_len=1;controller_err=0,error_present,ok
1781261420012,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0020;0.0000;-0.0020;-0.0010;-0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0050;0.2180;-4.4710;-0.0230;0.0370;-0.0040,167.000;73.000;-89.000;-846.000;3.000;27.000;39.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.389000,13.822899,arm_err_len=1;controller_err=0,error_present,ok
1781261420140,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1660;0.2630;-4.5260;-0.0240;0.0370;-0.0140,165.000;73.000;-76.000;-852.000;6.000;39.000;35.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.343000,13.725684,arm_err_len=1;controller_err=0,error_present,ok
1781261420268,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0810;0.1310;-4.4600;-0.0230;0.0350;-0.0090,156.000;95.000;-83.000;-851.000;0.000;18.000;32.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.343000,13.725684,arm_err_len=1;controller_err=0,error_present,ok
1781261420394,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0010;0.0040;-0.0010;-0.0020;0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0550;0.0690;-4.7910;-0.0250;0.0380;-0.0130,162.000;110.000;-49.000;-871.000;5.000;20.000;36.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337000,13.348765,arm_err_len=1;controller_err=0,error_present,ok
1781261420544,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0020;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2560;0.1290;-4.7790;-0.0270;0.0390;-0.0250,160.000;99.000;-89.000;-868.000;-2.000;47.000;41.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.341999,13.865147,arm_err_len=1;controller_err=0,error_present,ok
1781261420674,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0520;0.1870;-4.6010;-0.0220;0.0360;-0.0080,159.000;102.000;-91.000;-856.000;0.000;34.000;54.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.346001,13.680757,arm_err_len=1;controller_err=0,error_present,ok
1781261420804,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;0.0010;-0.0010;0.0040;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0390;0.1570;-4.6400;-0.0230;0.0360;-0.0100,168.000;99.000;-87.000;-860.000;-3.000;19.000;43.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.386999,13.774942,arm_err_len=1;controller_err=0,error_present,ok
1781261420929,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0020;-0.0010;-0.0010;-0.0010;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0150;0.1270;-4.7210;-0.0240;0.0350;-0.0070,167.000;96.000;-82.000;-851.000;-8.000;23.000;54.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.357000,14.130986,arm_err_len=1;controller_err=0,error_present,ok
1781261421059,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0020;0.0040;0.0020;-0.0020;-0.0010;-0.0010,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0020;0.0560;-4.7180;-0.0250;0.0350;-0.0200,166.000;116.000;-67.000;-853.000;-2.000;35.000;45.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.357000,14.130986,arm_err_len=1;controller_err=0,error_present,ok
1781261421185,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0020;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2370;0.1720;-4.5730;-0.0240;0.0380;-0.0090,176.000;118.000;-81.000;-863.000;-3.000;46.000;49.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.347000,13.821424,arm_err_len=1;controller_err=0,error_present,ok
1781261421329,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0020;0.0000;-0.0020;0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0360;0.0990;-4.6230;-0.0250;0.0360;-0.0010,182.000;159.000;-108.000;-863.000;-6.000;18.000;43.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.343000,13.865742,arm_err_len=1;controller_err=0,error_present,ok
1781261421465,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1320;-0.0170;-4.6940;-0.0260;0.0370;-0.0210,177.000;150.000;-96.000;-861.000;-10.000;10.000;48.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.337999,13.606054,arm_err_len=1;controller_err=0,error_present,ok
1781261421588,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0010;-0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0650;0.0990;-4.7520;-0.0270;0.0370;-0.0110,178.000;153.000;-101.000;-859.000;-6.000;18.000;39.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.332001,13.812545,arm_err_len=1;controller_err=0,error_present,ok
1781261421718,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2090;0.0150;-4.9990;-0.0260;0.0380;-0.0190,178.000;165.000;-79.000;-848.000;-10.000;21.000;33.000,36.000;35.000;34.000;34.000;36.000;36.000;39.000,23.327999,13.810176,arm_err_len=1;controller_err=0,error_present,ok
# rm75_acceptance_communication
| Check | Result | Detail |
| --- | --- | --- |
| source_document | INFO | RM75-6F mechanical arm testing agent operation document v1.0 |
| scope | INFO | 30-second read-only communication smoke test and acceptance CSV data logging |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| rm_get_current_tool_frame | PASS | error=0 |
| communication_csv_open | PASS | /home/mashiro/project/linkerhand-cpp-sdk/reports/realman_hardware_tests/rm75_acceptance_communication_latest.csv |
| samples | INFO | 231 |
| successful_full_samples | INFO | 231 |
| read_attempts | INFO | 1155 |
| read_failures | INFO | 0 |
| failure_rate | INFO | 0.000000 |
| avg_sample_period_ms | INFO | 130.225891 |
| max_sample_period_ms | INFO | 149.542060 |
| csv_latest | INFO | /home/mashiro/project/linkerhand-cpp-sdk/reports/realman_hardware_tests/rm75_acceptance_communication_latest.csv |
| sample_count_minimum | PASS | samples=231 |
| successful_sample_ratio_at_least_95_percent | PASS | successful=231, samples=231 |
| sdk_read_failure_rate_at_most_1_percent | PASS | failure_rate=0.000000 |
| sample_values_finite_and_in_expected_ranges | PASS | finite_failures=0 |
| controller_error_absent_during_communication | PASS | count=0 |
| arm_error_absent_during_communication | FAIL | count=231 |
| sample_period_below_1s | PASS | max_ms=149.542060 |
Assertions: 13, failures: 1
timestamp_ms,test_id,robot_model,robot_ip,motion_mode,speed_percent,payload_kg,target_joints_deg,actual_joints_deg,target_tcp_pose,actual_tcp_pose,force_torque,joint_current,joint_temperature,voltage,power,error_code,safety_state,comment
1781261481485,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0010;-0.0020;-0.0010;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0940;0.0790;-4.5640;-0.0260;0.0370;-0.0130,117.000;156.000;-118.000;-1000.000;125.000;39.000;30.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.319000,13.408425,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261481625,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0020;0.0010;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1750;0.0440;-4.7960;-0.0250;0.0380;-0.0220,113.000;150.000;-111.000;-1018.000;131.000;22.000;32.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.334999,13.510964,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261481766,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1480;0.1120;-4.6830;-0.0260;0.0380;-0.0160,104.000;142.000;-84.000;-1013.000;132.000;47.000;22.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.329000,13.927413,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261481896,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1180;0.0680;-4.9170;-0.0250;0.0370;-0.0200,104.000;115.000;-102.000;-1030.000;123.000;20.000;19.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.353001,13.638152,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482022,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0020;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0510;0.2560;-4.5380;-0.0230;0.0370;-0.0150,95.000;94.000;-105.000;-1033.000;121.000;38.000;16.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.341000,13.817872,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482147,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0020;0.0000;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1030;0.2310;-4.5740;-0.0230;0.0370;-0.0040,90.000;87.000;-77.000;-1025.000;118.000;29.000;13.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.381001,13.467456,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482275,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0020;0.0000;-0.0010;-0.0020;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1700;-0.0200;-4.8350;-0.0250;0.0380;-0.0190,87.000;79.000;-104.000;-1014.000;125.000;14.000;6.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.381001,13.467456,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482424,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0850;0.1460;-4.8170;-0.0240;0.0360;-0.0180,82.000;79.000;-79.000;-1025.000;131.000;30.000;19.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.348000,13.541839,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482567,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1060;-0.0280;-4.6400;-0.0260;0.0350;-0.0180,63.000;61.000;-77.000;-1022.000;130.000;29.000;-2.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.347000,13.961506,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482694,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0270;0.0560;-4.5850;-0.0250;0.0340;-0.0160,71.000;60.000;-63.000;-1029.000;129.000;43.000;4.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.356001,13.709973,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482823,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0260;0.2100;-4.4090;-0.0230;0.0360;-0.0070,92.000;61.000;-71.000;-1013.000;138.000;33.000;10.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.323000,13.504017,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482951,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0020;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0940;0.1040;-4.6230;-0.0260;0.0360;-0.0190,89.000;48.000;-86.000;-1021.000;140.000;31.000;2.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.323000,13.504017,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483080,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0010;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2230;0.1240;-4.7570;-0.0250;0.0390;-0.0150,91.000;53.000;-89.000;-1020.000;138.000;36.000;0.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.334000,13.907064,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483210,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0020;0.0000;0.0010;-0.0010;-0.0010;-0.0020,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0390;0.2170;-4.5100;-0.0230;0.0380;-0.0060,82.000;66.000;-75.000;-1022.000;144.000;30.000;9.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.361000,13.923156,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483336,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0710;0.1120;-4.6880;-0.0240;0.0350;-0.0120,87.000;71.000;-50.000;-1020.000;140.000;38.000;-9.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.327999,13.623551,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483465,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1270;0.1750;-4.4460;-0.0240;0.0390;-0.0030,83.000;60.000;-67.000;-1027.000;147.000;21.000;7.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.365999,13.972867,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483602,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0400;0.0530;-4.6610;-0.0260;0.0370;-0.0090,80.000;44.000;-64.000;-1031.000;147.000;21.000;11.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.353001,13.708212,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483735,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0000;-0.0010;-0.0010;0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2410;0.0670;-4.6680;-0.0250;0.0370;-0.0180,68.000;24.000;-46.000;-1038.000;145.000;16.000;12.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.323000,13.737247,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483861,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0000;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0550;0.1920;-4.6430;-0.0230;0.0350;-0.0120,81.000;39.000;-52.000;-1041.000;149.000;33.000;15.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.327000,13.926219,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483995,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0020;-0.0010;0.0000;-0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2100;0.2700;-4.6530;-0.0220;0.0390;-0.0160,81.000;12.000;-70.000;-1040.000;146.000;40.000;12.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.301001,13.980601,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484125,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0020;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0290;0.1760;-4.4610;-0.0240;0.0370;-0.0020,78.000;-5.000;-57.000;-1052.000;140.000;43.000;4.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.362000,13.900390,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484255,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0020;0.0010;-0.0010;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1080;0.1020;-4.7880;-0.0240;0.0350;-0.0210,74.000;6.000;-62.000;-1036.000;141.000;41.000;21.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.365000,13.902176,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484385,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0000;0.0020,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0970;0.1940;-4.5580;-0.0230;0.0370;-0.0120,52.000;-7.000;-44.000;-1034.000;145.000;21.000;12.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.337000,13.792167,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484515,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2090;0.0260;-4.6990;-0.0260;0.0370;-0.0190,52.000;-5.000;-54.000;-1040.000;137.000;22.000;22.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.341999,13.771779,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484639,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0020;0.0000;-0.0010;0.0000;-0.0020,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0980;0.1990;-4.5060;-0.0230;0.0370;-0.0030,58.000;-16.000;-58.000;-1036.000;145.000;33.000;32.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.315001,13.872426,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484771,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0530;0.1410;-4.5090;-0.0240;0.0360;-0.0160,61.000;-23.000;-47.000;-1049.000;147.000;28.000;28.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.325001,13.715100,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484900,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1370;0.0680;-4.6740;-0.0250;0.0380;-0.0140,64.000;-13.000;-31.000;-1074.000;148.000;19.000;27.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.356001,13.733329,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485030,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0960;0.1290;-4.5490;-0.0250;0.0380;-0.0100,70.000;-29.000;-39.000;-1069.000;144.000;32.000;28.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.327999,13.996800,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485156,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0020;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0970;0.0150;-4.7340;-0.0250;0.0370;-0.0250,67.000;-16.000;-31.000;-1068.000;146.000;35.000;18.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.330999,13.928607,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485280,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0520;0.2870;-4.4630;-0.0220;0.0350;-0.0020,77.000;-19.000;-35.000;-1067.000;141.000;23.000;31.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.337000,13.885516,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485410,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1320;0.1220;-4.7220;-0.0260;0.0370;-0.0130,90.000;-29.000;-38.000;-1073.000;147.000;23.000;22.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.354000,14.199232,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485544,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0020;0.0000;-0.0010;0.0000;-0.0020,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1260;0.0560;-4.7400;-0.0260;0.0360;-0.0200,97.000;-5.000;-51.000;-1067.000;138.000;34.000;20.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.327999,13.903488,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485671,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0010;-0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0960;0.0710;-4.7970;-0.0240;0.0380;-0.0160,100.000;-11.000;-38.000;-1063.000;147.000;31.000;29.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.336000,13.698233,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485801,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;-0.0020;-0.0010;0.0010;-0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1470;0.0600;-4.6670;-0.0260;0.0380;-0.0150,111.000;-16.000;-9.000;-1061.000;150.000;17.000;29.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.336000,13.698233,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485924,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0390;0.1990;-4.4780;-0.0240;0.0370;-0.0050,107.000;-37.000;-35.000;-1070.000;144.000;33.000;33.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.330000,14.067990,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486053,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1150;-0.0030;-4.8150;-0.0280;0.0350;-0.0190,117.000;-56.000;-40.000;-1061.000;143.000;44.000;26.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.318001,14.060754,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486185,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1750;0.2470;-4.5770;-0.0240;0.0370;-0.0050,118.000;-36.000;-60.000;-1052.000;144.000;32.000;27.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.362000,13.339701,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486315,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1800;-0.1390;-4.7770;-0.0280;0.0360;-0.0230,111.000;-35.000;-60.000;-1073.000;145.000;26.000;29.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.362000,13.339701,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486441,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0800;0.1560;-4.4620;-0.0220;0.0350;-0.0050,106.000;-11.000;-52.000;-1053.000;145.000;12.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330000,13.788030,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486566,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1380;0.1610;-4.4750;-0.0220;0.0370;-0.0020,115.000;-8.000;-63.000;-1065.000;146.000;34.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334000,13.883730,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486689,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;-0.0010;0.0010;0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1920;0.0520;-4.7280;-0.0250;0.0370;-0.0250,113.000;-9.000;-45.000;-1069.000;143.000;22.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.312000,13.684144,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486819,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0020;-0.0010;0.0000;-0.0020,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1940;-0.0480;-4.5780;-0.0260;0.0390;-0.0180,113.000;12.000;-76.000;-1067.000;138.000;34.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.729800,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486951,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0010;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2390;0.1130;-4.7760;-0.0250;0.0390;-0.0180,117.000;-4.000;-66.000;-1062.000;142.000;56.000;36.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334999,13.650974,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487076,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0000;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1380;-0.0650;-4.8240;-0.0270;0.0370;-0.0250,119.000;10.000;-71.000;-1069.000;139.000;38.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.921368,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487206,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0430;0.2830;-4.7350;-0.0230;0.0380;-0.0080,136.000;0.000;-115.000;-1070.000;153.000;44.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.332001,13.905873,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487330,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0020;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1110;0.0010;-4.8190;-0.0270;0.0360;-0.0260,130.000;-30.000;-99.000;-1078.000;146.000;50.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334999,13.907660,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487460,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1250;0.1230;-4.4190;-0.0260;0.0370;-0.0050,135.000;-22.000;-102.000;-1077.000;149.000;24.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,14.096151,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487594,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1590;0.1790;-4.7250;-0.0240;0.0390;-0.0090,126.000;-32.000;-134.000;-1082.000;145.000;31.000;21.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.339001,13.699994,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487736,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0960;0.1330;-4.6260;-0.0240;0.0360;-0.0070,134.000;-12.000;-129.000;-1076.000;148.000;27.000;25.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.696471,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487862,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0210;0.3270;-4.4370;-0.0230;0.0360;0.0000,122.000;-16.000;-123.000;-1073.000;146.000;30.000;15.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.318001,13.734302,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487991,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1780;0.0750;-4.7060;-0.0260;0.0370;-0.0150,110.000;-20.000;-130.000;-1082.000;157.000;11.000;20.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,13.816096,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488116,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0560;0.1310;-4.5610;-0.0250;0.0350;-0.0070,107.000;-27.000;-134.000;-1073.000;154.000;8.000;21.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.344999,13.820240,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488252,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1200;-0.0080;-4.7910;-0.0270;0.0380;-0.0180,91.000;-34.000;-139.000;-1078.000;155.000;9.000;26.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334999,13.790985,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488375,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0040;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1090;0.0300;-4.6370;-0.0260;0.0370;-0.0140,66.000;-43.000;-129.000;-1076.000;157.000;29.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334999,13.790985,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488505,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0690;0.1710;-4.5360;-0.0260;0.0370;-0.0040,64.000;-52.000;-149.000;-1088.000;154.000;38.000;28.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,13.769419,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488631,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3130;-0.0010;-5.0470;-0.0260;0.0370;-0.0260,84.000;-54.000;-144.000;-1104.000;153.000;12.000;29.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,13.798078,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488755,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0150;0.1810;-4.7160;-0.0230;0.0360;-0.0110,91.000;-73.000;-138.000;-1104.000;156.000;27.000;26.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,13.798078,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488887,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;0.0020;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1420;0.0410;-4.5530;-0.0250;0.0380;-0.0160,84.000;-55.000;-141.000;-1103.000;157.000;30.000;21.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,13.798078,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489021,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1890;0.0920;-4.7110;-0.0270;0.0390;-0.0170,68.000;-79.000;-139.000;-1094.000;155.000;21.000;9.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.336000,13.838248,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489149,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2640;0.0820;-4.7750;-0.0250;0.0380;-0.0200,73.000;-81.000;-128.000;-1115.000;164.000;27.000;22.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368000,13.763752,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489287,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;-0.0010;-0.0010;-0.0020;-0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1650;0.1370;-4.7050;-0.0240;0.0380;-0.0150,79.000;-82.000;-136.000;-1115.000;155.000;23.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320000,13.688840,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489422,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0020;-0.0020;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0400;0.2640;-4.6210;-0.0210;0.0370;-0.0010,82.000;-68.000;-145.000;-1106.000;158.000;34.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.356001,13.756684,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489546,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;-0.0020;-0.0020;-0.0010;0.0000;0.0020,NA,x=-0.00005;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1250;0.0650;-4.7620;-0.0260;0.0390;-0.0160,82.000;-23.000;-150.000;-1100.000;159.000;32.000;33.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.356001,13.756684,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489671,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1680;0.0200;-4.6480;-0.0250;0.0380;-0.0180,62.000;104.000;-127.000;-1102.000;164.000;31.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.332001,13.765880,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489809,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0010;0.0010;-0.0020;0.0000;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1000;0.1180;-4.8630;-0.0240;0.0360;-0.0180,74.000;147.000;-153.000;-1111.000;166.000;28.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.329000,13.390846,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489936,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0020;0.0000;-0.0010;0.0000;-0.0020,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1460;-0.0120;-4.7200;-0.0260;0.0380;-0.0190,63.000;130.000;-148.000;-1110.000;162.000;23.000;23.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.329000,13.390846,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490070,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0020;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0040;0.1350;-4.6110;-0.0250;0.0370;-0.0130,73.000;125.000;-167.000;-1122.000;168.000;43.000;20.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.343000,13.795714,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490202,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0750;0.1280;-4.5090;-0.0240;0.0370;-0.0060,80.000;117.000;-191.000;-1123.000;166.000;35.000;21.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341000,13.934577,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490330,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;0.0020;-0.0010;0.0000;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0390;0.0910;-4.5990;-0.0240;0.0360;-0.0160,108.000;112.000;-168.000;-1129.000;167.000;26.000;34.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341000,13.934577,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490456,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0010;-0.0010;0.0000;0.0020,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1810;0.0410;-4.6440;-0.0250;0.0400;-0.0070,102.000;110.000;-176.000;-1121.000;165.000;50.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.356001,14.060312,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490582,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;0.0000;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1280;0.2580;-4.8470;-0.0220;0.0370;-0.0120,86.000;103.000;-169.000;-1138.000;168.000;38.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330000,13.904680,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490706,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0910;0.1250;-4.8630;-0.0260;0.0360;-0.0210,92.000;103.000;-191.000;-1135.000;167.000;55.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330000,13.904680,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490844,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0020;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0900;0.0860;-4.8610;-0.0270;0.0350;-0.0180,91.000;110.000;-172.000;-1133.000;165.000;33.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.349001,13.472374,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490972,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3080;0.0420;-4.7270;-0.0250;0.0400;-0.0230,94.000;126.000;-141.000;-1132.000;168.000;46.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.325001,13.481851,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491106,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0450;0.3150;-4.6410;-0.0220;0.0370;-0.0100,100.000;136.000;-112.000;-1130.000;176.000;37.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,14.396461,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491232,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;-0.0010;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0900;0.0150;-4.7650;-0.0270;0.0370;-0.0190,89.000;143.000;-129.000;-1145.000;170.000;50.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.343000,13.585627,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491359,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0010;0.0020,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1410;0.0450;-4.7560;-0.0270;0.0360;-0.0170,92.000;161.000;-144.000;-1131.000;171.000;42.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.343000,13.585627,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491497,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1820;0.1180;-4.6040;-0.0250;0.0380;-0.0190,98.000;156.000;-151.000;-1125.000;166.000;34.000;54.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.963300,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491621,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0020;0.0000;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1680;0.1950;-4.5610;-0.0230;0.0370;-0.0080,90.000;166.000;-130.000;-1129.000;162.000;39.000;45.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.313999,13.522119,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491746,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2620;0.0770;-4.7050;-0.0250;0.0400;-0.0130,100.000;178.000;-116.000;-1116.000;174.000;43.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320999,13.712747,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491870,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0010;0.0020;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2610;-0.0940;-4.6920;-0.0270;0.0380;-0.0180,112.000;180.000;-130.000;-1123.000;164.000;61.000;34.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.318001,14.084072,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492002,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0980;0.0920;-4.5420;-0.0250;0.0370;-0.0080,108.000;75.000;-136.000;-1124.000;168.000;50.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327000,13.762929,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492127,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0750;0.0090;-4.6230;-0.0260;0.0360;-0.0160,102.000;54.000;-133.000;-1120.000;163.000;65.000;30.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.336000,13.721568,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492259,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0020;0.0000;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1190;0.0490;-4.8220;-0.0260;0.0360;-0.0190,109.000;12.000;-146.000;-1130.000;167.000;49.000;34.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.346001,13.984254,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492398,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0040;-0.0010;0.0010;-0.0010;0.0000;-0.0020,NA,x=0.00006;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0720;0.0730;-4.8350;-0.0270;0.0350;-0.0160,100.000;-30.000;-139.000;-1127.000;164.000;29.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.349001,13.635816,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492523,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0760;0.1030;-4.6640;-0.0240;0.0350;-0.0150,100.000;-34.000;-105.000;-1136.000;171.000;31.000;30.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330999,14.115255,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492653,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0020;0.0000;-0.0010;-0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1230;0.1140;-4.6350;-0.0260;0.0380;-0.0150,102.000;-26.000;-142.000;-1147.000;174.000;29.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.799851,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492781,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0010;-0.0020;-0.0020,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0780;0.0580;-4.5350;-0.0250;0.0350;-0.0040,86.000;-29.000;-153.000;-1139.000;159.000;28.000;18.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351000,13.800441,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492921,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0000;0.0000;-0.0010;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1780;0.1030;-4.7040;-0.0250;0.0390;-0.0160,93.000;-15.000;-135.000;-1145.000;161.000;49.000;30.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341000,13.701167,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493064,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0020;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1280;0.0850;-4.7920;-0.0230;0.0360;-0.0200,87.000;-6.000;-129.000;-1147.000;167.000;31.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.613050,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493198,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0110;0.2770;-4.7240;-0.0230;0.0350;-0.0180,99.000;-11.000;-141.000;-1149.000;164.000;45.000;19.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.613050,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493334,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1710;0.0460;-4.6950;-0.0260;0.0360;-0.0180,89.000;-5.000;-153.000;-1145.000;171.000;24.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.372000,13.906341,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493460,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0910;0.1770;-4.5560;-0.0220;0.0380;-0.0040,82.000;-1.000;-139.000;-1141.000;174.000;23.000;34.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.711146,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493605,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0020;0.0000;-0.0010;-0.0020;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1080;-0.0630;-4.7500;-0.0280;0.0360;-0.0200,105.000;-4.000;-149.000;-1134.000;171.000;7.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341999,14.215278,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493733,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0230;0.0760;-4.5900;-0.0230;0.0360;-0.0120,91.000;-8.000;-131.000;-1147.000;167.000;36.000;30.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341999,14.215278,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493873,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;-0.0010;-0.0010;0.0010;0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0810;0.1400;-4.4540;-0.0230;0.0350;-0.0060,86.000;-21.000;-131.000;-1139.000;163.000;49.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.357000,13.687203,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494006,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0020;-0.0020;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0660;0.0930;-4.5940;-0.0240;0.0340;-0.0110,77.000;-14.000;-135.000;-1139.000;167.000;23.000;36.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,13.775319,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494138,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0330;0.3520;-4.5110;-0.0220;0.0350;-0.0080,73.000;-27.000;-140.000;-1142.000;171.000;31.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.344999,13.843584,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494270,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0020;0.0010;-0.0010;0.0000;0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2050;0.0230;-4.7540;-0.0250;0.0390;-0.0180,84.000;-13.000;-129.000;-1140.000;169.000;34.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.354000,13.918984,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494402,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0840;0.1620;-4.6050;-0.0230;0.0370;-0.0040,89.000;0.000;-139.000;-1134.000;176.000;14.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.929801,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494529,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0000;-0.0010;-0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1480;-0.0080;-4.8170;-0.0250;0.0360;-0.0220,91.000;-19.000;-136.000;-1141.000;178.000;20.000;54.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327000,13.949546,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494663,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1170;0.1450;-4.5970;-0.0250;0.0380;-0.0070,82.000;-22.000;-128.000;-1140.000;177.000;25.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.355000,13.826160,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494804,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0350;0.1090;-4.5600;-0.0260;0.0370;-0.0150,90.000;-27.000;-118.000;-1138.000;183.000;11.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.343000,13.562283,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494938,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;-0.0010;0.0010;-0.0010;-0.0020;-0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2630;0.0410;-4.7660;-0.0240;0.0390;-0.0210,112.000;-12.000;-114.000;-1134.000;179.000;33.000;49.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.364000,13.901581,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495070,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1540;-0.0130;-4.6220;-0.0240;0.0370;-0.0180,122.000;-3.000;-120.000;-1130.000;178.000;18.000;50.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.353001,14.105212,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495205,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0060;0.1310;-4.4550;-0.0240;0.0360;-0.0060,122.000;3.000;-131.000;-1127.000;185.000;22.000;52.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.365000,13.902176,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495336,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0660;0.1270;-4.5950;-0.0240;0.0350;-0.0120,122.000;-10.000;-141.000;-1126.000;180.000;29.000;44.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,13.588536,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495464,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1320;0.0320;-4.5770;-0.0250;0.0380;-0.0190,115.000;-14.000;-116.000;-1120.000;182.000;14.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,13.868118,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495596,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0010;-0.0020,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2010;0.2200;-4.7480;-0.0230;0.0380;-0.0170,124.000;-16.000;-102.000;-1130.000;179.000;40.000;44.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.316999,13.663762,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495726,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1800;0.1400;-4.7240;-0.0250;0.0380;-0.0110,130.000;4.000;-113.000;-1140.000;175.000;28.000;42.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.313000,14.104365,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495856,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1240;0.0360;-4.6180;-0.0270;0.0360;-0.0140,129.000;9.000;-118.000;-1126.000;183.000;25.000;29.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,13.704689,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495980,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1100;0.0260;-4.6280;-0.0240;0.0390;-0.0130,133.000;6.000;-116.000;-1128.000;178.000;23.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,13.466026,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496106,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;0.0000;-0.0010;-0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0750;0.0760;-4.9270;-0.0260;0.0330;-0.0210,149.000;3.000;-105.000;-1122.000;182.000;34.000;55.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.361000,14.110043,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496230,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0010;-0.0010;-0.0010;0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2580;-0.0940;-4.9070;-0.0250;0.0380;-0.0230,151.000;0.000;-117.000;-1099.000;176.000;34.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.325001,13.575151,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496361,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0160;0.0520;-4.7040;-0.0240;0.0350;-0.0130,143.000;-11.000;-114.000;-1106.000;183.000;38.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.325001,13.575151,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496513,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0010;-0.0010;0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1520;0.1470;-4.6730;-0.0230;0.0370;-0.0110,163.000;-15.000;-112.000;-1105.000;184.000;38.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351000,13.940547,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496648,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1600;-0.0660;-4.9710;-0.0270;0.0380;-0.0240,171.000;-32.000;-105.000;-1101.000;175.000;18.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.355000,13.872869,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496776,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0000;-0.0010;-0.0020;0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0770;0.1590;-4.6060;-0.0240;0.0390;-0.0070,166.000;-41.000;-126.000;-1115.000;172.000;44.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.339001,13.793350,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496902,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;0.0000;-0.0010;-0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0380;0.1010;-4.7250;-0.0260;0.0350;-0.0110,177.000;-28.000;-146.000;-1105.000;125.000;23.000;33.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.339001,13.793350,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497027,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0920;0.0750;-4.7930;-0.0250;0.0350;-0.0230,177.000;-45.000;-146.000;-1106.000;131.000;27.000;36.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,13.768829,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497158,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0020;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0180;0.1670;-4.4790;-0.0250;0.0350;0.0000,179.000;-45.000;-118.000;-1107.000;133.000;44.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341999,13.795122,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497288,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0020;-0.0010;-0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1330;0.0080;-4.8870;-0.0250;0.0370;-0.0220,191.000;-55.000;-99.000;-1107.000;135.000;38.000;42.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,14.265628,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497426,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0010;-0.0010;-0.0020;0.0000;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1450;0.0050;-4.6710;-0.0260;0.0380;-0.0160,191.000;-33.000;-110.000;-1105.000;136.000;57.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,14.265628,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497558,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0020;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0730;-0.0040;-4.7230;-0.0260;0.0350;-0.0190,184.000;-21.000;-118.000;-1099.000;127.000;28.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,13.745493,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497692,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0020;-0.0010;-0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0290;0.1120;-4.7290;-0.0260;0.0350;-0.0200,173.000;-16.000;-102.000;-1104.000;133.000;33.000;46.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.354000,13.358489,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497830,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1470;-0.0740;-4.7540;-0.0270;0.0370;-0.0170,177.000;-15.000;-102.000;-1110.000;135.000;26.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.346001,13.914217,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497956,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0310;0.0680;-4.4990;-0.0250;0.0360;-0.0080,175.000;-18.000;-96.000;-1095.000;134.000;26.000;33.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.346001,13.914217,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498082,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0510;0.1060;-4.5960;-0.0260;0.0360;-0.0060,178.000;-7.000;-111.000;-1095.000;140.000;50.000;46.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351999,13.754327,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498216,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0010;-0.0010;0.0010;-0.0020,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0310;0.1360;-4.3950;-0.0240;0.0370;-0.0110,182.000;-31.000;-130.000;-1077.000;137.000;34.000;36.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351999,13.263936,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498340,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0000;0.0000;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0460;0.1410;-4.6160;-0.0240;0.0370;-0.0120,179.000;-36.000;-120.000;-1082.000;133.000;43.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.743137,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498467,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2830;-0.1550;-4.8340;-0.0280;0.0390;-0.0240,190.000;-50.000;-132.000;-1079.000;137.000;30.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,13.862771,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498591,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0020;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0920;0.1430;-4.4780;-0.0240;0.0380;-0.0080,193.000;-55.000;-126.000;-1081.000;139.000;16.000;28.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,13.792167,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498723,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0020;0.0010;-0.0010;-0.0010;-0.0020,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1010;0.0510;-4.5600;-0.0260;0.0380;-0.0100,194.000;-68.000;-131.000;-1067.000;147.000;30.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.299999,13.630499,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498849,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;-0.0010;-0.0020;-0.0010;0.0000;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0050;0.1230;-4.6650;-0.0230;0.0370;-0.0190,199.000;-49.000;-138.000;-1078.000;133.000;48.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.323999,13.901104,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498989,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1640;-0.1610;-4.7380;-0.0280;0.0380;-0.0190,195.000;-79.000;-150.000;-1068.000;129.000;39.000;19.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,14.078843,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499113,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0310;0.1740;-4.5370;-0.0240;0.0370;-0.0020,188.000;-54.000;-136.000;-1077.000;136.000;14.000;28.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.325001,13.738425,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499243,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;-0.0020;-0.0020;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0630;0.3460;-4.3610;-0.0220;0.0360;-0.0080,192.000;-62.000;-136.000;-1063.000;136.000;26.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.570997,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499369,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0680;-0.0010;-4.8310;-0.0260;0.0360;-0.0240,186.000;-61.000;-113.000;-1070.000;139.000;34.000;44.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.827936,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499492,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;-0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0920;0.0600;-4.4440;-0.0260;0.0370;-0.0080,188.000;-53.000;-105.000;-1068.000;146.000;24.000;25.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,14.095547,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499629,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0420;0.2230;-4.4400;-0.0230;0.0370;-0.0090,204.000;13.000;-110.000;-1055.000;140.000;41.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,14.095547,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499759,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;-0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0510;0.1260;-4.6140;-0.0240;0.0370;-0.0100,226.000;35.000;-104.000;-1060.000;136.000;15.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320999,13.619463,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499884,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2160;-0.0160;-4.7090;-0.0250;0.0380;-0.0180,210.000;39.000;-116.000;-1056.000;134.000;21.000;42.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,13.512702,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500010,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2130;0.1030;-4.7620;-0.0240;0.0380;-0.0210,201.000;44.000;-118.000;-1058.000;137.000;39.000;23.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.353001,13.684859,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500148,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3400;0.0880;-4.6790;-0.0240;0.0380;-0.0160,207.000;69.000;-121.000;-1041.000;145.000;50.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,13.768829,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500274,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0010;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0750;0.3060;-4.7370;-0.0220;0.0350;-0.0040,210.000;67.000;-133.000;-1038.000;139.000;57.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,14.225023,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500410,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;-0.0010;0.0000;-0.0010;0.0000;0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0040;0.0550;-4.4720;-0.0250;0.0360;-0.0080,222.000;89.000;-116.000;-1030.000;142.000;42.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,14.225023,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500550,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0400;0.2420;-4.5340;-0.0230;0.0360;-0.0060,231.000;103.000;-133.000;-1026.000;138.000;41.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.305000,13.866476,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500683,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1330;0.2530;-4.5700;-0.0220;0.0380;-0.0070,217.000;109.000;-140.000;-1040.000;136.000;57.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320999,13.806032,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500809,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2250;0.0620;-4.8310;-0.0250;0.0380;-0.0180,219.000;133.000;-121.000;-1053.000;141.000;38.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.365999,13.902770,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500938,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0300;0.0040;-4.6330;-0.0260;0.0370;-0.0100,221.000;132.000;-118.000;-1050.000;142.000;43.000;26.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.365999,13.902770,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501064,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;-0.0010;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3010;0.0420;-4.7530;-0.0250;0.0420;-0.0190,210.000;135.000;-133.000;-1065.000;147.000;42.000;29.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.344999,13.680170,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501198,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0010;-0.0010;0.0010;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2290;0.0900;-4.6910;-0.0240;0.0400;-0.0170,205.000;164.000;-148.000;-1061.000;146.000;33.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341000,13.631144,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501330,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;-0.0010;0.0010;-0.0010;-0.0010;0.0020,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1610;-0.1160;-5.0010;-0.0270;0.0360;-0.0240,213.000;176.000;-145.000;-1063.000;148.000;27.000;15.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327999,13.576896,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501459,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1040;0.1540;-4.5390;-0.0230;0.0400;-0.0030,210.000;180.000;-146.000;-1074.000;148.000;50.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327999,13.576896,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501586,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0020;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1320;-0.0610;-4.8330;-0.0280;0.0370;-0.0200,201.000;190.000;-159.000;-1068.000;146.000;31.000;29.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330000,13.788030,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501740,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0020;-0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0840;0.1770;-4.3700;-0.0250;0.0350;-0.0030,219.000;202.000;-168.000;-1063.000;147.000;35.000;18.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341000,14.167987,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501866,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;-0.0020;-0.0020;0.0000;-0.0020,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1430;0.0930;-4.6640;-0.0240;0.0390;-0.0190,228.000;198.000;-163.000;-1054.000;150.000;47.000;34.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368999,13.881185,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502004,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;0.0010;-0.0020;0.0000;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1270;0.1850;-4.4510;-0.0240;0.0370;-0.0070,211.000;204.000;-155.000;-1062.000;144.000;49.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.799851,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502140,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0340;0.1940;-4.4820;-0.0230;0.0350;-0.0020,196.000;178.000;-177.000;-1059.000;151.000;30.000;28.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351000,13.613633,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502274,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0190;0.1910;-4.6300;-0.0250;0.0360;-0.0090,186.000;126.000;-162.000;-1050.000;144.000;45.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.323000,13.527340,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502409,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0000;-0.0020;0.0000;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2300;0.0900;-4.8120;-0.0270;0.0350;-0.0230,177.000;109.000;-154.000;-1057.000;145.000;50.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.874651,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502539,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;-0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0840;0.2730;-4.4180;-0.0240;0.0380;-0.0040,178.000;83.000;-164.000;-1050.000;150.000;49.000;49.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.362000,13.666769,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502669,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0720;0.1900;-4.6540;-0.0240;0.0360;-0.0190,175.000;18.000;-174.000;-1055.000;152.000;53.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.329000,13.694124,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502795,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0010;-0.0020;0.0000;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0910;0.1470;-4.7330;-0.0250;0.0370;-0.0030,165.000;-8.000;-190.000;-1069.000;151.000;46.000;50.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,14.032148,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502919,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1180;-0.0740;-4.8590;-0.0270;0.0360;-0.0240,167.000;-27.000;-176.000;-1071.000;159.000;54.000;62.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.316999,13.780347,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503055,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0020;-0.0010;-0.0010;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0020;0.0560;-4.6070;-0.0260;0.0340;-0.0070,158.000;-41.000;-181.000;-1064.000;166.000;22.000;61.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.357000,13.827344,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503185,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0010;0.0000;-0.0020;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1580;-0.0050;-4.6780;-0.0250;0.0370;-0.0160,156.000;-39.000;-183.000;-1054.000;164.000;33.000;44.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.357000,13.827344,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503309,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1360;-0.0370;-4.6880;-0.0270;0.0370;-0.0150,163.000;-12.000;-176.000;-1052.000;154.000;43.000;42.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.356001,13.803397,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503439,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;-0.0020;-0.0010;-0.0010;0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0120;0.1150;-4.6470;-0.0230;0.0360;-0.0110,156.000;-2.000;-163.000;-1058.000;156.000;42.000;55.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330999,13.881945,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503575,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0420;0.2520;-4.5480;-0.0220;0.0370;-0.0040,150.000;1.000;-142.000;-1056.000;166.000;46.000;48.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.306999,13.914279,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503701,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1770;0.0680;-4.6370;-0.0240;0.0390;-0.0120,135.000;19.000;-136.000;-1040.000;154.000;40.000;45.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.375999,13.815216,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503839,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0020;-0.0010;-0.0010;0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0390;0.1690;-4.5140;-0.0240;0.0390;-0.0040,126.000;43.000;-136.000;-1037.000;160.000;30.000;50.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.346001,13.704103,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503969,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;-0.0020;-0.0010;0.0000;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1120;-0.0540;-4.7140;-0.0270;0.0360;-0.0180,117.000;31.000;-145.000;-1028.000;162.000;44.000;53.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.346001,13.704103,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504095,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;-0.0010;-0.0010;-0.0020;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0790;0.1420;-4.5770;-0.0250;0.0370;-0.0070,101.000;49.000;-149.000;-1016.000;157.000;21.000;48.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.649805,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504225,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;-0.0020;0.0000;-0.0020;-0.0020;0.0000,NA,x=-0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0610;0.1940;-4.3570;-0.0240;0.0360;-0.0050,97.000;61.000;-153.000;-1006.000;156.000;25.000;55.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368999,13.694234,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504349,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0020;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0180;-0.0330;-4.7330;-0.0270;0.0360;-0.0150,97.000;71.000;-145.000;-1015.000;151.000;37.000;55.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368999,13.694234,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504475,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0020;0.1740;-4.5700;-0.0240;0.0350;-0.0130,103.000;65.000;-158.000;-1012.000;152.000;28.000;68.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.360001,13.875840,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504607,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0040;-0.0020;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0210;-0.0450;-4.8160;-0.0270;0.0350;-0.0180,107.000;72.000;-158.000;-1009.000;159.000;34.000;62.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.336000,13.838248,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504739,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0160;0.1270;-4.4350;-0.0270;0.0370;-0.0070,97.000;77.000;-167.000;-1007.000;155.000;46.000;74.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.344999,13.703515,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504871,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;0.0010;0.0000;-0.0020;0.0000;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0470;-0.0060;-4.6550;-0.0250;0.0370;-0.0150,100.000;58.000;-165.000;-997.000;157.000;14.000;58.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.344999,13.703515,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504995,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1740;0.1620;-4.7910;-0.0230;0.0390;-0.0120,97.000;48.000;-176.000;-986.000;155.000;25.000;50.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.365000,14.089095,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505125,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0010;-0.0010;0.0000;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1380;0.0140;-4.8400;-0.0270;0.0360;-0.0210,87.000;55.000;-168.000;-987.000;152.000;38.000;68.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.363001,13.760807,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505255,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0780;0.1530;-4.6990;-0.0240;0.0370;-0.0110,68.000;67.000;-181.000;-982.000;156.000;30.000;87.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.603139,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505387,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0020;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1450;0.0250;-4.6260;-0.0270;0.0380;-0.0120,61.000;68.000;-196.000;-993.000;157.000;21.000;72.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.603139,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505516,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0870;-0.0250;-4.7210;-0.0270;0.0370;-0.0130,70.000;68.000;-195.000;-999.000;160.000;32.000;72.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.360001,13.992640,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505648,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0020;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0690;0.0770;-4.4640;-0.0220;0.0370;-0.0090,78.000;71.000;-209.000;-1003.000;166.000;6.000;82.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327999,13.856831,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505780,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;-0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1140;-0.0410;-4.7850;-0.0270;0.0360;-0.0200,91.000;75.000;-205.000;-1006.000;164.000;38.000;90.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.362000,13.736856,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505910,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0930;0.1120;-4.8190;-0.0260;0.0360;-0.0150,92.000;73.000;-215.000;-999.000;166.000;20.000;63.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.393000,13.778476,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506036,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;0.0000;-0.0010;0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1560;0.0770;-4.5040;-0.0250;0.0380;-0.0060,99.000;74.000;-230.000;-1000.000;172.000;19.000;77.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.360001,13.852480,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506162,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0780;0.1790;-4.4790;-0.0240;0.0380;-0.0050,89.000;76.000;-236.000;-1003.000;167.000;23.000;80.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.294001,13.696872,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506287,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2900;0.1080;-4.9030;-0.0240;0.0390;-0.0190,89.000;69.000;-233.000;-1003.000;167.000;32.000;86.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.355000,13.849515,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506415,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0040;0.0010;0.0000;-0.0020;0.0010;0.0000,NA,x=-0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1040;0.2300;-4.6090;-0.0240;0.0380;-0.0050,96.000;75.000;-227.000;-1004.000;174.000;20.000;77.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351999,13.730976,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506541,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0020;0.0010;0.0000;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1250;-0.0350;-4.7090;-0.0260;0.0370;-0.0140,94.000;81.000;-255.000;-1005.000;175.000;26.000;73.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.295000,13.464510,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506665,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0020;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0280;0.0620;-4.7090;-0.0270;0.0350;-0.0210,99.000;96.000;-224.000;-999.000;173.000;12.000;71.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334000,13.907064,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506789,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0100;0.1140;-4.4310;-0.0250;0.0370;-0.0020,100.000;109.000;-231.000;-996.000;176.000;41.000;68.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.370001,13.998630,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506919,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0660;0.2220;-4.6270;-0.0230;0.0360;-0.0070,84.000;101.000;-236.000;-993.000;172.000;36.000;52.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.391001,13.941037,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507045,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;-0.0020;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0080;0.1740;-4.7370;-0.0230;0.0350;-0.0200,78.000;111.000;-238.000;-993.000;168.000;28.000;54.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.361000,13.736268,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507173,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0010;0.0020;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2390;0.0260;-4.6370;-0.0260;0.0380;-0.0190,89.000;105.000;-239.000;-993.000;166.000;21.000;55.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330999,13.881945,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507300,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;-0.0010;-0.0010;-0.0020;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0230;0.2840;-4.7150;-0.0220;0.0370;-0.0100,71.000;123.000;-238.000;-994.000;169.000;43.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.363001,13.363637,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507425,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;0.0000;0.0000;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0460;-0.0210;-4.7090;-0.0260;0.0350;-0.0200,69.000;130.000;-227.000;-997.000;170.000;36.000;70.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351000,14.150706,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507570,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0010;-0.0020;-0.0010;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1460;0.2730;-4.4380;-0.0220;0.0380;-0.0100,75.000;152.000;-222.000;-1007.000;164.000;24.000;74.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330000,13.741370,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507704,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.1440;0.3030;-4.3420;-0.0240;0.0340;0.0000,88.000;158.000;-219.000;-999.000;167.000;23.000;65.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.332001,13.625888,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507830,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0050;0.0650;-4.5880;-0.0250;0.0360;-0.0050,98.000;167.000;-205.000;-991.000;174.000;42.000;58.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368000,13.717016,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507958,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0830;0.1470;-4.6650;-0.0240;0.0360;-0.0070,107.000;156.000;-187.000;-1004.000;171.000;41.000;72.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368000,13.717016,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508092,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0010;-0.0020;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1210;0.2160;-4.6500;-0.0220;0.0380;-0.0110,100.000;154.000;-171.000;-979.000;171.000;38.000;82.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,14.148888,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508217,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0020;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1940;0.0860;-4.4460;-0.0250;0.0390;-0.0090,91.000;145.000;-207.000;-975.000;164.000;34.000;74.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,14.026138,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508347,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1100;0.1390;-4.7390;-0.0240;0.0350;-0.0190,86.000;135.000;-230.000;-970.000;170.000;46.000;68.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.382999,13.819353,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508477,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0020;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0370;0.0770;-4.5630;-0.0260;0.0370;-0.0110,76.000;154.000;-226.000;-975.000;168.000;38.000;73.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.804578,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508602,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1240;-0.0040;-4.6720;-0.0260;0.0360;-0.0220,68.000;147.000;-238.000;-974.000;160.000;38.000;65.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.370001,13.437750,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508732,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000;-0.0020,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1400;0.1760;-4.5450;-0.0230;0.0380;-0.0080,80.000;127.000;-217.000;-988.000;163.000;57.000;82.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.370001,13.437750,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508858,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0020;-0.0010;-0.0020;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0890;0.1770;-4.5570;-0.0250;0.0370;-0.0110,72.000;128.000;-228.000;-982.000;154.000;43.000;58.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,13.705276,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508986,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0020;0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1330;0.0050;-4.7380;-0.0260;0.0360;-0.0160,76.000;137.000;-225.000;-984.000;163.000;45.000;66.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341999,13.935174,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509116,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1230;0.0870;-4.4690;-0.0260;0.0370;-0.0120,63.000;118.000;-250.000;-983.000;164.000;38.000;74.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.360001,13.945920,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509248,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1250;0.0690;-4.9050;-0.0260;0.0360;-0.0200,82.000;115.000;-254.000;-971.000;169.000;40.000;61.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334999,13.744314,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509372,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;0.0000;-0.0020;-0.0020;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0240;0.1810;-4.4980;-0.0240;0.0370;-0.0130,85.000;111.000;-256.000;-963.000;174.000;29.000;76.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,14.031547,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509498,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0010;-0.0010;-0.0010;-0.0020,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0470;0.1370;-4.4200;-0.0250;0.0390;-0.0010,88.000;128.000;-236.000;-964.000;168.000;42.000;63.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,14.026138,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509626,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0320;0.0500;-4.6350;-0.0260;0.0360;-0.0100,82.000;148.000;-250.000;-958.000;167.000;48.000;72.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.378000,13.582617,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509758,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1190;0.0700;-4.7710;-0.0240;0.0370;-0.0160,80.000;148.000;-222.000;-951.000;171.000;51.000;77.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327000,13.716276,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509906,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;-0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0770;0.0990;-4.5160;-0.0260;0.0360;-0.0110,80.000;162.000;-221.000;-938.000;177.000;32.000;76.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.349001,13.659165,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510032,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0020;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0250;0.0160;-4.5580;-0.0260;0.0360;-0.0080,80.000;165.000;-207.000;-919.000;177.000;39.000;71.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.362000,13.643408,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510158,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0020;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0650;-0.0040;-4.5730;-0.0260;0.0370;-0.0130,84.000;168.000;-220.000;-936.000;173.000;47.000;76.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.357000,13.803988,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510298,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0020;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1070;0.2540;-4.3800;-0.0230;0.0370;-0.0080,65.000;170.000;-230.000;-932.000;173.000;42.000;58.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.357000,13.803988,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510433,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0020;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0300;0.2180;-4.5650;-0.0240;0.0380;-0.0070,70.000;148.000;-197.000;-929.000;180.000;44.000;65.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351000,13.356773,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510557,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0080;0.0380;-4.8170;-0.0250;0.0350;-0.0190,79.000;146.000;-214.000;-926.000;181.000;42.000;72.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320999,13.409574,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510694,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0020;0.0020;0.0000;0.0010;-0.0010;0.0000;0.0010,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2130;-0.1190;-4.6190;-0.0270;0.0380;-0.0170,79.000;167.000;-203.000;-906.000;177.000;41.000;59.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320999,13.409574,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510840,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0020;0.0000;-0.0010;0.0000;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1080;0.1410;-4.7870;-0.0240;0.0360;-0.0210,70.000;163.000;-209.000;-906.000;180.000;24.000;74.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327999,13.436927,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510968,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2190;0.0250;-4.7840;-0.0250;0.0370;-0.0170,72.000;176.000;-198.000;-885.000;167.000;31.000;70.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351999,13.310639,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261511101,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0910;0.2770;-4.5390;-0.0230;0.0360;-0.0080,74.000;176.000;-176.000;-891.000;170.000;47.000;59.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351999,13.310639,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261511235,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0020;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0210;0.2580;-4.6930;-0.0230;0.0380;-0.0100,61.000;168.000;-180.000;-886.000;169.000;49.000;60.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.340000,13.420500,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261511371,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0020;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1470;0.0450;-4.6030;-0.0260;0.0390;-0.0150,42.000;158.000;-177.000;-887.000;168.000;53.000;60.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.360001,13.759040,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
# rm75_acceptance_communication
| Check | Result | Detail |
| --- | --- | --- |
| source_document | INFO | RM75-6F mechanical arm testing agent operation document v1.0 |
| scope | INFO | 30-second read-only communication smoke test and acceptance CSV data logging |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| rm_get_current_tool_frame | PASS | error=0 |
| communication_csv_open | PASS | /home/mashiro/project/linkerhand-cpp-sdk/reports/realman_hardware_tests/rm75_acceptance_communication_latest.csv |
| samples | INFO | 230 |
| successful_full_samples | INFO | 230 |
| read_attempts | INFO | 1150 |
| read_failures | INFO | 0 |
| failure_rate | INFO | 0.000000 |
| avg_sample_period_ms | INFO | 130.505037 |
| max_sample_period_ms | INFO | 153.067490 |
| csv_latest | INFO | /home/mashiro/project/linkerhand-cpp-sdk/reports/realman_hardware_tests/rm75_acceptance_communication_latest.csv |
| sample_count_minimum | PASS | samples=230 |
| successful_sample_ratio_at_least_95_percent | PASS | successful=230, samples=230 |
| sdk_read_failure_rate_at_most_1_percent | PASS | failure_rate=0.000000 |
| sample_values_finite_and_in_expected_ranges | PASS | finite_failures=0 |
| controller_error_absent_during_communication | PASS | count=0 |
| arm_error_absent_during_communication | PASS | count=0 |
| sample_period_below_1s | PASS | max_ms=153.067490 |
Assertions: 13, failures: 0
timestamp_ms,test_id,robot_model,robot_ip,motion_mode,speed_percent,payload_kg,target_joints_deg,actual_joints_deg,target_tcp_pose,actual_tcp_pose,force_torque,joint_current,joint_temperature,voltage,power,error_code,safety_state,comment
1781261481485,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0010;-0.0020;-0.0010;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0940;0.0790;-4.5640;-0.0260;0.0370;-0.0130,117.000;156.000;-118.000;-1000.000;125.000;39.000;30.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.319000,13.408425,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261481625,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0020;0.0010;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1750;0.0440;-4.7960;-0.0250;0.0380;-0.0220,113.000;150.000;-111.000;-1018.000;131.000;22.000;32.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.334999,13.510964,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261481766,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1480;0.1120;-4.6830;-0.0260;0.0380;-0.0160,104.000;142.000;-84.000;-1013.000;132.000;47.000;22.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.329000,13.927413,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261481896,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1180;0.0680;-4.9170;-0.0250;0.0370;-0.0200,104.000;115.000;-102.000;-1030.000;123.000;20.000;19.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.353001,13.638152,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482022,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0020;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0510;0.2560;-4.5380;-0.0230;0.0370;-0.0150,95.000;94.000;-105.000;-1033.000;121.000;38.000;16.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.341000,13.817872,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482147,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0020;0.0000;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1030;0.2310;-4.5740;-0.0230;0.0370;-0.0040,90.000;87.000;-77.000;-1025.000;118.000;29.000;13.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.381001,13.467456,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482275,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0020;0.0000;-0.0010;-0.0020;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1700;-0.0200;-4.8350;-0.0250;0.0380;-0.0190,87.000;79.000;-104.000;-1014.000;125.000;14.000;6.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.381001,13.467456,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482424,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0850;0.1460;-4.8170;-0.0240;0.0360;-0.0180,82.000;79.000;-79.000;-1025.000;131.000;30.000;19.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.348000,13.541839,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482567,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1060;-0.0280;-4.6400;-0.0260;0.0350;-0.0180,63.000;61.000;-77.000;-1022.000;130.000;29.000;-2.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.347000,13.961506,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482694,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0270;0.0560;-4.5850;-0.0250;0.0340;-0.0160,71.000;60.000;-63.000;-1029.000;129.000;43.000;4.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.356001,13.709973,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482823,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0260;0.2100;-4.4090;-0.0230;0.0360;-0.0070,92.000;61.000;-71.000;-1013.000;138.000;33.000;10.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.323000,13.504017,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261482951,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0020;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0940;0.1040;-4.6230;-0.0260;0.0360;-0.0190,89.000;48.000;-86.000;-1021.000;140.000;31.000;2.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.323000,13.504017,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483080,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0010;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2230;0.1240;-4.7570;-0.0250;0.0390;-0.0150,91.000;53.000;-89.000;-1020.000;138.000;36.000;0.000,36.000;35.000;34.000;34.000;36.000;36.000;40.000,23.334000,13.907064,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483210,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0020;0.0000;0.0010;-0.0010;-0.0010;-0.0020,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0390;0.2170;-4.5100;-0.0230;0.0380;-0.0060,82.000;66.000;-75.000;-1022.000;144.000;30.000;9.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.361000,13.923156,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483336,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0710;0.1120;-4.6880;-0.0240;0.0350;-0.0120,87.000;71.000;-50.000;-1020.000;140.000;38.000;-9.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.327999,13.623551,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483465,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1270;0.1750;-4.4460;-0.0240;0.0390;-0.0030,83.000;60.000;-67.000;-1027.000;147.000;21.000;7.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.365999,13.972867,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483602,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0400;0.0530;-4.6610;-0.0260;0.0370;-0.0090,80.000;44.000;-64.000;-1031.000;147.000;21.000;11.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.353001,13.708212,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483735,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0000;-0.0010;-0.0010;0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2410;0.0670;-4.6680;-0.0250;0.0370;-0.0180,68.000;24.000;-46.000;-1038.000;145.000;16.000;12.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.323000,13.737247,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483861,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0000;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0550;0.1920;-4.6430;-0.0230;0.0350;-0.0120,81.000;39.000;-52.000;-1041.000;149.000;33.000;15.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.327000,13.926219,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261483995,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0020;-0.0010;0.0000;-0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2100;0.2700;-4.6530;-0.0220;0.0390;-0.0160,81.000;12.000;-70.000;-1040.000;146.000;40.000;12.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.301001,13.980601,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484125,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0020;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0290;0.1760;-4.4610;-0.0240;0.0370;-0.0020,78.000;-5.000;-57.000;-1052.000;140.000;43.000;4.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.362000,13.900390,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484255,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0020;0.0010;-0.0010;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1080;0.1020;-4.7880;-0.0240;0.0350;-0.0210,74.000;6.000;-62.000;-1036.000;141.000;41.000;21.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.365000,13.902176,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484385,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0000;0.0020,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0970;0.1940;-4.5580;-0.0230;0.0370;-0.0120,52.000;-7.000;-44.000;-1034.000;145.000;21.000;12.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.337000,13.792167,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484515,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2090;0.0260;-4.6990;-0.0260;0.0370;-0.0190,52.000;-5.000;-54.000;-1040.000;137.000;22.000;22.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.341999,13.771779,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484639,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0020;0.0000;-0.0010;0.0000;-0.0020,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0980;0.1990;-4.5060;-0.0230;0.0370;-0.0030,58.000;-16.000;-58.000;-1036.000;145.000;33.000;32.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.315001,13.872426,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484771,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0530;0.1410;-4.5090;-0.0240;0.0360;-0.0160,61.000;-23.000;-47.000;-1049.000;147.000;28.000;28.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.325001,13.715100,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261484900,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1370;0.0680;-4.6740;-0.0250;0.0380;-0.0140,64.000;-13.000;-31.000;-1074.000;148.000;19.000;27.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.356001,13.733329,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485030,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0960;0.1290;-4.5490;-0.0250;0.0380;-0.0100,70.000;-29.000;-39.000;-1069.000;144.000;32.000;28.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.327999,13.996800,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485156,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0020;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0970;0.0150;-4.7340;-0.0250;0.0370;-0.0250,67.000;-16.000;-31.000;-1068.000;146.000;35.000;18.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.330999,13.928607,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485280,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0520;0.2870;-4.4630;-0.0220;0.0350;-0.0020,77.000;-19.000;-35.000;-1067.000;141.000;23.000;31.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.337000,13.885516,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485410,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1320;0.1220;-4.7220;-0.0260;0.0370;-0.0130,90.000;-29.000;-38.000;-1073.000;147.000;23.000;22.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.354000,14.199232,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485544,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0020;0.0000;-0.0010;0.0000;-0.0020,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1260;0.0560;-4.7400;-0.0260;0.0360;-0.0200,97.000;-5.000;-51.000;-1067.000;138.000;34.000;20.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.327999,13.903488,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485671,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0010;-0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0960;0.0710;-4.7970;-0.0240;0.0380;-0.0160,100.000;-11.000;-38.000;-1063.000;147.000;31.000;29.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.336000,13.698233,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485801,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;-0.0020;-0.0010;0.0010;-0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1470;0.0600;-4.6670;-0.0260;0.0380;-0.0150,111.000;-16.000;-9.000;-1061.000;150.000;17.000;29.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.336000,13.698233,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261485924,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0390;0.1990;-4.4780;-0.0240;0.0370;-0.0050,107.000;-37.000;-35.000;-1070.000;144.000;33.000;33.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.330000,14.067990,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486053,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1150;-0.0030;-4.8150;-0.0280;0.0350;-0.0190,117.000;-56.000;-40.000;-1061.000;143.000;44.000;26.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.318001,14.060754,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486185,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1750;0.2470;-4.5770;-0.0240;0.0370;-0.0050,118.000;-36.000;-60.000;-1052.000;144.000;32.000;27.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.362000,13.339701,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486315,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1800;-0.1390;-4.7770;-0.0280;0.0360;-0.0230,111.000;-35.000;-60.000;-1073.000;145.000;26.000;29.000,36.000;35.000;34.000;35.000;36.000;36.000;40.000,23.362000,13.339701,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486441,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0800;0.1560;-4.4620;-0.0220;0.0350;-0.0050,106.000;-11.000;-52.000;-1053.000;145.000;12.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330000,13.788030,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486566,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1380;0.1610;-4.4750;-0.0220;0.0370;-0.0020,115.000;-8.000;-63.000;-1065.000;146.000;34.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334000,13.883730,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486689,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0010;-0.0010;0.0010;0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1920;0.0520;-4.7280;-0.0250;0.0370;-0.0250,113.000;-9.000;-45.000;-1069.000;143.000;22.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.312000,13.684144,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486819,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0020;-0.0010;0.0000;-0.0020,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1940;-0.0480;-4.5780;-0.0260;0.0390;-0.0180,113.000;12.000;-76.000;-1067.000;138.000;34.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.729800,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261486951,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0010;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2390;0.1130;-4.7760;-0.0250;0.0390;-0.0180,117.000;-4.000;-66.000;-1062.000;142.000;56.000;36.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334999,13.650974,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487076,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0000;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1380;-0.0650;-4.8240;-0.0270;0.0370;-0.0250,119.000;10.000;-71.000;-1069.000;139.000;38.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.921368,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487206,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0430;0.2830;-4.7350;-0.0230;0.0380;-0.0080,136.000;0.000;-115.000;-1070.000;153.000;44.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.332001,13.905873,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487330,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0020;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1110;0.0010;-4.8190;-0.0270;0.0360;-0.0260,130.000;-30.000;-99.000;-1078.000;146.000;50.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334999,13.907660,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487460,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1250;0.1230;-4.4190;-0.0260;0.0370;-0.0050,135.000;-22.000;-102.000;-1077.000;149.000;24.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,14.096151,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487594,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1590;0.1790;-4.7250;-0.0240;0.0390;-0.0090,126.000;-32.000;-134.000;-1082.000;145.000;31.000;21.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.339001,13.699994,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487736,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0960;0.1330;-4.6260;-0.0240;0.0360;-0.0070,134.000;-12.000;-129.000;-1076.000;148.000;27.000;25.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.696471,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487862,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0210;0.3270;-4.4370;-0.0230;0.0360;0.0000,122.000;-16.000;-123.000;-1073.000;146.000;30.000;15.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.318001,13.734302,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261487991,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1780;0.0750;-4.7060;-0.0260;0.0370;-0.0150,110.000;-20.000;-130.000;-1082.000;157.000;11.000;20.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,13.816096,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488116,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0560;0.1310;-4.5610;-0.0250;0.0350;-0.0070,107.000;-27.000;-134.000;-1073.000;154.000;8.000;21.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.344999,13.820240,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488252,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1200;-0.0080;-4.7910;-0.0270;0.0380;-0.0180,91.000;-34.000;-139.000;-1078.000;155.000;9.000;26.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334999,13.790985,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488375,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0040;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1090;0.0300;-4.6370;-0.0260;0.0370;-0.0140,66.000;-43.000;-129.000;-1076.000;157.000;29.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334999,13.790985,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488505,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0690;0.1710;-4.5360;-0.0260;0.0370;-0.0040,64.000;-52.000;-149.000;-1088.000;154.000;38.000;28.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,13.769419,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488631,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3130;-0.0010;-5.0470;-0.0260;0.0370;-0.0260,84.000;-54.000;-144.000;-1104.000;153.000;12.000;29.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,13.798078,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488755,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0150;0.1810;-4.7160;-0.0230;0.0360;-0.0110,91.000;-73.000;-138.000;-1104.000;156.000;27.000;26.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,13.798078,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261488887,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;0.0020;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1420;0.0410;-4.5530;-0.0250;0.0380;-0.0160,84.000;-55.000;-141.000;-1103.000;157.000;30.000;21.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,13.798078,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489021,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1890;0.0920;-4.7110;-0.0270;0.0390;-0.0170,68.000;-79.000;-139.000;-1094.000;155.000;21.000;9.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.336000,13.838248,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489149,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2640;0.0820;-4.7750;-0.0250;0.0380;-0.0200,73.000;-81.000;-128.000;-1115.000;164.000;27.000;22.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368000,13.763752,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489287,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;-0.0010;-0.0010;-0.0020;-0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1650;0.1370;-4.7050;-0.0240;0.0380;-0.0150,79.000;-82.000;-136.000;-1115.000;155.000;23.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320000,13.688840,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489422,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0020;-0.0020;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0400;0.2640;-4.6210;-0.0210;0.0370;-0.0010,82.000;-68.000;-145.000;-1106.000;158.000;34.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.356001,13.756684,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489546,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;-0.0020;-0.0020;-0.0010;0.0000;0.0020,NA,x=-0.00005;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1250;0.0650;-4.7620;-0.0260;0.0390;-0.0160,82.000;-23.000;-150.000;-1100.000;159.000;32.000;33.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.356001,13.756684,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489671,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1680;0.0200;-4.6480;-0.0250;0.0380;-0.0180,62.000;104.000;-127.000;-1102.000;164.000;31.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.332001,13.765880,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489809,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0010;0.0010;-0.0020;0.0000;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1000;0.1180;-4.8630;-0.0240;0.0360;-0.0180,74.000;147.000;-153.000;-1111.000;166.000;28.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.329000,13.390846,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261489936,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0020;0.0000;-0.0010;0.0000;-0.0020,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1460;-0.0120;-4.7200;-0.0260;0.0380;-0.0190,63.000;130.000;-148.000;-1110.000;162.000;23.000;23.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.329000,13.390846,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490070,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0020;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0040;0.1350;-4.6110;-0.0250;0.0370;-0.0130,73.000;125.000;-167.000;-1122.000;168.000;43.000;20.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.343000,13.795714,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490202,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0750;0.1280;-4.5090;-0.0240;0.0370;-0.0060,80.000;117.000;-191.000;-1123.000;166.000;35.000;21.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341000,13.934577,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490330,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;0.0020;-0.0010;0.0000;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0390;0.0910;-4.5990;-0.0240;0.0360;-0.0160,108.000;112.000;-168.000;-1129.000;167.000;26.000;34.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341000,13.934577,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490456,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0010;-0.0010;0.0000;0.0020,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1810;0.0410;-4.6440;-0.0250;0.0400;-0.0070,102.000;110.000;-176.000;-1121.000;165.000;50.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.356001,14.060312,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490582,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;0.0000;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1280;0.2580;-4.8470;-0.0220;0.0370;-0.0120,86.000;103.000;-169.000;-1138.000;168.000;38.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330000,13.904680,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490706,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0910;0.1250;-4.8630;-0.0260;0.0360;-0.0210,92.000;103.000;-191.000;-1135.000;167.000;55.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330000,13.904680,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490844,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0020;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0900;0.0860;-4.8610;-0.0270;0.0350;-0.0180,91.000;110.000;-172.000;-1133.000;165.000;33.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.349001,13.472374,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261490972,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3080;0.0420;-4.7270;-0.0250;0.0400;-0.0230,94.000;126.000;-141.000;-1132.000;168.000;46.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.325001,13.481851,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491106,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0450;0.3150;-4.6410;-0.0220;0.0370;-0.0100,100.000;136.000;-112.000;-1130.000;176.000;37.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,14.396461,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491232,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;-0.0010;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0900;0.0150;-4.7650;-0.0270;0.0370;-0.0190,89.000;143.000;-129.000;-1145.000;170.000;50.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.343000,13.585627,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491359,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0010;0.0020,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1410;0.0450;-4.7560;-0.0270;0.0360;-0.0170,92.000;161.000;-144.000;-1131.000;171.000;42.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.343000,13.585627,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491497,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1820;0.1180;-4.6040;-0.0250;0.0380;-0.0190,98.000;156.000;-151.000;-1125.000;166.000;34.000;54.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.963300,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491621,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0020;0.0000;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1680;0.1950;-4.5610;-0.0230;0.0370;-0.0080,90.000;166.000;-130.000;-1129.000;162.000;39.000;45.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.313999,13.522119,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491746,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2620;0.0770;-4.7050;-0.0250;0.0400;-0.0130,100.000;178.000;-116.000;-1116.000;174.000;43.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320999,13.712747,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261491870,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0010;0.0020;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2610;-0.0940;-4.6920;-0.0270;0.0380;-0.0180,112.000;180.000;-130.000;-1123.000;164.000;61.000;34.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.318001,14.084072,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492002,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0980;0.0920;-4.5420;-0.0250;0.0370;-0.0080,108.000;75.000;-136.000;-1124.000;168.000;50.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327000,13.762929,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492127,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0750;0.0090;-4.6230;-0.0260;0.0360;-0.0160,102.000;54.000;-133.000;-1120.000;163.000;65.000;30.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.336000,13.721568,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492259,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0020;0.0000;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1190;0.0490;-4.8220;-0.0260;0.0360;-0.0190,109.000;12.000;-146.000;-1130.000;167.000;49.000;34.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.346001,13.984254,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492398,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0040;-0.0010;0.0010;-0.0010;0.0000;-0.0020,NA,x=0.00006;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0720;0.0730;-4.8350;-0.0270;0.0350;-0.0160,100.000;-30.000;-139.000;-1127.000;164.000;29.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.349001,13.635816,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492523,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0760;0.1030;-4.6640;-0.0240;0.0350;-0.0150,100.000;-34.000;-105.000;-1136.000;171.000;31.000;30.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330999,14.115255,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492653,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0020;0.0000;-0.0010;-0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1230;0.1140;-4.6350;-0.0260;0.0380;-0.0150,102.000;-26.000;-142.000;-1147.000;174.000;29.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.799851,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492781,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0010;-0.0020;-0.0020,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0780;0.0580;-4.5350;-0.0250;0.0350;-0.0040,86.000;-29.000;-153.000;-1139.000;159.000;28.000;18.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351000,13.800441,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261492921,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0000;0.0000;-0.0010;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1780;0.1030;-4.7040;-0.0250;0.0390;-0.0160,93.000;-15.000;-135.000;-1145.000;161.000;49.000;30.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341000,13.701167,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493064,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0020;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1280;0.0850;-4.7920;-0.0230;0.0360;-0.0200,87.000;-6.000;-129.000;-1147.000;167.000;31.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.613050,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493198,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0110;0.2770;-4.7240;-0.0230;0.0350;-0.0180,99.000;-11.000;-141.000;-1149.000;164.000;45.000;19.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.613050,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493334,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1710;0.0460;-4.6950;-0.0260;0.0360;-0.0180,89.000;-5.000;-153.000;-1145.000;171.000;24.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.372000,13.906341,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493460,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0910;0.1770;-4.5560;-0.0220;0.0380;-0.0040,82.000;-1.000;-139.000;-1141.000;174.000;23.000;34.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.711146,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493605,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0020;0.0000;-0.0010;-0.0020;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1080;-0.0630;-4.7500;-0.0280;0.0360;-0.0200,105.000;-4.000;-149.000;-1134.000;171.000;7.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341999,14.215278,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493733,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0230;0.0760;-4.5900;-0.0230;0.0360;-0.0120,91.000;-8.000;-131.000;-1147.000;167.000;36.000;30.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341999,14.215278,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261493873,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;-0.0010;-0.0010;0.0010;0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0810;0.1400;-4.4540;-0.0230;0.0350;-0.0060,86.000;-21.000;-131.000;-1139.000;163.000;49.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.357000,13.687203,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494006,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0020;-0.0020;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0660;0.0930;-4.5940;-0.0240;0.0340;-0.0110,77.000;-14.000;-135.000;-1139.000;167.000;23.000;36.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,13.775319,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494138,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0330;0.3520;-4.5110;-0.0220;0.0350;-0.0080,73.000;-27.000;-140.000;-1142.000;171.000;31.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.344999,13.843584,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494270,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0020;0.0010;-0.0010;0.0000;0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2050;0.0230;-4.7540;-0.0250;0.0390;-0.0180,84.000;-13.000;-129.000;-1140.000;169.000;34.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.354000,13.918984,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494402,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0840;0.1620;-4.6050;-0.0230;0.0370;-0.0040,89.000;0.000;-139.000;-1134.000;176.000;14.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.929801,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494529,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0000;-0.0010;-0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1480;-0.0080;-4.8170;-0.0250;0.0360;-0.0220,91.000;-19.000;-136.000;-1141.000;178.000;20.000;54.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327000,13.949546,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494663,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1170;0.1450;-4.5970;-0.0250;0.0380;-0.0070,82.000;-22.000;-128.000;-1140.000;177.000;25.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.355000,13.826160,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494804,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0350;0.1090;-4.5600;-0.0260;0.0370;-0.0150,90.000;-27.000;-118.000;-1138.000;183.000;11.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.343000,13.562283,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261494938,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;-0.0010;0.0010;-0.0010;-0.0020;-0.0010,NA,x=0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2630;0.0410;-4.7660;-0.0240;0.0390;-0.0210,112.000;-12.000;-114.000;-1134.000;179.000;33.000;49.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.364000,13.901581,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495070,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1540;-0.0130;-4.6220;-0.0240;0.0370;-0.0180,122.000;-3.000;-120.000;-1130.000;178.000;18.000;50.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.353001,14.105212,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495205,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0060;0.1310;-4.4550;-0.0240;0.0360;-0.0060,122.000;3.000;-131.000;-1127.000;185.000;22.000;52.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.365000,13.902176,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495336,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0660;0.1270;-4.5950;-0.0240;0.0350;-0.0120,122.000;-10.000;-141.000;-1126.000;180.000;29.000;44.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,13.588536,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495464,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1320;0.0320;-4.5770;-0.0250;0.0380;-0.0190,115.000;-14.000;-116.000;-1120.000;182.000;14.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,13.868118,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495596,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0010;-0.0020,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2010;0.2200;-4.7480;-0.0230;0.0380;-0.0170,124.000;-16.000;-102.000;-1130.000;179.000;40.000;44.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.316999,13.663762,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495726,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1800;0.1400;-4.7240;-0.0250;0.0380;-0.0110,130.000;4.000;-113.000;-1140.000;175.000;28.000;42.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.313000,14.104365,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495856,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1240;0.0360;-4.6180;-0.0270;0.0360;-0.0140,129.000;9.000;-118.000;-1126.000;183.000;25.000;29.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,13.704689,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261495980,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1100;0.0260;-4.6280;-0.0240;0.0390;-0.0130,133.000;6.000;-116.000;-1128.000;178.000;23.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,13.466026,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496106,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;0.0000;-0.0010;-0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0750;0.0760;-4.9270;-0.0260;0.0330;-0.0210,149.000;3.000;-105.000;-1122.000;182.000;34.000;55.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.361000,14.110043,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496230,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0010;-0.0010;-0.0010;0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2580;-0.0940;-4.9070;-0.0250;0.0380;-0.0230,151.000;0.000;-117.000;-1099.000;176.000;34.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.325001,13.575151,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496361,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0160;0.0520;-4.7040;-0.0240;0.0350;-0.0130,143.000;-11.000;-114.000;-1106.000;183.000;38.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.325001,13.575151,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496513,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;0.0010;-0.0010;0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1520;0.1470;-4.6730;-0.0230;0.0370;-0.0110,163.000;-15.000;-112.000;-1105.000;184.000;38.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351000,13.940547,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496648,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1600;-0.0660;-4.9710;-0.0270;0.0380;-0.0240,171.000;-32.000;-105.000;-1101.000;175.000;18.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.355000,13.872869,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496776,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0000;-0.0010;-0.0020;0.0010;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0770;0.1590;-4.6060;-0.0240;0.0390;-0.0070,166.000;-41.000;-126.000;-1115.000;172.000;44.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.339001,13.793350,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261496902,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;0.0000;-0.0010;-0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0380;0.1010;-4.7250;-0.0260;0.0350;-0.0110,177.000;-28.000;-146.000;-1105.000;125.000;23.000;33.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.339001,13.793350,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497027,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0920;0.0750;-4.7930;-0.0250;0.0350;-0.0230,177.000;-45.000;-146.000;-1106.000;131.000;27.000;36.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,13.768829,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497158,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0020;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0180;0.1670;-4.4790;-0.0250;0.0350;0.0000,179.000;-45.000;-118.000;-1107.000;133.000;44.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341999,13.795122,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497288,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0020;-0.0010;-0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1330;0.0080;-4.8870;-0.0250;0.0370;-0.0220,191.000;-55.000;-99.000;-1107.000;135.000;38.000;42.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,14.265628,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497426,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0010;-0.0010;-0.0020;0.0000;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1450;0.0050;-4.6710;-0.0260;0.0380;-0.0160,191.000;-33.000;-110.000;-1105.000;136.000;57.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,14.265628,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497558,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0020;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0730;-0.0040;-4.7230;-0.0260;0.0350;-0.0190,184.000;-21.000;-118.000;-1099.000;127.000;28.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,13.745493,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497692,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0020;-0.0010;-0.0010;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0290;0.1120;-4.7290;-0.0260;0.0350;-0.0200,173.000;-16.000;-102.000;-1104.000;133.000;33.000;46.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.354000,13.358489,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497830,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1470;-0.0740;-4.7540;-0.0270;0.0370;-0.0170,177.000;-15.000;-102.000;-1110.000;135.000;26.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.346001,13.914217,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261497956,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0310;0.0680;-4.4990;-0.0250;0.0360;-0.0080,175.000;-18.000;-96.000;-1095.000;134.000;26.000;33.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.346001,13.914217,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498082,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0510;0.1060;-4.5960;-0.0260;0.0360;-0.0060,178.000;-7.000;-111.000;-1095.000;140.000;50.000;46.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351999,13.754327,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498216,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0010;-0.0010;0.0010;-0.0020,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0310;0.1360;-4.3950;-0.0240;0.0370;-0.0110,182.000;-31.000;-130.000;-1077.000;137.000;34.000;36.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351999,13.263936,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498340,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0000;0.0000;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0460;0.1410;-4.6160;-0.0240;0.0370;-0.0120,179.000;-36.000;-120.000;-1082.000;133.000;43.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.743137,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498467,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0010;-0.0010;-0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2830;-0.1550;-4.8340;-0.0280;0.0390;-0.0240,190.000;-50.000;-132.000;-1079.000;137.000;30.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,13.862771,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498591,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0020;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0920;0.1430;-4.4780;-0.0240;0.0380;-0.0080,193.000;-55.000;-126.000;-1081.000;139.000;16.000;28.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,13.792167,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498723,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0020;0.0010;-0.0010;-0.0010;-0.0020,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1010;0.0510;-4.5600;-0.0260;0.0380;-0.0100,194.000;-68.000;-131.000;-1067.000;147.000;30.000;35.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.299999,13.630499,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498849,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;-0.0010;-0.0020;-0.0010;0.0000;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0050;0.1230;-4.6650;-0.0230;0.0370;-0.0190,199.000;-49.000;-138.000;-1078.000;133.000;48.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.323999,13.901104,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261498989,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1640;-0.1610;-4.7380;-0.0280;0.0380;-0.0190,195.000;-79.000;-150.000;-1068.000;129.000;39.000;19.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,14.078843,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499113,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0310;0.1740;-4.5370;-0.0240;0.0370;-0.0020,188.000;-54.000;-136.000;-1077.000;136.000;14.000;28.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.325001,13.738425,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499243,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;-0.0020;-0.0020;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0630;0.3460;-4.3610;-0.0220;0.0360;-0.0080,192.000;-62.000;-136.000;-1063.000;136.000;26.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.570997,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499369,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0680;-0.0010;-4.8310;-0.0260;0.0360;-0.0240,186.000;-61.000;-113.000;-1070.000;139.000;34.000;44.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.827936,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499492,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0000;-0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0920;0.0600;-4.4440;-0.0260;0.0370;-0.0080,188.000;-53.000;-105.000;-1068.000;146.000;24.000;25.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,14.095547,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499629,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0420;0.2230;-4.4400;-0.0230;0.0370;-0.0090,204.000;13.000;-110.000;-1055.000;140.000;41.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,14.095547,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499759,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;-0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0510;0.1260;-4.6140;-0.0240;0.0370;-0.0100,226.000;35.000;-104.000;-1060.000;136.000;15.000;31.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320999,13.619463,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261499884,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;0.0000;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2160;-0.0160;-4.7090;-0.0250;0.0380;-0.0180,210.000;39.000;-116.000;-1056.000;134.000;21.000;42.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,13.512702,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500010,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2130;0.1030;-4.7620;-0.0240;0.0380;-0.0210,201.000;44.000;-118.000;-1058.000;137.000;39.000;23.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.353001,13.684859,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500148,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3400;0.0880;-4.6790;-0.0240;0.0380;-0.0160,207.000;69.000;-121.000;-1041.000;145.000;50.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337000,13.768829,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500274,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;0.0010;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0750;0.3060;-4.7370;-0.0220;0.0350;-0.0040,210.000;67.000;-133.000;-1038.000;139.000;57.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,14.225023,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500410,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0020;-0.0010;0.0000;-0.0010;0.0000;0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0040;0.0550;-4.4720;-0.0250;0.0360;-0.0080,222.000;89.000;-116.000;-1030.000;142.000;42.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,14.225023,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500550,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0400;0.2420;-4.5340;-0.0230;0.0360;-0.0060,231.000;103.000;-133.000;-1026.000;138.000;41.000;32.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.305000,13.866476,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500683,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1330;0.2530;-4.5700;-0.0220;0.0380;-0.0070,217.000;109.000;-140.000;-1040.000;136.000;57.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320999,13.806032,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500809,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0010;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2250;0.0620;-4.8310;-0.0250;0.0380;-0.0180,219.000;133.000;-121.000;-1053.000;141.000;38.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.365999,13.902770,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261500938,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0300;0.0040;-4.6330;-0.0260;0.0370;-0.0100,221.000;132.000;-118.000;-1050.000;142.000;43.000;26.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.365999,13.902770,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501064,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;-0.0010;-0.0010;0.0000;0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.3010;0.0420;-4.7530;-0.0250;0.0420;-0.0190,210.000;135.000;-133.000;-1065.000;147.000;42.000;29.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.344999,13.680170,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501198,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0010;-0.0010;0.0010;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2290;0.0900;-4.6910;-0.0240;0.0400;-0.0170,205.000;164.000;-148.000;-1061.000;146.000;33.000;24.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341000,13.631144,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501330,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;-0.0010;0.0010;-0.0010;-0.0010;0.0020,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1610;-0.1160;-5.0010;-0.0270;0.0360;-0.0240,213.000;176.000;-145.000;-1063.000;148.000;27.000;15.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327999,13.576896,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501459,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1040;0.1540;-4.5390;-0.0230;0.0400;-0.0030,210.000;180.000;-146.000;-1074.000;148.000;50.000;39.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327999,13.576896,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501586,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0020;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1320;-0.0610;-4.8330;-0.0280;0.0370;-0.0200,201.000;190.000;-159.000;-1068.000;146.000;31.000;29.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330000,13.788030,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501740,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;-0.0020;-0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0840;0.1770;-4.3700;-0.0250;0.0350;-0.0030,219.000;202.000;-168.000;-1063.000;147.000;35.000;18.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341000,14.167987,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261501866,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0010;-0.0020;-0.0020;0.0000;-0.0020,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1430;0.0930;-4.6640;-0.0240;0.0390;-0.0190,228.000;198.000;-163.000;-1054.000;150.000;47.000;34.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368999,13.881185,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502004,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;0.0010;-0.0020;0.0000;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1270;0.1850;-4.4510;-0.0240;0.0370;-0.0070,211.000;204.000;-155.000;-1062.000;144.000;49.000;38.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.350000,13.799851,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502140,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0340;0.1940;-4.4820;-0.0230;0.0350;-0.0020,196.000;178.000;-177.000;-1059.000;151.000;30.000;28.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351000,13.613633,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502274,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0190;0.1910;-4.6300;-0.0250;0.0360;-0.0090,186.000;126.000;-162.000;-1050.000;144.000;45.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.323000,13.527340,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502409,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0000;-0.0020;0.0000;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2300;0.0900;-4.8120;-0.0270;0.0350;-0.0230,177.000;109.000;-154.000;-1057.000;145.000;50.000;41.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.874651,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502539,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;-0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0840;0.2730;-4.4180;-0.0240;0.0380;-0.0040,178.000;83.000;-164.000;-1050.000;150.000;49.000;49.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.362000,13.666769,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502669,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0010;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0720;0.1900;-4.6540;-0.0240;0.0360;-0.0190,175.000;18.000;-174.000;-1055.000;152.000;53.000;40.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.329000,13.694124,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502795,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0010;0.0010;0.0010;-0.0020;0.0000;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0910;0.1470;-4.7330;-0.0250;0.0370;-0.0030,165.000;-8.000;-190.000;-1069.000;151.000;46.000;50.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,14.032148,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261502919,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1180;-0.0740;-4.8590;-0.0270;0.0360;-0.0240,167.000;-27.000;-176.000;-1071.000;159.000;54.000;62.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.316999,13.780347,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503055,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0020;-0.0010;-0.0010;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0020;0.0560;-4.6070;-0.0260;0.0340;-0.0070,158.000;-41.000;-181.000;-1064.000;166.000;22.000;61.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.357000,13.827344,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503185,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;-0.0010;0.0000;-0.0020;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1580;-0.0050;-4.6780;-0.0250;0.0370;-0.0160,156.000;-39.000;-183.000;-1054.000;164.000;33.000;44.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.357000,13.827344,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503309,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1360;-0.0370;-4.6880;-0.0270;0.0370;-0.0150,163.000;-12.000;-176.000;-1052.000;154.000;43.000;42.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.356001,13.803397,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503439,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;-0.0020;-0.0010;-0.0010;0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0120;0.1150;-4.6470;-0.0230;0.0360;-0.0110,156.000;-2.000;-163.000;-1058.000;156.000;42.000;55.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330999,13.881945,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503575,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0420;0.2520;-4.5480;-0.0220;0.0370;-0.0040,150.000;1.000;-142.000;-1056.000;166.000;46.000;48.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.306999,13.914279,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503701,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0010;0.0000;-0.0010;0.0010;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1770;0.0680;-4.6370;-0.0240;0.0390;-0.0120,135.000;19.000;-136.000;-1040.000;154.000;40.000;45.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.375999,13.815216,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503839,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0020;-0.0010;-0.0010;0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0390;0.1690;-4.5140;-0.0240;0.0390;-0.0040,126.000;43.000;-136.000;-1037.000;160.000;30.000;50.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.346001,13.704103,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261503969,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;-0.0020;-0.0010;0.0000;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1120;-0.0540;-4.7140;-0.0270;0.0360;-0.0180,117.000;31.000;-145.000;-1028.000;162.000;44.000;53.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.346001,13.704103,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504095,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;-0.0010;-0.0010;-0.0020;0.0010;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0790;0.1420;-4.5770;-0.0250;0.0370;-0.0070,101.000;49.000;-149.000;-1016.000;157.000;21.000;48.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.649805,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504225,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;-0.0020;0.0000;-0.0020;-0.0020;0.0000,NA,x=-0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0610;0.1940;-4.3570;-0.0240;0.0360;-0.0050,97.000;61.000;-153.000;-1006.000;156.000;25.000;55.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368999,13.694234,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504349,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0020;-0.0010;-0.0010;-0.0010;-0.0010,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0180;-0.0330;-4.7330;-0.0270;0.0360;-0.0150,97.000;71.000;-145.000;-1015.000;151.000;37.000;55.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368999,13.694234,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504475,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0020;0.1740;-4.5700;-0.0240;0.0350;-0.0130,103.000;65.000;-158.000;-1012.000;152.000;28.000;68.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.360001,13.875840,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504607,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0040;-0.0020;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0210;-0.0450;-4.8160;-0.0270;0.0350;-0.0180,107.000;72.000;-158.000;-1009.000;159.000;34.000;62.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.336000,13.838248,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504739,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;0.0000;0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0160;0.1270;-4.4350;-0.0270;0.0370;-0.0070,97.000;77.000;-167.000;-1007.000;155.000;46.000;74.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.344999,13.703515,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504871,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0020;0.0010;0.0000;-0.0020;0.0000;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0470;-0.0060;-4.6550;-0.0250;0.0370;-0.0150,100.000;58.000;-165.000;-997.000;157.000;14.000;58.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.344999,13.703515,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261504995,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0010;-0.0010;0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1740;0.1620;-4.7910;-0.0230;0.0390;-0.0120,97.000;48.000;-176.000;-986.000;155.000;25.000;50.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.365000,14.089095,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505125,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0010;-0.0010;0.0000;0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1380;0.0140;-4.8400;-0.0270;0.0360;-0.0210,87.000;55.000;-168.000;-987.000;152.000;38.000;68.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.363001,13.760807,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505255,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0780;0.1530;-4.6990;-0.0240;0.0370;-0.0110,68.000;67.000;-181.000;-982.000;156.000;30.000;87.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.603139,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505387,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0020;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1450;0.0250;-4.6260;-0.0270;0.0380;-0.0120,61.000;68.000;-196.000;-993.000;157.000;21.000;72.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.333000,13.603139,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505516,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;0.0000;-0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0870;-0.0250;-4.7210;-0.0270;0.0370;-0.0130,70.000;68.000;-195.000;-999.000;160.000;32.000;72.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.360001,13.992640,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505648,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0020;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0690;0.0770;-4.4640;-0.0220;0.0370;-0.0090,78.000;71.000;-209.000;-1003.000;166.000;6.000;82.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327999,13.856831,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505780,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;-0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1140;-0.0410;-4.7850;-0.0270;0.0360;-0.0200,91.000;75.000;-205.000;-1006.000;164.000;38.000;90.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.362000,13.736856,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261505910,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0930;0.1120;-4.8190;-0.0260;0.0360;-0.0150,92.000;73.000;-215.000;-999.000;166.000;20.000;63.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.393000,13.778476,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506036,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;0.0000;-0.0010;0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1560;0.0770;-4.5040;-0.0250;0.0380;-0.0060,99.000;74.000;-230.000;-1000.000;172.000;19.000;77.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.360001,13.852480,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506162,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0780;0.1790;-4.4790;-0.0240;0.0380;-0.0050,89.000;76.000;-236.000;-1003.000;167.000;23.000;80.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.294001,13.696872,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506287,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2900;0.1080;-4.9030;-0.0240;0.0390;-0.0190,89.000;69.000;-233.000;-1003.000;167.000;32.000;86.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.355000,13.849515,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506415,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0040;0.0010;0.0000;-0.0020;0.0010;0.0000,NA,x=-0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1040;0.2300;-4.6090;-0.0240;0.0380;-0.0050,96.000;75.000;-227.000;-1004.000;174.000;20.000;77.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351999,13.730976,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506541,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0020;0.0010;0.0000;0.0010;-0.0010;0.0000;0.0000,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1250;-0.0350;-4.7090;-0.0260;0.0370;-0.0140,94.000;81.000;-255.000;-1005.000;175.000;26.000;73.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.295000,13.464510,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506665,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;-0.0020;0.0000;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0280;0.0620;-4.7090;-0.0270;0.0350;-0.0210,99.000;96.000;-224.000;-999.000;173.000;12.000;71.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334000,13.907064,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506789,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;-0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0100;0.1140;-4.4310;-0.0250;0.0370;-0.0020,100.000;109.000;-231.000;-996.000;176.000;41.000;68.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.370001,13.998630,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261506919,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0660;0.2220;-4.6270;-0.0230;0.0360;-0.0070,84.000;101.000;-236.000;-993.000;172.000;36.000;52.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.391001,13.941037,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507045,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;-0.0020;-0.0010;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0080;0.1740;-4.7370;-0.0230;0.0350;-0.0200,78.000;111.000;-238.000;-993.000;168.000;28.000;54.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.361000,13.736268,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507173,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;0.0000;-0.0010;0.0020;-0.0010,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2390;0.0260;-4.6370;-0.0260;0.0380;-0.0190,89.000;105.000;-239.000;-993.000;166.000;21.000;55.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330999,13.881945,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507300,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;-0.0010;-0.0010;-0.0020;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0230;0.2840;-4.7150;-0.0220;0.0370;-0.0100,71.000;123.000;-238.000;-994.000;169.000;43.000;43.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.363001,13.363637,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507425,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0000;0.0000;0.0000;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0460;-0.0210;-4.7090;-0.0260;0.0350;-0.0200,69.000;130.000;-227.000;-997.000;170.000;36.000;70.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351000,14.150706,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507570,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;-0.0010;0.0010;-0.0020;-0.0010;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1460;0.2730;-4.4380;-0.0220;0.0380;-0.0100,75.000;152.000;-222.000;-1007.000;164.000;24.000;74.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.330000,13.741370,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507704,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0010;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.1440;0.3030;-4.3420;-0.0240;0.0340;0.0000,88.000;158.000;-219.000;-999.000;167.000;23.000;65.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.332001,13.625888,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507830,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0050;0.0650;-4.5880;-0.0250;0.0360;-0.0050,98.000;167.000;-205.000;-991.000;174.000;42.000;58.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368000,13.717016,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261507958,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0010;-0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0830;0.1470;-4.6650;-0.0240;0.0360;-0.0070,107.000;156.000;-187.000;-1004.000;171.000;41.000;72.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.368000,13.717016,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508092,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0010;-0.0020;-0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1210;0.2160;-4.6500;-0.0220;0.0380;-0.0110,100.000;154.000;-171.000;-979.000;171.000;38.000;82.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,14.148888,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508217,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0020;0.0010;-0.0010;0.0010;0.0000,NA,x=0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1940;0.0860;-4.4460;-0.0250;0.0390;-0.0090,91.000;145.000;-207.000;-975.000;164.000;34.000;74.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,14.026138,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508347,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1100;0.1390;-4.7390;-0.0240;0.0350;-0.0190,86.000;135.000;-230.000;-970.000;170.000;46.000;68.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.382999,13.819353,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508477,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;-0.0020;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0370;0.0770;-4.5630;-0.0260;0.0370;-0.0110,76.000;154.000;-226.000;-975.000;168.000;38.000;73.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.358000,13.804578,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508602,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1240;-0.0040;-4.6720;-0.0260;0.0360;-0.0220,68.000;147.000;-238.000;-974.000;160.000;38.000;65.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.370001,13.437750,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508732,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0000;-0.0020,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1400;0.1760;-4.5450;-0.0230;0.0380;-0.0080,80.000;127.000;-217.000;-988.000;163.000;57.000;82.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.370001,13.437750,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508858,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;-0.0020;-0.0010;-0.0020;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0890;0.1770;-4.5570;-0.0250;0.0370;-0.0110,72.000;128.000;-228.000;-982.000;154.000;43.000;58.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.348000,13.705276,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261508986,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0020;0.0010;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1330;0.0050;-4.7380;-0.0260;0.0360;-0.0160,76.000;137.000;-225.000;-984.000;163.000;45.000;66.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.341999,13.935174,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509116,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0000;-0.0010;-0.0010;-0.0010;0.0000,NA,x=-0.00003;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1230;0.0870;-4.4690;-0.0260;0.0370;-0.0120,63.000;118.000;-250.000;-983.000;164.000;38.000;74.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.360001,13.945920,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509248,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0000;0.0000;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1250;0.0690;-4.9050;-0.0260;0.0360;-0.0200,82.000;115.000;-254.000;-971.000;169.000;40.000;61.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.334999,13.744314,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509372,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0010;0.0000;-0.0020;-0.0020;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0240;0.1810;-4.4980;-0.0240;0.0370;-0.0130,85.000;111.000;-256.000;-963.000;174.000;29.000;76.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.347000,14.031547,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509498,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0010;0.0010;-0.0010;-0.0010;-0.0020,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0470;0.1370;-4.4200;-0.0250;0.0390;-0.0010,88.000;128.000;-236.000;-964.000;168.000;42.000;63.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.337999,14.026138,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509626,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0320;0.0500;-4.6350;-0.0260;0.0360;-0.0100,82.000;148.000;-250.000;-958.000;167.000;48.000;72.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.378000,13.582617,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509758,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0020;0.0010;-0.0010;-0.0010;0.0000;-0.0010,NA,x=0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1190;0.0700;-4.7710;-0.0240;0.0370;-0.0160,80.000;148.000;-222.000;-951.000;171.000;51.000;77.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327000,13.716276,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261509906,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;0.0010;-0.0010;-0.0010;-0.0010;-0.0010;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0770;0.0990;-4.5160;-0.0260;0.0360;-0.0110,80.000;162.000;-221.000;-938.000;177.000;32.000;76.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.349001,13.659165,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510032,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0020;0.0010;-0.0010;0.0000;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0250;0.0160;-4.5580;-0.0260;0.0360;-0.0080,80.000;165.000;-207.000;-919.000;177.000;39.000;71.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.362000,13.643408,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510158,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;-0.0010;0.0020;0.0000;-0.0010;-0.0010;-0.0010,NA,x=-0.00002;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0650;-0.0040;-4.5730;-0.0260;0.0370;-0.0130,84.000;168.000;-220.000;-936.000;173.000;47.000;76.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.357000,13.803988,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510298,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0020;0.0000;-0.0010;0.0000;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1070;0.2540;-4.3800;-0.0230;0.0370;-0.0080,65.000;170.000;-230.000;-932.000;173.000;42.000;58.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.357000,13.803988,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510433,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0020;0.0000;-0.0010;-0.0010;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,0.0300;0.2180;-4.5650;-0.0240;0.0380;-0.0070,70.000;148.000;-197.000;-929.000;180.000;44.000;65.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351000,13.356773,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510557,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,-0.0010;-0.0010;0.0000;0.0010;-0.0010;0.0010;-0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0080;0.0380;-4.8170;-0.0250;0.0350;-0.0190,79.000;146.000;-214.000;-926.000;181.000;42.000;72.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320999,13.409574,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510694,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0020;0.0020;0.0000;0.0010;-0.0010;0.0000;0.0010,NA,x=0.00004;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2130;-0.1190;-4.6190;-0.0270;0.0380;-0.0170,79.000;167.000;-203.000;-906.000;177.000;41.000;59.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.320999,13.409574,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510840,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;-0.0020;0.0000;-0.0010;0.0000;0.0010,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1080;0.1410;-4.7870;-0.0240;0.0360;-0.0210,70.000;163.000;-209.000;-906.000;180.000;24.000;74.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.327999,13.436927,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261510968,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0010;0.0000;-0.0010;0.0000;0.0000,NA,x=0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.2190;0.0250;-4.7840;-0.0250;0.0370;-0.0170,72.000;176.000;-198.000;-885.000;167.000;31.000;70.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351999,13.310639,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261511101,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0000;0.0000;0.0000;0.0000;-0.0010;-0.0010;0.0010,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0910;0.2770;-4.5390;-0.0230;0.0360;-0.0080,74.000;176.000;-176.000;-891.000;170.000;47.000;59.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.351999,13.310639,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261511235,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;0.0000;0.0000;-0.0020;-0.0010;0.0010;0.0000,NA,x=-0.00001;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.0210;0.2580;-4.6930;-0.0230;0.0380;-0.0100,61.000;168.000;-180.000;-886.000;169.000;49.000;60.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.340000,13.420500,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
1781261511371,rm75_acceptance_communication,RM75-6F,192.168.1.18,IDLE_READONLY,0,0.000000,NA,0.0010;-0.0010;0.0020;0.0010;-0.0010;0.0000;0.0000,NA,x=-0.00000;y=0.00000;z=0.86770;rx=0.00000;ry=0.00000;rz=0.00000,-0.1470;0.0450;-4.6030;-0.0260;0.0390;-0.0150,42.000;158.000;-177.000;-887.000;168.000;53.000;60.000,36.000;35.000;34.000;35.000;36.000;37.000;40.000,23.360001,13.759040,arm_err_len=1;arm_err_codes=0;controller_err=0,no_error,ok
# rm75_acceptance_communication
| Check | Result | Detail |
| --- | --- | --- |
| source_document | INFO | RM75-6F mechanical arm testing agent operation document v1.0 |
| scope | INFO | 30-second read-only communication smoke test and acceptance CSV data logging |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| expected_dof | PASS | actual=7 |
| rm_get_current_tool_frame | PASS | error=0 |
| communication_csv_open | PASS | /home/mashiro/project/linkerhand-cpp-sdk/reports/realman_hardware_tests/rm75_acceptance_communication_latest.csv |
| samples | INFO | 230 |
| successful_full_samples | INFO | 230 |
| read_attempts | INFO | 1150 |
| read_failures | INFO | 0 |
| failure_rate | INFO | 0.000000 |
| avg_sample_period_ms | INFO | 130.505037 |
| max_sample_period_ms | INFO | 153.067490 |
| csv_latest | INFO | /home/mashiro/project/linkerhand-cpp-sdk/reports/realman_hardware_tests/rm75_acceptance_communication_latest.csv |
| sample_count_minimum | PASS | samples=230 |
| successful_sample_ratio_at_least_95_percent | PASS | successful=230, samples=230 |
| sdk_read_failure_rate_at_most_1_percent | PASS | failure_rate=0.000000 |
| sample_values_finite_and_in_expected_ranges | PASS | finite_failures=0 |
| controller_error_absent_during_communication | PASS | count=0 |
| arm_error_absent_during_communication | PASS | count=0 |
| sample_period_below_1s | PASS | max_ms=153.067490 |
Assertions: 13, failures: 0
# rm75_acceptance_preflight
| Check | Result | Detail |
| --- | --- | --- |
| source_document | INFO | RM75-6F mechanical arm testing agent operation document v1.0 |
| scope | INFO | INIT/PREFLIGHT/IDLE read-only acceptance checks; no motion command is sent |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| rm75_expected_7dof | PASS | actual=7 |
| six_axis_force_sensor_available | PASS | actual=Integrated 6D force |
| controller_generation_known | PASS | actual=3 |
| rm_get_arm_run_mode | PASS | error=0 |
| run_mode | INFO | real |
| real_robot_mode | PASS | mode=1 |
| rm_get_arm_power_state | PASS | error=0 |
| arm_powered_on | PASS | power_state=1 |
| rm_get_current_arm_state | PASS | error=0 |
| current_joints_finite | PASS | [J1=0.001, J2=-0.001, J3=0.001, J4=0.000, J5=-0.001, J6=0.001, J7=-0.001] |
| current_tcp_pose_finite | PASS | pos_m=(-0.0000,0.0000,0.8677), euler_rad=(0.0000,0.0000,0.0000) |
| current_arm_error_list_empty | FAIL | err_len=1 |
| rm_get_arm_all_state | PASS | error=0 |
| all_joints_enabled | PASS | |
| joint_error_codes_zero | PASS | |
| joint_power_temperature_current_ranges | PASS | |
| arm_all_state_error_list_empty | FAIL | err_len=1 |
| rm_get_controller_state | PASS | error=0 |
| controller_state | INFO | voltage_V=23.343000, current_A=0.604000, temperature_C=47.313999, err=0 |
| controller_voltage_range | PASS | |
| controller_current_range | PASS | |
| controller_temperature_range | PASS | |
| controller_error_zero | PASS | err=0 |
| rm_get_current_work_frame | PASS | error=0 |
| current_work_frame | INFO | name=World, payload_kg=0.000, cog_mm=(0.000,0.000,0.000), pos_m=(0.0000,0.0000,0.0000), euler_rad=(0.0000,0.0000,0.0000) |
| work_frame_pose_finite | PASS | |
| rm_get_current_tool_frame | PASS | error=0 |
| current_tool_frame | INFO | name=Arm_Tip, payload_kg=0.000, cog_mm=(0.000,0.000,0.000), pos_m=(0.0000,0.0000,0.0000), euler_rad=(0.0000,0.0000,0.0000) |
| tool_frame_pose_finite | PASS | |
| tool_payload_reasonable | PASS | payload_kg=0.000000 |
| rm_get_force_data_preflight_samples | PASS | failures=0 |
| work_zero_force_mean | INFO | Fx=-0.0866, Fy=0.1038, Fz=-4.6530, Mx=-0.0248, My=0.0371, Mz=-0.0126 |
| force_norm_computed | PASS | force_norm_N=4.654962 |
| work_zero_force_static_range | PASS | max_abs_force_N=4.653000 |
| work_zero_torque_static_range | PASS | max_abs_torque_Nm=0.037083 |
| manual_items_not_executed | INFO | appearance/load/e-stop/contact-force/repeatability require human safety confirmation or external tools |
Assertions: 33, failures: 2
# rm75_acceptance_preflight
| Check | Result | Detail |
| --- | --- | --- |
| source_document | INFO | RM75-6F mechanical arm testing agent operation document v1.0 |
| scope | INFO | INIT/PREFLIGHT/IDLE read-only acceptance checks; no motion command is sent |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| rm75_expected_7dof | PASS | actual=7 |
| six_axis_force_sensor_available | PASS | actual=Integrated 6D force |
| controller_generation_known | PASS | actual=3 |
| rm_get_arm_run_mode | PASS | error=0 |
| run_mode | INFO | real |
| real_robot_mode | PASS | mode=1 |
| rm_get_arm_power_state | PASS | error=0 |
| arm_powered_on | PASS | power_state=1 |
| rm_get_current_arm_state | PASS | error=0 |
| current_joints_finite | PASS | [J1=0.000, J2=0.001, J3=-0.001, J4=0.001, J5=-0.001, J6=0.001, J7=0.000] |
| current_tcp_pose_finite | PASS | pos_m=(0.0000,0.0000,0.8677), euler_rad=(0.0000,0.0000,0.0000) |
| current_arm_errors_clear | PASS | err_len=1, codes=[0] |
| rm_get_arm_all_state | PASS | error=0 |
| all_joints_enabled | PASS | |
| joint_error_codes_zero | PASS | |
| joint_power_temperature_current_ranges | PASS | |
| arm_all_state_errors_clear | PASS | err_len=1, codes=[0] |
| rm_get_controller_state | PASS | error=0 |
| controller_state | INFO | voltage_V=23.349001, current_A=0.589000, temperature_C=47.466000, err=0 |
| controller_voltage_range | PASS | |
| controller_current_range | PASS | |
| controller_temperature_range | PASS | |
| controller_error_zero | PASS | err=0 |
| rm_get_current_work_frame | PASS | error=0 |
| current_work_frame | INFO | name=World, payload_kg=0.000, cog_mm=(0.000,0.000,0.000), pos_m=(0.0000,0.0000,0.0000), euler_rad=(0.0000,0.0000,0.0000) |
| work_frame_pose_finite | PASS | |
| rm_get_current_tool_frame | PASS | error=0 |
| current_tool_frame | INFO | name=Arm_Tip, payload_kg=0.000, cog_mm=(0.000,0.000,0.000), pos_m=(0.0000,0.0000,0.0000), euler_rad=(0.0000,0.0000,0.0000) |
| tool_frame_pose_finite | PASS | |
| tool_payload_reasonable | PASS | payload_kg=0.000000 |
| rm_get_force_data_preflight_samples | PASS | failures=0 |
| work_zero_force_mean | INFO | Fx=-0.0793, Fy=0.1656, Fz=-4.6367, Mx=-0.0241, My=0.0368, Mz=-0.0116 |
| force_norm_computed | PASS | force_norm_N=4.640301 |
| work_zero_force_static_range | PASS | max_abs_force_N=4.636667 |
| work_zero_torque_static_range | PASS | max_abs_torque_Nm=0.036833 |
| manual_items_not_executed | INFO | appearance/load/e-stop/contact-force/repeatability require human safety confirmation or external tools |
Assertions: 33, failures: 0
# rm75_acceptance_preflight
| Check | Result | Detail |
| --- | --- | --- |
| source_document | INFO | RM75-6F mechanical arm testing agent operation document v1.0 |
| scope | INFO | INIT/PREFLIGHT/IDLE read-only acceptance checks; no motion command is sent |
| rm_init | PASS | error=0 |
| rm_create_robot_arm | PASS | 192.168.1.18:8080 |
| rm_get_robot_info | PASS | error=0 |
| arm_dof | INFO | 7 |
| force_type | INFO | Integrated 6D force |
| rm75_expected_7dof | PASS | actual=7 |
| six_axis_force_sensor_available | PASS | actual=Integrated 6D force |
| controller_generation_known | PASS | actual=3 |
| rm_get_arm_run_mode | PASS | error=0 |
| run_mode | INFO | real |
| real_robot_mode | PASS | mode=1 |
| rm_get_arm_power_state | PASS | error=0 |
| arm_powered_on | PASS | power_state=1 |
| rm_get_current_arm_state | PASS | error=0 |
| current_joints_finite | PASS | [J1=0.000, J2=0.001, J3=-0.001, J4=0.001, J5=-0.001, J6=0.001, J7=0.000] |
| current_tcp_pose_finite | PASS | pos_m=(0.0000,0.0000,0.8677), euler_rad=(0.0000,0.0000,0.0000) |
| current_arm_errors_clear | PASS | err_len=1, codes=[0] |
| rm_get_arm_all_state | PASS | error=0 |
| all_joints_enabled | PASS | |
| joint_error_codes_zero | PASS | |
| joint_power_temperature_current_ranges | PASS | |
| arm_all_state_errors_clear | PASS | err_len=1, codes=[0] |
| rm_get_controller_state | PASS | error=0 |
| controller_state | INFO | voltage_V=23.349001, current_A=0.589000, temperature_C=47.466000, err=0 |
| controller_voltage_range | PASS | |
| controller_current_range | PASS | |
| controller_temperature_range | PASS | |
| controller_error_zero | PASS | err=0 |
| rm_get_current_work_frame | PASS | error=0 |
| current_work_frame | INFO | name=World, payload_kg=0.000, cog_mm=(0.000,0.000,0.000), pos_m=(0.0000,0.0000,0.0000), euler_rad=(0.0000,0.0000,0.0000) |
| work_frame_pose_finite | PASS | |
| rm_get_current_tool_frame | PASS | error=0 |
| current_tool_frame | INFO | name=Arm_Tip, payload_kg=0.000, cog_mm=(0.000,0.000,0.000), pos_m=(0.0000,0.0000,0.0000), euler_rad=(0.0000,0.0000,0.0000) |
| tool_frame_pose_finite | PASS | |
| tool_payload_reasonable | PASS | payload_kg=0.000000 |
| rm_get_force_data_preflight_samples | PASS | failures=0 |
| work_zero_force_mean | INFO | Fx=-0.0793, Fy=0.1656, Fz=-4.6367, Mx=-0.0241, My=0.0368, Mz=-0.0116 |
| force_norm_computed | PASS | force_norm_N=4.640301 |
| work_zero_force_static_range | PASS | max_abs_force_N=4.636667 |
| work_zero_torque_static_range | PASS | max_abs_torque_Nm=0.036833 |
| manual_items_not_executed | INFO | appearance/load/e-stop/contact-force/repeatability require human safety confirmation or external tools |
Assertions: 33, failures: 0
elapsed_ms,phase,joint1_deg,joint2_deg,joint3_deg,joint4_deg,joint5_deg,joint6_deg,joint7_deg,joint1_current_mA,joint2_current_mA,joint3_current_mA,joint4_current_mA,joint5_current_mA,joint6_current_mA,joint7_current_mA,joint1_voltage_V,joint2_voltage_V,joint3_voltage_V,joint4_voltage_V,joint5_voltage_V,joint6_voltage_V,joint7_voltage_V,joint1_temperature_C,joint2_temperature_C,joint3_temperature_C,joint4_temperature_C,joint5_temperature_C,joint6_temperature_C,joint7_temperature_C,raw_Fx,raw_Fy,raw_Fz,raw_Mx,raw_My,raw_Mz,zero_Fx,zero_Fy,zero_Fz,zero_Mx,zero_My,zero_Mz,controller_voltage_V,controller_current_A,controller_temperature_C,controller_err
0,static_baseline,-0.001000,10.000000,0.002000,-0.002000,-0.001000,-0.001000,0.004000,82.000000,-368.000000,-208.000000,601.000000,-89.000000,97.000000,-133.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.276000,0.808000,-0.628000,-0.012000,0.000000,0.020000,-0.398000,0.110000,0.195000,0.000000,0.004000,0.002000,23.316000,0.629000,45.860001,0
83,static_baseline,-0.001000,10.000000,0.002000,-0.002000,0.000000,-0.001000,0.005000,89.000000,-350.000000,-195.000000,604.000000,-87.000000,116.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.438000,-0.404000,-1.619000,-0.031000,-0.002000,-0.034000,-0.413000,-0.204000,0.053000,-0.004000,0.004000,-0.007000,23.316000,0.629000,45.860001,0
177,static_baseline,-0.001000,10.000000,0.004000,-0.001000,-0.001000,-0.001000,0.002000,84.000000,-342.000000,-225.000000,602.000000,-92.000000,93.000000,-140.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.084000,0.081000,-0.821000,-0.022000,-0.001000,0.006000,-0.338000,-0.025000,0.276000,0.000000,0.004000,0.001000,23.337000,0.602000,45.787998,0
258,static_baseline,0.000000,10.000000,0.001000,-0.001000,0.000000,-0.001000,0.002000,84.000000,-361.000000,-215.000000,596.000000,-86.000000,93.000000,-123.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.194000,-0.176000,-1.528000,-0.029000,0.000000,-0.036000,-0.395000,-0.108000,0.014000,-0.002000,0.004000,-0.010000,23.337000,0.602000,45.787998,0
348,static_baseline,-0.001000,10.000000,0.004000,-0.001000,0.000000,-0.002000,0.002000,83.000000,-346.000000,-221.000000,588.000000,-89.000000,101.000000,-130.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.590000,0.231000,-1.014000,-0.020000,0.003000,-0.010000,-0.459000,0.119000,0.337000,0.001000,0.006000,0.004000,23.343000,0.606000,45.887001,0
430,static_baseline,0.000000,10.001000,0.001000,-0.001000,0.000000,0.000000,0.004000,76.000000,-351.000000,-236.000000,589.000000,-88.000000,116.000000,-141.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.187000,0.315000,-1.217000,-0.020000,0.000000,-0.005000,-0.453000,0.034000,0.206000,0.000000,0.005000,-0.001000,23.343000,0.606000,45.887001,0
517,static_baseline,-0.001000,10.000000,0.002000,-0.004000,0.000000,-0.002000,0.002000,72.000000,-361.000000,-211.000000,595.000000,-89.000000,94.000000,-141.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.685000,-0.069000,-1.771000,-0.023000,0.000000,-0.042000,-0.598000,-0.008000,-0.009000,0.000000,0.005000,-0.009000,23.334999,0.612000,45.825001,0
598,static_baseline,0.000000,10.000000,0.002000,-0.002000,-0.001000,-0.001000,0.002000,72.000000,-357.000000,-196.000000,595.000000,-85.000000,109.000000,-133.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.058000,0.794000,-0.246000,-0.014000,-0.001000,0.051000,-0.424000,0.319000,0.506000,0.003000,0.006000,0.012000,23.334999,0.612000,45.825001,0
694,static_baseline,-0.001000,10.000000,0.001000,-0.002000,0.000000,0.001000,0.004000,63.000000,-353.000000,-209.000000,591.000000,-85.000000,92.000000,-132.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.350000,0.484000,-0.366000,-0.017000,-0.008000,0.034000,-0.328000,-0.051000,0.331000,-0.002000,0.004000,0.005000,23.363001,0.612000,45.805000,0
792,static_baseline,-0.001000,10.000000,0.001000,0.000000,-0.001000,0.000000,0.002000,58.000000,-360.000000,-213.000000,581.000000,-86.000000,108.000000,-134.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.036000,0.263000,-0.911000,-0.020000,0.000000,0.030000,-0.464000,0.097000,0.250000,0.001000,0.006000,0.006000,23.329000,0.609000,45.844002,0
884,static_baseline,-0.001000,9.997000,0.002000,-0.001000,0.000000,-0.001000,0.004000,52.000000,-354.000000,-192.000000,582.000000,-93.000000,102.000000,-132.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.014000,0.552000,-0.121000,-0.019000,0.000000,0.042000,-0.382000,0.130000,0.360000,0.000000,0.006000,0.007000,23.329000,0.609000,45.844002,0
971,static_baseline,0.001000,10.000000,0.004000,-0.004000,-0.001000,0.000000,0.004000,52.000000,-367.000000,-188.000000,590.000000,-90.000000,100.000000,-122.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.504000,0.104000,-1.391000,-0.022000,0.000000,-0.020000,-0.428000,-0.018000,0.196000,-0.001000,0.006000,-0.007000,23.315001,0.609000,45.838001,0
1053,static_baseline,-0.002000,10.003000,0.004000,-0.002000,0.001000,-0.001000,0.004000,42.000000,-371.000000,-187.000000,589.000000,-95.000000,100.000000,-138.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.336000,0.276000,-0.862000,-0.018000,0.003000,0.016000,-0.377000,0.040000,0.302000,0.002000,0.005000,0.002000,23.340000,0.603000,45.786999,0
1143,static_baseline,-0.001000,10.000000,0.000000,-0.001000,0.000000,-0.002000,0.001000,47.000000,-350.000000,-192.000000,588.000000,-94.000000,110.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.035000,0.605000,-0.273000,-0.013000,0.001000,0.044000,-0.358000,0.158000,0.355000,0.001000,0.005000,0.011000,23.330000,0.607000,45.869999,0
1223,static_baseline,-0.001000,10.000000,0.004000,-0.002000,-0.001000,-0.001000,0.004000,36.000000,-351.000000,-205.000000,589.000000,-93.000000,102.000000,-125.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.107000,0.363000,-0.669000,-0.018000,-0.001000,0.028000,-0.426000,-0.038000,0.361000,0.000000,0.006000,0.005000,23.330000,0.607000,45.869999,0
1303,static_baseline,0.000000,10.000000,0.002000,0.000000,-0.001000,-0.001000,0.001000,43.000000,-355.000000,-219.000000,597.000000,-97.000000,114.000000,-119.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.331000,0.077000,-0.387000,-0.024000,-0.005000,0.030000,-0.428000,-0.178000,0.247000,-0.003000,0.006000,0.002000,23.348000,0.615000,45.798000,0
1389,static_baseline,-0.001000,10.001000,0.002000,-0.001000,0.000000,0.000000,0.004000,25.000000,-374.000000,-240.000000,583.000000,-98.000000,102.000000,-124.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.137000,0.340000,-0.364000,-0.022000,0.000000,0.033000,-0.382000,0.099000,0.434000,0.000000,0.005000,0.013000,23.319000,0.620000,45.743000,0
1468,static_baseline,0.000000,10.001000,0.002000,-0.001000,-0.001000,-0.001000,0.002000,29.000000,-375.000000,-233.000000,585.000000,-97.000000,120.000000,-123.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.114000,0.335000,-0.131000,-0.019000,-0.001000,0.031000,-0.402000,0.103000,0.389000,0.000000,0.006000,0.009000,23.319000,0.620000,45.743000,0
1569,static_baseline,-0.001000,10.003000,0.000000,-0.002000,0.000000,-0.001000,0.002000,17.000000,-377.000000,-232.000000,579.000000,-99.000000,88.000000,-126.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.057000,0.558000,-0.383000,-0.016000,-0.001000,0.036000,-0.390000,0.111000,0.290000,0.001000,0.004000,0.006000,23.351000,0.607000,45.780998,0
1648,static_baseline,-0.001000,10.000000,0.001000,-0.002000,-0.001000,-0.002000,0.002000,23.000000,-381.000000,-242.000000,588.000000,-97.000000,89.000000,-123.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.518000,-0.102000,-1.152000,-0.026000,-0.001000,-0.025000,-0.556000,-0.051000,0.185000,-0.001000,0.005000,-0.007000,23.323999,0.617000,45.841999,0
1734,static_baseline,0.000000,10.003000,0.001000,-0.002000,-0.001000,0.001000,0.002000,21.000000,-374.000000,-227.000000,586.000000,-103.000000,105.000000,-105.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.147000,0.052000,-1.255000,-0.025000,0.000000,-0.003000,-0.374000,-0.074000,0.273000,-0.001000,0.004000,0.002000,23.323999,0.617000,45.841999,0
1813,static_baseline,0.000000,9.998000,0.002000,-0.002000,-0.001000,-0.001000,0.004000,28.000000,-379.000000,-209.000000,589.000000,-99.000000,106.000000,-119.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.365000,-0.103000,-1.552000,-0.024000,-0.002000,-0.021000,-0.338000,-0.112000,0.137000,-0.001000,0.003000,-0.002000,23.358999,0.603000,45.831001,0
1894,static_baseline,-0.001000,9.998000,0.001000,-0.001000,-0.001000,0.000000,0.004000,27.000000,-379.000000,-208.000000,593.000000,-78.000000,109.000000,-116.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.014000,0.428000,-0.547000,-0.018000,-0.006000,0.021000,-0.438000,0.000000,0.280000,0.000000,0.005000,0.002000,23.358999,0.603000,45.831001,0
1974,static_baseline,-0.001000,10.000000,0.001000,-0.004000,-0.001000,-0.001000,0.000000,26.000000,-403.000000,-195.000000,585.000000,-63.000000,82.000000,-125.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.528000,0.086000,-1.399000,-0.021000,0.003000,-0.015000,-0.549000,-0.017000,0.066000,0.000000,0.007000,-0.003000,23.346001,0.616000,45.804001,0
2053,static_baseline,-0.001000,10.000000,0.004000,-0.001000,-0.001000,-0.002000,0.002000,11.000000,-386.000000,-208.000000,579.000000,-63.000000,100.000000,-126.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.460000,0.108000,-1.219000,-0.024000,0.002000,-0.033000,-0.464000,0.060000,0.215000,0.000000,0.004000,-0.003000,23.346001,0.616000,45.804001,0
2133,static_baseline,-0.001000,10.000000,0.004000,-0.004000,-0.001000,-0.002000,0.001000,24.000000,-387.000000,-217.000000,583.000000,-58.000000,98.000000,-102.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.159000,0.173000,-0.398000,-0.022000,-0.002000,0.009000,-0.449000,0.110000,0.401000,0.000000,0.006000,0.003000,23.326000,0.603000,45.827999,0
2212,static_baseline,-0.001000,10.000000,0.002000,-0.001000,-0.001000,-0.002000,0.002000,14.000000,-384.000000,-222.000000,579.000000,-61.000000,104.000000,-127.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.412000,0.038000,-1.378000,-0.023000,0.000000,-0.019000,-0.453000,0.040000,0.269000,0.000000,0.004000,-0.004000,23.323000,0.611000,45.890999,0
2294,static_baseline,-0.001000,10.001000,0.000000,-0.002000,-0.001000,-0.001000,0.002000,12.000000,-386.000000,-221.000000,582.000000,-60.000000,92.000000,-106.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.521000,-0.526000,-1.522000,-0.029000,-0.001000,-0.041000,-0.441000,-0.147000,0.199000,-0.002000,0.005000,-0.004000,23.323000,0.611000,45.890999,0
2378,static_baseline,-0.001000,9.998000,0.002000,0.000000,-0.001000,-0.001000,0.002000,0.000000,-373.000000,-230.000000,581.000000,-65.000000,115.000000,-125.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.474000,-0.023000,-1.646000,-0.023000,0.000000,-0.046000,-0.495000,-0.078000,0.133000,0.000000,0.005000,-0.008000,23.337000,0.617000,45.886002,0
2457,static_baseline,-0.001000,9.998000,0.001000,-0.001000,-0.001000,-0.001000,0.004000,-3.000000,-358.000000,-227.000000,579.000000,-58.000000,98.000000,-119.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.517000,-0.069000,-1.282000,-0.026000,0.004000,-0.027000,-0.447000,0.002000,0.174000,0.000000,0.005000,-0.002000,23.337000,0.617000,45.886002,0
2539,static_baseline,-0.002000,10.000000,0.004000,-0.002000,-0.001000,-0.001000,0.004000,7.000000,-366.000000,-226.000000,578.000000,-61.000000,113.000000,-112.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.359000,-0.343000,-1.775000,-0.030000,-0.004000,-0.035000,-0.419000,-0.081000,0.167000,-0.001000,0.005000,-0.006000,23.326000,0.597000,45.922001,0
2619,static_baseline,-0.001000,10.000000,0.002000,-0.001000,-0.001000,0.000000,0.000000,14.000000,-376.000000,-208.000000,580.000000,-63.000000,96.000000,-127.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.093000,0.454000,-0.913000,-0.016000,-0.002000,0.018000,-0.408000,0.046000,0.266000,0.000000,0.004000,0.008000,23.326000,0.597000,45.922001,0
2703,static_baseline,0.000000,10.000000,0.002000,-0.001000,-0.001000,-0.002000,0.002000,14.000000,-368.000000,-220.000000,573.000000,-63.000000,92.000000,-128.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.059000,0.239000,-0.799000,-0.020000,0.000000,0.012000,-0.470000,-0.053000,0.217000,-0.001000,0.006000,0.002000,23.315001,0.600000,45.807999,0
2799,static_baseline,-0.001000,9.998000,0.004000,-0.002000,-0.001000,-0.002000,0.002000,22.000000,-353.000000,-209.000000,578.000000,-65.000000,94.000000,-133.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.501000,0.082000,-1.207000,-0.021000,0.000000,-0.039000,-0.624000,0.088000,0.240000,0.001000,0.007000,-0.010000,23.315001,0.600000,45.807999,0
2883,static_baseline,-0.002000,10.000000,0.001000,-0.002000,-0.001000,0.000000,0.004000,23.000000,-356.000000,-206.000000,565.000000,-64.000000,101.000000,-125.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.224000,0.501000,-0.168000,-0.017000,-0.001000,0.038000,-0.371000,0.077000,0.461000,0.001000,0.007000,0.005000,23.315001,0.600000,45.807999,0
2969,static_baseline,0.000000,10.000000,0.000000,-0.001000,-0.002000,-0.001000,0.002000,32.000000,-351.000000,-202.000000,565.000000,-59.000000,110.000000,-116.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.275000,-0.189000,-1.160000,-0.027000,-0.001000,-0.018000,-0.430000,-0.158000,0.320000,-0.002000,0.007000,-0.001000,23.327000,0.606000,45.900002,0
3053,static_baseline,-0.001000,9.997000,0.001000,-0.004000,-0.001000,-0.002000,0.001000,30.000000,-352.000000,-201.000000,564.000000,-57.000000,99.000000,-135.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.197000,0.012000,-1.108000,-0.025000,0.000000,0.001000,-0.369000,-0.047000,0.057000,0.000000,0.004000,0.002000,23.327000,0.606000,45.900002,0
3135,static_baseline,0.000000,9.998000,0.001000,-0.002000,-0.001000,-0.001000,0.002000,24.000000,-349.000000,-210.000000,563.000000,-60.000000,93.000000,-127.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.556000,-0.280000,-1.304000,-0.026000,0.001000,-0.023000,-0.419000,-0.099000,0.224000,-0.001000,0.005000,-0.003000,23.299000,0.609000,45.884998,0
3218,static_baseline,-0.001000,9.998000,0.002000,-0.001000,-0.002000,0.000000,0.001000,26.000000,-341.000000,-200.000000,576.000000,-63.000000,103.000000,-127.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.653000,0.090000,-1.742000,-0.027000,0.000000,-0.038000,-0.544000,-0.047000,-0.107000,-0.001000,0.006000,-0.010000,23.299000,0.609000,45.884998,0
3300,static_baseline,-0.001000,10.000000,0.002000,-0.001000,-0.001000,-0.001000,0.002000,21.000000,-352.000000,-192.000000,566.000000,-56.000000,100.000000,-133.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.058000,0.104000,-0.789000,-0.027000,-0.003000,0.000000,-0.351000,-0.003000,0.120000,-0.002000,0.004000,-0.005000,23.299000,0.609000,45.884998,0
3383,static_baseline,-0.002000,10.001000,0.000000,-0.002000,-0.001000,0.000000,0.004000,28.000000,-349.000000,-191.000000,565.000000,-66.000000,104.000000,-122.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.298000,0.283000,-0.573000,-0.021000,0.004000,0.004000,-0.484000,0.009000,0.262000,0.000000,0.006000,-0.001000,23.343000,0.614000,45.841000,0
3463,static_baseline,0.000000,10.000000,0.002000,-0.001000,-0.001000,0.000000,0.002000,28.000000,-353.000000,-203.000000,570.000000,-64.000000,100.000000,-116.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.004000,0.531000,-0.348000,-0.020000,0.000000,0.033000,-0.344000,0.108000,0.432000,0.001000,0.005000,0.008000,23.343000,0.614000,45.841000,0
3543,static_baseline,-0.001000,10.001000,0.002000,-0.002000,-0.001000,-0.004000,0.005000,16.000000,-357.000000,-195.000000,579.000000,-56.000000,109.000000,-128.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.078000,0.455000,-0.270000,-0.019000,-0.001000,0.043000,-0.383000,0.113000,0.326000,0.001000,0.005000,0.008000,23.381001,0.616000,45.870998,0
3628,static_baseline,0.000000,10.000000,0.004000,0.000000,-0.001000,-0.001000,0.001000,28.000000,-364.000000,-178.000000,578.000000,-63.000000,107.000000,-124.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.259000,0.349000,-0.660000,-0.022000,0.003000,0.018000,-0.396000,0.024000,0.331000,0.000000,0.006000,0.008000,23.381001,0.616000,45.870998,0
3719,static_baseline,-0.001000,9.998000,0.001000,-0.001000,-0.001000,0.000000,0.002000,27.000000,-372.000000,-177.000000,568.000000,-61.000000,110.000000,-123.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.281000,0.063000,-1.645000,-0.024000,-0.005000,-0.043000,-0.427000,-0.022000,-0.020000,-0.001000,0.003000,-0.008000,23.351000,0.596000,45.925999,0
3799,static_baseline,-0.001000,10.001000,0.002000,-0.001000,-0.001000,-0.002000,0.002000,24.000000,-383.000000,-176.000000,572.000000,-68.000000,111.000000,-131.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.407000,0.027000,-1.844000,-0.024000,-0.002000,-0.041000,-0.479000,-0.045000,0.000000,-0.001000,0.005000,-0.012000,23.351000,0.596000,45.925999,0
3883,static_baseline,-0.001000,10.000000,0.002000,0.000000,-0.002000,0.000000,0.005000,27.000000,-383.000000,-168.000000,568.000000,-62.000000,119.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.149000,0.376000,-0.725000,-0.019000,-0.002000,0.007000,-0.356000,0.002000,0.268000,-0.001000,0.003000,0.002000,23.318001,0.609000,45.855000,0
3962,static_baseline,-0.002000,10.000000,0.002000,-0.001000,-0.001000,-0.002000,0.004000,25.000000,-387.000000,-160.000000,565.000000,-5.000000,99.000000,-125.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.156000,0.317000,-0.626000,-0.020000,0.002000,0.032000,-0.313000,0.026000,0.224000,-0.001000,0.005000,0.011000,23.318001,0.609000,45.855000,0
4054,static_baseline,-0.002000,10.001000,0.002000,-0.002000,-0.001000,0.001000,0.004000,22.000000,-385.000000,-157.000000,574.000000,-17.000000,121.000000,-138.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.449000,-0.010000,-1.439000,-0.030000,0.000000,-0.024000,-0.453000,-0.081000,0.141000,-0.002000,0.006000,-0.005000,23.349001,0.611000,45.876999,0
4137,static_baseline,-0.002000,9.998000,0.002000,-0.001000,-0.002000,-0.002000,0.002000,19.000000,-382.000000,-152.000000,575.000000,-17.000000,107.000000,-127.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.354000,-0.018000,-1.282000,-0.024000,0.001000,-0.012000,-0.428000,-0.034000,0.173000,-0.001000,0.005000,-0.002000,23.341000,0.605000,45.845001,0
4223,static_baseline,-0.001000,10.001000,0.002000,-0.001000,-0.002000,-0.001000,0.002000,18.000000,-377.000000,-136.000000,554.000000,-17.000000,104.000000,-118.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.262000,0.231000,-0.844000,-0.019000,-0.006000,0.015000,-0.219000,0.030000,0.147000,0.000000,0.004000,0.000000,23.341000,0.605000,45.845001,0
4302,static_baseline,-0.001000,9.998000,0.004000,-0.002000,-0.001000,-0.001000,0.002000,22.000000,-387.000000,-135.000000,564.000000,-27.000000,88.000000,-135.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.019000,-0.035000,-1.399000,-0.026000,-0.005000,-0.020000,-0.473000,-0.030000,0.183000,-0.001000,0.004000,0.000000,23.336000,0.607000,45.846001,0
4384,static_baseline,-0.001000,9.998000,0.004000,0.000000,-0.002000,0.000000,0.001000,31.000000,-393.000000,-135.000000,560.000000,-19.000000,91.000000,-120.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.555000,-0.072000,-1.378000,-0.022000,-0.002000,-0.029000,-0.436000,0.031000,0.158000,0.001000,0.005000,-0.007000,23.343000,0.606000,45.907001,0
4478,static_baseline,-0.002000,10.001000,0.001000,-0.002000,-0.001000,-0.001000,0.001000,20.000000,-383.000000,-105.000000,567.000000,-27.000000,116.000000,-129.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.457000,-0.050000,-1.530000,-0.025000,0.000000,-0.021000,-0.516000,-0.045000,0.101000,0.000000,0.005000,-0.006000,23.343000,0.606000,45.907001,0
4562,static_baseline,0.000000,10.000000,0.001000,-0.001000,-0.002000,-0.001000,0.002000,28.000000,-394.000000,-116.000000,567.000000,-21.000000,113.000000,-133.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.377000,0.464000,0.147000,-0.018000,-0.001000,0.037000,-0.289000,0.072000,0.460000,0.000000,0.004000,0.010000,23.357000,0.616000,45.790001,0
4649,static_baseline,0.000000,9.998000,0.002000,-0.002000,-0.001000,0.000000,0.002000,21.000000,-401.000000,-106.000000,542.000000,-22.000000,109.000000,-132.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.123000,0.125000,-0.942000,-0.025000,0.000000,0.015000,-0.486000,-0.062000,0.101000,-0.002000,0.006000,0.000000,23.343000,0.612000,45.869999,0
4733,static_baseline,0.000000,9.998000,0.001000,-0.004000,-0.002000,-0.001000,0.002000,35.000000,-403.000000,-128.000000,560.000000,-22.000000,91.000000,-141.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.155000,0.085000,-1.581000,-0.020000,-0.002000,-0.015000,-0.461000,-0.001000,0.099000,0.001000,0.005000,0.000000,23.343000,0.612000,45.869999,0
4819,static_baseline,-0.001000,10.000000,0.004000,-0.002000,-0.002000,-0.002000,0.004000,34.000000,-406.000000,-134.000000,570.000000,-16.000000,98.000000,-128.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.209000,0.150000,-0.987000,-0.023000,0.001000,0.003000,-0.497000,-0.082000,0.226000,-0.001000,0.007000,-0.001000,23.330999,0.607000,45.902000,0
4903,static_baseline,0.000000,10.000000,0.002000,-0.004000,-0.004000,-0.001000,0.001000,34.000000,-432.000000,-114.000000,568.000000,-21.000000,106.000000,-143.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.390000,0.250000,-1.254000,-0.022000,0.001000,-0.033000,-0.411000,0.048000,0.098000,0.000000,0.006000,-0.004000,23.351999,0.601000,45.866001,0
4999,static_baseline,-0.001000,9.998000,0.001000,0.001000,-0.002000,-0.004000,0.002000,40.000000,-414.000000,-127.000000,568.000000,-14.000000,113.000000,-138.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.430000,-0.068000,-1.720000,-0.025000,-0.002000,-0.032000,-0.425000,-0.226000,0.109000,-0.002000,0.004000,-0.009000,23.351999,0.601000,45.866001,0
5078,static_baseline,-0.001000,10.000000,0.001000,-0.002000,-0.001000,-0.001000,0.004000,46.000000,-399.000000,-130.000000,579.000000,-17.000000,93.000000,-144.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.399000,0.623000,-0.275000,-0.016000,-0.005000,0.044000,-0.323000,0.044000,0.376000,0.000000,0.004000,0.012000,23.319000,0.585000,45.842999,0
5168,static_baseline,-0.001000,10.000000,0.000000,-0.001000,-0.002000,-0.001000,0.002000,34.000000,-400.000000,-129.000000,579.000000,-19.000000,96.000000,-131.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.217000,0.204000,-0.900000,-0.021000,0.002000,0.032000,-0.313000,-0.057000,0.356000,0.000000,0.005000,0.008000,23.375000,0.613000,45.827999,0
5254,static_baseline,-0.002000,10.000000,0.002000,-0.002000,-0.002000,-0.001000,0.002000,41.000000,-411.000000,-132.000000,582.000000,-23.000000,94.000000,-131.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.495000,0.120000,-1.055000,-0.021000,-0.003000,-0.022000,-0.368000,0.141000,0.289000,0.002000,0.003000,0.000000,23.375000,0.613000,45.827999,0
5334,static_baseline,-0.002000,9.998000,0.000000,-0.001000,-0.002000,-0.001000,0.001000,41.000000,-414.000000,-157.000000,579.000000,-24.000000,95.000000,-133.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.299000,-0.081000,-1.076000,-0.024000,-0.002000,-0.026000,-0.401000,-0.163000,0.203000,-0.002000,0.005000,0.000000,23.358000,0.608000,45.852001,0
5420,static_baseline,-0.001000,10.000000,0.001000,-0.001000,-0.002000,0.000000,0.002000,34.000000,-432.000000,-131.000000,576.000000,-26.000000,102.000000,-142.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.304000,0.820000,-0.296000,-0.011000,-0.004000,0.044000,-0.353000,0.128000,0.331000,0.001000,0.004000,0.009000,23.358000,0.608000,45.852001,0
5507,static_baseline,-0.001000,10.000000,0.002000,-0.001000,-0.001000,0.000000,0.004000,33.000000,-419.000000,-119.000000,569.000000,-25.000000,98.000000,-137.000000,23.000000,22.000000,23.000000,23.000000,23.000000,22.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.084000,0.530000,-0.078000,-0.014000,-0.001000,0.037000,-0.152000,0.041000,0.507000,0.001000,0.002000,0.012000,23.341000,0.613000,45.851002,0
5589,static_baseline,-0.002000,9.998000,0.001000,-0.001000,-0.001000,0.001000,0.002000,21.000000,-423.000000,-119.000000,573.000000,-22.000000,89.000000,-127.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.087000,0.236000,-0.216000,-0.021000,-0.001000,0.045000,-0.383000,-0.043000,0.409000,-0.001000,0.005000,0.011000,23.350000,0.604000,45.820000,0
5668,static_baseline,0.000000,9.998000,0.001000,-0.002000,-0.002000,-0.002000,0.004000,23.000000,-440.000000,-114.000000,572.000000,-19.000000,102.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.528000,0.475000,-1.093000,-0.018000,0.004000,-0.003000,-0.475000,0.054000,0.375000,0.000000,0.007000,0.000000,23.350000,0.604000,45.820000,0
5760,static_baseline,0.001000,10.000000,0.001000,-0.002000,-0.001000,0.000000,0.002000,9.000000,-436.000000,-104.000000,570.000000,-22.000000,111.000000,-135.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.702000,0.067000,-1.533000,-0.024000,0.000000,-0.035000,-0.491000,-0.083000,0.138000,0.000000,0.005000,-0.007000,23.353001,0.602000,45.823002,0
5843,static_baseline,0.000000,10.001000,0.002000,-0.004000,-0.004000,-0.001000,0.002000,8.000000,-446.000000,-134.000000,580.000000,-21.000000,99.000000,-130.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.335000,-0.161000,-1.377000,-0.028000,0.000000,-0.007000,-0.402000,-0.024000,0.156000,0.000000,0.005000,0.000000,23.353001,0.602000,45.823002,0
5935,static_baseline,-0.004000,10.000000,0.004000,-0.001000,-0.001000,-0.001000,0.004000,15.000000,-455.000000,-120.000000,559.000000,-21.000000,84.000000,-125.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.565000,0.091000,-1.045000,-0.024000,0.003000,-0.021000,-0.460000,0.034000,0.171000,0.000000,0.006000,-0.007000,23.341000,0.609000,45.889000,0
6022,static_baseline,-0.001000,10.000000,0.004000,-0.001000,-0.002000,0.000000,0.002000,15.000000,-450.000000,-125.000000,575.000000,-11.000000,82.000000,-135.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.038000,0.338000,-0.288000,-0.021000,0.000000,0.037000,-0.432000,0.202000,0.498000,0.001000,0.007000,0.014000,23.341000,0.609000,45.889000,0
6108,static_baseline,-0.004000,10.001000,0.001000,-0.004000,-0.004000,0.000000,0.005000,25.000000,-425.000000,-127.000000,572.000000,-27.000000,87.000000,-135.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.057000,0.477000,-0.591000,-0.016000,0.000000,0.014000,-0.313000,0.112000,0.322000,0.000000,0.006000,0.005000,23.350000,0.602000,45.872002,0
6190,static_baseline,-0.001000,10.000000,0.000000,0.000000,-0.004000,0.000000,0.001000,34.000000,-416.000000,-106.000000,580.000000,-19.000000,109.000000,-124.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.343000,0.421000,-0.575000,-0.017000,0.004000,0.011000,-0.396000,0.085000,0.341000,0.000000,0.006000,0.008000,23.350000,0.602000,45.872002,0
6274,static_baseline,-0.002000,10.000000,0.001000,-0.001000,-0.001000,-0.001000,0.001000,28.000000,-425.000000,-103.000000,573.000000,-20.000000,87.000000,-116.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.404000,-0.031000,-1.178000,-0.023000,0.000000,-0.016000,-0.438000,-0.109000,0.145000,-0.002000,0.006000,-0.002000,23.350000,0.615000,45.827000,0
6357,static_baseline,0.000000,10.000000,0.001000,-0.004000,-0.001000,-0.001000,0.002000,42.000000,-416.000000,-91.000000,595.000000,-20.000000,89.000000,-132.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.089000,0.067000,-0.826000,-0.024000,-0.005000,0.011000,-0.377000,0.026000,0.191000,0.001000,0.003000,-0.001000,23.350000,0.615000,45.827000,0
6457,static_baseline,-0.001000,10.000000,0.001000,-0.002000,-0.002000,0.000000,0.001000,62.000000,-417.000000,-93.000000,599.000000,-20.000000,93.000000,-126.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.329000,-0.165000,-1.434000,-0.028000,0.000000,-0.009000,-0.457000,0.058000,0.039000,-0.001000,0.007000,-0.003000,23.350000,0.615000,45.827000,0
6572,static_baseline,-0.001000,10.000000,0.004000,-0.001000,-0.002000,0.001000,0.004000,64.000000,-416.000000,-96.000000,592.000000,-29.000000,79.000000,-138.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.332000,-0.107000,-0.987000,-0.026000,0.000000,-0.012000,-0.420000,0.045000,0.302000,0.002000,0.004000,-0.004000,23.371000,0.602000,45.867001,0
6653,static_baseline,0.000000,9.998000,0.002000,-0.001000,-0.001000,-0.001000,0.005000,56.000000,-408.000000,-99.000000,589.000000,-21.000000,96.000000,-122.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.310000,-0.198000,-1.165000,-0.025000,0.000000,-0.015000,-0.274000,-0.043000,0.216000,0.000000,0.004000,-0.005000,23.371000,0.602000,45.867001,0
6743,static_baseline,-0.001000,9.998000,0.000000,-0.001000,-0.001000,0.000000,0.005000,64.000000,-399.000000,-96.000000,588.000000,-20.000000,84.000000,-113.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.034000,0.462000,-0.763000,-0.019000,-0.002000,0.019000,-0.392000,-0.009000,0.218000,0.000000,0.006000,0.004000,23.334000,0.599000,45.895000,0
6828,static_baseline,-0.002000,10.000000,0.004000,-0.001000,-0.002000,0.000000,0.004000,56.000000,-396.000000,-108.000000,592.000000,-18.000000,84.000000,-115.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.281000,0.162000,-0.920000,-0.022000,0.000000,0.010000,-0.555000,0.010000,0.143000,0.000000,0.006000,-0.001000,23.334000,0.599000,45.895000,0
6914,static_baseline,-0.001000,9.998000,0.002000,-0.001000,-0.001000,-0.001000,0.004000,65.000000,-404.000000,-96.000000,586.000000,-19.000000,94.000000,-115.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.567000,-0.069000,-1.461000,-0.023000,0.001000,-0.026000,-0.553000,-0.100000,0.244000,-0.002000,0.005000,-0.004000,23.349001,0.611000,45.854000,0
6997,static_baseline,-0.001000,10.000000,0.004000,-0.001000,-0.002000,-0.001000,0.004000,60.000000,-412.000000,-96.000000,589.000000,-10.000000,80.000000,-131.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.096000,0.445000,-0.452000,-0.015000,-0.003000,0.011000,-0.296000,0.133000,0.296000,0.002000,0.003000,0.002000,23.349001,0.611000,45.854000,0
7083,static_baseline,0.000000,10.000000,0.001000,-0.002000,-0.002000,-0.001000,0.005000,58.000000,-422.000000,-114.000000,580.000000,-9.000000,86.000000,-135.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.105000,-0.047000,-1.538000,-0.026000,-0.005000,-0.023000,-0.326000,-0.053000,0.180000,-0.001000,0.003000,-0.004000,23.354000,0.608000,45.862000,0
7164,static_baseline,-0.002000,10.000000,0.002000,-0.002000,-0.001000,-0.001000,0.002000,38.000000,-432.000000,-111.000000,580.000000,-8.000000,81.000000,-129.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.121000,0.890000,-0.231000,-0.016000,0.000000,0.034000,-0.422000,0.095000,0.313000,0.000000,0.005000,0.004000,23.354000,0.608000,45.862000,0
7250,static_baseline,0.000000,10.000000,0.000000,-0.001000,-0.001000,-0.001000,0.005000,47.000000,-427.000000,-123.000000,583.000000,-11.000000,91.000000,-126.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.054000,0.632000,-0.410000,-0.017000,0.000000,0.035000,-0.390000,0.152000,0.535000,0.003000,0.005000,0.003000,23.370001,0.612000,45.839001,0
7329,static_baseline,-0.001000,9.998000,0.002000,-0.001000,-0.001000,0.000000,0.002000,51.000000,-427.000000,-123.000000,582.000000,-8.000000,83.000000,-137.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.170000,0.743000,-0.443000,-0.015000,0.002000,0.041000,-0.353000,0.213000,0.314000,0.001000,0.005000,0.007000,23.370001,0.612000,45.839001,0
7409,static_baseline,-0.001000,9.998000,0.001000,-0.001000,-0.002000,0.000000,0.004000,54.000000,-425.000000,-114.000000,575.000000,-6.000000,74.000000,-121.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.067000,0.624000,-0.696000,-0.017000,0.000000,0.022000,-0.451000,0.014000,0.210000,-0.001000,0.006000,0.001000,23.339001,0.592000,45.808998,0
7490,static_baseline,-0.001000,9.998000,0.001000,-0.001000,-0.002000,0.001000,0.004000,49.000000,-434.000000,-131.000000,584.000000,-10.000000,77.000000,-134.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.299000,0.743000,-0.389000,-0.014000,-0.003000,0.040000,-0.287000,0.077000,0.302000,0.000000,0.004000,0.008000,23.339001,0.592000,45.808998,0
7570,static_baseline,-0.002000,9.998000,0.001000,-0.004000,-0.001000,-0.001000,0.004000,52.000000,-428.000000,-118.000000,582.000000,-13.000000,77.000000,-139.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.318000,0.533000,-0.321000,-0.015000,-0.005000,0.025000,-0.257000,0.075000,0.248000,0.000000,0.003000,0.003000,23.370001,0.619000,45.870998,0
7649,static_baseline,-0.001000,9.998000,0.001000,0.000000,-0.001000,-0.001000,0.002000,44.000000,-435.000000,-135.000000,581.000000,-15.000000,75.000000,-123.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.368000,0.054000,-0.878000,-0.025000,0.000000,0.013000,-0.441000,-0.104000,0.391000,-0.001000,0.006000,0.006000,23.370001,0.619000,45.870998,0
7734,static_baseline,-0.002000,9.998000,0.005000,-0.001000,-0.001000,-0.001000,0.004000,46.000000,-437.000000,-145.000000,579.000000,-15.000000,77.000000,-131.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.565000,-0.102000,-1.223000,-0.025000,0.002000,-0.013000,-0.483000,-0.031000,0.315000,-0.002000,0.005000,0.000000,23.358999,0.600000,45.866001,0
7818,static_baseline,-0.001000,10.000000,0.000000,-0.002000,-0.002000,0.001000,0.002000,46.000000,-438.000000,-160.000000,587.000000,-12.000000,72.000000,-129.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.400000,0.237000,-1.405000,-0.024000,-0.001000,-0.034000,-0.406000,0.023000,0.070000,0.000000,0.002000,-0.008000,23.358999,0.600000,45.866001,0
7899,static_baseline,-0.001000,9.998000,0.002000,-0.002000,-0.004000,-0.001000,0.002000,49.000000,-425.000000,-166.000000,572.000000,-16.000000,93.000000,-134.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.383000,-0.332000,-1.708000,-0.027000,0.000000,-0.038000,-0.366000,-0.080000,0.083000,0.000000,0.004000,-0.007000,23.358999,0.600000,45.866001,0
7985,static_baseline,-0.001000,10.001000,0.002000,0.000000,-0.001000,0.000000,0.004000,52.000000,-425.000000,-154.000000,572.000000,-17.000000,90.000000,-137.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.214000,0.122000,-0.801000,-0.021000,-0.002000,0.004000,-0.396000,0.104000,0.243000,0.001000,0.004000,-0.001000,23.363001,0.602000,45.828999,0
8074,static_baseline,0.000000,9.998000,0.002000,-0.001000,-0.001000,0.001000,0.002000,58.000000,-419.000000,-148.000000,570.000000,-18.000000,85.000000,-149.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.324000,0.491000,-0.784000,-0.015000,0.002000,0.027000,-0.432000,0.109000,0.358000,0.001000,0.006000,0.006000,23.363001,0.602000,45.828999,0
8153,static_baseline,-0.001000,10.000000,0.004000,-0.002000,-0.001000,-0.001000,0.001000,49.000000,-416.000000,-148.000000,566.000000,-14.000000,92.000000,-145.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.075000,0.285000,-0.552000,-0.019000,-0.001000,0.025000,-0.322000,0.011000,0.409000,0.000000,0.005000,0.004000,23.341000,0.603000,45.841999,0
8235,static_baseline,-0.004000,9.998000,0.000000,-0.002000,-0.004000,0.000000,0.004000,35.000000,-430.000000,-150.000000,565.000000,-16.000000,86.000000,-131.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.063000,0.316000,-0.403000,-0.021000,0.000000,0.029000,-0.375000,0.108000,0.371000,0.001000,0.005000,0.005000,23.341000,0.603000,45.841999,0
8319,static_baseline,-0.001000,9.998000,0.001000,-0.001000,-0.002000,0.001000,0.004000,47.000000,-429.000000,-146.000000,574.000000,-11.000000,89.000000,-133.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.432000,0.012000,-1.240000,-0.025000,-0.002000,-0.022000,-0.361000,0.083000,0.298000,0.000000,0.005000,-0.001000,23.353001,0.604000,45.877998,0
8400,static_baseline,-0.001000,10.001000,0.002000,-0.001000,-0.002000,-0.001000,0.004000,52.000000,-422.000000,-153.000000,564.000000,-11.000000,93.000000,-146.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.492000,-0.006000,-1.592000,-0.018000,-0.003000,-0.029000,-0.482000,-0.167000,0.041000,0.000000,0.005000,-0.004000,23.353001,0.604000,45.877998,0
8479,static_baseline,-0.001000,10.000000,0.002000,-0.001000,-0.001000,-0.001000,0.004000,54.000000,-420.000000,-137.000000,567.000000,-10.000000,73.000000,-140.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.411000,0.045000,-1.812000,-0.025000,-0.004000,-0.029000,-0.489000,0.008000,0.139000,-0.002000,0.004000,-0.008000,23.353001,0.604000,45.877998,0
8559,static_baseline,-0.002000,10.000000,0.001000,-0.001000,-0.004000,0.000000,0.004000,44.000000,-423.000000,-143.000000,574.000000,-8.000000,77.000000,-147.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.426000,0.106000,-1.267000,-0.022000,-0.004000,-0.015000,-0.448000,-0.017000,0.173000,0.000000,0.004000,-0.003000,23.329000,0.609000,45.884998,0
8640,static_baseline,-0.001000,9.997000,0.001000,-0.001000,-0.001000,-0.001000,0.002000,36.000000,-434.000000,-130.000000,568.000000,-8.000000,76.000000,-135.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.586000,-0.179000,-1.355000,-0.026000,0.000000,-0.037000,-0.470000,-0.075000,0.174000,0.000000,0.005000,-0.012000,23.329000,0.609000,45.884998,0
8718,static_baseline,-0.001000,10.001000,0.002000,-0.002000,-0.002000,-0.001000,0.004000,30.000000,-438.000000,-129.000000,573.000000,-12.000000,59.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.483000,-0.001000,-1.516000,-0.024000,0.003000,-0.011000,-0.409000,0.000000,0.241000,0.000000,0.005000,0.003000,23.344999,0.618000,45.844002,0
8799,static_baseline,0.000000,10.000000,0.000000,-0.001000,-0.002000,-0.001000,0.002000,28.000000,-443.000000,-111.000000,567.000000,-16.000000,85.000000,-122.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.060000,0.126000,-0.829000,-0.023000,-0.003000,0.007000,-0.367000,0.005000,0.380000,0.000000,0.004000,0.000000,23.344999,0.618000,45.844002,0
8885,static_baseline,-0.001000,9.998000,0.001000,-0.001000,-0.001000,-0.001000,0.002000,22.000000,-446.000000,-119.000000,573.000000,-17.000000,79.000000,-140.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.122000,0.470000,-0.570000,-0.019000,-0.001000,0.024000,-0.402000,-0.042000,0.360000,-0.002000,0.006000,0.000000,23.323000,0.600000,45.866001,0
8970,static_baseline,-0.001000,9.997000,0.000000,-0.002000,-0.001000,0.000000,0.002000,36.000000,-426.000000,-109.000000,566.000000,-13.000000,73.000000,-132.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.378000,0.147000,-1.048000,-0.023000,0.000000,-0.003000,-0.507000,-0.042000,0.212000,0.000000,0.005000,0.003000,23.379000,0.614000,45.890999,0
9060,static_baseline,-0.001000,9.998000,0.002000,-0.001000,-0.002000,0.004000,0.002000,56.000000,-419.000000,-116.000000,565.000000,-11.000000,-13.000000,-133.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.513000,0.151000,-0.998000,-0.021000,0.001000,-0.007000,-0.474000,0.012000,0.213000,0.000000,0.006000,-0.003000,23.379000,0.614000,45.890999,0
9144,static_baseline,-0.002000,9.998000,0.004000,-0.002000,-0.001000,0.008000,0.004000,49.000000,-415.000000,-103.000000,566.000000,-16.000000,-106.000000,-134.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.043000,0.431000,-0.208000,-0.018000,0.000000,0.026000,-0.407000,0.044000,0.507000,0.000000,0.005000,0.009000,23.320999,0.611000,45.862000,0
9229,static_baseline,-0.002000,10.000000,0.002000,-0.001000,-0.001000,0.006000,0.005000,53.000000,-409.000000,-114.000000,568.000000,-13.000000,-166.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.029000,0.568000,-0.222000,-0.014000,0.000000,0.039000,-0.316000,-0.020000,0.474000,0.000000,0.003000,0.011000,23.367001,0.612000,45.880001,0
9309,static_baseline,-0.001000,10.001000,0.002000,-0.002000,-0.002000,0.001000,0.004000,49.000000,-402.000000,-120.000000,569.000000,-16.000000,-196.000000,-137.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.291000,-0.041000,-1.201000,-0.025000,0.000000,-0.011000,-0.402000,-0.162000,0.281000,-0.002000,0.006000,0.000000,23.367001,0.612000,45.880001,0
9399,static_baseline,-0.001000,10.000000,0.001000,-0.002000,-0.002000,0.001000,0.002000,48.000000,-402.000000,-115.000000,569.000000,-15.000000,-200.000000,-129.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.631000,-0.224000,-1.716000,-0.028000,0.002000,-0.039000,-0.481000,-0.128000,0.101000,-0.002000,0.005000,-0.010000,23.344999,0.608000,45.862000,0
9479,static_baseline,-0.002000,10.000000,-0.001000,-0.002000,-0.002000,0.001000,0.002000,47.000000,-399.000000,-109.000000,565.000000,-14.000000,-190.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.464000,0.135000,-1.330000,-0.023000,0.000000,-0.008000,-0.482000,-0.014000,0.247000,0.000000,0.006000,-0.002000,23.341000,0.605000,45.743000,0
9558,static_baseline,-0.002000,10.001000,-0.001000,0.000000,-0.004000,0.001000,0.004000,39.000000,-390.000000,-128.000000,572.000000,-11.000000,-215.000000,-134.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.431000,0.101000,-1.337000,-0.022000,0.002000,-0.017000,-0.562000,-0.143000,0.162000,-0.001000,0.008000,-0.004000,23.341000,0.605000,45.743000,0
9640,static_baseline,0.000000,10.001000,0.001000,-0.002000,-0.002000,-0.001000,0.002000,43.000000,-387.000000,-147.000000,579.000000,-11.000000,-188.000000,-127.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.616000,0.156000,-1.242000,-0.022000,0.000000,-0.030000,-0.516000,0.021000,0.185000,0.000000,0.005000,-0.006000,23.323999,0.608000,45.768002,0
9719,static_baseline,-0.002000,10.001000,0.001000,0.000000,-0.002000,-0.004000,0.002000,46.000000,-408.000000,-140.000000,572.000000,-11.000000,-197.000000,-133.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.556000,-0.374000,-1.276000,-0.031000,0.000000,-0.025000,-0.503000,-0.116000,0.287000,-0.002000,0.005000,-0.005000,23.323999,0.608000,45.768002,0
9799,static_baseline,0.000000,10.001000,0.001000,-0.002000,-0.001000,-0.004000,0.004000,37.000000,-388.000000,-140.000000,569.000000,-9.000000,-180.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.065000,0.325000,-0.228000,-0.019000,-0.001000,0.032000,-0.405000,0.088000,0.326000,0.000000,0.005000,0.009000,23.337999,0.608000,45.827999,0
9893,static_baseline,-0.001000,10.000000,0.001000,-0.002000,-0.001000,-0.002000,0.002000,41.000000,-394.000000,-154.000000,565.000000,-16.000000,-190.000000,-138.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.365000,-0.115000,-1.489000,-0.028000,0.000000,-0.027000,-0.412000,0.061000,0.119000,0.000000,0.005000,-0.003000,23.341999,0.618000,45.805000,0
9984,static_baseline,-0.001000,10.001000,0.002000,-0.002000,-0.001000,-0.004000,0.004000,47.000000,-395.000000,-136.000000,560.000000,-15.000000,-174.000000,-131.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.150000,-0.085000,-1.399000,-0.030000,0.002000,-0.006000,-0.326000,-0.008000,0.160000,-0.001000,0.005000,-0.006000,23.341999,0.618000,45.805000,0
10107,move_positive,-0.001000,10.005000,0.001000,-0.002000,-0.002000,-0.004000,0.002000,40.000000,-100.000000,-332.000000,561.000000,6.000000,-172.000000,-117.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.131000,-0.075000,-0.918000,-0.026000,-0.004000,-0.001000,-0.377000,-0.096000,0.264000,-0.002000,0.003000,-0.004000,23.351999,0.605000,45.855000,0
10191,move_positive,-0.002000,10.062000,0.000000,-0.002000,-0.002000,-0.002000,0.005000,40.000000,178.000000,-414.000000,563.000000,15.000000,-162.000000,-117.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.276000,-0.205000,-1.599000,-0.027000,0.000000,-0.015000,-0.522000,-0.098000,0.070000,-0.001000,0.006000,-0.003000,23.323000,0.604000,45.839001,0
10283,move_positive,-0.001000,10.251000,0.000000,-0.001000,-0.002000,-0.005000,0.004000,42.000000,219.000000,-369.000000,566.000000,24.000000,-131.000000,-131.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.486000,-0.155000,-1.627000,-0.026000,0.000000,-0.033000,-0.565000,-0.012000,0.115000,0.000000,0.007000,-0.006000,23.323000,0.604000,45.839001,0
10363,move_positive,0.000000,10.508000,0.000000,-0.001000,-0.002000,-0.004000,0.001000,36.000000,24.000000,-401.000000,549.000000,26.000000,-108.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.098000,0.203000,-1.543000,-0.022000,-0.003000,-0.019000,-0.484000,0.087000,0.217000,0.000000,0.006000,-0.002000,23.336000,0.601000,45.846001,0
10448,move_positive,0.000000,10.861000,-0.002000,-0.001000,-0.002000,-0.004000,0.004000,35.000000,159.000000,-399.000000,559.000000,43.000000,-95.000000,-129.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.047000,0.564000,-0.549000,-0.018000,-0.002000,0.014000,-0.472000,0.146000,0.299000,0.001000,0.005000,0.000000,23.336000,0.601000,45.846001,0
10529,move_positive,-0.001000,11.252000,0.000000,-0.002000,-0.002000,-0.004000,0.004000,22.000000,215.000000,-392.000000,560.000000,55.000000,-48.000000,-127.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.277000,0.138000,-1.186000,-0.023000,0.000000,0.000000,-0.445000,-0.006000,0.247000,-0.001000,0.006000,0.004000,23.358000,0.618000,45.888000,0
10619,move_positive,-0.001000,11.667000,-0.001000,0.000000,-0.002000,-0.004000,0.004000,28.000000,108.000000,-379.000000,545.000000,68.000000,-34.000000,-127.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.278000,0.163000,-1.667000,-0.023000,-0.002000,-0.015000,-0.348000,0.026000,0.228000,0.000000,0.004000,-0.003000,23.325001,0.585000,45.816002,0
10704,move_positive,-0.002000,12.078000,-0.001000,-0.001000,-0.002000,-0.002000,0.002000,34.000000,68.000000,-383.000000,562.000000,85.000000,-18.000000,-118.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.023000,0.492000,0.121000,-0.018000,0.000000,0.035000,-0.351000,0.048000,0.478000,0.000000,0.006000,0.008000,23.325001,0.585000,45.816002,0
10792,move_positive,-0.001000,12.422000,-0.002000,-0.002000,-0.001000,-0.004000,0.002000,28.000000,2.000000,-397.000000,551.000000,99.000000,6.000000,-117.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.039000,0.482000,-0.204000,-0.018000,0.000000,0.040000,-0.491000,0.160000,0.396000,0.000000,0.006000,0.009000,23.341000,0.612000,45.847000,0
10874,move_positive,0.000000,12.719000,-0.001000,-0.001000,-0.002000,-0.005000,0.004000,42.000000,-25.000000,-388.000000,554.000000,109.000000,13.000000,-123.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.140000,-0.234000,-1.210000,-0.029000,-0.003000,-0.006000,-0.362000,-0.076000,0.178000,-0.002000,0.004000,0.001000,23.341000,0.612000,45.847000,0
10960,move_positive,-0.004000,12.896000,-0.001000,-0.001000,-0.002000,-0.002000,0.002000,39.000000,-46.000000,-392.000000,557.000000,112.000000,7.000000,-120.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.343000,-0.079000,-1.542000,-0.025000,0.000000,-0.034000,-0.455000,-0.004000,0.119000,-0.001000,0.006000,-0.006000,23.340000,0.604000,45.860001,0
11043,move_positive,0.001000,12.965000,-0.001000,-0.001000,-0.002000,-0.001000,0.004000,46.000000,-34.000000,-399.000000,563.000000,123.000000,5.000000,-118.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.286000,0.114000,-1.497000,-0.024000,0.000000,-0.022000,-0.521000,0.039000,0.136000,0.000000,0.007000,-0.005000,23.340000,0.604000,45.860001,0
11205,return_positive,-0.001000,12.999000,-0.001000,-0.001000,-0.001000,-0.001000,0.002000,59.000000,-210.000000,-380.000000,552.000000,141.000000,21.000000,-122.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.429000,0.401000,-0.439000,-0.020000,-0.004000,0.033000,-0.270000,-0.026000,0.380000,0.000000,0.004000,0.008000,23.357000,0.609000,45.888000,0
11289,return_positive,-0.001000,12.996000,-0.002000,0.001000,-0.001000,-0.002000,0.002000,60.000000,-744.000000,-360.000000,541.000000,148.000000,30.000000,-135.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.122000,0.096000,-0.828000,-0.025000,-0.003000,0.015000,-0.349000,-0.079000,0.207000,-0.002000,0.004000,-0.001000,23.357000,0.609000,45.888000,0
11368,return_positive,-0.001000,12.922000,-0.001000,-0.001000,-0.002000,-0.001000,0.002000,70.000000,-768.000000,-347.000000,544.000000,156.000000,35.000000,-115.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.438000,0.022000,-1.691000,-0.021000,0.000000,-0.029000,-0.391000,-0.054000,-0.013000,0.000000,0.004000,-0.006000,23.339001,0.619000,45.842999,0
11458,return_positive,0.000000,12.726000,0.000000,0.000000,-0.001000,-0.001000,0.002000,63.000000,-946.000000,-348.000000,535.000000,147.000000,14.000000,-132.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.266000,0.129000,-1.599000,-0.024000,0.000000,-0.010000,-0.507000,-0.031000,0.085000,0.000000,0.007000,-0.001000,23.339001,0.619000,45.842999,0
11539,return_positive,0.000000,12.436000,-0.001000,-0.002000,-0.002000,-0.001000,0.004000,71.000000,-967.000000,-333.000000,530.000000,140.000000,30.000000,-138.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.314000,0.227000,-1.208000,-0.020000,-0.001000,-0.010000,-0.418000,-0.001000,0.185000,0.000000,0.005000,0.000000,23.377001,0.653000,45.917000,0
11623,return_positive,-0.001000,12.068000,-0.002000,-0.002000,-0.002000,-0.004000,0.001000,68.000000,-827.000000,-343.000000,539.000000,150.000000,50.000000,-139.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.345000,-0.134000,-1.299000,-0.025000,0.001000,-0.036000,-0.434000,-0.038000,0.167000,-0.001000,0.005000,-0.010000,23.377001,0.653000,45.917000,0
11708,return_positive,0.000000,11.667000,-0.002000,-0.001000,-0.001000,-0.002000,0.002000,67.000000,-887.000000,-328.000000,530.000000,139.000000,29.000000,-139.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.223000,0.582000,-0.398000,-0.016000,0.001000,0.043000,-0.444000,0.133000,0.391000,0.000000,0.007000,0.012000,23.334000,0.647000,45.869999,0
11794,return_positive,-0.001000,11.278000,-0.001000,0.000000,-0.002000,-0.004000,0.002000,62.000000,-761.000000,-312.000000,535.000000,147.000000,37.000000,-142.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.560000,-0.306000,-1.194000,-0.028000,0.001000,-0.020000,-0.413000,0.013000,0.158000,0.000000,0.005000,-0.003000,23.334000,0.647000,45.869999,0
11883,return_positive,-0.001000,10.890000,-0.001000,-0.002000,-0.001000,-0.001000,0.002000,68.000000,-719.000000,-299.000000,548.000000,140.000000,36.000000,-150.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.249000,-0.252000,-1.610000,-0.029000,-0.005000,-0.047000,-0.409000,-0.073000,0.112000,-0.003000,0.004000,-0.008000,23.353001,0.647000,45.859001,0
11963,return_positive,-0.001000,10.522000,-0.004000,-0.001000,-0.001000,-0.004000,0.002000,65.000000,-831.000000,-295.000000,539.000000,145.000000,37.000000,-141.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.360000,0.041000,-1.637000,-0.026000,-0.001000,-0.030000,-0.473000,0.019000,0.147000,0.000000,0.007000,-0.002000,23.353001,0.647000,45.859001,0
12063,return_positive,-0.002000,10.222000,-0.002000,-0.001000,-0.002000,-0.004000,0.002000,68.000000,-654.000000,-267.000000,537.000000,142.000000,41.000000,-137.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.008000,0.626000,-0.317000,-0.018000,0.003000,0.038000,-0.360000,0.137000,0.373000,0.001000,0.006000,0.010000,23.363001,0.637000,45.825001,0
12154,return_positive,-0.001000,10.073000,-0.001000,-0.001000,-0.002000,-0.001000,0.004000,68.000000,-538.000000,-262.000000,538.000000,143.000000,43.000000,-129.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.036000,0.523000,-0.515000,-0.017000,-0.004000,0.033000,-0.342000,0.020000,0.271000,0.000000,0.004000,0.006000,23.363001,0.637000,45.825001,0
12252,return_positive,-0.002000,10.011000,-0.001000,-0.002000,-0.001000,-0.002000,0.005000,61.000000,-633.000000,-273.000000,541.000000,138.000000,49.000000,-159.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.060000,0.194000,-0.758000,-0.023000,-0.001000,0.019000,-0.373000,0.024000,0.228000,-0.001000,0.005000,0.002000,23.357000,0.621000,45.854000,0
12373,move_negative,-0.002000,10.001000,-0.002000,-0.002000,-0.002000,-0.002000,0.001000,56.000000,-686.000000,-263.000000,539.000000,140.000000,60.000000,-150.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.312000,0.476000,-0.299000,-0.019000,-0.006000,0.032000,-0.321000,0.232000,0.454000,0.003000,0.005000,0.013000,23.341000,0.617000,45.821999,0
12455,move_negative,-0.002000,9.971000,-0.004000,-0.001000,-0.001000,-0.002000,0.002000,59.000000,-812.000000,-263.000000,534.000000,144.000000,71.000000,-160.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.308000,-0.378000,-1.576000,-0.028000,0.000000,-0.020000,-0.471000,-0.140000,0.144000,-0.001000,0.006000,-0.003000,23.341000,0.617000,45.821999,0
12545,move_negative,-0.001000,9.839000,-0.002000,-0.001000,-0.002000,-0.004000,0.002000,49.000000,-783.000000,-277.000000,536.000000,141.000000,82.000000,-155.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.371000,0.351000,-1.082000,-0.023000,-0.007000,0.009000,-0.246000,-0.019000,0.176000,-0.002000,0.004000,0.001000,23.341000,0.617000,45.821999,0
12629,move_negative,0.000000,9.602000,-0.004000,-0.002000,-0.002000,-0.001000,0.002000,52.000000,-959.000000,-295.000000,539.000000,131.000000,92.000000,-147.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.258000,0.489000,-0.562000,-0.017000,-0.003000,0.029000,-0.476000,0.026000,0.228000,-0.001000,0.008000,0.003000,23.334000,0.648000,45.879002,0
12714,move_negative,-0.001000,9.291000,-0.001000,-0.001000,-0.004000,-0.001000,0.005000,43.000000,-706.000000,-295.000000,548.000000,140.000000,73.000000,-138.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.026000,0.781000,0.050000,-0.013000,-0.001000,0.037000,-0.322000,0.164000,0.434000,0.002000,0.005000,0.010000,23.334000,0.648000,45.879002,0
12794,move_negative,-0.002000,8.919000,-0.002000,-0.002000,-0.001000,-0.004000,0.004000,52.000000,-678.000000,-285.000000,546.000000,133.000000,71.000000,-141.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.296000,0.462000,-0.842000,-0.013000,0.002000,0.034000,-0.435000,0.067000,0.240000,0.002000,0.005000,0.009000,23.320000,0.640000,45.820000,0
12875,move_negative,-0.001000,8.552000,-0.002000,-0.002000,-0.001000,-0.002000,0.005000,49.000000,-794.000000,-292.000000,544.000000,124.000000,80.000000,-147.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.500000,-0.059000,-1.630000,-0.021000,-0.002000,-0.023000,-0.426000,-0.014000,-0.035000,0.000000,0.004000,-0.009000,23.320000,0.640000,45.820000,0
12987,move_negative,-0.002000,8.062000,0.000000,-0.002000,-0.002000,-0.004000,0.004000,42.000000,-679.000000,-293.000000,544.000000,127.000000,95.000000,-151.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.033000,0.404000,-0.409000,-0.019000,0.000000,0.016000,-0.412000,0.068000,0.360000,0.000000,0.006000,0.006000,23.344000,0.636000,45.862000,0
13069,move_negative,0.000000,7.686000,-0.002000,-0.002000,-0.001000,-0.004000,0.004000,35.000000,-684.000000,-310.000000,532.000000,128.000000,84.000000,-161.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.400000,0.212000,-0.538000,-0.024000,0.002000,0.015000,-0.351000,0.186000,0.317000,0.000000,0.004000,0.004000,23.344000,0.631000,45.798000,0
13158,move_negative,-0.002000,7.369000,-0.002000,-0.002000,-0.001000,-0.004000,0.004000,34.000000,-583.000000,-294.000000,548.000000,128.000000,83.000000,-153.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.308000,-0.048000,-1.517000,-0.026000,0.000000,-0.025000,-0.346000,-0.124000,0.256000,-0.002000,0.004000,-0.005000,23.344000,0.631000,45.798000,0
13237,move_negative,-0.001000,7.156000,-0.002000,-0.001000,-0.002000,-0.002000,0.002000,34.000000,-515.000000,-295.000000,543.000000,136.000000,80.000000,-157.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.311000,-0.067000,-1.515000,-0.025000,-0.005000,-0.032000,-0.437000,-0.099000,0.231000,-0.002000,0.005000,-0.005000,23.344000,0.631000,45.798000,0
13325,move_negative,-0.001000,7.049000,-0.001000,-0.004000,-0.002000,-0.002000,0.001000,43.000000,-612.000000,-291.000000,544.000000,132.000000,94.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.448000,-0.047000,-1.706000,-0.027000,-0.002000,-0.040000,-0.516000,-0.044000,0.154000,-0.002000,0.005000,-0.010000,23.367001,0.629000,45.847000,0
13405,move_negative,-0.001000,7.006000,-0.002000,-0.002000,-0.002000,-0.004000,0.005000,47.000000,-489.000000,-289.000000,542.000000,138.000000,96.000000,-133.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.484000,0.076000,-0.962000,-0.022000,0.004000,-0.004000,-0.306000,0.017000,0.367000,0.000000,0.004000,-0.002000,23.351999,0.595000,45.844002,0
13488,move_negative,-0.001000,6.998000,-0.004000,-0.004000,-0.001000,-0.004000,0.002000,48.000000,-429.000000,-294.000000,555.000000,137.000000,102.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.107000,0.398000,-0.417000,-0.017000,-0.001000,0.026000,-0.312000,0.053000,0.366000,-0.002000,0.003000,0.006000,23.334999,0.614000,45.898998,0
13617,return_negative,-0.002000,7.002000,-0.002000,-0.004000,-0.002000,-0.004000,0.005000,65.000000,123.000000,-296.000000,558.000000,135.000000,95.000000,-146.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.245000,0.025000,-0.910000,-0.022000,0.001000,0.011000,-0.340000,-0.009000,0.205000,0.000000,0.004000,0.003000,23.334999,0.614000,45.898998,0
13699,return_negative,-0.001000,7.095000,-0.002000,-0.004000,-0.002000,-0.004000,0.002000,61.000000,51.000000,-292.000000,556.000000,145.000000,92.000000,-143.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.220000,0.482000,-0.595000,-0.017000,-0.003000,0.035000,-0.178000,0.018000,0.350000,0.000000,0.003000,0.008000,23.311001,0.601000,45.848999,0
13788,return_negative,-0.001000,7.274000,-0.001000,-0.004000,-0.002000,-0.002000,0.002000,60.000000,193.000000,-281.000000,565.000000,144.000000,105.000000,-137.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.352000,0.465000,-0.757000,-0.014000,0.003000,0.009000,-0.448000,-0.012000,0.323000,0.000000,0.005000,0.002000,23.311001,0.601000,45.848999,0
13874,return_negative,-0.002000,7.572000,0.000000,-0.004000,-0.001000,-0.004000,0.002000,58.000000,153.000000,-274.000000,559.000000,149.000000,106.000000,-140.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.074000,0.632000,-0.404000,-0.018000,-0.001000,0.022000,-0.280000,0.102000,0.394000,0.001000,0.003000,0.006000,23.311001,0.601000,45.848999,0
13960,return_negative,-0.002000,7.945000,-0.002000,-0.004000,-0.001000,-0.002000,0.002000,60.000000,162.000000,-278.000000,558.000000,158.000000,107.000000,-148.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.306000,-0.248000,-1.244000,-0.026000,0.000000,-0.036000,-0.476000,-0.026000,-0.034000,0.000000,0.006000,-0.002000,23.341000,0.608000,45.834000,0
14046,return_negative,-0.001000,8.370000,-0.002000,-0.004000,-0.002000,-0.002000,0.004000,61.000000,111.000000,-261.000000,562.000000,152.000000,121.000000,-135.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.009000,0.173000,-0.882000,-0.022000,-0.002000,0.001000,-0.421000,0.006000,0.248000,0.000000,0.005000,0.000000,23.341000,0.608000,45.834000,0
14129,return_negative,0.000000,8.732000,-0.002000,-0.004000,-0.001000,-0.001000,0.002000,62.000000,134.000000,-257.000000,561.000000,160.000000,120.000000,-161.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.013000,0.412000,-0.211000,-0.019000,-0.001000,0.023000,-0.250000,0.114000,0.356000,0.000000,0.004000,0.004000,23.355000,0.600000,45.869999,0
14210,return_negative,0.000000,9.077000,-0.004000,-0.002000,-0.001000,-0.001000,0.002000,77.000000,80.000000,-257.000000,576.000000,154.000000,107.000000,-144.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.290000,0.832000,-0.338000,-0.012000,-0.004000,0.040000,-0.220000,0.145000,0.386000,0.000000,0.004000,0.012000,23.355000,0.600000,45.869999,0
14294,return_negative,0.000000,9.455000,0.000000,-0.001000,-0.001000,-0.002000,0.004000,78.000000,141.000000,-249.000000,577.000000,159.000000,121.000000,-142.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.190000,0.496000,-0.312000,-0.017000,0.003000,0.023000,-0.329000,0.023000,0.400000,0.000000,0.005000,0.007000,23.334999,0.613000,45.863998,0
14373,return_negative,-0.001000,9.714000,0.000000,-0.002000,-0.001000,-0.002000,0.001000,78.000000,-30.000000,-238.000000,574.000000,156.000000,109.000000,-152.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.108000,0.529000,-0.566000,-0.017000,0.000000,0.043000,-0.261000,0.149000,0.299000,0.001000,0.004000,0.006000,23.334999,0.613000,45.863998,0
14455,return_negative,-0.001000,9.902000,-0.002000,-0.002000,-0.001000,-0.002000,0.004000,83.000000,1.000000,-247.000000,568.000000,155.000000,104.000000,-142.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.000000,0.463000,-0.768000,-0.016000,-0.002000,0.012000,-0.370000,0.077000,0.253000,0.000000,0.003000,0.003000,23.334999,0.613000,45.863998,0
14553,return_negative,-0.002000,9.996000,0.000000,-0.001000,-0.001000,-0.002000,0.002000,76.000000,-60.000000,-241.000000,565.000000,153.000000,114.000000,-140.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.223000,0.463000,-1.109000,-0.018000,0.001000,0.000000,-0.451000,0.014000,0.307000,-0.002000,0.006000,0.003000,23.333000,0.598000,45.910000,0
14638,return_negative,-0.001000,10.007000,-0.004000,-0.001000,-0.001000,-0.001000,0.002000,67.000000,-375.000000,-239.000000,573.000000,155.000000,115.000000,-162.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.374000,-0.278000,-1.439000,-0.030000,0.000000,-0.029000,-0.338000,-0.155000,0.054000,-0.002000,0.003000,-0.007000,23.333000,0.598000,45.910000,0
14763,final_static,-0.001000,10.001000,-0.001000,-0.001000,-0.002000,-0.002000,0.002000,63.000000,-465.000000,-221.000000,575.000000,155.000000,119.000000,-152.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.452000,-0.233000,-1.837000,-0.031000,0.000000,-0.033000,-0.380000,-0.020000,0.013000,-0.001000,0.003000,-0.008000,23.358999,0.602000,45.848999,0
14845,final_static,-0.002000,10.003000,-0.001000,-0.002000,-0.001000,-0.001000,0.002000,81.000000,-470.000000,-220.000000,582.000000,155.000000,105.000000,-145.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.352000,0.093000,-1.538000,-0.024000,-0.002000,-0.034000,-0.396000,0.007000,0.139000,0.000000,0.005000,-0.009000,23.358999,0.602000,45.848999,0
14928,final_static,-0.002000,10.000000,-0.001000,-0.002000,-0.001000,0.001000,0.002000,89.000000,-462.000000,-224.000000,571.000000,152.000000,117.000000,-166.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.061000,0.092000,-0.684000,-0.022000,0.000000,0.010000,-0.379000,-0.112000,0.317000,0.000000,0.006000,0.000000,23.319000,0.610000,45.856998,0
15010,final_static,0.001000,10.003000,-0.004000,-0.002000,-0.001000,0.000000,0.004000,90.000000,-466.000000,-210.000000,567.000000,155.000000,112.000000,-162.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.451000,0.155000,-1.161000,-0.020000,0.003000,-0.011000,-0.372000,-0.082000,-0.017000,-0.001000,0.004000,-0.005000,23.319000,0.610000,45.856998,0
15090,final_static,-0.001000,10.000000,-0.001000,-0.002000,-0.001000,0.000000,0.002000,78.000000,-467.000000,-206.000000,574.000000,152.000000,104.000000,-145.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.139000,0.481000,-0.761000,-0.021000,-0.005000,0.022000,-0.189000,0.082000,0.343000,0.000000,0.002000,0.004000,23.315001,0.601000,45.859001,0
15169,final_static,-0.002000,10.000000,0.000000,-0.001000,-0.001000,0.000000,0.004000,78.000000,-461.000000,-204.000000,580.000000,158.000000,95.000000,-152.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.085000,0.439000,-0.601000,-0.020000,0.001000,0.038000,-0.380000,-0.013000,0.402000,-0.002000,0.005000,0.002000,23.315001,0.601000,45.859001,0
15249,final_static,-0.002000,10.001000,-0.004000,-0.001000,-0.002000,0.000000,0.004000,61.000000,-453.000000,-180.000000,570.000000,154.000000,124.000000,-150.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.019000,0.254000,-0.773000,-0.020000,0.000000,0.012000,-0.301000,-0.117000,0.303000,-0.002000,0.005000,0.002000,23.353001,0.614000,45.841999,0
15334,final_static,-0.002000,10.001000,-0.002000,-0.002000,0.000000,0.000000,0.002000,53.000000,-466.000000,-198.000000,575.000000,161.000000,109.000000,-146.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.124000,0.499000,-0.420000,-0.017000,0.000000,0.028000,-0.423000,0.063000,0.311000,0.000000,0.005000,0.006000,23.353001,0.614000,45.841999,0
15413,final_static,-0.001000,9.998000,-0.001000,-0.001000,-0.001000,-0.001000,0.004000,54.000000,-459.000000,-168.000000,585.000000,167.000000,101.000000,-117.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.034000,0.178000,-1.150000,-0.020000,-0.006000,-0.002000,-0.326000,0.049000,0.398000,0.000000,0.005000,0.006000,23.334999,0.610000,45.882000,0
15499,final_static,-0.002000,10.000000,-0.002000,-0.001000,-0.001000,0.000000,0.004000,58.000000,-471.000000,-154.000000,576.000000,167.000000,111.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.174000,-0.044000,-1.265000,-0.025000,-0.004000,-0.011000,-0.338000,-0.090000,0.030000,-0.001000,0.003000,-0.008000,23.334999,0.610000,45.882000,0
15579,final_static,-0.001000,10.003000,0.000000,-0.001000,-0.002000,0.000000,0.004000,65.000000,-470.000000,-148.000000,573.000000,160.000000,109.000000,-138.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.272000,-0.001000,-1.465000,-0.025000,-0.001000,-0.034000,-0.324000,-0.035000,0.117000,0.000000,0.004000,-0.007000,23.334999,0.610000,45.882000,0
15666,final_static,-0.004000,10.000000,-0.005000,0.000000,-0.001000,0.000000,0.004000,67.000000,-470.000000,-137.000000,575.000000,164.000000,116.000000,-149.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.036000,0.318000,-0.865000,-0.022000,0.001000,0.015000,-0.446000,0.073000,0.204000,0.000000,0.006000,0.001000,23.358999,0.627000,45.861000,0
15752,final_static,-0.001000,10.000000,-0.001000,-0.001000,-0.001000,-0.001000,0.001000,75.000000,-453.000000,-139.000000,578.000000,165.000000,103.000000,-147.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.553000,0.020000,-1.524000,-0.022000,-0.004000,-0.024000,-0.328000,-0.038000,0.243000,0.000000,0.003000,-0.005000,23.358999,0.627000,45.861000,0
15839,final_static,-0.001000,10.000000,-0.001000,-0.001000,-0.001000,-0.002000,0.004000,73.000000,-462.000000,-132.000000,570.000000,164.000000,108.000000,-139.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.210000,0.212000,-1.254000,-0.022000,-0.002000,0.000000,-0.415000,0.074000,0.189000,0.000000,0.005000,0.001000,23.341999,0.612000,45.863998,0
15921,final_static,-0.001000,9.997000,-0.002000,-0.002000,-0.001000,-0.001000,0.002000,66.000000,-464.000000,-128.000000,557.000000,168.000000,114.000000,-143.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.260000,-0.205000,-1.560000,-0.024000,0.000000,-0.021000,-0.518000,-0.047000,0.143000,0.000000,0.007000,-0.005000,23.341999,0.612000,45.863998,0
16005,final_static,-0.001000,9.998000,-0.001000,-0.001000,-0.001000,0.000000,0.004000,68.000000,-449.000000,-122.000000,564.000000,171.000000,98.000000,-136.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.228000,-0.255000,-1.638000,-0.027000,-0.002000,-0.040000,-0.383000,-0.040000,0.131000,-0.001000,0.004000,-0.008000,23.356001,0.604000,45.823002,0
16096,final_static,-0.002000,10.001000,-0.002000,-0.002000,-0.001000,0.000000,0.004000,65.000000,-457.000000,-134.000000,564.000000,170.000000,114.000000,-138.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.131000,0.599000,-0.094000,-0.015000,0.000000,0.034000,-0.364000,0.125000,0.475000,0.000000,0.005000,0.008000,23.356001,0.604000,45.823002,0
16178,final_static,-0.004000,10.000000,-0.001000,-0.002000,-0.001000,-0.001000,0.004000,75.000000,-451.000000,-128.000000,565.000000,166.000000,102.000000,-151.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.382000,0.135000,-1.328000,-0.021000,0.000000,-0.020000,-0.463000,0.031000,0.221000,0.000000,0.007000,-0.002000,23.353001,0.616000,45.842999,0
16261,final_static,-0.002000,9.998000,-0.002000,-0.001000,-0.001000,0.000000,0.002000,79.000000,-447.000000,-141.000000,563.000000,168.000000,109.000000,-151.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.187000,0.145000,-1.163000,-0.022000,-0.005000,-0.001000,-0.355000,0.026000,0.216000,0.000000,0.004000,0.000000,23.353001,0.616000,45.842999,0
16340,final_static,-0.001000,10.000000,-0.001000,-0.001000,-0.002000,0.000000,0.005000,91.000000,-442.000000,-139.000000,570.000000,168.000000,107.000000,-158.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.245000,0.135000,-1.179000,-0.020000,-0.004000,0.002000,-0.432000,-0.079000,0.180000,-0.002000,0.005000,0.002000,23.344999,0.628000,45.849998,0
16428,final_static,-0.002000,10.000000,-0.004000,-0.002000,-0.002000,-0.001000,0.004000,96.000000,-437.000000,-126.000000,565.000000,168.000000,88.000000,-137.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.315000,-0.002000,-1.625000,-0.023000,0.001000,-0.026000,-0.416000,0.021000,0.193000,0.000000,0.006000,0.000000,23.354000,0.613000,45.880001,0
16518,final_static,-0.001000,9.998000,-0.001000,-0.001000,-0.001000,-0.001000,0.002000,91.000000,-415.000000,-95.000000,567.000000,167.000000,97.000000,-157.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.555000,-0.081000,-1.423000,-0.023000,0.005000,-0.013000,-0.552000,0.014000,0.146000,0.000000,0.009000,0.001000,23.354000,0.613000,45.880001,0
16604,final_static,-0.002000,9.997000,-0.001000,-0.002000,-0.001000,-0.001000,0.002000,90.000000,-413.000000,-103.000000,568.000000,168.000000,96.000000,-149.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.512000,-0.151000,-1.560000,-0.026000,-0.001000,-0.026000,-0.384000,-0.026000,0.258000,-0.001000,0.004000,-0.005000,23.339001,0.609000,45.869999,0
16683,final_static,0.000000,10.001000,-0.001000,-0.001000,-0.001000,0.000000,0.004000,92.000000,-427.000000,-109.000000,570.000000,170.000000,98.000000,-156.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.028000,0.450000,-0.675000,-0.017000,-0.002000,0.026000,-0.338000,0.112000,0.251000,0.001000,0.005000,0.004000,23.325001,0.611000,45.888000,0
16773,final_static,-0.001000,10.000000,-0.001000,-0.002000,-0.001000,-0.001000,0.004000,90.000000,-417.000000,-134.000000,563.000000,165.000000,99.000000,-134.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.727000,-0.183000,-1.768000,-0.028000,0.003000,-0.029000,-0.381000,0.032000,0.010000,-0.001000,0.003000,-0.003000,23.343000,0.603000,45.910000,0
16865,final_static,0.000000,10.000000,-0.002000,-0.001000,-0.001000,-0.002000,0.002000,90.000000,-421.000000,-105.000000,575.000000,165.000000,93.000000,-140.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.123000,1.073000,-0.378000,-0.007000,-0.001000,0.032000,-0.315000,0.194000,0.366000,0.002000,0.005000,0.006000,23.343000,0.603000,45.910000,0
16959,final_static,-0.002000,10.000000,-0.002000,-0.002000,-0.001000,0.000000,0.001000,86.000000,-418.000000,-78.000000,561.000000,170.000000,105.000000,-134.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.007000,0.219000,-0.730000,-0.022000,-0.002000,0.018000,-0.368000,0.067000,0.270000,0.000000,0.005000,0.006000,23.356001,0.607000,45.862000,0
17038,final_static,0.000000,9.998000,-0.004000,-0.001000,-0.001000,-0.001000,0.001000,97.000000,-413.000000,-93.000000,568.000000,167.000000,101.000000,-135.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.690000,-0.019000,-1.545000,-0.024000,0.001000,-0.034000,-0.414000,-0.035000,0.126000,0.000000,0.003000,-0.006000,23.330999,0.613000,45.806999,0
17128,final_static,-0.002000,10.000000,-0.002000,-0.002000,-0.001000,-0.001000,0.004000,88.000000,-412.000000,-109.000000,575.000000,171.000000,117.000000,-145.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.261000,0.291000,-1.278000,-0.020000,-0.005000,-0.006000,-0.306000,0.115000,0.301000,0.000000,0.002000,0.008000,23.330999,0.613000,45.806999,0
17224,final_static,-0.001000,10.001000,-0.001000,-0.004000,-0.001000,-0.001000,0.002000,93.000000,-408.000000,-95.000000,573.000000,171.000000,94.000000,-147.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.528000,0.059000,-1.718000,-0.022000,0.002000,-0.030000,-0.422000,-0.043000,0.175000,0.000000,0.005000,-0.003000,23.337999,0.610000,45.824001,0
17303,final_static,0.000000,9.998000,-0.001000,-0.001000,-0.001000,0.001000,0.004000,109.000000,-400.000000,-82.000000,569.000000,170.000000,108.000000,-149.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.172000,0.000000,-0.776000,-0.024000,-0.002000,0.013000,-0.352000,0.069000,0.371000,0.000000,0.003000,0.004000,23.330000,0.611000,45.823002,0
17393,final_static,-0.001000,10.001000,-0.004000,-0.002000,-0.001000,-0.001000,0.004000,98.000000,-400.000000,-66.000000,558.000000,172.000000,118.000000,-146.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.183000,0.351000,-0.080000,-0.017000,-0.002000,0.036000,-0.306000,0.069000,0.340000,0.001000,0.004000,0.002000,23.330000,0.611000,45.823002,0
17474,final_static,-0.001000,9.998000,-0.004000,-0.002000,-0.001000,-0.001000,0.004000,106.000000,-400.000000,-65.000000,566.000000,172.000000,102.000000,-147.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,0.289000,0.553000,-0.469000,-0.016000,-0.003000,0.022000,-0.236000,0.021000,0.297000,0.000000,0.004000,0.002000,23.350000,0.607000,45.889000,0
17558,final_static,0.000000,10.000000,-0.004000,-0.001000,-0.001000,-0.001000,0.002000,100.000000,-400.000000,-70.000000,553.000000,172.000000,91.000000,-143.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,30.000000,31.000000,31.000000,31.000000,33.000000,-0.484000,-0.183000,-1.162000,-0.025000,0.000000,-0.027000,-0.458000,-0.097000,0.156000,-0.001000,0.006000,-0.005000,23.350000,0.607000,45.889000,0
# 睿尔曼机械臂力/力矩与关节指标测试报告
| 项目 | 值 |
| --- | --- |
| 测试时间 | `20260611_204916` |
| 控制器地址 | `192.168.1.18:8080` |
| API 版本 | `v1.1.5` |
| 产品版本 | `RM75-6FB` |
| 软件控制器版本 | `` |
| 控制器代际 | `3` |
| 自由度 | `7` |
| 力传感器类型 | `Integrated 6D force` |
| 原始 CSV | `/home/mashiro/project/linkerhand-cpp-sdk/reports/realman_metrics_20260611_204916.csv` |
## 测试范围
- 已测试:六维力/力矩传感器读数、静态噪声/漂移、关节电流/电压/温度、控制器电压/电流/温度、低速小幅关节运动跟踪误差。
- 未测试:接触式力位混合控制闭环精度、外部负载下输出力矩精度、碰撞阈值。这些需要固定工装、标定砝码/力传感器和明确接触方向。
- SDK 当前暴露的是关节电流和末端六维力/力矩数据,没有裸关节力矩指令接口;因此本文中的关节侧“力矩相关”指标以电流作为负载代理量。
## 采样概况
| Phase | 样本数 |
| --- | ---: |
| `static_baseline` | 119 |
| `move_positive` | 12 |
| `return_positive` | 13 |
| `move_negative` | 14 |
| `return_negative` | 13 |
| `final_static` | 34 |
| **合计** | **205** |
## 静态六维力/力矩噪声
单位:`Fx/Fy/Fz = N`,`Mx/My/Mz = Nm`。统计对象为系统外受力 `zero_force_data`。
| 轴 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| Fx | 153 | -0.4068 | 0.0763 | -0.6240 | -0.1520 | 0.4720 | N |
| Fy | 153 | 0.0061 | 0.0888 | -0.2260 | 0.3190 | 0.5450 | N |
| Fz | 153 | 0.2387 | 0.1253 | -0.1070 | 0.5350 | 0.6420 | N |
| Mx | 153 | -0.0003 | 0.0011 | -0.0040 | 0.0030 | 0.0070 | Nm |
| My | 153 | 0.0049 | 0.0012 | 0.0020 | 0.0090 | 0.0070 | Nm |
| Mz | 153 | 0.0002 | 0.0060 | -0.0120 | 0.0140 | 0.0260 | Nm |
## 静态关节电流
| 关节 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| J1 | 153 | 47.6601 | 25.3725 | -3.0000 | 109.0000 | 112.0000 | mA |
| J2 | 153 | -405.4641 | 34.7000 | -471.0000 | -341.0000 | 130.0000 | mA |
| J3 | 153 | -153.7059 | 45.7174 | -242.0000 | -65.0000 | 177.0000 | mA |
| J4 | 153 | 575.2026 | 10.6835 | 542.0000 | 604.0000 | 62.0000 | mA |
| J5 | 153 | 5.5556 | 89.8925 | -103.0000 | 172.0000 | 275.0000 | mA |
| J6 | 153 | 77.1961 | 74.2631 | -215.0000 | 124.0000 | 339.0000 | mA |
| J7 | 153 | -133.1961 | 10.9725 | -166.0000 | -102.0000 | 64.0000 | mA |
## 运动过程关节电流
| 关节 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| J1 | 52 | 54.0577 | 15.0612 | 22.0000 | 83.0000 | 61.0000 | mA |
| J2 | 52 | -335.4231 | 410.9630 | -967.0000 | 219.0000 | 1186.0000 | mA |
| J3 | 52 | -312.2692 | 51.8225 | -414.0000 | -238.0000 | 176.0000 | mA |
| J4 | 52 | 550.8654 | 12.6693 | 530.0000 | 577.0000 | 47.0000 | mA |
| J5 | 52 | 124.9038 | 39.7794 | 6.0000 | 160.0000 | 154.0000 | mA |
| J6 | 52 | 44.1154 | 72.3799 | -172.0000 | 121.0000 | 293.0000 | mA |
| J7 | 52 | -138.7500 | 12.9280 | -162.0000 | -115.0000 | 47.0000 | mA |
## 低速小幅运动跟踪
| 步骤 | 持续时间 s | 到位最大关节误差 deg |
| --- | ---: | ---: |
| J2 +delta | 1.154 | 0.0040 |
| return from +delta | 1.145 | 0.0040 |
| J2 -delta | 1.177 | 0.0030 |
| return from -delta | 1.147 | 0.0070 |
运动测试结果:`通过`。
## 控制器状态
| 指标 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| controller_voltage | 205 | 23.3421 | 0.0165 | 23.2990 | 23.3810 | 0.0820 | V |
| controller_current | 205 | 0.6110 | 0.0118 | 0.5850 | 0.6530 | 0.0680 | A |
| controller_temperature | 205 | 45.8516 | 0.0355 | 45.7430 | 45.9260 | 0.1830 | C |
## 接口失败计数
| 接口 | 失败次数 |
| --- | ---: |
| rm_get_current_arm_state | 0 |
| rm_get_current_joint_current | 0 |
| rm_get_current_joint_voltage | 0 |
| rm_get_current_joint_temperature | 0 |
| rm_get_force_data | 0 |
| rm_get_controller_state | 0 |
## 结论
- 本次测试可以评估静态六维力/力矩读数稳定性、关节电流负载变化、基础运动到位误差和控制器供电状态。
- 若要测试真实接触力控或力矩输出能力,需要增加外部测力设备、刚性固定治具、接触方向限位和急停监护,再启用 `rm_set_force_position` 或 `rm_force_position_move_*`
elapsed_ms,phase,joint1_deg,joint2_deg,joint3_deg,joint4_deg,joint5_deg,joint6_deg,joint7_deg,joint1_current_mA,joint2_current_mA,joint3_current_mA,joint4_current_mA,joint5_current_mA,joint6_current_mA,joint7_current_mA,joint1_voltage_V,joint2_voltage_V,joint3_voltage_V,joint4_voltage_V,joint5_voltage_V,joint6_voltage_V,joint7_voltage_V,joint1_temperature_C,joint2_temperature_C,joint3_temperature_C,joint4_temperature_C,joint5_temperature_C,joint6_temperature_C,joint7_temperature_C,raw_Fx,raw_Fy,raw_Fz,raw_Mx,raw_My,raw_Mz,zero_Fx,zero_Fy,zero_Fz,zero_Mx,zero_My,zero_Mz,controller_voltage_V,controller_current_A,controller_temperature_C,controller_err
0,static_baseline,-0.005000,10.000000,0.000000,-0.002000,-0.001000,0.000000,0.002000,4.000000,-436.000000,-138.000000,-413.000000,-6.000000,-124.000000,-29.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.029000,0.509000,-1.088000,-0.027000,0.000000,-0.016000,-0.288000,0.284000,0.274000,-0.005000,0.006000,-0.007000,23.360001,0.626000,53.051998,0
94,static_baseline,-0.002000,9.998000,-0.004000,-0.001000,-0.001000,-0.002000,0.002000,1.000000,-452.000000,-140.000000,-391.000000,0.000000,-127.000000,-35.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.284000,0.293000,-1.243000,-0.027000,-0.003000,-0.033000,-0.164000,0.322000,0.312000,-0.004000,0.003000,-0.005000,23.360001,0.626000,53.051998,0
180,static_baseline,-0.002000,9.998000,-0.001000,-0.001000,-0.001000,-0.001000,0.000000,3.000000,-449.000000,-143.000000,-394.000000,0.000000,-129.000000,-28.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.252000,0.180000,-1.382000,-0.031000,-0.007000,-0.018000,-0.081000,0.383000,0.289000,-0.003000,0.003000,-0.004000,23.360001,0.582000,53.087002,0
279,static_baseline,-0.005000,10.001000,0.000000,-0.002000,-0.001000,-0.001000,0.001000,0.000000,-444.000000,-137.000000,-393.000000,-1.000000,-127.000000,-42.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.414000,1.130000,-0.420000,-0.012000,-0.005000,0.031000,-0.096000,0.497000,0.330000,0.000000,0.003000,0.003000,23.360001,0.582000,53.087002,0
363,static_baseline,-0.002000,10.000000,-0.002000,0.000000,-0.001000,-0.001000,0.001000,-13.000000,-454.000000,-141.000000,-377.000000,0.000000,-132.000000,-42.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.110000,0.561000,-0.573000,-0.027000,-0.002000,0.013000,-0.075000,0.323000,0.310000,-0.003000,0.003000,0.004000,23.357000,0.622000,53.132999,0
443,static_baseline,-0.002000,10.001000,0.001000,-0.002000,-0.001000,0.000000,0.001000,-19.000000,-441.000000,-130.000000,-397.000000,0.000000,-129.000000,-34.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.090000,0.821000,-0.503000,-0.021000,0.000000,0.014000,-0.127000,0.552000,0.471000,0.000000,0.005000,0.001000,23.357000,0.622000,53.132999,0
523,static_baseline,-0.004000,10.000000,-0.002000,-0.002000,-0.001000,-0.001000,0.000000,-31.000000,-437.000000,-129.000000,-381.000000,2.000000,-127.000000,-42.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.032000,0.746000,-0.382000,-0.023000,0.000000,0.015000,-0.094000,0.459000,0.350000,0.000000,0.003000,0.003000,23.357000,0.622000,53.132999,0
603,static_baseline,-0.002000,10.000000,0.001000,-0.001000,-0.001000,-0.002000,0.002000,-33.000000,-448.000000,-111.000000,-388.000000,2.000000,-129.000000,-41.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.188000,0.801000,-0.818000,-0.024000,-0.004000,0.008000,-0.155000,0.300000,0.308000,-0.004000,0.005000,-0.006000,23.358999,0.612000,53.048000,0
687,static_baseline,-0.002000,10.000000,-0.002000,0.000000,-0.001000,-0.001000,-0.001000,-29.000000,-453.000000,-112.000000,-379.000000,2.000000,-130.000000,-38.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.167000,0.874000,-0.429000,-0.019000,-0.003000,0.025000,-0.091000,0.525000,0.626000,0.000000,0.004000,0.013000,23.341000,0.617000,53.041000,0
767,static_baseline,-0.001000,10.000000,-0.001000,-0.001000,-0.001000,0.000000,0.000000,-24.000000,-462.000000,-123.000000,-377.000000,0.000000,-129.000000,-36.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.157000,0.606000,-0.873000,-0.020000,-0.005000,-0.001000,-0.458000,0.281000,0.190000,-0.002000,0.007000,-0.010000,23.341000,0.617000,53.041000,0
850,static_baseline,-0.002000,10.000000,-0.001000,-0.001000,-0.002000,-0.001000,0.001000,-15.000000,-450.000000,-128.000000,-379.000000,0.000000,-130.000000,-47.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.271000,0.238000,-1.109000,-0.026000,0.002000,-0.018000,-0.223000,0.241000,0.287000,-0.005000,0.007000,-0.004000,23.371000,0.605000,53.064999,0
934,static_baseline,-0.001000,9.998000,-0.001000,-0.002000,-0.001000,-0.002000,0.000000,-15.000000,-454.000000,-119.000000,-390.000000,2.000000,-131.000000,-43.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.071000,0.215000,-1.266000,-0.030000,-0.003000,-0.029000,-0.148000,0.121000,0.081000,-0.006000,0.003000,-0.012000,23.371000,0.605000,53.064999,0
1014,static_baseline,-0.002000,9.998000,0.000000,-0.001000,-0.001000,-0.001000,0.001000,-27.000000,-448.000000,-138.000000,-379.000000,-2.000000,-129.000000,-42.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.140000,0.193000,-1.397000,-0.027000,0.000000,-0.024000,-0.053000,0.320000,0.185000,-0.002000,0.002000,-0.007000,23.358000,0.597000,52.994999,0
1100,static_baseline,-0.002000,9.998000,0.000000,-0.002000,-0.001000,0.001000,0.001000,-24.000000,-463.000000,-131.000000,-385.000000,1.000000,-128.000000,-45.000000,23.000000,22.000000,23.000000,23.000000,23.000000,22.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.398000,0.783000,-0.221000,-0.017000,-0.002000,0.037000,-0.005000,0.396000,0.371000,0.000000,0.004000,0.005000,23.350000,0.612000,53.083000,0
1205,static_baseline,-0.001000,9.996000,0.001000,-0.001000,-0.001000,0.000000,0.001000,-9.000000,-463.000000,-142.000000,-390.000000,-4.000000,-130.000000,-45.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.350000,0.755000,-0.092000,-0.020000,-0.002000,0.039000,-0.076000,0.424000,0.662000,0.000000,0.004000,0.005000,23.350000,0.612000,53.083000,0
1289,static_baseline,-0.002000,9.998000,-0.001000,-0.001000,-0.001000,-0.002000,0.001000,-6.000000,-447.000000,-148.000000,-387.000000,-7.000000,-131.000000,-50.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.175000,0.543000,-0.902000,-0.022000,-0.003000,-0.009000,-0.088000,0.361000,0.259000,-0.001000,0.004000,-0.002000,23.353001,0.624000,52.994999,0
1369,static_baseline,-0.004000,10.001000,0.000000,-0.001000,-0.001000,-0.001000,0.002000,-3.000000,-438.000000,-115.000000,-395.000000,-1.000000,-133.000000,-53.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.349000,0.073000,-1.587000,-0.027000,0.001000,-0.036000,-0.268000,0.268000,0.150000,-0.003000,0.006000,-0.010000,23.364000,0.609000,53.070999,0
1459,static_baseline,-0.004000,9.998000,-0.002000,-0.001000,-0.002000,-0.002000,0.000000,7.000000,-438.000000,-137.000000,-393.000000,4.000000,-133.000000,-41.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.037000,0.638000,-0.447000,-0.023000,0.000000,0.014000,-0.198000,0.383000,0.294000,-0.002000,0.005000,-0.003000,23.368999,0.614000,53.012001,0
1547,static_baseline,-0.002000,10.000000,-0.001000,-0.001000,-0.001000,-0.001000,0.001000,-4.000000,-447.000000,-133.000000,-394.000000,5.000000,-139.000000,-24.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.385000,0.435000,-0.608000,-0.027000,-0.005000,0.013000,-0.041000,0.358000,0.263000,-0.002000,0.003000,0.000000,23.368999,0.614000,53.012001,0
1630,static_baseline,-0.002000,9.998000,0.000000,-0.001000,-0.001000,-0.001000,0.000000,-6.000000,-449.000000,-132.000000,-398.000000,3.000000,-136.000000,-40.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.099000,0.480000,-1.389000,-0.026000,-0.003000,-0.028000,-0.309000,0.375000,0.232000,-0.001000,0.005000,-0.008000,23.367001,0.615000,53.124001,0
1716,static_baseline,-0.002000,10.000000,-0.001000,-0.002000,-0.001000,-0.001000,0.000000,-11.000000,-459.000000,-138.000000,-407.000000,-2.000000,-138.000000,-46.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.469000,0.828000,-0.345000,-0.021000,0.001000,0.029000,-0.134000,0.385000,0.474000,-0.002000,0.005000,0.004000,23.367001,0.615000,53.124001,0
1809,static_baseline,0.000000,9.998000,-0.001000,-0.002000,-0.001000,-0.002000,0.000000,-25.000000,-461.000000,-135.000000,-415.000000,0.000000,-140.000000,-45.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.005000,0.968000,-0.181000,-0.017000,0.000000,0.038000,-0.150000,0.425000,0.397000,-0.001000,0.004000,0.007000,23.329000,0.604000,53.057999,0
1889,static_baseline,-0.004000,9.998000,0.000000,0.000000,-0.001000,-0.001000,0.001000,-37.000000,-463.000000,-152.000000,-417.000000,-2.000000,-137.000000,-46.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.313000,0.279000,-1.327000,-0.024000,-0.004000,-0.014000,-0.038000,0.361000,0.085000,-0.001000,0.004000,0.000000,23.384001,0.609000,53.056999,0
1979,static_baseline,-0.002000,10.000000,-0.001000,-0.001000,-0.001000,0.000000,0.001000,-28.000000,-467.000000,-142.000000,-396.000000,-5.000000,-144.000000,-26.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.129000,0.882000,-0.202000,-0.017000,-0.001000,0.039000,-0.065000,0.390000,0.448000,0.000000,0.004000,0.006000,23.384001,0.609000,53.056999,0
2068,static_baseline,-0.001000,10.000000,-0.001000,-0.002000,-0.001000,-0.001000,0.002000,-28.000000,-446.000000,-121.000000,-420.000000,-3.000000,-136.000000,-30.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.530000,0.269000,-1.345000,-0.028000,0.002000,-0.029000,-0.210000,0.281000,0.122000,-0.004000,0.005000,-0.008000,23.346001,0.617000,53.106998,0
2156,static_baseline,-0.002000,10.001000,0.001000,-0.006000,-0.001000,-0.001000,0.001000,-21.000000,-452.000000,-130.000000,-413.000000,0.000000,-137.000000,-39.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.473000,0.473000,-1.422000,-0.026000,0.001000,-0.029000,-0.279000,0.356000,0.076000,-0.002000,0.005000,-0.013000,23.363001,0.621000,53.062000,0
2238,static_baseline,-0.004000,10.000000,-0.001000,-0.001000,-0.001000,-0.002000,0.000000,-14.000000,-459.000000,-130.000000,-410.000000,-1.000000,-139.000000,-25.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.125000,0.324000,-0.956000,-0.022000,-0.001000,-0.028000,-0.192000,0.443000,0.326000,-0.001000,0.005000,-0.007000,23.363001,0.621000,53.062000,0
2319,static_baseline,-0.004000,9.998000,-0.001000,-0.002000,-0.001000,0.001000,0.001000,-31.000000,-441.000000,-160.000000,-419.000000,-7.000000,-140.000000,-29.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.109000,0.735000,-0.501000,-0.019000,0.000000,0.006000,-0.135000,0.408000,0.416000,-0.001000,0.005000,0.000000,23.348000,0.622000,53.070999,0
2404,static_baseline,-0.002000,9.998000,-0.004000,0.000000,-0.001000,-0.001000,0.001000,-21.000000,-437.000000,-185.000000,-409.000000,-2.000000,-138.000000,-28.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.195000,0.641000,-0.422000,-0.024000,0.000000,0.014000,-0.167000,0.446000,0.346000,-0.002000,0.004000,-0.002000,23.351999,0.617000,53.070000,0
2490,static_baseline,-0.004000,10.001000,0.000000,-0.002000,-0.001000,-0.002000,0.001000,-24.000000,-432.000000,-166.000000,-393.000000,0.000000,-141.000000,-25.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.445000,0.467000,-1.458000,-0.025000,0.004000,-0.026000,-0.268000,0.413000,0.137000,0.000000,0.006000,-0.006000,23.351999,0.617000,53.070000,0
2578,static_baseline,-0.002000,9.998000,-0.001000,-0.004000,-0.001000,0.000000,-0.001000,-31.000000,-422.000000,-157.000000,-391.000000,0.000000,-140.000000,-36.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.046000,0.448000,-0.670000,-0.026000,0.000000,0.010000,-0.057000,0.243000,0.382000,-0.005000,0.003000,0.000000,23.353001,0.612000,53.034000,0
2668,static_baseline,-0.004000,10.001000,-0.001000,-0.001000,-0.001000,-0.001000,0.000000,-35.000000,-441.000000,-179.000000,-401.000000,3.000000,-140.000000,-35.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.270000,0.542000,-1.039000,-0.020000,-0.006000,-0.014000,-0.079000,0.337000,0.251000,-0.002000,0.003000,-0.003000,23.343000,0.604000,53.084999,0
2754,static_baseline,-0.004000,10.001000,-0.001000,-0.002000,-0.001000,0.001000,0.001000,-33.000000,-421.000000,-190.000000,-400.000000,-1.000000,-142.000000,-24.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.372000,0.150000,-1.361000,-0.028000,0.000000,-0.032000,-0.198000,0.356000,0.054000,-0.003000,0.004000,-0.009000,23.343000,0.604000,53.084999,0
2836,static_baseline,-0.002000,10.000000,-0.001000,0.000000,-0.001000,-0.001000,0.001000,-28.000000,-404.000000,-170.000000,-398.000000,2.000000,-140.000000,-26.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.075000,0.297000,-1.023000,-0.026000,-0.001000,-0.017000,-0.067000,0.314000,0.329000,-0.004000,0.004000,-0.003000,23.343000,0.604000,53.084999,0
2935,static_baseline,-0.001000,9.998000,-0.004000,-0.002000,-0.001000,-0.001000,0.002000,-34.000000,-414.000000,-184.000000,-403.000000,9.000000,-140.000000,-24.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.052000,0.268000,-1.503000,-0.025000,-0.003000,-0.032000,-0.180000,0.267000,0.343000,-0.004000,0.003000,-0.008000,23.355000,0.625000,53.049999,0
3019,static_baseline,-0.002000,10.000000,-0.001000,0.000000,-0.001000,0.001000,0.001000,-34.000000,-404.000000,-186.000000,-397.000000,9.000000,-134.000000,-17.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.121000,0.188000,-1.269000,-0.027000,-0.003000,-0.022000,-0.179000,0.366000,0.352000,-0.002000,0.004000,-0.007000,23.355000,0.625000,53.049999,0
3100,static_baseline,-0.001000,9.998000,-0.001000,-0.002000,-0.002000,-0.001000,0.002000,-30.000000,-409.000000,-188.000000,-401.000000,4.000000,-140.000000,-22.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.159000,1.098000,-0.063000,-0.020000,-0.002000,0.037000,-0.122000,0.500000,0.396000,-0.002000,0.004000,0.003000,23.347000,0.614000,53.123001,0
3190,static_baseline,-0.002000,10.001000,0.000000,-0.001000,-0.001000,0.000000,0.000000,-32.000000,-404.000000,-180.000000,-385.000000,1.000000,-143.000000,-27.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.079000,0.815000,-0.195000,-0.016000,0.000000,0.027000,-0.188000,0.435000,0.480000,-0.001000,0.006000,0.004000,23.347000,0.614000,53.123001,0
3268,static_baseline,-0.002000,10.003000,-0.001000,-0.001000,-0.001000,0.000000,0.000000,-33.000000,-384.000000,-184.000000,-394.000000,8.000000,-140.000000,-25.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.541000,0.874000,-0.387000,-0.021000,-0.006000,0.032000,-0.090000,0.436000,0.308000,-0.002000,0.003000,0.004000,23.315001,0.619000,53.047001,0
3350,static_baseline,-0.002000,9.998000,-0.001000,-0.001000,-0.001000,-0.001000,0.001000,-43.000000,-400.000000,-180.000000,-391.000000,4.000000,-140.000000,-23.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.195000,0.922000,-0.329000,-0.021000,0.000000,0.027000,-0.123000,0.409000,0.381000,-0.001000,0.005000,0.004000,23.315001,0.619000,53.047001,0
3438,static_baseline,-0.004000,10.000000,-0.002000,-0.002000,-0.001000,-0.001000,0.001000,-59.000000,-399.000000,-169.000000,-392.000000,3.000000,-142.000000,-22.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.069000,0.444000,-1.322000,-0.025000,-0.001000,-0.024000,-0.086000,0.334000,0.234000,-0.002000,0.004000,-0.004000,23.351000,0.615000,53.095001,0
3527,static_baseline,-0.004000,9.998000,-0.002000,-0.001000,-0.001000,-0.001000,0.002000,-51.000000,-417.000000,-175.000000,-412.000000,8.000000,-142.000000,-8.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.194000,0.361000,-1.219000,-0.023000,-0.002000,-0.016000,-0.318000,0.282000,0.326000,-0.004000,0.005000,-0.006000,23.351000,0.615000,53.095001,0
3619,static_baseline,-0.002000,10.000000,-0.001000,-0.002000,-0.001000,0.000000,0.000000,-58.000000,-422.000000,-170.000000,-392.000000,5.000000,-136.000000,-11.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.517000,0.577000,-0.456000,-0.025000,-0.001000,0.015000,-0.072000,0.454000,0.376000,-0.001000,0.004000,0.001000,23.333000,0.620000,53.098999,0
3709,static_baseline,-0.001000,10.000000,-0.001000,-0.002000,-0.001000,-0.002000,0.001000,-63.000000,-426.000000,-185.000000,-399.000000,9.000000,-141.000000,-17.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.155000,0.691000,-0.657000,-0.024000,-0.001000,0.024000,-0.131000,0.397000,0.356000,-0.002000,0.004000,0.004000,23.333000,0.620000,53.098999,0
3789,static_baseline,-0.001000,9.998000,-0.002000,-0.002000,-0.001000,-0.001000,0.001000,-67.000000,-428.000000,-138.000000,-394.000000,6.000000,-142.000000,-22.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.021000,0.527000,-1.063000,-0.026000,-0.003000,-0.013000,-0.109000,0.431000,0.190000,-0.002000,0.003000,-0.008000,23.372000,0.609000,53.060001,0
3874,static_baseline,-0.002000,10.000000,-0.001000,-0.001000,-0.001000,-0.001000,0.001000,-66.000000,-440.000000,-149.000000,-397.000000,12.000000,-139.000000,-7.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.079000,0.749000,-0.533000,-0.021000,-0.001000,0.014000,-0.070000,0.340000,0.446000,-0.002000,0.003000,0.003000,23.356001,0.622000,53.067001,0
3970,static_baseline,-0.001000,10.000000,-0.001000,-0.002000,-0.001000,0.000000,0.000000,-66.000000,-457.000000,-164.000000,-393.000000,11.000000,-140.000000,-11.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.150000,0.652000,-1.007000,-0.028000,-0.002000,-0.015000,-0.276000,0.301000,0.371000,-0.005000,0.006000,-0.005000,23.356001,0.622000,53.067001,0
4054,static_baseline,-0.002000,9.997000,-0.001000,-0.002000,-0.001000,-0.001000,0.000000,-64.000000,-440.000000,-150.000000,-395.000000,11.000000,-142.000000,-29.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.093000,0.233000,-1.506000,-0.027000,-0.002000,-0.034000,-0.286000,0.319000,0.050000,-0.002000,0.006000,-0.011000,23.354000,0.626000,53.034000,0
4134,static_baseline,-0.001000,10.000000,-0.001000,-0.001000,-0.001000,-0.001000,0.001000,-71.000000,-432.000000,-147.000000,-405.000000,4.000000,-140.000000,-19.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.069000,0.419000,-1.053000,-0.025000,0.000000,-0.012000,-0.196000,0.391000,0.354000,-0.003000,0.006000,-0.004000,23.354000,0.626000,53.034000,0
4224,static_baseline,-0.002000,10.000000,-0.004000,-0.001000,-0.001000,-0.001000,0.001000,-75.000000,-437.000000,-135.000000,-402.000000,17.000000,-141.000000,-21.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.192000,0.557000,-0.712000,-0.026000,-0.004000,0.002000,-0.089000,0.441000,0.283000,-0.001000,0.005000,-0.004000,23.341999,0.607000,53.091000,0
4312,static_baseline,-0.001000,10.000000,0.000000,-0.004000,-0.001000,-0.001000,0.001000,-80.000000,-438.000000,-137.000000,-417.000000,17.000000,-142.000000,-13.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.031000,0.365000,-1.051000,-0.026000,-0.002000,-0.019000,-0.124000,0.394000,0.296000,-0.001000,0.004000,-0.003000,23.351000,0.628000,52.999001,0
4394,static_baseline,0.000000,10.000000,0.000000,-0.001000,-0.001000,-0.001000,0.001000,-74.000000,-444.000000,-141.000000,-415.000000,12.000000,-140.000000,-21.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.334000,1.207000,-0.513000,-0.017000,-0.002000,0.034000,-0.155000,0.537000,0.330000,0.000000,0.004000,0.000000,23.354000,0.613000,53.042000,0
4489,static_baseline,-0.004000,9.998000,-0.001000,-0.001000,-0.001000,-0.001000,0.001000,-63.000000,-442.000000,-135.000000,-425.000000,14.000000,-139.000000,-10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.071000,0.675000,-0.071000,-0.018000,0.001000,0.036000,-0.267000,0.466000,0.351000,0.000000,0.006000,0.004000,23.354000,0.613000,53.042000,0
4569,static_baseline,-0.004000,10.000000,-0.001000,-0.001000,-0.001000,-0.002000,0.000000,-54.000000,-444.000000,-134.000000,-422.000000,13.000000,-136.000000,-9.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.062000,0.941000,-0.689000,-0.018000,0.000000,0.021000,-0.167000,0.480000,0.347000,-0.001000,0.004000,0.000000,23.353001,0.595000,53.084000,0
4655,static_baseline,-0.004000,10.001000,-0.001000,0.000000,-0.001000,-0.001000,0.000000,-43.000000,-453.000000,-118.000000,-421.000000,12.000000,-137.000000,-11.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.227000,0.668000,-1.096000,-0.021000,0.001000,-0.008000,-0.156000,0.462000,0.241000,-0.001000,0.005000,-0.003000,23.351000,0.620000,53.105999,0
4735,static_baseline,-0.002000,10.001000,-0.002000,-0.001000,-0.002000,-0.001000,0.001000,-44.000000,-456.000000,-130.000000,-418.000000,20.000000,-138.000000,-10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.024000,0.105000,-1.163000,-0.028000,-0.003000,-0.020000,-0.240000,0.294000,0.356000,-0.001000,0.006000,-0.002000,23.351000,0.620000,53.105999,0
4823,static_baseline,-0.002000,10.000000,-0.002000,-0.001000,0.000000,0.000000,0.000000,-40.000000,-462.000000,-116.000000,-428.000000,16.000000,-138.000000,-23.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.130000,0.732000,-0.669000,-0.022000,-0.002000,0.006000,-0.195000,0.395000,0.393000,-0.002000,0.006000,-0.001000,23.379999,0.608000,53.118000,0
4906,static_baseline,-0.001000,9.998000,0.000000,-0.001000,-0.001000,0.000000,0.000000,-30.000000,-459.000000,-124.000000,-423.000000,13.000000,-137.000000,-3.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.581000,0.337000,-1.282000,-0.025000,0.005000,-0.007000,-0.274000,0.233000,0.141000,-0.003000,0.005000,-0.006000,23.379999,0.608000,53.118000,0
4994,static_baseline,-0.002000,10.001000,0.002000,-0.001000,-0.002000,-0.001000,0.002000,-27.000000,-446.000000,-128.000000,-406.000000,8.000000,-133.000000,-18.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.549000,0.300000,-1.520000,-0.026000,0.004000,-0.028000,-0.261000,0.221000,0.255000,-0.004000,0.005000,-0.007000,23.365000,0.614000,53.049000,0
5080,static_baseline,0.000000,9.997000,-0.001000,0.000000,-0.001000,-0.001000,0.001000,-21.000000,-452.000000,-139.000000,-416.000000,13.000000,-140.000000,-19.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.194000,1.046000,-0.580000,-0.019000,0.002000,0.022000,-0.177000,0.511000,0.330000,-0.002000,0.005000,0.004000,23.365000,0.614000,53.049000,0
5170,static_baseline,-0.004000,10.000000,0.001000,0.000000,-0.001000,0.000000,0.001000,-24.000000,-440.000000,-105.000000,-421.000000,19.000000,-130.000000,-26.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.399000,0.902000,-0.282000,-0.018000,0.000000,0.032000,-0.001000,0.516000,0.430000,0.000000,0.004000,0.005000,23.333000,0.618000,52.987000,0
5250,static_baseline,-0.001000,9.998000,-0.001000,-0.001000,0.000000,-0.001000,0.002000,-23.000000,-440.000000,-125.000000,-408.000000,9.000000,-133.000000,-13.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.095000,0.974000,-0.370000,-0.019000,0.001000,0.029000,-0.239000,0.401000,0.316000,-0.002000,0.006000,0.001000,23.333000,0.618000,52.987000,0
5330,static_baseline,-0.002000,10.000000,-0.002000,0.000000,-0.001000,-0.004000,0.000000,-16.000000,-441.000000,-116.000000,-413.000000,11.000000,-138.000000,-11.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.303000,0.423000,-1.352000,-0.024000,0.004000,-0.027000,-0.189000,0.395000,0.132000,-0.002000,0.005000,-0.010000,23.356001,0.630000,53.078999,0
5429,static_baseline,-0.002000,9.998000,-0.001000,0.000000,-0.001000,-0.002000,-0.001000,-26.000000,-422.000000,-118.000000,-398.000000,14.000000,-140.000000,24.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.664000,0.831000,-0.459000,-0.021000,-0.015000,0.029000,-0.059000,0.503000,0.400000,0.000000,0.002000,0.001000,23.356001,0.630000,53.078999,0
5515,static_baseline,-0.001000,9.998000,-0.004000,-0.001000,0.000000,-0.001000,0.001000,-20.000000,-427.000000,-119.000000,-389.000000,17.000000,-136.000000,16.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.216000,-0.272000,-1.290000,-0.035000,-0.007000,-0.025000,-0.168000,0.225000,0.245000,-0.005000,0.004000,-0.003000,23.378000,0.602000,52.997002,0
5601,static_baseline,-0.002000,10.001000,-0.001000,-0.002000,-0.001000,0.000000,0.000000,-25.000000,-438.000000,-121.000000,-386.000000,15.000000,-136.000000,13.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.224000,0.433000,-1.291000,-0.026000,-0.003000,0.001000,-0.131000,0.303000,0.239000,-0.004000,0.003000,-0.007000,23.378000,0.602000,52.997002,0
5684,static_baseline,-0.004000,10.000000,-0.001000,-0.002000,-0.001000,-0.001000,0.000000,-15.000000,-439.000000,-110.000000,-403.000000,12.000000,-137.000000,-2.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.192000,0.924000,-0.150000,-0.017000,-0.001000,0.030000,-0.185000,0.466000,0.341000,0.000000,0.006000,0.006000,23.358000,0.600000,53.111000,0
5770,static_baseline,-0.004000,10.001000,0.000000,-0.002000,-0.002000,-0.001000,0.001000,-14.000000,-449.000000,-111.000000,-379.000000,15.000000,-138.000000,8.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.366000,0.884000,-0.692000,-0.022000,-0.005000,0.031000,-0.093000,0.402000,0.457000,-0.002000,0.004000,0.007000,23.358000,0.600000,53.111000,0
5850,static_baseline,-0.002000,9.997000,0.000000,-0.001000,-0.001000,-0.001000,0.000000,-12.000000,-443.000000,-117.000000,-397.000000,11.000000,-139.000000,19.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.295000,0.016000,-1.040000,-0.029000,0.002000,-0.013000,-0.221000,0.259000,0.240000,-0.002000,0.004000,-0.003000,23.364000,0.609000,53.118999,0
5940,static_baseline,-0.001000,10.000000,-0.001000,-0.002000,0.001000,-0.002000,0.001000,-11.000000,-445.000000,-115.000000,-393.000000,11.000000,-141.000000,7.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.396000,0.237000,-1.542000,-0.029000,0.004000,-0.038000,-0.188000,0.341000,0.237000,-0.003000,0.005000,-0.005000,23.364000,0.609000,53.118999,0
6019,static_baseline,-0.001000,9.998000,-0.004000,-0.002000,-0.001000,-0.001000,0.002000,-5.000000,-439.000000,-123.000000,-402.000000,8.000000,-142.000000,12.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.594000,0.926000,-0.278000,-0.023000,-0.007000,0.024000,-0.102000,0.373000,0.342000,-0.002000,0.003000,0.003000,23.405001,0.618000,53.057999,0
6111,static_baseline,-0.002000,10.000000,-0.004000,0.001000,-0.001000,-0.002000,-0.001000,-16.000000,-427.000000,-110.000000,-400.000000,11.000000,-136.000000,3.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.491000,0.874000,-0.324000,-0.023000,-0.003000,0.030000,-0.047000,0.554000,0.469000,0.000000,0.004000,0.006000,23.405001,0.618000,53.057999,0
6215,static_baseline,-0.001000,9.997000,-0.001000,-0.001000,-0.001000,-0.001000,-0.001000,-6.000000,-415.000000,-124.000000,-390.000000,11.000000,-140.000000,13.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.049000,0.984000,-0.384000,-0.016000,0.000000,0.022000,-0.206000,0.486000,0.405000,0.000000,0.005000,0.001000,23.405001,0.618000,53.057999,0
6295,static_baseline,-0.002000,9.998000,0.000000,-0.001000,-0.001000,-0.001000,0.000000,-2.000000,-421.000000,-119.000000,-385.000000,12.000000,-140.000000,12.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.019000,0.704000,-0.637000,-0.023000,0.000000,0.007000,-0.235000,0.409000,0.307000,-0.002000,0.004000,-0.003000,23.367001,0.610000,53.026001,0
6385,static_baseline,-0.002000,9.998000,-0.002000,-0.001000,0.000000,0.000000,0.001000,11.000000,-428.000000,-99.000000,-386.000000,13.000000,-138.000000,19.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.119000,0.150000,-1.284000,-0.029000,0.000000,-0.021000,-0.195000,0.414000,0.230000,-0.002000,0.005000,-0.003000,23.367001,0.610000,53.026001,0
6465,static_baseline,-0.002000,10.000000,0.000000,-0.001000,-0.002000,-0.002000,0.002000,18.000000,-436.000000,-100.000000,-379.000000,12.000000,-138.000000,13.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.023000,0.104000,-1.327000,-0.027000,-0.004000,-0.021000,-0.272000,0.361000,0.288000,-0.001000,0.006000,-0.009000,23.333000,0.617000,53.035999,0
6559,static_baseline,-0.004000,10.000000,0.001000,-0.002000,0.000000,-0.001000,0.002000,16.000000,-391.000000,-93.000000,-406.000000,14.000000,-130.000000,11.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.005000,0.420000,-0.658000,-0.025000,0.000000,0.002000,-0.136000,0.312000,0.360000,-0.003000,0.003000,0.000000,23.333000,0.617000,53.035999,0
6647,static_baseline,-0.004000,10.000000,-0.002000,0.000000,-0.001000,-0.001000,0.002000,16.000000,-390.000000,-94.000000,-395.000000,6.000000,-134.000000,13.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.145000,0.602000,-0.424000,-0.019000,0.000000,0.020000,-0.080000,0.311000,0.412000,-0.002000,0.004000,0.002000,23.356001,0.614000,53.048000,0
6730,static_baseline,-0.002000,9.998000,0.000000,-0.002000,-0.001000,0.000000,0.000000,28.000000,-382.000000,-96.000000,-404.000000,4.000000,-132.000000,12.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.247000,0.642000,-1.046000,-0.024000,0.003000,-0.014000,-0.306000,0.453000,0.213000,-0.002000,0.008000,-0.002000,23.356001,0.614000,53.048000,0
6824,static_baseline,-0.004000,10.000000,-0.004000,-0.002000,-0.001000,0.000000,0.001000,26.000000,-391.000000,-100.000000,-404.000000,7.000000,-128.000000,17.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.421000,0.090000,-1.638000,-0.032000,0.002000,-0.015000,-0.264000,0.238000,0.096000,-0.004000,0.006000,-0.004000,23.385000,0.609000,53.077000,0
6906,static_baseline,-0.004000,10.000000,-0.002000,-0.001000,-0.001000,-0.001000,0.001000,28.000000,-389.000000,-120.000000,-406.000000,5.000000,-132.000000,16.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.002000,0.960000,-0.590000,-0.020000,0.000000,0.007000,-0.255000,0.582000,0.360000,-0.001000,0.008000,0.000000,23.385000,0.609000,53.077000,0
6992,static_baseline,-0.002000,10.000000,-0.001000,-0.002000,-0.001000,-0.001000,0.000000,12.000000,-391.000000,-116.000000,-417.000000,13.000000,-128.000000,16.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.089000,0.119000,-1.060000,-0.026000,-0.005000,-0.030000,-0.227000,0.212000,0.199000,-0.003000,0.003000,-0.010000,23.327000,0.614000,53.070999,0
7077,static_baseline,-0.004000,10.001000,-0.002000,-0.002000,-0.001000,-0.002000,0.000000,21.000000,-398.000000,-117.000000,-415.000000,9.000000,-132.000000,11.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.148000,0.454000,-1.366000,-0.026000,0.000000,-0.012000,-0.283000,0.379000,0.176000,-0.003000,0.006000,-0.004000,23.327000,0.614000,53.070999,0
7164,static_baseline,-0.002000,9.998000,-0.001000,0.000000,-0.001000,-0.002000,0.000000,22.000000,-379.000000,-133.000000,-426.000000,7.000000,-138.000000,6.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.033000,0.918000,-0.157000,-0.019000,0.000000,0.026000,-0.149000,0.560000,0.502000,0.000000,0.005000,0.009000,23.327000,0.614000,53.070999,0
7248,static_baseline,-0.002000,10.000000,-0.001000,-0.002000,-0.002000,-0.002000,0.001000,22.000000,-382.000000,-116.000000,-422.000000,19.000000,-133.000000,-10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.465000,0.694000,-0.982000,-0.023000,-0.008000,0.002000,-0.134000,0.294000,0.230000,-0.003000,0.004000,-0.003000,23.396000,0.615000,53.033001,0
7338,static_baseline,-0.002000,10.000000,-0.002000,-0.001000,-0.001000,0.000000,0.001000,20.000000,-386.000000,-122.000000,-428.000000,12.000000,-136.000000,-2.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.011000,0.098000,-1.551000,-0.027000,-0.002000,-0.027000,-0.296000,0.282000,0.099000,-0.002000,0.005000,-0.012000,23.360001,0.608000,53.074001,0
7422,static_baseline,-0.001000,9.998000,-0.004000,-0.001000,-0.001000,0.000000,0.000000,22.000000,-390.000000,-132.000000,-434.000000,20.000000,-132.000000,0.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.159000,0.525000,-1.355000,-0.024000,-0.010000,-0.012000,-0.099000,0.364000,0.280000,-0.003000,0.002000,-0.007000,23.360001,0.608000,53.074001,0
7504,static_baseline,-0.001000,9.997000,-0.002000,0.000000,-0.001000,-0.001000,0.000000,17.000000,-397.000000,-144.000000,-439.000000,14.000000,-134.000000,-10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.132000,0.489000,-1.002000,-0.028000,-0.001000,0.022000,-0.069000,0.357000,0.212000,-0.003000,0.003000,0.002000,23.358000,0.612000,53.064999,0
7587,static_baseline,-0.004000,10.000000,0.000000,-0.002000,-0.001000,-0.002000,0.001000,18.000000,-409.000000,-128.000000,-446.000000,14.000000,-132.000000,-8.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.044000,0.264000,-1.056000,-0.026000,0.000000,-0.006000,-0.120000,0.479000,0.389000,-0.002000,0.004000,0.000000,23.354000,0.610000,52.998001,0
7679,static_baseline,-0.002000,10.000000,-0.001000,-0.001000,-0.001000,-0.001000,0.000000,22.000000,-410.000000,-133.000000,-448.000000,18.000000,-134.000000,-14.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.254000,0.535000,-1.170000,-0.023000,0.000000,-0.029000,-0.277000,0.328000,0.161000,-0.001000,0.005000,-0.008000,23.354000,0.610000,52.998001,0
7758,static_baseline,-0.002000,9.998000,-0.001000,-0.004000,-0.001000,0.000000,0.000000,14.000000,-412.000000,-143.000000,-461.000000,17.000000,-134.000000,-14.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.283000,0.941000,-1.030000,-0.019000,0.003000,-0.006000,-0.287000,0.517000,0.441000,-0.001000,0.006000,0.000000,23.365000,0.624000,53.090000,0
7838,static_baseline,-0.002000,10.000000,-0.002000,-0.002000,-0.001000,-0.001000,0.002000,14.000000,-399.000000,-120.000000,-469.000000,20.000000,-133.000000,-11.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.231000,0.668000,-1.143000,-0.023000,0.000000,-0.021000,-0.285000,0.593000,0.221000,0.000000,0.006000,-0.004000,23.365000,0.624000,53.090000,0
7924,static_baseline,-0.001000,10.001000,-0.002000,-0.002000,-0.001000,0.001000,0.000000,18.000000,-413.000000,-125.000000,-453.000000,15.000000,-143.000000,2.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.530000,1.001000,-0.433000,-0.020000,-0.004000,0.027000,-0.059000,0.651000,0.312000,0.000000,0.003000,0.000000,23.355000,0.618000,53.095001,0
8008,static_baseline,-0.004000,10.000000,-0.002000,-0.001000,-0.001000,-0.001000,0.002000,23.000000,-426.000000,-120.000000,-467.000000,12.000000,-141.000000,3.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.110000,0.315000,-1.113000,-0.023000,-0.002000,-0.017000,-0.271000,0.393000,0.333000,-0.002000,0.004000,-0.008000,23.375000,0.610000,53.090000,0
8098,static_baseline,-0.004000,10.001000,-0.002000,-0.002000,-0.001000,-0.001000,0.001000,31.000000,-418.000000,-129.000000,-460.000000,11.000000,-132.000000,-19.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.013000,0.738000,-0.330000,-0.020000,0.003000,0.015000,-0.080000,0.391000,0.386000,-0.002000,0.004000,0.005000,23.375000,0.610000,53.090000,0
8176,static_baseline,-0.002000,9.998000,-0.002000,-0.004000,-0.001000,-0.001000,0.002000,16.000000,-402.000000,-102.000000,-475.000000,5.000000,-137.000000,0.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.306000,0.373000,-1.476000,-0.029000,0.003000,-0.034000,-0.280000,0.373000,0.263000,-0.004000,0.006000,-0.008000,23.347000,0.625000,53.061001,0
8263,static_baseline,-0.002000,10.000000,-0.001000,0.000000,-0.001000,0.000000,0.001000,29.000000,-402.000000,-124.000000,-461.000000,9.000000,-135.000000,-14.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.316000,0.889000,-0.088000,-0.019000,-0.004000,0.029000,-0.144000,0.470000,0.501000,-0.001000,0.005000,0.005000,23.357000,0.615000,53.074001,0
8348,static_baseline,-0.002000,9.998000,-0.002000,0.000000,-0.001000,0.000000,0.001000,34.000000,-385.000000,-117.000000,-456.000000,10.000000,-138.000000,-6.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.063000,0.729000,-0.605000,-0.021000,0.000000,0.000000,-0.138000,0.436000,0.290000,0.000000,0.004000,-0.003000,23.357000,0.615000,53.074001,0
8429,static_baseline,-0.001000,10.000000,-0.001000,-0.004000,-0.001000,-0.001000,0.000000,46.000000,-397.000000,-141.000000,-451.000000,13.000000,-139.000000,-12.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.164000,0.989000,-0.799000,-0.017000,0.002000,0.017000,-0.243000,0.466000,0.267000,-0.001000,0.006000,-0.004000,23.343000,0.601000,53.078999,0
8518,static_baseline,-0.004000,10.001000,0.000000,-0.001000,-0.001000,-0.001000,0.001000,39.000000,-389.000000,-147.000000,-458.000000,15.000000,-142.000000,-3.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.056000,0.591000,-1.545000,-0.021000,0.000000,-0.020000,-0.215000,0.426000,0.241000,-0.001000,0.006000,-0.006000,23.349001,0.616000,53.004002,0
8597,static_baseline,-0.004000,10.000000,-0.001000,-0.002000,-0.001000,-0.001000,0.001000,49.000000,-399.000000,-149.000000,-455.000000,16.000000,-142.000000,-13.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.166000,0.750000,-1.423000,-0.022000,0.000000,-0.014000,-0.251000,0.415000,0.024000,-0.002000,0.006000,-0.005000,23.349001,0.616000,53.004002,0
8682,static_baseline,-0.004000,10.000000,-0.002000,0.000000,0.000000,-0.001000,0.000000,38.000000,-413.000000,-143.000000,-458.000000,15.000000,-142.000000,-5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.237000,0.094000,-1.531000,-0.030000,-0.004000,-0.034000,-0.143000,0.225000,0.077000,-0.004000,0.002000,-0.009000,23.343000,0.615000,53.035000,0
8774,static_baseline,-0.004000,10.001000,-0.001000,0.000000,-0.001000,-0.002000,0.002000,41.000000,-400.000000,-169.000000,-464.000000,20.000000,-141.000000,-8.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.284000,0.445000,-1.002000,-0.024000,-0.003000,-0.023000,-0.165000,0.330000,0.297000,-0.002000,0.003000,-0.005000,23.343000,0.615000,53.035000,0
8864,static_baseline,0.000000,9.998000,-0.001000,-0.001000,-0.001000,-0.001000,0.001000,48.000000,-392.000000,-155.000000,-462.000000,17.000000,-143.000000,-13.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.529000,0.353000,-1.254000,-0.022000,0.003000,-0.034000,-0.326000,0.336000,0.267000,-0.002000,0.006000,-0.007000,23.361000,0.609000,53.104000,0
8941,static_baseline,-0.002000,10.000000,-0.001000,-0.001000,-0.001000,0.000000,0.001000,49.000000,-407.000000,-154.000000,-438.000000,21.000000,-140.000000,-15.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.096000,0.690000,-0.598000,-0.020000,-0.003000,0.023000,-0.200000,0.504000,0.336000,0.000000,0.006000,0.002000,23.339001,0.605000,53.080002,0
9034,static_baseline,-0.001000,9.998000,-0.002000,-0.002000,-0.001000,0.000000,-0.001000,48.000000,-414.000000,-153.000000,-450.000000,21.000000,-144.000000,-13.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.216000,1.020000,-0.385000,-0.020000,-0.001000,0.027000,-0.134000,0.443000,0.297000,-0.001000,0.004000,-0.002000,23.339001,0.605000,53.080002,0
9113,static_baseline,-0.002000,9.998000,0.000000,-0.001000,-0.001000,-0.002000,0.001000,29.000000,-414.000000,-184.000000,-447.000000,19.000000,-146.000000,-15.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.403000,0.557000,-0.530000,-0.023000,-0.005000,0.004000,-0.169000,0.298000,0.350000,-0.004000,0.006000,-0.001000,23.360001,0.621000,53.060001,0
9197,static_baseline,-0.004000,10.003000,-0.001000,-0.001000,-0.001000,-0.001000,0.000000,46.000000,-420.000000,-168.000000,-443.000000,25.000000,-148.000000,-5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.317000,0.203000,-1.861000,-0.026000,0.000000,-0.026000,-0.219000,0.347000,0.043000,-0.002000,0.004000,-0.006000,23.365000,0.618000,53.082001,0
9283,static_baseline,-0.002000,9.998000,0.000000,0.001000,-0.001000,-0.002000,0.001000,38.000000,-434.000000,-191.000000,-462.000000,26.000000,-153.000000,-9.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.265000,0.392000,-1.220000,-0.026000,-0.003000,-0.015000,-0.168000,0.244000,0.044000,-0.003000,0.005000,-0.008000,23.365000,0.618000,53.082001,0
9367,static_baseline,-0.001000,10.001000,0.000000,-0.001000,-0.001000,0.001000,0.002000,47.000000,-447.000000,-175.000000,-461.000000,25.000000,-155.000000,-15.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.010000,0.676000,-0.600000,-0.019000,0.000000,0.010000,-0.259000,0.383000,0.308000,0.000000,0.005000,0.002000,23.341999,0.606000,53.016998,0
9447,static_baseline,-0.002000,10.000000,-0.002000,-0.002000,-0.002000,0.000000,0.002000,62.000000,-437.000000,-182.000000,-467.000000,21.000000,-150.000000,-17.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.161000,0.238000,-1.194000,-0.026000,-0.002000,-0.026000,-0.330000,0.401000,0.099000,-0.001000,0.005000,-0.009000,23.341000,0.615000,53.008999,0
9529,static_baseline,-0.002000,9.998000,0.000000,-0.004000,-0.001000,-0.002000,0.001000,42.000000,-443.000000,-190.000000,-478.000000,19.000000,-150.000000,-3.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.043000,0.456000,-1.103000,-0.026000,-0.003000,-0.005000,-0.230000,0.256000,0.226000,-0.003000,0.004000,-0.007000,23.341000,0.615000,53.008999,0
9617,static_baseline,-0.002000,9.998000,-0.002000,-0.002000,-0.001000,-0.001000,0.000000,34.000000,-431.000000,-173.000000,-480.000000,21.000000,-146.000000,0.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.176000,0.710000,0.121000,-0.021000,-0.003000,0.028000,-0.226000,0.469000,0.604000,-0.001000,0.006000,0.008000,23.344000,0.600000,53.073002,0
9711,static_baseline,-0.002000,9.998000,-0.001000,-0.002000,-0.001000,-0.002000,0.000000,34.000000,-434.000000,-158.000000,-488.000000,22.000000,-153.000000,-10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.302000,0.809000,-0.133000,-0.019000,-0.001000,0.030000,-0.166000,0.428000,0.482000,-0.001000,0.004000,0.006000,23.344000,0.600000,53.073002,0
9814,static_baseline,-0.004000,10.000000,-0.001000,-0.002000,-0.001000,-0.001000,0.001000,47.000000,-416.000000,-178.000000,-479.000000,21.000000,-154.000000,-2.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.045000,0.981000,-0.835000,-0.019000,-0.001000,0.007000,-0.283000,0.508000,0.356000,-0.001000,0.005000,-0.002000,23.355000,0.605000,53.000000,0
9908,static_baseline,-0.001000,10.000000,-0.002000,-0.001000,-0.001000,-0.002000,0.000000,47.000000,-429.000000,-183.000000,-483.000000,20.000000,-150.000000,0.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.212000,0.888000,-0.401000,-0.021000,-0.001000,0.038000,-0.125000,0.422000,0.396000,-0.001000,0.005000,0.005000,23.355000,0.605000,53.000000,0
9992,static_baseline,-0.006000,10.000000,-0.001000,0.000000,-0.001000,0.001000,0.000000,46.000000,-417.000000,-178.000000,-485.000000,18.000000,-147.000000,-11.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.193000,0.553000,-1.135000,-0.023000,-0.004000,-0.011000,-0.143000,0.273000,0.186000,-0.002000,0.004000,-0.005000,23.334999,0.638000,53.077999,0
10122,move_positive,-0.002000,10.008000,-0.004000,-0.001000,-0.001000,-0.001000,0.001000,58.000000,-5.000000,-174.000000,-437.000000,17.000000,-149.000000,-10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.448000,0.619000,-0.563000,-0.025000,-0.003000,0.026000,-0.203000,0.319000,0.310000,-0.003000,0.005000,0.002000,23.346001,0.612000,53.042000,0
10209,move_positive,-0.002000,10.085000,-0.001000,-0.001000,-0.001000,-0.001000,0.001000,51.000000,201.000000,-168.000000,-436.000000,20.000000,-158.000000,-2.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.381000,0.947000,-0.219000,-0.016000,-0.005000,0.025000,-0.191000,0.390000,0.317000,-0.002000,0.005000,0.000000,23.346001,0.612000,53.042000,0
10296,move_positive,-0.004000,10.269000,-0.001000,-0.002000,-0.001000,0.000000,0.000000,46.000000,137.000000,-175.000000,-407.000000,20.000000,-152.000000,-21.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.178000,0.104000,-1.206000,-0.030000,-0.002000,-0.035000,-0.177000,0.139000,0.270000,-0.006000,0.004000,-0.006000,23.323999,0.617000,53.098999,0
10378,move_positive,-0.002000,10.535000,-0.004000,-0.001000,-0.001000,-0.001000,0.002000,40.000000,177.000000,-165.000000,-374.000000,13.000000,-145.000000,-4.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.122000,0.391000,-1.479000,-0.027000,-0.001000,-0.023000,-0.197000,0.332000,0.083000,-0.002000,0.005000,-0.007000,23.323999,0.617000,53.098999,0
10465,move_positive,-0.002000,10.924000,-0.002000,-0.001000,-0.001000,-0.001000,0.001000,38.000000,405.000000,-163.000000,-362.000000,16.000000,-147.000000,-11.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.204000,0.008000,-1.360000,-0.029000,0.000000,-0.030000,-0.247000,0.120000,0.034000,-0.004000,0.005000,-0.013000,23.367001,0.624000,53.037998,0
10544,move_positive,-0.002000,11.276000,-0.001000,-0.001000,-0.001000,0.001000,0.002000,31.000000,183.000000,-153.000000,-341.000000,16.000000,-149.000000,-5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.039000,0.689000,-0.387000,-0.020000,0.000000,0.028000,-0.160000,0.377000,0.242000,-0.002000,0.004000,0.000000,23.367001,0.624000,53.037998,0
10628,move_positive,-0.002000,11.718000,-0.002000,-0.001000,0.000000,-0.004000,0.001000,29.000000,110.000000,-164.000000,-336.000000,18.000000,-146.000000,-3.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.160000,0.809000,-1.010000,-0.019000,-0.002000,-0.021000,-0.224000,0.507000,0.227000,0.000000,0.005000,-0.006000,23.370001,0.615000,53.049000,0
10708,move_positive,-0.004000,12.057000,0.000000,-0.001000,-0.001000,0.000000,0.001000,26.000000,190.000000,-153.000000,-326.000000,19.000000,-142.000000,-18.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.187000,0.560000,-0.641000,-0.022000,-0.002000,0.013000,-0.067000,0.479000,0.380000,0.000000,0.004000,0.000000,23.370001,0.615000,53.049000,0
10790,move_positive,-0.004000,12.420000,-0.001000,-0.001000,-0.001000,-0.001000,0.000000,25.000000,41.000000,-156.000000,-307.000000,15.000000,-149.000000,-20.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.072000,0.705000,-0.517000,-0.021000,0.000000,0.027000,-0.191000,0.384000,0.434000,-0.001000,0.005000,0.004000,23.368999,0.616000,53.096001,0
10879,move_positive,-0.001000,12.701000,-0.002000,0.000000,-0.001000,-0.001000,0.000000,22.000000,144.000000,-144.000000,-298.000000,15.000000,-146.000000,-3.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.185000,0.855000,-0.487000,-0.022000,0.001000,0.023000,-0.139000,0.376000,0.352000,-0.002000,0.006000,0.000000,23.362000,0.612000,53.047001,0
10970,move_positive,-0.002000,12.908000,0.001000,-0.002000,-0.001000,-0.001000,0.001000,31.000000,26.000000,-145.000000,-304.000000,18.000000,-134.000000,-14.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.414000,1.126000,-0.494000,-0.022000,-0.003000,0.036000,-0.170000,0.424000,0.363000,-0.002000,0.005000,0.005000,23.362000,0.612000,53.047001,0
11063,move_positive,-0.004000,12.978000,0.000000,0.000000,-0.001000,-0.002000,0.001000,24.000000,-80.000000,-147.000000,-278.000000,15.000000,-140.000000,-16.000000,23.000000,22.000000,23.000000,23.000000,23.000000,22.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.067000,0.346000,-1.564000,-0.025000,-0.002000,-0.033000,-0.232000,0.236000,0.143000,-0.003000,0.005000,-0.007000,23.368000,0.617000,53.070000,0
11143,move_positive,-0.001000,12.995000,0.000000,-0.001000,-0.001000,-0.001000,0.000000,25.000000,-125.000000,-160.000000,-280.000000,18.000000,-140.000000,-5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.002000,0.287000,-1.331000,-0.030000,-0.001000,-0.029000,-0.103000,0.412000,0.201000,-0.002000,0.003000,-0.006000,23.341999,0.607000,53.091000,0
11283,return_positive,-0.001000,12.994000,-0.001000,0.000000,-0.001000,-0.001000,0.000000,19.000000,-690.000000,-157.000000,-280.000000,15.000000,-142.000000,-5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.474000,0.937000,-0.156000,-0.020000,-0.004000,0.030000,-0.167000,0.480000,0.511000,0.000000,0.006000,0.005000,23.341999,0.607000,53.091000,0
11369,return_positive,-0.004000,12.895000,-0.004000,0.000000,-0.001000,0.000000,0.002000,11.000000,-726.000000,-133.000000,-277.000000,12.000000,-142.000000,-10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.153000,0.748000,-0.794000,-0.020000,-0.004000,0.005000,-0.224000,0.375000,0.182000,-0.001000,0.004000,-0.006000,23.341000,0.626000,53.048000,0
11449,return_positive,-0.002000,12.715000,0.000000,0.000000,-0.001000,-0.002000,0.004000,10.000000,-946.000000,-136.000000,-275.000000,15.000000,-145.000000,-6.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.293000,0.930000,-0.404000,-0.021000,-0.003000,0.025000,-0.146000,0.496000,0.429000,-0.001000,0.006000,0.001000,23.315001,0.641000,53.050999,0
11543,return_positive,-0.002000,12.384000,-0.002000,-0.002000,-0.001000,-0.001000,0.000000,17.000000,-970.000000,-135.000000,-261.000000,11.000000,-147.000000,2.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.151000,0.222000,-1.530000,-0.029000,-0.007000,-0.031000,-0.100000,0.265000,0.297000,-0.004000,0.003000,-0.013000,23.315001,0.641000,53.050999,0
11625,return_positive,-0.001000,12.001000,0.000000,0.000000,-0.001000,-0.001000,0.002000,20.000000,-979.000000,-143.000000,-273.000000,10.000000,-146.000000,-15.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.063000,0.286000,-0.996000,-0.030000,-0.002000,-0.014000,-0.142000,0.342000,0.327000,-0.003000,0.004000,-0.001000,23.322001,0.664000,53.106998,0
11719,return_positive,-0.002000,11.571000,0.000000,0.000000,-0.001000,-0.002000,0.001000,4.000000,-1039.000000,-159.000000,-282.000000,11.000000,-147.000000,-8.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.002000,0.665000,-0.501000,-0.020000,0.000000,0.029000,-0.235000,0.412000,0.354000,-0.001000,0.006000,0.004000,23.374001,0.663000,53.050999,0
11799,return_positive,-0.002000,11.211000,-0.002000,0.000000,-0.001000,0.000000,0.002000,17.000000,-965.000000,-161.000000,-269.000000,16.000000,-148.000000,-24.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.102000,0.138000,-1.263000,-0.027000,0.000000,-0.027000,-0.226000,0.218000,0.243000,-0.005000,0.005000,-0.008000,23.374001,0.663000,53.050999,0
11885,return_positive,-0.002000,10.810000,0.000000,-0.001000,-0.001000,-0.001000,0.001000,6.000000,-854.000000,-164.000000,-231.000000,16.000000,-152.000000,-5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.294000,0.284000,-1.381000,-0.029000,0.002000,-0.030000,-0.226000,0.333000,0.084000,-0.002000,0.005000,-0.013000,23.323000,0.647000,53.078999,0
11964,return_positive,-0.002000,10.496000,0.000000,-0.001000,-0.001000,-0.001000,0.002000,-5.000000,-865.000000,-149.000000,-199.000000,12.000000,-149.000000,-7.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.242000,0.641000,-0.233000,-0.025000,0.004000,0.017000,-0.173000,0.479000,0.531000,-0.001000,0.004000,0.002000,23.348000,0.657000,53.101002,0
12053,return_positive,-0.001000,10.229000,-0.001000,-0.002000,-0.001000,-0.005000,0.001000,-5.000000,-726.000000,-158.000000,-173.000000,8.000000,-148.000000,-8.000000,23.000000,22.000000,23.000000,23.000000,23.000000,22.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.556000,0.951000,-0.180000,-0.015000,-0.007000,0.027000,-0.230000,0.442000,0.415000,-0.001000,0.004000,-0.001000,23.348000,0.657000,53.101002,0
12134,return_positive,-0.002000,10.063000,-0.002000,-0.002000,-0.001000,-0.001000,0.001000,-16.000000,-603.000000,-132.000000,-150.000000,13.000000,-146.000000,-12.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.133000,0.930000,-0.469000,-0.017000,-0.001000,0.013000,-0.203000,0.429000,0.275000,0.000000,0.005000,0.001000,23.348000,0.657000,53.101002,0
12242,return_positive,-0.004000,10.014000,-0.001000,-0.002000,-0.001000,-0.001000,0.001000,-20.000000,-699.000000,-160.000000,-108.000000,3.000000,-147.000000,-22.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.303000,0.886000,-0.359000,-0.017000,-0.004000,0.022000,-0.083000,0.451000,0.339000,0.000000,0.005000,0.000000,23.360001,0.622000,53.022999,0
12382,move_negative,-0.001000,10.003000,-0.004000,-0.001000,-0.001000,-0.001000,0.000000,-11.000000,-756.000000,-166.000000,-54.000000,6.000000,-149.000000,-9.000000,23.000000,22.000000,23.000000,23.000000,23.000000,22.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.040000,0.384000,-1.084000,-0.031000,-0.003000,-0.030000,-0.126000,0.336000,0.230000,-0.004000,0.004000,-0.005000,23.350000,0.623000,53.111000,0
12464,move_negative,-0.002000,9.975000,-0.001000,-0.002000,-0.001000,-0.002000,0.001000,-20.000000,-863.000000,-154.000000,-25.000000,7.000000,-147.000000,-4.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.116000,0.501000,-1.369000,-0.026000,0.001000,-0.015000,-0.195000,0.320000,0.212000,-0.001000,0.005000,-0.005000,23.350000,0.623000,53.111000,0
12554,move_negative,-0.002000,9.850000,-0.004000,-0.001000,-0.001000,-0.002000,0.001000,5.000000,-813.000000,-164.000000,-1.000000,8.000000,-146.000000,-10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.080000,1.077000,-0.114000,-0.019000,0.000000,0.032000,-0.185000,0.518000,0.500000,0.000000,0.004000,0.006000,23.350000,0.623000,53.111000,0
12636,move_negative,-0.002000,9.624000,-0.001000,-0.002000,-0.001000,-0.002000,0.001000,0.000000,-979.000000,-164.000000,21.000000,6.000000,-148.000000,-15.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.446000,0.892000,-0.255000,-0.022000,-0.005000,0.020000,-0.223000,0.411000,0.392000,-0.002000,0.005000,0.001000,23.363001,0.629000,53.108002,0
12717,move_negative,-0.004000,9.313000,-0.002000,-0.001000,-0.001000,-0.001000,0.002000,-15.000000,-677.000000,-167.000000,48.000000,-2.000000,-147.000000,2.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.217000,0.246000,-1.587000,-0.029000,0.002000,-0.029000,-0.290000,0.253000,0.169000,-0.004000,0.006000,-0.008000,23.363001,0.629000,53.108002,0
12826,move_negative,-0.001000,8.852000,-0.001000,-0.002000,-0.001000,-0.001000,0.001000,-17.000000,-746.000000,-174.000000,71.000000,5.000000,-146.000000,-12.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.197000,0.850000,-0.532000,-0.020000,-0.002000,0.035000,-0.062000,0.492000,0.508000,-0.001000,0.003000,0.004000,23.358000,0.637000,52.988998,0
12919,move_negative,-0.001000,8.416000,-0.001000,-0.002000,-0.001000,-0.001000,0.002000,-22.000000,-739.000000,-191.000000,152.000000,8.000000,-147.000000,-15.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.249000,0.168000,-1.616000,-0.029000,-0.002000,-0.044000,-0.197000,0.317000,0.107000,-0.003000,0.004000,-0.013000,23.358000,0.637000,52.988998,0
13013,move_negative,-0.002000,7.989000,-0.001000,-0.001000,-0.001000,0.000000,0.002000,-21.000000,-834.000000,-199.000000,258.000000,10.000000,-145.000000,-11.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.211000,0.691000,-1.033000,-0.020000,0.000000,-0.010000,-0.247000,0.412000,0.200000,-0.001000,0.005000,-0.005000,23.358000,0.637000,52.988998,0
13101,move_negative,-0.002000,7.621000,0.000000,-0.002000,-0.001000,-0.002000,0.001000,-9.000000,-797.000000,-193.000000,349.000000,11.000000,-140.000000,-16.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.069000,0.348000,-1.361000,-0.027000,-0.005000,-0.035000,-0.250000,0.375000,0.166000,-0.002000,0.004000,-0.009000,23.341999,0.660000,52.998001,0
13185,move_negative,-0.002000,7.314000,-0.004000,-0.001000,-0.001000,-0.002000,0.001000,-21.000000,-717.000000,-209.000000,495.000000,4.000000,-144.000000,-19.000000,23.000000,22.000000,23.000000,23.000000,23.000000,22.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.152000,0.660000,-0.818000,-0.024000,-0.001000,0.012000,-0.226000,0.448000,0.338000,-0.003000,0.007000,0.005000,23.341999,0.660000,52.998001,0
13271,move_negative,-0.002000,7.120000,0.000000,-0.002000,-0.001000,-0.002000,0.001000,-22.000000,-638.000000,-202.000000,687.000000,10.000000,-143.000000,-17.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.330000,1.041000,0.055000,-0.016000,-0.004000,0.026000,-0.232000,0.541000,0.460000,0.000000,0.005000,0.005000,23.355000,0.627000,53.102001,0
13359,move_negative,-0.004000,7.025000,-0.002000,-0.002000,-0.001000,-0.001000,0.001000,-14.000000,-540.000000,-194.000000,802.000000,9.000000,-142.000000,-17.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.577000,0.547000,-0.628000,-0.025000,-0.004000,0.016000,-0.165000,0.482000,0.184000,0.000000,0.005000,0.002000,23.355000,0.627000,53.102001,0
13531,return_negative,-0.001000,6.999000,-0.001000,0.000000,-0.001000,-0.001000,0.002000,-19.000000,-88.000000,-184.000000,968.000000,1.000000,-143.000000,-7.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.107000,0.262000,-1.357000,-0.030000,-0.002000,-0.026000,-0.325000,0.345000,0.399000,-0.003000,0.006000,-0.006000,23.357000,0.619000,53.085999,0
13791,return_negative,-0.002000,7.235000,-0.001000,0.004000,-0.001000,-0.001000,0.001000,-10.000000,146.000000,-172.000000,838.000000,-1.000000,-134.000000,-10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.174000,0.790000,-0.564000,-0.018000,0.000000,0.017000,-0.254000,0.430000,0.327000,0.000000,0.006000,0.002000,23.362000,0.621000,53.067001,0
13900,return_negative,-0.002000,7.572000,-0.002000,0.004000,-0.001000,-0.002000,0.000000,-12.000000,245.000000,-174.000000,671.000000,8.000000,-140.000000,-12.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.227000,0.041000,-1.401000,-0.031000,-0.001000,-0.027000,-0.220000,0.247000,0.245000,-0.004000,0.004000,-0.008000,23.362000,0.621000,53.067001,0
13992,return_negative,-0.002000,8.011000,-0.001000,0.004000,0.000000,-0.001000,0.001000,-9.000000,143.000000,-191.000000,464.000000,6.000000,-139.000000,-14.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.186000,0.378000,-1.313000,-0.025000,-0.001000,-0.020000,-0.156000,0.465000,0.219000,0.000000,0.004000,-0.007000,23.362000,0.621000,53.067001,0
14107,return_negative,-0.002000,8.522000,-0.001000,0.002000,-0.001000,-0.002000,0.001000,-13.000000,-73.000000,-194.000000,178.000000,6.000000,-133.000000,-5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.318000,0.172000,-1.527000,-0.029000,0.001000,-0.035000,-0.164000,0.354000,0.096000,-0.001000,0.005000,-0.008000,23.360001,0.632000,53.033001,0
14199,return_negative,-0.004000,8.931000,-0.002000,0.006000,-0.001000,-0.001000,0.001000,-8.000000,140.000000,-179.000000,-72.000000,16.000000,-135.000000,-10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.128000,0.332000,-1.105000,-0.025000,-0.002000,-0.011000,-0.282000,0.332000,0.327000,-0.001000,0.008000,0.003000,23.360001,0.632000,53.033001,0
14278,return_negative,-0.004000,9.273000,0.000000,0.004000,-0.001000,-0.001000,0.002000,3.000000,232.000000,-181.000000,-298.000000,9.000000,-138.000000,-11.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.399000,0.900000,-0.651000,-0.019000,-0.004000,0.027000,-0.136000,0.380000,0.396000,-0.001000,0.004000,0.002000,23.362000,0.630000,53.032001,0
14379,return_negative,-0.002000,9.678000,-0.002000,0.005000,-0.001000,-0.004000,0.001000,-5.000000,95.000000,-171.000000,-636.000000,7.000000,-141.000000,-5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.394000,0.216000,-1.548000,-0.031000,0.003000,-0.045000,-0.228000,0.328000,0.046000,-0.003000,0.004000,-0.008000,23.362000,0.630000,53.032001,0
14468,return_negative,-0.002000,9.893000,-0.001000,0.005000,-0.001000,-0.004000,0.001000,-5.000000,4.000000,-168.000000,-951.000000,4.000000,-136.000000,-8.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.162000,0.472000,-1.452000,-0.019000,0.000000,-0.018000,-0.081000,0.323000,0.200000,-0.002000,0.004000,-0.005000,23.377001,0.619000,53.049000,0
14562,return_negative,-0.002000,9.992000,-0.001000,0.002000,0.000000,-0.001000,0.001000,-1.000000,-43.000000,-164.000000,-1177.000000,11.000000,-143.000000,-14.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.292000,0.737000,-0.352000,-0.020000,-0.003000,0.026000,-0.259000,0.325000,0.389000,-0.002000,0.005000,0.002000,23.377001,0.619000,53.049000,0
14674,return_negative,-0.002000,10.008000,-0.005000,0.001000,-0.001000,-0.002000,0.001000,10.000000,-310.000000,-179.000000,-1199.000000,11.000000,-140.000000,1.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.179000,0.571000,-0.733000,-0.024000,-0.006000,-0.007000,-0.117000,0.245000,0.314000,-0.005000,0.003000,-0.002000,23.349001,0.629000,53.030998,0
14858,final_static,-0.004000,10.003000,-0.001000,0.001000,-0.001000,-0.002000,0.002000,0.000000,-423.000000,-178.000000,-1194.000000,6.000000,-136.000000,-13.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.263000,0.775000,-0.729000,-0.024000,0.000000,0.007000,-0.091000,0.435000,0.320000,-0.003000,0.004000,-0.001000,23.349001,0.629000,53.030998,0
14964,final_static,-0.002000,10.003000,0.000000,-0.001000,-0.001000,-0.002000,0.000000,6.000000,-420.000000,-170.000000,-1183.000000,9.000000,-139.000000,7.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.243000,0.410000,-0.994000,-0.026000,-0.003000,0.008000,-0.210000,0.500000,0.362000,0.000000,0.005000,-0.002000,23.346001,0.621000,52.994999,0
15055,final_static,-0.004000,10.003000,0.000000,-0.002000,-0.001000,-0.001000,0.002000,14.000000,-424.000000,-165.000000,-1169.000000,0.000000,-136.000000,-5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.186000,0.684000,-0.698000,-0.021000,-0.002000,0.021000,-0.183000,0.301000,0.344000,-0.003000,0.005000,-0.002000,23.346001,0.621000,52.994999,0
15134,final_static,-0.004000,10.003000,-0.004000,0.001000,-0.001000,0.000000,-0.001000,11.000000,-441.000000,-187.000000,-1146.000000,5.000000,-139.000000,10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.256000,0.642000,-1.325000,-0.021000,0.003000,-0.011000,-0.199000,0.412000,0.265000,-0.002000,0.005000,-0.003000,23.346001,0.621000,52.994999,0
15268,final_static,-0.002000,10.001000,-0.001000,-0.001000,-0.001000,0.000000,-0.001000,9.000000,-443.000000,-148.000000,-1101.000000,5.000000,-139.000000,0.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.040000,0.175000,-1.328000,-0.030000,0.000000,-0.017000,-0.264000,0.286000,0.124000,-0.004000,0.006000,-0.011000,23.364000,0.615000,53.049999,0
15350,final_static,-0.004000,10.000000,-0.001000,-0.002000,-0.001000,-0.004000,0.000000,7.000000,-434.000000,-161.000000,-1083.000000,9.000000,-133.000000,9.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.129000,0.178000,-1.667000,-0.028000,-0.002000,-0.043000,-0.168000,0.311000,0.097000,-0.003000,0.003000,-0.013000,23.364000,0.615000,53.049999,0
15430,final_static,-0.002000,10.001000,0.000000,-0.004000,-0.001000,-0.001000,0.000000,7.000000,-471.000000,-185.000000,-1016.000000,9.000000,-134.000000,-5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,22.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.268000,0.305000,-1.352000,-0.029000,-0.002000,-0.036000,-0.281000,0.354000,0.156000,-0.004000,0.005000,-0.005000,23.358999,0.618000,53.094002,0
15508,final_static,-0.004000,10.001000,-0.001000,-0.002000,-0.001000,-0.001000,0.001000,13.000000,-463.000000,-189.000000,-1024.000000,9.000000,-139.000000,0.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.109000,0.616000,-0.639000,-0.023000,-0.001000,0.006000,-0.070000,0.404000,0.312000,-0.002000,0.004000,0.002000,23.358999,0.618000,53.094002,0
15590,final_static,-0.004000,10.001000,-0.001000,0.001000,-0.001000,-0.001000,0.004000,8.000000,-451.000000,-195.000000,-994.000000,10.000000,-138.000000,14.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.032000,0.682000,-0.329000,-0.021000,-0.001000,0.007000,-0.295000,0.369000,0.500000,-0.002000,0.006000,0.001000,23.358999,0.618000,53.094002,0
15684,final_static,-0.002000,10.000000,0.000000,-0.006000,-0.001000,-0.001000,0.001000,-3.000000,-440.000000,-184.000000,-942.000000,9.000000,-140.000000,-2.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.513000,0.032000,-1.808000,-0.036000,0.003000,-0.033000,-0.301000,0.236000,0.076000,-0.005000,0.006000,-0.007000,23.364000,0.618000,53.085999,0
15770,final_static,-0.002000,10.000000,-0.001000,0.000000,-0.001000,-0.002000,0.001000,2.000000,-445.000000,-188.000000,-915.000000,7.000000,-143.000000,-7.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.328000,0.483000,-0.886000,-0.026000,0.002000,-0.008000,-0.163000,0.271000,0.333000,-0.004000,0.005000,-0.002000,23.364000,0.618000,53.085999,0
15876,final_static,-0.002000,10.001000,-0.001000,-0.002000,-0.001000,-0.001000,0.000000,-6.000000,-442.000000,-178.000000,-892.000000,7.000000,-138.000000,5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.005000,0.641000,-0.659000,-0.023000,-0.002000,0.016000,-0.092000,0.262000,0.232000,-0.004000,0.005000,-0.002000,23.365000,0.623000,53.048000,0
15958,final_static,-0.002000,10.003000,-0.001000,-0.002000,-0.001000,-0.002000,0.001000,-4.000000,-439.000000,-180.000000,-836.000000,5.000000,-143.000000,20.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.357000,0.691000,-0.698000,-0.022000,-0.004000,0.032000,-0.186000,0.400000,0.247000,-0.001000,0.006000,0.000000,23.365000,0.623000,53.048000,0
16041,final_static,-0.002000,10.001000,-0.001000,-0.004000,-0.001000,-0.002000,0.001000,-5.000000,-441.000000,-172.000000,-799.000000,7.000000,-140.000000,5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.293000,0.191000,-1.196000,-0.028000,0.002000,-0.020000,-0.372000,0.202000,0.126000,-0.005000,0.007000,-0.009000,23.365000,0.606000,53.028999,0
16135,final_static,-0.002000,10.001000,-0.002000,-0.002000,-0.001000,-0.001000,0.001000,-9.000000,-449.000000,-153.000000,-718.000000,8.000000,-144.000000,3.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.062000,0.715000,-0.985000,-0.022000,0.000000,0.006000,-0.044000,0.441000,0.349000,-0.001000,0.004000,0.000000,23.365000,0.606000,53.028999,0
16220,final_static,-0.002000,10.004000,0.000000,-0.002000,-0.001000,-0.001000,0.001000,-10.000000,-444.000000,-155.000000,-709.000000,5.000000,-138.000000,20.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.315000,0.550000,-1.632000,-0.025000,0.000000,-0.027000,-0.247000,0.442000,0.321000,-0.001000,0.006000,-0.009000,23.341999,0.603000,53.042999,0
16308,final_static,-0.001000,10.001000,-0.002000,-0.002000,-0.001000,-0.002000,0.000000,-8.000000,-465.000000,-153.000000,-682.000000,8.000000,-138.000000,17.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.013000,0.608000,-0.543000,-0.024000,0.001000,0.002000,-0.177000,0.388000,0.296000,-0.002000,0.004000,-0.003000,23.341999,0.603000,53.042999,0
16394,final_static,-0.001000,10.000000,-0.002000,-0.005000,-0.001000,0.000000,0.000000,-8.000000,-467.000000,-167.000000,-672.000000,6.000000,-143.000000,0.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.143000,1.074000,-0.365000,-0.021000,0.002000,0.035000,-0.138000,0.549000,0.469000,-0.001000,0.005000,0.009000,23.368000,0.618000,53.108002,0
16479,final_static,-0.002000,10.001000,-0.001000,0.000000,0.000000,-0.002000,0.001000,2.000000,-448.000000,-153.000000,-624.000000,14.000000,-137.000000,2.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.362000,0.646000,-0.466000,-0.021000,-0.001000,0.028000,-0.066000,0.427000,0.430000,0.000000,0.003000,0.002000,23.368000,0.618000,53.108002,0
16558,final_static,-0.002000,10.001000,0.000000,-0.001000,-0.001000,0.000000,0.004000,5.000000,-469.000000,-158.000000,-569.000000,5.000000,-142.000000,0.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.252000,0.335000,-1.237000,-0.026000,0.000000,-0.012000,-0.313000,0.258000,-0.042000,-0.003000,0.006000,-0.007000,23.379999,0.614000,53.062000,0
16648,final_static,-0.002000,10.001000,0.000000,-0.001000,-0.001000,-0.001000,0.004000,10.000000,-460.000000,-156.000000,-512.000000,4.000000,-138.000000,5.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.117000,0.287000,-1.785000,-0.024000,0.000000,-0.031000,-0.269000,0.294000,0.184000,-0.001000,0.006000,-0.007000,23.375999,0.614000,53.111000,0
16728,final_static,-0.002000,10.001000,0.000000,-0.001000,-0.001000,-0.001000,0.001000,9.000000,-448.000000,-152.000000,-473.000000,8.000000,-141.000000,7.000000,23.000000,22.000000,23.000000,23.000000,23.000000,22.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.401000,0.726000,-0.774000,-0.018000,-0.003000,0.028000,-0.102000,0.481000,0.208000,-0.001000,0.004000,0.003000,23.312000,0.609000,53.040001,0
16823,final_static,-0.004000,10.004000,-0.001000,0.000000,-0.001000,-0.004000,0.001000,11.000000,-457.000000,-157.000000,-443.000000,0.000000,-145.000000,-4.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.034000,0.486000,-0.781000,-0.023000,0.000000,0.004000,-0.144000,0.428000,0.289000,-0.001000,0.004000,0.000000,23.312000,0.609000,53.040001,0
16905,final_static,-0.002000,10.001000,0.000000,0.000000,-0.001000,-0.002000,0.001000,8.000000,-456.000000,-145.000000,-402.000000,1.000000,-137.000000,4.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.293000,0.552000,-0.976000,-0.023000,-0.005000,0.008000,-0.093000,0.339000,0.213000,-0.002000,0.003000,0.000000,23.370001,0.621000,53.101002,0
16989,final_static,-0.002000,10.000000,0.000000,0.000000,-0.001000,-0.001000,0.002000,10.000000,-450.000000,-158.000000,-340.000000,-1.000000,-133.000000,-1.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.211000,0.778000,-0.576000,-0.020000,-0.002000,0.024000,-0.209000,0.419000,0.339000,-0.002000,0.006000,0.002000,23.370001,0.621000,53.101002,0
17100,final_static,-0.001000,10.004000,-0.002000,-0.002000,-0.001000,-0.001000,0.001000,13.000000,-467.000000,-148.000000,-305.000000,-1.000000,-139.000000,0.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.467000,0.366000,-1.508000,-0.028000,0.003000,-0.033000,-0.306000,0.276000,0.113000,-0.004000,0.006000,-0.015000,23.368000,0.640000,53.076000,0
17184,final_static,-0.002000,10.004000,-0.005000,-0.002000,-0.001000,-0.001000,0.001000,13.000000,-462.000000,-133.000000,-249.000000,0.000000,-141.000000,2.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.110000,0.609000,-0.709000,-0.025000,0.001000,0.009000,-0.174000,0.415000,0.297000,-0.001000,0.006000,0.000000,23.368000,0.640000,53.076000,0
17278,final_static,-0.004000,10.001000,-0.002000,-0.001000,-0.001000,-0.001000,0.001000,7.000000,-470.000000,-144.000000,-201.000000,0.000000,-144.000000,-6.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.058000,0.375000,-1.562000,-0.023000,-0.002000,-0.040000,-0.262000,0.314000,0.093000,-0.002000,0.004000,-0.006000,23.358999,0.608000,53.077000,0
17364,final_static,-0.002000,9.998000,-0.002000,-0.004000,-0.001000,-0.001000,0.000000,6.000000,-464.000000,-135.000000,-132.000000,0.000000,-144.000000,-1.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.557000,0.309000,-1.555000,-0.027000,0.002000,-0.034000,-0.404000,0.406000,0.207000,-0.002000,0.007000,-0.009000,23.340000,0.613000,53.013000,0
17448,final_static,-0.004000,10.000000,0.001000,0.000000,-0.001000,-0.002000,-0.001000,13.000000,-464.000000,-137.000000,-103.000000,-2.000000,-140.000000,-15.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,-0.005000,1.070000,-0.145000,-0.018000,0.001000,0.016000,-0.273000,0.444000,0.511000,-0.002000,0.007000,0.002000,23.340000,0.613000,53.013000,0
17534,final_static,-0.002000,10.001000,-0.002000,-0.001000,-0.001000,-0.001000,0.000000,18.000000,-467.000000,-137.000000,-72.000000,0.000000,-141.000000,1.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.384000,0.665000,-0.630000,-0.019000,-0.003000,0.007000,-0.035000,0.413000,0.282000,-0.001000,0.004000,-0.003000,23.365000,0.614000,53.111000,0
17614,final_static,-0.002000,10.001000,-0.002000,-0.002000,-0.001000,-0.001000,0.000000,22.000000,-483.000000,-141.000000,-14.000000,-4.000000,-139.000000,-4.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.519000,0.850000,-0.347000,-0.021000,-0.004000,0.027000,-0.135000,0.447000,0.295000,-0.001000,0.005000,-0.002000,23.365000,0.614000,53.111000,0
17694,final_static,-0.004000,10.000000,-0.002000,-0.001000,-0.001000,-0.002000,0.000000,18.000000,-473.000000,-125.000000,35.000000,2.000000,-140.000000,-10.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,42.000000,41.000000,40.000000,40.000000,41.000000,42.000000,45.000000,0.015000,0.736000,-0.494000,-0.022000,0.000000,0.009000,-0.155000,0.446000,0.346000,-0.001000,0.004000,-0.001000,23.348000,0.609000,53.046001,0
# 睿尔曼机械臂力/力矩与关节指标测试报告
| 项目 | 值 |
| --- | --- |
| 测试时间 | `20260612_092010` |
| 控制器地址 | `192.168.1.18:8080` |
| API 版本 | `v1.1.5` |
| 产品版本 | `RM75-6FB` |
| 软件控制器版本 | `` |
| 控制器代际 | `3` |
| 自由度 | `7` |
| 力传感器类型 | `Integrated 6D force` |
| 原始 CSV | `/home/mashiro/project/linkerhand-cpp-sdk/reports/realman_metrics_20260612_092010.csv` |
## 测试范围
- 已测试:六维力/力矩传感器读数、静态噪声/漂移、关节电流/电压/温度、控制器电压/电流/温度、低速小幅关节运动跟踪误差。
- 未测试:接触式力位混合控制闭环精度、外部负载下输出力矩精度、碰撞阈值。这些需要固定工装、标定砝码/力传感器和明确接触方向。
- SDK 当前暴露的是关节电流和末端六维力/力矩数据,没有裸关节力矩指令接口;因此本文中的关节侧“力矩相关”指标以电流作为负载代理量。
## 采样概况
| Phase | 样本数 |
| --- | ---: |
| `static_baseline` | 117 |
| `move_positive` | 13 |
| `return_positive` | 12 |
| `move_negative` | 12 |
| `return_negative` | 11 |
| `final_static` | 33 |
| **合计** | **198** |
## 静态六维力/力矩噪声
单位:`Fx/Fy/Fz = N`,`Mx/My/Mz = Nm`。统计对象为系统外受力 `zero_force_data`。
| 轴 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| Fx | 150 | -0.1786 | 0.0870 | -0.4580 | -0.0010 | 0.4570 | N |
| Fy | 150 | 0.3824 | 0.0920 | 0.1210 | 0.6510 | 0.5300 | N |
| Fz | 150 | 0.2899 | 0.1255 | -0.0420 | 0.6620 | 0.7040 | N |
| Mx | 150 | -0.0020 | 0.0014 | -0.0060 | 0.0000 | 0.0060 | Nm |
| My | 150 | 0.0047 | 0.0012 | 0.0020 | 0.0080 | 0.0060 | Nm |
| Mz | 150 | -0.0023 | 0.0053 | -0.0150 | 0.0130 | 0.0280 | Nm |
## 静态关节电流
| 关节 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| J1 | 150 | -4.2000 | 31.1271 | -80.0000 | 62.0000 | 142.0000 | mA |
| J2 | 150 | -433.0133 | 24.1988 | -483.0000 | -379.0000 | 104.0000 | mA |
| J3 | 150 | -144.5467 | 25.5255 | -195.0000 | -93.0000 | 102.0000 | mA |
| J4 | 150 | -468.1400 | 203.8189 | -1194.0000 | 35.0000 | 1229.0000 | mA |
| J5 | 150 | 8.1867 | 7.5861 | -7.0000 | 26.0000 | 33.0000 | mA |
| J6 | 150 | -138.0867 | 5.6485 | -155.0000 | -124.0000 | 31.0000 | mA |
| J7 | 150 | -11.3600 | 18.0857 | -53.0000 | 24.0000 | 77.0000 | mA |
## 运动过程关节电流
| 关节 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| J1 | 48 | 5.5833 | 21.6164 | -22.0000 | 58.0000 | 80.0000 | mA |
| J2 | 48 | -359.7083 | 465.1949 | -1039.0000 | 405.0000 | 1444.0000 | mA |
| J3 | 48 | -166.4167 | 18.5172 | -209.0000 | -132.0000 | 77.0000 | mA |
| J4 | 48 | -118.2292 | 455.2514 | -1199.0000 | 968.0000 | 2167.0000 | mA |
| J5 | 48 | 10.8750 | 5.4835 | -2.0000 | 20.0000 | 22.0000 | mA |
| J6 | 48 | -144.2083 | 5.0947 | -158.0000 | -133.0000 | 25.0000 | mA |
| J7 | 48 | -10.2083 | 6.2771 | -24.0000 | 2.0000 | 26.0000 | mA |
## 低速小幅运动跟踪
| 步骤 | 持续时间 s | 到位最大关节误差 deg |
| --- | ---: | ---: |
| J2 +delta | 1.144 | 0.0060 |
| return from +delta | 1.166 | 0.0040 |
| J2 -delta | 1.178 | 0.0020 |
| return from -delta | 1.225 | 0.0030 |
运动测试结果:`通过`。
## 控制器状态
| 指标 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| controller_voltage | 198 | 23.3554 | 0.0162 | 23.3120 | 23.4050 | 0.0930 | V |
| controller_current | 198 | 0.6180 | 0.0129 | 0.5820 | 0.6640 | 0.0820 | A |
| controller_temperature | 198 | 53.0622 | 0.0363 | 52.9870 | 53.1330 | 0.1460 | C |
## 接口失败计数
| 接口 | 失败次数 |
| --- | ---: |
| rm_get_current_arm_state | 0 |
| rm_get_current_joint_current | 0 |
| rm_get_current_joint_voltage | 0 |
| rm_get_current_joint_temperature | 0 |
| rm_get_force_data | 0 |
| rm_get_controller_state | 0 |
## 结论
- 本次测试可以评估静态六维力/力矩读数稳定性、关节电流负载变化、基础运动到位误差和控制器供电状态。
- 若要测试真实接触力控或力矩输出能力,需要增加外部测力设备、刚性固定治具、接触方向限位和急停监护,再启用 `rm_set_force_position` 或 `rm_force_position_move_*`
elapsed_ms,phase,joint1_deg,joint2_deg,joint3_deg,joint4_deg,joint5_deg,joint6_deg,joint7_deg,joint1_current_mA,joint2_current_mA,joint3_current_mA,joint4_current_mA,joint5_current_mA,joint6_current_mA,joint7_current_mA,joint1_voltage_V,joint2_voltage_V,joint3_voltage_V,joint4_voltage_V,joint5_voltage_V,joint6_voltage_V,joint7_voltage_V,joint1_temperature_C,joint2_temperature_C,joint3_temperature_C,joint4_temperature_C,joint5_temperature_C,joint6_temperature_C,joint7_temperature_C,raw_Fx,raw_Fy,raw_Fz,raw_Mx,raw_My,raw_Mz,zero_Fx,zero_Fy,zero_Fz,zero_Mx,zero_My,zero_Mz,controller_voltage_V,controller_current_A,controller_temperature_C,controller_err
0,static_baseline,0.153000,0.112000,0.177000,-0.162000,0.038000,-0.251000,0.000000,-62.000000,35.000000,-151.000000,598.000000,61.000000,-81.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.032000,0.479000,-1.778000,0.008000,-0.005000,-0.013000,-0.226000,0.144000,-0.506000,0.028000,0.004000,-0.020000,23.289000,0.585000,35.041000,0
89,static_baseline,0.153000,0.109000,0.179000,-0.163000,0.039000,-0.252000,0.000000,-72.000000,38.000000,-158.000000,602.000000,59.000000,-83.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.414000,0.446000,-1.544000,0.007000,0.003000,-0.018000,-0.278000,0.226000,-0.488000,0.029000,0.004000,-0.018000,23.320999,0.578000,34.997002,0
175,static_baseline,0.152000,0.109000,0.173000,-0.162000,0.038000,-0.251000,0.002000,-57.000000,36.000000,-132.000000,598.000000,59.000000,-83.000000,75.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.354000,0.532000,-2.022000,0.008000,0.000000,-0.040000,-0.365000,0.301000,-0.536000,0.029000,0.006000,-0.026000,23.318001,0.594000,34.970001,0
264,static_baseline,0.152000,0.109000,0.178000,-0.163000,0.039000,-0.252000,0.001000,-65.000000,33.000000,-130.000000,599.000000,62.000000,-79.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.370000,0.441000,-1.942000,0.007000,-0.003000,-0.022000,-0.357000,0.274000,-0.704000,0.030000,0.004000,-0.023000,23.318001,0.594000,34.970001,0
355,static_baseline,0.151000,0.109000,0.177000,-0.163000,0.039000,-0.252000,0.002000,-71.000000,10.000000,-130.000000,594.000000,60.000000,-85.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.140000,0.500000,-2.089000,0.008000,0.001000,-0.033000,-0.323000,0.108000,-0.558000,0.028000,0.004000,-0.026000,23.318001,0.594000,34.970001,0
445,static_baseline,0.151000,0.111000,0.178000,-0.162000,0.039000,-0.251000,-0.001000,-72.000000,12.000000,-129.000000,587.000000,57.000000,-92.000000,63.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.210000,0.556000,-1.798000,0.009000,0.000000,-0.013000,-0.333000,0.443000,-0.490000,0.032000,0.004000,-0.018000,23.336000,0.587000,35.014000,0
523,static_baseline,0.152000,0.108000,0.177000,-0.162000,0.039000,-0.252000,0.000000,-78.000000,18.000000,-115.000000,593.000000,57.000000,-76.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.281000,0.384000,-2.208000,0.005000,-0.005000,-0.026000,-0.357000,0.296000,-0.590000,0.031000,0.003000,-0.023000,23.336000,0.587000,35.014000,0
604,static_baseline,0.152000,0.108000,0.175000,-0.162000,0.039000,-0.252000,0.001000,-74.000000,16.000000,-113.000000,587.000000,56.000000,-85.000000,71.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.303000,0.630000,-1.705000,0.011000,0.000000,-0.011000,-0.262000,0.365000,-0.516000,0.030000,0.003000,-0.020000,23.354000,0.593000,35.013000,0
685,static_baseline,0.152000,0.109000,0.178000,-0.163000,0.038000,-0.255000,-0.001000,-79.000000,23.000000,-119.000000,590.000000,56.000000,-90.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.228000,0.452000,-2.182000,0.006000,0.000000,-0.036000,-0.337000,0.320000,-0.592000,0.031000,0.005000,-0.024000,23.354000,0.593000,35.013000,0
765,static_baseline,0.152000,0.109000,0.178000,-0.163000,0.038000,-0.252000,0.001000,-83.000000,5.000000,-118.000000,593.000000,56.000000,-86.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.480000,0.548000,-1.568000,0.007000,0.001000,-0.026000,-0.369000,0.259000,-0.407000,0.029000,0.005000,-0.022000,23.336000,0.589000,35.027000,0
854,static_baseline,0.153000,0.109000,0.175000,-0.164000,0.039000,-0.251000,0.001000,-81.000000,11.000000,-120.000000,593.000000,55.000000,-78.000000,90.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.429000,0.814000,-1.524000,0.014000,0.003000,-0.001000,-0.455000,0.363000,-0.481000,0.032000,0.006000,-0.020000,23.351000,0.586000,34.953999,0
935,static_baseline,0.152000,0.109000,0.177000,-0.163000,0.039000,-0.252000,0.001000,-86.000000,14.000000,-121.000000,592.000000,58.000000,-90.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.198000,0.321000,-1.479000,0.008000,-0.002000,-0.007000,-0.371000,0.120000,-0.475000,0.029000,0.004000,-0.021000,23.351000,0.586000,34.953999,0
1028,static_baseline,0.152000,0.109000,0.177000,-0.162000,0.039000,-0.255000,0.001000,-67.000000,3.000000,-104.000000,597.000000,51.000000,-89.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.171000,0.369000,-1.731000,0.008000,0.000000,-0.006000,-0.254000,0.122000,-0.607000,0.029000,0.002000,-0.020000,23.304001,0.570000,35.112000,0
1109,static_baseline,0.152000,0.109000,0.175000,-0.163000,0.039000,-0.250000,0.000000,-79.000000,0.000000,-107.000000,603.000000,55.000000,-89.000000,66.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.167000,0.244000,-2.058000,0.006000,-0.002000,-0.031000,-0.333000,0.196000,-0.596000,0.029000,0.004000,-0.025000,23.315001,0.587000,35.008999,0
1204,static_baseline,0.152000,0.109000,0.177000,-0.163000,0.038000,-0.252000,0.001000,-78.000000,19.000000,-87.000000,573.000000,41.000000,-80.000000,66.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.366000,0.643000,-1.835000,0.009000,0.001000,0.001000,-0.360000,0.279000,-0.606000,0.030000,0.005000,-0.016000,23.315001,0.587000,35.008999,0
1290,static_baseline,0.153000,0.107000,0.177000,-0.163000,0.038000,-0.252000,-0.001000,-78.000000,9.000000,-75.000000,580.000000,44.000000,-94.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.337000,0.380000,-1.790000,0.008000,0.000000,-0.020000,-0.276000,0.277000,-0.564000,0.031000,0.003000,-0.021000,23.344000,0.582000,35.000999,0
1374,static_baseline,0.153000,0.109000,0.177000,-0.162000,0.039000,-0.251000,0.001000,-61.000000,8.000000,-73.000000,582.000000,51.000000,-89.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.379000,0.366000,-1.817000,0.007000,0.005000,-0.016000,-0.369000,0.286000,-0.671000,0.030000,0.007000,-0.023000,23.318001,0.589000,35.063999,0
1455,static_baseline,0.152000,0.109000,0.174000,-0.163000,0.039000,-0.252000,0.001000,-66.000000,-3.000000,-97.000000,583.000000,45.000000,-94.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.140000,0.219000,-1.805000,0.006000,-0.001000,-0.026000,-0.307000,0.248000,-0.456000,0.030000,0.004000,-0.025000,23.318001,0.589000,35.063999,0
1539,static_baseline,0.152000,0.109000,0.177000,-0.164000,0.039000,-0.252000,0.001000,-60.000000,7.000000,-101.000000,577.000000,44.000000,-88.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.389000,0.087000,-2.051000,0.002000,0.003000,-0.029000,-0.343000,0.182000,-0.665000,0.029000,0.006000,-0.023000,23.320999,0.570000,35.043999,0
1618,static_baseline,0.153000,0.108000,0.175000,-0.162000,0.038000,-0.255000,0.001000,-58.000000,-7.000000,-108.000000,582.000000,52.000000,-85.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.178000,0.559000,-1.811000,0.009000,0.000000,-0.019000,-0.468000,0.274000,-0.455000,0.029000,0.006000,-0.019000,23.358999,0.594000,35.007999,0
1704,static_baseline,0.152000,0.109000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-62.000000,-12.000000,-99.000000,586.000000,46.000000,-91.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.469000,0.568000,-1.787000,0.009000,0.003000,-0.002000,-0.521000,0.147000,-0.566000,0.029000,0.008000,-0.019000,23.312000,0.574000,35.051998,0
1788,static_baseline,0.152000,0.109000,0.177000,-0.163000,0.038000,-0.252000,0.001000,-73.000000,-1.000000,-103.000000,583.000000,39.000000,-102.000000,55.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.249000,0.367000,-1.344000,0.008000,0.000000,0.000000,-0.412000,0.145000,-0.476000,0.029000,0.006000,-0.020000,23.312000,0.574000,35.051998,0
1868,static_baseline,0.153000,0.109000,0.177000,-0.162000,0.038000,-0.251000,-0.001000,-76.000000,0.000000,-118.000000,578.000000,41.000000,-98.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.152000,0.592000,-1.534000,0.010000,-0.003000,-0.005000,-0.296000,0.139000,-0.396000,0.028000,0.005000,-0.016000,23.337999,0.577000,35.082001,0
1954,static_baseline,0.152000,0.108000,0.175000,-0.166000,0.038000,-0.250000,0.000000,-71.000000,-6.000000,-110.000000,585.000000,50.000000,-93.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.205000,0.215000,-1.813000,0.006000,-0.001000,-0.040000,-0.260000,0.239000,-0.511000,0.029000,0.004000,-0.024000,23.323999,0.593000,35.051998,0
2039,static_baseline,0.152000,0.108000,0.175000,-0.163000,0.038000,-0.252000,0.001000,-71.000000,11.000000,-134.000000,587.000000,44.000000,-84.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.073000,0.370000,-1.026000,0.008000,-0.004000,-0.008000,-0.336000,0.115000,-0.426000,0.028000,0.006000,-0.018000,23.323999,0.593000,35.051998,0
2129,static_baseline,0.153000,0.109000,0.177000,-0.160000,0.038000,-0.251000,0.000000,-71.000000,5.000000,-126.000000,593.000000,50.000000,-84.000000,65.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.068000,0.573000,-1.453000,0.009000,-0.004000,0.004000,-0.208000,0.303000,-0.457000,0.030000,0.002000,-0.016000,23.327999,0.584000,35.035999,0
2208,static_baseline,0.153000,0.109000,0.175000,-0.163000,0.039000,-0.255000,0.000000,-57.000000,10.000000,-125.000000,589.000000,50.000000,-76.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.177000,0.369000,-1.868000,0.010000,-0.001000,-0.025000,-0.311000,0.235000,-0.586000,0.030000,0.005000,-0.027000,23.322001,0.582000,35.050999,0
2300,static_baseline,0.156000,0.109000,0.175000,-0.159000,0.038000,-0.250000,0.001000,-75.000000,10.000000,-83.000000,574.000000,66.000000,-93.000000,75.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.009000,0.492000,-1.388000,0.010000,-0.003000,0.000000,-0.283000,0.288000,-0.522000,0.031000,0.006000,-0.015000,23.344999,0.591000,35.022999,0
2394,static_baseline,0.152000,0.109000,0.174000,-0.163000,0.039000,-0.252000,0.000000,-64.000000,-6.000000,-92.000000,586.000000,50.000000,-100.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.214000,0.515000,-1.977000,0.010000,-0.001000,-0.032000,-0.416000,0.266000,-0.678000,0.030000,0.006000,-0.025000,23.344999,0.591000,35.022999,0
2479,static_baseline,0.156000,0.109000,0.177000,-0.162000,0.039000,-0.251000,0.000000,-61.000000,-12.000000,-105.000000,569.000000,49.000000,-81.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.127000,0.768000,-1.765000,0.014000,0.000000,-0.020000,-0.229000,0.248000,-0.557000,0.031000,0.003000,-0.021000,23.316000,0.580000,35.061001,0
2563,static_baseline,0.152000,0.108000,0.177000,-0.162000,0.038000,-0.251000,0.000000,-63.000000,5.000000,-112.000000,572.000000,50.000000,-88.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.155000,0.836000,-1.821000,0.015000,0.000000,-0.006000,-0.318000,0.264000,-0.567000,0.030000,0.002000,-0.023000,23.326000,0.575000,35.042999,0
2644,static_baseline,0.156000,0.108000,0.177000,-0.164000,0.039000,-0.252000,0.001000,-53.000000,12.000000,-90.000000,560.000000,50.000000,-85.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.314000,0.151000,-1.525000,0.006000,0.002000,-0.015000,-0.306000,0.161000,-0.442000,0.028000,0.004000,-0.018000,23.325001,0.584000,35.040001,0
2735,static_baseline,0.151000,0.109000,0.177000,-0.163000,0.038000,-0.255000,0.001000,-78.000000,5.000000,-93.000000,573.000000,53.000000,-86.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.512000,0.305000,-1.988000,0.007000,0.000000,-0.041000,-0.357000,0.189000,-0.586000,0.029000,0.005000,-0.028000,23.325001,0.584000,35.040001,0
2820,static_baseline,0.152000,0.109000,0.177000,-0.163000,0.038000,-0.251000,0.000000,-67.000000,-6.000000,-105.000000,573.000000,52.000000,-88.000000,87.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.229000,0.491000,-1.267000,0.012000,0.000000,0.000000,-0.362000,0.232000,-0.471000,0.030000,0.004000,-0.018000,23.334000,0.586000,35.053001,0
2910,static_baseline,0.153000,0.111000,0.177000,-0.162000,0.038000,-0.252000,-0.001000,-54.000000,-19.000000,-97.000000,571.000000,60.000000,-91.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.291000,0.120000,-1.460000,0.002000,0.000000,-0.005000,-0.327000,0.185000,-0.524000,0.028000,0.004000,-0.016000,23.320999,0.588000,35.040001,0
2995,static_baseline,0.153000,0.109000,0.177000,-0.163000,0.039000,-0.248000,-0.001000,-65.000000,-13.000000,-100.000000,567.000000,52.000000,-87.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.226000,0.714000,-1.720000,0.012000,-0.001000,-0.018000,-0.399000,0.304000,-0.545000,0.030000,0.004000,-0.024000,23.320999,0.588000,35.040001,0
3085,static_baseline,0.153000,0.111000,0.175000,-0.163000,0.037000,-0.255000,0.002000,-54.000000,15.000000,-113.000000,562.000000,45.000000,-95.000000,81.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.127000,0.679000,-1.404000,0.013000,-0.001000,-0.014000,-0.331000,0.353000,-0.507000,0.032000,0.005000,-0.020000,23.334999,0.592000,35.049999,0
3170,static_baseline,0.153000,0.108000,0.174000,-0.162000,0.038000,-0.251000,0.001000,-43.000000,19.000000,-88.000000,564.000000,47.000000,-92.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.053000,0.766000,-1.462000,0.014000,0.000000,-0.006000,-0.331000,0.255000,-0.473000,0.030000,0.006000,-0.017000,23.334999,0.592000,35.049999,0
3250,static_baseline,0.152000,0.111000,0.177000,-0.160000,0.038000,-0.252000,0.001000,-32.000000,17.000000,-100.000000,568.000000,57.000000,-88.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.323000,0.474000,-1.758000,0.009000,0.004000,-0.004000,-0.379000,0.221000,-0.495000,0.031000,0.005000,-0.017000,23.334999,0.592000,35.049999,0
3334,static_baseline,0.153000,0.109000,0.174000,-0.163000,0.038000,-0.251000,0.001000,-27.000000,4.000000,-112.000000,557.000000,57.000000,-90.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.493000,0.478000,-1.661000,0.012000,0.002000,-0.026000,-0.400000,0.275000,-0.509000,0.030000,0.006000,-0.020000,23.356001,0.590000,35.054001,0
3415,static_baseline,0.152000,0.111000,0.174000,-0.160000,0.039000,-0.250000,0.000000,-30.000000,9.000000,-101.000000,555.000000,52.000000,-92.000000,84.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.364000,0.335000,-1.847000,0.008000,0.000000,-0.041000,-0.443000,0.217000,-0.536000,0.030000,0.006000,-0.026000,23.302999,0.591000,35.116001,0
3504,static_baseline,0.152000,0.112000,0.179000,-0.163000,0.039000,-0.251000,0.001000,-37.000000,11.000000,-85.000000,552.000000,61.000000,-91.000000,86.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.295000,0.638000,-1.610000,0.010000,0.001000,-0.010000,-0.228000,0.307000,-0.464000,0.030000,0.002000,-0.020000,23.302999,0.591000,35.116001,0
3591,static_baseline,0.156000,0.109000,0.177000,-0.163000,0.038000,-0.251000,-0.001000,-31.000000,26.000000,-96.000000,553.000000,53.000000,-95.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.468000,-0.095000,-2.092000,0.004000,0.001000,-0.038000,-0.388000,0.115000,-0.750000,0.029000,0.005000,-0.027000,23.351000,0.588000,35.061001,0
3680,static_baseline,0.153000,0.109000,0.175000,-0.163000,0.039000,-0.251000,0.000000,-27.000000,13.000000,-104.000000,548.000000,63.000000,-86.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.497000,0.244000,-1.859000,0.006000,0.001000,-0.031000,-0.540000,0.276000,-0.446000,0.029000,0.007000,-0.028000,23.351000,0.588000,35.061001,0
3760,static_baseline,0.153000,0.111000,0.178000,-0.160000,0.039000,-0.252000,0.000000,-40.000000,23.000000,-104.000000,537.000000,61.000000,-101.000000,85.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.385000,0.432000,-2.020000,0.005000,0.001000,-0.037000,-0.475000,0.320000,-0.476000,0.030000,0.007000,-0.024000,23.336000,0.577000,35.084000,0
3846,static_baseline,0.151000,0.108000,0.174000,-0.163000,0.039000,-0.252000,0.001000,-6.000000,18.000000,-99.000000,532.000000,64.000000,-101.000000,91.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.329000,0.501000,-1.084000,0.010000,0.000000,0.001000,-0.453000,0.248000,-0.265000,0.031000,0.006000,-0.019000,23.347000,0.590000,35.133999,0
3930,static_baseline,0.153000,0.109000,0.178000,-0.163000,0.038000,-0.250000,0.000000,-17.000000,17.000000,-100.000000,533.000000,66.000000,-104.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.229000,0.529000,-1.573000,0.007000,0.000000,-0.015000,-0.292000,0.328000,-0.579000,0.031000,0.001000,-0.021000,23.347000,0.590000,35.133999,0
4015,static_baseline,0.153000,0.109000,0.178000,-0.162000,0.039000,-0.251000,0.000000,-13.000000,26.000000,-91.000000,535.000000,63.000000,-99.000000,85.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.264000,0.196000,-2.074000,0.006000,-0.005000,-0.035000,-0.294000,0.079000,-0.492000,0.028000,0.003000,-0.025000,23.358000,0.576000,35.098000,0
4094,static_baseline,0.152000,0.108000,0.177000,-0.164000,0.038000,-0.252000,0.000000,-20.000000,20.000000,-110.000000,534.000000,63.000000,-101.000000,83.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.245000,0.420000,-1.301000,0.007000,0.004000,-0.009000,-0.406000,0.384000,-0.325000,0.032000,0.008000,-0.018000,23.323999,0.587000,35.127998,0
4174,static_baseline,0.153000,0.109000,0.177000,-0.163000,0.039000,-0.251000,0.000000,-8.000000,27.000000,-90.000000,529.000000,63.000000,-97.000000,90.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.154000,0.603000,-1.730000,0.009000,-0.003000,-0.028000,-0.397000,0.306000,-0.607000,0.030000,0.005000,-0.024000,23.323999,0.587000,35.127998,0
4255,static_baseline,0.151000,0.111000,0.177000,-0.162000,0.038000,-0.251000,0.001000,-18.000000,37.000000,-98.000000,540.000000,64.000000,-97.000000,83.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.314000,0.238000,-1.729000,0.008000,0.002000,-0.044000,-0.261000,0.196000,-0.462000,0.030000,0.003000,-0.025000,23.332001,0.582000,35.049000,0
4340,static_baseline,0.156000,0.111000,0.177000,-0.163000,0.038000,-0.250000,0.000000,-29.000000,39.000000,-115.000000,525.000000,57.000000,-106.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.177000,0.035000,-2.009000,0.001000,0.000000,-0.039000,-0.390000,0.101000,-0.510000,0.027000,0.005000,-0.029000,23.332001,0.582000,35.049000,0
4420,static_baseline,0.153000,0.111000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-19.000000,42.000000,-100.000000,522.000000,64.000000,-96.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.084000,0.594000,-1.641000,0.013000,-0.002000,-0.016000,-0.270000,0.301000,-0.526000,0.031000,0.004000,-0.024000,23.322001,0.577000,35.123001,0
4505,static_baseline,0.153000,0.109000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-11.000000,38.000000,-112.000000,524.000000,63.000000,-107.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.311000,0.364000,-1.553000,0.008000,0.002000,-0.013000,-0.326000,0.353000,-0.474000,0.032000,0.005000,-0.020000,23.334999,0.590000,35.102001,0
4584,static_baseline,0.153000,0.109000,0.174000,-0.163000,0.038000,-0.252000,0.000000,-20.000000,43.000000,-99.000000,520.000000,64.000000,-109.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.164000,1.016000,-1.427000,0.016000,-0.002000,0.003000,-0.409000,0.434000,-0.500000,0.032000,0.006000,-0.021000,23.334999,0.590000,35.102001,0
4670,static_baseline,0.153000,0.111000,0.178000,-0.163000,0.039000,-0.252000,0.000000,-16.000000,36.000000,-90.000000,522.000000,62.000000,-103.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.334000,0.533000,-1.687000,0.007000,0.001000,0.000000,-0.364000,0.360000,-0.467000,0.031000,0.004000,-0.015000,23.327000,0.575000,35.095001,0
4754,static_baseline,0.153000,0.108000,0.177000,-0.163000,0.039000,-0.251000,0.000000,-21.000000,18.000000,-96.000000,534.000000,53.000000,-97.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.241000,0.369000,-1.844000,0.008000,-0.003000,-0.022000,-0.440000,0.330000,-0.455000,0.030000,0.005000,-0.017000,23.327000,0.575000,35.095001,0
4834,static_baseline,0.151000,0.109000,0.178000,-0.163000,0.041000,-0.251000,0.000000,-6.000000,20.000000,-95.000000,510.000000,58.000000,-91.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.492000,0.027000,-2.003000,0.002000,0.001000,-0.044000,-0.474000,0.150000,-0.734000,0.029000,0.007000,-0.028000,23.358000,0.565000,35.105000,0
4922,static_baseline,0.152000,0.109000,0.175000,-0.162000,0.038000,-0.255000,0.000000,-10.000000,4.000000,-89.000000,523.000000,56.000000,-105.000000,57.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.236000,0.770000,-1.843000,0.012000,0.001000,-0.016000,-0.411000,0.212000,-0.593000,0.030000,0.007000,-0.022000,23.327999,0.588000,35.110001,0
5005,static_baseline,0.153000,0.109000,0.177000,-0.163000,0.039000,-0.251000,0.000000,-22.000000,-2.000000,-94.000000,513.000000,51.000000,-110.000000,59.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.214000,-0.139000,-1.689000,0.003000,-0.002000,-0.027000,-0.394000,0.213000,-0.521000,0.030000,0.004000,-0.024000,23.344000,0.579000,35.162998,0
5099,static_baseline,0.152000,0.108000,0.178000,-0.160000,0.038000,-0.251000,-0.001000,-31.000000,9.000000,-70.000000,518.000000,54.000000,-101.000000,57.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.299000,0.208000,-2.036000,0.007000,0.000000,-0.042000,-0.518000,0.269000,-0.616000,0.031000,0.006000,-0.027000,23.344000,0.579000,35.162998,0
5181,static_baseline,0.153000,0.111000,0.177000,-0.166000,0.038000,-0.252000,0.001000,-35.000000,16.000000,-84.000000,522.000000,51.000000,-102.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.324000,0.210000,-1.834000,0.005000,-0.001000,-0.041000,-0.490000,0.166000,-0.685000,0.029000,0.006000,-0.027000,23.336000,0.596000,35.109001,0
5273,static_baseline,0.152000,0.111000,0.177000,-0.164000,0.038000,-0.255000,0.001000,-40.000000,27.000000,-86.000000,517.000000,54.000000,-93.000000,59.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.230000,0.722000,-1.258000,0.009000,0.000000,-0.004000,-0.308000,0.264000,-0.467000,0.030000,0.003000,-0.016000,23.344999,0.582000,35.110001,0
5354,static_baseline,0.153000,0.108000,0.173000,-0.164000,0.039000,-0.255000,0.000000,-27.000000,33.000000,-63.000000,535.000000,53.000000,-103.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.218000,0.065000,-1.998000,0.000000,0.000000,-0.036000,-0.418000,0.100000,-0.589000,0.028000,0.006000,-0.023000,23.343000,0.590000,35.112000,0
5446,static_baseline,0.153000,0.109000,0.177000,-0.162000,0.039000,-0.251000,0.001000,-23.000000,27.000000,-78.000000,536.000000,50.000000,-101.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.014000,0.608000,-1.487000,0.014000,-0.002000,0.000000,-0.402000,0.283000,-0.670000,0.030000,0.006000,-0.017000,23.343000,0.590000,35.112000,0
5532,static_baseline,0.156000,0.108000,0.175000,-0.164000,0.038000,-0.251000,0.001000,-9.000000,35.000000,-84.000000,540.000000,49.000000,-93.000000,61.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.428000,0.154000,-1.844000,0.005000,-0.001000,-0.023000,-0.350000,0.197000,-0.534000,0.031000,0.003000,-0.019000,23.330000,0.593000,35.118999,0
5612,static_baseline,0.152000,0.111000,0.178000,-0.163000,0.039000,-0.250000,0.001000,-12.000000,45.000000,-76.000000,540.000000,50.000000,-98.000000,50.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.568000,0.280000,-1.933000,0.006000,0.004000,-0.033000,-0.331000,0.141000,-0.540000,0.028000,0.004000,-0.022000,23.297001,0.596000,35.129002,0
5699,static_baseline,0.152000,0.108000,0.175000,-0.163000,0.039000,-0.252000,0.000000,-19.000000,53.000000,-71.000000,529.000000,52.000000,-89.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.214000,0.128000,-1.781000,0.005000,-0.003000,-0.038000,-0.369000,0.237000,-0.550000,0.029000,0.004000,-0.025000,23.297001,0.596000,35.129002,0
5782,static_baseline,0.152000,0.111000,0.178000,-0.162000,0.039000,-0.252000,0.001000,-15.000000,55.000000,-69.000000,527.000000,55.000000,-107.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.286000,0.485000,-1.814000,0.006000,0.001000,-0.012000,-0.319000,0.342000,-0.597000,0.030000,0.004000,-0.019000,23.337999,0.597000,35.111000,0
5868,static_baseline,0.153000,0.109000,0.177000,-0.164000,0.041000,-0.252000,0.000000,5.000000,66.000000,-62.000000,543.000000,56.000000,-108.000000,59.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.383000,0.588000,-1.604000,0.013000,0.002000,-0.004000,-0.338000,0.261000,-0.395000,0.030000,0.005000,-0.015000,23.330000,0.591000,35.132999,0
5952,static_baseline,0.153000,0.109000,0.178000,-0.163000,0.038000,-0.252000,0.001000,6.000000,63.000000,-73.000000,546.000000,51.000000,-103.000000,63.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.332000,0.907000,-1.545000,0.018000,0.000000,0.000000,-0.385000,0.282000,-0.539000,0.032000,0.004000,-0.018000,23.330000,0.591000,35.132999,0
6032,static_baseline,0.153000,0.107000,0.177000,-0.163000,0.039000,-0.251000,-0.001000,1.000000,66.000000,-82.000000,544.000000,59.000000,-108.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.079000,0.397000,-1.763000,0.010000,-0.002000,-0.042000,-0.278000,0.207000,-0.529000,0.029000,0.003000,-0.027000,23.330000,0.591000,35.132999,0
6118,static_baseline,0.152000,0.111000,0.177000,-0.160000,0.038000,-0.252000,-0.001000,-6.000000,62.000000,-68.000000,550.000000,59.000000,-104.000000,66.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.743000,0.216000,-1.804000,0.004000,0.004000,-0.023000,-0.388000,0.125000,-0.496000,0.029000,0.004000,-0.021000,23.353001,0.581000,35.117001,0
6198,static_baseline,0.152000,0.108000,0.175000,-0.163000,0.039000,-0.255000,0.000000,-13.000000,63.000000,-55.000000,549.000000,62.000000,-110.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.571000,0.328000,-1.923000,0.009000,0.004000,-0.027000,-0.343000,0.279000,-0.517000,0.030000,0.005000,-0.024000,23.354000,0.573000,35.084000,0
6277,static_baseline,0.156000,0.111000,0.175000,-0.162000,0.038000,-0.250000,-0.001000,-21.000000,61.000000,-71.000000,558.000000,61.000000,-103.000000,93.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.182000,0.288000,-1.851000,0.005000,0.001000,-0.025000,-0.277000,0.243000,-0.612000,0.031000,0.004000,-0.022000,23.354000,0.573000,35.084000,0
6356,static_baseline,0.153000,0.109000,0.175000,-0.163000,0.037000,-0.252000,0.000000,-29.000000,54.000000,-67.000000,545.000000,70.000000,-102.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.232000,0.305000,-1.731000,0.005000,-0.001000,-0.035000,-0.393000,0.174000,-0.558000,0.028000,0.004000,-0.030000,23.316999,0.595000,35.119999,0
6444,static_baseline,0.153000,0.107000,0.175000,-0.164000,0.039000,-0.251000,0.001000,-30.000000,70.000000,-55.000000,544.000000,61.000000,-96.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.171000,0.229000,-1.907000,0.004000,-0.001000,-0.025000,-0.378000,0.188000,-0.405000,0.030000,0.005000,-0.019000,23.316999,0.595000,35.119999,0
6528,static_baseline,0.156000,0.109000,0.177000,-0.162000,0.038000,-0.255000,0.001000,-33.000000,67.000000,-53.000000,548.000000,63.000000,-113.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.215000,0.493000,-1.235000,0.009000,-0.003000,-0.002000,-0.243000,0.427000,-0.420000,0.032000,0.003000,-0.017000,23.325001,0.584000,35.127998,0
6607,static_baseline,0.153000,0.111000,0.177000,-0.163000,0.038000,-0.252000,-0.001000,-28.000000,57.000000,-46.000000,546.000000,73.000000,-98.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.288000,0.552000,-1.297000,0.011000,0.001000,-0.006000,-0.336000,0.179000,-0.525000,0.029000,0.005000,-0.015000,23.325001,0.584000,35.127998,0
6694,static_baseline,0.151000,0.105000,0.177000,-0.164000,0.039000,-0.252000,0.000000,-33.000000,71.000000,-52.000000,544.000000,65.000000,-100.000000,87.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.278000,0.592000,-2.009000,0.010000,0.000000,-0.039000,-0.275000,0.257000,-0.619000,0.029000,0.003000,-0.027000,23.365000,0.583000,35.132999,0
6783,static_baseline,0.153000,0.109000,0.175000,-0.164000,0.038000,-0.251000,-0.001000,-33.000000,53.000000,-33.000000,544.000000,65.000000,-103.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.448000,0.575000,-1.740000,0.010000,0.002000,-0.022000,-0.317000,0.279000,-0.519000,0.031000,0.005000,-0.021000,23.322001,0.584000,35.138000,0
6868,static_baseline,0.152000,0.111000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-23.000000,61.000000,-47.000000,545.000000,62.000000,-102.000000,90.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.055000,0.544000,-1.499000,0.009000,-0.002000,-0.009000,-0.354000,0.267000,-0.479000,0.030000,0.005000,-0.018000,23.322001,0.584000,35.138000,0
6954,static_baseline,0.153000,0.107000,0.175000,-0.163000,0.038000,-0.251000,0.001000,-15.000000,56.000000,-48.000000,552.000000,64.000000,-98.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.376000,0.466000,-2.147000,0.010000,0.000000,-0.041000,-0.397000,0.138000,-0.623000,0.029000,0.005000,-0.025000,23.341999,0.602000,35.133999,0
7042,static_baseline,0.153000,0.109000,0.177000,-0.164000,0.038000,-0.251000,0.002000,-8.000000,44.000000,-36.000000,557.000000,68.000000,-91.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.341000,0.372000,-1.898000,0.003000,0.000000,-0.039000,-0.379000,0.219000,-0.534000,0.029000,0.005000,-0.027000,23.327999,0.601000,35.172001,0
7123,static_baseline,0.152000,0.108000,0.177000,-0.162000,0.038000,-0.251000,0.001000,-13.000000,49.000000,-18.000000,558.000000,70.000000,-98.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.161000,0.292000,-1.489000,0.007000,-0.003000,0.001000,-0.319000,0.162000,-0.647000,0.030000,0.004000,-0.018000,23.351000,0.578000,35.134998,0
7211,static_baseline,0.152000,0.111000,0.177000,-0.163000,0.038000,-0.251000,0.001000,-12.000000,27.000000,-27.000000,550.000000,69.000000,-97.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.225000,0.743000,-1.608000,0.011000,0.000000,-0.002000,-0.328000,0.390000,-0.573000,0.031000,0.005000,-0.020000,23.351000,0.578000,35.134998,0
7293,static_baseline,0.156000,0.109000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-14.000000,38.000000,-20.000000,563.000000,68.000000,-88.000000,58.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.307000,0.492000,-1.862000,0.007000,0.000000,-0.033000,-0.333000,0.187000,-0.680000,0.030000,0.004000,-0.027000,23.323000,0.592000,35.131001,0
7377,static_baseline,0.153000,0.109000,0.177000,-0.163000,0.037000,-0.252000,-0.001000,-5.000000,42.000000,-12.000000,569.000000,77.000000,-96.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.230000,0.070000,-1.481000,0.005000,0.003000,-0.019000,-0.230000,0.176000,-0.391000,0.028000,0.004000,-0.022000,23.323000,0.581000,35.098000,0
7466,static_baseline,0.151000,0.111000,0.175000,-0.162000,0.038000,-0.250000,-0.001000,-4.000000,52.000000,-17.000000,558.000000,62.000000,-107.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.040000,0.525000,-1.629000,0.010000,0.000000,0.002000,-0.328000,0.111000,-0.643000,0.028000,0.004000,-0.020000,23.323000,0.581000,35.098000,0
7569,static_baseline,0.153000,0.109000,0.178000,-0.163000,0.039000,-0.251000,0.001000,0.000000,36.000000,-3.000000,574.000000,74.000000,-98.000000,71.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.055000,0.414000,-1.200000,0.007000,0.000000,0.000000,-0.290000,0.168000,-0.563000,0.030000,0.004000,-0.019000,23.316999,0.575000,35.178001,0
7652,static_baseline,0.153000,0.109000,0.177000,-0.163000,0.037000,-0.252000,0.000000,3.000000,18.000000,1.000000,578.000000,68.000000,-95.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.289000,0.530000,-1.916000,0.006000,0.000000,-0.035000,-0.388000,0.272000,-0.624000,0.031000,0.005000,-0.028000,23.316999,0.577000,35.125999,0
7737,static_baseline,0.153000,0.109000,0.178000,-0.162000,0.038000,-0.251000,-0.001000,1.000000,41.000000,11.000000,579.000000,73.000000,-98.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.322000,0.297000,-2.118000,0.004000,0.000000,-0.037000,-0.387000,0.200000,-0.719000,0.028000,0.005000,-0.029000,23.320999,0.584000,35.192001,0
7822,static_baseline,0.153000,0.109000,0.175000,-0.162000,0.038000,-0.251000,0.000000,-12.000000,47.000000,-4.000000,587.000000,79.000000,-99.000000,65.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.329000,0.615000,-1.982000,0.009000,-0.002000,-0.038000,-0.256000,0.213000,-0.652000,0.028000,0.002000,-0.026000,23.320999,0.584000,35.192001,0
7903,static_baseline,0.152000,0.111000,0.175000,-0.163000,0.039000,-0.252000,0.001000,-5.000000,41.000000,-2.000000,591.000000,76.000000,-92.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.116000,0.081000,-1.823000,0.005000,-0.002000,-0.041000,-0.283000,0.184000,-0.509000,0.029000,0.002000,-0.030000,23.327999,0.588000,35.200001,0
7983,static_baseline,0.152000,0.111000,0.177000,-0.162000,0.039000,-0.251000,0.000000,-1.000000,35.000000,-21.000000,593.000000,77.000000,-102.000000,63.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.217000,0.716000,-1.718000,0.012000,-0.001000,-0.006000,-0.388000,0.272000,-0.633000,0.029000,0.006000,-0.019000,23.327999,0.588000,35.200001,0
8069,static_baseline,0.152000,0.108000,0.178000,-0.162000,0.039000,-0.251000,0.001000,-15.000000,28.000000,-17.000000,604.000000,78.000000,-89.000000,56.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.097000,0.445000,-1.157000,0.010000,0.000000,-0.006000,-0.272000,0.199000,-0.463000,0.029000,0.005000,-0.017000,23.323000,0.586000,35.117001,0
8152,static_baseline,0.152000,0.109000,0.177000,-0.162000,0.039000,-0.252000,-0.001000,-11.000000,25.000000,-23.000000,596.000000,81.000000,-92.000000,49.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.356000,0.288000,-2.085000,0.006000,0.001000,-0.028000,-0.352000,0.273000,-0.707000,0.030000,0.004000,-0.021000,23.312000,0.591000,35.167999,0
8237,static_baseline,0.153000,0.109000,0.174000,-0.162000,0.038000,-0.251000,-0.001000,-9.000000,41.000000,-24.000000,587.000000,79.000000,-95.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.306000,0.369000,-2.319000,0.007000,-0.003000,-0.031000,-0.241000,0.309000,-0.763000,0.030000,0.002000,-0.024000,23.333000,0.577000,35.182999,0
8322,static_baseline,0.153000,0.111000,0.177000,-0.164000,0.039000,-0.255000,0.000000,-16.000000,38.000000,-22.000000,594.000000,81.000000,-88.000000,49.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.159000,0.285000,-1.762000,0.007000,0.000000,-0.031000,-0.290000,0.145000,-0.475000,0.028000,0.004000,-0.023000,23.333000,0.577000,35.182999,0
8401,static_baseline,0.151000,0.111000,0.177000,-0.162000,0.039000,-0.252000,0.000000,-14.000000,38.000000,-17.000000,578.000000,74.000000,-99.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.263000,0.647000,-1.536000,0.015000,-0.001000,0.004000,-0.352000,0.333000,-0.415000,0.033000,0.005000,-0.016000,23.325001,0.586000,35.178001,0
8493,static_baseline,0.156000,0.108000,0.178000,-0.164000,0.039000,-0.252000,0.000000,-11.000000,36.000000,-10.000000,583.000000,77.000000,-80.000000,61.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.081000,0.494000,-1.577000,0.008000,-0.002000,0.000000,-0.299000,0.197000,-0.465000,0.029000,0.004000,-0.018000,23.325001,0.595000,35.186001,0
8573,static_baseline,0.153000,0.107000,0.175000,-0.162000,0.039000,-0.252000,0.000000,-12.000000,38.000000,-23.000000,581.000000,70.000000,-88.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.272000,0.534000,-2.115000,0.010000,-0.002000,-0.028000,-0.352000,0.290000,-0.665000,0.031000,0.004000,-0.022000,23.357000,0.588000,35.185001,0
8667,static_baseline,0.153000,0.109000,0.175000,-0.163000,0.038000,-0.252000,0.000000,-16.000000,35.000000,-25.000000,578.000000,70.000000,-92.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.108000,0.546000,-1.477000,0.007000,0.000000,-0.004000,-0.259000,0.223000,-0.444000,0.028000,0.004000,-0.019000,23.357000,0.588000,35.185001,0
8750,static_baseline,0.153000,0.114000,0.177000,-0.162000,0.039000,-0.252000,0.000000,2.000000,42.000000,-30.000000,577.000000,70.000000,-88.000000,65.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.252000,0.503000,-1.538000,0.009000,0.000000,0.008000,-0.318000,0.286000,-0.328000,0.031000,0.004000,-0.015000,23.319000,0.582000,35.124001,0
8833,static_baseline,0.152000,0.109000,0.175000,-0.162000,0.038000,-0.252000,0.001000,-14.000000,39.000000,-19.000000,581.000000,70.000000,-84.000000,62.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.221000,0.423000,-1.532000,0.008000,0.000000,-0.004000,-0.314000,0.175000,-0.395000,0.030000,0.003000,-0.015000,23.319000,0.582000,35.124001,0
8912,static_baseline,0.156000,0.109000,0.175000,-0.163000,0.039000,-0.255000,0.001000,-5.000000,56.000000,-26.000000,571.000000,66.000000,-87.000000,55.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.377000,0.607000,-1.790000,0.010000,0.000000,-0.029000,-0.319000,0.328000,-0.434000,0.032000,0.003000,-0.024000,23.316999,0.586000,35.168999,0
9007,static_baseline,0.152000,0.107000,0.177000,-0.163000,0.038000,-0.251000,0.000000,-8.000000,42.000000,-25.000000,569.000000,67.000000,-84.000000,63.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.092000,0.666000,-1.176000,0.011000,0.000000,-0.018000,-0.299000,0.332000,-0.459000,0.031000,0.005000,-0.019000,23.316999,0.586000,35.168999,0
9097,static_baseline,0.153000,0.111000,0.177000,-0.162000,0.038000,-0.255000,0.000000,-6.000000,41.000000,0.000000,578.000000,61.000000,-90.000000,49.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.570000,0.418000,-1.682000,0.007000,0.005000,-0.034000,-0.442000,0.183000,-0.553000,0.029000,0.006000,-0.023000,23.330000,0.578000,35.179001,0
9184,static_baseline,0.152000,0.109000,0.177000,-0.163000,0.038000,-0.250000,-0.001000,-14.000000,34.000000,2.000000,574.000000,64.000000,-109.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.007000,0.395000,-1.596000,0.009000,-0.003000,0.001000,-0.284000,0.265000,-0.482000,0.032000,0.003000,-0.017000,23.326000,0.595000,35.148998,0
9278,static_baseline,0.153000,0.108000,0.177000,-0.163000,0.038000,-0.255000,0.000000,-6.000000,33.000000,16.000000,572.000000,66.000000,-101.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.234000,0.113000,-1.959000,0.003000,-0.001000,-0.035000,-0.228000,0.160000,-0.475000,0.028000,0.003000,-0.026000,23.326000,0.595000,35.148998,0
9357,static_baseline,0.152000,0.109000,0.175000,-0.160000,0.038000,-0.255000,0.001000,-25.000000,39.000000,-4.000000,560.000000,67.000000,-92.000000,58.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.266000,0.180000,-1.722000,0.006000,-0.001000,-0.039000,-0.242000,0.170000,-0.516000,0.028000,0.003000,-0.025000,23.337999,0.581000,35.210999,0
9441,static_baseline,0.151000,0.109000,0.177000,-0.163000,0.039000,-0.250000,0.000000,-25.000000,46.000000,4.000000,555.000000,68.000000,-86.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.035000,0.331000,-2.025000,0.006000,-0.005000,-0.041000,-0.287000,0.166000,-0.594000,0.029000,0.003000,-0.027000,23.337999,0.581000,35.210999,0
9522,static_baseline,0.152000,0.108000,0.178000,-0.162000,0.039000,-0.251000,0.000000,-24.000000,59.000000,12.000000,554.000000,70.000000,-79.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.275000,0.370000,-1.781000,0.008000,-0.003000,0.000000,-0.259000,0.334000,-0.563000,0.031000,0.003000,-0.016000,23.337000,0.590000,35.166000,0
9613,static_baseline,0.153000,0.109000,0.174000,-0.162000,0.039000,-0.251000,0.000000,-20.000000,59.000000,16.000000,546.000000,75.000000,-83.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.406000,0.512000,-1.220000,0.009000,0.001000,-0.011000,-0.444000,0.286000,-0.443000,0.031000,0.007000,-0.017000,23.337000,0.590000,35.166000,0
9692,static_baseline,0.153000,0.108000,0.178000,-0.163000,0.039000,-0.252000,-0.001000,-26.000000,60.000000,15.000000,551.000000,76.000000,-87.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.013000,0.617000,-1.465000,0.013000,0.000000,0.004000,-0.383000,0.227000,-0.485000,0.029000,0.005000,-0.019000,23.315001,0.576000,35.152000,0
9773,static_baseline,0.152000,0.111000,0.178000,-0.163000,0.038000,-0.252000,0.000000,-17.000000,63.000000,29.000000,560.000000,81.000000,-78.000000,65.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.303000,0.607000,-1.553000,0.013000,0.002000,-0.010000,-0.403000,0.302000,-0.445000,0.031000,0.006000,-0.021000,23.302000,0.579000,35.241001,0
9857,static_baseline,0.153000,0.107000,0.177000,-0.164000,0.039000,-0.255000,0.001000,-14.000000,48.000000,34.000000,573.000000,75.000000,-84.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.101000,0.459000,-2.037000,0.007000,-0.001000,-0.012000,-0.384000,0.317000,-0.595000,0.029000,0.005000,-0.022000,23.334999,0.581000,35.175999,0
9946,static_baseline,0.153000,0.109000,0.177000,-0.160000,0.039000,-0.251000,-0.001000,-30.000000,46.000000,48.000000,569.000000,73.000000,-91.000000,65.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.481000,-0.077000,-2.035000,0.003000,0.002000,-0.031000,-0.348000,0.067000,-0.675000,0.029000,0.004000,-0.026000,23.334999,0.581000,35.175999,0
10028,move_positive,0.153000,0.108000,0.177000,-0.162000,0.039000,-0.252000,0.000000,-44.000000,46.000000,26.000000,563.000000,74.000000,-97.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.156000,0.289000,-1.816000,0.003000,0.001000,-0.009000,-0.348000,0.152000,-0.609000,0.029000,0.005000,-0.020000,23.327999,0.586000,35.161999,0
10108,move_positive,0.156000,0.108000,0.175000,-0.163000,0.038000,-0.251000,0.000000,-84.000000,197.000000,-53.000000,572.000000,74.000000,-73.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.027000,0.596000,-1.339000,0.011000,0.000000,0.002000,-0.315000,0.363000,-0.377000,0.031000,0.005000,-0.016000,23.327999,0.586000,35.161999,0
10191,move_positive,0.156000,0.123000,0.178000,-0.162000,0.039000,-0.251000,0.001000,-108.000000,447.000000,-93.000000,592.000000,63.000000,-76.000000,62.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.046000,0.529000,-1.774000,0.012000,-0.008000,-0.010000,-0.215000,0.261000,-0.461000,0.030000,0.002000,-0.021000,23.320000,0.580000,35.165001,0
10273,move_positive,0.152000,0.276000,0.178000,-0.162000,0.037000,-0.251000,0.001000,-118.000000,657.000000,-180.000000,578.000000,65.000000,-54.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.168000,0.561000,-1.333000,0.008000,-0.003000,0.000000,-0.192000,0.212000,-0.356000,0.030000,0.002000,-0.017000,23.320000,0.580000,35.165001,0
10352,move_positive,0.152000,0.535000,0.174000,-0.162000,0.038000,-0.252000,0.000000,-140.000000,657.000000,-272.000000,577.000000,64.000000,-30.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.510000,0.374000,-1.770000,0.005000,0.004000,-0.021000,-0.393000,0.087000,-0.517000,0.027000,0.006000,-0.020000,23.330000,0.610000,35.188999,0
10438,move_positive,0.152000,0.888000,0.177000,-0.162000,0.038000,-0.251000,0.000000,-151.000000,723.000000,-351.000000,574.000000,63.000000,-18.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.478000,0.274000,-2.199000,0.005000,0.003000,-0.041000,-0.421000,0.273000,-0.619000,0.031000,0.005000,-0.028000,23.330000,0.610000,35.188999,0
10522,move_positive,0.153000,1.284000,0.175000,-0.163000,0.037000,-0.251000,0.000000,-149.000000,549.000000,-410.000000,577.000000,71.000000,-16.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.524000,0.461000,-1.989000,0.009000,0.000000,-0.037000,-0.415000,0.153000,-0.564000,0.029000,0.004000,-0.024000,23.337000,0.607000,35.169998,0
10603,move_positive,0.153000,1.656000,0.178000,-0.162000,0.037000,-0.251000,0.000000,-163.000000,595.000000,-443.000000,575.000000,58.000000,-14.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.140000,0.769000,-1.398000,0.015000,-0.002000,-0.012000,-0.345000,0.273000,-0.590000,0.031000,0.004000,-0.021000,23.337000,0.607000,35.169998,0
10687,move_positive,0.153000,2.018000,0.175000,-0.162000,0.038000,-0.251000,0.000000,-166.000000,593.000000,-505.000000,580.000000,56.000000,13.000000,78.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.043000,0.595000,-1.784000,0.011000,-0.005000,-0.015000,-0.267000,0.244000,-0.581000,0.030000,0.004000,-0.022000,23.344000,0.603000,35.174000,0
10768,move_positive,0.153000,2.397000,0.175000,-0.163000,0.039000,-0.255000,0.000000,-177.000000,540.000000,-474.000000,584.000000,53.000000,10.000000,78.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.390000,0.503000,-1.147000,0.010000,0.003000,-0.021000,-0.438000,0.254000,-0.413000,0.029000,0.006000,-0.024000,23.344000,0.603000,35.174000,0
10857,move_positive,0.151000,2.748000,0.175000,-0.162000,0.038000,-0.250000,0.001000,-195.000000,305.000000,-485.000000,572.000000,46.000000,13.000000,75.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.343000,0.227000,-1.673000,0.009000,0.001000,-0.033000,-0.205000,0.223000,-0.447000,0.029000,0.003000,-0.028000,23.327999,0.586000,35.240002,0
10937,move_positive,0.151000,2.966000,0.173000,-0.157000,0.039000,-0.251000,0.000000,-195.000000,358.000000,-482.000000,560.000000,46.000000,28.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.293000,0.267000,-1.781000,0.005000,-0.001000,-0.039000,-0.401000,0.171000,-0.493000,0.029000,0.007000,-0.025000,23.323999,0.588000,35.195000,0
11022,move_positive,0.152000,3.074000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-192.000000,134.000000,-480.000000,534.000000,47.000000,31.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.034000,0.518000,-1.606000,0.011000,0.000000,-0.005000,-0.385000,0.258000,-0.441000,0.030000,0.005000,-0.021000,23.343000,0.586000,35.186001,0
11147,move_positive,0.152000,3.111000,0.174000,-0.160000,0.039000,-0.252000,-0.001000,-199.000000,107.000000,-425.000000,470.000000,39.000000,29.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.199000,0.402000,-1.357000,0.007000,0.002000,0.000000,-0.403000,0.080000,-0.415000,0.028000,0.006000,-0.015000,23.337000,0.585000,35.205002,0
11272,return_positive,0.152000,3.103000,0.170000,-0.160000,0.039000,-0.251000,0.000000,-168.000000,-185.000000,-337.000000,438.000000,39.000000,44.000000,66.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.230000,0.329000,-1.748000,0.009000,-0.001000,-0.040000,-0.303000,0.148000,-0.526000,0.029000,0.003000,-0.027000,23.337000,0.585000,35.205002,0
11363,return_positive,0.153000,3.058000,0.167000,-0.162000,0.038000,-0.251000,0.001000,-161.000000,-265.000000,-215.000000,401.000000,32.000000,46.000000,66.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.326000,0.427000,-2.120000,0.010000,0.000000,-0.039000,-0.394000,0.216000,-0.688000,0.029000,0.006000,-0.023000,23.371000,0.595000,35.243000,0
11447,return_positive,0.152000,2.875000,0.175000,-0.162000,0.039000,-0.251000,0.000000,-165.000000,-412.000000,-134.000000,354.000000,32.000000,62.000000,85.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.099000,0.312000,-1.525000,0.008000,0.000000,-0.015000,-0.223000,0.144000,-0.456000,0.030000,0.005000,-0.019000,23.371000,0.595000,35.243000,0
11530,return_positive,0.151000,2.561000,0.174000,-0.162000,0.039000,-0.251000,0.000000,-169.000000,-694.000000,-33.000000,321.000000,39.000000,75.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.309000,0.488000,-1.287000,0.009000,-0.001000,-0.009000,-0.344000,0.239000,-0.462000,0.029000,0.006000,-0.023000,23.329000,0.596000,35.125000,0
11617,return_positive,0.152000,2.182000,0.173000,-0.162000,0.038000,-0.252000,0.000000,-169.000000,-569.000000,22.000000,294.000000,28.000000,64.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.164000,0.179000,-1.952000,0.003000,-0.003000,-0.037000,-0.296000,0.204000,-0.593000,0.028000,0.003000,-0.027000,23.318001,0.605000,35.168999,0
11703,return_positive,0.151000,1.800000,0.175000,-0.163000,0.038000,-0.251000,0.000000,-155.000000,-535.000000,50.000000,285.000000,30.000000,72.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.232000,0.523000,-1.785000,0.009000,0.000000,-0.018000,-0.413000,0.282000,-0.482000,0.030000,0.004000,-0.022000,23.318001,0.605000,35.168999,0
11801,return_positive,0.153000,1.351000,0.173000,-0.163000,0.038000,-0.252000,0.000000,-161.000000,-613.000000,103.000000,260.000000,10.000000,80.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.014000,0.510000,-1.797000,0.010000,-0.001000,-0.007000,-0.329000,0.395000,-0.610000,0.032000,0.004000,-0.016000,23.334999,0.606000,35.154999,0
11893,return_positive,0.151000,0.949000,0.170000,-0.164000,0.038000,-0.251000,0.001000,-178.000000,-519.000000,136.000000,244.000000,19.000000,104.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.169000,0.517000,-1.693000,0.010000,-0.005000,0.000000,-0.232000,0.300000,-0.608000,0.030000,0.003000,-0.020000,23.334999,0.606000,35.154999,0
11974,return_positive,0.152000,0.587000,0.174000,-0.163000,0.039000,-0.252000,0.001000,-177.000000,-461.000000,134.000000,240.000000,17.000000,75.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.077000,0.436000,-1.438000,0.009000,0.000000,-0.008000,-0.383000,0.245000,-0.441000,0.031000,0.006000,-0.014000,23.333000,0.610000,35.216000,0
12057,return_positive,0.151000,0.324000,0.173000,-0.163000,0.039000,-0.252000,0.000000,-178.000000,-332.000000,167.000000,227.000000,18.000000,79.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.590000,0.179000,-2.399000,0.002000,-0.001000,-0.040000,-0.341000,0.197000,-0.637000,0.029000,0.003000,-0.028000,23.333000,0.610000,35.216000,0
12143,return_positive,0.152000,0.182000,0.170000,-0.163000,0.039000,-0.251000,0.001000,-191.000000,-293.000000,192.000000,227.000000,7.000000,72.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.137000,0.153000,-1.854000,0.002000,-0.003000,-0.027000,-0.377000,0.225000,-0.573000,0.029000,0.005000,-0.025000,23.326000,0.585000,35.335999,0
12229,return_positive,0.153000,0.127000,0.170000,-0.162000,0.039000,-0.251000,0.000000,-217.000000,-391.000000,236.000000,225.000000,7.000000,75.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.235000,0.137000,-1.421000,0.003000,0.002000,-0.009000,-0.369000,0.186000,-0.377000,0.029000,0.006000,-0.022000,23.326000,0.585000,35.335999,0
12351,move_negative,0.151000,0.108000,0.173000,-0.162000,0.038000,-0.251000,-0.001000,-153.000000,-323.000000,227.000000,194.000000,0.000000,77.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.252000,0.368000,-1.113000,0.008000,-0.001000,0.004000,-0.180000,0.244000,-0.539000,0.030000,0.003000,-0.016000,23.341999,0.582000,35.243000,0
12432,move_negative,0.151000,0.093000,0.173000,-0.162000,0.038000,-0.251000,0.000000,-153.000000,-449.000000,244.000000,206.000000,3.000000,72.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.260000,0.730000,-1.710000,0.011000,0.000000,-0.006000,-0.323000,0.308000,-0.432000,0.030000,0.003000,-0.017000,23.341999,0.582000,35.243000,0
12514,move_negative,0.152000,0.006000,0.174000,-0.163000,0.038000,-0.251000,0.001000,-160.000000,-364.000000,253.000000,186.000000,0.000000,84.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.055000,0.433000,-1.492000,0.008000,-0.004000,-0.011000,-0.340000,0.253000,-0.453000,0.030000,0.004000,-0.018000,23.327999,0.574000,35.261002,0
12593,move_negative,0.152000,-0.152000,0.173000,-0.160000,0.041000,-0.250000,0.000000,-154.000000,-530.000000,294.000000,193.000000,6.000000,91.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.044000,0.437000,-1.729000,0.009000,-0.003000,-0.026000,-0.291000,0.202000,-0.480000,0.030000,0.003000,-0.021000,23.327999,0.603000,35.216999,0
12678,move_negative,0.151000,-0.464000,0.174000,-0.163000,0.041000,-0.251000,0.002000,-145.000000,-610.000000,285.000000,200.000000,-5.000000,86.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.219000,0.268000,-1.644000,0.006000,0.000000,-0.005000,-0.294000,0.270000,-0.529000,0.031000,0.004000,-0.019000,23.327999,0.603000,35.216999,0
12759,move_negative,0.152000,-0.810000,0.174000,-0.162000,0.039000,-0.250000,-0.001000,-139.000000,-563.000000,283.000000,183.000000,-9.000000,83.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.028000,0.419000,-1.775000,0.010000,0.000000,-0.026000,-0.369000,0.172000,-0.444000,0.030000,0.006000,-0.024000,23.330000,0.604000,35.276001,0
12838,move_negative,0.151000,-1.181000,0.174000,-0.163000,0.038000,-0.251000,0.001000,-129.000000,-569.000000,335.000000,177.000000,-4.000000,76.000000,87.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.392000,0.452000,-1.541000,0.011000,0.001000,-0.015000,-0.371000,0.162000,-0.514000,0.029000,0.005000,-0.020000,23.330999,0.614000,35.237999,0
12918,move_negative,0.151000,-1.550000,0.173000,-0.162000,0.038000,-0.251000,0.000000,-134.000000,-489.000000,319.000000,180.000000,-5.000000,89.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.356000,0.338000,-1.464000,0.010000,0.000000,0.000000,-0.392000,0.297000,-0.425000,0.031000,0.006000,-0.017000,23.330999,0.614000,35.237999,0
12997,move_negative,0.152000,-1.880000,0.174000,-0.164000,0.038000,-0.251000,0.000000,-140.000000,-504.000000,332.000000,190.000000,-9.000000,85.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.389000,0.646000,-1.571000,0.006000,-0.003000,-0.028000,-0.539000,0.237000,-0.485000,0.028000,0.007000,-0.021000,23.344000,0.598000,35.237000,0
13078,move_negative,0.151000,-2.257000,0.173000,-0.164000,0.038000,-0.252000,0.001000,-143.000000,-575.000000,352.000000,196.000000,-9.000000,89.000000,71.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.354000,0.191000,-1.862000,0.007000,-0.001000,-0.043000,-0.271000,0.243000,-0.616000,0.031000,0.004000,-0.028000,23.322001,0.589000,35.256001,0
13172,move_negative,0.152000,-2.583000,0.170000,-0.163000,0.038000,-0.251000,0.001000,-148.000000,-401.000000,358.000000,200.000000,-19.000000,101.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.069000,0.516000,-1.191000,0.007000,-0.001000,-0.009000,-0.325000,0.115000,-0.452000,0.028000,0.006000,-0.020000,23.322001,0.589000,35.256001,0
13254,move_negative,0.151000,-2.790000,0.173000,-0.163000,0.039000,-0.252000,0.000000,-171.000000,-314.000000,343.000000,203.000000,-22.000000,94.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.125000,0.447000,-2.010000,0.009000,-0.004000,-0.030000,-0.235000,0.331000,-0.590000,0.030000,0.002000,-0.024000,23.354000,0.590000,35.215000,0
13352,move_negative,0.152000,-2.899000,0.174000,-0.166000,0.038000,-0.255000,0.002000,-161.000000,-25.000000,365.000000,223.000000,-11.000000,111.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.385000,0.137000,-1.626000,0.004000,0.003000,-0.010000,-0.348000,0.118000,-0.415000,0.028000,0.005000,-0.017000,23.327000,0.599000,35.235001,0
13512,return_negative,0.151000,-2.910000,0.173000,-0.162000,0.038000,-0.252000,0.001000,-156.000000,139.000000,345.000000,218.000000,-30.000000,107.000000,86.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.346000,0.389000,-1.507000,0.006000,0.002000,0.000000,-0.221000,0.259000,-0.525000,0.029000,0.003000,-0.018000,23.358000,0.583000,35.265999,0
13594,return_negative,0.149000,-2.905000,0.175000,-0.164000,0.038000,-0.252000,0.000000,-147.000000,276.000000,348.000000,216.000000,-36.000000,114.000000,90.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.530000,0.465000,-1.915000,0.013000,0.002000,-0.017000,-0.450000,0.218000,-0.581000,0.031000,0.004000,-0.021000,23.363001,0.593000,35.257999,0
13687,return_negative,0.151000,-2.844000,0.175000,-0.164000,0.039000,-0.251000,0.000000,-133.000000,378.000000,349.000000,210.000000,-34.000000,124.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.447000,0.287000,-1.884000,0.005000,-0.003000,-0.039000,-0.419000,0.174000,-0.496000,0.029000,0.004000,-0.023000,23.363001,0.593000,35.257999,0
13769,return_negative,0.152000,-2.647000,0.173000,-0.163000,0.038000,-0.250000,0.000000,-121.000000,523.000000,339.000000,214.000000,-39.000000,120.000000,89.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.021000,0.414000,-1.268000,0.008000,0.000000,0.000000,-0.373000,0.221000,-0.426000,0.029000,0.006000,-0.020000,23.351999,0.596000,35.235001,0
13852,return_negative,0.149000,-2.324000,0.175000,-0.163000,0.039000,-0.251000,0.001000,-121.000000,571.000000,336.000000,210.000000,-48.000000,107.000000,95.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.402000,0.636000,-1.756000,0.011000,0.000000,-0.006000,-0.310000,0.329000,-0.540000,0.031000,0.003000,-0.019000,23.327999,0.602000,35.258999,0
13934,return_negative,0.151000,-1.952000,0.175000,-0.164000,0.039000,-0.252000,0.001000,-137.000000,609.000000,341.000000,220.000000,-45.000000,133.000000,97.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.042000,0.335000,-1.984000,0.005000,-0.002000,-0.034000,-0.332000,0.224000,-0.633000,0.030000,0.006000,-0.021000,23.327999,0.602000,35.258999,0
14024,return_negative,0.152000,-1.587000,0.177000,-0.162000,0.038000,-0.252000,-0.001000,-120.000000,720.000000,342.000000,210.000000,-43.000000,129.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.177000,0.159000,-2.122000,0.005000,-0.001000,-0.041000,-0.279000,0.138000,-0.554000,0.029000,0.004000,-0.027000,23.323999,0.602000,35.298000,0
14107,return_negative,0.151000,-1.172000,0.174000,-0.163000,0.038000,-0.251000,0.000000,-128.000000,740.000000,353.000000,215.000000,-43.000000,133.000000,90.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.521000,0.319000,-1.886000,0.006000,0.001000,-0.046000,-0.296000,0.268000,-0.645000,0.030000,0.003000,-0.029000,23.337999,0.594000,35.305000,0
14188,return_negative,0.152000,-0.800000,0.173000,-0.163000,0.039000,-0.250000,-0.001000,-127.000000,619.000000,347.000000,212.000000,-44.000000,126.000000,100.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.162000,0.735000,-1.544000,0.016000,0.000000,0.001000,-0.280000,0.294000,-0.622000,0.032000,0.004000,-0.017000,23.337999,0.594000,35.305000,0
14282,return_negative,0.153000,-0.398000,0.174000,-0.163000,0.039000,-0.252000,0.001000,-136.000000,392.000000,332.000000,227.000000,-55.000000,143.000000,86.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.238000,0.212000,-2.371000,0.003000,-0.003000,-0.040000,-0.413000,0.235000,-0.619000,0.031000,0.005000,-0.023000,23.330999,0.598000,35.241001,0
14363,return_negative,0.152000,-0.116000,0.177000,-0.160000,0.038000,-0.251000,0.000000,-117.000000,362.000000,335.000000,212.000000,-51.000000,132.000000,97.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.095000,0.613000,-1.332000,0.009000,-0.001000,0.005000,-0.386000,0.206000,-0.495000,0.028000,0.005000,-0.018000,23.337000,0.600000,35.217999,0
14459,return_negative,0.151000,0.037000,0.173000,-0.162000,0.037000,-0.252000,0.001000,-124.000000,215.000000,324.000000,180.000000,-57.000000,119.000000,93.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.420000,0.668000,-1.931000,0.010000,0.001000,-0.044000,-0.323000,0.258000,-0.576000,0.030000,0.003000,-0.027000,23.336000,0.589000,35.294998,0
14541,return_negative,0.151000,0.083000,0.173000,-0.162000,0.038000,-0.250000,0.001000,-139.000000,363.000000,330.000000,187.000000,-63.000000,133.000000,86.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.287000,0.519000,-2.111000,0.008000,-0.003000,-0.047000,-0.274000,0.329000,-0.641000,0.030000,0.003000,-0.030000,23.336000,0.589000,35.294998,0
14668,final_static,0.152000,0.100000,0.175000,-0.163000,0.038000,-0.251000,0.000000,-139.000000,403.000000,327.000000,186.000000,-67.000000,141.000000,96.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.043000,0.575000,-1.278000,0.009000,-0.003000,-0.002000,-0.230000,0.243000,-0.515000,0.031000,0.001000,-0.017000,23.351999,0.582000,35.301998,0
14754,final_static,0.149000,0.108000,0.177000,-0.162000,0.039000,-0.251000,0.000000,-143.000000,347.000000,333.000000,180.000000,-72.000000,125.000000,110.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.083000,0.551000,-1.450000,0.015000,-0.001000,-0.009000,-0.323000,0.228000,-0.377000,0.032000,0.005000,-0.019000,23.351999,0.582000,35.301998,0
14833,final_static,0.152000,0.108000,0.177000,-0.162000,0.038000,-0.250000,0.000000,-150.000000,296.000000,337.000000,182.000000,-66.000000,133.000000,105.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.429000,0.607000,-1.801000,0.010000,-0.002000,-0.018000,-0.496000,0.182000,-0.626000,0.028000,0.006000,-0.022000,23.344000,0.598000,35.353001,0
14912,final_static,0.152000,0.109000,0.175000,-0.160000,0.038000,-0.251000,-0.001000,-163.000000,259.000000,340.000000,186.000000,-72.000000,121.000000,99.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.373000,0.586000,-1.428000,0.008000,0.000000,-0.003000,-0.325000,0.316000,-0.574000,0.031000,0.005000,-0.019000,23.344000,0.598000,35.353001,0
15004,final_static,0.153000,0.112000,0.173000,-0.163000,0.038000,-0.251000,0.000000,-161.000000,177.000000,367.000000,193.000000,-69.000000,127.000000,115.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.029000,0.290000,-1.912000,0.006000,-0.002000,-0.035000,-0.418000,0.176000,-0.556000,0.028000,0.007000,-0.028000,23.305000,0.568000,35.304001,0
15084,final_static,0.151000,0.112000,0.173000,-0.164000,0.039000,-0.251000,0.001000,-148.000000,123.000000,387.000000,188.000000,-61.000000,118.000000,99.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.584000,0.165000,-1.924000,0.004000,0.006000,-0.022000,-0.404000,0.125000,-0.556000,0.027000,0.006000,-0.021000,23.305000,0.568000,35.304001,0
15169,final_static,0.152000,0.109000,0.173000,-0.162000,0.039000,-0.251000,0.000000,-142.000000,112.000000,376.000000,205.000000,-69.000000,127.000000,93.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.320000,0.193000,-1.922000,0.002000,0.000000,-0.038000,-0.321000,0.168000,-0.541000,0.028000,0.005000,-0.026000,23.354000,0.575000,35.291000,0
15249,final_static,0.152000,0.109000,0.174000,-0.163000,0.039000,-0.252000,0.000000,-128.000000,107.000000,391.000000,184.000000,-76.000000,134.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.300000,0.484000,-2.028000,0.007000,-0.002000,-0.026000,-0.261000,0.178000,-0.582000,0.030000,0.003000,-0.023000,23.354000,0.575000,35.291000,0
15329,final_static,0.152000,0.108000,0.173000,-0.164000,0.039000,-0.250000,0.000000,-125.000000,90.000000,384.000000,185.000000,-76.000000,125.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.390000,0.551000,-2.059000,0.014000,0.002000,-0.040000,-0.396000,0.291000,-0.490000,0.031000,0.006000,-0.029000,23.350000,0.594000,35.275002,0
15411,final_static,0.152000,0.109000,0.175000,-0.164000,0.038000,-0.250000,0.000000,-125.000000,87.000000,397.000000,187.000000,-84.000000,123.000000,96.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.266000,0.408000,-1.403000,0.008000,0.000000,-0.003000,-0.434000,0.212000,-0.594000,0.029000,0.004000,-0.021000,23.349001,0.589000,35.264999,0
15498,final_static,0.152000,0.109000,0.175000,-0.164000,0.039000,-0.250000,0.000000,-127.000000,94.000000,408.000000,180.000000,-75.000000,113.000000,83.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.383000,0.242000,-2.147000,0.006000,0.000000,-0.041000,-0.509000,0.223000,-0.686000,0.031000,0.007000,-0.023000,23.320000,0.581000,35.268002,0
15588,final_static,0.152000,0.109000,0.175000,-0.164000,0.039000,-0.251000,0.000000,-132.000000,94.000000,415.000000,185.000000,-87.000000,88.000000,87.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.145000,0.420000,-1.576000,0.006000,0.000000,-0.005000,-0.402000,0.239000,-0.507000,0.028000,0.005000,-0.019000,23.320000,0.581000,35.268002,0
15679,final_static,0.151000,0.108000,0.177000,-0.163000,0.039000,-0.251000,0.001000,-126.000000,94.000000,413.000000,178.000000,-97.000000,97.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.319000,0.706000,-1.789000,0.011000,0.000000,-0.038000,-0.267000,0.205000,-0.537000,0.029000,0.002000,-0.023000,23.315001,0.588000,35.300999,0
15762,final_static,0.152000,0.108000,0.177000,-0.163000,0.038000,-0.250000,0.001000,-138.000000,91.000000,419.000000,168.000000,-96.000000,78.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.564000,0.206000,-1.673000,0.009000,0.004000,-0.040000,-0.405000,0.130000,-0.693000,0.030000,0.006000,-0.026000,23.330000,0.585000,35.278999,0
15848,final_static,0.149000,0.108000,0.175000,-0.164000,0.041000,-0.251000,0.000000,-137.000000,91.000000,427.000000,177.000000,-100.000000,85.000000,84.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.067000,0.186000,-1.800000,0.005000,-0.004000,-0.029000,-0.357000,0.117000,-0.469000,0.028000,0.005000,-0.024000,23.327000,0.582000,35.284000,0
15943,final_static,0.151000,0.108000,0.175000,-0.163000,0.038000,-0.251000,0.000000,-127.000000,80.000000,419.000000,169.000000,-91.000000,84.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.174000,-0.089000,-2.061000,-0.001000,-0.006000,-0.034000,-0.471000,0.179000,-0.594000,0.030000,0.005000,-0.025000,23.337999,0.588000,35.270000,0
16037,final_static,0.149000,0.111000,0.174000,-0.163000,0.039000,-0.248000,-0.001000,-116.000000,84.000000,440.000000,172.000000,-101.000000,86.000000,83.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.443000,0.867000,-1.695000,0.016000,0.000000,-0.020000,-0.324000,0.276000,-0.539000,0.030000,0.002000,-0.023000,23.337999,0.588000,35.270000,0
16117,final_static,0.152000,0.109000,0.175000,-0.162000,0.038000,-0.250000,0.000000,-116.000000,82.000000,436.000000,175.000000,-97.000000,95.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.221000,0.768000,-1.152000,0.017000,0.003000,-0.002000,-0.311000,0.385000,-0.451000,0.032000,0.005000,-0.018000,23.323000,0.589000,35.342999,0
16198,final_static,0.152000,0.109000,0.174000,-0.162000,0.039000,-0.251000,0.000000,-104.000000,95.000000,454.000000,171.000000,-96.000000,90.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.163000,0.290000,-1.458000,0.006000,-0.004000,-0.012000,-0.240000,0.228000,-0.449000,0.029000,0.002000,-0.017000,23.330000,0.594000,35.327000,0
16283,final_static,0.152000,0.107000,0.177000,-0.164000,0.039000,-0.255000,0.001000,-105.000000,95.000000,410.000000,178.000000,-102.000000,98.000000,63.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.526000,0.644000,-1.883000,0.012000,0.000000,-0.029000,-0.479000,0.227000,-0.587000,0.031000,0.006000,-0.023000,23.330000,0.594000,35.327000,0
16365,final_static,0.151000,0.108000,0.177000,-0.163000,0.038000,-0.250000,0.000000,-117.000000,91.000000,403.000000,175.000000,-103.000000,91.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.004000,0.500000,-1.405000,0.010000,-0.004000,0.000000,-0.199000,0.241000,-0.539000,0.031000,0.001000,-0.020000,23.346001,0.598000,35.284000,0
16457,final_static,0.152000,0.109000,0.175000,-0.163000,0.038000,-0.248000,0.000000,-133.000000,84.000000,383.000000,166.000000,-97.000000,93.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.275000,0.610000,-1.188000,0.012000,0.000000,0.001000,-0.383000,0.390000,-0.425000,0.032000,0.006000,-0.013000,23.339001,0.594000,35.320999,0
16538,final_static,0.151000,0.107000,0.174000,-0.162000,0.038000,-0.248000,0.001000,-116.000000,81.000000,359.000000,171.000000,-105.000000,99.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.011000,0.310000,-1.471000,0.005000,-0.007000,0.003000,-0.358000,0.326000,-0.421000,0.030000,0.004000,-0.013000,23.339001,0.594000,35.320999,0
16624,final_static,0.151000,0.105000,0.177000,-0.162000,0.038000,-0.251000,0.000000,-122.000000,90.000000,300.000000,172.000000,-104.000000,82.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.507000,0.336000,-1.993000,0.007000,0.000000,-0.042000,-0.456000,0.130000,-0.463000,0.029000,0.006000,-0.024000,23.343000,0.581000,35.332001,0
16708,final_static,0.151000,0.109000,0.175000,-0.163000,0.038000,-0.251000,-0.001000,-127.000000,94.000000,259.000000,156.000000,-110.000000,86.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.301000,0.405000,-1.459000,0.008000,0.003000,-0.009000,-0.296000,0.139000,-0.449000,0.029000,0.005000,-0.019000,23.343000,0.581000,35.332001,0
16793,final_static,0.152000,0.108000,0.175000,-0.163000,0.039000,-0.251000,0.000000,-131.000000,117.000000,259.000000,170.000000,-117.000000,31.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.408000,0.393000,-1.847000,0.005000,0.001000,-0.016000,-0.353000,0.180000,-0.666000,0.027000,0.006000,-0.023000,23.329000,0.587000,35.323002,0
16873,final_static,0.152000,0.108000,0.175000,-0.162000,0.038000,-0.250000,0.000000,-136.000000,117.000000,210.000000,164.000000,-104.000000,37.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.215000,0.589000,-1.603000,0.008000,0.001000,-0.001000,-0.264000,0.317000,-0.524000,0.030000,0.004000,-0.019000,23.372000,0.582000,35.320000,0
16954,final_static,0.152000,0.105000,0.175000,-0.163000,0.038000,-0.251000,0.000000,-136.000000,106.000000,189.000000,161.000000,-116.000000,41.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.190000,0.517000,-1.687000,0.007000,-0.002000,-0.018000,-0.368000,0.244000,-0.614000,0.029000,0.004000,-0.020000,23.372000,0.582000,35.320000,0
17032,final_static,0.152000,0.109000,0.177000,-0.162000,0.038000,-0.250000,0.000000,-130.000000,98.000000,167.000000,161.000000,-117.000000,39.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.238000,0.403000,-1.587000,0.011000,0.000000,-0.009000,-0.333000,0.233000,-0.503000,0.030000,0.005000,-0.022000,23.354000,0.587000,35.342999,0
17117,final_static,0.151000,0.107000,0.177000,-0.162000,0.038000,-0.250000,0.001000,-127.000000,116.000000,151.000000,151.000000,-112.000000,37.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.135000,0.331000,-1.423000,0.010000,-0.003000,0.007000,-0.309000,0.253000,-0.578000,0.030000,0.005000,-0.015000,23.325001,0.583000,35.306999,0
17197,final_static,0.151000,0.108000,0.177000,-0.162000,0.038000,-0.250000,0.001000,-120.000000,109.000000,155.000000,151.000000,-122.000000,30.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.224000,0.434000,-1.657000,0.006000,0.001000,-0.014000,-0.360000,0.246000,-0.559000,0.029000,0.006000,-0.021000,23.325001,0.583000,35.306999,0
17279,final_static,0.151000,0.108000,0.177000,-0.163000,0.038000,-0.248000,0.000000,-124.000000,117.000000,113.000000,151.000000,-120.000000,32.000000,71.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.298000,0.415000,-1.686000,0.012000,0.000000,-0.029000,-0.383000,0.235000,-0.560000,0.032000,0.004000,-0.024000,23.316000,0.585000,35.301998,0
17362,final_static,0.151000,0.108000,0.177000,-0.162000,0.038000,-0.250000,-0.001000,-125.000000,117.000000,86.000000,147.000000,-118.000000,37.000000,57.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.279000,0.471000,-1.705000,0.006000,-0.002000,-0.029000,-0.353000,0.289000,-0.543000,0.030000,0.004000,-0.023000,23.316000,0.585000,35.301998,0
17443,final_static,0.151000,0.109000,0.177000,-0.163000,0.038000,-0.251000,0.000000,-124.000000,121.000000,77.000000,156.000000,-115.000000,32.000000,58.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.201000,0.267000,-1.916000,0.005000,0.000000,-0.031000,-0.380000,0.291000,-0.567000,0.031000,0.005000,-0.026000,23.341999,0.601000,35.305000,0
17523,final_static,0.152000,0.107000,0.177000,-0.162000,0.038000,-0.250000,0.000000,-121.000000,119.000000,54.000000,139.000000,-118.000000,36.000000,62.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.400000,0.583000,-1.947000,0.015000,0.001000,-0.024000,-0.304000,0.259000,-0.623000,0.031000,0.003000,-0.017000,23.341999,0.601000,35.305000,0
17607,final_static,0.152000,0.109000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-116.000000,122.000000,18.000000,145.000000,-123.000000,39.000000,43.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.038000,0.397000,-1.730000,0.007000,-0.003000,-0.027000,-0.410000,0.094000,-0.449000,0.027000,0.005000,-0.025000,23.349001,0.591000,35.341000,0
# 睿尔曼机械臂力/力矩与关节指标测试报告
| 项目 | 值 |
| --- | --- |
| 测试时间 | `20260701_151000` |
| 控制器地址 | `192.168.1.18:8080` |
| API 版本 | `v1.1.5` |
| 产品版本 | `RM75-6FB` |
| 软件控制器版本 | `` |
| 控制器代际 | `3` |
| 自由度 | `7` |
| 力传感器类型 | `Integrated 6D force` |
| 原始 CSV | `/home/mashiro/project/linkerhand-cpp-sdk/reports/realman_metrics_20260701_151000.csv` |
## 测试范围
- 已测试:六维力/力矩传感器读数、静态噪声/漂移、关节电流/电压/温度、控制器电压/电流/温度、低速小幅关节运动跟踪误差。
- 未测试:接触式力位混合控制闭环精度、外部负载下输出力矩精度、碰撞阈值。这些需要固定工装、标定砝码/力传感器和明确接触方向。
- SDK 当前暴露的是关节电流和末端六维力/力矩数据,没有裸关节力矩指令接口;因此本文中的关节侧“力矩相关”指标以电流作为负载代理量。
## 采样概况
| Phase | 样本数 |
| --- | ---: |
| `static_baseline` | 118 |
| `move_positive` | 14 |
| `return_positive` | 12 |
| `move_negative` | 13 |
| `return_negative` | 13 |
| `final_static` | 36 |
| **合计** | **206** |
## 静态六维力/力矩噪声
单位:`Fx/Fy/Fz = N`,`Mx/My/Mz = Nm`。统计对象为系统外受力 `zero_force_data`。
| 轴 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| Fx | 154 | -0.3477 | 0.0705 | -0.5400 | -0.1990 | 0.3410 | N |
| Fy | 154 | 0.2370 | 0.0779 | 0.0670 | 0.4430 | 0.3760 | N |
| Fz | 154 | -0.5346 | 0.0887 | -0.7630 | -0.2650 | 0.4980 | N |
| Mx | 154 | 0.0298 | 0.0013 | 0.0270 | 0.0330 | 0.0060 | Nm |
| My | 154 | 0.0045 | 0.0014 | 0.0010 | 0.0080 | 0.0070 | Nm |
| Mz | 154 | -0.0215 | 0.0039 | -0.0300 | -0.0130 | 0.0170 | Nm |
## 静态关节电流
| 关节 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| J1 | 154 | -55.6558 | 47.3187 | -163.0000 | 6.0000 | 169.0000 | mA |
| J2 | 154 | 52.0519 | 58.5963 | -19.0000 | 403.0000 | 422.0000 | mA |
| J3 | 154 | 19.2987 | 175.7725 | -158.0000 | 454.0000 | 612.0000 | mA |
| J4 | 154 | 471.2727 | 167.7482 | 139.0000 | 604.0000 | 465.0000 | mA |
| J5 | 154 | 23.9740 | 67.6378 | -123.0000 | 81.0000 | 204.0000 | mA |
| J6 | 154 | -52.0000 | 77.8223 | -113.0000 | 141.0000 | 254.0000 | mA |
| J7 | 154 | 72.8377 | 11.9883 | 43.0000 | 115.0000 | 72.0000 | mA |
## 运动过程关节电流
| 关节 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| J1 | 52 | -150.1154 | 29.9435 | -217.0000 | -44.0000 | 173.0000 | mA |
| J2 | 52 | 15.9615 | 478.3927 | -694.0000 | 740.0000 | 1434.0000 | mA |
| J3 | 52 | 78.9423 | 304.9889 | -505.0000 | 365.0000 | 870.0000 | mA |
| J4 | 52 | 320.8846 | 158.5494 | 177.0000 | 592.0000 | 415.0000 | mA |
| J5 | 52 | 8.1731 | 40.3406 | -63.0000 | 74.0000 | 137.0000 | mA |
| J6 | 52 | 64.4615 | 59.2388 | -97.0000 | 143.0000 | 240.0000 | mA |
| J7 | 52 | 77.8462 | 9.5945 | 62.0000 | 100.0000 | 38.0000 | mA |
## 低速小幅运动跟踪
| 步骤 | 持续时间 s | 到位最大关节误差 deg |
| --- | ---: | ---: |
| J2 +delta | 1.148 | 0.0030 |
| return from +delta | 1.148 | 0.0040 |
| J2 -delta | 1.154 | 0.0200 |
| return from -delta | 1.151 | 0.0160 |
运动测试结果:`通过`。
## 控制器状态
| 指标 | 样本数 | 均值 | 标准差 | 最小值 | 最大值 | 峰峰值 | 单位 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| controller_voltage | 206 | 23.3328 | 0.0149 | 23.2890 | 23.3720 | 0.0830 | V |
| controller_current | 206 | 0.5883 | 0.0092 | 0.5650 | 0.6140 | 0.0490 | A |
| controller_temperature | 206 | 35.1682 | 0.0992 | 34.9540 | 35.3530 | 0.3990 | C |
## 接口失败计数
| 接口 | 失败次数 |
| --- | ---: |
| rm_get_current_arm_state | 0 |
| rm_get_current_joint_current | 0 |
| rm_get_current_joint_voltage | 0 |
| rm_get_current_joint_temperature | 0 |
| rm_get_force_data | 0 |
| rm_get_controller_state | 0 |
## 结论
- 本次测试可以评估静态六维力/力矩读数稳定性、关节电流负载变化、基础运动到位误差和控制器供电状态。
- 若要测试真实接触力控或力矩输出能力,需要增加外部测力设备、刚性固定治具、接触方向限位和急停监护,再启用 `rm_set_force_position` 或 `rm_force_position_move_*`
elapsed_ms,phase,joint1_deg,joint2_deg,joint3_deg,joint4_deg,joint5_deg,joint6_deg,joint7_deg,joint1_current_mA,joint2_current_mA,joint3_current_mA,joint4_current_mA,joint5_current_mA,joint6_current_mA,joint7_current_mA,joint1_voltage_V,joint2_voltage_V,joint3_voltage_V,joint4_voltage_V,joint5_voltage_V,joint6_voltage_V,joint7_voltage_V,joint1_temperature_C,joint2_temperature_C,joint3_temperature_C,joint4_temperature_C,joint5_temperature_C,joint6_temperature_C,joint7_temperature_C,raw_Fx,raw_Fy,raw_Fz,raw_Mx,raw_My,raw_Mz,zero_Fx,zero_Fy,zero_Fz,zero_Mx,zero_My,zero_Mz,controller_voltage_V,controller_current_A,controller_temperature_C,controller_err
0,static_baseline,0.153000,0.112000,0.177000,-0.162000,0.038000,-0.251000,0.000000,-62.000000,35.000000,-151.000000,598.000000,61.000000,-81.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.032000,0.479000,-1.778000,0.008000,-0.005000,-0.013000,-0.226000,0.144000,-0.506000,0.028000,0.004000,-0.020000,23.289000,0.585000,35.041000,0
89,static_baseline,0.153000,0.109000,0.179000,-0.163000,0.039000,-0.252000,0.000000,-72.000000,38.000000,-158.000000,602.000000,59.000000,-83.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.414000,0.446000,-1.544000,0.007000,0.003000,-0.018000,-0.278000,0.226000,-0.488000,0.029000,0.004000,-0.018000,23.320999,0.578000,34.997002,0
175,static_baseline,0.152000,0.109000,0.173000,-0.162000,0.038000,-0.251000,0.002000,-57.000000,36.000000,-132.000000,598.000000,59.000000,-83.000000,75.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.354000,0.532000,-2.022000,0.008000,0.000000,-0.040000,-0.365000,0.301000,-0.536000,0.029000,0.006000,-0.026000,23.318001,0.594000,34.970001,0
264,static_baseline,0.152000,0.109000,0.178000,-0.163000,0.039000,-0.252000,0.001000,-65.000000,33.000000,-130.000000,599.000000,62.000000,-79.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.370000,0.441000,-1.942000,0.007000,-0.003000,-0.022000,-0.357000,0.274000,-0.704000,0.030000,0.004000,-0.023000,23.318001,0.594000,34.970001,0
355,static_baseline,0.151000,0.109000,0.177000,-0.163000,0.039000,-0.252000,0.002000,-71.000000,10.000000,-130.000000,594.000000,60.000000,-85.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.140000,0.500000,-2.089000,0.008000,0.001000,-0.033000,-0.323000,0.108000,-0.558000,0.028000,0.004000,-0.026000,23.318001,0.594000,34.970001,0
445,static_baseline,0.151000,0.111000,0.178000,-0.162000,0.039000,-0.251000,-0.001000,-72.000000,12.000000,-129.000000,587.000000,57.000000,-92.000000,63.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.210000,0.556000,-1.798000,0.009000,0.000000,-0.013000,-0.333000,0.443000,-0.490000,0.032000,0.004000,-0.018000,23.336000,0.587000,35.014000,0
523,static_baseline,0.152000,0.108000,0.177000,-0.162000,0.039000,-0.252000,0.000000,-78.000000,18.000000,-115.000000,593.000000,57.000000,-76.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.281000,0.384000,-2.208000,0.005000,-0.005000,-0.026000,-0.357000,0.296000,-0.590000,0.031000,0.003000,-0.023000,23.336000,0.587000,35.014000,0
604,static_baseline,0.152000,0.108000,0.175000,-0.162000,0.039000,-0.252000,0.001000,-74.000000,16.000000,-113.000000,587.000000,56.000000,-85.000000,71.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.303000,0.630000,-1.705000,0.011000,0.000000,-0.011000,-0.262000,0.365000,-0.516000,0.030000,0.003000,-0.020000,23.354000,0.593000,35.013000,0
685,static_baseline,0.152000,0.109000,0.178000,-0.163000,0.038000,-0.255000,-0.001000,-79.000000,23.000000,-119.000000,590.000000,56.000000,-90.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.228000,0.452000,-2.182000,0.006000,0.000000,-0.036000,-0.337000,0.320000,-0.592000,0.031000,0.005000,-0.024000,23.354000,0.593000,35.013000,0
765,static_baseline,0.152000,0.109000,0.178000,-0.163000,0.038000,-0.252000,0.001000,-83.000000,5.000000,-118.000000,593.000000,56.000000,-86.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.480000,0.548000,-1.568000,0.007000,0.001000,-0.026000,-0.369000,0.259000,-0.407000,0.029000,0.005000,-0.022000,23.336000,0.589000,35.027000,0
854,static_baseline,0.153000,0.109000,0.175000,-0.164000,0.039000,-0.251000,0.001000,-81.000000,11.000000,-120.000000,593.000000,55.000000,-78.000000,90.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.429000,0.814000,-1.524000,0.014000,0.003000,-0.001000,-0.455000,0.363000,-0.481000,0.032000,0.006000,-0.020000,23.351000,0.586000,34.953999,0
935,static_baseline,0.152000,0.109000,0.177000,-0.163000,0.039000,-0.252000,0.001000,-86.000000,14.000000,-121.000000,592.000000,58.000000,-90.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.198000,0.321000,-1.479000,0.008000,-0.002000,-0.007000,-0.371000,0.120000,-0.475000,0.029000,0.004000,-0.021000,23.351000,0.586000,34.953999,0
1028,static_baseline,0.152000,0.109000,0.177000,-0.162000,0.039000,-0.255000,0.001000,-67.000000,3.000000,-104.000000,597.000000,51.000000,-89.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.171000,0.369000,-1.731000,0.008000,0.000000,-0.006000,-0.254000,0.122000,-0.607000,0.029000,0.002000,-0.020000,23.304001,0.570000,35.112000,0
1109,static_baseline,0.152000,0.109000,0.175000,-0.163000,0.039000,-0.250000,0.000000,-79.000000,0.000000,-107.000000,603.000000,55.000000,-89.000000,66.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.167000,0.244000,-2.058000,0.006000,-0.002000,-0.031000,-0.333000,0.196000,-0.596000,0.029000,0.004000,-0.025000,23.315001,0.587000,35.008999,0
1204,static_baseline,0.152000,0.109000,0.177000,-0.163000,0.038000,-0.252000,0.001000,-78.000000,19.000000,-87.000000,573.000000,41.000000,-80.000000,66.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.366000,0.643000,-1.835000,0.009000,0.001000,0.001000,-0.360000,0.279000,-0.606000,0.030000,0.005000,-0.016000,23.315001,0.587000,35.008999,0
1290,static_baseline,0.153000,0.107000,0.177000,-0.163000,0.038000,-0.252000,-0.001000,-78.000000,9.000000,-75.000000,580.000000,44.000000,-94.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.337000,0.380000,-1.790000,0.008000,0.000000,-0.020000,-0.276000,0.277000,-0.564000,0.031000,0.003000,-0.021000,23.344000,0.582000,35.000999,0
1374,static_baseline,0.153000,0.109000,0.177000,-0.162000,0.039000,-0.251000,0.001000,-61.000000,8.000000,-73.000000,582.000000,51.000000,-89.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.379000,0.366000,-1.817000,0.007000,0.005000,-0.016000,-0.369000,0.286000,-0.671000,0.030000,0.007000,-0.023000,23.318001,0.589000,35.063999,0
1455,static_baseline,0.152000,0.109000,0.174000,-0.163000,0.039000,-0.252000,0.001000,-66.000000,-3.000000,-97.000000,583.000000,45.000000,-94.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.140000,0.219000,-1.805000,0.006000,-0.001000,-0.026000,-0.307000,0.248000,-0.456000,0.030000,0.004000,-0.025000,23.318001,0.589000,35.063999,0
1539,static_baseline,0.152000,0.109000,0.177000,-0.164000,0.039000,-0.252000,0.001000,-60.000000,7.000000,-101.000000,577.000000,44.000000,-88.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.389000,0.087000,-2.051000,0.002000,0.003000,-0.029000,-0.343000,0.182000,-0.665000,0.029000,0.006000,-0.023000,23.320999,0.570000,35.043999,0
1618,static_baseline,0.153000,0.108000,0.175000,-0.162000,0.038000,-0.255000,0.001000,-58.000000,-7.000000,-108.000000,582.000000,52.000000,-85.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.178000,0.559000,-1.811000,0.009000,0.000000,-0.019000,-0.468000,0.274000,-0.455000,0.029000,0.006000,-0.019000,23.358999,0.594000,35.007999,0
1704,static_baseline,0.152000,0.109000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-62.000000,-12.000000,-99.000000,586.000000,46.000000,-91.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.469000,0.568000,-1.787000,0.009000,0.003000,-0.002000,-0.521000,0.147000,-0.566000,0.029000,0.008000,-0.019000,23.312000,0.574000,35.051998,0
1788,static_baseline,0.152000,0.109000,0.177000,-0.163000,0.038000,-0.252000,0.001000,-73.000000,-1.000000,-103.000000,583.000000,39.000000,-102.000000,55.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.249000,0.367000,-1.344000,0.008000,0.000000,0.000000,-0.412000,0.145000,-0.476000,0.029000,0.006000,-0.020000,23.312000,0.574000,35.051998,0
1868,static_baseline,0.153000,0.109000,0.177000,-0.162000,0.038000,-0.251000,-0.001000,-76.000000,0.000000,-118.000000,578.000000,41.000000,-98.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.152000,0.592000,-1.534000,0.010000,-0.003000,-0.005000,-0.296000,0.139000,-0.396000,0.028000,0.005000,-0.016000,23.337999,0.577000,35.082001,0
1954,static_baseline,0.152000,0.108000,0.175000,-0.166000,0.038000,-0.250000,0.000000,-71.000000,-6.000000,-110.000000,585.000000,50.000000,-93.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.205000,0.215000,-1.813000,0.006000,-0.001000,-0.040000,-0.260000,0.239000,-0.511000,0.029000,0.004000,-0.024000,23.323999,0.593000,35.051998,0
2039,static_baseline,0.152000,0.108000,0.175000,-0.163000,0.038000,-0.252000,0.001000,-71.000000,11.000000,-134.000000,587.000000,44.000000,-84.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.073000,0.370000,-1.026000,0.008000,-0.004000,-0.008000,-0.336000,0.115000,-0.426000,0.028000,0.006000,-0.018000,23.323999,0.593000,35.051998,0
2129,static_baseline,0.153000,0.109000,0.177000,-0.160000,0.038000,-0.251000,0.000000,-71.000000,5.000000,-126.000000,593.000000,50.000000,-84.000000,65.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.068000,0.573000,-1.453000,0.009000,-0.004000,0.004000,-0.208000,0.303000,-0.457000,0.030000,0.002000,-0.016000,23.327999,0.584000,35.035999,0
2208,static_baseline,0.153000,0.109000,0.175000,-0.163000,0.039000,-0.255000,0.000000,-57.000000,10.000000,-125.000000,589.000000,50.000000,-76.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.177000,0.369000,-1.868000,0.010000,-0.001000,-0.025000,-0.311000,0.235000,-0.586000,0.030000,0.005000,-0.027000,23.322001,0.582000,35.050999,0
2300,static_baseline,0.156000,0.109000,0.175000,-0.159000,0.038000,-0.250000,0.001000,-75.000000,10.000000,-83.000000,574.000000,66.000000,-93.000000,75.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.009000,0.492000,-1.388000,0.010000,-0.003000,0.000000,-0.283000,0.288000,-0.522000,0.031000,0.006000,-0.015000,23.344999,0.591000,35.022999,0
2394,static_baseline,0.152000,0.109000,0.174000,-0.163000,0.039000,-0.252000,0.000000,-64.000000,-6.000000,-92.000000,586.000000,50.000000,-100.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.214000,0.515000,-1.977000,0.010000,-0.001000,-0.032000,-0.416000,0.266000,-0.678000,0.030000,0.006000,-0.025000,23.344999,0.591000,35.022999,0
2479,static_baseline,0.156000,0.109000,0.177000,-0.162000,0.039000,-0.251000,0.000000,-61.000000,-12.000000,-105.000000,569.000000,49.000000,-81.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.127000,0.768000,-1.765000,0.014000,0.000000,-0.020000,-0.229000,0.248000,-0.557000,0.031000,0.003000,-0.021000,23.316000,0.580000,35.061001,0
2563,static_baseline,0.152000,0.108000,0.177000,-0.162000,0.038000,-0.251000,0.000000,-63.000000,5.000000,-112.000000,572.000000,50.000000,-88.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.155000,0.836000,-1.821000,0.015000,0.000000,-0.006000,-0.318000,0.264000,-0.567000,0.030000,0.002000,-0.023000,23.326000,0.575000,35.042999,0
2644,static_baseline,0.156000,0.108000,0.177000,-0.164000,0.039000,-0.252000,0.001000,-53.000000,12.000000,-90.000000,560.000000,50.000000,-85.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.314000,0.151000,-1.525000,0.006000,0.002000,-0.015000,-0.306000,0.161000,-0.442000,0.028000,0.004000,-0.018000,23.325001,0.584000,35.040001,0
2735,static_baseline,0.151000,0.109000,0.177000,-0.163000,0.038000,-0.255000,0.001000,-78.000000,5.000000,-93.000000,573.000000,53.000000,-86.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.512000,0.305000,-1.988000,0.007000,0.000000,-0.041000,-0.357000,0.189000,-0.586000,0.029000,0.005000,-0.028000,23.325001,0.584000,35.040001,0
2820,static_baseline,0.152000,0.109000,0.177000,-0.163000,0.038000,-0.251000,0.000000,-67.000000,-6.000000,-105.000000,573.000000,52.000000,-88.000000,87.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.229000,0.491000,-1.267000,0.012000,0.000000,0.000000,-0.362000,0.232000,-0.471000,0.030000,0.004000,-0.018000,23.334000,0.586000,35.053001,0
2910,static_baseline,0.153000,0.111000,0.177000,-0.162000,0.038000,-0.252000,-0.001000,-54.000000,-19.000000,-97.000000,571.000000,60.000000,-91.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.291000,0.120000,-1.460000,0.002000,0.000000,-0.005000,-0.327000,0.185000,-0.524000,0.028000,0.004000,-0.016000,23.320999,0.588000,35.040001,0
2995,static_baseline,0.153000,0.109000,0.177000,-0.163000,0.039000,-0.248000,-0.001000,-65.000000,-13.000000,-100.000000,567.000000,52.000000,-87.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.226000,0.714000,-1.720000,0.012000,-0.001000,-0.018000,-0.399000,0.304000,-0.545000,0.030000,0.004000,-0.024000,23.320999,0.588000,35.040001,0
3085,static_baseline,0.153000,0.111000,0.175000,-0.163000,0.037000,-0.255000,0.002000,-54.000000,15.000000,-113.000000,562.000000,45.000000,-95.000000,81.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.127000,0.679000,-1.404000,0.013000,-0.001000,-0.014000,-0.331000,0.353000,-0.507000,0.032000,0.005000,-0.020000,23.334999,0.592000,35.049999,0
3170,static_baseline,0.153000,0.108000,0.174000,-0.162000,0.038000,-0.251000,0.001000,-43.000000,19.000000,-88.000000,564.000000,47.000000,-92.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.053000,0.766000,-1.462000,0.014000,0.000000,-0.006000,-0.331000,0.255000,-0.473000,0.030000,0.006000,-0.017000,23.334999,0.592000,35.049999,0
3250,static_baseline,0.152000,0.111000,0.177000,-0.160000,0.038000,-0.252000,0.001000,-32.000000,17.000000,-100.000000,568.000000,57.000000,-88.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.323000,0.474000,-1.758000,0.009000,0.004000,-0.004000,-0.379000,0.221000,-0.495000,0.031000,0.005000,-0.017000,23.334999,0.592000,35.049999,0
3334,static_baseline,0.153000,0.109000,0.174000,-0.163000,0.038000,-0.251000,0.001000,-27.000000,4.000000,-112.000000,557.000000,57.000000,-90.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.493000,0.478000,-1.661000,0.012000,0.002000,-0.026000,-0.400000,0.275000,-0.509000,0.030000,0.006000,-0.020000,23.356001,0.590000,35.054001,0
3415,static_baseline,0.152000,0.111000,0.174000,-0.160000,0.039000,-0.250000,0.000000,-30.000000,9.000000,-101.000000,555.000000,52.000000,-92.000000,84.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.364000,0.335000,-1.847000,0.008000,0.000000,-0.041000,-0.443000,0.217000,-0.536000,0.030000,0.006000,-0.026000,23.302999,0.591000,35.116001,0
3504,static_baseline,0.152000,0.112000,0.179000,-0.163000,0.039000,-0.251000,0.001000,-37.000000,11.000000,-85.000000,552.000000,61.000000,-91.000000,86.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.295000,0.638000,-1.610000,0.010000,0.001000,-0.010000,-0.228000,0.307000,-0.464000,0.030000,0.002000,-0.020000,23.302999,0.591000,35.116001,0
3591,static_baseline,0.156000,0.109000,0.177000,-0.163000,0.038000,-0.251000,-0.001000,-31.000000,26.000000,-96.000000,553.000000,53.000000,-95.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.468000,-0.095000,-2.092000,0.004000,0.001000,-0.038000,-0.388000,0.115000,-0.750000,0.029000,0.005000,-0.027000,23.351000,0.588000,35.061001,0
3680,static_baseline,0.153000,0.109000,0.175000,-0.163000,0.039000,-0.251000,0.000000,-27.000000,13.000000,-104.000000,548.000000,63.000000,-86.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.497000,0.244000,-1.859000,0.006000,0.001000,-0.031000,-0.540000,0.276000,-0.446000,0.029000,0.007000,-0.028000,23.351000,0.588000,35.061001,0
3760,static_baseline,0.153000,0.111000,0.178000,-0.160000,0.039000,-0.252000,0.000000,-40.000000,23.000000,-104.000000,537.000000,61.000000,-101.000000,85.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.385000,0.432000,-2.020000,0.005000,0.001000,-0.037000,-0.475000,0.320000,-0.476000,0.030000,0.007000,-0.024000,23.336000,0.577000,35.084000,0
3846,static_baseline,0.151000,0.108000,0.174000,-0.163000,0.039000,-0.252000,0.001000,-6.000000,18.000000,-99.000000,532.000000,64.000000,-101.000000,91.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.329000,0.501000,-1.084000,0.010000,0.000000,0.001000,-0.453000,0.248000,-0.265000,0.031000,0.006000,-0.019000,23.347000,0.590000,35.133999,0
3930,static_baseline,0.153000,0.109000,0.178000,-0.163000,0.038000,-0.250000,0.000000,-17.000000,17.000000,-100.000000,533.000000,66.000000,-104.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.229000,0.529000,-1.573000,0.007000,0.000000,-0.015000,-0.292000,0.328000,-0.579000,0.031000,0.001000,-0.021000,23.347000,0.590000,35.133999,0
4015,static_baseline,0.153000,0.109000,0.178000,-0.162000,0.039000,-0.251000,0.000000,-13.000000,26.000000,-91.000000,535.000000,63.000000,-99.000000,85.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.264000,0.196000,-2.074000,0.006000,-0.005000,-0.035000,-0.294000,0.079000,-0.492000,0.028000,0.003000,-0.025000,23.358000,0.576000,35.098000,0
4094,static_baseline,0.152000,0.108000,0.177000,-0.164000,0.038000,-0.252000,0.000000,-20.000000,20.000000,-110.000000,534.000000,63.000000,-101.000000,83.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.245000,0.420000,-1.301000,0.007000,0.004000,-0.009000,-0.406000,0.384000,-0.325000,0.032000,0.008000,-0.018000,23.323999,0.587000,35.127998,0
4174,static_baseline,0.153000,0.109000,0.177000,-0.163000,0.039000,-0.251000,0.000000,-8.000000,27.000000,-90.000000,529.000000,63.000000,-97.000000,90.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.154000,0.603000,-1.730000,0.009000,-0.003000,-0.028000,-0.397000,0.306000,-0.607000,0.030000,0.005000,-0.024000,23.323999,0.587000,35.127998,0
4255,static_baseline,0.151000,0.111000,0.177000,-0.162000,0.038000,-0.251000,0.001000,-18.000000,37.000000,-98.000000,540.000000,64.000000,-97.000000,83.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.314000,0.238000,-1.729000,0.008000,0.002000,-0.044000,-0.261000,0.196000,-0.462000,0.030000,0.003000,-0.025000,23.332001,0.582000,35.049000,0
4340,static_baseline,0.156000,0.111000,0.177000,-0.163000,0.038000,-0.250000,0.000000,-29.000000,39.000000,-115.000000,525.000000,57.000000,-106.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.177000,0.035000,-2.009000,0.001000,0.000000,-0.039000,-0.390000,0.101000,-0.510000,0.027000,0.005000,-0.029000,23.332001,0.582000,35.049000,0
4420,static_baseline,0.153000,0.111000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-19.000000,42.000000,-100.000000,522.000000,64.000000,-96.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.084000,0.594000,-1.641000,0.013000,-0.002000,-0.016000,-0.270000,0.301000,-0.526000,0.031000,0.004000,-0.024000,23.322001,0.577000,35.123001,0
4505,static_baseline,0.153000,0.109000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-11.000000,38.000000,-112.000000,524.000000,63.000000,-107.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.311000,0.364000,-1.553000,0.008000,0.002000,-0.013000,-0.326000,0.353000,-0.474000,0.032000,0.005000,-0.020000,23.334999,0.590000,35.102001,0
4584,static_baseline,0.153000,0.109000,0.174000,-0.163000,0.038000,-0.252000,0.000000,-20.000000,43.000000,-99.000000,520.000000,64.000000,-109.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.164000,1.016000,-1.427000,0.016000,-0.002000,0.003000,-0.409000,0.434000,-0.500000,0.032000,0.006000,-0.021000,23.334999,0.590000,35.102001,0
4670,static_baseline,0.153000,0.111000,0.178000,-0.163000,0.039000,-0.252000,0.000000,-16.000000,36.000000,-90.000000,522.000000,62.000000,-103.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.334000,0.533000,-1.687000,0.007000,0.001000,0.000000,-0.364000,0.360000,-0.467000,0.031000,0.004000,-0.015000,23.327000,0.575000,35.095001,0
4754,static_baseline,0.153000,0.108000,0.177000,-0.163000,0.039000,-0.251000,0.000000,-21.000000,18.000000,-96.000000,534.000000,53.000000,-97.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.241000,0.369000,-1.844000,0.008000,-0.003000,-0.022000,-0.440000,0.330000,-0.455000,0.030000,0.005000,-0.017000,23.327000,0.575000,35.095001,0
4834,static_baseline,0.151000,0.109000,0.178000,-0.163000,0.041000,-0.251000,0.000000,-6.000000,20.000000,-95.000000,510.000000,58.000000,-91.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.492000,0.027000,-2.003000,0.002000,0.001000,-0.044000,-0.474000,0.150000,-0.734000,0.029000,0.007000,-0.028000,23.358000,0.565000,35.105000,0
4922,static_baseline,0.152000,0.109000,0.175000,-0.162000,0.038000,-0.255000,0.000000,-10.000000,4.000000,-89.000000,523.000000,56.000000,-105.000000,57.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.236000,0.770000,-1.843000,0.012000,0.001000,-0.016000,-0.411000,0.212000,-0.593000,0.030000,0.007000,-0.022000,23.327999,0.588000,35.110001,0
5005,static_baseline,0.153000,0.109000,0.177000,-0.163000,0.039000,-0.251000,0.000000,-22.000000,-2.000000,-94.000000,513.000000,51.000000,-110.000000,59.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.214000,-0.139000,-1.689000,0.003000,-0.002000,-0.027000,-0.394000,0.213000,-0.521000,0.030000,0.004000,-0.024000,23.344000,0.579000,35.162998,0
5099,static_baseline,0.152000,0.108000,0.178000,-0.160000,0.038000,-0.251000,-0.001000,-31.000000,9.000000,-70.000000,518.000000,54.000000,-101.000000,57.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.299000,0.208000,-2.036000,0.007000,0.000000,-0.042000,-0.518000,0.269000,-0.616000,0.031000,0.006000,-0.027000,23.344000,0.579000,35.162998,0
5181,static_baseline,0.153000,0.111000,0.177000,-0.166000,0.038000,-0.252000,0.001000,-35.000000,16.000000,-84.000000,522.000000,51.000000,-102.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.324000,0.210000,-1.834000,0.005000,-0.001000,-0.041000,-0.490000,0.166000,-0.685000,0.029000,0.006000,-0.027000,23.336000,0.596000,35.109001,0
5273,static_baseline,0.152000,0.111000,0.177000,-0.164000,0.038000,-0.255000,0.001000,-40.000000,27.000000,-86.000000,517.000000,54.000000,-93.000000,59.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.230000,0.722000,-1.258000,0.009000,0.000000,-0.004000,-0.308000,0.264000,-0.467000,0.030000,0.003000,-0.016000,23.344999,0.582000,35.110001,0
5354,static_baseline,0.153000,0.108000,0.173000,-0.164000,0.039000,-0.255000,0.000000,-27.000000,33.000000,-63.000000,535.000000,53.000000,-103.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.218000,0.065000,-1.998000,0.000000,0.000000,-0.036000,-0.418000,0.100000,-0.589000,0.028000,0.006000,-0.023000,23.343000,0.590000,35.112000,0
5446,static_baseline,0.153000,0.109000,0.177000,-0.162000,0.039000,-0.251000,0.001000,-23.000000,27.000000,-78.000000,536.000000,50.000000,-101.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.014000,0.608000,-1.487000,0.014000,-0.002000,0.000000,-0.402000,0.283000,-0.670000,0.030000,0.006000,-0.017000,23.343000,0.590000,35.112000,0
5532,static_baseline,0.156000,0.108000,0.175000,-0.164000,0.038000,-0.251000,0.001000,-9.000000,35.000000,-84.000000,540.000000,49.000000,-93.000000,61.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.428000,0.154000,-1.844000,0.005000,-0.001000,-0.023000,-0.350000,0.197000,-0.534000,0.031000,0.003000,-0.019000,23.330000,0.593000,35.118999,0
5612,static_baseline,0.152000,0.111000,0.178000,-0.163000,0.039000,-0.250000,0.001000,-12.000000,45.000000,-76.000000,540.000000,50.000000,-98.000000,50.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.568000,0.280000,-1.933000,0.006000,0.004000,-0.033000,-0.331000,0.141000,-0.540000,0.028000,0.004000,-0.022000,23.297001,0.596000,35.129002,0
5699,static_baseline,0.152000,0.108000,0.175000,-0.163000,0.039000,-0.252000,0.000000,-19.000000,53.000000,-71.000000,529.000000,52.000000,-89.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.214000,0.128000,-1.781000,0.005000,-0.003000,-0.038000,-0.369000,0.237000,-0.550000,0.029000,0.004000,-0.025000,23.297001,0.596000,35.129002,0
5782,static_baseline,0.152000,0.111000,0.178000,-0.162000,0.039000,-0.252000,0.001000,-15.000000,55.000000,-69.000000,527.000000,55.000000,-107.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.286000,0.485000,-1.814000,0.006000,0.001000,-0.012000,-0.319000,0.342000,-0.597000,0.030000,0.004000,-0.019000,23.337999,0.597000,35.111000,0
5868,static_baseline,0.153000,0.109000,0.177000,-0.164000,0.041000,-0.252000,0.000000,5.000000,66.000000,-62.000000,543.000000,56.000000,-108.000000,59.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.383000,0.588000,-1.604000,0.013000,0.002000,-0.004000,-0.338000,0.261000,-0.395000,0.030000,0.005000,-0.015000,23.330000,0.591000,35.132999,0
5952,static_baseline,0.153000,0.109000,0.178000,-0.163000,0.038000,-0.252000,0.001000,6.000000,63.000000,-73.000000,546.000000,51.000000,-103.000000,63.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.332000,0.907000,-1.545000,0.018000,0.000000,0.000000,-0.385000,0.282000,-0.539000,0.032000,0.004000,-0.018000,23.330000,0.591000,35.132999,0
6032,static_baseline,0.153000,0.107000,0.177000,-0.163000,0.039000,-0.251000,-0.001000,1.000000,66.000000,-82.000000,544.000000,59.000000,-108.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.079000,0.397000,-1.763000,0.010000,-0.002000,-0.042000,-0.278000,0.207000,-0.529000,0.029000,0.003000,-0.027000,23.330000,0.591000,35.132999,0
6118,static_baseline,0.152000,0.111000,0.177000,-0.160000,0.038000,-0.252000,-0.001000,-6.000000,62.000000,-68.000000,550.000000,59.000000,-104.000000,66.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.743000,0.216000,-1.804000,0.004000,0.004000,-0.023000,-0.388000,0.125000,-0.496000,0.029000,0.004000,-0.021000,23.353001,0.581000,35.117001,0
6198,static_baseline,0.152000,0.108000,0.175000,-0.163000,0.039000,-0.255000,0.000000,-13.000000,63.000000,-55.000000,549.000000,62.000000,-110.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.571000,0.328000,-1.923000,0.009000,0.004000,-0.027000,-0.343000,0.279000,-0.517000,0.030000,0.005000,-0.024000,23.354000,0.573000,35.084000,0
6277,static_baseline,0.156000,0.111000,0.175000,-0.162000,0.038000,-0.250000,-0.001000,-21.000000,61.000000,-71.000000,558.000000,61.000000,-103.000000,93.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.182000,0.288000,-1.851000,0.005000,0.001000,-0.025000,-0.277000,0.243000,-0.612000,0.031000,0.004000,-0.022000,23.354000,0.573000,35.084000,0
6356,static_baseline,0.153000,0.109000,0.175000,-0.163000,0.037000,-0.252000,0.000000,-29.000000,54.000000,-67.000000,545.000000,70.000000,-102.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.232000,0.305000,-1.731000,0.005000,-0.001000,-0.035000,-0.393000,0.174000,-0.558000,0.028000,0.004000,-0.030000,23.316999,0.595000,35.119999,0
6444,static_baseline,0.153000,0.107000,0.175000,-0.164000,0.039000,-0.251000,0.001000,-30.000000,70.000000,-55.000000,544.000000,61.000000,-96.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.171000,0.229000,-1.907000,0.004000,-0.001000,-0.025000,-0.378000,0.188000,-0.405000,0.030000,0.005000,-0.019000,23.316999,0.595000,35.119999,0
6528,static_baseline,0.156000,0.109000,0.177000,-0.162000,0.038000,-0.255000,0.001000,-33.000000,67.000000,-53.000000,548.000000,63.000000,-113.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.215000,0.493000,-1.235000,0.009000,-0.003000,-0.002000,-0.243000,0.427000,-0.420000,0.032000,0.003000,-0.017000,23.325001,0.584000,35.127998,0
6607,static_baseline,0.153000,0.111000,0.177000,-0.163000,0.038000,-0.252000,-0.001000,-28.000000,57.000000,-46.000000,546.000000,73.000000,-98.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.288000,0.552000,-1.297000,0.011000,0.001000,-0.006000,-0.336000,0.179000,-0.525000,0.029000,0.005000,-0.015000,23.325001,0.584000,35.127998,0
6694,static_baseline,0.151000,0.105000,0.177000,-0.164000,0.039000,-0.252000,0.000000,-33.000000,71.000000,-52.000000,544.000000,65.000000,-100.000000,87.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.278000,0.592000,-2.009000,0.010000,0.000000,-0.039000,-0.275000,0.257000,-0.619000,0.029000,0.003000,-0.027000,23.365000,0.583000,35.132999,0
6783,static_baseline,0.153000,0.109000,0.175000,-0.164000,0.038000,-0.251000,-0.001000,-33.000000,53.000000,-33.000000,544.000000,65.000000,-103.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.448000,0.575000,-1.740000,0.010000,0.002000,-0.022000,-0.317000,0.279000,-0.519000,0.031000,0.005000,-0.021000,23.322001,0.584000,35.138000,0
6868,static_baseline,0.152000,0.111000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-23.000000,61.000000,-47.000000,545.000000,62.000000,-102.000000,90.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.055000,0.544000,-1.499000,0.009000,-0.002000,-0.009000,-0.354000,0.267000,-0.479000,0.030000,0.005000,-0.018000,23.322001,0.584000,35.138000,0
6954,static_baseline,0.153000,0.107000,0.175000,-0.163000,0.038000,-0.251000,0.001000,-15.000000,56.000000,-48.000000,552.000000,64.000000,-98.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.376000,0.466000,-2.147000,0.010000,0.000000,-0.041000,-0.397000,0.138000,-0.623000,0.029000,0.005000,-0.025000,23.341999,0.602000,35.133999,0
7042,static_baseline,0.153000,0.109000,0.177000,-0.164000,0.038000,-0.251000,0.002000,-8.000000,44.000000,-36.000000,557.000000,68.000000,-91.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.341000,0.372000,-1.898000,0.003000,0.000000,-0.039000,-0.379000,0.219000,-0.534000,0.029000,0.005000,-0.027000,23.327999,0.601000,35.172001,0
7123,static_baseline,0.152000,0.108000,0.177000,-0.162000,0.038000,-0.251000,0.001000,-13.000000,49.000000,-18.000000,558.000000,70.000000,-98.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.161000,0.292000,-1.489000,0.007000,-0.003000,0.001000,-0.319000,0.162000,-0.647000,0.030000,0.004000,-0.018000,23.351000,0.578000,35.134998,0
7211,static_baseline,0.152000,0.111000,0.177000,-0.163000,0.038000,-0.251000,0.001000,-12.000000,27.000000,-27.000000,550.000000,69.000000,-97.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.225000,0.743000,-1.608000,0.011000,0.000000,-0.002000,-0.328000,0.390000,-0.573000,0.031000,0.005000,-0.020000,23.351000,0.578000,35.134998,0
7293,static_baseline,0.156000,0.109000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-14.000000,38.000000,-20.000000,563.000000,68.000000,-88.000000,58.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.307000,0.492000,-1.862000,0.007000,0.000000,-0.033000,-0.333000,0.187000,-0.680000,0.030000,0.004000,-0.027000,23.323000,0.592000,35.131001,0
7377,static_baseline,0.153000,0.109000,0.177000,-0.163000,0.037000,-0.252000,-0.001000,-5.000000,42.000000,-12.000000,569.000000,77.000000,-96.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.230000,0.070000,-1.481000,0.005000,0.003000,-0.019000,-0.230000,0.176000,-0.391000,0.028000,0.004000,-0.022000,23.323000,0.581000,35.098000,0
7466,static_baseline,0.151000,0.111000,0.175000,-0.162000,0.038000,-0.250000,-0.001000,-4.000000,52.000000,-17.000000,558.000000,62.000000,-107.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.040000,0.525000,-1.629000,0.010000,0.000000,0.002000,-0.328000,0.111000,-0.643000,0.028000,0.004000,-0.020000,23.323000,0.581000,35.098000,0
7569,static_baseline,0.153000,0.109000,0.178000,-0.163000,0.039000,-0.251000,0.001000,0.000000,36.000000,-3.000000,574.000000,74.000000,-98.000000,71.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.055000,0.414000,-1.200000,0.007000,0.000000,0.000000,-0.290000,0.168000,-0.563000,0.030000,0.004000,-0.019000,23.316999,0.575000,35.178001,0
7652,static_baseline,0.153000,0.109000,0.177000,-0.163000,0.037000,-0.252000,0.000000,3.000000,18.000000,1.000000,578.000000,68.000000,-95.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.289000,0.530000,-1.916000,0.006000,0.000000,-0.035000,-0.388000,0.272000,-0.624000,0.031000,0.005000,-0.028000,23.316999,0.577000,35.125999,0
7737,static_baseline,0.153000,0.109000,0.178000,-0.162000,0.038000,-0.251000,-0.001000,1.000000,41.000000,11.000000,579.000000,73.000000,-98.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.322000,0.297000,-2.118000,0.004000,0.000000,-0.037000,-0.387000,0.200000,-0.719000,0.028000,0.005000,-0.029000,23.320999,0.584000,35.192001,0
7822,static_baseline,0.153000,0.109000,0.175000,-0.162000,0.038000,-0.251000,0.000000,-12.000000,47.000000,-4.000000,587.000000,79.000000,-99.000000,65.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.329000,0.615000,-1.982000,0.009000,-0.002000,-0.038000,-0.256000,0.213000,-0.652000,0.028000,0.002000,-0.026000,23.320999,0.584000,35.192001,0
7903,static_baseline,0.152000,0.111000,0.175000,-0.163000,0.039000,-0.252000,0.001000,-5.000000,41.000000,-2.000000,591.000000,76.000000,-92.000000,67.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.116000,0.081000,-1.823000,0.005000,-0.002000,-0.041000,-0.283000,0.184000,-0.509000,0.029000,0.002000,-0.030000,23.327999,0.588000,35.200001,0
7983,static_baseline,0.152000,0.111000,0.177000,-0.162000,0.039000,-0.251000,0.000000,-1.000000,35.000000,-21.000000,593.000000,77.000000,-102.000000,63.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.217000,0.716000,-1.718000,0.012000,-0.001000,-0.006000,-0.388000,0.272000,-0.633000,0.029000,0.006000,-0.019000,23.327999,0.588000,35.200001,0
8069,static_baseline,0.152000,0.108000,0.178000,-0.162000,0.039000,-0.251000,0.001000,-15.000000,28.000000,-17.000000,604.000000,78.000000,-89.000000,56.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.097000,0.445000,-1.157000,0.010000,0.000000,-0.006000,-0.272000,0.199000,-0.463000,0.029000,0.005000,-0.017000,23.323000,0.586000,35.117001,0
8152,static_baseline,0.152000,0.109000,0.177000,-0.162000,0.039000,-0.252000,-0.001000,-11.000000,25.000000,-23.000000,596.000000,81.000000,-92.000000,49.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.356000,0.288000,-2.085000,0.006000,0.001000,-0.028000,-0.352000,0.273000,-0.707000,0.030000,0.004000,-0.021000,23.312000,0.591000,35.167999,0
8237,static_baseline,0.153000,0.109000,0.174000,-0.162000,0.038000,-0.251000,-0.001000,-9.000000,41.000000,-24.000000,587.000000,79.000000,-95.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.306000,0.369000,-2.319000,0.007000,-0.003000,-0.031000,-0.241000,0.309000,-0.763000,0.030000,0.002000,-0.024000,23.333000,0.577000,35.182999,0
8322,static_baseline,0.153000,0.111000,0.177000,-0.164000,0.039000,-0.255000,0.000000,-16.000000,38.000000,-22.000000,594.000000,81.000000,-88.000000,49.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.159000,0.285000,-1.762000,0.007000,0.000000,-0.031000,-0.290000,0.145000,-0.475000,0.028000,0.004000,-0.023000,23.333000,0.577000,35.182999,0
8401,static_baseline,0.151000,0.111000,0.177000,-0.162000,0.039000,-0.252000,0.000000,-14.000000,38.000000,-17.000000,578.000000,74.000000,-99.000000,60.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.263000,0.647000,-1.536000,0.015000,-0.001000,0.004000,-0.352000,0.333000,-0.415000,0.033000,0.005000,-0.016000,23.325001,0.586000,35.178001,0
8493,static_baseline,0.156000,0.108000,0.178000,-0.164000,0.039000,-0.252000,0.000000,-11.000000,36.000000,-10.000000,583.000000,77.000000,-80.000000,61.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.081000,0.494000,-1.577000,0.008000,-0.002000,0.000000,-0.299000,0.197000,-0.465000,0.029000,0.004000,-0.018000,23.325001,0.595000,35.186001,0
8573,static_baseline,0.153000,0.107000,0.175000,-0.162000,0.039000,-0.252000,0.000000,-12.000000,38.000000,-23.000000,581.000000,70.000000,-88.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.272000,0.534000,-2.115000,0.010000,-0.002000,-0.028000,-0.352000,0.290000,-0.665000,0.031000,0.004000,-0.022000,23.357000,0.588000,35.185001,0
8667,static_baseline,0.153000,0.109000,0.175000,-0.163000,0.038000,-0.252000,0.000000,-16.000000,35.000000,-25.000000,578.000000,70.000000,-92.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.108000,0.546000,-1.477000,0.007000,0.000000,-0.004000,-0.259000,0.223000,-0.444000,0.028000,0.004000,-0.019000,23.357000,0.588000,35.185001,0
8750,static_baseline,0.153000,0.114000,0.177000,-0.162000,0.039000,-0.252000,0.000000,2.000000,42.000000,-30.000000,577.000000,70.000000,-88.000000,65.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.252000,0.503000,-1.538000,0.009000,0.000000,0.008000,-0.318000,0.286000,-0.328000,0.031000,0.004000,-0.015000,23.319000,0.582000,35.124001,0
8833,static_baseline,0.152000,0.109000,0.175000,-0.162000,0.038000,-0.252000,0.001000,-14.000000,39.000000,-19.000000,581.000000,70.000000,-84.000000,62.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.221000,0.423000,-1.532000,0.008000,0.000000,-0.004000,-0.314000,0.175000,-0.395000,0.030000,0.003000,-0.015000,23.319000,0.582000,35.124001,0
8912,static_baseline,0.156000,0.109000,0.175000,-0.163000,0.039000,-0.255000,0.001000,-5.000000,56.000000,-26.000000,571.000000,66.000000,-87.000000,55.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.377000,0.607000,-1.790000,0.010000,0.000000,-0.029000,-0.319000,0.328000,-0.434000,0.032000,0.003000,-0.024000,23.316999,0.586000,35.168999,0
9007,static_baseline,0.152000,0.107000,0.177000,-0.163000,0.038000,-0.251000,0.000000,-8.000000,42.000000,-25.000000,569.000000,67.000000,-84.000000,63.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.092000,0.666000,-1.176000,0.011000,0.000000,-0.018000,-0.299000,0.332000,-0.459000,0.031000,0.005000,-0.019000,23.316999,0.586000,35.168999,0
9097,static_baseline,0.153000,0.111000,0.177000,-0.162000,0.038000,-0.255000,0.000000,-6.000000,41.000000,0.000000,578.000000,61.000000,-90.000000,49.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.570000,0.418000,-1.682000,0.007000,0.005000,-0.034000,-0.442000,0.183000,-0.553000,0.029000,0.006000,-0.023000,23.330000,0.578000,35.179001,0
9184,static_baseline,0.152000,0.109000,0.177000,-0.163000,0.038000,-0.250000,-0.001000,-14.000000,34.000000,2.000000,574.000000,64.000000,-109.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.007000,0.395000,-1.596000,0.009000,-0.003000,0.001000,-0.284000,0.265000,-0.482000,0.032000,0.003000,-0.017000,23.326000,0.595000,35.148998,0
9278,static_baseline,0.153000,0.108000,0.177000,-0.163000,0.038000,-0.255000,0.000000,-6.000000,33.000000,16.000000,572.000000,66.000000,-101.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.234000,0.113000,-1.959000,0.003000,-0.001000,-0.035000,-0.228000,0.160000,-0.475000,0.028000,0.003000,-0.026000,23.326000,0.595000,35.148998,0
9357,static_baseline,0.152000,0.109000,0.175000,-0.160000,0.038000,-0.255000,0.001000,-25.000000,39.000000,-4.000000,560.000000,67.000000,-92.000000,58.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.266000,0.180000,-1.722000,0.006000,-0.001000,-0.039000,-0.242000,0.170000,-0.516000,0.028000,0.003000,-0.025000,23.337999,0.581000,35.210999,0
9441,static_baseline,0.151000,0.109000,0.177000,-0.163000,0.039000,-0.250000,0.000000,-25.000000,46.000000,4.000000,555.000000,68.000000,-86.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.035000,0.331000,-2.025000,0.006000,-0.005000,-0.041000,-0.287000,0.166000,-0.594000,0.029000,0.003000,-0.027000,23.337999,0.581000,35.210999,0
9522,static_baseline,0.152000,0.108000,0.178000,-0.162000,0.039000,-0.251000,0.000000,-24.000000,59.000000,12.000000,554.000000,70.000000,-79.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.275000,0.370000,-1.781000,0.008000,-0.003000,0.000000,-0.259000,0.334000,-0.563000,0.031000,0.003000,-0.016000,23.337000,0.590000,35.166000,0
9613,static_baseline,0.153000,0.109000,0.174000,-0.162000,0.039000,-0.251000,0.000000,-20.000000,59.000000,16.000000,546.000000,75.000000,-83.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.406000,0.512000,-1.220000,0.009000,0.001000,-0.011000,-0.444000,0.286000,-0.443000,0.031000,0.007000,-0.017000,23.337000,0.590000,35.166000,0
9692,static_baseline,0.153000,0.108000,0.178000,-0.163000,0.039000,-0.252000,-0.001000,-26.000000,60.000000,15.000000,551.000000,76.000000,-87.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.013000,0.617000,-1.465000,0.013000,0.000000,0.004000,-0.383000,0.227000,-0.485000,0.029000,0.005000,-0.019000,23.315001,0.576000,35.152000,0
9773,static_baseline,0.152000,0.111000,0.178000,-0.163000,0.038000,-0.252000,0.000000,-17.000000,63.000000,29.000000,560.000000,81.000000,-78.000000,65.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.303000,0.607000,-1.553000,0.013000,0.002000,-0.010000,-0.403000,0.302000,-0.445000,0.031000,0.006000,-0.021000,23.302000,0.579000,35.241001,0
9857,static_baseline,0.153000,0.107000,0.177000,-0.164000,0.039000,-0.255000,0.001000,-14.000000,48.000000,34.000000,573.000000,75.000000,-84.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.101000,0.459000,-2.037000,0.007000,-0.001000,-0.012000,-0.384000,0.317000,-0.595000,0.029000,0.005000,-0.022000,23.334999,0.581000,35.175999,0
9946,static_baseline,0.153000,0.109000,0.177000,-0.160000,0.039000,-0.251000,-0.001000,-30.000000,46.000000,48.000000,569.000000,73.000000,-91.000000,65.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.481000,-0.077000,-2.035000,0.003000,0.002000,-0.031000,-0.348000,0.067000,-0.675000,0.029000,0.004000,-0.026000,23.334999,0.581000,35.175999,0
10028,move_positive,0.153000,0.108000,0.177000,-0.162000,0.039000,-0.252000,0.000000,-44.000000,46.000000,26.000000,563.000000,74.000000,-97.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.156000,0.289000,-1.816000,0.003000,0.001000,-0.009000,-0.348000,0.152000,-0.609000,0.029000,0.005000,-0.020000,23.327999,0.586000,35.161999,0
10108,move_positive,0.156000,0.108000,0.175000,-0.163000,0.038000,-0.251000,0.000000,-84.000000,197.000000,-53.000000,572.000000,74.000000,-73.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.027000,0.596000,-1.339000,0.011000,0.000000,0.002000,-0.315000,0.363000,-0.377000,0.031000,0.005000,-0.016000,23.327999,0.586000,35.161999,0
10191,move_positive,0.156000,0.123000,0.178000,-0.162000,0.039000,-0.251000,0.001000,-108.000000,447.000000,-93.000000,592.000000,63.000000,-76.000000,62.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.046000,0.529000,-1.774000,0.012000,-0.008000,-0.010000,-0.215000,0.261000,-0.461000,0.030000,0.002000,-0.021000,23.320000,0.580000,35.165001,0
10273,move_positive,0.152000,0.276000,0.178000,-0.162000,0.037000,-0.251000,0.001000,-118.000000,657.000000,-180.000000,578.000000,65.000000,-54.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.168000,0.561000,-1.333000,0.008000,-0.003000,0.000000,-0.192000,0.212000,-0.356000,0.030000,0.002000,-0.017000,23.320000,0.580000,35.165001,0
10352,move_positive,0.152000,0.535000,0.174000,-0.162000,0.038000,-0.252000,0.000000,-140.000000,657.000000,-272.000000,577.000000,64.000000,-30.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.510000,0.374000,-1.770000,0.005000,0.004000,-0.021000,-0.393000,0.087000,-0.517000,0.027000,0.006000,-0.020000,23.330000,0.610000,35.188999,0
10438,move_positive,0.152000,0.888000,0.177000,-0.162000,0.038000,-0.251000,0.000000,-151.000000,723.000000,-351.000000,574.000000,63.000000,-18.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.478000,0.274000,-2.199000,0.005000,0.003000,-0.041000,-0.421000,0.273000,-0.619000,0.031000,0.005000,-0.028000,23.330000,0.610000,35.188999,0
10522,move_positive,0.153000,1.284000,0.175000,-0.163000,0.037000,-0.251000,0.000000,-149.000000,549.000000,-410.000000,577.000000,71.000000,-16.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.524000,0.461000,-1.989000,0.009000,0.000000,-0.037000,-0.415000,0.153000,-0.564000,0.029000,0.004000,-0.024000,23.337000,0.607000,35.169998,0
10603,move_positive,0.153000,1.656000,0.178000,-0.162000,0.037000,-0.251000,0.000000,-163.000000,595.000000,-443.000000,575.000000,58.000000,-14.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.140000,0.769000,-1.398000,0.015000,-0.002000,-0.012000,-0.345000,0.273000,-0.590000,0.031000,0.004000,-0.021000,23.337000,0.607000,35.169998,0
10687,move_positive,0.153000,2.018000,0.175000,-0.162000,0.038000,-0.251000,0.000000,-166.000000,593.000000,-505.000000,580.000000,56.000000,13.000000,78.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.043000,0.595000,-1.784000,0.011000,-0.005000,-0.015000,-0.267000,0.244000,-0.581000,0.030000,0.004000,-0.022000,23.344000,0.603000,35.174000,0
10768,move_positive,0.153000,2.397000,0.175000,-0.163000,0.039000,-0.255000,0.000000,-177.000000,540.000000,-474.000000,584.000000,53.000000,10.000000,78.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.390000,0.503000,-1.147000,0.010000,0.003000,-0.021000,-0.438000,0.254000,-0.413000,0.029000,0.006000,-0.024000,23.344000,0.603000,35.174000,0
10857,move_positive,0.151000,2.748000,0.175000,-0.162000,0.038000,-0.250000,0.001000,-195.000000,305.000000,-485.000000,572.000000,46.000000,13.000000,75.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.343000,0.227000,-1.673000,0.009000,0.001000,-0.033000,-0.205000,0.223000,-0.447000,0.029000,0.003000,-0.028000,23.327999,0.586000,35.240002,0
10937,move_positive,0.151000,2.966000,0.173000,-0.157000,0.039000,-0.251000,0.000000,-195.000000,358.000000,-482.000000,560.000000,46.000000,28.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.293000,0.267000,-1.781000,0.005000,-0.001000,-0.039000,-0.401000,0.171000,-0.493000,0.029000,0.007000,-0.025000,23.323999,0.588000,35.195000,0
11022,move_positive,0.152000,3.074000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-192.000000,134.000000,-480.000000,534.000000,47.000000,31.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.034000,0.518000,-1.606000,0.011000,0.000000,-0.005000,-0.385000,0.258000,-0.441000,0.030000,0.005000,-0.021000,23.343000,0.586000,35.186001,0
11147,move_positive,0.152000,3.111000,0.174000,-0.160000,0.039000,-0.252000,-0.001000,-199.000000,107.000000,-425.000000,470.000000,39.000000,29.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.199000,0.402000,-1.357000,0.007000,0.002000,0.000000,-0.403000,0.080000,-0.415000,0.028000,0.006000,-0.015000,23.337000,0.585000,35.205002,0
11272,return_positive,0.152000,3.103000,0.170000,-0.160000,0.039000,-0.251000,0.000000,-168.000000,-185.000000,-337.000000,438.000000,39.000000,44.000000,66.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.230000,0.329000,-1.748000,0.009000,-0.001000,-0.040000,-0.303000,0.148000,-0.526000,0.029000,0.003000,-0.027000,23.337000,0.585000,35.205002,0
11363,return_positive,0.153000,3.058000,0.167000,-0.162000,0.038000,-0.251000,0.001000,-161.000000,-265.000000,-215.000000,401.000000,32.000000,46.000000,66.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.326000,0.427000,-2.120000,0.010000,0.000000,-0.039000,-0.394000,0.216000,-0.688000,0.029000,0.006000,-0.023000,23.371000,0.595000,35.243000,0
11447,return_positive,0.152000,2.875000,0.175000,-0.162000,0.039000,-0.251000,0.000000,-165.000000,-412.000000,-134.000000,354.000000,32.000000,62.000000,85.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.099000,0.312000,-1.525000,0.008000,0.000000,-0.015000,-0.223000,0.144000,-0.456000,0.030000,0.005000,-0.019000,23.371000,0.595000,35.243000,0
11530,return_positive,0.151000,2.561000,0.174000,-0.162000,0.039000,-0.251000,0.000000,-169.000000,-694.000000,-33.000000,321.000000,39.000000,75.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.309000,0.488000,-1.287000,0.009000,-0.001000,-0.009000,-0.344000,0.239000,-0.462000,0.029000,0.006000,-0.023000,23.329000,0.596000,35.125000,0
11617,return_positive,0.152000,2.182000,0.173000,-0.162000,0.038000,-0.252000,0.000000,-169.000000,-569.000000,22.000000,294.000000,28.000000,64.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.164000,0.179000,-1.952000,0.003000,-0.003000,-0.037000,-0.296000,0.204000,-0.593000,0.028000,0.003000,-0.027000,23.318001,0.605000,35.168999,0
11703,return_positive,0.151000,1.800000,0.175000,-0.163000,0.038000,-0.251000,0.000000,-155.000000,-535.000000,50.000000,285.000000,30.000000,72.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,22.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.232000,0.523000,-1.785000,0.009000,0.000000,-0.018000,-0.413000,0.282000,-0.482000,0.030000,0.004000,-0.022000,23.318001,0.605000,35.168999,0
11801,return_positive,0.153000,1.351000,0.173000,-0.163000,0.038000,-0.252000,0.000000,-161.000000,-613.000000,103.000000,260.000000,10.000000,80.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.014000,0.510000,-1.797000,0.010000,-0.001000,-0.007000,-0.329000,0.395000,-0.610000,0.032000,0.004000,-0.016000,23.334999,0.606000,35.154999,0
11893,return_positive,0.151000,0.949000,0.170000,-0.164000,0.038000,-0.251000,0.001000,-178.000000,-519.000000,136.000000,244.000000,19.000000,104.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.169000,0.517000,-1.693000,0.010000,-0.005000,0.000000,-0.232000,0.300000,-0.608000,0.030000,0.003000,-0.020000,23.334999,0.606000,35.154999,0
11974,return_positive,0.152000,0.587000,0.174000,-0.163000,0.039000,-0.252000,0.001000,-177.000000,-461.000000,134.000000,240.000000,17.000000,75.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.077000,0.436000,-1.438000,0.009000,0.000000,-0.008000,-0.383000,0.245000,-0.441000,0.031000,0.006000,-0.014000,23.333000,0.610000,35.216000,0
12057,return_positive,0.151000,0.324000,0.173000,-0.163000,0.039000,-0.252000,0.000000,-178.000000,-332.000000,167.000000,227.000000,18.000000,79.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.590000,0.179000,-2.399000,0.002000,-0.001000,-0.040000,-0.341000,0.197000,-0.637000,0.029000,0.003000,-0.028000,23.333000,0.610000,35.216000,0
12143,return_positive,0.152000,0.182000,0.170000,-0.163000,0.039000,-0.251000,0.001000,-191.000000,-293.000000,192.000000,227.000000,7.000000,72.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.137000,0.153000,-1.854000,0.002000,-0.003000,-0.027000,-0.377000,0.225000,-0.573000,0.029000,0.005000,-0.025000,23.326000,0.585000,35.335999,0
12229,return_positive,0.153000,0.127000,0.170000,-0.162000,0.039000,-0.251000,0.000000,-217.000000,-391.000000,236.000000,225.000000,7.000000,75.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.235000,0.137000,-1.421000,0.003000,0.002000,-0.009000,-0.369000,0.186000,-0.377000,0.029000,0.006000,-0.022000,23.326000,0.585000,35.335999,0
12351,move_negative,0.151000,0.108000,0.173000,-0.162000,0.038000,-0.251000,-0.001000,-153.000000,-323.000000,227.000000,194.000000,0.000000,77.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.252000,0.368000,-1.113000,0.008000,-0.001000,0.004000,-0.180000,0.244000,-0.539000,0.030000,0.003000,-0.016000,23.341999,0.582000,35.243000,0
12432,move_negative,0.151000,0.093000,0.173000,-0.162000,0.038000,-0.251000,0.000000,-153.000000,-449.000000,244.000000,206.000000,3.000000,72.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.260000,0.730000,-1.710000,0.011000,0.000000,-0.006000,-0.323000,0.308000,-0.432000,0.030000,0.003000,-0.017000,23.341999,0.582000,35.243000,0
12514,move_negative,0.152000,0.006000,0.174000,-0.163000,0.038000,-0.251000,0.001000,-160.000000,-364.000000,253.000000,186.000000,0.000000,84.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.055000,0.433000,-1.492000,0.008000,-0.004000,-0.011000,-0.340000,0.253000,-0.453000,0.030000,0.004000,-0.018000,23.327999,0.574000,35.261002,0
12593,move_negative,0.152000,-0.152000,0.173000,-0.160000,0.041000,-0.250000,0.000000,-154.000000,-530.000000,294.000000,193.000000,6.000000,91.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.044000,0.437000,-1.729000,0.009000,-0.003000,-0.026000,-0.291000,0.202000,-0.480000,0.030000,0.003000,-0.021000,23.327999,0.603000,35.216999,0
12678,move_negative,0.151000,-0.464000,0.174000,-0.163000,0.041000,-0.251000,0.002000,-145.000000,-610.000000,285.000000,200.000000,-5.000000,86.000000,80.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.219000,0.268000,-1.644000,0.006000,0.000000,-0.005000,-0.294000,0.270000,-0.529000,0.031000,0.004000,-0.019000,23.327999,0.603000,35.216999,0
12759,move_negative,0.152000,-0.810000,0.174000,-0.162000,0.039000,-0.250000,-0.001000,-139.000000,-563.000000,283.000000,183.000000,-9.000000,83.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.028000,0.419000,-1.775000,0.010000,0.000000,-0.026000,-0.369000,0.172000,-0.444000,0.030000,0.006000,-0.024000,23.330000,0.604000,35.276001,0
12838,move_negative,0.151000,-1.181000,0.174000,-0.163000,0.038000,-0.251000,0.001000,-129.000000,-569.000000,335.000000,177.000000,-4.000000,76.000000,87.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.392000,0.452000,-1.541000,0.011000,0.001000,-0.015000,-0.371000,0.162000,-0.514000,0.029000,0.005000,-0.020000,23.330999,0.614000,35.237999,0
12918,move_negative,0.151000,-1.550000,0.173000,-0.162000,0.038000,-0.251000,0.000000,-134.000000,-489.000000,319.000000,180.000000,-5.000000,89.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.356000,0.338000,-1.464000,0.010000,0.000000,0.000000,-0.392000,0.297000,-0.425000,0.031000,0.006000,-0.017000,23.330999,0.614000,35.237999,0
12997,move_negative,0.152000,-1.880000,0.174000,-0.164000,0.038000,-0.251000,0.000000,-140.000000,-504.000000,332.000000,190.000000,-9.000000,85.000000,82.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.389000,0.646000,-1.571000,0.006000,-0.003000,-0.028000,-0.539000,0.237000,-0.485000,0.028000,0.007000,-0.021000,23.344000,0.598000,35.237000,0
13078,move_negative,0.151000,-2.257000,0.173000,-0.164000,0.038000,-0.252000,0.001000,-143.000000,-575.000000,352.000000,196.000000,-9.000000,89.000000,71.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.354000,0.191000,-1.862000,0.007000,-0.001000,-0.043000,-0.271000,0.243000,-0.616000,0.031000,0.004000,-0.028000,23.322001,0.589000,35.256001,0
13172,move_negative,0.152000,-2.583000,0.170000,-0.163000,0.038000,-0.251000,0.001000,-148.000000,-401.000000,358.000000,200.000000,-19.000000,101.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.069000,0.516000,-1.191000,0.007000,-0.001000,-0.009000,-0.325000,0.115000,-0.452000,0.028000,0.006000,-0.020000,23.322001,0.589000,35.256001,0
13254,move_negative,0.151000,-2.790000,0.173000,-0.163000,0.039000,-0.252000,0.000000,-171.000000,-314.000000,343.000000,203.000000,-22.000000,94.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.125000,0.447000,-2.010000,0.009000,-0.004000,-0.030000,-0.235000,0.331000,-0.590000,0.030000,0.002000,-0.024000,23.354000,0.590000,35.215000,0
13352,move_negative,0.152000,-2.899000,0.174000,-0.166000,0.038000,-0.255000,0.002000,-161.000000,-25.000000,365.000000,223.000000,-11.000000,111.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.385000,0.137000,-1.626000,0.004000,0.003000,-0.010000,-0.348000,0.118000,-0.415000,0.028000,0.005000,-0.017000,23.327000,0.599000,35.235001,0
13512,return_negative,0.151000,-2.910000,0.173000,-0.162000,0.038000,-0.252000,0.001000,-156.000000,139.000000,345.000000,218.000000,-30.000000,107.000000,86.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.346000,0.389000,-1.507000,0.006000,0.002000,0.000000,-0.221000,0.259000,-0.525000,0.029000,0.003000,-0.018000,23.358000,0.583000,35.265999,0
13594,return_negative,0.149000,-2.905000,0.175000,-0.164000,0.038000,-0.252000,0.000000,-147.000000,276.000000,348.000000,216.000000,-36.000000,114.000000,90.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.530000,0.465000,-1.915000,0.013000,0.002000,-0.017000,-0.450000,0.218000,-0.581000,0.031000,0.004000,-0.021000,23.363001,0.593000,35.257999,0
13687,return_negative,0.151000,-2.844000,0.175000,-0.164000,0.039000,-0.251000,0.000000,-133.000000,378.000000,349.000000,210.000000,-34.000000,124.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.447000,0.287000,-1.884000,0.005000,-0.003000,-0.039000,-0.419000,0.174000,-0.496000,0.029000,0.004000,-0.023000,23.363001,0.593000,35.257999,0
13769,return_negative,0.152000,-2.647000,0.173000,-0.163000,0.038000,-0.250000,0.000000,-121.000000,523.000000,339.000000,214.000000,-39.000000,120.000000,89.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.021000,0.414000,-1.268000,0.008000,0.000000,0.000000,-0.373000,0.221000,-0.426000,0.029000,0.006000,-0.020000,23.351999,0.596000,35.235001,0
13852,return_negative,0.149000,-2.324000,0.175000,-0.163000,0.039000,-0.251000,0.001000,-121.000000,571.000000,336.000000,210.000000,-48.000000,107.000000,95.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.402000,0.636000,-1.756000,0.011000,0.000000,-0.006000,-0.310000,0.329000,-0.540000,0.031000,0.003000,-0.019000,23.327999,0.602000,35.258999,0
13934,return_negative,0.151000,-1.952000,0.175000,-0.164000,0.039000,-0.252000,0.001000,-137.000000,609.000000,341.000000,220.000000,-45.000000,133.000000,97.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.042000,0.335000,-1.984000,0.005000,-0.002000,-0.034000,-0.332000,0.224000,-0.633000,0.030000,0.006000,-0.021000,23.327999,0.602000,35.258999,0
14024,return_negative,0.152000,-1.587000,0.177000,-0.162000,0.038000,-0.252000,-0.001000,-120.000000,720.000000,342.000000,210.000000,-43.000000,129.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.177000,0.159000,-2.122000,0.005000,-0.001000,-0.041000,-0.279000,0.138000,-0.554000,0.029000,0.004000,-0.027000,23.323999,0.602000,35.298000,0
14107,return_negative,0.151000,-1.172000,0.174000,-0.163000,0.038000,-0.251000,0.000000,-128.000000,740.000000,353.000000,215.000000,-43.000000,133.000000,90.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.521000,0.319000,-1.886000,0.006000,0.001000,-0.046000,-0.296000,0.268000,-0.645000,0.030000,0.003000,-0.029000,23.337999,0.594000,35.305000,0
14188,return_negative,0.152000,-0.800000,0.173000,-0.163000,0.039000,-0.250000,-0.001000,-127.000000,619.000000,347.000000,212.000000,-44.000000,126.000000,100.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.162000,0.735000,-1.544000,0.016000,0.000000,0.001000,-0.280000,0.294000,-0.622000,0.032000,0.004000,-0.017000,23.337999,0.594000,35.305000,0
14282,return_negative,0.153000,-0.398000,0.174000,-0.163000,0.039000,-0.252000,0.001000,-136.000000,392.000000,332.000000,227.000000,-55.000000,143.000000,86.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.238000,0.212000,-2.371000,0.003000,-0.003000,-0.040000,-0.413000,0.235000,-0.619000,0.031000,0.005000,-0.023000,23.330999,0.598000,35.241001,0
14363,return_negative,0.152000,-0.116000,0.177000,-0.160000,0.038000,-0.251000,0.000000,-117.000000,362.000000,335.000000,212.000000,-51.000000,132.000000,97.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.095000,0.613000,-1.332000,0.009000,-0.001000,0.005000,-0.386000,0.206000,-0.495000,0.028000,0.005000,-0.018000,23.337000,0.600000,35.217999,0
14459,return_negative,0.151000,0.037000,0.173000,-0.162000,0.037000,-0.252000,0.001000,-124.000000,215.000000,324.000000,180.000000,-57.000000,119.000000,93.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.420000,0.668000,-1.931000,0.010000,0.001000,-0.044000,-0.323000,0.258000,-0.576000,0.030000,0.003000,-0.027000,23.336000,0.589000,35.294998,0
14541,return_negative,0.151000,0.083000,0.173000,-0.162000,0.038000,-0.250000,0.001000,-139.000000,363.000000,330.000000,187.000000,-63.000000,133.000000,86.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.287000,0.519000,-2.111000,0.008000,-0.003000,-0.047000,-0.274000,0.329000,-0.641000,0.030000,0.003000,-0.030000,23.336000,0.589000,35.294998,0
14668,final_static,0.152000,0.100000,0.175000,-0.163000,0.038000,-0.251000,0.000000,-139.000000,403.000000,327.000000,186.000000,-67.000000,141.000000,96.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.043000,0.575000,-1.278000,0.009000,-0.003000,-0.002000,-0.230000,0.243000,-0.515000,0.031000,0.001000,-0.017000,23.351999,0.582000,35.301998,0
14754,final_static,0.149000,0.108000,0.177000,-0.162000,0.039000,-0.251000,0.000000,-143.000000,347.000000,333.000000,180.000000,-72.000000,125.000000,110.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.083000,0.551000,-1.450000,0.015000,-0.001000,-0.009000,-0.323000,0.228000,-0.377000,0.032000,0.005000,-0.019000,23.351999,0.582000,35.301998,0
14833,final_static,0.152000,0.108000,0.177000,-0.162000,0.038000,-0.250000,0.000000,-150.000000,296.000000,337.000000,182.000000,-66.000000,133.000000,105.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.429000,0.607000,-1.801000,0.010000,-0.002000,-0.018000,-0.496000,0.182000,-0.626000,0.028000,0.006000,-0.022000,23.344000,0.598000,35.353001,0
14912,final_static,0.152000,0.109000,0.175000,-0.160000,0.038000,-0.251000,-0.001000,-163.000000,259.000000,340.000000,186.000000,-72.000000,121.000000,99.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.373000,0.586000,-1.428000,0.008000,0.000000,-0.003000,-0.325000,0.316000,-0.574000,0.031000,0.005000,-0.019000,23.344000,0.598000,35.353001,0
15004,final_static,0.153000,0.112000,0.173000,-0.163000,0.038000,-0.251000,0.000000,-161.000000,177.000000,367.000000,193.000000,-69.000000,127.000000,115.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.029000,0.290000,-1.912000,0.006000,-0.002000,-0.035000,-0.418000,0.176000,-0.556000,0.028000,0.007000,-0.028000,23.305000,0.568000,35.304001,0
15084,final_static,0.151000,0.112000,0.173000,-0.164000,0.039000,-0.251000,0.001000,-148.000000,123.000000,387.000000,188.000000,-61.000000,118.000000,99.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.584000,0.165000,-1.924000,0.004000,0.006000,-0.022000,-0.404000,0.125000,-0.556000,0.027000,0.006000,-0.021000,23.305000,0.568000,35.304001,0
15169,final_static,0.152000,0.109000,0.173000,-0.162000,0.039000,-0.251000,0.000000,-142.000000,112.000000,376.000000,205.000000,-69.000000,127.000000,93.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.320000,0.193000,-1.922000,0.002000,0.000000,-0.038000,-0.321000,0.168000,-0.541000,0.028000,0.005000,-0.026000,23.354000,0.575000,35.291000,0
15249,final_static,0.152000,0.109000,0.174000,-0.163000,0.039000,-0.252000,0.000000,-128.000000,107.000000,391.000000,184.000000,-76.000000,134.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.300000,0.484000,-2.028000,0.007000,-0.002000,-0.026000,-0.261000,0.178000,-0.582000,0.030000,0.003000,-0.023000,23.354000,0.575000,35.291000,0
15329,final_static,0.152000,0.108000,0.173000,-0.164000,0.039000,-0.250000,0.000000,-125.000000,90.000000,384.000000,185.000000,-76.000000,125.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.390000,0.551000,-2.059000,0.014000,0.002000,-0.040000,-0.396000,0.291000,-0.490000,0.031000,0.006000,-0.029000,23.350000,0.594000,35.275002,0
15411,final_static,0.152000,0.109000,0.175000,-0.164000,0.038000,-0.250000,0.000000,-125.000000,87.000000,397.000000,187.000000,-84.000000,123.000000,96.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.266000,0.408000,-1.403000,0.008000,0.000000,-0.003000,-0.434000,0.212000,-0.594000,0.029000,0.004000,-0.021000,23.349001,0.589000,35.264999,0
15498,final_static,0.152000,0.109000,0.175000,-0.164000,0.039000,-0.250000,0.000000,-127.000000,94.000000,408.000000,180.000000,-75.000000,113.000000,83.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.383000,0.242000,-2.147000,0.006000,0.000000,-0.041000,-0.509000,0.223000,-0.686000,0.031000,0.007000,-0.023000,23.320000,0.581000,35.268002,0
15588,final_static,0.152000,0.109000,0.175000,-0.164000,0.039000,-0.251000,0.000000,-132.000000,94.000000,415.000000,185.000000,-87.000000,88.000000,87.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.145000,0.420000,-1.576000,0.006000,0.000000,-0.005000,-0.402000,0.239000,-0.507000,0.028000,0.005000,-0.019000,23.320000,0.581000,35.268002,0
15679,final_static,0.151000,0.108000,0.177000,-0.163000,0.039000,-0.251000,0.001000,-126.000000,94.000000,413.000000,178.000000,-97.000000,97.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.319000,0.706000,-1.789000,0.011000,0.000000,-0.038000,-0.267000,0.205000,-0.537000,0.029000,0.002000,-0.023000,23.315001,0.588000,35.300999,0
15762,final_static,0.152000,0.108000,0.177000,-0.163000,0.038000,-0.250000,0.001000,-138.000000,91.000000,419.000000,168.000000,-96.000000,78.000000,88.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.564000,0.206000,-1.673000,0.009000,0.004000,-0.040000,-0.405000,0.130000,-0.693000,0.030000,0.006000,-0.026000,23.330000,0.585000,35.278999,0
15848,final_static,0.149000,0.108000,0.175000,-0.164000,0.041000,-0.251000,0.000000,-137.000000,91.000000,427.000000,177.000000,-100.000000,85.000000,84.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.067000,0.186000,-1.800000,0.005000,-0.004000,-0.029000,-0.357000,0.117000,-0.469000,0.028000,0.005000,-0.024000,23.327000,0.582000,35.284000,0
15943,final_static,0.151000,0.108000,0.175000,-0.163000,0.038000,-0.251000,0.000000,-127.000000,80.000000,419.000000,169.000000,-91.000000,84.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.174000,-0.089000,-2.061000,-0.001000,-0.006000,-0.034000,-0.471000,0.179000,-0.594000,0.030000,0.005000,-0.025000,23.337999,0.588000,35.270000,0
16037,final_static,0.149000,0.111000,0.174000,-0.163000,0.039000,-0.248000,-0.001000,-116.000000,84.000000,440.000000,172.000000,-101.000000,86.000000,83.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.443000,0.867000,-1.695000,0.016000,0.000000,-0.020000,-0.324000,0.276000,-0.539000,0.030000,0.002000,-0.023000,23.337999,0.588000,35.270000,0
16117,final_static,0.152000,0.109000,0.175000,-0.162000,0.038000,-0.250000,0.000000,-116.000000,82.000000,436.000000,175.000000,-97.000000,95.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.221000,0.768000,-1.152000,0.017000,0.003000,-0.002000,-0.311000,0.385000,-0.451000,0.032000,0.005000,-0.018000,23.323000,0.589000,35.342999,0
16198,final_static,0.152000,0.109000,0.174000,-0.162000,0.039000,-0.251000,0.000000,-104.000000,95.000000,454.000000,171.000000,-96.000000,90.000000,79.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.163000,0.290000,-1.458000,0.006000,-0.004000,-0.012000,-0.240000,0.228000,-0.449000,0.029000,0.002000,-0.017000,23.330000,0.594000,35.327000,0
16283,final_static,0.152000,0.107000,0.177000,-0.164000,0.039000,-0.255000,0.001000,-105.000000,95.000000,410.000000,178.000000,-102.000000,98.000000,63.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.526000,0.644000,-1.883000,0.012000,0.000000,-0.029000,-0.479000,0.227000,-0.587000,0.031000,0.006000,-0.023000,23.330000,0.594000,35.327000,0
16365,final_static,0.151000,0.108000,0.177000,-0.163000,0.038000,-0.250000,0.000000,-117.000000,91.000000,403.000000,175.000000,-103.000000,91.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.004000,0.500000,-1.405000,0.010000,-0.004000,0.000000,-0.199000,0.241000,-0.539000,0.031000,0.001000,-0.020000,23.346001,0.598000,35.284000,0
16457,final_static,0.152000,0.109000,0.175000,-0.163000,0.038000,-0.248000,0.000000,-133.000000,84.000000,383.000000,166.000000,-97.000000,93.000000,70.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.275000,0.610000,-1.188000,0.012000,0.000000,0.001000,-0.383000,0.390000,-0.425000,0.032000,0.006000,-0.013000,23.339001,0.594000,35.320999,0
16538,final_static,0.151000,0.107000,0.174000,-0.162000,0.038000,-0.248000,0.001000,-116.000000,81.000000,359.000000,171.000000,-105.000000,99.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.011000,0.310000,-1.471000,0.005000,-0.007000,0.003000,-0.358000,0.326000,-0.421000,0.030000,0.004000,-0.013000,23.339001,0.594000,35.320999,0
16624,final_static,0.151000,0.105000,0.177000,-0.162000,0.038000,-0.251000,0.000000,-122.000000,90.000000,300.000000,172.000000,-104.000000,82.000000,69.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.507000,0.336000,-1.993000,0.007000,0.000000,-0.042000,-0.456000,0.130000,-0.463000,0.029000,0.006000,-0.024000,23.343000,0.581000,35.332001,0
16708,final_static,0.151000,0.109000,0.175000,-0.163000,0.038000,-0.251000,-0.001000,-127.000000,94.000000,259.000000,156.000000,-110.000000,86.000000,76.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.301000,0.405000,-1.459000,0.008000,0.003000,-0.009000,-0.296000,0.139000,-0.449000,0.029000,0.005000,-0.019000,23.343000,0.581000,35.332001,0
16793,final_static,0.152000,0.108000,0.175000,-0.163000,0.039000,-0.251000,0.000000,-131.000000,117.000000,259.000000,170.000000,-117.000000,31.000000,77.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.408000,0.393000,-1.847000,0.005000,0.001000,-0.016000,-0.353000,0.180000,-0.666000,0.027000,0.006000,-0.023000,23.329000,0.587000,35.323002,0
16873,final_static,0.152000,0.108000,0.175000,-0.162000,0.038000,-0.250000,0.000000,-136.000000,117.000000,210.000000,164.000000,-104.000000,37.000000,74.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.215000,0.589000,-1.603000,0.008000,0.001000,-0.001000,-0.264000,0.317000,-0.524000,0.030000,0.004000,-0.019000,23.372000,0.582000,35.320000,0
16954,final_static,0.152000,0.105000,0.175000,-0.163000,0.038000,-0.251000,0.000000,-136.000000,106.000000,189.000000,161.000000,-116.000000,41.000000,72.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.190000,0.517000,-1.687000,0.007000,-0.002000,-0.018000,-0.368000,0.244000,-0.614000,0.029000,0.004000,-0.020000,23.372000,0.582000,35.320000,0
17032,final_static,0.152000,0.109000,0.177000,-0.162000,0.038000,-0.250000,0.000000,-130.000000,98.000000,167.000000,161.000000,-117.000000,39.000000,64.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.238000,0.403000,-1.587000,0.011000,0.000000,-0.009000,-0.333000,0.233000,-0.503000,0.030000,0.005000,-0.022000,23.354000,0.587000,35.342999,0
17117,final_static,0.151000,0.107000,0.177000,-0.162000,0.038000,-0.250000,0.001000,-127.000000,116.000000,151.000000,151.000000,-112.000000,37.000000,68.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.135000,0.331000,-1.423000,0.010000,-0.003000,0.007000,-0.309000,0.253000,-0.578000,0.030000,0.005000,-0.015000,23.325001,0.583000,35.306999,0
17197,final_static,0.151000,0.108000,0.177000,-0.162000,0.038000,-0.250000,0.001000,-120.000000,109.000000,155.000000,151.000000,-122.000000,30.000000,73.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.224000,0.434000,-1.657000,0.006000,0.001000,-0.014000,-0.360000,0.246000,-0.559000,0.029000,0.006000,-0.021000,23.325001,0.583000,35.306999,0
17279,final_static,0.151000,0.108000,0.177000,-0.163000,0.038000,-0.248000,0.000000,-124.000000,117.000000,113.000000,151.000000,-120.000000,32.000000,71.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.298000,0.415000,-1.686000,0.012000,0.000000,-0.029000,-0.383000,0.235000,-0.560000,0.032000,0.004000,-0.024000,23.316000,0.585000,35.301998,0
17362,final_static,0.151000,0.108000,0.177000,-0.162000,0.038000,-0.250000,-0.001000,-125.000000,117.000000,86.000000,147.000000,-118.000000,37.000000,57.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.279000,0.471000,-1.705000,0.006000,-0.002000,-0.029000,-0.353000,0.289000,-0.543000,0.030000,0.004000,-0.023000,23.316000,0.585000,35.301998,0
17443,final_static,0.151000,0.109000,0.177000,-0.163000,0.038000,-0.251000,0.000000,-124.000000,121.000000,77.000000,156.000000,-115.000000,32.000000,58.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.201000,0.267000,-1.916000,0.005000,0.000000,-0.031000,-0.380000,0.291000,-0.567000,0.031000,0.005000,-0.026000,23.341999,0.601000,35.305000,0
17523,final_static,0.152000,0.107000,0.177000,-0.162000,0.038000,-0.250000,0.000000,-121.000000,119.000000,54.000000,139.000000,-118.000000,36.000000,62.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,-0.400000,0.583000,-1.947000,0.015000,0.001000,-0.024000,-0.304000,0.259000,-0.623000,0.031000,0.003000,-0.017000,23.341999,0.601000,35.305000,0
17607,final_static,0.152000,0.109000,0.177000,-0.162000,0.038000,-0.252000,0.000000,-116.000000,122.000000,18.000000,145.000000,-123.000000,39.000000,43.000000,23.000000,22.000000,23.000000,23.000000,23.000000,23.000000,23.000000,33.000000,32.000000,32.000000,32.000000,33.000000,33.000000,35.000000,0.038000,0.397000,-1.730000,0.007000,-0.003000,-0.027000,-0.410000,0.094000,-0.449000,0.027000,0.005000,-0.025000,23.349001,0.591000,35.341000,0
---
name: rm75-drag-trajectory
description: "Use when Codex needs to work with the local RM75 drag-teach trajectory workflow in /home/mashiro/project/linkerhand-cpp-sdk: six-dof force position+orientation drag teaching, synchronized CSV recording, vendor trajectory save attempts, CSV-to-C++ TCP waypoint conversion, RM/data/trajectories folder management, and safe build/dry-run steps. Trigger for requests about RM75 trajectory recording, drag teach files, C++ waypoint conversion, or maintaining the rm_control trajectory modules."
---
# RM75 Drag Trajectory
Use this skill for the RM75 drag-teach trajectory pipeline in the linkerhand checkout.
## Workflow
1. Read `references/workflow.md` before editing code or running commands.
2. Prefer the `RM/` subproject for maintained C++ code.
3. Keep the older `examples/realman_trajectory_*` programs as compatibility demos unless the user explicitly asks to remove or refactor them.
4. Treat synchronized CSV as the primary artifact.
5. Treat `rm_save_trajectory` vendor output as best-effort because the six-dof force drag API does not expose a trajectory-record flag.
## Boundaries
- Put RM SDK calls only in `RM/src/drivers/realman/`.
- Put drag-teach workflow orchestration in `RM/src/core/`.
- Put CSV, directory, and C++ waypoint conversion code in `RM/src/modules/trajectory/`.
- Put human operating instructions in `docs/` or `RM/README.md`.
- Do not run motion or drag-teach commands unless the user explicitly asks and confirms the safety setup.
## Default Safety
Build and validate first. For live drag teach, ensure the workspace is clear, payload is safe, and E-stop is reachable. For TCP replay work, generate C++ waypoint data first; do not jump directly from CSV to live `rm_movel`.
interface:
display_name: "RM75 Drag Trajectory"
short_description: "Record and convert RM75 drag trajectories"
default_prompt: "Use $rm75-drag-trajectory to record a safe RM75 drag-teach trajectory and convert it to C++ TCP waypoints."
# RM75 Drag Trajectory Workflow
## Fixed Context
- Repo: `/home/mashiro/project/linkerhand-cpp-sdk`
- RM subproject: `/home/mashiro/project/linkerhand-cpp-sdk/RM`
- SDK root: `/home/mashiro/RM_API2/C++`
- Controller: `192.168.1.18:8080`
- Robot: RM75, 7 DOF, integrated 6D force, controller generation 3
## C++ Maintainer Map
| Purpose | Path |
| --- | --- |
| Robot abstraction | `RM/include/rm_control/interfaces/robot_arm.h` |
| RealMan SDK wrapper | `RM/include/rm_control/drivers/realman/realman_robot_arm.h`, `RM/src/drivers/realman/realman_robot_arm.cpp` |
| Drag-teach orchestration | `RM/include/rm_control/core/drag_teach_recorder.h`, `RM/src/core/drag_teach_recorder.cpp` |
| Trajectory storage and conversion | `RM/include/rm_control/modules/trajectory/trajectory_file_store.h`, `RM/src/modules/trajectory/trajectory_file_store.cpp` |
| Live record CLI | `RM/src/drag_teach_record_main.cpp` |
| Offline convert CLI | `RM/src/trajectory_convert_main.cpp` |
## Data Folders
Use this root:
```text
RM/data/trajectories/
├── csv/
├── vendor/
├── converted/
└── reports/
```
CSV is the source of truth. Vendor files are best-effort artifacts. Converted files hold generated C++ TCP waypoint tables.
## Build And Test
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake -S RM -B RM/build -DCMAKE_BUILD_TYPE=Debug
cmake --build RM/build -j
ctest --test-dir RM/build --output-on-failure
```
These commands are safe: they do not move the robot.
## Record Drag Teach
Only run after explicit user confirmation and safety setup.
```bash
./RM/build/rm_drag_teach_record demo_pick_path 15 100
```
Default live behavior:
- Connects to `192.168.1.18:8080`.
- Starts six-dof force drag teach with position and orientation enabled.
- Enables singular wall by default.
- Samples current arm state every `100 ms`.
- Writes CSV to `RM/data/trajectories/csv/demo_pick_path.csv`.
- Attempts vendor save to `RM/data/trajectories/vendor/demo_pick_path_vendor.txt`.
## Convert CSV To C++
This is offline and safe.
```bash
./RM/build/rm_trajectory_convert RM/data/trajectories/csv/demo_pick_path.csv
```
Default output:
```text
RM/data/trajectories/converted/demo_pick_path_tcp_path.cpp
```
## Safety Rules
- Do not run live drag teach or replay unless the user explicitly requests it.
- First live run must be unloaded, low-speed/manual, with clear workspace and reachable E-stop.
- Keep CSV as the primary replay/conversion input.
- For TCP path reproduction, use CSV joint values as future IK references or validation data; do not assume TCP-only waypoints uniquely determine RM75 arm posture.
......@@ -25,10 +25,20 @@ tests/
│ ├── test_RangeToArc.cpp # RangeToArc.h 的测试
│ ├── test_IHand_Utils.cpp # IHand 工具函数的测试
│ └── test_CanFrame.cpp # CanFrame 的测试
├── realman_hardware/ # 睿尔曼真机硬件模块测试
│ ├── test_realman_connection.cpp
│ ├── test_realman_joint_telemetry.cpp
│ ├── test_realman_force_sensor.cpp
│ ├── test_realman_controller_state.cpp
│ ├── test_realman_motion_tracking.cpp
│ ├── realman_hw_test_common.hpp
│ └── README.md
├── CMakeLists.txt # 测试构建配置
└── README.md # 本文件
```
睿尔曼硬件测试是需要真实机械臂的集成测试,不依赖 GoogleTest。每个模块都是独立可执行文件,详细说明见 [睿尔曼 RealMan 硬件模块测试](realman_hardware/README.md)
---
## 构建测试
......
# 睿尔曼 RealMan 硬件模块测试
本目录提供类似单元测试风格的睿尔曼机械臂硬件测试。每个测试都是独立可执行文件,自己完成 SDK 初始化、机械臂连接、模块断言、报告输出和资源释放,不依赖其他测试先运行。
## 测试模块
| CTest/CLion target | 类型 | 是否运动 | 测试内容 |
| --- | --- | --- | --- |
| `realman_hw_test_connection` | 只读 | 否 | SDK 初始化、连接、机械臂基础信息、软件信息 |
| `realman_hw_test_joint_telemetry` | 只读 | 否 | 当前关节角、关节电流、电压、温度、使能状态、错误码 |
| `realman_hw_test_force_sensor` | 只读 | 否 | 六维力/力矩传感器读数、静态范围检查 |
| `realman_hw_test_controller_state` | 只读 | 否 | 控制器电压、电流、温度、错误码 |
| `realman_hw_test_motion_tracking` | 运动 | 是 | J2 `+2° -> 原位 -> -2° -> 原位`,检查到位误差 |
| `realman_hw_test_force_retreat` | 手动/运动 | 是 | 检测末端受力方向,沿工作坐标系做小步退让 |
| `realman_hw_test_force_retreat_hold` | 手动/持续运动 | 是 | 持续保持外力退让状态,直到 Ctrl+C/SIGTERM 或触发安全边界 |
## 独立性约束
- 每个测试都有自己的 `main()`
- 每个测试单独调用 `rm_init``rm_create_robot_arm``rm_delete_robot_arm``rm_destroy/rm_destory`
- 每个测试单独生成 Markdown 报告。
- 测试之间不共享全局运行状态,不依赖执行顺序。
- CTest 使用 `RESOURCE_LOCK realman_robot`,即使并行运行也不会让多个测试同时抢同一台机械臂。
公共头文件 `realman_hw_test_common.hpp` 只提供测试基础设施,例如断言输出、报告路径、连接生命周期管理;不包含任何具体模块测试逻辑。
## 构建
Debug:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-debug
cmake --build --preset realman-hw-tests-debug
```
Release:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-release
cmake --build --preset realman-hw-tests-release
```
## 运行
只运行只读测试,不会移动机械臂:
```bash
ctest --test-dir cmake-build-debug --output-on-failure --label-regex readonly
```
运行单个模块:
```bash
ctest --test-dir cmake-build-debug --output-on-failure -R realman_hw_test_force_sensor
```
运行运动跟踪测试:
```bash
ctest --test-dir cmake-build-debug --output-on-failure -R realman_hw_test_motion_tracking
```
运行手动力退让测试:
```bash
ctest --test-dir cmake-build-debug --output-on-failure -R realman_hw_test_force_retreat
```
如果 12 秒内没有检测到超过阈值的外力,CTest 会把该测试标记为 `Skipped`,不算失败。
持续保持外力退让状态:
```bash
./cmake-build-debug/realman_hw_test_force_retreat_hold
```
停止:
```bash
Ctrl+C
```
后台启动:
```bash
setsid ./cmake-build-debug/realman_hw_test_force_retreat_hold \
> reports/realman_hardware_tests/force_retreat_hold_runtime.log 2>&1 < /dev/null &
echo $! > reports/realman_hardware_tests/force_retreat_hold.pid
```
后台停止:
```bash
kill "$(cat reports/realman_hardware_tests/force_retreat_hold.pid)"
```
运行所有 RealMan 硬件测试:
```bash
ctest --test-dir cmake-build-debug --output-on-failure --label-regex realman
```
上面的“全部测试”不包含 `realman_hw_test_force_retreat`,因为它需要人工施加外力,属于手动测试。
也可以通过构建 preset 运行:
```bash
cmake --build --preset realman-hw-run-readonly-tests-debug
cmake --build --preset realman-hw-run-tests-debug
```
## CLion 使用
1. 打开项目:
```text
/home/mashiro/project/linkerhand-cpp-sdk
```
2. 点击 `Reload CMake Project`。
3. 在 Run/Debug Configurations 中选择任意独立 target:
```text
realman_hw_test_connection
realman_hw_test_joint_telemetry
realman_hw_test_force_sensor
realman_hw_test_controller_state
realman_hw_test_motion_tracking
realman_hw_test_force_retreat
realman_hw_test_force_retreat_hold
```
4. 需要批量运行时,使用 CLion 的 CTest 面板或命令行 `ctest`。
## 报告位置
每个模块都会生成独立报告:
```text
reports/realman_hardware_tests/
```
稳定 latest 文件:
```text
reports/realman_hardware_tests/realman_hw_connection_latest.md
reports/realman_hardware_tests/realman_hw_joint_telemetry_latest.md
reports/realman_hardware_tests/realman_hw_force_sensor_latest.md
reports/realman_hardware_tests/realman_hw_controller_state_latest.md
reports/realman_hardware_tests/realman_hw_motion_tracking_latest.md
reports/realman_hardware_tests/realman_hw_force_retreat_latest.md
reports/realman_hardware_tests/realman_hw_force_retreat_hold_latest.md
```
## 力退让测试逻辑
`realman_hw_test_force_retreat` 的控制逻辑:
```text
读取工作坐标系外力 work_zero_force_data[Fx,Fy,Fz]
如果 |F| >= 3N:
计算单位方向 dir = F / |F|
调用 rm_movel_offset,在工作坐标系下移动 8mm * dir
再次读取外力
若外力仍大于释放阈值,则继续小步退让
最多执行 4 步,总退让不超过 32mm
```
关键源码参数在:
```text
tests/realman_hardware/test_realman_force_retreat.cpp
```
| 参数 | 默认值 | 说明 |
| --- | ---: | --- |
| `kForceThresholdN` | `3.0` | 触发退让的外力阈值 |
| `kForceReleaseThresholdN` | `1.2` | 低于该值后停止退让 |
| `kDangerForceLimitN` | `60.0` | 超过该值会拒绝继续运动 |
| `kRetreatStepMeters` | `0.008` | 每次退让 8mm |
| `kMaxTotalRetreatMeters` | `0.032` | 最大总退让 32mm |
| `kMotionSpeedPercent` | `5` | 笛卡尔退让速度 |
| `kRetreatDirectionSign` | `1.0` | 方向符号;若实际方向反了,改成 `-1.0` |
该测试使用 `work_zero_force_data[0..2]` 和 `rm_movel_offset(... frame_type=0)`,两者都按工作坐标系处理,避免工具坐标系和工作坐标系混用。
## 持续外力退让保持模式
`realman_hw_test_force_retreat_hold` 会一直保持监听:
```text
持续读取工作坐标系外力 work_zero_force_data[Fx,Fy,Fz]
|F| < 0.8N:保持等待
0.8N <= |F| < 2N:死区,不移动
|F| >= 2N:沿受力方向自适应退让
重复上述过程,直到 Ctrl+C/SIGTERM 或触发安全边界
```
安全边界:
| 参数 | 默认值 | 说明 |
| --- | ---: | --- |
| `kForceThresholdN` | `2.0` | 触发退让阈值 |
| `kForceReleaseThresholdN` | `0.8` | 释放阈值 |
| `kDangerForceLimitN` | `60.0` | 危险力上限,超过立即停止 |
| `kRetreatMinStepMeters` | `0.004` | 最小单步退让 4mm |
| `kRetreatMaxStepMeters` | `0.014` | 最大单步退让 14mm |
| `kRetreatStepGainMetersPerNewton` | `0.0015` | 每增加 1N,单步约增加 1.5mm |
| `kMaxCumulativeRetreatMeters` | `0.200` | 单次运行最大累计退让 200mm |
| `kMinMotionSpeedPercent` | `2` | 小力时的最低退让速度 |
| `kMaxMotionSpeedPercent` | `15` | 大力时的最高退让速度 |
| `kSpeedGainPercentPerNewton` | `1.5` | 每增加 1N,速度约增加 1.5% |
| `kRetreatDirectionSign` | `1.0` | 若实际方向反了,改成 `-1.0` |
持续模式不会自动回到起点;它的目的就是在你测试时保持“被推就让”的状态。现在退让强度是随外力变化的:力越大,单步越大、速度越快;力变小,单步和速度都会减小。
## 本机实测结果
当前已经在 `192.168.1.18:8080` 上完成测试:
| 测试 | 结果 |
| --- | --- |
| `realman_hw_test_connection` | PASS |
| `realman_hw_test_joint_telemetry` | PASS |
| `realman_hw_test_force_sensor` | PASS |
| `realman_hw_test_controller_state` | PASS |
| `realman_hw_test_motion_tracking` | PASS |
| `realman_hw_test_force_retreat` | 已构建,手动测试,需要人工施加外力 |
| `realman_hw_test_force_retreat_hold` | 已构建,持续手动测试,需要人工施加外力 |
运动测试实测摘要:
| 步骤 | 到位误差 |
| --- | ---: |
| `J2 +2°` | `0.010°` |
| `返回原位` | `0.002°` |
| `J2 -2°` | `0.012°` |
| `最终返回原位` | `0.008°` |
## 安全说明
- 默认只读测试不会发送运动指令。
- `realman_hw_test_motion_tracking` 会移动机械臂,运行前保持工作空间清空,急停按钮可触达。
- `realman_hw_test_force_retreat` 会根据人工施加的外力移动机械臂,首次运行时用手轻推,避免突然大力撞击末端。
- `realman_hw_test_force_retreat_hold` 会持续保持响应外力,测试结束后必须用 `Ctrl+C``kill` 停止。
- 运动测试默认只使用 J2 `±2°`、速度 `5%`
- 力退让测试默认每步只退让 `8mm`,最多 `32mm`
- 持续退让测试默认每步退让 `4mm..14mm`,速度 `2%..15%`,单次运行最多累计 `200mm`
- 这些测试不会自动启用接触式力位混合控制,也不会执行外部负载/碰撞类测试。
#pragma once
#include "rm_interface.h"
#include <array>
#include <cerrno>
#include <chrono>
#include <cmath>
#include <cstdarg>
#include <cstdio>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <string>
#include <sys/stat.h>
#include <thread>
#ifndef LINKERHAND_PROJECT_ROOT
#define LINKERHAND_PROJECT_ROOT "."
#endif
namespace realman_hw_test {
// 这些常量是当前实验台的固定接入参数。测试代码统一从这里取值,
// 避免每个模块各自硬编码 IP、端口和 RM75 自由度。
constexpr const char *kRobotIp = "192.168.1.18";
constexpr int kRobotPort = 8080;
constexpr int kTimeoutMs = 1000;
constexpr int kExpectedDof = 7;
inline void apiLogCallback(const char *message, va_list args) {
if (message == nullptr) {
return;
}
char buffer[1024] = {};
std::vsnprintf(buffer, sizeof(buffer), message, args);
std::cerr << "[rm_api] " << buffer << '\n';
}
inline int destroyApi() {
#if defined(REALMAN_RM_API_HAS_RM_DESTROY)
return rm_destroy();
#else
// 部分 RM_API2 头文件把 destroy 拼成 rm_destory,CMake 会按头文件内容注入宏。
return rm_destory();
#endif
}
inline bool ensureDirectory(const std::string &path) {
if (::mkdir(path.c_str(), 0755) == 0 || errno == EEXIST) {
return true;
}
std::cerr << "Failed to create directory: " << path << '\n';
return false;
}
inline std::string timestampString() {
const std::time_t now = std::time(nullptr);
std::tm local_time = {};
localtime_r(&now, &local_time);
std::ostringstream out;
out << std::put_time(&local_time, "%Y%m%d_%H%M%S");
return out.str();
}
inline std::string reportsDirectory() {
const std::string root = LINKERHAND_PROJECT_ROOT;
const std::string reports = root + "/reports";
const std::string hardware_reports = reports + "/realman_hardware_tests";
ensureDirectory(reports);
ensureDirectory(hardware_reports);
return hardware_reports;
}
inline const char *forceTypeName(rm_force_type_e type) {
switch (type) {
case RM_MODEL_RM_B_E:
return "Standard";
case RM_MODEL_RM_ZF_E:
return "1D force";
case RM_MODEL_RM_SF_E:
return "6D force";
case RM_MODEL_RM_ISF_E:
return "Integrated 6D force";
default:
return "Unknown";
}
}
inline void sleepMs(int milliseconds) {
std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
}
inline bool isFinite(float value) {
return std::isfinite(static_cast<double>(value));
}
inline bool isFiniteArray(const float *values, int count) {
if (values == nullptr || count <= 0) {
return false;
}
for (int i = 0; i < count; ++i) {
if (!isFinite(values[i])) {
return false;
}
}
return true;
}
inline std::string formatArray(const float *values, int count, const char *prefix = "") {
std::ostringstream out;
out << std::fixed << std::setprecision(3);
for (int i = 0; i < count; ++i) {
out << (i == 0 ? "[" : ", ") << prefix << (i + 1) << "=" << values[i];
}
out << "]";
return out.str();
}
class TestSuite {
public:
explicit TestSuite(const std::string &name)
: name_(name) {
std::cout.setf(std::ios::unitbuf);
std::cerr.setf(std::ios::unitbuf);
const std::string dir = reportsDirectory();
latest_report_path_ = dir + "/" + name_ + "_latest.md";
timestamped_report_path_ = dir + "/" + name_ + "_" + timestampString() + ".md";
latest_report_.open(latest_report_path_);
timestamped_report_.open(timestamped_report_path_);
writeLine("# " + name_ + "\n");
writeLine("| Check | Result | Detail |");
writeLine("| --- | --- | --- |");
}
void info(const std::string &key, const std::string &value) {
std::cout << "[INFO] " << key << ": " << value << '\n';
writeLine("| " + key + " | INFO | " + value + " |");
}
bool expect(bool condition, const std::string &check, const std::string &detail = "") {
++assertions_;
if (!condition) {
++failures_;
}
std::cout << (condition ? "[PASS] " : "[FAIL] ") << check;
if (!detail.empty()) {
std::cout << " - " << detail;
}
std::cout << '\n';
writeLine("| " + check + " | " + (condition ? "PASS" : "FAIL") + " | " + detail + " |");
return condition;
}
int finish() {
std::ostringstream summary;
summary << "\nAssertions: " << assertions_ << ", failures: " << failures_ << "\n";
writeLine(summary.str());
std::cout << summary.str();
std::cout << "Report: " << latest_report_path_ << '\n';
return failures_ == 0 ? 0 : 1;
}
private:
void writeLine(const std::string &line) {
if (latest_report_) {
latest_report_ << line << '\n';
}
if (timestamped_report_) {
timestamped_report_ << line << '\n';
}
}
std::string name_;
std::string latest_report_path_;
std::string timestamped_report_path_;
std::ofstream latest_report_;
std::ofstream timestamped_report_;
int assertions_ = 0;
int failures_ = 0;
};
class RobotSession {
public:
explicit RobotSession(TestSuite *suite)
: suite_(suite) {}
RobotSession(const RobotSession &) = delete;
RobotSession &operator=(const RobotSession &) = delete;
~RobotSession() {
// 每个硬件测试都独立建立/释放 SDK 会话,保证模块之间没有隐藏顺序依赖。
if (handle_ != nullptr) {
const int delete_result = rm_delete_robot_arm(handle_);
if (delete_result != 0 && suite_ != nullptr) {
suite_->expect(false, "rm_delete_robot_arm", "error=" + std::to_string(delete_result));
}
handle_ = nullptr;
}
if (initialized_) {
const int destroy_result = destroyApi();
if (destroy_result != 0 && suite_ != nullptr) {
suite_->expect(false, "rm_destroy", "error=" + std::to_string(destroy_result));
}
}
}
bool connect() {
rm_set_log_call_back(apiLogCallback, 2);
rm_set_timeout(kTimeoutMs);
// RM_TRIPLE_MODE_E 与当前三代控制器匹配;连接失败时立即返回,
// 让调用方只输出本模块报告,不继续访问空句柄。
const int init_result = rm_init(RM_TRIPLE_MODE_E);
initialized_ = init_result == 0;
if (suite_ != nullptr) {
suite_->expect(initialized_, "rm_init", "error=" + std::to_string(init_result));
}
if (!initialized_) {
return false;
}
handle_ = rm_create_robot_arm(kRobotIp, kRobotPort);
const bool ok = handle_ != nullptr && handle_->id >= 0;
if (suite_ != nullptr) {
suite_->expect(ok, "rm_create_robot_arm", std::string(kRobotIp) + ":" + std::to_string(kRobotPort));
}
return ok;
}
rm_robot_handle *handle() const {
return handle_;
}
private:
TestSuite *suite_ = nullptr;
rm_robot_handle *handle_ = nullptr;
bool initialized_ = false;
};
inline bool readRobotInfo(rm_robot_handle *handle, rm_robot_info_t *info, TestSuite *suite) {
const int result = rm_get_robot_info(handle, info);
const bool ok = result == 0;
if (suite != nullptr) {
suite->expect(ok, "rm_get_robot_info", "error=" + std::to_string(result));
if (ok) {
suite->info("arm_dof", std::to_string(static_cast<int>(info->arm_dof)));
suite->info("force_type", forceTypeName(info->force_type));
}
}
return ok;
}
inline bool validateDof(int dof, TestSuite *suite) {
const bool valid = dof == kExpectedDof && dof > 0 && dof <= ARM_DOF;
if (suite != nullptr) {
suite->expect(valid, "expected_dof", "actual=" + std::to_string(dof));
}
return valid;
}
} // namespace realman_hw_test
#include "realman_hw_test_common.hpp"
#include <cstring>
int main() {
using namespace realman_hw_test;
TestSuite suite("realman_hw_connection");
RobotSession session(&suite);
if (!session.connect()) {
return suite.finish();
}
suite.info("api_version", rm_api_version());
rm_robot_info_t info = {};
if (readRobotInfo(session.handle(), &info, &suite)) {
validateDof(static_cast<int>(info.arm_dof), &suite);
suite.expect(info.force_type == RM_MODEL_RM_ISF_E,
"expected_integrated_6d_force",
std::string("actual=") + forceTypeName(info.force_type));
suite.expect(info.robot_controller_version == 3 || info.robot_controller_version == 4,
"controller_generation_valid",
"actual=" + std::to_string(static_cast<int>(info.robot_controller_version)));
}
rm_arm_software_version_t software = {};
const int software_result = rm_get_arm_software_info(session.handle(), &software);
suite.expect(software_result == 0, "rm_get_arm_software_info", "error=" + std::to_string(software_result));
if (software_result == 0) {
suite.info("product_version", software.product_version);
suite.expect(std::strlen(software.product_version) > 0,
"product_version_not_empty",
software.product_version);
}
return suite.finish();
}
#include "realman_hw_test_common.hpp"
#include <cmath>
namespace {
bool inRange(float value, float min_value, float max_value) {
return std::isfinite(static_cast<double>(value)) && value >= min_value && value <= max_value;
}
} // namespace
int main() {
using namespace realman_hw_test;
TestSuite suite("realman_hw_controller_state");
RobotSession session(&suite);
if (!session.connect()) {
return suite.finish();
}
constexpr int kSamples = 10;
int failures = 0;
double voltage_sum = 0.0;
double current_sum = 0.0;
double temperature_sum = 0.0;
int err_nonzero_count = 0;
for (int i = 0; i < kSamples; ++i) {
float voltage = 0.0F;
float current = 0.0F;
float temperature = 0.0F;
int err_flag = -1;
const int result = rm_get_controller_state(session.handle(), &voltage, &current, &temperature, &err_flag);
if (result != 0) {
++failures;
} else {
voltage_sum += voltage;
current_sum += current;
temperature_sum += temperature;
if (err_flag != 0) {
++err_nonzero_count;
}
}
sleepMs(50);
}
const int valid_samples = kSamples - failures;
suite.expect(failures == 0, "rm_get_controller_state_samples", "failures=" + std::to_string(failures));
if (valid_samples > 0) {
const float voltage_mean = static_cast<float>(voltage_sum / valid_samples);
const float current_mean = static_cast<float>(current_sum / valid_samples);
const float temperature_mean = static_cast<float>(temperature_sum / valid_samples);
suite.info("controller_voltage_mean_V", std::to_string(voltage_mean));
suite.info("controller_current_mean_A", std::to_string(current_mean));
suite.info("controller_temperature_mean_C", std::to_string(temperature_mean));
suite.expect(inRange(voltage_mean, 18.0F, 30.0F), "controller_voltage_range");
suite.expect(inRange(current_mean, 0.0F, 10.0F), "controller_current_range");
suite.expect(inRange(temperature_mean, 0.0F, 85.0F), "controller_temperature_range");
suite.expect(err_nonzero_count == 0, "controller_error_flag_zero", "nonzero=" + std::to_string(err_nonzero_count));
}
return suite.finish();
}
#include "realman_hw_test_common.hpp"
#include <algorithm>
#include <array>
#include <cmath>
#include <sstream>
namespace {
constexpr float kForceThresholdN = 3.0F;
constexpr float kForceReleaseThresholdN = 1.2F;
constexpr float kDangerForceLimitN = 60.0F;
constexpr float kRetreatStepMeters = 0.008F;
constexpr float kMaxTotalRetreatMeters = 0.032F;
constexpr int kMaxRetreatSteps = 4;
constexpr int kMotionSpeedPercent = 5;
constexpr int kWaitForForceSeconds = 12;
constexpr int kPollIntervalMs = 100;
constexpr int kWorkFrame = 0;
constexpr int kNoForceSkipReturnCode = 77;
// If the robot moves toward the push instead of retreating, change this to -1.0F.
constexpr float kRetreatDirectionSign = 1.0F;
struct Vec3 {
float x = 0.0F;
float y = 0.0F;
float z = 0.0F;
};
float norm(const Vec3 &value) {
return std::sqrt(value.x * value.x + value.y * value.y + value.z * value.z);
}
Vec3 normalize(const Vec3 &value) {
const float length = norm(value);
if (length <= 1e-6F) {
return {};
}
return {value.x / length, value.y / length, value.z / length};
}
std::string formatVec3(const Vec3 &value, const char *unit) {
std::ostringstream out;
out << std::fixed << std::setprecision(4)
<< "(" << value.x << ", " << value.y << ", " << value.z << ") " << unit;
return out.str();
}
bool readWorkFrameForce(rm_robot_handle *handle, Vec3 *force, realman_hw_test::TestSuite *suite) {
rm_force_data_t data = {};
const int result = rm_get_force_data(handle, &data);
const bool ok = result == 0;
if (suite != nullptr) {
suite->expect(ok, "rm_get_force_data", "error=" + std::to_string(result));
}
if (!ok) {
return false;
}
*force = {
data.work_zero_force_data[0],
data.work_zero_force_data[1],
data.work_zero_force_data[2],
};
return true;
}
bool waitForExternalForce(rm_robot_handle *handle,
Vec3 *detected_force,
realman_hw_test::TestSuite *suite) {
const int iterations = (kWaitForForceSeconds * 1000) / kPollIntervalMs;
for (int i = 0; i < iterations; ++i) {
Vec3 force = {};
if (!readWorkFrameForce(handle, &force, nullptr)) {
suite->expect(false, "wait_force_read", "rm_get_force_data failed");
return false;
}
const float force_norm = norm(force);
std::cout << "Waiting force, work-frame force=" << formatVec3(force, "N")
<< ", norm=" << std::fixed << std::setprecision(3) << force_norm << " N\n";
if (force_norm > kDangerForceLimitN) {
suite->expect(false, "force_under_danger_limit", "force_norm_N=" + std::to_string(force_norm));
return false;
}
if (force_norm >= kForceThresholdN) {
*detected_force = force;
suite->expect(true, "force_trigger_detected", "force_norm_N=" + std::to_string(force_norm));
return true;
}
realman_hw_test::sleepMs(kPollIntervalMs);
}
suite->info("force_trigger", "not detected within " + std::to_string(kWaitForForceSeconds) + " seconds");
return false;
}
rm_pose_t makeOffsetPose(const Vec3 &direction, float step_meters) {
rm_pose_t offset = {};
offset.position.x = kRetreatDirectionSign * direction.x * step_meters;
offset.position.y = kRetreatDirectionSign * direction.y * step_meters;
offset.position.z = kRetreatDirectionSign * direction.z * step_meters;
offset.euler.rx = 0.0F;
offset.euler.ry = 0.0F;
offset.euler.rz = 0.0F;
offset.quaternion.w = 0.0F;
offset.quaternion.x = 0.0F;
offset.quaternion.y = 0.0F;
offset.quaternion.z = 0.0F;
return offset;
}
std::string offsetDetail(const rm_pose_t &offset) {
std::ostringstream out;
out << std::fixed << std::setprecision(4)
<< "dx=" << offset.position.x
<< ", dy=" << offset.position.y
<< ", dz=" << offset.position.z << " m";
return out.str();
}
} // namespace
int main() {
using namespace realman_hw_test;
TestSuite suite("realman_hw_force_retreat");
RobotSession session(&suite);
if (!session.connect()) {
return suite.finish();
}
rm_robot_info_t info = {};
if (!readRobotInfo(session.handle(), &info, &suite)) {
return suite.finish();
}
suite.expect(info.force_type == RM_MODEL_RM_SF_E || info.force_type == RM_MODEL_RM_ISF_E,
"six_axis_force_supported",
std::string("actual=") + forceTypeName(info.force_type));
suite.expect(kForceThresholdN > kForceReleaseThresholdN, "force_threshold_gt_release");
suite.expect(kRetreatStepMeters > 0.0F && kRetreatStepMeters <= 0.010F,
"retreat_step_safe",
"step_m=" + std::to_string(kRetreatStepMeters));
suite.expect(kMaxTotalRetreatMeters <= 0.040F,
"max_total_retreat_safe",
"max_total_m=" + std::to_string(kMaxTotalRetreatMeters));
suite.expect(kMotionSpeedPercent >= 1 && kMotionSpeedPercent <= 10,
"retreat_speed_safe",
"speed_percent=" + std::to_string(kMotionSpeedPercent));
suite.expect(kRetreatDirectionSign == 1.0F || kRetreatDirectionSign == -1.0F,
"retreat_direction_sign_valid",
"sign=" + std::to_string(kRetreatDirectionSign));
Vec3 initial_force = {};
std::cout << "\nManual force retreat test.\n"
<< "Apply a gentle force to the end effector within "
<< kWaitForForceSeconds << " seconds. Threshold: "
<< kForceThresholdN << " N. Keep E-stop reachable.\n";
const bool triggered = waitForExternalForce(session.handle(), &initial_force, &suite);
if (!triggered) {
const int finish_code = suite.finish();
return finish_code == 0 ? kNoForceSkipReturnCode : finish_code;
}
const Vec3 initial_direction = normalize(initial_force);
suite.info("initial_force_work_frame", formatVec3(initial_force, "N"));
suite.info("retreat_direction_work_frame", formatVec3(initial_direction, "unit"));
float total_retreat = 0.0F;
bool movement_ok = true;
Vec3 latest_force = initial_force;
for (int step = 0; step < kMaxRetreatSteps; ++step) {
const float force_norm = norm(latest_force);
if (force_norm <= kForceReleaseThresholdN) {
suite.info("force_released", "force_norm_N=" + std::to_string(force_norm));
break;
}
if (force_norm > kDangerForceLimitN) {
suite.expect(false, "force_under_danger_limit", "force_norm_N=" + std::to_string(force_norm));
movement_ok = false;
break;
}
if (total_retreat + kRetreatStepMeters > kMaxTotalRetreatMeters + 1e-6F) {
suite.info("max_retreat_reached", "total_m=" + std::to_string(total_retreat));
break;
}
const Vec3 retreat_direction = normalize(latest_force);
const rm_pose_t offset = makeOffsetPose(retreat_direction, kRetreatStepMeters);
suite.info("retreat_step_" + std::to_string(step + 1), offsetDetail(offset));
const int move_result = rm_movel_offset(session.handle(), offset, kMotionSpeedPercent, 0, 0, kWorkFrame, 1);
const bool move_ok = move_result == 0;
suite.expect(move_ok, "rm_movel_offset_step_" + std::to_string(step + 1),
"error=" + std::to_string(move_result));
if (!move_ok) {
rm_set_arm_stop(session.handle());
movement_ok = false;
break;
}
total_retreat += kRetreatStepMeters;
realman_hw_test::sleepMs(250);
if (!readWorkFrameForce(session.handle(), &latest_force, &suite)) {
movement_ok = false;
break;
}
suite.info("force_after_step_" + std::to_string(step + 1), formatVec3(latest_force, "N"));
}
suite.info("total_retreat_m", std::to_string(total_retreat));
suite.expect(total_retreat <= kMaxTotalRetreatMeters + 1e-6F,
"total_retreat_limit",
"total_m=" + std::to_string(total_retreat));
suite.expect(movement_ok, "force_retreat_sequence_ok");
return suite.finish();
}
#include "realman_hw_test_common.hpp"
#include <algorithm>
#include <atomic>
#include <csignal>
#include <cmath>
#include <sstream>
namespace {
// 持续力退让的核心安全参数。阈值和步长都偏保守,便于人工轻推验证。
constexpr float kForceThresholdN = 2.0F;
constexpr float kForceReleaseThresholdN = 0.8F;
constexpr float kDangerForceLimitN = 60.0F;
constexpr float kRetreatMinStepMeters = 0.004F;
constexpr float kRetreatMaxStepMeters = 0.014F;
constexpr float kRetreatStepGainMetersPerNewton = 0.0015F;
constexpr float kMaxCumulativeRetreatMeters = 0.200F;
constexpr int kMinMotionSpeedPercent = 2;
constexpr int kMaxMotionSpeedPercent = 15;
constexpr float kSpeedGainPercentPerNewton = 1.5F;
constexpr int kPollIntervalMs = 80;
constexpr int kPostMoveDwellMs = 120;
constexpr int kStartupCountdownSeconds = 3;
// 若实际运动方向变成“迎着推力走”,把这里改成 -1.0F。
constexpr float kRetreatDirectionSign = 1.0F;
std::atomic<bool> g_running(true);
struct Vec3 {
float x = 0.0F;
float y = 0.0F;
float z = 0.0F;
};
void handleSignal(int) {
g_running.store(false);
}
float norm(const Vec3 &value) {
return std::sqrt(value.x * value.x + value.y * value.y + value.z * value.z);
}
Vec3 normalize(const Vec3 &value) {
const float length = norm(value);
if (length <= 1e-6F) {
return {};
}
return {value.x / length, value.y / length, value.z / length};
}
std::string formatVec3(const Vec3 &value, const char *unit) {
std::ostringstream out;
out << std::fixed << std::setprecision(4)
<< "(" << value.x << ", " << value.y << ", " << value.z << ") " << unit;
return out.str();
}
bool readWorkFrameForce(rm_robot_handle *handle, Vec3 *force) {
// 使用工作坐标系下的外力,后续目标位姿也在工作坐标系语义下计算,避免坐标混用。
rm_force_data_t data = {};
const int result = rm_get_force_data(handle, &data);
if (result != 0) {
std::cerr << "rm_get_force_data failed, error=" << result << '\n';
return false;
}
*force = {
data.work_zero_force_data[0],
data.work_zero_force_data[1],
data.work_zero_force_data[2],
};
return true;
}
rm_pose_t makeOffsetPose(const Vec3 &direction, float step_meters) {
// offset 只用于日志展示;实际运动使用绝对 target_pose,兼容当前控制器表现更稳定。
rm_pose_t offset = {};
offset.position.x = kRetreatDirectionSign * direction.x * step_meters;
offset.position.y = kRetreatDirectionSign * direction.y * step_meters;
offset.position.z = kRetreatDirectionSign * direction.z * step_meters;
offset.euler.rx = 0.0F;
offset.euler.ry = 0.0F;
offset.euler.rz = 0.0F;
offset.quaternion.w = 0.0F;
offset.quaternion.x = 0.0F;
offset.quaternion.y = 0.0F;
offset.quaternion.z = 0.0F;
return offset;
}
rm_pose_t makeTargetPose(const rm_pose_t &current_pose, const Vec3 &direction, float step_meters) {
// 以当前 TCP 位姿为基准生成绝对目标点,避免连续 rm_movel_offset 在部分固件上返回 -7。
rm_pose_t target = current_pose;
target.position.x += kRetreatDirectionSign * direction.x * step_meters;
target.position.y += kRetreatDirectionSign * direction.y * step_meters;
target.position.z += kRetreatDirectionSign * direction.z * step_meters;
return target;
}
float computeRetreatStepMeters(float force_norm) {
// 力越大,退让单步越大;上下限保证小力有响应、大力不突然跳太远。
const float excess_force = std::max(0.0F, force_norm - kForceReleaseThresholdN);
const float raw_step = kRetreatMinStepMeters + excess_force * kRetreatStepGainMetersPerNewton;
return std::clamp(raw_step, kRetreatMinStepMeters, kRetreatMaxStepMeters);
}
int computeSpeedPercent(float force_norm) {
// 速度随外力增大而提高,但最高限制在 15%,保证人工测试时可控。
const float excess_force = std::max(0.0F, force_norm - kForceThresholdN);
const float raw_speed = static_cast<float>(kMinMotionSpeedPercent) +
excess_force * kSpeedGainPercentPerNewton;
return static_cast<int>(std::round(std::clamp(raw_speed,
static_cast<float>(kMinMotionSpeedPercent),
static_cast<float>(kMaxMotionSpeedPercent))));
}
std::string offsetDetail(const rm_pose_t &offset) {
std::ostringstream out;
out << std::fixed << std::setprecision(4)
<< "dx=" << offset.position.x
<< ", dy=" << offset.position.y
<< ", dz=" << offset.position.z << " m";
return out.str();
}
bool validateConfig(realman_hw_test::TestSuite *suite) {
// 参数自检先于任何运动执行,防止误改常量后直接把危险配置跑到真机上。
bool ok = true;
ok = suite->expect(kForceThresholdN > kForceReleaseThresholdN,
"force_threshold_gt_release") && ok;
ok = suite->expect(kRetreatMinStepMeters > 0.0F &&
kRetreatMinStepMeters <= kRetreatMaxStepMeters &&
kRetreatMaxStepMeters <= 0.015F,
"retreat_step_range_safe",
"min_m=" + std::to_string(kRetreatMinStepMeters) +
", max_m=" + std::to_string(kRetreatMaxStepMeters)) && ok;
ok = suite->expect(kRetreatStepGainMetersPerNewton > 0.0F &&
kRetreatStepGainMetersPerNewton <= 0.003F,
"retreat_step_gain_safe",
"gain_m_per_N=" + std::to_string(kRetreatStepGainMetersPerNewton)) && ok;
ok = suite->expect(kMaxCumulativeRetreatMeters <= 0.220F,
"max_cumulative_retreat_safe",
"max_m=" + std::to_string(kMaxCumulativeRetreatMeters)) && ok;
ok = suite->expect(kMinMotionSpeedPercent >= 1 &&
kMinMotionSpeedPercent <= kMaxMotionSpeedPercent &&
kMaxMotionSpeedPercent <= 15,
"retreat_speed_range_safe",
"min_percent=" + std::to_string(kMinMotionSpeedPercent) +
", max_percent=" + std::to_string(kMaxMotionSpeedPercent)) && ok;
ok = suite->expect(kSpeedGainPercentPerNewton > 0.0F &&
kSpeedGainPercentPerNewton <= 3.0F,
"retreat_speed_gain_safe",
"gain_percent_per_N=" + std::to_string(kSpeedGainPercentPerNewton)) && ok;
ok = suite->expect(kRetreatDirectionSign == 1.0F || kRetreatDirectionSign == -1.0F,
"retreat_direction_sign_valid",
"sign=" + std::to_string(kRetreatDirectionSign)) && ok;
return ok;
}
} // namespace
int main() {
using namespace realman_hw_test;
std::signal(SIGINT, handleSignal);
std::signal(SIGTERM, handleSignal);
// 该测试是手动持续模式:启动后一直监听外力,直到 Ctrl+C/SIGTERM 或安全边界触发。
TestSuite suite("realman_hw_force_retreat_hold");
RobotSession session(&suite);
if (!session.connect()) {
return suite.finish();
}
rm_robot_info_t info = {};
if (!readRobotInfo(session.handle(), &info, &suite)) {
return suite.finish();
}
suite.expect(info.force_type == RM_MODEL_RM_SF_E || info.force_type == RM_MODEL_RM_ISF_E,
"six_axis_force_supported",
std::string("actual=") + forceTypeName(info.force_type));
if (!validateConfig(&suite)) {
return suite.finish();
}
std::cout << "\nContinuous force retreat hold mode.\n"
<< "Threshold: " << kForceThresholdN << " N, step: "
<< kRetreatMinStepMeters << ".." << kRetreatMaxStepMeters
<< " m, speed: " << kMinMotionSpeedPercent << ".." << kMaxMotionSpeedPercent
<< "%, max cumulative retreat: " << kMaxCumulativeRetreatMeters << " m.\n"
<< "Press Ctrl+C or send SIGTERM to stop. Keep E-stop reachable.\n";
for (int second = kStartupCountdownSeconds; second > 0; --second) {
// 倒计时给操作者留出离开键盘、扶好急停和观察机械臂的时间。
std::cout << "Hold mode starts in " << second << "...\n";
sleepMs(1000);
}
float cumulative_retreat = 0.0F;
int move_count = 0;
bool sequence_ok = true;
while (g_running.load()) {
Vec3 force = {};
if (!readWorkFrameForce(session.handle(), &force)) {
suite.expect(false, "read_work_frame_force");
sequence_ok = false;
break;
}
const float force_norm = norm(force);
if (force_norm > kDangerForceLimitN) {
suite.expect(false, "force_under_danger_limit", "force_norm_N=" + std::to_string(force_norm));
rm_set_arm_stop(session.handle());
sequence_ok = false;
break;
}
if (force_norm < kForceReleaseThresholdN) {
sleepMs(kPollIntervalMs);
continue;
}
if (force_norm < kForceThresholdN) {
// 死区内只打印提示不运动,避免传感器噪声导致机械臂抖动。
std::cout << "Force in deadband: " << formatVec3(force, "N")
<< ", norm=" << std::fixed << std::setprecision(3) << force_norm << " N\n";
sleepMs(kPollIntervalMs);
continue;
}
const float step_meters = computeRetreatStepMeters(force_norm);
const int speed_percent = computeSpeedPercent(force_norm);
if (cumulative_retreat + step_meters > kMaxCumulativeRetreatMeters + 1e-6F) {
// 累计退让到边界后立即停止,避免持续推压把机械臂越带越远。
suite.expect(false,
"max_cumulative_retreat_reached",
"total_m=" + std::to_string(cumulative_retreat));
rm_set_arm_stop(session.handle());
sequence_ok = false;
break;
}
const Vec3 direction = normalize(force);
const rm_pose_t offset = makeOffsetPose(direction, step_meters);
rm_current_arm_state_t current_state = {};
const int state_result = rm_get_current_arm_state(session.handle(), &current_state);
if (state_result != 0) {
suite.expect(false, "rm_get_current_arm_state", "error=" + std::to_string(state_result));
rm_set_arm_stop(session.handle());
sequence_ok = false;
break;
}
const rm_pose_t target_pose = makeTargetPose(current_state.pose, direction, step_meters);
std::cout << "Force trigger: " << formatVec3(force, "N")
<< ", norm=" << std::fixed << std::setprecision(3) << force_norm
<< " N, step=" << step_meters << " m, speed=" << speed_percent
<< "%, retreat " << offsetDetail(offset) << '\n';
const int move_result = rm_movel(session.handle(), target_pose, speed_percent, 0, 0, 1);
if (move_result != 0) {
suite.expect(false, "rm_movel", "error=" + std::to_string(move_result));
rm_set_arm_stop(session.handle());
sequence_ok = false;
break;
}
++move_count;
cumulative_retreat += step_meters;
suite.info("move_" + std::to_string(move_count),
offsetDetail(offset) +
", force_norm_N=" + std::to_string(force_norm) +
", step_m=" + std::to_string(step_meters) +
", speed_percent=" + std::to_string(speed_percent));
sleepMs(kPostMoveDwellMs);
}
suite.info("stop_reason", g_running.load() ? "safety_or_error" : "signal_requested");
suite.info("move_count", std::to_string(move_count));
suite.info("cumulative_retreat_m", std::to_string(cumulative_retreat));
suite.expect(sequence_ok, "force_retreat_hold_sequence_ok");
return suite.finish();
}
#include "realman_hw_test_common.hpp"
#include <array>
#include <cmath>
#include <limits>
namespace {
constexpr int kAxisCount = 6;
constexpr int kSamples = 20;
constexpr int kSampleIntervalMs = 50;
struct Stats {
int count = 0;
double mean = 0.0;
double min = std::numeric_limits<double>::infinity();
double max = -std::numeric_limits<double>::infinity();
void add(float value) {
if (!std::isfinite(static_cast<double>(value))) {
return;
}
++count;
mean += (static_cast<double>(value) - mean) / count;
min = std::min(min, static_cast<double>(value));
max = std::max(max, static_cast<double>(value));
}
double range() const {
return count > 0 ? max - min : 0.0;
}
};
std::string statsDetail(const std::array<Stats, kAxisCount> &stats) {
const std::array<const char *, kAxisCount> names = {"Fx", "Fy", "Fz", "Mx", "My", "Mz"};
std::ostringstream out;
out << std::fixed << std::setprecision(4);
for (int i = 0; i < kAxisCount; ++i) {
out << (i == 0 ? "" : "; ") << names[static_cast<size_t>(i)]
<< "_mean=" << stats[static_cast<size_t>(i)].mean
<< ", range=" << stats[static_cast<size_t>(i)].range();
}
return out.str();
}
} // namespace
int main() {
using namespace realman_hw_test;
TestSuite suite("realman_hw_force_sensor");
RobotSession session(&suite);
if (!session.connect()) {
return suite.finish();
}
rm_robot_info_t info = {};
if (!readRobotInfo(session.handle(), &info, &suite)) {
return suite.finish();
}
suite.expect(info.force_type == RM_MODEL_RM_SF_E || info.force_type == RM_MODEL_RM_ISF_E,
"six_axis_force_supported",
std::string("actual=") + forceTypeName(info.force_type));
std::array<Stats, kAxisCount> raw_stats;
std::array<Stats, kAxisCount> zero_stats;
int read_failures = 0;
for (int sample_index = 0; sample_index < kSamples; ++sample_index) {
rm_force_data_t data = {};
const int result = rm_get_force_data(session.handle(), &data);
if (result != 0) {
++read_failures;
} else {
for (int axis = 0; axis < kAxisCount; ++axis) {
raw_stats[static_cast<size_t>(axis)].add(data.force_data[axis]);
zero_stats[static_cast<size_t>(axis)].add(data.zero_force_data[axis]);
}
}
sleepMs(kSampleIntervalMs);
}
suite.expect(read_failures == 0, "rm_get_force_data_samples", "failures=" + std::to_string(read_failures));
suite.info("raw_force_stats", statsDetail(raw_stats));
suite.info("zero_force_stats", statsDetail(zero_stats));
bool raw_force_valid = true;
bool zero_force_valid = true;
for (int axis = 0; axis < kAxisCount; ++axis) {
const bool is_force_axis = axis < 3;
const double raw_limit = is_force_axis ? 200.0 : 8.0;
const double zero_limit = is_force_axis ? 30.0 : 2.0;
raw_force_valid = raw_force_valid &&
raw_stats[static_cast<size_t>(axis)].count == kSamples &&
std::fabs(raw_stats[static_cast<size_t>(axis)].mean) <= raw_limit;
zero_force_valid = zero_force_valid &&
zero_stats[static_cast<size_t>(axis)].count == kSamples &&
std::fabs(zero_stats[static_cast<size_t>(axis)].mean) <= zero_limit;
}
suite.expect(raw_force_valid, "raw_force_mean_within_sensor_range");
suite.expect(zero_force_valid, "zero_force_mean_within_static_range");
return suite.finish();
}
#include "realman_hw_test_common.hpp"
#include <array>
#include <cmath>
#include <sstream>
namespace {
double maxAbsDiff(const float *left, const float *right, int count) {
double max_diff = 0.0;
for (int i = 0; i < count; ++i) {
max_diff = std::max(max_diff, std::fabs(static_cast<double>(left[i] - right[i])));
}
return max_diff;
}
bool inRange(float value, float min_value, float max_value) {
return std::isfinite(static_cast<double>(value)) && value >= min_value && value <= max_value;
}
} // namespace
int main() {
using namespace realman_hw_test;
TestSuite suite("realman_hw_joint_telemetry");
RobotSession session(&suite);
if (!session.connect()) {
return suite.finish();
}
rm_robot_info_t info = {};
if (!readRobotInfo(session.handle(), &info, &suite) ||
!validateDof(static_cast<int>(info.arm_dof), &suite)) {
return suite.finish();
}
const int dof = static_cast<int>(info.arm_dof);
rm_current_arm_state_t arm_state = {};
int result = rm_get_current_arm_state(session.handle(), &arm_state);
suite.expect(result == 0, "rm_get_current_arm_state", "error=" + std::to_string(result));
if (result == 0) {
suite.expect(isFiniteArray(arm_state.joint, dof),
"arm_state_joints_finite",
formatArray(arm_state.joint, dof, "J"));
}
std::array<float, ARM_DOF> joint_degree = {};
result = rm_get_joint_degree(session.handle(), joint_degree.data());
suite.expect(result == 0, "rm_get_joint_degree", "error=" + std::to_string(result));
if (result == 0 && isFiniteArray(arm_state.joint, dof)) {
const double diff = maxAbsDiff(arm_state.joint, joint_degree.data(), dof);
suite.expect(diff <= 0.1, "joint_degree_matches_arm_state", "max_diff_deg=" + std::to_string(diff));
}
std::array<float, ARM_DOF> current = {};
result = rm_get_current_joint_current(session.handle(), current.data());
suite.expect(result == 0, "rm_get_current_joint_current", "error=" + std::to_string(result));
if (result == 0) {
bool current_ok = true;
for (int i = 0; i < dof; ++i) {
current_ok = current_ok && inRange(current[static_cast<size_t>(i)], -10000.0F, 10000.0F);
}
suite.expect(current_ok, "joint_current_range", formatArray(current.data(), dof, "J"));
}
std::array<float, ARM_DOF> voltage = {};
result = rm_get_current_joint_voltage(session.handle(), voltage.data());
suite.expect(result == 0, "rm_get_current_joint_voltage", "error=" + std::to_string(result));
if (result == 0) {
bool voltage_ok = true;
for (int i = 0; i < dof; ++i) {
voltage_ok = voltage_ok && inRange(voltage[static_cast<size_t>(i)], 18.0F, 30.0F);
}
suite.expect(voltage_ok, "joint_voltage_range", formatArray(voltage.data(), dof, "J"));
}
std::array<float, ARM_DOF> temperature = {};
result = rm_get_current_joint_temperature(session.handle(), temperature.data());
suite.expect(result == 0, "rm_get_current_joint_temperature", "error=" + std::to_string(result));
if (result == 0) {
bool temperature_ok = true;
for (int i = 0; i < dof; ++i) {
temperature_ok = temperature_ok && inRange(temperature[static_cast<size_t>(i)], 0.0F, 85.0F);
}
suite.expect(temperature_ok, "joint_temperature_range", formatArray(temperature.data(), dof, "J"));
}
std::array<uint8_t, ARM_DOF> enabled = {};
result = rm_get_joint_en_state(session.handle(), enabled.data());
suite.expect(result == 0, "rm_get_joint_en_state", "error=" + std::to_string(result));
if (result == 0) {
bool all_enabled = true;
for (int i = 0; i < dof; ++i) {
all_enabled = all_enabled && enabled[static_cast<size_t>(i)] == 1;
}
suite.expect(all_enabled, "all_joints_enabled");
}
std::array<uint16_t, ARM_DOF> err_flag = {};
std::array<uint16_t, ARM_DOF> brake_state = {};
result = rm_get_joint_err_flag(session.handle(), err_flag.data(), brake_state.data());
suite.expect(result == 0, "rm_get_joint_err_flag", "error=" + std::to_string(result));
if (result == 0) {
bool no_joint_error = true;
for (int i = 0; i < dof; ++i) {
no_joint_error = no_joint_error && err_flag[static_cast<size_t>(i)] == 0;
}
suite.expect(no_joint_error, "joint_error_flags_zero");
}
return suite.finish();
}
#include "realman_hw_test_common.hpp"
#include <algorithm>
#include <chrono>
#include <cmath>
namespace {
constexpr int kMotionJoint = 2; // 1-based
constexpr float kMotionDeltaDeg = 2.0F;
constexpr int kMotionSpeedPercent = 5;
constexpr int kCountdownSeconds = 3;
constexpr double kMaxFinalErrorDeg = 0.1;
void copyJoints(const float source[ARM_DOF], float target[ARM_DOF]) {
for (int i = 0; i < ARM_DOF; ++i) {
target[i] = source[i];
}
}
double maxAbsDiff(const float *left, const float *right, int count) {
double max_diff = 0.0;
for (int i = 0; i < count; ++i) {
max_diff = std::max(max_diff, std::fabs(static_cast<double>(left[i] - right[i])));
}
return max_diff;
}
bool moveAndAssert(rm_robot_handle *handle,
realman_hw_test::TestSuite *suite,
const char *name,
const float target[ARM_DOF],
int dof) {
const auto start = std::chrono::steady_clock::now();
const int result = rm_movej(handle, target, kMotionSpeedPercent, 0, 0, 1);
const auto end = std::chrono::steady_clock::now();
const double duration = std::chrono::duration<double>(end - start).count();
suite->expect(result == 0, std::string(name) + "_rm_movej", "error=" + std::to_string(result));
if (result != 0) {
rm_set_arm_stop(handle);
return false;
}
rm_current_arm_state_t actual = {};
const int state_result = rm_get_current_arm_state(handle, &actual);
suite->expect(state_result == 0, std::string(name) + "_read_actual", "error=" + std::to_string(state_result));
if (state_result != 0) {
return false;
}
const double error = maxAbsDiff(target, actual.joint, dof);
suite->info(std::string(name) + "_duration_s", std::to_string(duration));
suite->info(std::string(name) + "_final_error_deg", std::to_string(error));
return suite->expect(error <= kMaxFinalErrorDeg,
std::string(name) + "_final_error_limit",
"error_deg=" + std::to_string(error));
}
} // namespace
int main() {
using namespace realman_hw_test;
TestSuite suite("realman_hw_motion_tracking");
RobotSession session(&suite);
if (!session.connect()) {
return suite.finish();
}
rm_robot_info_t info = {};
if (!readRobotInfo(session.handle(), &info, &suite) ||
!validateDof(static_cast<int>(info.arm_dof), &suite)) {
return suite.finish();
}
const int dof = static_cast<int>(info.arm_dof);
suite.expect(kMotionJoint >= 1 && kMotionJoint <= dof, "motion_joint_valid");
suite.expect(kMotionDeltaDeg > 0.0F && kMotionDeltaDeg <= 3.0F,
"motion_delta_safe",
"delta_deg=" + std::to_string(kMotionDeltaDeg));
suite.expect(kMotionSpeedPercent >= 1 && kMotionSpeedPercent <= 10,
"motion_speed_safe",
"speed_percent=" + std::to_string(kMotionSpeedPercent));
rm_current_arm_state_t start_state = {};
int result = rm_get_current_arm_state(session.handle(), &start_state);
suite.expect(result == 0, "read_start_state", "error=" + std::to_string(result));
if (result != 0) {
return suite.finish();
}
suite.info("start_joints", formatArray(start_state.joint, dof, "J"));
std::cout << "Motion test starts after countdown. Keep E-stop reachable.\n";
for (int second = kCountdownSeconds; second > 0; --second) {
std::cout << "Moving in " << second << "...\n";
sleepMs(1000);
}
float positive[ARM_DOF] = {};
float negative[ARM_DOF] = {};
copyJoints(start_state.joint, positive);
copyJoints(start_state.joint, negative);
positive[kMotionJoint - 1] += kMotionDeltaDeg;
negative[kMotionJoint - 1] -= kMotionDeltaDeg;
bool ok = true;
ok = ok && moveAndAssert(session.handle(), &suite, "move_positive", positive, dof);
ok = ok && moveAndAssert(session.handle(), &suite, "return_positive", start_state.joint, dof);
ok = ok && moveAndAssert(session.handle(), &suite, "move_negative", negative, dof);
ok = ok && moveAndAssert(session.handle(), &suite, "return_negative", start_state.joint, dof);
if (!ok) {
rm_set_arm_stop(session.handle());
}
return suite.finish();
}
# RM75-6F 机械臂验收测试 README
本目录根据下面的测试文档整理:
```text
/home/mashiro/文档/xwechat_files/wxid_n3k7s34f0rdo22_4994/msg/file/2026-06/RM75-6F 机械臂测试 Agent 操作文档 v1.0.docx
```
目标是把验收测试拆成独立模块,像单元测试一样分别构建、分别运行、分别出报告。自动测试只覆盖不需要移动机械臂的项目;载荷、急停、重复定位、真实接触力控等项目保留为手动验收模块,避免无人确认工作空间时触发危险动作。
## 模块清单
| 文档项目 | 自动化状态 | CLion/CMake target | 是否运动 | 说明 |
| --- | --- | --- | --- | --- |
| INIT/PREFLIGHT/IDLE | 已实现 | `rm75_acceptance_preflight` | 否 | SDK 初始化、连接、RM75 7 轴、六维力传感器、真实模式、上电状态、关节状态、控制器状态、坐标系、静态力漂移 |
| 通信与数据记录 | 已实现 | `rm75_acceptance_communication` | 否 | 30 秒只读采样,记录文档要求的数据字段到 CSV,检查读数失败率、控制器错误、采样周期 |
| 关节/控制器/力传感器单项测试 | 已实现 | `realman_hw_test_*` | 否 | 已有独立硬件模块测试,见 `tests/realman_hardware/README.md` |
| 低速小幅运动跟踪 | 已实现 | `realman_hw_test_motion_tracking` | 是 | J2 小角度低速跟踪,用于验证基础运动链路 |
| 末端受力退让 | 已实现 | `realman_hw_test_force_retreat` / `realman_hw_test_force_retreat_hold` | 是 | 人工轻推末端,机械臂按受力方向退让;持续模式需要手动停止 |
| 外观/安装/线缆 | 手动 | README 检查表 | 否 | 需要现场目视检查 |
| 急停/安全按钮 | 手动 | README 检查表 | 可能 | 需要人在现场触发并复位 |
| 关节全范围 | 手动 | README 检查表 | 是 | 需要确认工作空间、限位和无碰撞 |
| 重复定位精度 | 手动 | README 检查表 | 是 | 需要百分表/激光跟踪仪等外部测量设备 |
| 半载/满载 | 手动 | README 检查表 | 是 | 需要确认载荷、质心、夹具固定 |
| 六维力加载/力控指标 | 手动 | README 检查表 | 可能 | 需要标准砝码、测力计或外部六维力传感器 |
| 长时间稳定性 | 手动 | README 检查表 | 可能 | 文档建议长时间运行,需现场监护 |
## 构建
Debug:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-debug
cmake --build --preset rm75-acceptance-readonly-debug
```
Release:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-release
cmake --build --preset rm75-acceptance-readonly-release
```
## 运行
运行 RM75 验收只读测试:
```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
ctest --test-dir cmake-build-debug --output-on-failure --label-regex rm75
```
也可以通过 preset 一键构建并运行:
```bash
cmake --build --preset rm75-acceptance-run-readonly-debug
```
运行单个模块:
```bash
./cmake-build-debug/rm75_acceptance_preflight
./cmake-build-debug/rm75_acceptance_communication
```
## CLion 使用
1. 用 CLion 打开:
```text
/home/mashiro/project/linkerhand-cpp-sdk
```
2. 选择 CMake Profile:
```text
clion-debug
```
3. Reload CMake Project。
4. 在 Run/Debug Configurations 里选择:
```text
rm75_acceptance_preflight
rm75_acceptance_communication
rm75_acceptance_readonly_tests
run_rm75_acceptance_readonly_tests
```
## 报告位置
Markdown 报告:
```text
reports/realman_hardware_tests/rm75_acceptance_preflight_latest.md
reports/realman_hardware_tests/rm75_acceptance_communication_latest.md
```
通信 CSV:
```text
reports/realman_hardware_tests/rm75_acceptance_communication_latest.csv
```
CSV 字段按照测试文档保留:
```text
timestamp_ms,test_id,robot_model,robot_ip,motion_mode,speed_percent,payload_kg,
target_joints_deg,actual_joints_deg,target_tcp_pose,actual_tcp_pose,force_torque,
joint_current,joint_temperature,voltage,power,error_code,safety_state,comment
```
## 本机实测结果
测试对象:
```text
robot_ip=192.168.1.18
arm_dof=7
force_type=Integrated 6D force
controller_generation=3
```
已执行命令:
```bash
cmake --preset clion-debug
cmake --build --preset rm75-acceptance-readonly-debug
ctest --test-dir cmake-build-debug --output-on-failure --label-regex rm75
```
结果:
| 模块 | 结果 | 摘要 |
| --- | --- | --- |
| `rm75_acceptance_preflight` | PASS | 33 条断言,0 失败;真机模式、上电、7 轴、六维力、关节状态、控制器状态、坐标系、静态力范围均通过 |
| `rm75_acceptance_communication` | PASS | 13 条断言,0 失败;30 秒采样 230 个完整样本,SDK 读取失败率 0%,最大采样周期约 153ms |
重要说明:
```text
rm_get_current_arm_state / rm_get_arm_all_state 返回 err_len=1, codes=[0]
```
这里的错误码内容为 `0`,测试按“无非零故障码”处理。CSV 中对应字段为:
```text
arm_err_len=1;arm_err_codes=0;controller_err=0
```
## 指标含义
| 指标 | 实际意义 | 自动测试如何判断 |
| --- | --- | --- |
| `arm_dof` | 机械臂自由度,RM75 应为 7 轴 | 等于 `7` |
| `force_type` | 末端是否带六维力传感器 | 接受六维力或一体化六维力 |
| `run_mode` | 当前是真机还是仿真 | 期望为真实模式 `1` |
| `power_state` | 机械臂是否处于上电可控状态 | 期望为 `1` |
| 关节电压 | 每个关节驱动供电是否正常 | 期望约 `18V..30V` |
| 关节温度 | 关节驱动是否过热 | 期望 `0C..85C` |
| 关节电流 | 电机当前负载的间接反映 | 只检查是否在合理范围,不能等同于精确力矩 |
| 控制器电压/电流/温度 | 控制箱供电和散热状态 | 检查范围并要求错误码为 0 |
| TCP 位姿 | 末端在空间中的位置和姿态 | 检查读数是否有限值 |
| 工作/工具坐标系 | 运动和力数据的参考坐标 | 检查当前坐标系可读、位姿可解析 |
| `work_zero_force_data` | 工作坐标系下扣除零点后的外力/力矩 | 静止时应接近 0,但精度需外部设备验证 |
| `err_len/codes` | 控制器返回的机械臂错误列表 | 只要错误码数组没有非零值,就视为无故障 |
| 通信失败率 | SDK 读取控制器数据是否稳定 | 30 秒内读失败率要求不超过 1% |
| 采样周期 | 只读采样是否卡顿 | 单次采样间隔不超过 1 秒 |
## 手动验收检查表
这些项目来自文档,但不能在无人确认时自动执行。
| 项目 | 前置条件 | 记录方式 |
| --- | --- | --- |
| 外观/安装 | 机械臂断电或安全停止,检查底座、法兰、线缆、螺丝 | 拍照或在验收表记录 OK/NG |
| 急停 | 人在现场,急停按钮可触达,机械臂低速运动或空闲 | 记录触发后是否停止、是否能正常复位 |
| 关节范围 | 清空工作空间,逐关节低速测试 | 记录目标角、实际角、错误码 |
| 重复定位 | 安装外部测量设备,固定测试姿态 | 记录多次回位偏差 |
| 半载/满载 | 载荷和质心参数已正确配置,夹具可靠固定 | 记录温度、电流、轨迹误差、异常码 |
| 六维力加载 | 标准砝码/测力计/外部六维传感器准备好 | 记录外部真实值和 SDK 读数 |
| 接触力控 | 有接触限位、柔顺材料、急停监护 | 记录目标力、实际力、超调和停止情况 |
| 长时间稳定性 | 现场监护,环境安全,日志磁盘空间充足 | 记录运行时长、错误码、温度、电流变化 |
## 安全边界
- `rm75_acceptance_*` 两个新增模块不发送运动指令。
- 自动测试不会上电/断电,不会清零力传感器,不会修改工具坐标系或工作坐标系。
- 文档里的负载、急停、关节全范围、真实接触力控不自动执行。
- 第一次执行任何运动测试时,应空载、低速、工作空间清空,并确保急停按钮可触达。
#include "realman_hw_test_common.hpp"
#include <algorithm>
#include <array>
#include <chrono>
#include <cmath>
#include <fstream>
#include <sstream>
namespace {
// 文档建议做长时间稳定性测试;这里默认 30 秒作为可频繁运行的通信冒烟验收。
constexpr int kDurationSeconds = 30;
constexpr int kSampleIntervalMs = 100;
constexpr int kForceAxisCount = 6;
bool inRange(float value, float min_value, float max_value) {
return std::isfinite(static_cast<double>(value)) && value >= min_value && value <= max_value;
}
long long epochMs() {
// CSV 记录使用真实时间戳,采样周期统计使用 steady_clock,避免系统时间跳变影响周期。
const auto now = std::chrono::system_clock::now();
return std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
}
std::string csvEscape(const std::string &value) {
// CSV 字段中包含分号数组和错误说明,仍按标准 CSV 规则处理逗号/引号/换行。
bool needs_quotes = false;
for (const char ch : value) {
needs_quotes = needs_quotes || ch == ',' || ch == '"' || ch == '\n' || ch == '\r';
}
if (!needs_quotes) {
return value;
}
std::string escaped = "\"";
for (const char ch : value) {
if (ch == '"') {
escaped += "\"\"";
} else {
escaped += ch;
}
}
escaped += "\"";
return escaped;
}
std::string joinFloats(const float *values, int count, int precision = 4) {
if (values == nullptr || count <= 0) {
return "NA";
}
std::ostringstream out;
out << std::fixed << std::setprecision(precision);
for (int i = 0; i < count; ++i) {
if (i > 0) {
out << ';';
}
out << values[i];
}
return out.str();
}
std::string poseCsv(const rm_pose_t &pose) {
std::ostringstream out;
out << std::fixed << std::setprecision(5)
<< "x=" << pose.position.x
<< ";y=" << pose.position.y
<< ";z=" << pose.position.z
<< ";rx=" << pose.euler.rx
<< ";ry=" << pose.euler.ry
<< ";rz=" << pose.euler.rz;
return out.str();
}
bool poseFinite(const rm_pose_t &pose) {
const float values[] = {
pose.position.x,
pose.position.y,
pose.position.z,
pose.euler.rx,
pose.euler.ry,
pose.euler.rz,
};
return realman_hw_test::isFiniteArray(values, static_cast<int>(sizeof(values) / sizeof(values[0])));
}
std::string errSummary(const rm_err_t &err) {
std::ostringstream out;
out << "arm_err_len=" << static_cast<int>(err.err_len) << ";arm_err_codes=";
if (err.err_len == 0) {
out << "none";
return out.str();
}
for (int i = 0; i < static_cast<int>(err.err_len) && i < 24; ++i) {
if (i > 0) {
out << '|';
}
out << err.err[i];
}
return out.str();
}
bool errListClear(const rm_err_t &err) {
// 与预检保持一致:只把非零错误码计入 arm_error_count。
for (int i = 0; i < static_cast<int>(err.err_len) && i < 24; ++i) {
if (err.err[i] != 0) {
return false;
}
}
return true;
}
void writeCsvRow(std::ofstream &csv, const std::array<std::string, 19> &values) {
for (size_t i = 0; i < values.size(); ++i) {
if (i > 0) {
csv << ',';
}
csv << csvEscape(values[i]);
}
csv << '\n';
}
} // namespace
int main() {
using namespace realman_hw_test;
TestSuite suite("rm75_acceptance_communication");
suite.info("source_document", "RM75-6F mechanical arm testing agent operation document v1.0");
suite.info("scope", "30-second read-only communication smoke test and acceptance CSV data logging");
RobotSession session(&suite);
if (!session.connect()) {
return suite.finish();
}
rm_robot_info_t info = {};
if (!readRobotInfo(session.handle(), &info, &suite) ||
!validateDof(static_cast<int>(info.arm_dof), &suite)) {
return suite.finish();
}
const int dof = static_cast<int>(info.arm_dof);
rm_frame_t tool_frame = {};
float payload_kg = 0.0F;
const int tool_frame_result = rm_get_current_tool_frame(session.handle(), &tool_frame);
suite.expect(tool_frame_result == 0, "rm_get_current_tool_frame", "error=" + std::to_string(tool_frame_result));
if (tool_frame_result == 0) {
payload_kg = tool_frame.payload;
}
const std::string report_dir = reportsDirectory();
const std::string latest_csv_path = report_dir + "/rm75_acceptance_communication_latest.csv";
const std::string timestamped_csv_path = report_dir + "/rm75_acceptance_communication_" + timestampString() + ".csv";
std::ofstream latest_csv(latest_csv_path);
std::ofstream timestamped_csv(timestamped_csv_path);
suite.expect(static_cast<bool>(latest_csv) && static_cast<bool>(timestamped_csv),
"communication_csv_open",
latest_csv_path);
const std::array<std::string, 19> header = {
// 字段顺序对齐测试文档的数据记录要求,方便后续直接导入表格或脚本分析。
"timestamp_ms",
"test_id",
"robot_model",
"robot_ip",
"motion_mode",
"speed_percent",
"payload_kg",
"target_joints_deg",
"actual_joints_deg",
"target_tcp_pose",
"actual_tcp_pose",
"force_torque",
"joint_current",
"joint_temperature",
"voltage",
"power",
"error_code",
"safety_state",
"comment",
};
writeCsvRow(latest_csv, header);
writeCsvRow(timestamped_csv, header);
int samples = 0;
int successful_full_samples = 0;
int read_attempts = 0;
int read_failures = 0;
int controller_error_count = 0;
int arm_error_count = 0;
int finite_failures = 0;
double max_period_ms = 0.0;
double period_sum_ms = 0.0;
int period_count = 0;
auto previous_sample_time = std::chrono::steady_clock::now();
const auto end_time = previous_sample_time + std::chrono::seconds(kDurationSeconds);
while (std::chrono::steady_clock::now() < end_time) {
// steady_clock 只用于性能统计,避免 NTP/手动改时导致采样周期异常。
const auto sample_start = std::chrono::steady_clock::now();
if (samples > 0) {
const double period_ms = std::chrono::duration<double, std::milli>(sample_start - previous_sample_time).count();
max_period_ms = std::max(max_period_ms, period_ms);
period_sum_ms += period_ms;
++period_count;
}
previous_sample_time = sample_start;
rm_current_arm_state_t arm_state = {};
rm_force_data_t force = {};
std::array<float, ARM_DOF> joint_current = {};
std::array<float, ARM_DOF> joint_temperature = {};
float controller_voltage = 0.0F;
float controller_current = 0.0F;
float controller_temperature = 0.0F;
int controller_error = -1;
bool sample_ok = true;
int result = 0;
// 每轮采样只调用 rm_get_* 接口,不发送运动、清零或配置修改指令。
++read_attempts;
result = rm_get_current_arm_state(session.handle(), &arm_state);
if (result != 0) {
++read_failures;
sample_ok = false;
} else if (!errListClear(arm_state.err)) {
++arm_error_count;
}
++read_attempts;
result = rm_get_force_data(session.handle(), &force);
if (result != 0) {
++read_failures;
sample_ok = false;
}
++read_attempts;
result = rm_get_current_joint_current(session.handle(), joint_current.data());
if (result != 0) {
++read_failures;
sample_ok = false;
}
++read_attempts;
result = rm_get_current_joint_temperature(session.handle(), joint_temperature.data());
if (result != 0) {
++read_failures;
sample_ok = false;
}
++read_attempts;
result = rm_get_controller_state(session.handle(),
&controller_voltage,
&controller_current,
&controller_temperature,
&controller_error);
if (result != 0) {
++read_failures;
sample_ok = false;
} else if (controller_error != 0) {
++controller_error_count;
}
const bool finite_sample = poseFinite(arm_state.pose) &&
isFiniteArray(arm_state.joint, dof) &&
isFiniteArray(force.work_zero_force_data, kForceAxisCount) &&
isFiniteArray(joint_current.data(), dof) &&
isFiniteArray(joint_temperature.data(), dof) &&
inRange(controller_voltage, 18.0F, 30.0F) &&
inRange(controller_current, 0.0F, 10.0F) &&
inRange(controller_temperature, 0.0F, 85.0F);
if (!finite_sample) {
++finite_failures;
sample_ok = false;
}
if (sample_ok) {
++successful_full_samples;
}
const double power_w = static_cast<double>(controller_voltage) * controller_current;
const std::string safety_state =
controller_error == 0 && errListClear(arm_state.err) ? "no_error" : "error_present";
const std::string error_code =
errSummary(arm_state.err) +
";controller_err=" + std::to_string(controller_error);
const std::string comment = sample_ok ? "ok" : "read_or_range_failure";
std::array<std::string, 19> row = {
std::to_string(epochMs()),
"rm75_acceptance_communication",
"RM75-6F",
kRobotIp,
"IDLE_READONLY",
"0",
std::to_string(payload_kg),
// 本测试不规划轨迹,因此目标关节/TCP 写 NA,只记录实际状态。
"NA",
joinFloats(arm_state.joint, dof, 4),
"NA",
poseCsv(arm_state.pose),
joinFloats(force.work_zero_force_data, kForceAxisCount, 4),
joinFloats(joint_current.data(), dof, 3),
joinFloats(joint_temperature.data(), dof, 3),
std::to_string(controller_voltage),
std::to_string(power_w),
error_code,
safety_state,
comment,
};
writeCsvRow(latest_csv, row);
writeCsvRow(timestamped_csv, row);
++samples;
sleepMs(kSampleIntervalMs);
}
const double failure_rate = read_attempts > 0
? static_cast<double>(read_failures) / static_cast<double>(read_attempts)
: 1.0;
const double avg_period_ms = period_count > 0 ? period_sum_ms / period_count : 0.0;
suite.info("samples", std::to_string(samples));
suite.info("successful_full_samples", std::to_string(successful_full_samples));
suite.info("read_attempts", std::to_string(read_attempts));
suite.info("read_failures", std::to_string(read_failures));
suite.info("failure_rate", std::to_string(failure_rate));
suite.info("avg_sample_period_ms", std::to_string(avg_period_ms));
suite.info("max_sample_period_ms", std::to_string(max_period_ms));
suite.info("csv_latest", latest_csv_path);
suite.expect(samples >= 100, "sample_count_minimum", "samples=" + std::to_string(samples));
suite.expect(successful_full_samples >= samples * 95 / 100,
"successful_sample_ratio_at_least_95_percent",
"successful=" + std::to_string(successful_full_samples) + ", samples=" + std::to_string(samples));
suite.expect(failure_rate <= 0.01, "sdk_read_failure_rate_at_most_1_percent",
"failure_rate=" + std::to_string(failure_rate));
suite.expect(finite_failures == 0, "sample_values_finite_and_in_expected_ranges",
"finite_failures=" + std::to_string(finite_failures));
suite.expect(controller_error_count == 0, "controller_error_absent_during_communication",
"count=" + std::to_string(controller_error_count));
suite.expect(arm_error_count == 0, "arm_error_absent_during_communication",
"count=" + std::to_string(arm_error_count));
suite.expect(max_period_ms <= 1000.0, "sample_period_below_1s", "max_ms=" + std::to_string(max_period_ms));
return suite.finish();
}
#include "realman_hw_test_common.hpp"
#include <algorithm>
#include <array>
#include <cmath>
#include <sstream>
namespace {
// 预检只短时间采样静态六维力,用来发现明显异常;精度验收仍需外部测力设备。
constexpr int kForceAxisCount = 6;
constexpr int kForceSamples = 12;
constexpr int kForceSampleIntervalMs = 50;
bool inRange(float value, float min_value, float max_value) {
return std::isfinite(static_cast<double>(value)) && value >= min_value && value <= max_value;
}
bool poseFinite(const rm_pose_t &pose) {
// SDK 位姿同时提供四元数和欧拉角;这里只检查数值有效性,不做姿态转换。
const float values[] = {
pose.position.x,
pose.position.y,
pose.position.z,
pose.quaternion.w,
pose.quaternion.x,
pose.quaternion.y,
pose.quaternion.z,
pose.euler.rx,
pose.euler.ry,
pose.euler.rz,
};
return realman_hw_test::isFiniteArray(values, static_cast<int>(sizeof(values) / sizeof(values[0])));
}
std::string poseSummary(const rm_pose_t &pose) {
std::ostringstream out;
out << std::fixed << std::setprecision(4)
<< "pos_m=(" << pose.position.x << "," << pose.position.y << "," << pose.position.z << ")"
<< ", euler_rad=(" << pose.euler.rx << "," << pose.euler.ry << "," << pose.euler.rz << ")";
return out.str();
}
std::string frameSummary(const rm_frame_t &frame) {
std::ostringstream out;
out << "name=" << frame.frame_name
<< ", payload_kg=" << std::fixed << std::setprecision(3) << frame.payload
<< ", cog_mm=(" << frame.x << "," << frame.y << "," << frame.z << ")"
<< ", " << poseSummary(frame.pose);
return out.str();
}
std::string errSummary(const rm_err_t &err) {
std::ostringstream out;
out << "err_len=" << static_cast<int>(err.err_len) << ", codes=[";
for (int i = 0; i < static_cast<int>(err.err_len) && i < 24; ++i) {
if (i > 0) {
out << ';';
}
out << err.err[i];
}
out << "]";
return out.str();
}
bool errListClear(const rm_err_t &err) {
// 实测 RM75 会出现 err_len=1 且 codes=[0] 的占位返回。
// 验收时只把非零错误码视为真实故障,避免误报。
for (int i = 0; i < static_cast<int>(err.err_len) && i < 24; ++i) {
if (err.err[i] != 0) {
return false;
}
}
return true;
}
double maxAbs(const std::array<double, kForceAxisCount> &values, int begin, int end) {
double result = 0.0;
for (int i = begin; i < end; ++i) {
result = std::max(result, std::fabs(values[static_cast<size_t>(i)]));
}
return result;
}
} // namespace
int main() {
using namespace realman_hw_test;
TestSuite suite("rm75_acceptance_preflight");
suite.info("source_document", "RM75-6F mechanical arm testing agent operation document v1.0");
suite.info("scope", "INIT/PREFLIGHT/IDLE read-only acceptance checks; no motion command is sent");
// 该模块对应文档中的 INIT/PREFLIGHT/IDLE:只读控制器状态,不发送运动或参数修改指令。
RobotSession session(&suite);
if (!session.connect()) {
return suite.finish();
}
rm_robot_info_t info = {};
if (!readRobotInfo(session.handle(), &info, &suite)) {
return suite.finish();
}
suite.expect(validateDof(static_cast<int>(info.arm_dof), nullptr), "rm75_expected_7dof",
"actual=" + std::to_string(static_cast<int>(info.arm_dof)));
suite.expect(info.force_type == RM_MODEL_RM_ISF_E || info.force_type == RM_MODEL_RM_SF_E,
"six_axis_force_sensor_available",
std::string("actual=") + forceTypeName(info.force_type));
suite.expect(info.robot_controller_version == 3 || info.robot_controller_version == 4,
"controller_generation_known",
"actual=" + std::to_string(static_cast<int>(info.robot_controller_version)));
// 真机验收要求处于真实模式;仿真模式即使 SDK 可连接,也不能代表硬件通过。
int run_mode = -1;
int result = rm_get_arm_run_mode(session.handle(), &run_mode);
suite.expect(result == 0, "rm_get_arm_run_mode", "error=" + std::to_string(result));
if (result == 0) {
suite.info("run_mode", run_mode == 1 ? "real" : "simulation_or_unknown");
suite.expect(run_mode == 1, "real_robot_mode", "mode=" + std::to_string(run_mode));
}
int power_state = -1;
result = rm_get_arm_power_state(session.handle(), &power_state);
suite.expect(result == 0, "rm_get_arm_power_state", "error=" + std::to_string(result));
if (result == 0) {
suite.expect(power_state == 1, "arm_powered_on", "power_state=" + std::to_string(power_state));
}
// current_arm_state 提供当前关节角、TCP 位姿和机械臂错误列表,是最小状态闭环。
rm_current_arm_state_t arm_state = {};
result = rm_get_current_arm_state(session.handle(), &arm_state);
suite.expect(result == 0, "rm_get_current_arm_state", "error=" + std::to_string(result));
if (result == 0) {
const int dof = static_cast<int>(info.arm_dof);
suite.expect(isFiniteArray(arm_state.joint, dof), "current_joints_finite",
formatArray(arm_state.joint, dof, "J"));
suite.expect(poseFinite(arm_state.pose), "current_tcp_pose_finite", poseSummary(arm_state.pose));
suite.expect(errListClear(arm_state.err), "current_arm_errors_clear", errSummary(arm_state.err));
}
rm_arm_all_state_t all_state = {};
result = rm_get_arm_all_state(session.handle(), &all_state);
suite.expect(result == 0, "rm_get_arm_all_state", "error=" + std::to_string(result));
if (result == 0) {
// 逐关节检查用较宽范围,只判断“明显不正常”,不把电流读数当作精确力矩指标。
bool joints_enabled = true;
bool joint_errors_zero = true;
bool joint_values_valid = true;
const int dof = static_cast<int>(info.arm_dof);
for (int i = 0; i < dof; ++i) {
joints_enabled = joints_enabled && all_state.joint_en_flag[i] == 1;
joint_errors_zero = joint_errors_zero && all_state.joint_err_code[i] == 0;
joint_values_valid = joint_values_valid &&
inRange(all_state.joint_voltage[i], 18.0F, 30.0F) &&
inRange(all_state.joint_temperature[i], 0.0F, 85.0F) &&
inRange(all_state.joint_current[i], -10000.0F, 10000.0F);
}
suite.expect(joints_enabled, "all_joints_enabled");
suite.expect(joint_errors_zero, "joint_error_codes_zero");
suite.expect(joint_values_valid, "joint_power_temperature_current_ranges");
suite.expect(errListClear(all_state.err), "arm_all_state_errors_clear", errSummary(all_state.err));
}
float controller_voltage = 0.0F;
float controller_current = 0.0F;
float controller_temperature = 0.0F;
int controller_error = -1;
result = rm_get_controller_state(session.handle(),
&controller_voltage,
&controller_current,
&controller_temperature,
&controller_error);
suite.expect(result == 0, "rm_get_controller_state", "error=" + std::to_string(result));
if (result == 0) {
suite.info("controller_state",
"voltage_V=" + std::to_string(controller_voltage) +
", current_A=" + std::to_string(controller_current) +
", temperature_C=" + std::to_string(controller_temperature) +
", err=" + std::to_string(controller_error));
suite.expect(inRange(controller_voltage, 18.0F, 30.0F), "controller_voltage_range");
suite.expect(inRange(controller_current, 0.0F, 10.0F), "controller_current_range");
suite.expect(inRange(controller_temperature, 0.0F, 85.0F), "controller_temperature_range");
suite.expect(controller_error == 0, "controller_error_zero", "err=" + std::to_string(controller_error));
}
// 坐标系会影响后续运动和力数据方向;预检只确认当前配置可读、位姿数值有效。
rm_frame_t work_frame = {};
result = rm_get_current_work_frame(session.handle(), &work_frame);
suite.expect(result == 0, "rm_get_current_work_frame", "error=" + std::to_string(result));
if (result == 0) {
suite.info("current_work_frame", frameSummary(work_frame));
suite.expect(poseFinite(work_frame.pose), "work_frame_pose_finite");
}
rm_frame_t tool_frame = {};
result = rm_get_current_tool_frame(session.handle(), &tool_frame);
suite.expect(result == 0, "rm_get_current_tool_frame", "error=" + std::to_string(result));
if (result == 0) {
suite.info("current_tool_frame", frameSummary(tool_frame));
suite.expect(poseFinite(tool_frame.pose), "tool_frame_pose_finite");
suite.expect(inRange(tool_frame.payload, 0.0F, 20.0F), "tool_payload_reasonable",
"payload_kg=" + std::to_string(tool_frame.payload));
}
std::array<double, kForceAxisCount> work_zero_mean = {};
int force_failures = 0;
for (int sample = 0; sample < kForceSamples; ++sample) {
rm_force_data_t force = {};
result = rm_get_force_data(session.handle(), &force);
if (result != 0 || !isFiniteArray(force.work_zero_force_data, kForceAxisCount)) {
++force_failures;
} else {
// 在线均值避免额外保存样本数组,报告只需要静态均值和范围判断。
for (int axis = 0; axis < kForceAxisCount; ++axis) {
work_zero_mean[static_cast<size_t>(axis)] +=
(static_cast<double>(force.work_zero_force_data[axis]) -
work_zero_mean[static_cast<size_t>(axis)]) /
(sample + 1 - force_failures);
}
}
sleepMs(kForceSampleIntervalMs);
}
std::ostringstream force_detail;
force_detail << std::fixed << std::setprecision(4)
<< "Fx=" << work_zero_mean[0]
<< ", Fy=" << work_zero_mean[1]
<< ", Fz=" << work_zero_mean[2]
<< ", Mx=" << work_zero_mean[3]
<< ", My=" << work_zero_mean[4]
<< ", Mz=" << work_zero_mean[5];
suite.expect(force_failures == 0, "rm_get_force_data_preflight_samples",
"failures=" + std::to_string(force_failures));
suite.info("work_zero_force_mean", force_detail.str());
const double force_norm = std::sqrt(work_zero_mean[0] * work_zero_mean[0] +
work_zero_mean[1] * work_zero_mean[1] +
work_zero_mean[2] * work_zero_mean[2]);
suite.expect(std::isfinite(force_norm), "force_norm_computed",
"force_norm_N=" + std::to_string(force_norm));
suite.expect(maxAbs(work_zero_mean, 0, 3) <= 40.0, "work_zero_force_static_range",
"max_abs_force_N=" + std::to_string(maxAbs(work_zero_mean, 0, 3)));
suite.expect(maxAbs(work_zero_mean, 3, 6) <= 4.0, "work_zero_torque_static_range",
"max_abs_torque_Nm=" + std::to_string(maxAbs(work_zero_mean, 3, 6)));
suite.info("manual_items_not_executed",
"appearance/load/e-stop/contact-force/repeatability require human safety confirmation or external tools");
return suite.finish();
}
#include "rm_interface.h"
#include <algorithm>
#include <array>
#include <atomic>
#include <chrono>
#include <cmath>
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <string>
#include <thread>
#include <vector>
#include <csignal>
namespace {
constexpr const char *kRobotIp = "192.168.1.18";
constexpr int kRobotPort = 8080;
constexpr int kRobotApiTimeoutMs = 1500;
constexpr int kToolModbusPort = 1;
constexpr int kToolModbusBaudrate = 115200;
constexpr int kToolModbusTimeoutUnits = 10;
constexpr int kToolVoltage24V = 3;
constexpr int kRightHandDeviceId = 0x27;
constexpr int kO6IdentityRegisterAddress = 30;
constexpr int kO6JointPositionRegisterAddress = 0x01;
constexpr int kO6JointRegisterCount = 6;
constexpr int kFirstArmSwingJointOneBased = 2;
constexpr int kSecondArmSwingJointOneBased = 3;
constexpr float kDefaultAmplitudeDeg = 10.0F;
constexpr float kMaxAutomaticAmplitudeDeg = 12.0F;
constexpr int kDefaultSpeedPercent = 6;
constexpr int kMaxAutomaticSpeedPercent = 10;
constexpr int kDefaultCycleCount = 1;
constexpr int kMaxAutomaticCycleCount = 10;
constexpr int kSafetyCountdownSeconds = 5;
constexpr int kMoveTimeoutSeconds = 18;
constexpr int kPollIntervalMs = 100;
constexpr int kInterCyclePauseMs = 350;
constexpr float kFinalJointErrorDeg = 0.8F;
std::atomic_bool g_stop_requested{false};
struct ProgramOptions {
bool execute = false;
float amplitude_deg = kDefaultAmplitudeDeg;
int speed_percent = kDefaultSpeedPercent;
int cycles = kDefaultCycleCount;
bool release_at_end = true;
};
struct ModbusLayout {
int device_id = kRightHandDeviceId;
int address = kO6JointPositionRegisterAddress;
int register_count = kO6JointRegisterCount;
};
void signalHandler(int) {
g_stop_requested.store(true);
}
void apiLogCallback(const char *message, va_list args) {
if (message == nullptr) {
return;
}
char buffer[1024] = {};
std::vsnprintf(buffer, sizeof(buffer), message, args);
std::cerr << "[rm_api] " << buffer << '\n';
}
void destroyApi() {
const int destroy_result = rm_destroy();
if (destroy_result != 0) {
std::cerr << "rm_destroy failed, error code: " << destroy_result << '\n';
}
}
void cleanup(rm_robot_handle *handle) {
if (handle != nullptr) {
const int delete_result = rm_delete_robot_arm(handle);
if (delete_result != 0) {
std::cerr << "rm_delete_robot_arm failed, error code: " << delete_result << '\n';
}
}
destroyApi();
}
bool parseIntArgument(const char *value, int *out) {
if (value == nullptr || out == nullptr) {
return false;
}
char *end = nullptr;
const long parsed = std::strtol(value, &end, 10);
if (end == value || *end != '\0') {
return false;
}
*out = static_cast<int>(parsed);
return true;
}
bool parseFloatArgument(const char *value, float *out) {
if (value == nullptr || out == nullptr) {
return false;
}
char *end = nullptr;
const float parsed = std::strtof(value, &end);
if (end == value || *end != '\0') {
return false;
}
*out = parsed;
return true;
}
bool parseOptions(int argc, char **argv, ProgramOptions *options) {
if (options == nullptr) {
return false;
}
for (int i = 1; i < argc; ++i) {
if (std::strcmp(argv[i], "--execute") == 0) {
options->execute = true;
continue;
}
if (std::strcmp(argv[i], "--hold-at-end") == 0) {
options->release_at_end = false;
continue;
}
if (std::strcmp(argv[i], "--amplitude-deg") == 0 && i + 1 < argc) {
if (!parseFloatArgument(argv[++i], &options->amplitude_deg)) {
std::cerr << "Invalid --amplitude-deg value.\n";
return false;
}
continue;
}
if (std::strcmp(argv[i], "--speed-percent") == 0 && i + 1 < argc) {
if (!parseIntArgument(argv[++i], &options->speed_percent)) {
std::cerr << "Invalid --speed-percent value.\n";
return false;
}
continue;
}
if (std::strcmp(argv[i], "--cycles") == 0 && i + 1 < argc) {
if (!parseIntArgument(argv[++i], &options->cycles)) {
std::cerr << "Invalid --cycles value.\n";
return false;
}
continue;
}
std::cerr << "Unknown or incomplete argument: " << argv[i] << '\n';
return false;
}
return true;
}
bool validateOptions(const ProgramOptions &options) {
if (options.amplitude_deg <= 0.0F || options.amplitude_deg > kMaxAutomaticAmplitudeDeg) {
std::cerr << "Refuse amplitude " << options.amplitude_deg
<< " deg. Automatic limit is 0.." << kMaxAutomaticAmplitudeDeg << " deg.\n";
return false;
}
if (options.speed_percent < 1 || options.speed_percent > kMaxAutomaticSpeedPercent) {
std::cerr << "Refuse speed " << options.speed_percent
<< "%. Automatic limit is 1.." << kMaxAutomaticSpeedPercent << "%.\n";
return false;
}
if (options.cycles < 1 || options.cycles > kMaxAutomaticCycleCount) {
std::cerr << "Refuse cycle count " << options.cycles
<< ". Automatic limit is 1.." << kMaxAutomaticCycleCount << ".\n";
return false;
}
return true;
}
bool connectRobot(rm_robot_handle **handle) {
rm_set_log_call_back(apiLogCallback, 2);
rm_set_timeout(kRobotApiTimeoutMs);
const int init_result = rm_init(RM_TRIPLE_MODE_E);
if (init_result != 0) {
std::cerr << "rm_init failed, error code: " << init_result << '\n';
return false;
}
std::cout << "RealMan API version: " << rm_api_version() << '\n';
std::cout << "Connecting to " << kRobotIp << ':' << kRobotPort << "...\n";
*handle = rm_create_robot_arm(kRobotIp, kRobotPort);
if (*handle == nullptr || (*handle)->id < 0) {
std::cerr << "Failed to connect RealMan arm at " << kRobotIp << ':' << kRobotPort << '\n';
cleanup(*handle);
*handle = nullptr;
return false;
}
std::cout << "Connected, handle id: " << (*handle)->id << '\n';
return true;
}
bool readArmState(rm_robot_handle *handle, rm_current_arm_state_t *state) {
const int result = rm_get_current_arm_state(handle, state);
if (result != 0) {
std::cerr << "rm_get_current_arm_state failed, error code: " << result << '\n';
return false;
}
return true;
}
bool allFinite(const float joints[ARM_DOF], int dof) {
for (int i = 0; i < dof; ++i) {
if (!std::isfinite(joints[i])) {
std::cerr << "Joint J" << (i + 1) << " is not finite: " << joints[i] << '\n';
return false;
}
}
return true;
}
void copyJoints(const float source[ARM_DOF], std::array<float, ARM_DOF> *target) {
for (int i = 0; i < ARM_DOF; ++i) {
(*target)[static_cast<size_t>(i)] = source[i];
}
}
void printJoints(const char *label, const float joints[ARM_DOF], int dof) {
std::cout << label;
for (int i = 0; i < dof; ++i) {
std::cout << (i == 0 ? " [" : ", ")
<< "J" << (i + 1) << "=" << std::fixed << std::setprecision(3) << joints[i];
}
std::cout << "] deg\n";
}
double maxAbsDiff(const float *left, const float *right, int count) {
double max_diff = 0.0;
for (int i = 0; i < count; ++i) {
max_diff = std::max(max_diff, std::fabs(static_cast<double>(left[i] - right[i])));
}
return max_diff;
}
rm_peripheral_read_write_params_t makePeripheralParams(const ModbusLayout &layout) {
rm_peripheral_read_write_params_t param = {};
param.port = kToolModbusPort;
param.address = layout.address;
param.device = layout.device_id;
param.num = layout.register_count;
return param;
}
void printToolVoltage(rm_robot_handle *handle, const char *label) {
int voltage_type = -1;
const int result = rm_get_tool_voltage(handle, &voltage_type);
if (result != 0) {
std::cout << label << " rm_get_tool_voltage failed, error code: " << result << '\n';
return;
}
std::cout << label << " tool voltage type=" << voltage_type
<< " (0=0V, 1=5V, 2=12V, 3=24V)\n";
}
bool configureToolPowerAndRs485(rm_robot_handle *handle) {
printToolVoltage(handle, "Before");
const int voltage_result = rm_set_tool_voltage(handle, kToolVoltage24V);
if (voltage_result != 0) {
std::cerr << "rm_set_tool_voltage(24V) failed, error code: " << voltage_result << '\n';
return false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(300));
printToolVoltage(handle, "After");
const int modbus_result = rm_set_modbus_mode(
handle,
kToolModbusPort,
kToolModbusBaudrate,
kToolModbusTimeoutUnits);
if (modbus_result != 0) {
std::cerr << "rm_set_modbus_mode(port=1, baud=115200) failed, error code: " << modbus_result << '\n';
return false;
}
std::cout << "Tool RS485 configured as Modbus RTU master, baudrate="
<< kToolModbusBaudrate << ", timeout_units=" << kToolModbusTimeoutUnits << '\n';
return true;
}
bool readO6IdentityRegisters(rm_robot_handle *handle, int device_id) {
ModbusLayout layout = {device_id, kO6IdentityRegisterAddress, kO6JointRegisterCount};
rm_peripheral_read_write_params_t param = makePeripheralParams(layout);
int data[32] = {};
const int result = rm_read_multiple_input_registers(handle, param, data);
if (result != 0) {
std::cerr << "Read O6 identity registers failed, device=0x" << std::hex << device_id
<< std::dec << ", error code: " << result << '\n';
return false;
}
std::cout << "O6 identity bytes, device=0x" << std::hex << device_id << std::dec << ':';
for (int i = 0; i < kO6JointRegisterCount * 2; ++i) {
std::cout << ' ' << data[i];
}
std::cout << " | ascii=";
for (int i = 0; i < kO6JointRegisterCount * 2; ++i) {
const int value = data[i] & 0xFF;
std::cout << (value >= 32 && value <= 126 ? static_cast<char>(value) : '.');
}
std::cout << '\n';
return true;
}
bool writeO6JointPose(rm_robot_handle *handle, const std::vector<int> &pose, const char *label) {
if (pose.size() != kO6JointRegisterCount) {
std::cerr << "Internal error: O6 pose must contain 6 joint values.\n";
return false;
}
ModbusLayout layout = {};
rm_peripheral_read_write_params_t param = makePeripheralParams(layout);
int data[20] = {};
for (int &value : data) {
value = 255;
}
for (int i = 0; i < kO6JointRegisterCount; ++i) {
data[i] = pose[static_cast<size_t>(i)];
}
const int result = rm_write_registers(handle, param, data);
if (result != 0) {
std::cerr << "Write O6 pose failed at " << label << ", error code: " << result << '\n';
return false;
}
std::cout << "Wrote O6 " << label << " pose:";
for (int value : pose) {
std::cout << ' ' << value;
}
std::cout << '\n';
return true;
}
bool startJointMove(rm_robot_handle *handle,
const std::array<float, ARM_DOF> &target,
int speed_percent,
const char *label,
int dof) {
printJoints(label, target.data(), dof);
const int result = rm_movej(handle, target.data(), speed_percent, 0, 0, 0);
if (result != 0) {
std::cerr << "rm_movej nonblocking failed at " << label << ", error code: " << result << '\n';
rm_set_arm_stop(handle);
return false;
}
return true;
}
bool waitUntilNearTarget(rm_robot_handle *handle,
const std::array<float, ARM_DOF> &target,
const char *label,
int dof) {
const auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(kMoveTimeoutSeconds);
while (std::chrono::steady_clock::now() < deadline) {
if (g_stop_requested.load()) {
std::cerr << "Stop requested. Sending slow stop.\n";
rm_set_arm_slow_stop(handle);
return false;
}
rm_current_arm_state_t current = {};
if (!readArmState(handle, &current)) {
rm_set_arm_stop(handle);
return false;
}
const double error_deg = maxAbsDiff(target.data(), current.joint, dof);
if (error_deg <= kFinalJointErrorDeg) {
std::cout << label << " reached, max_error_deg=" << std::fixed
<< std::setprecision(3) << error_deg << '\n';
return true;
}
std::this_thread::sleep_for(std::chrono::milliseconds(kPollIntervalMs));
}
std::cerr << label << " timed out. Sending stop.\n";
rm_set_arm_stop(handle);
return false;
}
bool moveArmAndOptionallyWriteHand(rm_robot_handle *handle,
const std::array<float, ARM_DOF> &target,
const std::vector<int> &hand_pose_after_start,
const char *arm_label,
const char *hand_label,
const ProgramOptions &options,
int dof) {
if (!startJointMove(handle, target, options.speed_percent, arm_label, dof)) {
return false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(350));
if (!hand_pose_after_start.empty() && !writeO6JointPose(handle, hand_pose_after_start, hand_label)) {
rm_set_arm_stop(handle);
return false;
}
return waitUntilNearTarget(handle, target, arm_label, dof);
}
void countdownBeforeMotion() {
std::cout << "\nSafety countdown before motion. Clear workspace and keep E-stop reachable.\n";
for (int second = kSafetyCountdownSeconds; second > 0; --second) {
if (g_stop_requested.load()) {
break;
}
std::cout << "Moving in " << second << "...\n";
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
bool buildSwingTargets(const rm_current_arm_state_t &start_state,
const ProgramOptions &options,
int dof,
std::array<float, ARM_DOF> *positive,
std::array<float, ARM_DOF> *negative,
std::array<float, ARM_DOF> *start) {
if (dof < kSecondArmSwingJointOneBased) {
std::cerr << "Robot DOF is too small for J2/J3 swing: " << dof << '\n';
return false;
}
if (!allFinite(start_state.joint, dof)) {
return false;
}
copyJoints(start_state.joint, start);
copyJoints(start_state.joint, positive);
copyJoints(start_state.joint, negative);
const size_t j2 = static_cast<size_t>(kFirstArmSwingJointOneBased - 1);
const size_t j3 = static_cast<size_t>(kSecondArmSwingJointOneBased - 1);
(*positive)[j2] += options.amplitude_deg;
(*positive)[j3] -= options.amplitude_deg;
(*negative)[j2] -= options.amplitude_deg;
(*negative)[j3] += options.amplitude_deg;
printJoints("Current joints:", start_state.joint, dof);
printJoints("Planned positive swing:", positive->data(), dof);
printJoints("Planned negative swing:", negative->data(), dof);
printJoints("Planned return:", start->data(), dof);
return true;
}
bool runOneCompleteCombinedCycle(rm_robot_handle *handle,
const ProgramOptions &options,
const std::array<float, ARM_DOF> &positive,
const std::array<float, ARM_DOF> &negative,
const std::array<float, ARM_DOF> &start,
int cycle_index,
int dof) {
const std::vector<int> pre_grasp_pose = {220, 170, 230, 180, 180, 180};
const std::vector<int> grasp_pose = {140, 100, 55, 55, 55, 55};
const std::vector<int> hold_pose = {140, 100, 70, 70, 70, 70};
const std::vector<int> safe_open_pose = {255, 255, 255, 255, 255, 255};
std::cout << "Complete combined action cycle " << cycle_index << "/" << options.cycles << '\n';
if (!writeO6JointPose(handle, pre_grasp_pose, "pre_grasp")) {
return false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(400));
if (!moveArmAndOptionallyWriteHand(handle, positive, grasp_pose, "swing_positive", "grasp", options, dof)) {
return false;
}
if (!moveArmAndOptionallyWriteHand(handle, negative, hold_pose, "swing_negative", "hold", options, dof)) {
return false;
}
const bool is_last_cycle = cycle_index == options.cycles;
const std::vector<int> final_pose = (!is_last_cycle || options.release_at_end) ? safe_open_pose : hold_pose;
const char *final_hand_label = (!is_last_cycle || options.release_at_end) ? "release_safe_open" : "hold_at_end";
if (!moveArmAndOptionallyWriteHand(handle,
start,
final_pose,
"return_to_start",
final_hand_label,
options,
dof)) {
return false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(kInterCyclePauseMs));
return true;
}
bool runCombinedMotion(rm_robot_handle *handle,
const ProgramOptions &options,
const std::array<float, ARM_DOF> &positive,
const std::array<float, ARM_DOF> &negative,
const std::array<float, ARM_DOF> &start,
int dof) {
const std::vector<int> safe_open_pose = {255, 255, 255, 255, 255, 255};
countdownBeforeMotion();
if (g_stop_requested.load()) {
std::cerr << "Motion canceled before start.\n";
return false;
}
if (!writeO6JointPose(handle, safe_open_pose, "safe_open")) {
return false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(500));
for (int cycle = 1; cycle <= options.cycles; ++cycle) {
if (!runOneCompleteCombinedCycle(handle, options, positive, negative, start, cycle, dof)) {
return false;
}
}
rm_current_arm_state_t final_state = {};
if (readArmState(handle, &final_state)) {
printJoints("Final joints:", final_state.joint, dof);
}
return true;
}
} // namespace
int main(int argc, char **argv) {
std::cout.setf(std::ios::unitbuf);
std::cerr.setf(std::ios::unitbuf);
std::signal(SIGINT, signalHandler);
std::signal(SIGTERM, signalHandler);
ProgramOptions options = {};
if (!parseOptions(argc, argv, &options) || !validateOptions(options)) {
return 64;
}
rm_robot_handle *handle = nullptr;
if (!connectRobot(&handle)) {
return 1;
}
int exit_code = 0;
rm_robot_info_t robot_info = {};
int result = rm_get_robot_info(handle, &robot_info);
if (result != 0) {
std::cerr << "rm_get_robot_info failed, error code: " << result << '\n';
exit_code = 2;
}
const int dof = static_cast<int>(robot_info.arm_dof);
rm_current_arm_state_t start_state = {};
std::array<float, ARM_DOF> positive = {};
std::array<float, ARM_DOF> negative = {};
std::array<float, ARM_DOF> start = {};
if (exit_code == 0 && !readArmState(handle, &start_state)) {
exit_code = 3;
}
if (exit_code == 0 && !buildSwingTargets(start_state, options, dof, &positive, &negative, &start)) {
exit_code = 4;
}
if (exit_code == 0) {
std::cout << "Options: execute=" << (options.execute ? "true" : "false")
<< ", swing_joints=J" << kFirstArmSwingJointOneBased << "/J" << kSecondArmSwingJointOneBased
<< ", amplitude_deg=" << options.amplitude_deg
<< ", speed_percent=" << options.speed_percent
<< ", cycles=" << options.cycles
<< ", release_at_end=" << (options.release_at_end ? "true" : "false") << '\n';
}
if (exit_code == 0 && !options.execute) {
std::cout << "Dry run only. Add --execute after confirming workspace clearance and E-stop readiness.\n";
} else if (exit_code == 0) {
if (!configureToolPowerAndRs485(handle)) {
exit_code = 5;
} else if (!readO6IdentityRegisters(handle, kRightHandDeviceId)) {
exit_code = 6;
} else if (!runCombinedMotion(handle, options, positive, negative, start, dof)) {
exit_code = 7;
}
}
if (exit_code == 0) {
std::cout << "Combined arm swing and O6 grasp sequence finished.\n";
}
cleanup(handle);
return exit_code;
}
#include "rm_interface.h"
#include <chrono>
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <string>
#include <thread>
#include <vector>
namespace {
constexpr const char *kRobotIp = "192.168.1.18";
constexpr int kRobotPort = 8080;
constexpr int kRobotApiTimeoutMs = 1500;
constexpr int kToolModbusPort = 1;
constexpr int kToolModbusType = 1;
constexpr int kToolModbusBaudrate = 115200;
constexpr int kToolModbusTimeoutUnits = 10;
constexpr int kRightHandDeviceId = 0x27;
constexpr int kLeftHandDeviceId = 0x28;
constexpr int kO6IdentityRegisterAddress = 30;
constexpr int kO6JointPositionRegisterAddress = 0x01;
constexpr int kO6ZeroBasedJointPositionRegisterAddress = 0x00;
constexpr int kO6JointRegisterCount = 6;
constexpr int kO6JointPackedRegisterCount = 3;
constexpr int kSwingCycleCount = 6;
constexpr int kUseFixedCycleCount = 0;
constexpr int kStepDelayMs = 650;
struct ModbusLayout {
int device_id = kRightHandDeviceId;
int address = kO6JointPositionRegisterAddress;
int register_count = kO6JointRegisterCount;
};
void apiLogCallback(const char *message, va_list args) {
if (message == nullptr) {
return;
}
char buffer[1024] = {};
std::vsnprintf(buffer, sizeof(buffer), message, args);
std::cerr << "[rm_api] " << buffer << '\n';
}
void destroyApi() {
const int destroy_result = rm_destroy();
if (destroy_result != 0) {
std::cerr << "rm_destroy failed, error code: " << destroy_result << '\n';
}
}
void cleanup(rm_robot_handle *handle) {
if (handle != nullptr) {
const int delete_result = rm_delete_robot_arm(handle);
if (delete_result != 0) {
std::cerr << "rm_delete_robot_arm failed, error code: " << delete_result << '\n';
}
}
destroyApi();
}
bool connectRobot(rm_robot_handle **handle) {
rm_set_log_call_back(apiLogCallback, 2);
rm_set_timeout(kRobotApiTimeoutMs);
const int init_result = rm_init(RM_TRIPLE_MODE_E);
if (init_result != 0) {
std::cerr << "rm_init failed, error code: " << init_result << '\n';
return false;
}
std::cout << "RealMan API version: " << rm_api_version() << '\n';
std::cout << "Connecting to " << kRobotIp << ':' << kRobotPort << "...\n";
*handle = rm_create_robot_arm(kRobotIp, kRobotPort);
if (*handle == nullptr || (*handle)->id < 0) {
std::cerr << "Failed to connect RealMan arm at " << kRobotIp << ':' << kRobotPort << '\n';
cleanup(*handle);
*handle = nullptr;
return false;
}
std::cout << "Connected, handle id: " << (*handle)->id << '\n';
return true;
}
bool shouldForceWriteWithoutRead(int argc, char **argv) {
if (argc <= 1 || argv == nullptr) {
return false;
}
for (int i = 1; i < argc; ++i) {
if (argv[i] != nullptr && std::strcmp(argv[i], "--force-write-six-registers") == 0) {
return true;
}
}
return false;
}
int parseDurationSeconds(int argc, char **argv) {
if (argc <= 1 || argv == nullptr) {
return kUseFixedCycleCount;
}
for (int i = 1; i + 1 < argc; ++i) {
if (argv[i] == nullptr || argv[i + 1] == nullptr) {
continue;
}
if (std::strcmp(argv[i], "--duration-seconds") != 0) {
continue;
}
const int parsed_duration = std::atoi(argv[i + 1]);
if (parsed_duration <= 0) {
std::cerr << "Invalid --duration-seconds value: " << argv[i + 1] << '\n';
return kUseFixedCycleCount;
}
return parsed_duration;
}
return kUseFixedCycleCount;
}
void printToolRs485Mode(rm_robot_handle *handle, const char *label) {
int mode = -1;
int baudrate = -1;
int timeout = -1;
const int result = rm_get_tool_RS485_mode(handle, &mode, &baudrate, &timeout);
if (result != 0) {
std::cout << label << " rm_get_tool_RS485_mode failed, error code: " << result << '\n';
return;
}
std::cout << label << " tool RS485 mode=" << mode
<< ", baudrate=" << baudrate
<< ", timeout_units=" << timeout << '\n';
}
void printToolVoltage(rm_robot_handle *handle) {
int voltage_type = -1;
const int result = rm_get_tool_voltage(handle, &voltage_type);
if (result != 0) {
std::cout << "rm_get_tool_voltage failed, error code: " << result << '\n';
return;
}
std::cout << "Tool voltage type=" << voltage_type
<< " (0=0V, 1=5V, 2=12V, 3=24V)\n";
}
bool configureToolRs485AsModbusMaster(rm_robot_handle *handle) {
printToolVoltage(handle);
printToolRs485Mode(handle, "Before");
const int result = rm_set_modbus_mode(
handle,
kToolModbusPort,
kToolModbusBaudrate,
kToolModbusTimeoutUnits);
if (result != 0) {
std::cerr << "rm_set_modbus_mode(port=1, baud=115200) failed, error code: " << result << '\n';
return false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(300));
printToolRs485Mode(handle, "After");
return true;
}
rm_peripheral_read_write_params_t makePeripheralParams(const ModbusLayout &layout) {
rm_peripheral_read_write_params_t param = {};
param.port = kToolModbusPort;
param.address = layout.address;
param.device = layout.device_id;
param.num = layout.register_count;
return param;
}
bool readO6JointInputRegisters(rm_robot_handle *handle, const ModbusLayout &layout) {
rm_peripheral_read_write_params_t param = makePeripheralParams(layout);
int data[32] = {};
const int result = rm_read_multiple_input_registers(handle, param, data);
if (result != 0) {
std::cerr << "Read O6 input registers failed, device=0x" << std::hex << layout.device_id
<< ", address=0x" << layout.address << std::dec
<< ", register_count=" << layout.register_count
<< ", error code: " << result << '\n';
return false;
}
std::cout << "O6 input register bytes, device=0x" << std::hex << layout.device_id
<< ", address=0x" << layout.address << std::dec
<< ", register_count=" << layout.register_count << ':';
for (int i = 0; i < layout.register_count * 2; ++i) {
std::cout << ' ' << data[i];
}
std::cout << '\n';
return true;
}
bool readO6IdentityRegisters(rm_robot_handle *handle, int device_id) {
ModbusLayout layout = {device_id, kO6IdentityRegisterAddress, kO6JointRegisterCount};
rm_peripheral_read_write_params_t param = makePeripheralParams(layout);
int data[32] = {};
const int result = rm_read_multiple_input_registers(handle, param, data);
if (result != 0) {
std::cerr << "Read O6 identity registers failed, device=0x" << std::hex << device_id
<< std::dec << ", error code: " << result << '\n';
return false;
}
std::cout << "O6 identity bytes, device=0x" << std::hex << device_id << std::dec << ':';
for (int i = 0; i < kO6JointRegisterCount * 2; ++i) {
std::cout << ' ' << data[i];
}
std::cout << " | ascii=";
for (int i = 0; i < kO6JointRegisterCount * 2; ++i) {
const int value = data[i] & 0xFF;
std::cout << (value >= 32 && value <= 126 ? static_cast<char>(value) : '.');
}
std::cout << '\n';
return true;
}
bool writeO6JointPoseAsSixRegisters(rm_robot_handle *handle,
const std::vector<int> &pose,
const ModbusLayout &layout) {
if (pose.size() != kO6JointRegisterCount) {
std::cerr << "Internal error: O6 pose must contain 6 joint values.\n";
return false;
}
rm_peripheral_read_write_params_t param = makePeripheralParams(layout);
int data[20] = {};
for (int &value : data) {
value = 255;
}
for (int i = 0; i < kO6JointRegisterCount; ++i) {
data[i] = pose[static_cast<size_t>(i)];
}
const int result = rm_write_registers(handle, param, data);
if (result != 0) {
std::cerr << "Write O6 joint pose as 6 direct bytes failed, error code: " << result << '\n';
return false;
}
std::cout << "Wrote O6 pose as 6 direct bytes:";
for (int value : pose) {
std::cout << ' ' << value;
}
std::cout << '\n';
return true;
}
bool writeO6JointPoseAsThreePackedRegisters(rm_robot_handle *handle,
const std::vector<int> &pose,
const ModbusLayout &layout) {
if (pose.size() != kO6JointRegisterCount) {
std::cerr << "Internal error: O6 pose must contain 6 joint values.\n";
return false;
}
rm_peripheral_read_write_params_t param = makePeripheralParams(layout);
int data[20] = {};
for (int i = 0; i < kO6JointRegisterCount; ++i) {
data[i] = pose[static_cast<size_t>(i)];
}
const int result = rm_write_registers(handle, param, data);
if (result != 0) {
std::cerr << "Write O6 joint pose as 3 packed registers failed, error code: " << result << '\n';
return false;
}
std::cout << "Wrote O6 pose as 3 packed registers:";
for (int value : pose) {
std::cout << ' ' << value;
}
std::cout << '\n';
return true;
}
bool writeO6JointPose(rm_robot_handle *handle, const std::vector<int> &pose, const ModbusLayout &layout) {
if (layout.register_count == kO6JointRegisterCount) {
return writeO6JointPoseAsSixRegisters(handle, pose, layout);
}
if (layout.register_count == kO6JointPackedRegisterCount) {
return writeO6JointPoseAsThreePackedRegisters(handle, pose, layout);
}
std::cerr << "Unsupported O6 register layout, register_count=" << layout.register_count << '\n';
return false;
}
bool shouldContinueSwinging(const std::chrono::steady_clock::time_point &deadline,
int duration_seconds,
int completed_cycle_count) {
if (duration_seconds > 0) {
return std::chrono::steady_clock::now() < deadline;
}
return completed_cycle_count < kSwingCycleCount;
}
bool swingThumbSideToSide(rm_robot_handle *handle, const ModbusLayout &layout, int duration_seconds) {
const std::vector<int> thumb_swung_right_pose = {255, 230, 255, 255, 255, 255};
const std::vector<int> thumb_swung_left_pose = {255, 165, 255, 255, 255, 255};
const std::vector<int> safe_open_pose = {255, 255, 255, 255, 255, 255};
const auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(duration_seconds);
int completed_cycle_count = 0;
while (shouldContinueSwinging(deadline, duration_seconds, completed_cycle_count)) {
if (!writeO6JointPose(handle, thumb_swung_right_pose, layout)) {
return false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(kStepDelayMs));
if (!writeO6JointPose(handle, thumb_swung_left_pose, layout)) {
return false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(kStepDelayMs));
++completed_cycle_count;
}
std::cout << "Completed thumb swing cycles: " << completed_cycle_count << '\n';
return writeO6JointPose(handle, safe_open_pose, layout);
}
} // namespace
int main(int argc, char **argv) {
const bool force_write_without_read = shouldForceWriteWithoutRead(argc, argv);
const int duration_seconds = parseDurationSeconds(argc, argv);
rm_robot_handle *handle = nullptr;
if (!connectRobot(&handle)) {
return 1;
}
int exit_code = 0;
ModbusLayout selected_layout = {};
bool found_readable_layout = false;
if (!configureToolRs485AsModbusMaster(handle)) {
exit_code = 2;
} else {
const std::vector<int> identity_device_ids = {kRightHandDeviceId, kLeftHandDeviceId};
for (const int device_id : identity_device_ids) {
if (readO6IdentityRegisters(handle, device_id)) {
selected_layout = {device_id, kO6JointPositionRegisterAddress, kO6JointRegisterCount};
found_readable_layout = true;
break;
}
}
const std::vector<ModbusLayout> candidate_layouts = {
{kRightHandDeviceId, kO6JointPositionRegisterAddress, kO6JointRegisterCount},
{kRightHandDeviceId, kO6JointPositionRegisterAddress, kO6JointPackedRegisterCount},
{kRightHandDeviceId, kO6ZeroBasedJointPositionRegisterAddress, kO6JointRegisterCount},
{kRightHandDeviceId, kO6ZeroBasedJointPositionRegisterAddress, kO6JointPackedRegisterCount},
{kLeftHandDeviceId, kO6JointPositionRegisterAddress, kO6JointRegisterCount},
{kLeftHandDeviceId, kO6JointPositionRegisterAddress, kO6JointPackedRegisterCount},
{kLeftHandDeviceId, kO6ZeroBasedJointPositionRegisterAddress, kO6JointRegisterCount},
{kLeftHandDeviceId, kO6ZeroBasedJointPositionRegisterAddress, kO6JointPackedRegisterCount},
};
if (!found_readable_layout) {
for (const auto &layout : candidate_layouts) {
if (readO6JointInputRegisters(handle, layout)) {
selected_layout = layout;
found_readable_layout = true;
break;
}
}
}
}
if (exit_code == 0 && !found_readable_layout && force_write_without_read) {
std::cout << "Read failed, forcing one write attempt with the 6-register layout.\n";
selected_layout = {kRightHandDeviceId, kO6JointPositionRegisterAddress, kO6JointRegisterCount};
found_readable_layout = true;
} else if (exit_code == 0 && !found_readable_layout) {
exit_code = 3;
}
if (exit_code == 0 && !swingThumbSideToSide(handle, selected_layout, duration_seconds)) {
exit_code = 4;
}
if (exit_code == 0) {
std::cout << "Thumb side-swing sequence finished.\n";
}
cleanup(handle);
return exit_code;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment