├── .clang-format ├── .gitignore ├── .rosinstall ├── .travis.yml ├── CODEOWNERS ├── README.md ├── codecov.yml ├── march_hardware ├── CMakeLists.txt ├── check │ └── slave_count.cpp ├── cmake │ └── march_hardware-extras.cmake ├── include │ └── march_hardware │ │ ├── encoder │ │ ├── absolute_encoder.h │ │ ├── encoder.h │ │ └── incremental_encoder.h │ │ ├── error │ │ ├── error_type.h │ │ ├── hardware_exception.h │ │ └── motion_error.h │ │ ├── ethercat │ │ ├── ethercat_master.h │ │ ├── pdo_interface.h │ │ ├── pdo_map.h │ │ ├── pdo_types.h │ │ ├── sdo_interface.h │ │ └── slave.h │ │ ├── imotioncube │ │ ├── actuation_mode.h │ │ ├── imotioncube.h │ │ ├── imotioncube_state.h │ │ └── imotioncube_target_state.h │ │ ├── joint.h │ │ ├── march_robot.h │ │ ├── power │ │ ├── boot_shutdown_offsets.h │ │ ├── high_voltage.h │ │ ├── low_voltage.h │ │ ├── net_driver_offsets.h │ │ ├── net_monitor_offsets.h │ │ └── power_distribution_board.h │ │ └── temperature │ │ ├── temperature_ges.h │ │ └── temperature_sensor.h ├── launch │ └── slave_count.launch ├── package.xml ├── src │ ├── encoder │ │ ├── absolute_encoder.cpp │ │ ├── encoder.cpp │ │ └── incremental_encoder.cpp │ ├── error │ │ ├── error_type.cpp │ │ └── motion_error.cpp │ ├── ethercat │ │ ├── ethercat_master.cpp │ │ ├── pdo_interface.cpp │ │ ├── pdo_map.cpp │ │ └── sdo_interface.cpp │ ├── imotioncube │ │ ├── imotioncube.cpp │ │ └── imotioncube_target_state.cpp │ ├── joint.cpp │ ├── march_robot.cpp │ ├── power │ │ ├── high_voltage.cpp │ │ ├── low_voltage.cpp │ │ └── power_distribution_board.cpp │ └── temperature │ │ └── temperature_ges.cpp └── test │ ├── encoder │ ├── absolute_encoder_test.cpp │ ├── encoder_test.cpp │ └── incremental_encoder_test.cpp │ ├── error │ ├── hardware_exception_test.cpp │ └── motion_error_test.cpp │ ├── ethercat │ ├── pdo_map_test.cpp │ └── slave_test.cpp │ ├── imotioncube │ └── imotioncube_test.cpp │ ├── joint_test.cpp │ ├── mocks │ ├── mock_absolute_encoder.h │ ├── mock_encoder.h │ ├── mock_imotioncube.h │ ├── mock_incremental_encoder.h │ ├── mock_joint.h │ ├── mock_pdo_interface.h │ ├── mock_sdo_interface.h │ ├── mock_slave.h │ └── mock_temperature_ges.h │ ├── power │ ├── boot_shutdown_offsets_test.cpp │ ├── high_voltage_test.cpp │ ├── low_voltage_test.cpp │ ├── net_driver_offsets_test.cpp │ ├── net_monitor_offsets_test.cpp │ └── power_distribution_board_test.cpp │ ├── temperature │ └── temperature_ges_test.cpp │ └── test_runner.cpp ├── march_hardware_builder ├── CMakeLists.txt ├── docs │ ├── Doxyfile │ └── pages │ │ └── mainpage.dox ├── include │ └── march_hardware_builder │ │ ├── allowed_robot.h │ │ ├── hardware_builder.h │ │ └── hardware_config_exceptions.h ├── package.xml ├── robots │ ├── march3.yaml │ ├── march4.yaml │ ├── pdb.yaml │ ├── test_joint_linear.yaml │ └── test_joint_rotational.yaml ├── src │ └── hardware_builder.cpp └── test │ ├── absolute_encoder_builder_test.cpp │ ├── allowed_robot_test.cpp │ ├── imc_builder_test.cpp │ ├── incremental_encoder_builder_test.cpp │ ├── joint_builder_test.cpp │ ├── pdb_builder_test.cpp │ ├── test_runner.cpp │ └── yaml │ ├── encoder │ ├── absolute_encoder_correct.yaml │ ├── absolute_encoder_no_max_position.yaml │ ├── absolute_encoder_no_min_position.yaml │ ├── absolute_encoder_no_resolution.yaml │ ├── incremental_encoder_correct.yaml │ ├── incremental_encoder_no_resolution.yaml │ └── incremental_encoder_no_transmission.yaml │ ├── imotioncube │ ├── imotioncube_correct.yaml │ ├── imotioncube_no_absolute_encoder.yaml │ ├── imotioncube_no_incremental_encoder.yaml │ └── imotioncube_no_slave_index.yaml │ ├── joint │ ├── joint_correct.yaml │ ├── joint_correct_not_actuated.yaml │ ├── joint_correct_position_mode.yaml │ ├── joint_no_actuate.yaml │ ├── joint_no_imotioncube.yaml │ ├── joint_no_temperature_ges.yaml │ └── joint_only_actuate.yaml │ ├── powerdistributionboard │ ├── power_distribution_board.yaml │ ├── power_distribution_board_missing_high_voltage_state_index.yaml │ ├── power_distribution_board_missing_slave_index.yaml │ └── power_distribution_board_negative_offset.yaml │ └── temperaturesensor │ └── temperature_correct.yaml ├── march_hardware_interface ├── CMakeLists.txt ├── config │ ├── march3 │ │ ├── controllers.yaml │ │ └── joint_limits.yaml │ ├── march4 │ │ └── controllers.yaml │ ├── test_joint_linear │ │ └── controllers.yaml │ └── test_joint_rotational │ │ └── controllers.yaml ├── docs │ ├── Doxyfile │ └── pages │ │ └── mainpage.dox ├── include │ └── march_hardware_interface │ │ ├── march_hardware_interface.h │ │ ├── march_pdb_state_interface.h │ │ ├── march_temperature_sensor_interface.h │ │ ├── power_net_on_off_command.h │ │ └── power_net_type.h ├── launch │ └── hardware.launch ├── package.xml ├── src │ ├── march_hardware_interface.cpp │ └── march_hardware_interface_node.cpp └── test │ ├── pdb_state_interface_test.cpp │ └── test_runner.cpp ├── march_imu_manager ├── CMakeLists.txt ├── include │ └── march_imu_manager │ │ ├── mtw.h │ │ └── wireless_master.h ├── lib │ ├── include │ │ ├── .clang-format │ │ ├── xsens │ │ │ ├── pstdint.h │ │ │ ├── xdaconfig.h │ │ │ ├── xdainfo.h │ │ │ ├── xsaccesscontrolmode.h │ │ │ ├── xsalignmentframe.h │ │ │ ├── xsanalogindata.h │ │ │ ├── xsarray.h │ │ │ ├── xsatomicint.h │ │ │ ├── xsbaud.h │ │ │ ├── xsbaudcode.h │ │ │ ├── xsbaudrate.h │ │ │ ├── xsbusid.h │ │ │ ├── xsbytearray.h │ │ │ ├── xscalibrateddata.h │ │ │ ├── xscalibrateddatamode.h │ │ │ ├── xscallback.h │ │ │ ├── xscallbackplainc.h │ │ │ ├── xscomcallbackoptions.h │ │ │ ├── xsconnectivitystate.h │ │ │ ├── xscontrol.h │ │ │ ├── xscontrolline.h │ │ │ ├── xscoordinatesystem.h │ │ │ ├── xscopy.h │ │ │ ├── xsdataformat.h │ │ │ ├── xsdataidentifier.h │ │ │ ├── xsdatapacket.h │ │ │ ├── xsdebugcounters.h │ │ │ ├── xsdef.h │ │ │ ├── xsdevice.h │ │ │ ├── xsdeviceconfiguration.h │ │ │ ├── xsdeviceid.h │ │ │ ├── xsdeviceidarray.h │ │ │ ├── xsdeviceidlist.h │ │ │ ├── xsdevicemode.h │ │ │ ├── xsdevicemodeps.h │ │ │ ├── xsdevicemoder.h │ │ │ ├── xsdeviceoptionflag.h │ │ │ ├── xsdeviceptr.h │ │ │ ├── xsdeviceptrarray.h │ │ │ ├── xsdeviceptrlist.h │ │ │ ├── xsdeviceref.h │ │ │ ├── xsdevicestate.h │ │ │ ├── xsdid.h │ │ │ ├── xsens_compat.h │ │ │ ├── xserrormode.h │ │ │ ├── xseuler.h │ │ │ ├── xsexception.h │ │ │ ├── xsfile.h │ │ │ ├── xsfilepos.h │ │ │ ├── xsfilterprofile.h │ │ │ ├── xsfilterprofilearray.h │ │ │ ├── xsfilterprofilelist.h │ │ │ ├── xsfloatformat.h │ │ │ ├── xsgpspvtdata.h │ │ │ ├── xsinforequest.h │ │ │ ├── xsint64array.h │ │ │ ├── xsintarray.h │ │ │ ├── xsintlist.h │ │ │ ├── xslibraryloader.h │ │ │ ├── xsmalloc.h │ │ │ ├── xsmath.h │ │ │ ├── xsmatrix.h │ │ │ ├── xsmatrix3x3.h │ │ │ ├── xsmessage.h │ │ │ ├── xsmessagearray.h │ │ │ ├── xsmessagelist.h │ │ │ ├── xsmutex.h │ │ │ ├── xsnetworkscanner.h │ │ │ ├── xsnmeastringtype.h │ │ │ ├── xsoption.h │ │ │ ├── xsorientationmode.h │ │ │ ├── xsoutputconfiguration.h │ │ │ ├── xsoutputconfigurationarray.h │ │ │ ├── xsoutputconfigurationlist.h │ │ │ ├── xsoutputmode.h │ │ │ ├── xsoutputsettings.h │ │ │ ├── xsplatform.h │ │ │ ├── xsportinfo.h │ │ │ ├── xsportinfoarray.h │ │ │ ├── xsportinfolist.h │ │ │ ├── xspressure.h │ │ │ ├── xsprocessingflag.h │ │ │ ├── xsprotocoltype.h │ │ │ ├── xsquaternion.h │ │ │ ├── xsrange.h │ │ │ ├── xsrawgnsspvtdata.h │ │ │ ├── xsrawgnsssatinfo.h │ │ │ ├── xsrawgpsdop.h │ │ │ ├── xsrawgpssol.h │ │ │ ├── xsrawgpssvinfo.h │ │ │ ├── xsrawgpstimeutc.h │ │ │ ├── xsrejectreason.h │ │ │ ├── xsresetmethod.h │ │ │ ├── xsresultvalue.h │ │ │ ├── xsrssi.h │ │ │ ├── xsscanner.h │ │ │ ├── xsscrdata.h │ │ │ ├── xssdidata.h │ │ │ ├── xsselftestresult.h │ │ │ ├── xssimpleversion.h │ │ │ ├── xssnapshot.h │ │ │ ├── xssocket.h │ │ │ ├── xsstatusflag.h │ │ │ ├── xsstring.h │ │ │ ├── xsstringarray.h │ │ │ ├── xsstringstreaming.h │ │ │ ├── xssyncfunction.h │ │ │ ├── xssyncline.h │ │ │ ├── xssyncpolarity.h │ │ │ ├── xssyncrole.h │ │ │ ├── xssyncsetting.h │ │ │ ├── xssyncsettingarray.h │ │ │ ├── xssyncsettinglist.h │ │ │ ├── xsthread.h │ │ │ ├── xstime.h │ │ │ ├── xstimestamp.h │ │ │ ├── xstriggerindicationdata.h │ │ │ ├── xstypedefs.h │ │ │ ├── xstypes_include.h │ │ │ ├── xstypesconfig.h │ │ │ ├── xstypesinfo.h │ │ │ ├── xsusbhubinfo.h │ │ │ ├── xsushortvector.h │ │ │ ├── xsutctime.h │ │ │ ├── xsvector.h │ │ │ ├── xsvector3.h │ │ │ ├── xsversion.h │ │ │ └── xsxbusmessageid.h │ │ ├── xsensdeviceapi.h │ │ └── xstypes.h │ ├── libxsensdeviceapi.so │ ├── libxsensdeviceapi.so.4 │ ├── libxsensdeviceapi.so.4.6.0 │ ├── libxstypes.so │ ├── libxstypes.so.4 │ └── libxstypes.so.4.6.0 ├── package.xml ├── src │ ├── main.cpp │ ├── mtw.cpp │ └── wireless_master.cpp └── test │ └── wireless_master_test.cpp ├── march_joint_inertia_controller ├── CMakeLists.txt ├── config │ └── joint_inertia_controller.yaml ├── controller_plugins.xml ├── include │ └── march_joint_inertia_controller │ │ ├── inertia_estimator.h │ │ ├── joint_inertia_controller.h │ │ └── joint_trajectory_inertia_controller.h ├── package.xml └── src │ ├── inertia_estimator.cpp │ ├── joint_inertia_controller.cpp │ └── joint_trajectory_inertia_controller.cpp ├── march_pdb_state_controller ├── CMakeLists.txt ├── include │ └── march_pdb_state_controller │ │ └── march_pdb_state_controller.h ├── march_pdb_state_plugin.xml ├── package.xml └── src │ └── march_pdb_state_controller.cpp └── march_temperature_sensor_controller ├── CMakeLists.txt ├── include └── march_temperature_sensor_controller │ └── march_temperature_sensor_controller.h ├── march_temperature_sensor_plugin.xml ├── package.xml └── src └── march_temperature_sensor_controller.cpp /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | BasedOnStyle: Google 3 | AccessModifierOffset: -2 4 | ConstructorInitializerIndentWidth: 2 5 | AlignEscapedNewlinesLeft: false 6 | AlignTrailingComments: true 7 | AllowAllParametersOfDeclarationOnNextLine: false 8 | AllowShortIfStatementsOnASingleLine: false 9 | AllowShortLoopsOnASingleLine: false 10 | AllowShortFunctionsOnASingleLine: None 11 | AlwaysBreakTemplateDeclarations: true 12 | AlwaysBreakBeforeMultilineStrings: false 13 | BreakBeforeBinaryOperators: false 14 | BreakBeforeTernaryOperators: false 15 | BreakConstructorInitializersBeforeComma: true 16 | BinPackParameters: true 17 | ColumnLimit: 120 18 | ConstructorInitializerAllOnOneLineOrOnePerLine: true 19 | DerivePointerBinding: false 20 | PointerBindsToType: true 21 | ExperimentalAutoDetectBinPacking: false 22 | IndentCaseLabels: true 23 | MaxEmptyLinesToKeep: 1 24 | NamespaceIndentation: None 25 | ObjCSpaceBeforeProtocolList: true 26 | PenaltyBreakBeforeFirstCallParameter: 19 27 | PenaltyBreakComment: 60 28 | PenaltyBreakString: 1 29 | PenaltyBreakFirstLessLess: 1000 30 | PenaltyExcessCharacter: 1000 31 | PenaltyReturnTypeOnItsOwnLine: 90 32 | SpacesBeforeTrailingComments: 2 33 | Cpp11BracedListStyle: false 34 | Standard: Auto 35 | IndentWidth: 2 36 | TabWidth: 2 37 | UseTab: Never 38 | IndentFunctionDeclarationAfterType: false 39 | SpacesInParentheses: false 40 | SpacesInAngles: false 41 | SpaceInEmptyParentheses: false 42 | SpacesInCStyleCastParentheses: false 43 | SpaceAfterControlStatementKeyword: true 44 | SpaceBeforeAssignmentOperators: true 45 | ContinuationIndentWidth: 4 46 | SortIncludes: false 47 | SpaceAfterCStyleCast: false 48 | 49 | # Configure each individual brace in BraceWrapping 50 | BreakBeforeBraces: Custom 51 | 52 | # Control of individual brace wrapping cases 53 | BraceWrapping: { 54 | AfterClass: 'true' 55 | AfterControlStatement: 'true' 56 | AfterEnum : 'true' 57 | AfterFunction : 'true' 58 | AfterNamespace : 'true' 59 | AfterStruct : 'true' 60 | AfterUnion : 'true' 61 | BeforeCatch : 'true' 62 | BeforeElse : 'true' 63 | IndentBraces : 'false' 64 | } 65 | ... 66 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/* 2 | */cmake-build-debug/** 3 | .vscode/settings.json 4 | -------------------------------------------------------------------------------- /.rosinstall: -------------------------------------------------------------------------------- 1 | - git: 2 | local-name: march 3 | uri: https://github.com/project-march/march 4 | version: develop 5 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @project-march/v-software @bjornminderman @Olavhaasie 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This repository has been archived. A recent version can be found on https://gitlab.com/project-march. 2 | 3 | # Hardware Interface 4 | The hardware interface of the MARCH exoskeleton. This includes EtherCAT master and uses the SOEM library. 5 | 6 | ![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/project-march/hardware-interface?include_prereleases) 7 | [![codecov](https://codecov.io/gh/project-march/hardware-interface/branch/develop/graph/badge.svg?flag=production)](https://codecov.io/gh/project-march/hardware-interface) 8 | 9 | 10 | | Branch | Build Status | 11 | | ------ |:------------:| 12 | | master | [![Build Status](https://api.travis-ci.com/project-march/hardware-interface.svg?branch=master)](https://travis-ci.com/project-march/hardware-interface) | 13 | | develop | [![Build Status](https://api.travis-ci.com/project-march/hardware-interface.svg?branch=develop)](https://travis-ci.com/project-march/hardware-interface) | 14 | 15 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | project: 4 | default: off 5 | production: 6 | target: auto 7 | flags: 8 | - production 9 | fixes: 10 | - "src/hardware-interface/::" 11 | flags: 12 | production: 13 | paths: 14 | - "*/src/**/*" 15 | - "*/src/*" 16 | - "*/include/march_*/*" 17 | - "*/include/march_*/**/*" 18 | test: 19 | paths: 20 | - "*/test/**/*" 21 | - "*/test/*" 22 | -------------------------------------------------------------------------------- /march_hardware/check/slave_count.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | int main(int argc, char** argv) 16 | { 17 | ros::init(argc, argv, "slave_count_check"); 18 | ros::NodeHandle nh; 19 | const std::string param = "/march/check/slave_count"; 20 | 21 | ROS_INFO("Trying to start EtherCAT"); 22 | std::string ifname = "enp2s0"; 23 | 24 | // Initialise SOEM, bind socket to ifname 25 | if (!ec_init(&ifname[0])) 26 | { 27 | ROS_FATAL("No socket connection on %s. Confirm that you have selected the right ifname", ifname.c_str()); 28 | nh.setParam(param, 0); 29 | return 1; 30 | } 31 | ROS_INFO("ec_init on %s succeeded", ifname.c_str()); 32 | 33 | // Find and auto-config slaves 34 | if (ec_config_init(FALSE) <= 0) 35 | { 36 | ROS_FATAL("No slaves found, shutting down. Confirm that you have selected the right ifname."); 37 | ROS_FATAL("Check that the first slave is connected properly"); 38 | nh.setParam(param, 0); 39 | return 1; 40 | } 41 | ROS_INFO("%d slave(s) found and initialized.", ec_slavecount); 42 | 43 | nh.setParam(param, ec_slavecount); 44 | ros::shutdown(); 45 | return 0; 46 | } 47 | -------------------------------------------------------------------------------- /march_hardware/cmake/march_hardware-extras.cmake: -------------------------------------------------------------------------------- 1 | # CMake function to add rpath to target 2 | # Copied from https://github.com/shadow-robot/ros_ethercat/blob/kinetic-devel/ros_ethercat_hardware/cmake/ros_ethercat_hardware-extras.cmake.em 3 | function(ros_enable_rpath target) 4 | # Set ${target} with RPATH built in so that we can install it suid 5 | set_target_properties(${target} PROPERTIES SKIP_BUILD_RPATH FALSE) 6 | 7 | # Set the install RPATH to the install path 8 | set(RPATH "${CMAKE_INSTALL_PREFIX}/${CATKIN_PACKAGE_LIB_DESTINATION}") 9 | 10 | # If LD_LIBRARY_PATH is set, add it to the install RPATH 11 | # this works in a normal catkin environment, but fails if the user unsets 12 | # their LD_LIBRARY_PATH manually for some reason 13 | if(DEFINED ENV{LD_LIBRARY_PATH}) 14 | set(RPATH "${RPATH}:$ENV{LD_LIBRARY_PATH}") 15 | endif() 16 | 17 | # Apply our computed RPATH to the target 18 | set_target_properties(${target} PROPERTIES INSTALL_RPATH ${RPATH}) 19 | 20 | # Don't use the final RPATH in devel space 21 | set_target_properties(${target} PROPERTIES BUILD_WITH_INSTALL_RPATH FALSE) 22 | endfunction() 23 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/encoder/incremental_encoder.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | 3 | #ifndef MARCH_HARDWARE_INCREMENTAL_ENCODER_H 4 | #define MARCH_HARDWARE_INCREMENTAL_ENCODER_H 5 | #include "march_hardware/encoder/encoder.h" 6 | 7 | #include 8 | 9 | namespace march 10 | { 11 | class IncrementalEncoder : public Encoder 12 | { 13 | public: 14 | IncrementalEncoder(size_t number_of_bits, double transmission); 15 | 16 | ~IncrementalEncoder() noexcept override = default; 17 | 18 | double toRad(int32_t iu) const override; 19 | double getRadPerBit() const override; 20 | double getTransmission() const; 21 | 22 | /** @brief Override comparison operator */ 23 | friend bool operator==(const IncrementalEncoder& lhs, const IncrementalEncoder& rhs) 24 | { 25 | return lhs.getTotalPositions() == rhs.getTotalPositions() && lhs.transmission_ == rhs.transmission_; 26 | } 27 | /** @brief Override stream operator for clean printing */ 28 | friend std::ostream& operator<<(std::ostream& os, const IncrementalEncoder& encoder) 29 | { 30 | return os << "totalPositions: " << encoder.getTotalPositions() << ", " 31 | << "transmission: " << encoder.transmission_; 32 | } 33 | 34 | private: 35 | const double transmission_; 36 | }; 37 | } // namespace march 38 | 39 | #endif // MARCH_HARDWARE_INCREMENTAL_ENCODER_H 40 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/error/error_type.h: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Project March. 2 | 3 | #ifndef MARCH_HARDWARE_ERROR_TYPE_H 4 | #define MARCH_HARDWARE_ERROR_TYPE_H 5 | #include 6 | 7 | namespace march 8 | { 9 | namespace error 10 | { 11 | enum class ErrorType 12 | { 13 | INVALID_ACTUATION_MODE = 100, 14 | INVALID_ACTUATE_POSITION = 101, 15 | ENCODER_RESET = 102, 16 | OUTSIDE_HARD_LIMITS = 103, 17 | TARGET_EXCEEDS_MAX_DIFFERENCE = 104, 18 | TARGET_TORQUE_EXCEEDS_MAX_TORQUE = 105, 19 | PDO_OBJECT_NOT_DEFINED = 106, 20 | PDO_REGISTER_OVERFLOW = 107, 21 | WRITING_INITIAL_SETTINGS_FAILED = 108, 22 | NO_SOCKET_CONNECTION = 109, 23 | NOT_ALL_SLAVES_FOUND = 110, 24 | FAILED_TO_REACH_OPERATIONAL_STATE = 111, 25 | INVALID_ENCODER_RESOLUTION = 112, 26 | INVALID_RANGE_OF_MOTION = 114, 27 | INVALID_SLAVE_CONFIGURATION = 115, 28 | NOT_ALLOWED_TO_ACTUATE = 116, 29 | INVALID_SLAVE_INDEX = 117, 30 | MISSING_URDF_JOINT = 118, 31 | MISSING_REQUIRED_KEY = 119, 32 | INIT_URDF_FAILED = 120, 33 | INVALID_SW_STRING = 121, 34 | SLAVE_LOST_TIMOUT = 122, 35 | UNKNOWN = 999, 36 | }; 37 | 38 | const char* getErrorDescription(ErrorType type); 39 | 40 | std::ostream& operator<<(std::ostream& s, ErrorType type); 41 | } // namespace error 42 | } // namespace march 43 | 44 | #endif // MARCH_HARDWARE_ERROR_TYPE_H 45 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/error/hardware_exception.h: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Project March. 2 | 3 | #ifndef MARCH_HARDWARE_HARDWARE_EXCEPTION_H 4 | #define MARCH_HARDWARE_HARDWARE_EXCEPTION_H 5 | #include "error_type.h" 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | namespace march 14 | { 15 | namespace error 16 | { 17 | class HardwareException : public std::exception 18 | { 19 | public: 20 | explicit HardwareException(ErrorType type) : HardwareException(type, "") 21 | { 22 | } 23 | 24 | HardwareException(ErrorType type, const std::string& message) 25 | : type_(type), description_(this->createDescription(message)) 26 | { 27 | } 28 | 29 | template 30 | HardwareException(ErrorType type, const std::string& format, Args... args) : type_(type) 31 | { 32 | const size_t size = std::snprintf(nullptr, 0, format.c_str(), args...); 33 | std::vector buffer(size + 1); // note +1 for null terminator 34 | std::snprintf(&buffer[0], buffer.size(), format.c_str(), args...); 35 | 36 | this->description_ = this->createDescription(std::string(buffer.data(), size)); 37 | } 38 | 39 | virtual ~HardwareException() noexcept = default; 40 | 41 | const char* what() const noexcept override 42 | { 43 | return this->description_.c_str(); 44 | } 45 | 46 | ErrorType type() const noexcept 47 | { 48 | return this->type_; 49 | } 50 | 51 | friend std::ostream& operator<<(std::ostream& s, const HardwareException& e) 52 | { 53 | s << e.description_; 54 | return s; 55 | } 56 | 57 | protected: 58 | std::string createDescription(const std::string& message) 59 | { 60 | std::stringstream ss; 61 | ss << this->type_; 62 | if (!message.empty()) 63 | { 64 | ss << std::endl; 65 | ss << message; 66 | } 67 | return ss.str(); 68 | } 69 | 70 | const ErrorType type_ = ErrorType::UNKNOWN; 71 | std::string description_; 72 | }; 73 | 74 | } // namespace error 75 | } // namespace march 76 | 77 | #endif // MARCH_HARDWARE_HARDWARE_EXCEPTION_H 78 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/error/motion_error.h: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Project March. 2 | 3 | #ifndef MARCH_HARDWARE_MOTION_ERROR_H 4 | #define MARCH_HARDWARE_MOTION_ERROR_H 5 | #include 6 | #include 7 | 8 | namespace march 9 | { 10 | namespace error 11 | { 12 | enum class ErrorRegisters 13 | { 14 | MOTION_ERROR, 15 | DETAILED_ERROR, 16 | SECOND_DETAILED_ERROR 17 | }; 18 | 19 | const size_t MOTION_ERRORS_SIZE = 16; 20 | extern const char* MOTION_ERRORS[MOTION_ERRORS_SIZE]; 21 | 22 | const size_t DETAILED_MOTION_ERRORS_SIZE = 9; 23 | extern const char* DETAILED_MOTION_ERRORS[DETAILED_MOTION_ERRORS_SIZE]; 24 | 25 | const size_t SECOND_DETAILED_MOTION_ERROR_SIZE = 7; 26 | extern const char* SECOND_DETAILED_MOTION_ERRORS[SECOND_DETAILED_MOTION_ERROR_SIZE]; 27 | 28 | std::string parseError(uint16_t error, ErrorRegisters); 29 | 30 | } // namespace error 31 | } // namespace march 32 | #endif // MARCH_HARDWARE_MOTION_ERROR_H 33 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/ethercat/pdo_types.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #ifndef MARCH_HARDWARE_ETHERCAT_PDO_TYPES_H 3 | #define MARCH_HARDWARE_ETHERCAT_PDO_TYPES_H 4 | #include 5 | 6 | namespace march 7 | { 8 | // struct used to easily get specific bytes from a 32 bit variable 9 | struct packed_bit32 10 | { 11 | uint8_t b0; 12 | uint8_t b1; 13 | uint8_t b2; 14 | uint8_t b3; 15 | }; 16 | 17 | // union used for int32, uint32 and float 18 | union bit32 19 | { 20 | int32_t i; 21 | uint32_t ui; 22 | float f; 23 | packed_bit32 p; 24 | }; 25 | 26 | // struct used to easily get specific bytes from a 16 bit variable 27 | struct packed_bit16 28 | { 29 | uint8_t b0; 30 | uint8_t b1; 31 | }; 32 | 33 | // union used for int16 and uint16 in combination with the above struct 34 | union bit16 35 | { 36 | int16_t i; 37 | uint16_t ui; 38 | packed_bit16 p; 39 | }; 40 | 41 | // union used for int8 and uint8 in combination with the above struct, uint8_t is used to read single byte 42 | // unbiased 43 | union bit8 44 | { 45 | int8_t i; 46 | uint8_t ui; 47 | uint8_t b0; 48 | }; 49 | } // namespace march 50 | #endif // MARCH_HARDWARE_ETHERCAT_PDO_TYPES_H 51 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/ethercat/slave.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #ifndef MARCH_HARDWARE_SLAVE_H 3 | #define MARCH_HARDWARE_SLAVE_H 4 | #include "pdo_interface.h" 5 | #include "sdo_interface.h" 6 | #include "march_hardware/error/hardware_exception.h" 7 | 8 | #include 9 | #include 10 | 11 | #include 12 | 13 | namespace march 14 | { 15 | class Slave : public PdoSlaveInterface 16 | { 17 | public: 18 | Slave(uint16_t slave_index, PdoInterfacePtr pdo_interface, SdoInterfacePtr sdo_interface) 19 | : PdoSlaveInterface(slave_index, pdo_interface), slave_index_(slave_index), sdo_interface_(sdo_interface) 20 | { 21 | if (pdo_interface == nullptr || sdo_interface == nullptr) 22 | { 23 | throw std::invalid_argument("SDO and PDO interface cannot be nullptr"); 24 | } 25 | if (this->slave_index_ < 1) 26 | { 27 | throw error::HardwareException(error::ErrorType::INVALID_SLAVE_INDEX, "Slave index %d is smaller than 1", 28 | this->slave_index_); 29 | } 30 | }; 31 | 32 | ~Slave() noexcept override = default; 33 | 34 | uint16_t getSlaveIndex() const 35 | { 36 | return this->slave_index_; 37 | } 38 | 39 | bool initSdo(int cycle_time) 40 | { 41 | SdoSlaveInterface sdo_slave_interface(this->slave_index_, this->sdo_interface_); 42 | return this->initSdo(sdo_slave_interface, cycle_time); 43 | } 44 | 45 | void reset() 46 | { 47 | SdoSlaveInterface sdo_slave_interface(this->slave_index_, this->sdo_interface_); 48 | this->reset(sdo_slave_interface); 49 | } 50 | 51 | protected: 52 | virtual bool initSdo(SdoSlaveInterface& /* sdo */, int /* cycle_time */) 53 | { 54 | return false; 55 | } 56 | 57 | virtual void reset(SdoSlaveInterface& /* sdo */) 58 | { 59 | } 60 | 61 | private: 62 | const uint16_t slave_index_; 63 | SdoInterfacePtr sdo_interface_; 64 | }; 65 | } // namespace march 66 | 67 | #endif // MARCH_HARDWARE_SLAVE_H 68 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/imotioncube/actuation_mode.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | 3 | #ifndef MARCH_HARDWARE_ACTUATION_MODE_H 4 | #define MARCH_HARDWARE_ACTUATION_MODE_H 5 | #include 6 | #include 7 | 8 | namespace march 9 | { 10 | class ActuationMode 11 | { 12 | public: 13 | enum Value : int 14 | { 15 | position, 16 | torque, 17 | unknown, 18 | }; 19 | 20 | ActuationMode() : value_(unknown) 21 | { 22 | } 23 | 24 | ActuationMode(Value value) : value_(value) 25 | { 26 | } 27 | 28 | explicit ActuationMode(const std::string& actuationMode) 29 | { 30 | if (actuationMode == "position") 31 | { 32 | this->value_ = position; 33 | } 34 | else if (actuationMode == "unknown") 35 | { 36 | this->value_ = unknown; 37 | } 38 | else if (actuationMode == "torque") 39 | { 40 | this->value_ = torque; 41 | } 42 | else 43 | { 44 | ROS_WARN("Actuation mode (%s) is not recognized, setting to unknown mode", actuationMode.c_str()); 45 | this->value_ = ActuationMode::unknown; 46 | } 47 | } 48 | 49 | uint8_t toModeNumber() 50 | { 51 | switch (this->value_) 52 | { 53 | case position: 54 | return 8; 55 | case torque: 56 | return 10; 57 | default: 58 | return 0; 59 | } 60 | } 61 | 62 | int getValue() const 63 | { 64 | return this->value_; 65 | } 66 | 67 | bool operator==(ActuationMode::Value a) const 68 | { 69 | return this->value_ == a; 70 | } 71 | 72 | bool operator!=(ActuationMode::Value a) const 73 | { 74 | return this->value_ != a; 75 | } 76 | 77 | std::string toString() const 78 | { 79 | switch (this->value_) 80 | { 81 | case position: 82 | return "position"; 83 | case torque: 84 | return "torque"; 85 | default: 86 | ROS_WARN("Actuationmode (%i) is neither 'torque' or 'position", this->value_); 87 | return "unknown"; 88 | } 89 | } 90 | 91 | private: 92 | Value value_ = unknown; 93 | }; 94 | } // namespace march 95 | 96 | #endif // MARCH_HARDWARE_ACTUATION_MODE_H 97 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/imotioncube/imotioncube_target_state.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | 3 | #ifndef MARCH_HARDWARE_IMOTIONCUBE_TARGET_STATE_H 4 | #define MARCH_HARDWARE_IMOTIONCUBE_TARGET_STATE_H 5 | 6 | #include 7 | namespace march 8 | { 9 | class IMotionCubeTargetState 10 | { 11 | public: 12 | static const IMotionCubeTargetState SWITCH_ON_DISABLED; 13 | static const IMotionCubeTargetState READY_TO_SWITCH_ON; 14 | static const IMotionCubeTargetState SWITCHED_ON; 15 | static const IMotionCubeTargetState OPERATION_ENABLED; 16 | 17 | private: 18 | ::std::string description; 19 | uint16_t controlWord; 20 | uint16_t stateMask; 21 | uint16_t state; 22 | 23 | private: 24 | IMotionCubeTargetState(const ::std::string& description, uint16_t controlWord, uint16_t stateMask, uint16_t state) 25 | : description(description), controlWord(controlWord), stateMask(stateMask), state(state) 26 | { 27 | } 28 | 29 | public: 30 | bool isReached(uint16_t statusWord) const 31 | { 32 | return (statusWord & stateMask) == state; 33 | } 34 | 35 | const std::string& getDescription() const 36 | { 37 | return this->description; 38 | } 39 | uint16_t getControlWord() const 40 | { 41 | return this->controlWord; 42 | } 43 | uint16_t getStateMask() const 44 | { 45 | return this->stateMask; 46 | } 47 | uint16_t getState() const 48 | { 49 | return this->state; 50 | } 51 | }; 52 | 53 | } // namespace march 54 | #endif // MARCH_HARDWARE_IMOTIONCUBE_TARGET_STATE_H 55 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/power/boot_shutdown_offsets.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #ifndef MARCH_HARDWARE_BOOT_SHUTDOWN_OFFSETS_H 3 | #define MARCH_HARDWARE_BOOT_SHUTDOWN_OFFSETS_H 4 | 5 | #include 6 | 7 | class BootShutdownOffsets 8 | { 9 | int masterOk; 10 | int shutdown; 11 | int shutdownAllowed; 12 | 13 | public: 14 | BootShutdownOffsets(int masterOkByteOffset, int shutdownByteOffset, int shutdownAllowedByteOffset) 15 | : masterOk(masterOkByteOffset), shutdown(shutdownByteOffset), shutdownAllowed(shutdownAllowedByteOffset) 16 | { 17 | if (masterOkByteOffset < 0 || shutdownByteOffset < 0 || shutdownAllowedByteOffset < 0) 18 | { 19 | ROS_ERROR("Negative byte offset not possible"); 20 | throw std::runtime_error("Negative byte offset not possible"); 21 | } 22 | } 23 | 24 | BootShutdownOffsets() 25 | { 26 | masterOk = -1; 27 | shutdown = -1; 28 | shutdownAllowed = -1; 29 | } 30 | 31 | int getMasterOkByteOffset() const 32 | { 33 | if (masterOk == -1) 34 | { 35 | ROS_FATAL("masterOkOffset is -1"); 36 | throw std::runtime_error("masterOkOffset is -1"); 37 | } 38 | return masterOk; 39 | } 40 | 41 | int getShutdownByteOffset() const 42 | { 43 | if (shutdown == -1) 44 | { 45 | ROS_FATAL("shutdownOffset is -1"); 46 | throw std::runtime_error("shutdownOffset is -1"); 47 | } 48 | return shutdown; 49 | } 50 | 51 | int getShutdownAllowedByteOffset() const 52 | { 53 | if (shutdownAllowed == -1) 54 | { 55 | ROS_FATAL("shutdownAllowedOffset is -1"); 56 | throw std::runtime_error("shutdownAllowedOffset is -1"); 57 | } 58 | return shutdownAllowed; 59 | } 60 | 61 | /** @brief Override comparison operator */ 62 | friend bool operator==(const BootShutdownOffsets& lhs, const BootShutdownOffsets& rhs) 63 | { 64 | return lhs.masterOk == rhs.masterOk && lhs.shutdown == rhs.shutdown && lhs.shutdownAllowed == rhs.shutdownAllowed; 65 | } 66 | 67 | /** @brief Override stream operator for clean printing */ 68 | friend ::std::ostream& operator<<(std::ostream& os, const BootShutdownOffsets& bootShutdownOffsets) 69 | { 70 | return os << "BootShutdownOffset(masterOk: " << bootShutdownOffsets.masterOk << ", " 71 | << "shutdown: " << bootShutdownOffsets.shutdown << ", " 72 | << "shutdownAllowed: " << bootShutdownOffsets.shutdownAllowed << ")"; 73 | } 74 | }; 75 | 76 | #endif // MARCH_HARDWARE_BOOT_SHUTDOWN_OFFSETS_H 77 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/power/high_voltage.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #ifndef MARCH_HARDWARE_HIGH_VOLTAGE_H 3 | #define MARCH_HARDWARE_HIGH_VOLTAGE_H 4 | #include "march_hardware/ethercat/pdo_interface.h" 5 | #include "net_driver_offsets.h" 6 | #include "net_monitor_offsets.h" 7 | 8 | #include 9 | #include 10 | 11 | namespace march 12 | { 13 | class HighVoltage 14 | { 15 | private: 16 | PdoSlaveInterface& pdo_; 17 | NetMonitorOffsets netMonitoringOffsets; 18 | NetDriverOffsets netDriverOffsets; 19 | 20 | uint8_t getNetsOperational(); 21 | 22 | public: 23 | HighVoltage(PdoSlaveInterface& pdo, NetMonitorOffsets netMonitoringOffsets, NetDriverOffsets netDriverOffsets); 24 | 25 | float getNetCurrent(); 26 | bool getNetOperational(int netNumber); 27 | bool getOvercurrentTrigger(int netNumber); 28 | bool getHighVoltageEnabled(); 29 | void setNetOnOff(bool on, int netNumber); 30 | void enableDisableHighVoltage(bool enable); 31 | 32 | /** @brief Override comparison operator */ 33 | friend bool operator==(const HighVoltage& lhs, const HighVoltage& rhs) 34 | { 35 | return lhs.netDriverOffsets == rhs.netDriverOffsets && lhs.netMonitoringOffsets == rhs.netMonitoringOffsets; 36 | } 37 | 38 | /** @brief Override stream operator for clean printing */ 39 | friend ::std::ostream& operator<<(std::ostream& os, const HighVoltage& highVoltage) 40 | { 41 | return os << "HighVoltage(netMonitoringOffsets: " << highVoltage.netMonitoringOffsets << ", " 42 | << "netDriverOffsets: " << highVoltage.netDriverOffsets << ")"; 43 | } 44 | }; 45 | 46 | } // namespace march 47 | #endif // MARCH_HARDWARE_HIGH_VOLTAGE_H 48 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/power/low_voltage.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #ifndef MARCH_HARDWARE_LOW_VOLTAGE_H 3 | #define MARCH_HARDWARE_LOW_VOLTAGE_H 4 | #include "march_hardware/ethercat/pdo_interface.h" 5 | #include "net_driver_offsets.h" 6 | #include "net_monitor_offsets.h" 7 | 8 | #include 9 | #include 10 | 11 | namespace march 12 | { 13 | class LowVoltage 14 | { 15 | private: 16 | PdoSlaveInterface& pdo_; 17 | NetMonitorOffsets netMonitoringOffsets; 18 | NetDriverOffsets netDriverOffsets; 19 | 20 | uint8_t getNetsOperational(); 21 | 22 | public: 23 | LowVoltage(PdoSlaveInterface& pdo, NetMonitorOffsets netMonitoringOffsets, NetDriverOffsets netDriverOffsets); 24 | 25 | float getNetCurrent(int netNumber); 26 | bool getNetOperational(int netNumber); 27 | void setNetOnOff(bool on, int netNumber); 28 | 29 | /** @brief Override comparison operator */ 30 | friend bool operator==(const LowVoltage& lhs, const LowVoltage& rhs) 31 | { 32 | return lhs.netDriverOffsets == rhs.netDriverOffsets && lhs.netMonitoringOffsets == rhs.netMonitoringOffsets; 33 | } 34 | 35 | /** @brief Override stream operator for clean printing */ 36 | friend ::std::ostream& operator<<(std::ostream& os, const LowVoltage& lowVoltage) 37 | { 38 | return os << "LowVoltage(netMonitoringOffsets: " << lowVoltage.netMonitoringOffsets << ", " 39 | << "netDriverOffsets: " << lowVoltage.netDriverOffsets << ")"; 40 | } 41 | }; 42 | 43 | } // namespace march 44 | #endif // MARCH_HARDWARE_LOW_VOLTAGE_H 45 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/power/power_distribution_board.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #ifndef MARCH_HARDWARE_POWER_DISTRIBUTION_BOARD_H 3 | #define MARCH_HARDWARE_POWER_DISTRIBUTION_BOARD_H 4 | #include "boot_shutdown_offsets.h" 5 | #include "march_hardware/ethercat/slave.h" 6 | #include "high_voltage.h" 7 | #include "low_voltage.h" 8 | #include "net_driver_offsets.h" 9 | #include "net_monitor_offsets.h" 10 | 11 | namespace march 12 | { 13 | class PowerDistributionBoard : public Slave 14 | { 15 | private: 16 | NetMonitorOffsets netMonitoringOffsets; 17 | NetDriverOffsets netDriverOffsets; 18 | BootShutdownOffsets bootShutdownOffsets; 19 | HighVoltage highVoltage; 20 | LowVoltage lowVoltage; 21 | bool masterOnlineToggle; 22 | 23 | public: 24 | PowerDistributionBoard(const Slave& slave, NetMonitorOffsets netMonitoringOffsets, NetDriverOffsets netDriverOffsets, 25 | BootShutdownOffsets bootShutdownOffsets); 26 | 27 | float getPowerDistributionBoardCurrent(); 28 | bool getMasterShutdownRequested(); 29 | void setMasterOnline(); 30 | void setMasterShutDownAllowed(bool isAllowed); 31 | 32 | HighVoltage getHighVoltage(); 33 | LowVoltage getLowVoltage(); 34 | 35 | /** @brief Override comparison operator */ 36 | friend bool operator==(const PowerDistributionBoard& lhs, const PowerDistributionBoard& rhs) 37 | { 38 | return lhs.getSlaveIndex() == rhs.getSlaveIndex() && lhs.netMonitoringOffsets == rhs.netMonitoringOffsets && 39 | lhs.netDriverOffsets == rhs.netDriverOffsets && lhs.lowVoltage == rhs.lowVoltage && 40 | lhs.highVoltage == rhs.highVoltage; 41 | } 42 | /** @brief Override stream operator for clean printing */ 43 | friend ::std::ostream& operator<<(std::ostream& os, const PowerDistributionBoard& powerDistributionBoard) 44 | { 45 | return os << "PowerDistributionBoard(slaveIndex: " << powerDistributionBoard.getSlaveIndex() << ", " 46 | << "masterOnlineToggle: " << powerDistributionBoard.masterOnlineToggle << ", " 47 | << powerDistributionBoard.highVoltage << ", " << powerDistributionBoard.lowVoltage << ")"; 48 | } 49 | }; 50 | } // namespace march 51 | #endif // MARCH_HARDWARE_POWER_DISTRIBUTION_BOARD_H 52 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/temperature/temperature_ges.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #ifndef MARCH_HARDWARE_TEMPERATURE_GES_H 3 | #define MARCH_HARDWARE_TEMPERATURE_GES_H 4 | #include "march_hardware/ethercat/slave.h" 5 | #include "temperature_sensor.h" 6 | 7 | #include 8 | 9 | namespace march 10 | { 11 | class TemperatureGES : public Slave, TemperatureSensor 12 | { 13 | public: 14 | TemperatureGES(const Slave& slave, uint8_t byte_offset); 15 | 16 | ~TemperatureGES() noexcept override = default; 17 | 18 | float getTemperature() const override; 19 | 20 | /** @brief Override comparison operator */ 21 | friend bool operator==(const TemperatureGES& lhs, const TemperatureGES& rhs) 22 | { 23 | return lhs.getSlaveIndex() == rhs.getSlaveIndex() && lhs.temperature_byte_offset_ == rhs.temperature_byte_offset_; 24 | } 25 | /** @brief Override stream operator for clean printing */ 26 | friend ::std::ostream& operator<<(std::ostream& os, const TemperatureGES& temperatureGes) 27 | { 28 | return os << "slaveIndex: " << temperatureGes.getSlaveIndex() << ", " 29 | << "temperatureByteOffset: " << temperatureGes.temperature_byte_offset_; 30 | } 31 | 32 | private: 33 | const uint8_t temperature_byte_offset_; 34 | }; 35 | } // namespace march 36 | #endif // MARCH_HARDWARE_TEMPERATURE_GES_H 37 | -------------------------------------------------------------------------------- /march_hardware/include/march_hardware/temperature/temperature_sensor.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #ifndef MARCH_HARDWARE_TEMPERATURE_SENSOR_H 3 | #define MARCH_HARDWARE_TEMPERATURE_SENSOR_H 4 | 5 | namespace march 6 | { 7 | class TemperatureSensor 8 | { 9 | public: 10 | virtual ~TemperatureSensor() noexcept = default; 11 | 12 | virtual float getTemperature() const = 0; 13 | }; 14 | } // namespace march 15 | 16 | #endif // MARCH_HARDWARE_TEMPERATURE_SENSOR_H 17 | -------------------------------------------------------------------------------- /march_hardware/launch/slave_count.launch: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /march_hardware/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | march_hardware 5 | 0.0.0 6 | 7 | Communicates with the March4 hardware. 8 | 9 | 10 | Project March 11 | 12 | TODO 13 | 14 | catkin 15 | 16 | roscpp 17 | soem 18 | urdf 19 | 20 | rosunit 21 | code_coverage 22 | 23 | -------------------------------------------------------------------------------- /march_hardware/src/encoder/encoder.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #include "march_hardware/encoder/encoder.h" 3 | #include "march_hardware/ethercat/pdo_types.h" 4 | #include "march_hardware/error/hardware_exception.h" 5 | 6 | namespace march 7 | { 8 | Encoder::Encoder(size_t number_of_bits) : total_positions_(Encoder::calculateTotalPositions(number_of_bits)) 9 | { 10 | } 11 | 12 | int32_t Encoder::getAngleIU(const PdoSlaveInterface& pdo, uint8_t byte_offset) const 13 | { 14 | bit32 return_byte = pdo.read32(byte_offset); 15 | return return_byte.i; 16 | } 17 | 18 | double Encoder::getAngleRad(const PdoSlaveInterface& pdo, uint8_t byte_offset) const 19 | { 20 | return this->toRad(this->getAngleIU(pdo, byte_offset)); 21 | } 22 | 23 | double Encoder::getVelocityIU(const PdoSlaveInterface& pdo, uint8_t byte_offset) const 24 | { 25 | bit32 return_byte = pdo.read32(byte_offset); 26 | return return_byte.i / (TIME_PER_VELOCITY_SAMPLE * FIXED_POINT_TO_FLOAT_CONVERSION); 27 | } 28 | 29 | double Encoder::getVelocityRad(const PdoSlaveInterface& pdo, uint8_t byte_offset) const 30 | { 31 | return this->getVelocityIU(pdo, byte_offset) * this->getRadPerBit(); 32 | } 33 | 34 | size_t Encoder::getTotalPositions() const 35 | { 36 | return this->total_positions_; 37 | } 38 | 39 | size_t Encoder::calculateTotalPositions(size_t number_of_bits) 40 | { 41 | if (number_of_bits < Encoder::MIN_RESOLUTION || number_of_bits > Encoder::MAX_RESOLUTION) 42 | { 43 | throw error::HardwareException(error::ErrorType::INVALID_ENCODER_RESOLUTION, 44 | "Encoder resolution of %d is not within range [%ld, %ld]", number_of_bits, 45 | Encoder::MIN_RESOLUTION, Encoder::MAX_RESOLUTION); 46 | } 47 | return 1u << number_of_bits; 48 | } 49 | 50 | } // namespace march 51 | -------------------------------------------------------------------------------- /march_hardware/src/encoder/incremental_encoder.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #include "march_hardware/encoder/incremental_encoder.h" 3 | 4 | namespace march 5 | { 6 | IncrementalEncoder::IncrementalEncoder(size_t number_of_bits, double transmission) 7 | : Encoder(number_of_bits), transmission_(transmission) 8 | { 9 | } 10 | 11 | double IncrementalEncoder::toRad(int32_t iu) const 12 | { 13 | return iu * this->getRadPerBit(); 14 | } 15 | 16 | double IncrementalEncoder::getRadPerBit() const 17 | { 18 | return PI_2 / (this->getTotalPositions() * this->transmission_); 19 | } 20 | 21 | double IncrementalEncoder::getTransmission() const 22 | { 23 | return this->transmission_; 24 | } 25 | } // namespace march 26 | -------------------------------------------------------------------------------- /march_hardware/src/error/motion_error.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Project March. 2 | #include "march_hardware/error/motion_error.h" 3 | 4 | namespace march 5 | { 6 | namespace error 7 | { 8 | const char* MOTION_ERRORS[MOTION_ERRORS_SIZE] = { 9 | "EtherCAT communication error. ", 10 | "Short-circuit. ", 11 | "Invalid setup (EEPROM) data. ", 12 | "Control error (position/speed error too big). ", 13 | "Communication error. ", 14 | "Motor position wraps around. ", 15 | "Positive limit switch. ", 16 | "Negative limit switch. ", 17 | "Over-current. ", 18 | "I2T protection. ", 19 | "Over-temperature motor. ", 20 | "Over-temperature drive. ", 21 | "Over-voltage. ", 22 | "Under-voltage. ", 23 | "Command error. ", 24 | "Drive disabled (Emergency button connector not shorted). ", 25 | }; 26 | 27 | const char* DETAILED_MOTION_ERRORS[DETAILED_MOTION_ERRORS_SIZE] = { 28 | "TML stack overflow. ", 29 | "TML stack underflow. ", 30 | "Homing not available. ", 31 | "Function not available. ", 32 | "UPD ignored. ", 33 | "Cancelable call ignored. ", 34 | "Positive software limit switch is active. ", 35 | "Negative software limit switch is active. ", 36 | "Invalid S-curve profile. ", 37 | }; 38 | 39 | const char* SECOND_DETAILED_MOTION_ERRORS[SECOND_DETAILED_MOTION_ERROR_SIZE] = { 40 | "BiSS data CRC error. ", 41 | "BiSS data warning bit is set. ", 42 | "BiSS data error bit is set. ", 43 | "BiSS sensor missing. ", 44 | "Absolute Encoder Interface (AEI) interface error. ", 45 | "Hall sensor missing. ", 46 | "Position wraparound. The position 2^31 was exceeded. ", 47 | }; 48 | 49 | std::string parseError(uint16_t error, ErrorRegisters error_register) 50 | { 51 | std::string description; 52 | const std::bitset<16> bitset(error); 53 | 54 | for (size_t i = 0; i < 16; i++) 55 | { 56 | if (bitset.test(i)) 57 | { 58 | switch (error_register) 59 | { 60 | case ErrorRegisters::MOTION_ERROR: 61 | description += MOTION_ERRORS[i]; 62 | break; 63 | case ErrorRegisters::DETAILED_ERROR: 64 | description += DETAILED_MOTION_ERRORS[i]; 65 | break; 66 | case ErrorRegisters::SECOND_DETAILED_ERROR: 67 | description += SECOND_DETAILED_MOTION_ERRORS[i]; 68 | break; 69 | default: 70 | break; 71 | } 72 | } 73 | } 74 | return description; 75 | } 76 | } // namespace error 77 | } // namespace march 78 | -------------------------------------------------------------------------------- /march_hardware/src/ethercat/pdo_interface.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #include "march_hardware/ethercat/pdo_interface.h" 3 | #include "march_hardware/ethercat/pdo_types.h" 4 | 5 | #include 6 | 7 | #include 8 | 9 | namespace march 10 | { 11 | void PdoInterfaceImpl::write8(uint16_t slave_index, uint8_t module_index, bit8 value) 12 | { 13 | uint8_t* data_ptr = ec_slave[slave_index].outputs + module_index; 14 | 15 | *data_ptr = value.b0; 16 | } 17 | 18 | void PdoInterfaceImpl::write16(uint16_t slave_index, uint8_t module_index, bit16 value) 19 | { 20 | uint8_t* data_ptr = ec_slave[slave_index].outputs + module_index; 21 | 22 | *(data_ptr++) = value.p.b0; 23 | *data_ptr = value.p.b1; 24 | } 25 | 26 | void PdoInterfaceImpl::write32(uint16_t slave_index, uint8_t module_index, bit32 value) 27 | { 28 | uint8_t* data_ptr = ec_slave[slave_index].outputs + module_index; 29 | 30 | *(data_ptr++) = value.p.b0; 31 | *(data_ptr++) = value.p.b1; 32 | *(data_ptr++) = value.p.b2; 33 | *data_ptr = value.p.b3; 34 | } 35 | 36 | bit8 PdoInterfaceImpl::read8(uint16_t slave_index, uint8_t module_index) const 37 | { 38 | const uint8_t* data_ptr = ec_slave[slave_index].inputs + module_index; 39 | 40 | bit8 return_value; 41 | return_value.b0 = *data_ptr; 42 | 43 | return return_value; 44 | } 45 | 46 | bit16 PdoInterfaceImpl::read16(uint16_t slave_index, uint8_t module_index) const 47 | { 48 | const uint8_t* data_ptr = ec_slave[slave_index].inputs + module_index; 49 | 50 | bit16 result; 51 | result.p.b0 = *(data_ptr++); 52 | result.p.b1 = *data_ptr; 53 | 54 | return result; 55 | } 56 | 57 | bit32 PdoInterfaceImpl::read32(uint16_t slave_index, uint8_t module_index) const 58 | { 59 | const uint8_t* data_ptr = ec_slave[slave_index].inputs + module_index; 60 | 61 | bit32 return_value; 62 | return_value.p.b0 = *(data_ptr++); 63 | return_value.p.b1 = *(data_ptr++); 64 | return_value.p.b2 = *(data_ptr++); 65 | return_value.p.b3 = *data_ptr; 66 | 67 | return return_value; 68 | } 69 | } // namespace march 70 | -------------------------------------------------------------------------------- /march_hardware/src/ethercat/sdo_interface.cpp: -------------------------------------------------------------------------------- 1 | #include "march_hardware/ethercat/sdo_interface.h" 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | namespace march 9 | { 10 | int SdoInterfaceImpl::write(uint16_t slave, uint16_t index, uint8_t sub, std::size_t size, void* value) 11 | { 12 | ROS_DEBUG("sdo_write: slave %i, reg 0x%X, sub index %i", slave, index, sub); 13 | const int working_counter = ec_SDOwrite(slave, index, sub, FALSE, size, value, EC_TIMEOUTRXM); 14 | if (working_counter == 0) 15 | { 16 | ROS_FATAL("sdo_write: Error occurred when writing: slave %i, reg 0x%X, sub index %i", slave, index, sub); 17 | } 18 | return working_counter; 19 | } 20 | 21 | int SdoInterfaceImpl::read(uint16_t slave, uint16_t index, uint8_t sub, int& val_size, void* value) const 22 | { 23 | ROS_DEBUG("sdo_read: slave %i, reg 0x%X, sub index %i", slave, index, sub); 24 | const int working_counter = ec_SDOread(slave, index, sub, FALSE, &val_size, value, EC_TIMEOUTRXM); 25 | if (working_counter == 0) 26 | { 27 | ROS_FATAL("sdo_read: Error occurred when reading: slave %i, reg 0x%X, sub index %i", slave, index, sub); 28 | } 29 | return working_counter; 30 | } 31 | } // namespace march 32 | -------------------------------------------------------------------------------- /march_hardware/src/imotioncube/imotioncube_target_state.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | 3 | #include 4 | 5 | namespace march 6 | { 7 | const IMotionCubeTargetState IMotionCubeTargetState::SWITCH_ON_DISABLED = 8 | IMotionCubeTargetState("Switch on Disabled", 128, 0b0000000001001111, 64); 9 | const IMotionCubeTargetState IMotionCubeTargetState::READY_TO_SWITCH_ON = 10 | IMotionCubeTargetState("Ready to Switch On", 6, 0b0000000001101111, 33); 11 | const IMotionCubeTargetState IMotionCubeTargetState::SWITCHED_ON = 12 | IMotionCubeTargetState("Switched On", 7, 0b0000000001101111, 35); 13 | const IMotionCubeTargetState IMotionCubeTargetState::OPERATION_ENABLED = 14 | IMotionCubeTargetState("Operation Enabled", 15, 0b0000000001101111, 39); 15 | } // namespace march 16 | -------------------------------------------------------------------------------- /march_hardware/src/power/low_voltage.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #include "march_hardware/power/low_voltage.h" 3 | #include "march_hardware/ethercat/pdo_interface.h" 4 | #include "march_hardware/ethercat/pdo_types.h" 5 | 6 | namespace march 7 | { 8 | LowVoltage::LowVoltage(PdoSlaveInterface& pdo, NetMonitorOffsets netMonitoringOffsets, 9 | NetDriverOffsets netDriverOffsets) 10 | : pdo_(pdo), netMonitoringOffsets(netMonitoringOffsets), netDriverOffsets(netDriverOffsets) 11 | { 12 | } 13 | 14 | float LowVoltage::getNetCurrent(int netNumber) 15 | { 16 | bit32 current = this->pdo_.read32(this->netMonitoringOffsets.getLowVoltageNetCurrent(netNumber)); 17 | return current.f; 18 | } 19 | 20 | bool LowVoltage::getNetOperational(int netNumber) 21 | { 22 | if (netNumber < 1 || netNumber > 2) 23 | { 24 | ROS_ERROR_THROTTLE(2, "Can't get operational state from low voltage net %d, there are only 2 low voltage nets", 25 | netNumber); 26 | throw std::invalid_argument("Only low voltage net 1 and 2 exist"); 27 | } 28 | bit8 operational = this->pdo_.read8(this->netMonitoringOffsets.getLowVoltageState()); 29 | // The last bit of the 8 bits represents net 1 30 | // The second to last bit of the 8 bits represents net 2 31 | return ((operational.ui >> (netNumber - 1)) & 1); 32 | } 33 | 34 | void LowVoltage::setNetOnOff(bool /* on */, int /* netNumber */) 35 | { 36 | ROS_ERROR_THROTTLE(2, "Can't control low voltage nets from master"); 37 | } 38 | 39 | uint8_t LowVoltage::getNetsOperational() 40 | { 41 | bit8 operational = this->pdo_.read8(this->netMonitoringOffsets.getLowVoltageState()); 42 | return operational.ui; 43 | } 44 | 45 | } // namespace march 46 | -------------------------------------------------------------------------------- /march_hardware/src/power/power_distribution_board.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #include "march_hardware/power/power_distribution_board.h" 3 | #include "march_hardware/ethercat/pdo_types.h" 4 | 5 | namespace march 6 | { 7 | PowerDistributionBoard::PowerDistributionBoard(const Slave& slave, NetMonitorOffsets netMonitoringOffsets, 8 | NetDriverOffsets netDriverOffsets, 9 | BootShutdownOffsets bootShutdownOffsets) 10 | : Slave(slave) 11 | , netMonitoringOffsets(netMonitoringOffsets) 12 | , netDriverOffsets(netDriverOffsets) 13 | , bootShutdownOffsets(bootShutdownOffsets) 14 | , highVoltage(*this, netMonitoringOffsets, netDriverOffsets) 15 | , lowVoltage(*this, netMonitoringOffsets, netDriverOffsets) 16 | , masterOnlineToggle(false) 17 | { 18 | } 19 | 20 | float PowerDistributionBoard::getPowerDistributionBoardCurrent() 21 | { 22 | bit32 current = this->read32(this->netMonitoringOffsets.getPowerDistributionBoardCurrent()); 23 | return current.f; 24 | } 25 | 26 | void PowerDistributionBoard::setMasterOnline() 27 | { 28 | bit8 isOkBit; 29 | // By continuously flipping the master online toggle we let the pdb know we are still connected. 30 | this->masterOnlineToggle = !this->masterOnlineToggle; 31 | isOkBit.ui = this->masterOnlineToggle; 32 | this->write8(this->bootShutdownOffsets.getMasterOkByteOffset(), isOkBit); 33 | } 34 | 35 | void PowerDistributionBoard::setMasterShutDownAllowed(bool isAllowed) 36 | { 37 | bit8 isAllowedBit; 38 | isAllowedBit.ui = isAllowed; 39 | this->write8(this->bootShutdownOffsets.getShutdownAllowedByteOffset(), isAllowedBit); 40 | } 41 | 42 | bool PowerDistributionBoard::getMasterShutdownRequested() 43 | { 44 | bit8 masterShutdownRequestedBit = this->read8(this->bootShutdownOffsets.getShutdownByteOffset()); 45 | return masterShutdownRequestedBit.ui; 46 | } 47 | 48 | HighVoltage PowerDistributionBoard::getHighVoltage() 49 | { 50 | return highVoltage; 51 | } 52 | 53 | LowVoltage PowerDistributionBoard::getLowVoltage() 54 | { 55 | return lowVoltage; 56 | } 57 | 58 | } // namespace march 59 | -------------------------------------------------------------------------------- /march_hardware/src/temperature/temperature_ges.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #include "march_hardware/ethercat/pdo_types.h" 3 | #include "march_hardware/temperature/temperature_ges.h" 4 | 5 | namespace march 6 | { 7 | TemperatureGES::TemperatureGES(const Slave& slave, uint8_t byte_offset) 8 | : Slave(slave), temperature_byte_offset_(byte_offset) 9 | { 10 | } 11 | 12 | float TemperatureGES::getTemperature() const 13 | { 14 | bit32 temperature = this->read32(this->temperature_byte_offset_); 15 | return temperature.f; 16 | } 17 | } // namespace march 18 | -------------------------------------------------------------------------------- /march_hardware/test/encoder/encoder_test.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Project March. 2 | #include "../mocks/mock_encoder.h" 3 | #include "../mocks/mock_pdo_interface.h" 4 | #include "march_hardware/error/hardware_exception.h" 5 | 6 | #include 7 | 8 | #include 9 | #include 10 | 11 | using testing::Eq; 12 | using testing::Return; 13 | 14 | /** 15 | * This test fixture uses the MockEncoder to test non virtual methods 16 | * of the Encoder abstract class. Otherwise it is not possible to 17 | * instantiate a pure abstract class. So as long as the non virtual 18 | * methods are tested all is ok. 19 | */ 20 | class EncoderTest : public testing::Test 21 | { 22 | protected: 23 | const uint16_t slave_index = 1; 24 | const size_t resolution = 12; 25 | }; 26 | 27 | TEST_F(EncoderTest, ResolutionBelowRange) 28 | { 29 | ASSERT_THROW(MockEncoder(0), march::error::HardwareException); 30 | } 31 | 32 | TEST_F(EncoderTest, ResolutionAboveRange) 33 | { 34 | ASSERT_THROW(MockEncoder(50), march::error::HardwareException); 35 | } 36 | 37 | TEST_F(EncoderTest, GetAngleIU) 38 | { 39 | MockEncoder encoder(this->resolution); 40 | const int32_t expected = 101; 41 | const uint8_t expected_offset = 4; 42 | march::bit32 result; 43 | result.i = expected; 44 | MockPdoInterfacePtr mock_pdo = std::make_shared(); 45 | march::PdoSlaveInterface pdo(this->slave_index, mock_pdo); 46 | 47 | EXPECT_CALL(*mock_pdo, read32(this->slave_index, Eq(expected_offset))).WillOnce(Return(result)); 48 | 49 | ASSERT_EQ(expected, encoder.getAngleIU(pdo, expected_offset)); 50 | } 51 | 52 | TEST_F(EncoderTest, CorrectTotalPositions) 53 | { 54 | MockEncoder encoder(this->resolution); 55 | ASSERT_EQ(std::pow(2, this->resolution), encoder.getTotalPositions()); 56 | } 57 | -------------------------------------------------------------------------------- /march_hardware/test/encoder/incremental_encoder_test.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Project March. 2 | #include "march_hardware/encoder/incremental_encoder.h" 3 | 4 | #include 5 | 6 | #include 7 | 8 | class IncrementalEncoderTest : public testing::Test 9 | { 10 | protected: 11 | const size_t resolution = 12; 12 | const double transmission = 100; 13 | march::IncrementalEncoder encoder = march::IncrementalEncoder(this->resolution, this->transmission); 14 | }; 15 | 16 | TEST_F(IncrementalEncoderTest, ZeroIUToRad) 17 | { 18 | ASSERT_EQ(0.0, this->encoder.toRad(0)); 19 | } 20 | 21 | TEST_F(IncrementalEncoderTest, CorrectToRad) 22 | { 23 | const int32_t iu = 1000; 24 | const double expected = iu * 2.0 * M_PI / (std::pow(2, this->resolution) * this->transmission); 25 | ASSERT_DOUBLE_EQ(expected, this->encoder.toRad(iu)); 26 | } 27 | -------------------------------------------------------------------------------- /march_hardware/test/error/hardware_exception_test.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Project March. 2 | #include 3 | 4 | #include 5 | 6 | using march::error::ErrorType; 7 | using march::error::HardwareException; 8 | 9 | TEST(HardwareExceptionTest, TestErrorType) 10 | { 11 | ErrorType expected = ErrorType::UNKNOWN; 12 | HardwareException exception(expected); 13 | 14 | ASSERT_EQ(exception.type(), expected); 15 | } 16 | 17 | TEST(HardwareExceptionTest, TestNoMessage) 18 | { 19 | ErrorType expected = ErrorType::UNKNOWN; 20 | HardwareException exception(expected); 21 | 22 | std::stringstream expected_ss; 23 | expected_ss << expected; 24 | 25 | std::stringstream ss; 26 | ss << exception; 27 | 28 | ASSERT_EQ(ss.str(), expected_ss.str()); 29 | } 30 | 31 | TEST(HardwareExceptionTest, TestWhat) 32 | { 33 | ErrorType expected = ErrorType::UNKNOWN; 34 | const std::string message = "test"; 35 | HardwareException exception(expected, message); 36 | 37 | std::stringstream expected_ss; 38 | expected_ss << expected << std::endl << message; 39 | 40 | ASSERT_EQ(expected_ss.str(), std::string(exception.what())); 41 | } 42 | 43 | TEST(HardwareExceptionTest, TestMessage) 44 | { 45 | ErrorType expected = ErrorType::UNKNOWN; 46 | std::string message = "message"; 47 | HardwareException exception(expected, message); 48 | 49 | std::stringstream expected_ss; 50 | expected_ss << expected << std::endl << message; 51 | 52 | std::stringstream ss; 53 | ss << exception; 54 | 55 | ASSERT_EQ(ss.str(), expected_ss.str()); 56 | } 57 | 58 | TEST(HardwareExceptionTest, TestFormat) 59 | { 60 | ErrorType expected = ErrorType::UNKNOWN; 61 | std::string string = "string"; 62 | const int number = -1; 63 | HardwareException exception(expected, "%s %d", string.c_str(), number); 64 | 65 | std::stringstream expected_ss; 66 | expected_ss << expected << std::endl << string << " " << number; 67 | 68 | std::stringstream ss; 69 | ss << exception; 70 | 71 | ASSERT_EQ(ss.str(), expected_ss.str()); 72 | } 73 | -------------------------------------------------------------------------------- /march_hardware/test/ethercat/slave_test.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Project March. 2 | #include "../mocks/mock_pdo_interface.h" 3 | #include "../mocks/mock_sdo_interface.h" 4 | #include "march_hardware/ethercat/slave.h" 5 | #include "march_hardware/error/hardware_exception.h" 6 | 7 | #include 8 | 9 | #include 10 | 11 | class SlaveTest : public testing::Test 12 | { 13 | protected: 14 | MockPdoInterfacePtr mock_pdo = std::make_shared(); 15 | MockSdoInterfacePtr mock_sdo = std::make_shared(); 16 | }; 17 | 18 | TEST_F(SlaveTest, CorrectSlaveIndex) 19 | { 20 | march::Slave slave(1, this->mock_pdo, this->mock_sdo); 21 | ASSERT_EQ(slave.getSlaveIndex(), 1); 22 | } 23 | 24 | TEST_F(SlaveTest, NoPdoInterface) 25 | { 26 | ASSERT_THROW(march::Slave(1, nullptr, this->mock_sdo), std::invalid_argument); 27 | } 28 | 29 | TEST_F(SlaveTest, NoSdoInterface) 30 | { 31 | ASSERT_THROW(march::Slave(1, this->mock_pdo, nullptr), std::invalid_argument); 32 | } 33 | 34 | TEST_F(SlaveTest, InvalidSlaveIndex) 35 | { 36 | ASSERT_THROW(march::Slave(0, this->mock_pdo, this->mock_sdo), march::error::HardwareException); 37 | } 38 | -------------------------------------------------------------------------------- /march_hardware/test/mocks/mock_absolute_encoder.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "march_hardware/encoder/absolute_encoder.h" 3 | 4 | #include 5 | 6 | class MockAbsoluteEncoder : public march::AbsoluteEncoder 7 | { 8 | public: 9 | MockAbsoluteEncoder() : AbsoluteEncoder(10, 0, 162, 0, 1, 0.1, 0.9) 10 | { 11 | } 12 | 13 | MOCK_METHOD0(getAngleIU, int32_t()); 14 | MOCK_METHOD0(getAngleRad, double()); 15 | }; 16 | -------------------------------------------------------------------------------- /march_hardware/test/mocks/mock_encoder.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "march_hardware/encoder/encoder.h" 3 | 4 | #include 5 | 6 | class MockEncoder : public march::Encoder 7 | { 8 | public: 9 | explicit MockEncoder(size_t number_of_bits) : Encoder(number_of_bits) 10 | { 11 | } 12 | 13 | MOCK_CONST_METHOD1(toRad, double(int32_t)); 14 | 15 | MOCK_CONST_METHOD0(getRadPerBit, double()); 16 | }; 17 | -------------------------------------------------------------------------------- /march_hardware/test/mocks/mock_imotioncube.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "mock_absolute_encoder.h" 3 | #include "mock_incremental_encoder.h" 4 | #include "mock_slave.h" 5 | 6 | #include "march_hardware/imotioncube/imotioncube.h" 7 | #include "march_hardware/ethercat/sdo_interface.h" 8 | 9 | #include 10 | 11 | #include 12 | 13 | class MockIMotionCube : public march::IMotionCube 14 | { 15 | public: 16 | MockIMotionCube() 17 | : IMotionCube(MockSlave(), std::make_unique(), std::make_unique(), 18 | march::ActuationMode::unknown) 19 | { 20 | } 21 | 22 | MOCK_METHOD0(goToOperationEnabled, void()); 23 | 24 | MOCK_METHOD0(getAngleRadIncremental, double()); 25 | MOCK_METHOD0(getAngleRadAbsolute, double()); 26 | 27 | MOCK_METHOD0(getVelocityRadIncremental, double()); 28 | MOCK_METHOD0(getVelocityRadAbsolute, double()); 29 | 30 | MOCK_METHOD0(getIMCVoltage, float()); 31 | MOCK_METHOD0(getMotorVoltage, float()); 32 | MOCK_METHOD0(getMotorCurrent, float()); 33 | 34 | MOCK_METHOD1(actuateRad, void(double)); 35 | MOCK_METHOD1(actuateTorque, void(int16_t)); 36 | 37 | MOCK_METHOD2(initSdo, bool(march::SdoSlaveInterface& sdo, int cycle_time)); 38 | MOCK_METHOD1(reset, void(march::SdoSlaveInterface&)); 39 | }; 40 | -------------------------------------------------------------------------------- /march_hardware/test/mocks/mock_incremental_encoder.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "march_hardware/encoder/incremental_encoder.h" 3 | 4 | #include 5 | 6 | class MockIncrementalEncoder : public march::IncrementalEncoder 7 | { 8 | public: 9 | MockIncrementalEncoder() : IncrementalEncoder(10, 100.0) 10 | { 11 | } 12 | 13 | MOCK_METHOD0(getAngleIU, int32_t()); 14 | MOCK_METHOD0(getAngleRad, double()); 15 | }; 16 | -------------------------------------------------------------------------------- /march_hardware/test/mocks/mock_joint.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "gmock/gmock.h" // Brings in Google Mock. 3 | #include "march_hardware/joint.h" 4 | 5 | class MockJoint : public march::Joint 6 | { 7 | public: 8 | MOCK_METHOD0(getAngle, float()); 9 | MOCK_METHOD0(getTemperature, float()); 10 | MOCK_METHOD0(getTemperatureGESSlaveIndex, int()); 11 | MOCK_METHOD0(getIMotionCubeSlaveIndex, int()); 12 | MOCK_METHOD0(hasIMotionCube, bool()); 13 | MOCK_METHOD0(hasTemperatureGES, bool()); 14 | 15 | MOCK_METHOD1(hasTemperatureGES, void(double effort)); 16 | }; 17 | -------------------------------------------------------------------------------- /march_hardware/test/mocks/mock_pdo_interface.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "march_hardware/ethercat/pdo_interface.h" 3 | #include "march_hardware/ethercat/pdo_types.h" 4 | 5 | #include 6 | 7 | #include 8 | 9 | class MockPdoInterface : public march::PdoInterface 10 | { 11 | public: 12 | MockPdoInterface() = default; 13 | 14 | MOCK_METHOD3(write8, void(uint16_t, uint8_t, march::bit8)); 15 | MOCK_METHOD3(write16, void(uint16_t, uint8_t, march::bit16)); 16 | MOCK_METHOD3(write32, void(uint16_t, uint8_t, march::bit32)); 17 | 18 | MOCK_CONST_METHOD2(read8, march::bit8(uint16_t, uint8_t)); 19 | MOCK_CONST_METHOD2(read16, march::bit16(uint16_t, uint8_t)); 20 | MOCK_CONST_METHOD2(read32, march::bit32(uint16_t, uint8_t)); 21 | }; 22 | 23 | using MockPdoInterfacePtr = std::shared_ptr; 24 | -------------------------------------------------------------------------------- /march_hardware/test/mocks/mock_sdo_interface.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "march_hardware/ethercat/sdo_interface.h" 3 | 4 | #include 5 | 6 | #include 7 | 8 | class MockSdoInterface : public march::SdoInterface 9 | { 10 | public: 11 | MockSdoInterface() = default; 12 | 13 | protected: 14 | MOCK_METHOD5(write, int(uint16_t, uint16_t, uint8_t, std::size_t, void*)); 15 | 16 | MOCK_CONST_METHOD5(read, int(uint16_t, uint16_t, uint8_t, int&, void*)); 17 | }; 18 | 19 | using MockSdoInterfacePtr = std::shared_ptr; 20 | -------------------------------------------------------------------------------- /march_hardware/test/mocks/mock_slave.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "mock_pdo_interface.h" 3 | #include "mock_sdo_interface.h" 4 | 5 | #include "march_hardware/ethercat/slave.h" 6 | 7 | #include 8 | 9 | class MockSlave : public march::Slave 10 | { 11 | public: 12 | MockSlave() : Slave(1, std::make_shared(), std::make_shared()){}; 13 | MockSlave(MockPdoInterfacePtr mock_pdo, MockSdoInterfacePtr mock_sdo) : Slave(1, mock_pdo, mock_sdo){}; 14 | }; 15 | -------------------------------------------------------------------------------- /march_hardware/test/mocks/mock_temperature_ges.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "mock_slave.h" 3 | 4 | #include "march_hardware/temperature/temperature_ges.h" 5 | 6 | #include 7 | 8 | class MockTemperatureGES : public march::TemperatureGES 9 | { 10 | public: 11 | MockTemperatureGES() : TemperatureGES(MockSlave(), 0) 12 | { 13 | } 14 | 15 | MOCK_CONST_METHOD0(getTemperature, float()); 16 | 17 | MOCK_METHOD2(initSdo, bool(march::SdoSlaveInterface& sdo, int cycle_time)); 18 | }; 19 | -------------------------------------------------------------------------------- /march_hardware/test/power/high_voltage_test.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2018 Project March. 2 | #include "../mocks/mock_pdo_interface.h" 3 | #include "march_hardware/power/high_voltage.h" 4 | 5 | #include 6 | #include 7 | 8 | class HighVoltageTest : public ::testing::Test 9 | { 10 | protected: 11 | MockPdoInterfacePtr mock_pdo; 12 | march::PdoSlaveInterface pdo = march::PdoSlaveInterface(1, this->mock_pdo); 13 | }; 14 | 15 | TEST_F(HighVoltageTest, Equals) 16 | { 17 | NetMonitorOffsets netMonitoringOffsets; 18 | NetDriverOffsets netDriverOffsets; 19 | march::HighVoltage highVoltage1(this->pdo, netMonitoringOffsets, netDriverOffsets); 20 | march::HighVoltage highVoltage2(this->pdo, netMonitoringOffsets, netDriverOffsets); 21 | EXPECT_TRUE(highVoltage1 == highVoltage2); 22 | } 23 | 24 | TEST_F(HighVoltageTest, UnEqual) 25 | { 26 | NetMonitorOffsets netMonitoringOffsets; 27 | NetDriverOffsets netDriverOffsets1; 28 | NetDriverOffsets netDriverOffsets2(1, 2, 3); 29 | march::HighVoltage highVoltage1(this->pdo, netMonitoringOffsets, netDriverOffsets1); 30 | march::HighVoltage highVoltage2(this->pdo, netMonitoringOffsets, netDriverOffsets2); 31 | EXPECT_FALSE(highVoltage1 == highVoltage2); 32 | } 33 | 34 | TEST_F(HighVoltageTest, Stream) 35 | { 36 | NetMonitorOffsets netMonitoringOffsets; 37 | NetDriverOffsets netDriverOffsets; 38 | march::HighVoltage highVoltage(this->pdo, netMonitoringOffsets, netDriverOffsets); 39 | std::stringstream ss; 40 | ss << highVoltage; 41 | EXPECT_EQ("HighVoltage(netMonitoringOffsets: NetMonitorOffsets(powerDistributionBoardCurrent: -1, " 42 | "lowVoltageNet1Current: -1, lowVoltageNet2Current: -1, highVoltageNetCurrent: -1, lowVoltageState: -1, " 43 | "highVoltageOvercurrentTrigger: -1, highVoltageEnabled: -1, highVoltageState: -1), netDriverOffsets: " 44 | "NetDriverOffsets(lowVoltageNetOnOff: -1, highVoltageNetOnOff: -1, highVoltageNetEnableDisable: -1))", 45 | ss.str()); 46 | } 47 | -------------------------------------------------------------------------------- /march_hardware/test/power/low_voltage_test.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2018 Project March. 2 | #include "../mocks/mock_pdo_interface.h" 3 | #include "march_hardware/power/low_voltage.h" 4 | 5 | #include 6 | 7 | #include 8 | 9 | class LowVoltageTest : public ::testing::Test 10 | { 11 | protected: 12 | MockPdoInterfacePtr mock_pdo; 13 | march::PdoSlaveInterface pdo = march::PdoSlaveInterface(1, this->mock_pdo); 14 | }; 15 | 16 | TEST_F(LowVoltageTest, Equals) 17 | { 18 | NetMonitorOffsets netMonitoringOffsets; 19 | NetDriverOffsets netDriverOffsets; 20 | march::LowVoltage lowVoltage1(this->pdo, netMonitoringOffsets, netDriverOffsets); 21 | march::LowVoltage lowVoltage2(this->pdo, netMonitoringOffsets, netDriverOffsets); 22 | EXPECT_TRUE(lowVoltage1 == lowVoltage2); 23 | } 24 | 25 | TEST_F(LowVoltageTest, NotEquals) 26 | { 27 | NetMonitorOffsets netMonitoringOffsets; 28 | NetDriverOffsets netDriverOffsets; 29 | NetDriverOffsets netDriverOffsets2(1, 2, 3); 30 | march::LowVoltage lowVoltage1(this->pdo, netMonitoringOffsets, netDriverOffsets); 31 | march::LowVoltage lowVoltage2(this->pdo, netMonitoringOffsets, netDriverOffsets2); 32 | 33 | EXPECT_FALSE(lowVoltage1 == lowVoltage2); 34 | } 35 | 36 | TEST_F(LowVoltageTest, Stream) 37 | { 38 | NetMonitorOffsets netMonitoringOffsets; 39 | NetDriverOffsets netDriverOffsets; 40 | march::LowVoltage lowVoltage1(this->pdo, netMonitoringOffsets, netDriverOffsets); 41 | std::stringstream ss; 42 | ss << lowVoltage1; 43 | EXPECT_EQ("LowVoltage(netMonitoringOffsets: NetMonitorOffsets(powerDistributionBoardCurrent: -1, " 44 | "lowVoltageNet1Current: -1, lowVoltageNet2Current: -1, highVoltageNetCurrent: -1, lowVoltageState: -1, " 45 | "highVoltageOvercurrentTrigger: -1, highVoltageEnabled: -1, highVoltageState: -1), netDriverOffsets: " 46 | "NetDriverOffsets(lowVoltageNetOnOff: -1, highVoltageNetOnOff: -1, highVoltageNetEnableDisable: -1))", 47 | ss.str()); 48 | } 49 | -------------------------------------------------------------------------------- /march_hardware/test/power/power_distribution_board_test.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2018 Project March. 2 | #include "../mocks/mock_slave.h" 3 | #include "march_hardware/power/power_distribution_board.h" 4 | 5 | #include 6 | 7 | #include 8 | 9 | class PowerDistributionBoardTest : public ::testing::Test 10 | { 11 | protected: 12 | MockPdoInterfacePtr mock_pdo = std::make_shared(); 13 | MockSdoInterfacePtr mock_sdo = std::make_shared(); 14 | MockSlave mock_slave = MockSlave(this->mock_pdo, this->mock_sdo); 15 | NetMonitorOffsets netMonitoringOffsets; 16 | NetDriverOffsets netDriverOffsets; 17 | BootShutdownOffsets bootShutdownOffsets; 18 | int slaveIndex = 2; 19 | }; 20 | 21 | TEST_F(PowerDistributionBoardTest, Unequals) 22 | { 23 | NetDriverOffsets netDriverOffsets2(1, 2, 3); 24 | NetMonitorOffsets netMonitorOffsets2(1, 1, 1, 1, 1, 1, 1, 1); 25 | march::PowerDistributionBoard powerDistributionBoard1(this->mock_slave, netMonitoringOffsets, netDriverOffsets, 26 | bootShutdownOffsets); 27 | march::PowerDistributionBoard powerDistributionBoard2(this->mock_slave, netMonitoringOffsets, netDriverOffsets2, 28 | bootShutdownOffsets); 29 | march::PowerDistributionBoard powerDistributionBoard3(this->mock_slave, netMonitorOffsets2, netDriverOffsets, 30 | bootShutdownOffsets); 31 | 32 | EXPECT_FALSE(powerDistributionBoard1 == powerDistributionBoard2); 33 | EXPECT_FALSE(powerDistributionBoard1 == powerDistributionBoard3); 34 | EXPECT_FALSE(powerDistributionBoard2 == powerDistributionBoard3); 35 | } 36 | 37 | TEST_F(PowerDistributionBoardTest, Equals) 38 | { 39 | march::PowerDistributionBoard powerDistributionBoard1(this->mock_slave, netMonitoringOffsets, netDriverOffsets, 40 | bootShutdownOffsets); 41 | march::PowerDistributionBoard powerDistributionBoard2(this->mock_slave, netMonitoringOffsets, netDriverOffsets, 42 | bootShutdownOffsets); 43 | EXPECT_TRUE(powerDistributionBoard1 == powerDistributionBoard2); 44 | } 45 | -------------------------------------------------------------------------------- /march_hardware/test/temperature/temperature_ges_test.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2018 Project March. 2 | #include "../mocks/mock_slave.h" 3 | #include "march_hardware/temperature/temperature_ges.h" 4 | 5 | #include 6 | #include 7 | 8 | using testing::Eq; 9 | using testing::Return; 10 | 11 | class TemperatureGESTest : public ::testing::Test 12 | { 13 | protected: 14 | MockPdoInterfacePtr mock_pdo = std::make_shared(); 15 | MockSdoInterfacePtr mock_sdo = std::make_shared(); 16 | MockSlave mock_slave = MockSlave(this->mock_pdo, this->mock_sdo); 17 | }; 18 | 19 | TEST_F(TemperatureGESTest, ByteOffsetOne) 20 | { 21 | ASSERT_NO_THROW(march::TemperatureGES(this->mock_slave, 1)); 22 | } 23 | 24 | TEST_F(TemperatureGESTest, ByteOffsetZero) 25 | { 26 | ASSERT_NO_THROW(march::TemperatureGES(this->mock_slave, 0)); 27 | } 28 | 29 | TEST_F(TemperatureGESTest, GetTemperature) 30 | { 31 | const uint8_t expected_offset = 3; 32 | const float temperature = 1.0; 33 | EXPECT_CALL(*this->mock_pdo, read32(Eq(this->mock_slave.getSlaveIndex()), Eq(expected_offset))) 34 | .WillOnce(Return(march::bit32{ .f = temperature })); 35 | 36 | const march::TemperatureGES ges(this->mock_slave, expected_offset); 37 | 38 | ASSERT_FLOAT_EQ(ges.getTemperature(), temperature); 39 | } 40 | -------------------------------------------------------------------------------- /march_hardware/test/test_runner.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2018 Project March. 2 | 3 | #include 4 | 5 | /** 6 | * The main method which runs all the tests 7 | */ 8 | int main(int argc, char** argv) 9 | { 10 | testing::InitGoogleTest(&argc, argv); 11 | 12 | return RUN_ALL_TESTS(); 13 | } 14 | -------------------------------------------------------------------------------- /march_hardware_builder/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(march_hardware_builder) 3 | 4 | add_compile_options(-std=c++14 -Wall -Wextra -Werror) 5 | 6 | find_package(catkin REQUIRED COMPONENTS 7 | march_hardware 8 | roscpp 9 | roslib 10 | urdf 11 | ) 12 | 13 | catkin_package( 14 | INCLUDE_DIRS include 15 | CATKIN_DEPENDS 16 | march_hardware 17 | roscpp 18 | roslib 19 | urdf 20 | LIBRARIES ${PROJECT_NAME} 21 | ) 22 | 23 | if(CATKIN_ENABLE_TESTING AND ENABLE_COVERAGE_TESTING) 24 | find_package(code_coverage REQUIRED) 25 | # Add compiler flags for coverage instrumentation before defining any targets 26 | append_coverage_compiler_flags() 27 | endif() 28 | 29 | include_directories(include SYSTEM ${catkin_INCLUDE_DIRS}) 30 | 31 | add_library(${PROJECT_NAME} 32 | src/hardware_builder.cpp 33 | ) 34 | 35 | target_link_libraries(${PROJECT_NAME} 36 | ${catkin_LIBRARIES} 37 | yaml-cpp 38 | ) 39 | 40 | install(DIRECTORY include/${PROJECT_NAME}/ 41 | DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 42 | ) 43 | 44 | install(DIRECTORY robots 45 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 46 | ) 47 | 48 | install(TARGETS ${PROJECT_NAME} 49 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 50 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 51 | ) 52 | 53 | ## Add gtest based cpp test target and link libraries 54 | if(CATKIN_ENABLE_TESTING) 55 | catkin_add_gtest(${PROJECT_NAME}_test 56 | test/absolute_encoder_builder_test.cpp 57 | test/allowed_robot_test.cpp 58 | test/imc_builder_test.cpp 59 | test/incremental_encoder_builder_test.cpp 60 | test/joint_builder_test.cpp 61 | test/pdb_builder_test.cpp 62 | test/test_runner.cpp 63 | ) 64 | target_link_libraries(${PROJECT_NAME}_test ${catkin_LIBRARIES} ${PROJECT_NAME}) 65 | 66 | if(ENABLE_COVERAGE_TESTING) 67 | set(COVERAGE_EXCLUDES "*/${PROJECT_NAME}/test/*") 68 | add_code_coverage( 69 | NAME coverage_report 70 | DEPENDENCIES ${PROJECT_NAME}_test 71 | ) 72 | endif() 73 | endif() 74 | -------------------------------------------------------------------------------- /march_hardware_builder/docs/Doxyfile: -------------------------------------------------------------------------------- 1 | # Doxyfile 1.8.11 2 | 3 | # Explanation for each setting here http://www.doxygen.nl/manual/config.html. 4 | 5 | DOXYFILE_ENCODING = UTF-8 6 | PROJECT_NAME = "March Hardware Builder" 7 | PROJECT_BRIEF = 8 | OUTPUT_DIRECTORY = NOTE: Will be overwritten by doc.sh 9 | EXTRACT_ALL = YES 10 | EXTRACT_PRIVATE = YES 11 | EXTRACT_PACKAGE = YES 12 | EXTRACT_STATIC = YES 13 | EXTRACT_LOCAL_METHODS = YES 14 | INPUT = ../src ../include pages 15 | RECURSIVE = YES 16 | EXCLUDE = 17 | GENERATE_TREEVIEW = YES 18 | GENERATE_LATEX = NO 19 | GENERATE_XML = NO 20 | 21 | INLINE_SOURCES = YES 22 | -------------------------------------------------------------------------------- /march_hardware_builder/docs/pages/mainpage.dox: -------------------------------------------------------------------------------- 1 | /** @mainpage March Hardware Builder 2 | * @section introduction Introduction 3 | * This package contains a library which can be included to to create a MarchRobot from .yaml config files. 4 | * 5 | * The implementation is rather straightforward and nearly all of the logic can be found in the HardwareBuilder class. 6 | * 7 | * @section features Features 8 | * - Parse .yaml files to create a MarchRobot. 9 | * - Easily switch between .yaml files to use different hardware. 10 | * 11 | * @section how_to_use How to use 12 | * Include this package in your project and `#include ` to start using the 13 | * HardwareBuilder class. 14 | * 15 | * There are four main ways to interact with the hardware builder: 16 | * - Instantiate with an AllowedRobot. 17 | * @verbatim 18 | HardwareBuilder hardwareBuilder = HardwareBuilder(AllowedRobot::march4); 19 | marchRobot = hardwareBuilder.createMarchRobot(); 20 | @endverbatim 21 | * - Instantiate with a path to a yaml file. 22 | * @verbatim 23 | HardwareBuilder hardwareBuilder = HardwareBuilder("path/to/robot/march4.yaml"); 24 | marchRobot = hardwareBuilder.createMarchRobot(); 25 | @endverbatim 26 | * - Instantiate empty. 27 | * This function is mostly used for testing wrongly configured robots and is not needed in a release. 28 | * @note This means you are responsible for passing a YAML::Node to the .createMarchRobot() function! @endnote 29 | * 30 | * @verbatim 31 | YAML::Node robotConfig = YAML::LoadFile("path/to/robot.yaml"); 32 | HardwareBuilder hardwareBuilder = HardwareBuilder(); 33 | marchRobot = hardwareBuilder.createMarchRobot(robotConfig); 34 | @endverbatim 35 | * - It is also possible to create parts of a MarchRobot (IMotionCubes, Encoders, etc...) in a similar way. 36 | * @verbatim 37 | YAML::Node encoderConfig = YAML::LoadFile("path/to/encoder.yaml"); 38 | HardwareBuilder hardwareBuilder = HardwareBuilder(); 39 | marchRobot = hardwareBuilder.createEncoder(encoderConfig); 40 | @endverbatim 41 | */ 42 | -------------------------------------------------------------------------------- /march_hardware_builder/include/march_hardware_builder/hardware_config_exceptions.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #ifndef MARCH_HARDWARE_BUILDER_HARDWARE_CONFIG_EXCEPTIONS_H 3 | #define MARCH_HARDWARE_BUILDER_HARDWARE_CONFIG_EXCEPTIONS_H 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | 10 | class MissingKeyException : public march::error::HardwareException 11 | { 12 | public: 13 | MissingKeyException(const std::string& key_name, const std::string& object_name) 14 | : march::error::HardwareException(march::error::ErrorType::MISSING_REQUIRED_KEY) 15 | { 16 | std::ostringstream ss; 17 | ss << "Missing required key '" << key_name << "' while creating object '" << object_name << "'"; 18 | this->description_ = this->createDescription(ss.str()); 19 | } 20 | }; 21 | #endif // MARCH_HARDWARE_BUILDER_HARDWARE_CONFIG_EXCEPTIONS_H 22 | -------------------------------------------------------------------------------- /march_hardware_builder/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | march_hardware_builder 5 | 0.0.0 6 | Generate hardware configuration from yaml files. 7 | 8 | Project March 9 | 10 | TODO 11 | 12 | catkin 13 | 14 | march_hardware 15 | roscpp 16 | roslib 17 | urdf 18 | yaml-cpp 19 | 20 | code_coverage 21 | rosunit 22 | 23 | -------------------------------------------------------------------------------- /march_hardware_builder/robots/march3.yaml: -------------------------------------------------------------------------------- 1 | march3: 2 | ifName: enp3s0 3 | ecatCycleTime: 4 4 | joints: 5 | - right_hip: 6 | actuationMode: position 7 | allowActuation: true 8 | imotioncube: 9 | slaveIndex: 8 10 | absoluteEncoder: 11 | resolution: 16 12 | minPositionIU: 22134 13 | maxPositionIU: 43436 14 | incrementalEncoder: 15 | resolution: 12 16 | 17 | - left_hip: 18 | actuationMode: position 19 | allowActuation: true 20 | imotioncube: 21 | slaveIndex: 3 22 | absoluteEncoder: 23 | resolution: 16 24 | minPositionIU: 9746 25 | maxPositionIU: 31557 26 | incrementalEncoder: 27 | resolution: 12 28 | 29 | - right_knee: 30 | actuationMode: position 31 | allowActuation: true 32 | imotioncube: 33 | slaveIndex: 10 34 | absoluteEncoder: 35 | resolution: 16 36 | minPositionIU: 18120 37 | maxPositionIU: 39941 38 | incrementalEncoder: 39 | resolution: 12 40 | 41 | - left_knee: 42 | actuationMode: position 43 | allowActuation: true 44 | imotioncube: 45 | slaveIndex: 5 46 | absoluteEncoder: 47 | resolution: 16 48 | minPositionIU: 21924 49 | maxPositionIU: 43734 50 | incrementalEncoder: 51 | resolution: 12 52 | 53 | - right_ankle: 54 | actuationMode: position 55 | allowActuation: true 56 | imotioncube: 57 | slaveIndex: 12 58 | absoluteEncoder: 59 | resolution: 12 60 | minPositionIU: 1086 61 | maxPositionIU: 1490 62 | incrementalEncoder: 63 | resolution: 13 64 | 65 | - left_ankle: 66 | actuationMode: position 67 | allowActuation: true 68 | imotioncube: 69 | slaveIndex: 7 70 | absoluteEncoder: 71 | resolution: 12 72 | minPositionIU: 631 73 | maxPositionIU: 1022 74 | incrementalEncoder: 75 | resolution: 13 76 | -------------------------------------------------------------------------------- /march_hardware_builder/robots/pdb.yaml: -------------------------------------------------------------------------------- 1 | pdb: 2 | ifName: enp2s0 3 | ecatCycleTime: 4 4 | powerDistributionBoard: 5 | slaveIndex: 1 6 | bootShutdownOffsets: 7 | masterOk: 0 8 | shutdown: 0 9 | shutdownAllowed: 1 10 | netMonitorByteOffsets: 11 | powerDistributionBoardCurrent: 5 12 | lowVoltageNet1Current: 9 13 | lowVoltageNet2Current: 13 14 | highVoltageNetCurrent: 17 15 | lowVoltageState: 3 16 | highVoltageOvercurrentTrigger: 2 17 | highVoltageEnabled: 1 18 | highVoltageState: 4 19 | netDriverByteOffsets: 20 | lowVoltageNetOnOff: 4 21 | highVoltageNetOnOff: 3 22 | allHighVoltageOnOff: 2 23 | -------------------------------------------------------------------------------- /march_hardware_builder/robots/test_joint_linear.yaml: -------------------------------------------------------------------------------- 1 | testjoint_linear: 2 | ifName: enp2s0 3 | ecatCycleTime: 4 4 | ecatSlaveTimeout: 50 5 | joints: 6 | - linear_joint: 7 | actuationMode: torque 8 | allowActuation: true 9 | imotioncube: 10 | slaveIndex: 1 11 | absoluteEncoder: 12 | resolution: 12 13 | minPositionIU: 240 14 | maxPositionIU: 445 15 | incrementalEncoder: 16 | resolution: 13 17 | transmission: 200 18 | -------------------------------------------------------------------------------- /march_hardware_builder/robots/test_joint_rotational.yaml: -------------------------------------------------------------------------------- 1 | testsetup: 2 | ifName: enp2s0 3 | ecatCycleTime: 4 4 | ecatSlaveTimeout: 50 5 | joints: 6 | - rotational_joint: 7 | actuationMode: torque 8 | allowActuation: true 9 | imotioncube: 10 | slaveIndex: 1 11 | absoluteEncoder: 12 | resolution: 17 13 | minPositionIU: 29266 14 | maxPositionIU: 52948 15 | incrementalEncoder: 16 | resolution: 12 17 | transmission: 101 18 | -------------------------------------------------------------------------------- /march_hardware_builder/test/allowed_robot_test.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #include "march_hardware_builder/hardware_builder.h" 3 | 4 | #include 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | TEST(AllowedRobotTest, TestMarch4Creation) 11 | { 12 | urdf::Model urdf; 13 | urdf.initFile(ros::package::getPath("march_description").append("/urdf/march4.urdf")); 14 | ASSERT_NO_THROW(HardwareBuilder(AllowedRobot::march4, urdf).createMarchRobot()); 15 | } 16 | 17 | // Fails because the March 3 does not have safety limits 18 | // TEST(AllowedRobotTest, TestMarch3Creation) 19 | //{ 20 | // urdf::Model urdf; 21 | // urdf.initFile(ros::package::getPath("march_description").append("/urdf/march3.urdf")); 22 | // ASSERT_NO_THROW(HardwareBuilder(AllowedRobot::march3, urdf).createMarchRobot()); 23 | //} 24 | 25 | // Fails because the rotational test joint is not correctly calibrated 26 | // TEST(AllowedRobotTest, TestTestRotationalSetupCreation) 27 | //{ 28 | // urdf::Model urdf; 29 | // urdf.initFile(ros::package::getPath("march_description").append("/urdf/test_joint_rotational.urdf")); 30 | // ASSERT_NO_THROW(HardwareBuilder(AllowedRobot::test_joint_rotational, urdf).createMarchRobot()); 31 | //} 32 | 33 | TEST(AllowedRobotTest, TestTestLinearSetupCreation) 34 | { 35 | urdf::Model urdf; 36 | urdf.initFile(ros::package::getPath("march_description").append("/urdf/test_joint_linear.urdf")); 37 | ASSERT_NO_THROW(HardwareBuilder(AllowedRobot::test_joint_linear, urdf).createMarchRobot()); 38 | } 39 | 40 | TEST(AllowedRobotTest, TestTestRotationalSetupCreation) 41 | { 42 | urdf::Model urdf; 43 | urdf.initFile(ros::package::getPath("march_description").append("/urdf/test_joint_rotational.urdf")); 44 | ASSERT_NO_THROW(HardwareBuilder(AllowedRobot::test_joint_rotational, urdf).createMarchRobot()); 45 | } 46 | -------------------------------------------------------------------------------- /march_hardware_builder/test/incremental_encoder_builder_test.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #include 3 | #include 4 | 5 | #include 6 | 7 | #include 8 | #include 9 | 10 | #include 11 | 12 | class IncrementalEncoderBuilderTest : public ::testing::Test 13 | { 14 | protected: 15 | std::string base_path; 16 | 17 | void SetUp() override 18 | { 19 | this->base_path = ros::package::getPath("march_hardware_builder").append("/test/yaml/encoder"); 20 | } 21 | 22 | YAML::Node loadTestYaml(const std::string& relative_path) 23 | { 24 | return YAML::LoadFile(this->base_path.append(relative_path)); 25 | } 26 | }; 27 | 28 | TEST_F(IncrementalEncoderBuilderTest, ValidIncrementalEncoder) 29 | { 30 | YAML::Node config = this->loadTestYaml("/incremental_encoder_correct.yaml"); 31 | 32 | march::IncrementalEncoder expected = march::IncrementalEncoder(12, 45.5); 33 | auto created = HardwareBuilder::createIncrementalEncoder(config); 34 | ASSERT_EQ(expected, *created); 35 | } 36 | 37 | TEST_F(IncrementalEncoderBuilderTest, NoConfig) 38 | { 39 | YAML::Node config; 40 | ASSERT_EQ(nullptr, HardwareBuilder::createIncrementalEncoder(config[""])); 41 | } 42 | 43 | TEST_F(IncrementalEncoderBuilderTest, NoResolution) 44 | { 45 | YAML::Node config = this->loadTestYaml("/incremental_encoder_no_resolution.yaml"); 46 | 47 | ASSERT_THROW(HardwareBuilder::createIncrementalEncoder(config), MissingKeyException); 48 | } 49 | 50 | TEST_F(IncrementalEncoderBuilderTest, NoTransmission) 51 | { 52 | YAML::Node config = this->loadTestYaml("/incremental_encoder_no_transmission.yaml"); 53 | 54 | ASSERT_THROW(HardwareBuilder::createIncrementalEncoder(config), MissingKeyException); 55 | } 56 | -------------------------------------------------------------------------------- /march_hardware_builder/test/test_runner.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #include 3 | 4 | /** 5 | * The main method which runs all the tests 6 | */ 7 | int main(int argc, char** argv) 8 | { 9 | testing::InitGoogleTest(&argc, argv); 10 | return RUN_ALL_TESTS(); 11 | } 12 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/encoder/absolute_encoder_correct.yaml: -------------------------------------------------------------------------------- 1 | resolution: 16 2 | minPositionIU: 22134 3 | maxPositionIU: 43436 4 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/encoder/absolute_encoder_no_max_position.yaml: -------------------------------------------------------------------------------- 1 | resolution: 16 2 | minPositionIU: 22134 3 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/encoder/absolute_encoder_no_min_position.yaml: -------------------------------------------------------------------------------- 1 | resolution: 16 2 | maxPositionIU: 0 3 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/encoder/absolute_encoder_no_resolution.yaml: -------------------------------------------------------------------------------- 1 | reslution: 16 2 | minPositionIU: 22134 3 | maxPositionIU: 43436 4 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/encoder/incremental_encoder_correct.yaml: -------------------------------------------------------------------------------- 1 | resolution: 12 2 | transmission: 45.5 3 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/encoder/incremental_encoder_no_resolution.yaml: -------------------------------------------------------------------------------- 1 | transmission: 45.5 2 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/encoder/incremental_encoder_no_transmission.yaml: -------------------------------------------------------------------------------- 1 | resolution: 13 2 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/imotioncube/imotioncube_correct.yaml: -------------------------------------------------------------------------------- 1 | slaveIndex: 2 2 | absoluteEncoder: 3 | resolution: 16 4 | minPositionIU: 22134 5 | maxPositionIU: 43436 6 | zeroPositionIU: 24515 7 | safetyMarginRad: 0.05 8 | incrementalEncoder: 9 | resolution: 12 10 | transmission: 101 11 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/imotioncube/imotioncube_no_absolute_encoder.yaml: -------------------------------------------------------------------------------- 1 | slaveIndex: 2 2 | incrementalEncoder: 3 | resolution: 12 4 | transmission: 100 5 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/imotioncube/imotioncube_no_incremental_encoder.yaml: -------------------------------------------------------------------------------- 1 | slaveIndex: 2 2 | absoluteEncoder: 3 | resolution: 16 4 | minPositionIU: 22134 5 | maxPositionIU: 43436 6 | zeroPositionIU: 24515 7 | safetyMarginRad: 0.05 8 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/imotioncube/imotioncube_no_slave_index.yaml: -------------------------------------------------------------------------------- 1 | absoluteEncoder: 2 | resolution: 16 3 | minPositionIU: 22134 4 | maxPositionIU: 43436 5 | incrementalEncoder: 6 | resolution: 12 7 | transmission: 75.1 8 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/joint/joint_correct.yaml: -------------------------------------------------------------------------------- 1 | allowActuation: true 2 | imotioncube: 3 | slaveIndex: 2 4 | absoluteEncoder: 5 | resolution: 16 6 | minPositionIU: 22134 7 | maxPositionIU: 43436 8 | incrementalEncoder: 9 | resolution: 12 10 | transmission: 50.0 11 | temperatureges: 12 | slaveIndex: 1 13 | byteOffset: 2 14 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/joint/joint_correct_not_actuated.yaml: -------------------------------------------------------------------------------- 1 | allowActuation: false 2 | imotioncube: 3 | slaveIndex: 2 4 | absoluteEncoder: 5 | resolution: 16 6 | minPositionIU: 22134 7 | maxPositionIU: 43436 8 | incrementalEncoder: 9 | resolution: 12 10 | transmission: 50.0 11 | temperatureges: 12 | slaveIndex: 1 13 | byteOffset: 2 14 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/joint/joint_correct_position_mode.yaml: -------------------------------------------------------------------------------- 1 | actuationMode: position 2 | allowActuation: false 3 | imotioncube: 4 | slaveIndex: 1 5 | absoluteEncoder: 6 | resolution: 16 7 | minPositionIU: 22134 8 | maxPositionIU: 43436 9 | incrementalEncoder: 10 | resolution: 12 11 | transmission: 50.0 12 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/joint/joint_no_actuate.yaml: -------------------------------------------------------------------------------- 1 | imotioncube: 2 | slaveIndex: 2 3 | absoluteEncoder: 4 | resolution: 16 5 | minPositionIU: 22134 6 | maxPositionIU: 43436 7 | incrementalEncoder: 8 | resolution: 12 9 | transmission: 14.0 10 | temperatureges: 11 | slaveIndex: 1 12 | byteOffset: 2 13 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/joint/joint_no_imotioncube.yaml: -------------------------------------------------------------------------------- 1 | allowActuation: true 2 | temperatureges: 3 | slaveIndex: 1 4 | byteOffset: 2 5 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/joint/joint_no_temperature_ges.yaml: -------------------------------------------------------------------------------- 1 | allowActuation: true 2 | imotioncube: 3 | slaveIndex: 10 4 | absoluteEncoder: 5 | resolution: 20 6 | minPositionIU: 3 7 | maxPositionIU: 40000 8 | incrementalEncoder: 9 | resolution: 12 10 | transmission: 45.0 11 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/joint/joint_only_actuate.yaml: -------------------------------------------------------------------------------- 1 | allowActuation: false 2 | -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/powerdistributionboard/power_distribution_board.yaml: -------------------------------------------------------------------------------- 1 | slaveIndex: 1 2 | bootShutdownOffsets: 3 | masterOk: 0 4 | shutdown: 0 5 | shutdownAllowed: 1 6 | netMonitorByteOffsets: 7 | powerDistributionBoardCurrent: 5 8 | lowVoltageNet1Current: 9 9 | lowVoltageNet2Current: 13 10 | highVoltageNetCurrent: 17 11 | lowVoltageState: 3 12 | highVoltageOvercurrentTrigger: 2 13 | highVoltageEnabled: 1 14 | highVoltageState: 4 15 | netDriverByteOffsets: 16 | lowVoltageNetOnOff: 4 17 | highVoltageNetOnOff: 3 18 | allHighVoltageOnOff: 2 -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/powerdistributionboard/power_distribution_board_missing_high_voltage_state_index.yaml: -------------------------------------------------------------------------------- 1 | bootShutdownOffsets: 2 | masterOk: 0 3 | shutdown: 0 4 | shutdownAllowed: 1 5 | netMonitorByteOffsets: 6 | powerDistributionBoardCurrent: 5 7 | lowVoltageNet1Current: 9 8 | lowVoltageNet2Current: 13 9 | highVoltageNetCurrent: 17 10 | lowVoltageState: 3 11 | highVoltageOvercurrentTrigger: 2 12 | highVoltageEnabled: 1 13 | netDriverByteOffsets: 14 | lowVoltageNetOnOff: 4 15 | highVoltageNetOnOff: 3 16 | allHighVoltageOnOff: 2 -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/powerdistributionboard/power_distribution_board_missing_slave_index.yaml: -------------------------------------------------------------------------------- 1 | bootShutdownOffsets: 2 | masterOk: 0 3 | shutdown: 0 4 | shutdownAllowed: 1 5 | netMonitorByteOffsets: 6 | powerDistributionBoardCurrent: 5 7 | lowVoltageNet1Current: 9 8 | lowVoltageNet2Current: 13 9 | highVoltageNetCurrent: 17 10 | lowVoltageState: 3 11 | highVoltageOvercurrentTrigger: 2 12 | highVoltageEnabled: 1 13 | highVoltageState: 4 14 | netDriverByteOffsets: 15 | lowVoltageNetOnOff: 4 16 | highVoltageNetOnOff: 3 17 | allHighVoltageOnOff: 2 -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/powerdistributionboard/power_distribution_board_negative_offset.yaml: -------------------------------------------------------------------------------- 1 | slaveIndex: 1 2 | bootShutdownOffsets: 3 | masterOk: 0 4 | shutdown: 0 5 | shutdownAllowed: 1 6 | netMonitorByteOffsets: 7 | powerDistributionBoardCurrent: 5 8 | lowVoltageNet1Current: 9 9 | lowVoltageNet2Current: 13 10 | highVoltageNetCurrent: -17 11 | lowVoltageState: 3 12 | highVoltageOvercurrentTrigger: 2 13 | highVoltageEnabled: 1 14 | highVoltageState: 4 15 | netDriverByteOffsets: 16 | lowVoltageNetOnOff: 4 17 | highVoltageNetOnOff: 3 18 | allHighVoltageOnOff: 2 -------------------------------------------------------------------------------- /march_hardware_builder/test/yaml/temperaturesensor/temperature_correct.yaml: -------------------------------------------------------------------------------- 1 | slaveIndex: 1 2 | byteOffset: 2 3 | -------------------------------------------------------------------------------- /march_hardware_interface/config/march3/controllers.yaml: -------------------------------------------------------------------------------- 1 | march: 2 | controller: 3 | joint_state: 4 | type: joint_state_controller/JointStateController 5 | publish_rate: 50 6 | temperature_sensor: 7 | type: march_temperature_sensor_controller/MarchTemperatureSensorController 8 | publish_rate: 50 9 | pdb_state: 10 | type: march_pdb_state_controller/MarchPdbStateController 11 | publish_rate: 50 12 | trajectory: 13 | type: position_controllers/JointTrajectoryController 14 | joints: 15 | - right_hip 16 | - left_hip 17 | - right_knee 18 | - left_knee 19 | - right_ankle 20 | - left_ankle 21 | -------------------------------------------------------------------------------- /march_hardware_interface/config/march3/joint_limits.yaml: -------------------------------------------------------------------------------- 1 | joint_limits: 2 | left_hip: 3 | has_position_limits: true 4 | min_position: -0.26 5 | max_position: 1.83259571 6 | has_velocity_limits: true 7 | max_velocity: 0.2 8 | 9 | has_soft_limits: true 10 | soft_lower_limit: -0.2 11 | soft_upper_limit: 1.75 12 | k_position: 10.0 13 | k_velocity: 10.0 14 | 15 | right_hip: 16 | has_position_limits: true 17 | min_position: -0.26 18 | max_position: 1.83259571 19 | has_velocity_limits: true 20 | max_velocity: 0.2 21 | 22 | has_soft_limits: true 23 | soft_lower_limit: -0.2 24 | soft_upper_limit: 1.75 25 | k_position: 10.0 26 | k_velocity: 10.0 27 | 28 | left_knee: 29 | has_position_limits: true 30 | min_position: -0.2 31 | max_position: 2 32 | has_velocity_limits: true 33 | max_velocity: 0.2 34 | 35 | has_soft_limits: true 36 | soft_lower_limit: -0.18 37 | soft_upper_limit: 1.75 38 | k_position: 10.0 39 | k_velocity: 10.0 40 | 41 | right_knee: 42 | has_position_limits: true 43 | min_position: -0.2 44 | max_position: 2 45 | has_velocity_limits: true 46 | max_velocity: 0.2 47 | 48 | has_soft_limits: true 49 | soft_lower_limit: -0.18 50 | soft_upper_limit: 1.75 51 | k_position: 10.0 52 | k_velocity: 10.0 53 | 54 | right_ankle: 55 | has_position_limits: true 56 | min_position: -0.349 57 | max_position: 0.265 58 | has_velocity_limits: true 59 | max_velocity: 0.2 60 | 61 | has_soft_limits: true 62 | soft_lower_limit: -0.32 63 | soft_upper_limit: 0.25 64 | k_position: 10.0 65 | k_velocity: 10.0 66 | 67 | left_ankle: 68 | has_position_limits: true 69 | min_position: -0.366 70 | max_position: 0.296 71 | has_velocity_limits: true 72 | max_velocity: 0.2 73 | 74 | has_soft_limits: true 75 | soft_lower_limit: -0.35 76 | soft_upper_limit: 0.293 77 | k_position: 10.0 78 | k_velocity: 10.0 79 | 80 | -------------------------------------------------------------------------------- /march_hardware_interface/config/march4/controllers.yaml: -------------------------------------------------------------------------------- 1 | march: 2 | controller: 3 | pdb_state: 4 | type: march_pdb_state_controller/MarchPdbStateController 5 | publish_rate: 50 6 | joint_state: 7 | type: joint_state_controller/JointStateController 8 | publish_rate: 250 9 | temperature_sensor: 10 | type: march_temperature_sensor_controller/MarchTemperatureSensorController 11 | publish_rate: 1 12 | trajectory: 13 | type: effort_controllers/JointTrajectoryController 14 | allow_partial_joints_goal: true 15 | joints: 16 | - left_ankle 17 | - left_hip_aa 18 | - left_hip_fe 19 | - left_knee 20 | - right_ankle 21 | - right_hip_aa 22 | - right_hip_fe 23 | - right_knee 24 | gains: # Required because we're controlling an effort interface 25 | left_ankle: {p: 0, i: 0, d: 0, i_clamp: 100, publish_state: true, antiwindup: true} 26 | left_hip_aa: {p: 0, i: 0, d: 0, i_clamp: 100, publish_state: true, antiwindup: true} 27 | left_hip_fe: {p: 0, i: 0, d: 0, i_clamp: 100, publish_state: true, antiwindup: true} 28 | left_knee: {p: 0, i: 0, d: 0, i_clamp: 100, publish_state: true, antiwindup: true} 29 | right_ankle: {p: 0, i: 0, d: 0, i_clamp: 100, publish_state: true, antiwindup: true} 30 | right_hip_aa: {p: 0, i: 0, d: 0, i_clamp: 100, publish_state: true, antiwindup: true} 31 | right_hip_fe: {p: 0, i: 0, d: 0, i_clamp: 100, publish_state: true, antiwindup: true} 32 | right_knee: {p: 0, i: 0, d: 0, i_clamp: 100, publish_state: true, antiwindup: true} 33 | 34 | constraints: 35 | left_ankle: 36 | margin_soft_limit_error: 0.5 37 | trajectory: 0.305 38 | goal: 0.305 39 | left_hip_aa: 40 | margin_soft_limit_error: 0.5 41 | trajectory: 0.305 42 | goal: 0.305 43 | left_hip_fe: 44 | margin_soft_limit_error: 0.5 45 | trajectory: 0.305 46 | goal: 0.305 47 | left_knee: 48 | margin_soft_limit_error: 0.5 49 | trajectory: 0.305 50 | goal: 0.305 51 | right_ankle: 52 | margin_soft_limit_error: 0.5 53 | trajectory: 0.305 54 | goal: 0.305 55 | right_hip_aa: 56 | margin_soft_limit_error: 0.5 57 | trajectory: 0.305 58 | goal: 0.305 59 | right_hip_fe: 60 | margin_soft_limit_error: 0.5 61 | trajectory: 0.305 62 | goal: 0.305 63 | right_knee: 64 | margin_soft_limit_error: 0.5 65 | trajectory: 0.305 66 | goal: 0.305 67 | -------------------------------------------------------------------------------- /march_hardware_interface/config/test_joint_linear/controllers.yaml: -------------------------------------------------------------------------------- 1 | march: 2 | controller: 3 | joint_state: 4 | type: joint_state_controller/JointStateController 5 | publish_rate: 50 6 | temperature_sensor: 7 | type: march_temperature_sensor_controller/MarchTemperatureSensorController 8 | publish_rate: 50 9 | pdb_state: 10 | type: march_pdb_state_controller/MarchPdbStateController 11 | publish_rate: 50 12 | trajectory: 13 | type: position_controllers/JointTrajectoryController 14 | # When you switch to effort actuationmode, 'position_controllers' must be substituted with 'effort_controllers' and the gains must be added 15 | joints: 16 | - linear_joint 17 | # gains: # Required because we're controlling an effort interface 18 | # test_joint: {p: 50, i: 0, d: 10, i_clamp: 10, publish_state: true, antiwindup: true} 19 | # Note: these gains are tuned for the KFE joints in the exoskeleton 20 | 21 | constraints: 22 | linear_joint: 23 | margin_soft_limit_error: 0.5 24 | trajectory: 0.305 25 | goal: 0.305 26 | -------------------------------------------------------------------------------- /march_hardware_interface/config/test_joint_rotational/controllers.yaml: -------------------------------------------------------------------------------- 1 | march: 2 | controller: 3 | joint_state: 4 | type: joint_state_controller/JointStateController 5 | publish_rate: 50 6 | temperature_sensor: 7 | type: march_temperature_sensor_controller/MarchTemperatureSensorController 8 | publish_rate: 50 9 | pdb_state: 10 | type: march_pdb_state_controller/MarchPdbStateController 11 | publish_rate: 50 12 | trajectory: 13 | type: effort_controllers/JointTrajectoryController 14 | joints: 15 | - rotational_joint 16 | constraints: 17 | rotational_joint: 18 | margin_soft_limit_error: 0.5 19 | trajectory: 0.305 20 | goal: 0.305 21 | gains: # Required because we're controlling an effort interface 22 | rotational_joint: {p: 150, i: 0, d: 10, i_clamp: 100, publish_state: true, antiwindup: true} 23 | -------------------------------------------------------------------------------- /march_hardware_interface/docs/Doxyfile: -------------------------------------------------------------------------------- 1 | # Doxyfile 1.8.11 2 | 3 | # Explanation for each setting here http://www.doxygen.nl/manual/config.html. 4 | 5 | DOXYFILE_ENCODING = UTF-8 6 | PROJECT_NAME = "Hardware Interface" 7 | PROJECT_BRIEF = 8 | OUTPUT_DIRECTORY = NOTE: Will be overwritten by doc.sh 9 | EXTRACT_ALL = YES 10 | EXTRACT_PRIVATE = YES 11 | EXTRACT_PACKAGE = YES 12 | EXTRACT_STATIC = YES 13 | EXTRACT_LOCAL_METHODS = YES 14 | INPUT = ../src pages 15 | RECURSIVE = YES 16 | EXCLUDE = 17 | GENERATE_TREEVIEW = YES 18 | GENERATE_LATEX = NO 19 | GENERATE_XML = NO 20 | 21 | INLINE_SOURCES = YES -------------------------------------------------------------------------------- /march_hardware_interface/docs/pages/mainpage.dox: -------------------------------------------------------------------------------- 1 | /** @mainpage March Hardware Interface 2 | * @section introduction Introduction 3 | * This package serves as the bridge between the march_hardware package and ros_control. 4 | * 5 | * Most of this package was directly implemented from 6 | * 7 | * this tutorial. 8 | * If you want to understand how this package works, it is highly suggested to follow that tutorial first. 9 | * 10 | * @section features Features 11 | * - Parse .yaml files to set configure ros_control limits and controllers. 12 | * - Easily switch between different types of controllers for each joint. 13 | * - Publish joint states of the exoskeleton. 14 | * - Create a command topic for each controller. 15 | * 16 | * @section how_to_use How to use 17 | * To launch, run the following command: 18 | * @verbatim roslaunch march_hardware_interface march_controllers.launch @endverbatim 19 | * This launchfile does a few things: 20 | * - Load the hardware settings, controller settings and joint limits to the parameter server. 21 | * - Start the march_hardware_interface_node.cpp. 22 | * - Launch the controller spawner to spawn all controllers given as arguments in the launchfile. 23 | 24 | * Depending on what controllers you are using, you can now send specific commands to a topic to trigger them. 25 | * @verbatim /march/controller///command @endverbatim 26 | * Which controllers exist and their input can be found on the ros wiki. 27 | * 28 | * @section tutorials Tutorials 29 | * 30 | 31 | * @subsection add_controller Add a new controller 32 | * To add a new controller, simply edit the controllers.yaml file and add a configuration. 33 | * Some examples can be found 34 | * 35 | * here and here. 36 | * 37 | * To load the controller, add it to the `args` of the controller spawner node in `march_controllers.launch`. 38 | * 39 | * @subsection add_joint Add a new joint 40 | * - Add the joint to the list in the hardware.yaml file. 41 | * - Add joint_limits in joint_limits.yaml specified by the joint you want to add. 42 | * 43 | * Your joint can now be used as a joint in a controller. Of course you still need to add a controller for this joint 44 | * as described above. 45 | */ 46 | -------------------------------------------------------------------------------- /march_hardware_interface/include/march_hardware_interface/march_temperature_sensor_interface.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March 2 | 3 | #ifndef MARCH_HARDWARE_INTERFACE_MARCH_TEMPERATURE_SENSOR_INTERFACE_H 4 | #define MARCH_HARDWARE_INTERFACE_MARCH_TEMPERATURE_SENSOR_INTERFACE_H 5 | 6 | #include 7 | #include 8 | 9 | class MarchTemperatureSensorHandle 10 | { 11 | public: 12 | MarchTemperatureSensorHandle(const std::string& name, ///< The name of joint 13 | const double* temperature, ///< A pointer of the temperature in degrees celsius. 14 | const double* variance ///< A pointer to the storage of the temperature covariance. 15 | ) 16 | : name_(name), temperature_(temperature), variance(variance) 17 | { 18 | } 19 | 20 | std::string getName() const 21 | { 22 | return name_; 23 | } 24 | 25 | const double* getTemperature() const 26 | { 27 | return temperature_; 28 | } 29 | 30 | const double* getVariance() const 31 | { 32 | return variance; 33 | } 34 | 35 | private: 36 | std::string name_; 37 | 38 | const double* temperature_; 39 | const double* variance; 40 | }; 41 | 42 | class MarchTemperatureSensorInterface : public hardware_interface::HardwareResourceManager 43 | { 44 | }; 45 | 46 | #endif // MARCH_HARDWARE_INTERFACE_MARCH_TEMPERATURE_SENSOR_INTERFACE_H 47 | -------------------------------------------------------------------------------- /march_hardware_interface/include/march_hardware_interface/power_net_on_off_command.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March 2 | #ifndef MARCH_HARDWARE_INTERFACE_POWERNETONOFFCOMMAND_H 3 | #define MARCH_HARDWARE_INTERFACE_POWERNETONOFFCOMMAND_H 4 | 5 | #include 6 | 7 | class PowerNetOnOffCommand 8 | { 9 | PowerNetType type_; 10 | bool on_or_off_; 11 | int net_number_; 12 | 13 | public: 14 | PowerNetOnOffCommand() 15 | { 16 | reset(); 17 | } 18 | 19 | void reset() 20 | { 21 | type_ = PowerNetType(); 22 | on_or_off_ = false; 23 | net_number_ = -1; 24 | } 25 | 26 | PowerNetOnOffCommand(const PowerNetType type, bool on_or_off, int net_number) 27 | : type_(type), on_or_off_(on_or_off), net_number_(net_number) 28 | { 29 | } 30 | 31 | const PowerNetType getType() const 32 | { 33 | return type_; 34 | } 35 | bool isOnOrOff() const 36 | { 37 | return on_or_off_; 38 | } 39 | int getNetNumber() const 40 | { 41 | return net_number_; 42 | } 43 | 44 | /** @brief Override stream operator for clean printing */ 45 | friend ::std::ostream& operator<<(std::ostream& os, const PowerNetOnOffCommand& powerNetOnOffCommand) 46 | { 47 | return os << "PowerNetOnOffCommand(isOnOrOff: " << powerNetOnOffCommand.isOnOrOff() 48 | << ", netNumber:" << powerNetOnOffCommand.getNetNumber() << ", type: " << powerNetOnOffCommand.getType() 49 | << ")"; 50 | } 51 | }; 52 | 53 | #endif // MARCH_HARDWARE_INTERFACE_POWERNETONOFFCOMMAND_H 54 | -------------------------------------------------------------------------------- /march_hardware_interface/include/march_hardware_interface/power_net_type.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #ifndef MARCH_HARDWARE_INTERFACE_POWERNETTYPE_H 3 | #define MARCH_HARDWARE_INTERFACE_POWERNETTYPE_H 4 | #include 5 | #include 6 | 7 | class PowerNetType 8 | { 9 | public: 10 | enum Value : int 11 | { 12 | undefined = 0, 13 | high_voltage = 1, 14 | low_voltage = 2 15 | }; 16 | 17 | PowerNetType() 18 | { 19 | value = undefined; 20 | } 21 | 22 | explicit PowerNetType(const std::string& name) 23 | { 24 | if (name == "high_voltage") 25 | { 26 | this->value = high_voltage; 27 | } 28 | else if (name == "low_voltage") 29 | { 30 | this->value = low_voltage; 31 | } 32 | else 33 | { 34 | ROS_ASSERT_MSG(false, "Unknown power net type %s", name.c_str()); 35 | this->value = undefined; 36 | } 37 | } 38 | 39 | bool operator==(PowerNetType a) const 40 | { 41 | return value == a.value; 42 | } 43 | bool operator!=(PowerNetType a) const 44 | { 45 | return value != a.value; 46 | } 47 | 48 | bool operator==(int a) const 49 | { 50 | return value == a; 51 | } 52 | bool operator!=(int a) const 53 | { 54 | return value != a; 55 | } 56 | 57 | /** @brief Override stream operator for clean printing */ 58 | friend ::std::ostream& operator<<(std::ostream& os, const PowerNetType& powerNetType) 59 | { 60 | if (powerNetType.value == high_voltage) 61 | { 62 | return os << "PowerNetType(type:HighVoltage)"; 63 | } 64 | else if (powerNetType.value == low_voltage) 65 | { 66 | return os << "PowerNetType(type:LowVoltage)"; 67 | } 68 | else 69 | { 70 | return os << "PowerNetType(type:Undefined)"; 71 | } 72 | } 73 | 74 | private: 75 | Value value; 76 | }; 77 | 78 | #endif // MARCH_HARDWARE_INTERFACE_POWERNETTYPE_H 79 | -------------------------------------------------------------------------------- /march_hardware_interface/launch/hardware.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /march_hardware_interface/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | march_hardware_interface 5 | 0.0.0 6 | A bridge between ros_control and the march_hardware 7 | 8 | Project March 9 | 10 | TODO 11 | 12 | catkin 13 | 14 | controller_manager 15 | joint_limits_interface 16 | joint_state_controller 17 | joint_trajectory_controller 18 | march_description 19 | march_hardware 20 | march_hardware_builder 21 | march_shared_resources 22 | realtime_tools 23 | roscpp 24 | std_msgs 25 | urdf 26 | 27 | ethercat_grant 28 | robot_state_publisher 29 | xacro 30 | 31 | code_coverage 32 | rosunit 33 | 34 | -------------------------------------------------------------------------------- /march_hardware_interface/src/march_hardware_interface_node.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #include "march_hardware_interface/march_hardware_interface.h" 3 | 4 | #include 5 | 6 | #include 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | std::unique_ptr build(AllowedRobot robot); 14 | 15 | int main(int argc, char** argv) 16 | { 17 | ros::init(argc, argv, "march_hardware_interface"); 18 | ros::NodeHandle nh; 19 | ros::AsyncSpinner spinner(2); 20 | 21 | if (argc < 2) 22 | { 23 | ROS_FATAL("Missing robot argument\nusage: march_hardware_interface_node ROBOT"); 24 | return 1; 25 | } 26 | AllowedRobot selected_robot = AllowedRobot(argv[1]); 27 | ROS_INFO_STREAM("Selected robot: " << selected_robot); 28 | 29 | bool reset_imc = ros::param::param("~reset_imc", false); 30 | 31 | spinner.start(); 32 | 33 | MarchHardwareInterface march(build(selected_robot), reset_imc); 34 | 35 | try 36 | { 37 | bool success = march.init(nh, nh); 38 | if (!success) 39 | { 40 | std::exit(1); 41 | } 42 | } 43 | catch (const std::exception& e) 44 | { 45 | ROS_FATAL("Hardware interface caught an exception during init"); 46 | ROS_FATAL("%s", e.what()); 47 | std::exit(1); 48 | } 49 | 50 | controller_manager::ControllerManager controller_manager(&march, nh); 51 | ros::Time last_update_time = ros::Time::now(); 52 | 53 | while (ros::ok()) 54 | { 55 | try 56 | { 57 | march.waitForPdo(); 58 | 59 | const ros::Time now = ros::Time::now(); 60 | ros::Duration elapsed_time = now - last_update_time; 61 | last_update_time = now; 62 | 63 | march.read(now, elapsed_time); 64 | march.validate(); 65 | controller_manager.update(now, elapsed_time); 66 | march.write(now, elapsed_time); 67 | } 68 | catch (const std::exception& e) 69 | { 70 | ROS_FATAL("Hardware interface caught an exception during update"); 71 | ROS_FATAL("%s", e.what()); 72 | return 1; 73 | } 74 | } 75 | 76 | return 0; 77 | } 78 | 79 | std::unique_ptr build(AllowedRobot robot) 80 | { 81 | HardwareBuilder builder(robot); 82 | try 83 | { 84 | return builder.createMarchRobot(); 85 | } 86 | catch (const std::exception& e) 87 | { 88 | ROS_FATAL("Hardware interface caught an exception during building hardware"); 89 | ROS_FATAL("%s", e.what()); 90 | std::exit(1); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /march_hardware_interface/test/test_runner.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #include 3 | 4 | int main(int argc, char** argv) 5 | { 6 | testing::InitGoogleTest(&argc, argv); 7 | return RUN_ALL_TESTS(); 8 | } 9 | -------------------------------------------------------------------------------- /march_imu_manager/include/march_imu_manager/mtw.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | #include 9 | #include 10 | 11 | class Mtw : public XsCallback 12 | { 13 | public: 14 | Mtw(XsDevice* device, size_t max_buffer_size = 100); 15 | 16 | /** 17 | * Returns whether any new packets are available. 18 | */ 19 | bool dataAvailable(); 20 | 21 | /** 22 | * Returns the oldest packet received from the MTw. 23 | * Does not delete it. 24 | */ 25 | const XsDataPacket* getOldestPacket(); 26 | 27 | /** 28 | * Deletes the oldest packet received from the MTw. 29 | */ 30 | void deleteOldestPacket(); 31 | 32 | /** 33 | * Returns the device id of the MTw. This id can also be found on the 34 | * back of the device. 35 | */ 36 | const XsDeviceId getId() const; 37 | 38 | protected: 39 | /** 40 | * Callback when new packets are available. This runs in a seperate 41 | * thread and only stores the packets in the buffer. 42 | */ 43 | virtual void onLiveDataAvailable(XsDevice* device, const XsDataPacket* packet); 44 | 45 | private: 46 | /** 47 | * Configures the MTw to output orientation, velocity and acceleration. 48 | */ 49 | void configure(); 50 | 51 | std::mutex mutex_; 52 | 53 | XsDevice* device_; 54 | 55 | size_t max_buffer_size_; 56 | std::deque packet_buffer_; 57 | }; 58 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | DisableFormat: true 3 | SortIncludes: false 4 | ... 5 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xdainfo.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XDAINFO_H 16 | #define XDAINFO_H 17 | 18 | #include "xdaconfig.h" 19 | 20 | struct XsVersion; 21 | struct XsString; 22 | 23 | #ifdef __cplusplus 24 | extern "C" { 25 | #endif 26 | 27 | XDA_DLL_API void xdaVersion(struct XsVersion* version); 28 | XDA_DLL_API void xdaSetLogPath(const struct XsString* path); 29 | XDA_DLL_API void xdaTerminate(); 30 | 31 | #ifdef __cplusplus 32 | } 33 | #endif 34 | 35 | #endif // file guard 36 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsaccesscontrolmode.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSACCESSCONTROLMODE_H 16 | #define XSACCESSCONTROLMODE_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | //! Device access control modes (XsDevice::setAccessControlMode()) 22 | enum XsAccessControlMode { 23 | XACM_None = -1 //!< No access control mode defined 24 | ,XACM_BlackList = 0 //!< Accept all device connections, explicit rejection through blacklist 25 | ,XACM_WhiteList = 1 //!< Decline all device connections, explicit acceptance through whitelist 26 | }; 27 | /*! @} */ 28 | typedef enum XsAccessControlMode XsAccessControlMode; 29 | 30 | #endif // file guard 31 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsalignmentframe.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSALIGNMENTFRAME_H 16 | #define XSALIGNMENTFRAME_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | /*! \brief Alignment frame. 22 | */ 23 | enum XsAlignmentFrame { 24 | XAF_Sensor, 25 | XAF_Local 26 | }; 27 | /*! @} */ 28 | typedef enum XsAlignmentFrame XsAlignmentFrame; 29 | 30 | #endif // file guard 31 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsanalogindata.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSANALOGINDATA_H 16 | #define XSANALOGINDATA_H 17 | 18 | #include "pstdint.h" 19 | 20 | /*! \brief Data from analog inputs from sensors. */ 21 | struct XsAnalogInData { 22 | uint16_t m_data; /*!< \brief The data */ 23 | #ifdef __cplusplus 24 | /*! \brief Construct a nulled analog data item */ 25 | inline XsAnalogInData() : m_data(0) 26 | {} 27 | 28 | /*! \brief Construct analog-data with value \a data */ 29 | inline XsAnalogInData(uint16_t data) : m_data(data) 30 | {} 31 | 32 | /*! \brief Equality comparison */ 33 | inline bool operator == (XsAnalogInData const& other) const 34 | { 35 | return m_data == other.m_data; 36 | } 37 | #endif 38 | }; 39 | typedef struct XsAnalogInData XsAnalogInData; 40 | 41 | #endif // file guard 42 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsbaudcode.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSBAUDCODE_H 16 | #define XSBAUDCODE_H 17 | 18 | /*! \brief Internal baud rate configuration codes 19 | */ 20 | 21 | enum XSNOCOMEXPORT XsBaudCode { 22 | // Baudrate codes for SetBaudrate message 23 | XBC_4k8 = 0x0B, //!< 4k8 (4800 bps) 24 | XBC_9k6 = 0x09, //!< 9k6 (9600 bps) 25 | // XBC_14k4 = 0x08, 26 | XBC_19k2 = 0x07, //!< 19k2 (19200 bps) 27 | // XBC_28k8 = 0x06, 28 | XBC_38k4 = 0x05, //!< 38k4 (38400 bps) 29 | XBC_57k6 = 0x04, //!< 57k6 (57600 bps) 30 | // XBC_76k8 = 0x03, 31 | XBC_115k2 = 0x02, //!< 115k2 (115200 bps) 32 | XBC_230k4 = 0x01, //!< 230k4 (230400 bps) 33 | XBC_460k8 = 0x00, //!< 460k8 (460800 bps) 34 | XBC_921k6 = 0x0A, //!< 921k6 (921600 bps). Only usable from MTi/x FW 2.4.6 35 | XBC_921k6Legacy = 0x80, //!< 921k6 (921600 bps) 36 | XBC_2MegaBaud = 0x0C, //!< 2000k0 (2000000 bps) 37 | XBC_3_5MegaBaud = 0x0E, //!< 3500k0 (3500000 bps) 38 | XBC_4MegaBaud = 0x0D, //!< 4000k0 (4000000 bps) 39 | XBC_Invalid = 0xFF //!< Not a valid baud rate 40 | }; 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsbusid.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSBUSID_H 16 | #define XSBUSID_H 17 | 18 | /*! \addtogroup cinterface C Interface 19 | @{ 20 | */ 21 | 22 | /*! \brief The bus identifier of the master device */ 23 | #define XS_BID_MASTER 0xFF 24 | 25 | /*! \brief The bus broadcast bus identifier (all devices) */ 26 | #define XS_BID_BROADCAST 0x00 27 | 28 | /*! \brief The bus identifier for the first MT on the bus */ 29 | #define XS_BID_MT 0x01 30 | 31 | /*! \brief An invalid bus identifier 32 | \note This value may change between API releases as it is not strictly part of the Xbus protocol but only used internally 33 | */ 34 | #define XS_BID_INVALID 0xFD 35 | 36 | /*! \brief A dynamic bus identifier */ 37 | #define XS_BID_DYNAMIC 0xFE 38 | 39 | /*! @} */ 40 | 41 | #endif // file guard 42 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xscalibrateddatamode.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSCALIBRATEDDATAMODE_H 16 | #define XSCALIBRATEDDATAMODE_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | /*! \brief Legacy calibrated data output selection flags */ 22 | enum XsCalibratedDataMode { 23 | XCDM_None = 0, 24 | XCDM_Acceleration = (1 << 0), 25 | XCDM_GyroscopeData = (1 << 1), 26 | XCDM_MagneticField = (1 << 2), 27 | 28 | XCDM_AccGyr = XCDM_Acceleration|XCDM_GyroscopeData, 29 | XCDM_AccMag = XCDM_Acceleration|XCDM_MagneticField, 30 | XCDM_GyrMag = XCDM_GyroscopeData|XCDM_MagneticField, 31 | 32 | XCDM_All = XCDM_Acceleration|XCDM_GyroscopeData|XCDM_MagneticField 33 | }; 34 | /*! @} */ 35 | typedef enum XsCalibratedDataMode XsCalibratedDataMode; 36 | 37 | #endif // file guard 38 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsconnectivitystate.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSCONNECTIVITYSTATE_H 16 | #define XSCONNECTIVITYSTATE_H 17 | 18 | #include "xdaconfig.h" 19 | 20 | /*! \addtogroup enums Global enumerations 21 | @{ 22 | */ 23 | /*! \brief XsDevice connectivity state identifiers */ 24 | enum XsConnectivityState { 25 | XCS_Disconnected, /*!< Device has disconnected, only limited informational functionality is available. */ 26 | XCS_Rejected, /*!< Device has been rejected and is disconnected, only limited informational functionality is available. */ 27 | XCS_PluggedIn, /*!< Device is connected through a cable. */ 28 | XCS_Wireless, /*!< Device is connected wirelessly. */ 29 | XCS_File, /*!< Device is reading from a file. */ 30 | XCS_Unknown, /*!< Device is in an unknown state. */ 31 | }; 32 | 33 | /*! @} */ 34 | typedef enum XsConnectivityState XsConnectivityState; 35 | 36 | #ifdef __cplusplus 37 | extern "C" { 38 | #endif 39 | 40 | /*! \brief Convert the device state to a human readable string */ 41 | XDA_DLL_API const char *XsConnectivityState_toString(XsConnectivityState s); 42 | 43 | #ifdef __cplusplus 44 | } // extern "C" 45 | 46 | #ifndef XSENS_NO_STL 47 | namespace std { 48 | template 49 | basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& o, XsConnectivityState const& xs) 50 | { 51 | return (o << XsConnectivityState_toString(xs)); 52 | } 53 | } 54 | #endif 55 | #endif 56 | 57 | #endif // file guard 58 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xscontrolline.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSCONTROLLINE_H 16 | #define XSCONTROLLINE_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | /*! \brief Serial control lines. */ 22 | enum XsControlLine { 23 | XCL_DCD = 0x0001, //!< pin 1: Carrier Detect 24 | XCL_RD = 0x0002, //!< pin 2: Received Data 25 | XCL_TD = 0x0004, //!< pin 3: Transmitted Data 26 | XCL_DTR = 0x0008, //!< pin 4: Data Terminal Ready 27 | XCL_GND = 0x0010, //!< pin 5: Common Ground 28 | XCL_DSR = 0x0020, //!< pin 6: Data Set Ready 29 | XCL_RTS = 0x0040, //!< pin 7: Request To Send 30 | XCL_CTS = 0x0080, //!< pin 8: Clear To Send 31 | XCL_RI = 0x0100 //!< pin 9: Ring Indicator 32 | }; 33 | /*! @} */ 34 | typedef enum XsControlLine XsControlLine; 35 | 36 | #endif // file guard 37 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xscoordinatesystem.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSCOORDINATESYSTEM_H 16 | #define XSCOORDINATESYSTEM_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | /*! \brief Coordinate system definition flags */ 22 | enum XsCoordinateSystem { 23 | CS_NorthWestUp, 24 | CS_NorthEastDown, 25 | }; 26 | /*! @} */ 27 | typedef enum XsCoordinateSystem XsCoordinateSystem; 28 | 29 | #endif // file guard 30 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xscopy.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSCOPY_H 16 | #define XSCOPY_H 17 | 18 | #define XSLISTCOPY(C) \ 19 | if (copy == thisPtr)\ 20 | {\ 21 | return;\ 22 | }\ 23 | C##_assign(copy, thisPtr->m_size, thisPtr->m_data); 24 | 25 | #define XSLISTSWAP3(C, B, S) \ 26 | if ((!a->m_data || (a->m_flags & XSDF_Managed)) && (!b->m_data || (b->m_flags & XSDF_Managed))) {\ 27 | B tmp;\ 28 | *((C**) &tmp.m_data) = a->m_data;\ 29 | *((XsSize*) &tmp.m_size) = a->m_size;\ 30 | *((int*) &tmp.m_flags) = a->m_flags;\ 31 | *((C**) &a->m_data) = b->m_data;\ 32 | *((XsSize*) &a->m_size) = b->m_size;\ 33 | *((int*) &a->m_flags) = b->m_flags;\ 34 | *((C**) &b->m_data) = tmp.m_data;\ 35 | *((XsSize*) &b->m_size) = tmp.m_size;\ 36 | *((int*) &b->m_flags) = tmp.m_flags;\ 37 | } else { /* elementwise swap */ \ 38 | XsSize i;\ 39 | assert(a->m_size == b->m_size);\ 40 | for (i = 0; i < a->m_size; ++i) S(&a->m_data[i], &b->m_data[i]);\ 41 | } 42 | 43 | #define XSLISTSWAP2(C, B) XSLISTSWAP3(C, B, C##_swap) 44 | 45 | #define XSLISTSWAP(C) XSLISTSWAP2(C, C##List) 46 | 47 | #endif // file guard 48 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsdataformat.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSDATAFORMAT_H 16 | #define XSDATAFORMAT_H 17 | 18 | #include "xstypesconfig.h" 19 | #include "xsoutputmode.h" 20 | #include "xsoutputsettings.h" 21 | 22 | /*! \brief A structure for storing data formats. */ 23 | struct XsDataFormat { 24 | XsOutputMode m_outputMode; //!< The stored output mode 25 | XsOutputSettings m_outputSettings; //!< The stored output settings 26 | 27 | #ifdef __cplusplus 28 | /*! \brief Construct an XsDataFormat specifier 29 | 30 | \param mode the outputmode 31 | \param settings the output settings 32 | */ 33 | inline explicit XsDataFormat(const XsOutputMode mode = XS_DEFAULT_OUTPUT_MODE, const XsOutputSettings settings = XS_DEFAULT_OUTPUT_SETTINGS) 34 | : m_outputMode(mode), m_outputSettings(settings) {} 35 | 36 | //! Copy constructor 37 | inline XsDataFormat(const XsDataFormat& other) : m_outputMode(other.m_outputMode), m_outputSettings(other.m_outputSettings) {} 38 | 39 | //! Assignment operator 40 | inline const XsDataFormat& operator = (const XsDataFormat& other) 41 | { 42 | //lint --e{1529} assignment to self ok 43 | m_outputMode = other.m_outputMode; 44 | m_outputSettings = other.m_outputSettings; 45 | return *this; 46 | } 47 | 48 | //! Equality operator 49 | inline bool operator == (const XsDataFormat& other) const 50 | { 51 | return m_outputMode == other.m_outputMode && m_outputSettings == other.m_outputSettings; 52 | } 53 | #endif 54 | }; 55 | 56 | #endif // file guard 57 | 58 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsdebugcounters.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSDEBUGCOUNTERS_H 16 | #define XSDEBUGCOUNTERS_H 17 | 18 | #include "xsatomicint.h" 19 | 20 | // These counters are only available in the non-public version of the XsTypes library 21 | // For the public version, they will all always have a 0 value. 22 | 23 | #ifdef __cplusplus 24 | extern "C" { 25 | #endif 26 | 27 | extern XsAtomicInt XSTYPES_DLL_API XsVector_allocCount; 28 | extern XsAtomicInt XSTYPES_DLL_API XsVector_freeCount; 29 | 30 | extern XsAtomicInt XSTYPES_DLL_API XsMatrix_allocCount; 31 | extern XsAtomicInt XSTYPES_DLL_API XsMatrix_freeCount; 32 | 33 | extern XsAtomicInt XSTYPES_DLL_API XsArray_allocCount; 34 | extern XsAtomicInt XSTYPES_DLL_API XsArray_freeCount; 35 | 36 | #ifdef __cplusplus 37 | } // extern "C" 38 | #endif 39 | 40 | #endif 41 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsdeviceidlist.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSDEVICEIDLIST_H 16 | #define XSDEVICEIDLIST_H 17 | 18 | #include "xsdeviceidarray.h" 19 | 20 | #define XsDeviceIdList XsDeviceIdArray 21 | 22 | #ifndef __cplusplus 23 | // obsolete: 24 | #define XSDEVICEIDLIST_INITIALIZER XSDEVICEIDARRAY_INITIALIZER 25 | #define XsDeviceIdList_construct(thisPtr, sz, src) XsDeviceIdArray_construct(thisPtr, sz, src) 26 | #define XsDeviceIdList_assign(thisPtr, sz, src) XsArray_assign(thisPtr, sz, src) 27 | #define XsDeviceIdList_destruct(thisPtr) XsArray_destruct(thisPtr) 28 | #define XsDeviceIdList_copy(thisPtr, copy) XsArray_copy(copy, thisPtr) 29 | #define XsDeviceIdList_append(thisPtr, other) XsArray_append(thisPtr, other) 30 | #define XsDeviceIdList_popFront(thisPtr, count) XsArray_erase(thisPtr, 0, count) 31 | #define XsDeviceIdList_popBack(thisPtr, count) XsArray_erase(thisPtr, (XsSize)-1, count) 32 | #define XsDeviceIdList_swap(a, b) XsArray_swap(a, b) 33 | #define XsDeviceIdList_erase(thisPtr, index, count) XsArray_erase(thisPtr, index, count) 34 | 35 | #endif 36 | #endif // file guard 37 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsdeviceoptionflag.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSDEVICEOPTIONFLAG_H 16 | #define XSDEVICEOPTIONFLAG_H 17 | 18 | /*! Used to enable or disable some device options 19 | \sa XsDevice::setOptionFlags 20 | */ 21 | enum XsDeviceOptionFlag 22 | { 23 | XDOF_DisableAutoStore = 0x00000001, 24 | XDOF_DisableAutoMeasurement = 0x00000002, 25 | 26 | XDOF_EnableGpsBeidou = 0x00000004, 27 | XDOF_DisableGps = 0x00000008, 28 | 29 | XDOF_EnableMagAidedVru = 0x00000010, 30 | 31 | XDOF_None = 0x00000000, 32 | XDOF_All = 0xFFFFFFFF 33 | }; 34 | 35 | typedef enum XsDeviceOptionFlag XsDeviceOptionFlag; 36 | 37 | #endif // file guard 38 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsdeviceptr.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSDEVICEPTR_H 16 | #define XSDEVICEPTR_H 17 | 18 | struct XsDevice; 19 | 20 | /*! \brief A pointer to an XsDevice object 21 | * 22 | * For more information about the availability of the XsDevice member functions, 23 | * please refer to \ref cinterfaceavailability or \ref cppinterfaceavailability. 24 | */ 25 | typedef struct XsDevice* XsDevicePtr; 26 | 27 | #endif // file guard 28 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsdeviceptrlist.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSDEVICEPTRLIST_H 16 | #define XSDEVICEPTRLIST_H 17 | 18 | #include "xsdeviceptrarray.h" 19 | #define XsDevicePtrList XsDevicePtrArray 20 | 21 | #ifndef __cplusplus 22 | 23 | #define XSDEVICEPTRLIST_INITIALIZER XSDEVICEPTRARRAY_INITIALIZER 24 | 25 | #define XsDevicePtrList_assign(thisPtr, size, src) XsArray_assign(thisPtr, size, src) 26 | #define XsDevicePtrList_construct(thisPtr, size, src) XsDevicePtrArray_construct(thisPtr, size, src) 27 | #define XsDevicePtrList_destruct(thisPtr) XsArray_destruct(thisPtr) 28 | #define XsDevicePtrList_copy(thisPtr, copy) XsArray_copy(copy, thisPtr) 29 | #define XsDevicePtrList_append(thisPtr, other) XsArray_append(thisPtr, other) 30 | #define XsDevicePtrList_popFront(thisPtr, count) XsArray_erase(thisPtr, 0, count) 31 | #define XsDevicePtrList_popBack(thisPtr, count) XsArray_erase(thisPtr, (XsSize)-1, count) 32 | #define XsDevicePtrList_swap(a, b) XsArray_swap(a, b) 33 | #define XsDevicePtrList_erase(thisPtr, index, count) XsArray_erase(thisPtr, index, count) 34 | 35 | #endif 36 | #endif // file guard 37 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xserrormode.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSERRORMODE_H 16 | #define XSERRORMODE_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | /*! \brief Error modes for use in XsDevice::setErrorMode 22 | \sa XsDevice::setErrorMode \sa XsDevice::errorMode 23 | */ 24 | enum XsErrorMode { 25 | XEM_Ignore = 0x0000 //!< Ignore all errors without warning 26 | ,XEM_IncreasePacketCounter = 0x0001 //!< Increase packet counter when an error occurs, resulting in gaps in the packet counter 27 | ,XEM_IncreasePacketCounterAndSendError = 0x0002 //!< Increase packet counter when an error occurs, resulting in gaps in the packet counter and send an explicit error message 28 | ,XEM_SendErrorAndGoToConfig = 0x0003 //!< Abort measuring and send an error message 29 | ,XEM_Invalid //!< No error mode available (non-Xbus Master devices) 30 | }; 31 | /*! @} */ 32 | typedef enum XsErrorMode XsErrorMode; 33 | 34 | #endif // file guard 35 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsfilepos.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSFILEPOS_H 16 | #define XSFILEPOS_H 17 | 18 | /*! \addtogroup cinterface C Interface 19 | @{ 20 | */ 21 | 22 | /*! \typedef XsFilePos 23 | \brief The type that is used for positioning inside a file 24 | */ 25 | /*! \typedef XsIoHandle 26 | \brief The type that is used for low-level identification of an open I/O device 27 | */ 28 | /*! \typedef XsFileHandle 29 | \brief The type that is used for low-level identification of an open file 30 | */ 31 | 32 | /*! @} */ 33 | 34 | #include 35 | #ifdef _WIN32 36 | #ifndef _PSTDINT_H_INCLUDED 37 | # include "pstdint.h" 38 | #endif 39 | typedef __int64 XsFilePos; 40 | #ifndef HANDLE 41 | # include 42 | #endif 43 | typedef HANDLE XsIoHandle; 44 | #else 45 | #include 46 | /* off_t is practically guaranteed not to be 64 bits on non64 bit systems. 47 | We'd better explicitly use __off64_t to be sure of it's size. 48 | */ 49 | #if defined(__off64_t_defined) 50 | typedef __off64_t XsFilePos; 51 | #else 52 | typedef int64_t XsFilePos; 53 | #endif 54 | typedef int32_t XsIoHandle; 55 | #endif 56 | typedef FILE XsFileHandle; 57 | 58 | #endif // file guard 59 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsfilterprofilelist.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSFILTERPROFILELIST_H 16 | #define XSFILTERPROFILELIST_H 17 | 18 | #include "xsfilterprofilearray.h" 19 | #define XsFilterProfileList XsFilterProfileArray 20 | 21 | #ifndef __cplusplus 22 | 23 | #define XSFILTERPROFILELIST_INITIALIZER XSFILTERPROFILEARRAY_INITIALIZER 24 | 25 | #define XsFilterProfileList_assign(thisPtr, size, src) XsArray_assign(thisPtr, size, src) 26 | #define XsFilterProfileList_construct(thisPtr, size, src) XsFilterProfileArray_construct(thisPtr, size, src) 27 | #define XsFilterProfileList_destruct(thisPtr) XsArray_destruct(thisPtr) 28 | #define XsFilterProfileList_copy(thisPtr, copy) XsArray_copy(copy, thisPtr) 29 | #define XsFilterProfileList_append(thisPtr, other) XsArray_append(thisPtr, other) 30 | #define XsFilterProfileList_popFront(thisPtr, count) XsArray_erase(thisPtr, 0, count) 31 | #define XsFilterProfileList_popBack(thisPtr, count) XsArray_erase(thisPtr, (XsSize)-1, count) 32 | #define XsFilterProfileList_swap(a, b) XsArray_swap(a, b) 33 | #define XsFilterProfileList_erase(thisPtr, index, count) XsArray_erase(thisPtr, index, count) 34 | 35 | #endif 36 | #endif // file guard 37 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsfloatformat.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSFLOATFORMAT_H 16 | #define XSFLOATFORMAT_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | /*! \brief Legacy floating point / fixed point format options */ 22 | enum XsFloatFormat { 23 | FF_IEEE754Float, //!< Single precision floating point (IEEE 754) 24 | FF_FixedPoint1220, //!< Fixed point 12.20 format (12 signed bits before decimal, 20 after) 25 | FF_FixedPoint1632 //!< Fixed point 16.32 format (16 signed bits before decimal, 32 after) 26 | }; 27 | /*! @} */ 28 | typedef enum XsFloatFormat XsFloatFormat; 29 | 30 | #endif // file guard 31 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsinforequest.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSINFOREQUEST_H 16 | #define XSINFOREQUEST_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | /*! \brief Information request identifiers 22 | \details These values are used by the XsDevice::requestInfo function and 23 | XsCallback::onInfoResponse functions. 24 | */ 25 | enum XsInfoRequest { 26 | XIR_BatteryLevel = 0, 27 | XIR_GnssSvInfo, 28 | XIR_GpsSvInfo = XIR_GnssSvInfo //!< \deprecated 29 | }; 30 | /*! @} */ 31 | typedef enum XsInfoRequest XsInfoRequest; 32 | 33 | #endif // file guard 34 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsintlist.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSINTLIST_H 16 | #define XSINTLIST_H 17 | 18 | #include "xsintarray.h" 19 | 20 | #define XsIntList XsIntArray 21 | 22 | #ifndef __cplusplus 23 | // obsolete: 24 | #define XSINTLIST_INITIALIZER XsIntArray_INITIALIZER 25 | #define XsIntList_construct(thisPtr, sz, src) XsIntArray_construct(thisPtr, sz, src) 26 | #define XsIntList_assign(thisPtr, sz, src) XsArray_assign(thisPtr, sz, src) 27 | #define XsIntList_destruct(thisPtr) XsArray_destruct(thisPtr) 28 | #define XsIntList_copy(thisPtr, copy) XsArray_copy(copy, thisPtr) 29 | #define XsIntList_append(thisPtr, other) XsArray_append(thisPtr, other) 30 | #define XsIntList_popFront(thisPtr, count) XsArray_erase(thisPtr, 0, count) 31 | #define XsIntList_popBack(thisPtr, count) XsArray_erase(thisPtr, (XsSize)-1, count) 32 | #define XsIntList_swap(a, b) XsArray_swap(a, b) 33 | #define XsIntList_erase(thisPtr, index, count) XsArray_erase(thisPtr, index, count) 34 | #define XsIntList_find(thisPtr, needle) XsArray_find(thisPtr, needle) 35 | 36 | #endif 37 | #endif // file guard 38 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsmalloc.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSMALLOC_H 16 | #define XSMALLOC_H 17 | 18 | #include "xstypesconfig.h" 19 | #include 20 | 21 | #ifdef __cplusplus 22 | extern "C" { 23 | #endif 24 | 25 | XSTYPES_DLL_API void* xsMalloc(size_t sz); 26 | XSTYPES_DLL_API void* xsRealloc(void* ptr, size_t sz); 27 | XSTYPES_DLL_API void xsFree(void* ptr); 28 | 29 | XSTYPES_DLL_API void* xsAlignedMalloc(size_t sz); 30 | XSTYPES_DLL_API void* xsAlignedRealloc(void* ptr, size_t sz); 31 | XSTYPES_DLL_API void xsAlignedFree(void* ptr); 32 | 33 | #ifndef xsMathMalloc 34 | #define xsMathMalloc(n) xsAlignedMalloc(n) 35 | #endif 36 | 37 | #ifndef xsMathRealloc 38 | #define xsMathRealloc(p, n) xsAlignedRealloc(p,n) 39 | #endif 40 | 41 | #ifndef xsMathFree 42 | #define xsMathFree(p) xsAlignedFree(p) 43 | #endif 44 | 45 | #ifdef __cplusplus 46 | } // extern "C" 47 | #endif 48 | 49 | #endif 50 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsmessagelist.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSMESSAGELIST_H 16 | #define XSMESSAGELIST_H 17 | 18 | #include "xsmessagearray.h" 19 | #define XsMessageList XsMessageArray 20 | 21 | #ifndef __cplusplus 22 | // obsolete: 23 | #define XSMESSAGELIST_INITIALIZER XSMESSAGEARRAY_INITIALIZER 24 | #define XsMessageList_assign(thisPtr, size, src) XsArray_assign(thisPtr, size, src) 25 | #define XsMessageList_destruct(thisPtr) XsArray_destruct(thisPtr) 26 | #define XsMessageList_copy(thisPtr, copy) XsArray_copy(copy, thisPtr) 27 | #define XsMessageList_append(thisPtr, other) XsArray_append(thisPtr, other) 28 | #define XsMessageList_popFront(thisPtr, count) XsArray_erase(thisPtr, 0, count) 29 | #define XsMessageList_popBack(thisPtr, count) XsArray_erase(thisPtr, (XsSize) -1, count) 30 | #define XsMessageList_swap(a, b) XsArray_swap(a, b) 31 | #define XsMessageList_erase(thisPtr, index, count) XsArray_erase(thisPtr, index, count) 32 | #endif 33 | 34 | #endif // file guard 35 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsnetworkscanner.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSNETWORKSCANNER_H 16 | #define XSNETWORKSCANNER_H 17 | 18 | #include "xdaconfig.h" 19 | 20 | //lint -esym(534, RegCloseKey) 21 | 22 | struct XsNetworkScanner; 23 | 24 | #ifdef __cplusplus 25 | extern "C" { 26 | #endif 27 | 28 | XDA_DLL_API void XsNetworkScanner_construct(struct XsNetworkScanner* thisPtr); 29 | XDA_DLL_API void XsNetworkScanner_destruct(struct XsNetworkScanner* thisPtr); 30 | 31 | #ifdef __cplusplus 32 | } // extern "C" 33 | 34 | /*! \struct XsNetworkScanner 35 | \brief This class will take care of instantiating/deleting the NetworkScanner and will act as reference Counter 36 | */ 37 | struct XsNetworkScanner { 38 | 39 | /*! \brief Constructor of the class 40 | */ 41 | inline explicit XsNetworkScanner() 42 | { 43 | XsNetworkScanner_construct(this); 44 | } 45 | 46 | /*! \brief Destructor 47 | */ 48 | inline ~XsNetworkScanner() 49 | { 50 | XsNetworkScanner_destruct(this); 51 | } 52 | }; 53 | 54 | #endif 55 | 56 | typedef struct XsNetworkScanner XsNetworkScanner; 57 | 58 | #endif // file guard 59 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsnmeastringtype.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSNMEASTRINGTYPE_H 16 | #define XSNMEASTRINGTYPE_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | //! NMEA string types 22 | enum XsNmeaStringType { 23 | XNST_None = 0x0000 24 | ,XNST_HCHDM = 0x0001 //!< NMEA string with Magnetic Heading 25 | ,XNST_HCHDG = 0x0002 //!< NMEA string with Heading and Magnetic Variation 26 | ,XNST_TSS2 = 0x0004 //!< Proprietry string with Heading, Heave, Roll and Pitch 27 | ,XNST_PHTRO = 0x0008 //!< Proprietry NMEA string with Pitch and Roll 28 | ,XNST_PRDID = 0x0010 //!< Proprietry NMEA string with Pitch, Roll and Heading 29 | ,XNST_EM1000 = 0x0020 //!< Binary format suitable for use with Simrad EM1000 mulitibeam sounders with Roll, Pitch, Heave and Heading 30 | ,XNST_PSONCMS = 0x0040 //!< NMEA string with Xsens Compass Motion Sensor information 31 | ,XNST_HCMTW = 0x0080 //!< NMEA string with (water) Temperature 32 | ,XNST_HEHDT = 0x0100 //!< NMEA string with True Heading 33 | ,XNST_HEROT = 0x0200 //!< NMEA string with Rate of Turn 34 | ,XNST_GPGGA = 0x0400 //!< NMEA string with Global Positioning system fix data 35 | ,XNST_PTCF = 0x0800 //!< NMEA string with motion data 36 | }; 37 | /*! @} */ 38 | typedef enum XsNmeaStringType XsNmeaStringType; 39 | 40 | #endif // file guard 41 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsorientationmode.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSORIENTATIONMODE_H 16 | #define XSORIENTATIONMODE_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | /*! \brief Legacy orientation output mode selection 22 | */ 23 | enum XsOrientationMode { 24 | OM_None, 25 | OM_Euler, 26 | OM_Quaternion, 27 | OM_Matrix 28 | }; 29 | /*! @} */ 30 | typedef enum XsOrientationMode XsOrientationMode; 31 | 32 | #endif // file guard 33 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsoutputconfigurationlist.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSOUTPUTCONFIGURATIONLIST_H 16 | #define XSOUTPUTCONFIGURATIONLIST_H 17 | 18 | #include "xsoutputconfigurationarray.h" 19 | #define XsOutputConfigurationList XsOutputConfigurationArray 20 | 21 | #ifndef __cplusplus 22 | // obsolete: 23 | #define XSOUTPUTCONFIGURATIONLIST_INITIALIZER XSOUTPUTCONFIGURATIONARRAY_INITIALIZER 24 | #define XsOutputConfigurationList_assign(thisPtr, size, src) XsArray_assign(thisPtr, size, src) 25 | #define XsOutputConfigurationList_construct(thisPtr, size, src) XsOutputConfigurationArray_construct(thisPtr, size, src) 26 | #define XsOutputConfigurationList_destruct(thisPtr) XsArray_destruct(thisPtr) 27 | #define XsOutputConfigurationList_copy(thisPtr, copy) XsArray_copy(copy, thisPtr) 28 | #define XsOutputConfigurationList_append(thisPtr, other) XsArray_append(thisPtr, other) 29 | #define XsOutputConfigurationList_popFront(thisPtr, count) XsArray_erase(thisPtr, 0, count) 30 | #define XsOutputConfigurationList_popBack(thisPtr, count) XsArray_erase(thisPtr, (XsSize)-1, count) 31 | #define XsOutputConfigurationList_swap(a, b) XsArray_swap(a, b) 32 | #define XsOutputConfigurationList_erase(thisPtr, index, count) XsArray_erase(thisPtr, index, count) 33 | #define XsOutputConfigurationList_equal(a, b) XsArray_equal(a, b) 34 | #endif 35 | 36 | #endif // file guard 37 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsplatform.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSPLATFORM_H 16 | #define XSPLATFORM_H 17 | 18 | #include "xstypesconfig.h" 19 | 20 | #ifdef _WIN32 21 | /// microsoft / windows 22 | #include 23 | 24 | #define XsIoHandle HANDLE 25 | 26 | #else 27 | /// gcc / linux 28 | #include 29 | 30 | typedef int32_t XsIoHandle; 31 | 32 | #endif 33 | 34 | #endif // file guard 35 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsportinfolist.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSPORTINFOLIST_H 16 | #define XSPORTINFOLIST_H 17 | 18 | #include "xsportinfoarray.h" 19 | 20 | #define XsPortInfoList XsPortInfoArray 21 | 22 | #ifndef __cplusplus 23 | // obsolete: 24 | #define XSPORTINFOLIST_INITIALIZER XSPORTINFOARRAY_INITIALIZER 25 | #define XsPortInfoList_assign(thisPtr, size, src) XsArray_assign(thisPtr, sz, src) 26 | #define XsPortInfoList_construct(thisPtr, size, src) XsPortInfoArray_construct(thisPtr, size, src) 27 | #define XsPortInfoList_destruct(thisPtr) XsArray_destruct(thisPtr) 28 | #define XsPortInfoList_copy(thisPtr, copy) XsArray_copy(copy, thisPtr) 29 | #define XsPortInfoList_append(thisPtr, other) XsArray_append(thisPtr, other) 30 | #define XsPortInfoList_erase(thisPtr, index, count) XsArray_erase(thisPtr, index, count) 31 | #define XsPortInfoList_swap(a, b) XsArray_swap(a, b) 32 | #endif 33 | 34 | #endif // file guard 35 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsprocessingflag.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSPROCESSINGFLAG_H 16 | #define XSPROCESSINGFLAG_H 17 | 18 | /*! Used to enable or disable some data processing options 19 | \sa XsDevice::setInitialBiasUpdateEnabled 20 | */ 21 | enum XsProcessingFlag { 22 | XPF_EnableInitialGyroBiasUpdate = 0x0001, 23 | XPF_FixedGravity = 0x0002 24 | }; 25 | 26 | 27 | #endif // file guard 28 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsprotocoltype.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSPROTOCOLTYPE_H 16 | #define XSPROTOCOLTYPE_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | //! Protocol types (XsDevice::enableProtocol()) 22 | enum XsProtocolType { 23 | XPT_Xbus = 0 //!< The Xsens Xbus protocol, enabled by default, always 0 24 | ,XPT_Nmea //!< The NMEA protocol, only the messages that can be sent from Xsens devices are recognized 25 | ,XPT_ImarFsas //!< An iMAR FSAS communication protocol 26 | ,XPT_ImarIfog //!< An iMAR iFog communication protocol 27 | }; 28 | /*! @} */ 29 | typedef enum XsProtocolType XsProtocolType; 30 | 31 | #endif // file guard 32 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsrawgpsdop.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSRAWGPSDOP_H 16 | #define XSRAWGPSDOP_H 17 | 18 | #include "pstdint.h" 19 | 20 | #pragma pack(push, 1) 21 | 22 | #ifndef __cplusplus 23 | #define XSRAWGPSDOP_INITIALIZER { 0, 0, 0, 0, 0, 0, 0, 0 } 24 | #endif 25 | 26 | /*! \brief A container for NAV-DOP data 27 | \details DOP values are dimensionless. 28 | All dop values are scaled by a factor of 100. that is, if the unit transmits a value of e.g. 156, 29 | it means that the DOP value is 1.56. 30 | \deprecated 31 | */ 32 | struct XsRawGpsDop 33 | { 34 | uint32_t m_itow; //!< Gps time of week (ms) 35 | uint16_t m_gdop; //!< Geometric DOP 36 | uint16_t m_pdop; //!< Position DOP 37 | uint16_t m_tdop; //!< Time DOP 38 | uint16_t m_vdop; //!< Vertical DOP 39 | uint16_t m_hdop; //!< Horizontal DOP 40 | uint16_t m_ndop; //!< Northing DOP 41 | uint16_t m_edop; //!< Easting DOP 42 | }; 43 | typedef struct XsRawGpsDop XsRawGpsDop; 44 | 45 | #pragma pack(pop) 46 | 47 | #ifdef __cplusplus 48 | inline bool operator == (XsRawGpsDop const& a, XsRawGpsDop const& b) 49 | { 50 | return memcmp(&a, &b, sizeof(XsRawGpsDop)) == 0; 51 | } 52 | #endif 53 | 54 | #endif // file guard 55 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsrawgpstimeutc.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSRAWGPSTIMEUTC_H 16 | #define XSRAWGPSTIMEUTC_H 17 | 18 | #include "pstdint.h" 19 | 20 | #ifdef _MSC_VER 21 | #pragma pack(push, 1) 22 | #endif 23 | 24 | #ifndef __cplusplus 25 | #define XSRAWGPSTIMEUTC_INITIALIZER { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } 26 | #endif 27 | 28 | /*! \brief A container for NAV-TIMEUTC data 29 | \deprecated 30 | */ 31 | struct XsRawGpsTimeUtc 32 | { 33 | uint32_t m_itow; //!< Gps time of week (ms) 34 | uint32_t m_tacc; //!< Time Accuracy Estimate (ns) 35 | int32_t m_nano; //!< Nanoseconds of second, range -500000000 .. 500000000 (UTC) 36 | uint16_t m_year; //!< Year, range 1999..2099 (UTC) 37 | uint8_t m_month; //!< Month, range 1..12 (UTC) 38 | uint8_t m_day; //!< Day of Month, range 1..31 (UTC) 39 | uint8_t m_hour; //!< Hour of Day, range 0..23 (UTC) 40 | uint8_t m_min; //!< Minute of Hour, range 0..59 (UTC) 41 | uint8_t m_sec; //!< Minute of Hour, range 0..59 (UTC) 42 | uint8_t m_valid; /*!< Valid 0x01 = Valid Time of Week 43 | 0x02 = Valid Week Number 44 | 0x04 = Valid UTC (Leap Seconds already known?) 45 | */ 46 | }; 47 | typedef struct XsRawGpsTimeUtc XsRawGpsTimeUtc; 48 | 49 | #ifdef _MSC_VER 50 | #pragma pack(pop) 51 | #endif 52 | 53 | #ifdef __cplusplus 54 | inline bool operator == (XsRawGpsTimeUtc const& a, XsRawGpsTimeUtc const& b) 55 | { 56 | return memcmp(&a, &b, sizeof(XsRawGpsTimeUtc)) == 0; 57 | } 58 | #endif 59 | 60 | #endif // file guard 61 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsrejectreason.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSREJECTREASON_H 16 | #define XSREJECTREASON_H 17 | 18 | #include "xdaconfig.h" 19 | 20 | /*! \addtogroup enums Global enumerations 21 | @{ 22 | */ 23 | /*! \brief Identifiers for why a device's connection was rejected. */ 24 | enum XsRejectReason 25 | { 26 | XRR_Unknown = 0, 27 | XRR_VersionMismatch = 1, 28 | XRR_Blacklisted = 2, 29 | XRR_StationIsDisconnecting = 3, 30 | XRR_SystemIsOperational = 4, 31 | }; 32 | /*! @} */ 33 | typedef enum XsRejectReason XsRejectReason; 34 | 35 | #ifdef __cplusplus 36 | extern "C" { 37 | #endif 38 | 39 | XDA_DLL_API const char *XsRejectReason_toString(XsRejectReason r); 40 | 41 | #ifdef __cplusplus 42 | } // extern "C" 43 | 44 | /*! \brief \copybrief XsRejectReason_toString \sa XsRejectReason_toString */ 45 | inline const char *toString(XsRejectReason r) 46 | { 47 | return XsRejectReason_toString(r); 48 | } 49 | #endif 50 | 51 | 52 | #endif // file guard 53 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsresetmethod.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSRESETMETHOD_H 16 | #define XSRESETMETHOD_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | /*! \brief Orientation reset type. */ 22 | enum XsResetMethod { 23 | XRM_StoreAlignmentMatrix = 0, //!< \brief Store the current object alignment matrix to persistent memory 24 | XRM_Heading = 1, //!< \brief Reset the heading (yaw) 25 | XRM_Object = 3, //!< \brief Reset the attitude (roll, pitch), same as XRM_Inclination 26 | XRM_Inclination = XRM_Object, //!< \brief Reset the inclination (roll, pitch), same as XRM_Object 27 | XRM_Alignment = 4, //!< \brief Reset heading and attitude \details This effectively combines the XRM_Heading and XRM_Object 28 | XRM_Global = XRM_Alignment, //!< \brief Reset the full orientation of the device \details Obsolete. Use XRM_Alignment instead. 29 | XRM_DefaultHeading = 5, //!< \brief Revert to default behaviour for heading, undoes XRM_Heading 30 | XRM_DefaultInclination = 6, //!< \brief Revert to default behaviour for inclination, undoes XRM_Inclination 31 | XRM_DefaultAlignment = 7, //!< \brief Revert to default behaviour for heading and inclination, undoes any reset 32 | XRM_None //!< \brief No reset planned 33 | }; 34 | /*! @} */ 35 | typedef enum XsResetMethod XsResetMethod; 36 | 37 | #endif // file guard 38 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsrssi.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSRSSI_H 16 | #define XSRSSI_H 17 | 18 | #include "xstypesconfig.h" 19 | 20 | #define XS_RSSI_MAX (128) 21 | #define XS_RSSI_UNKNOWN (-XS_RSSI_MAX) 22 | 23 | #ifdef __cplusplus 24 | extern "C" { 25 | #endif 26 | 27 | XSTYPES_DLL_API int XsRssi_max(void); 28 | XSTYPES_DLL_API int XsRssi_unknown(void); 29 | XSTYPES_DLL_API int XsRssi_unbiased(int raw); 30 | 31 | #ifdef __cplusplus 32 | } // extern "C" 33 | namespace XsRssi { 34 | /*! \brief The bias on biased RSSI values. */ 35 | static const int bias = XS_RSSI_MAX; 36 | 37 | /*! \brief The maximum RSSI value. */ 38 | static const int max = XS_RSSI_MAX; 39 | /*! \brief The RSSI value that was reserved for when the RSSI is unknown. */ 40 | static const int unknown = XS_RSSI_UNKNOWN; 41 | 42 | /*! \brief The maximum unbiased RSSI value. */ 43 | static const int maxUnbiased = XS_RSSI_MAX + XS_RSSI_MAX; 44 | /*! \brief The RSSI value that was reserved for when the RSSI is unknown (unbiased). */ 45 | static const int unknownUnbiased = XS_RSSI_UNKNOWN + XS_RSSI_MAX; 46 | 47 | /*! \copydoc XsRssi_unbiased */ 48 | inline int unbiased(int raw) 49 | { 50 | return XsRssi_unbiased(raw); 51 | } 52 | } 53 | #endif 54 | 55 | #endif // file guard 56 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xsscrdata.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSSCRDATA_H 16 | #define XSSCRDATA_H 17 | 18 | #include "pstdint.h" 19 | #include "xsushortvector.h" 20 | 21 | #ifndef __cplusplus 22 | #define XSSCRDATA_INITIALIZER {XSUSHORTVECTOR_INITIALIZER, XSUSHORTVECTOR_INITIALIZER, XSUSHORTVECTOR_INITIALIZER, {0, 0, 0, 0}} 23 | #endif 24 | 25 | /*! \brief Container for raw sensor measurement data 26 | \details This structure contains raw measurement data from the sensors on the device. 27 | This data is unscaled, the bias has not been subtracted and no error correction has been applied. 28 | */ 29 | struct XsScrData { 30 | XsUShortVector m_acc; //!< The raw accelerometer data 31 | XsUShortVector m_gyr; //!< The raw gyroscope data 32 | XsUShortVector m_mag; //!< The raw magnetometer data 33 | uint16_t m_temp; //!< The temperature data 34 | }; 35 | typedef struct XsScrData XsScrData; 36 | 37 | #endif // file guard 38 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xssyncpolarity.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSSYNCPOLARITY_H 16 | #define XSSYNCPOLARITY_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | /*! \brief Signal polarity */ 22 | enum XsSyncPolarity 23 | { 24 | XSP_None = 0, /*!< \brief Don't generate or react to trigger level changes */ 25 | XSP_RisingEdge = 1, /*!< \brief React to a rising edge on input */ 26 | XSP_PositivePulse = XSP_RisingEdge, /*!< \brief Generate a positive pulse on output */ 27 | XSP_FallingEdge = 2, /*!< \brief React to a falling edge on input */ 28 | XSP_NegativePulse = XSP_FallingEdge, /*!< \brief Generate a falling edge on output */ 29 | XSP_Both /*!< \brief Toggle output or react on all toggles on input */ 30 | }; 31 | /*! @} */ 32 | typedef enum XsSyncPolarity XsSyncPolarity; 33 | 34 | #endif // file guard 35 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xssyncrole.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSSYNCROLE_H 16 | #define XSSYNCROLE_H 17 | 18 | /*! \addtogroup enums Global enumerations 19 | @{ 20 | */ 21 | /*! \brief Synchronization roles 22 | */ 23 | enum XsSyncRole { 24 | XSR_Slave, 25 | XSR_None, 26 | XSR_MasterSlave, 27 | XSR_Master 28 | }; 29 | /*! @} */ 30 | typedef enum XsSyncRole XsSyncRole; 31 | 32 | #endif // file guard 33 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xssyncsettinglist.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSSYNCSETTINGLIST_H 16 | #define XSSYNCSETTINGLIST_H 17 | 18 | #include "xssyncsettingarray.h" 19 | #define XsSyncSettingList XsSyncSettingArray 20 | 21 | #ifndef __cplusplus 22 | 23 | #define XSSYNCSETTINGLIST_INITIALIZER XSSYNCSETTINGSARRAY_INITIALIZER 24 | 25 | #define XsSyncSettingList_assign(thisPtr, size, src) XsArray_assign(thisPtr, size, src) 26 | #define XsSyncSettingList_construct(thisPtr, size, src) XsSyncSettingArray_construct(thisPtr, size, src) 27 | #define XsSyncSettingList_destruct(thisPtr) XsArray_destruct(thisPtr) 28 | #define XsSyncSettingList_copy(thisPtr, copy) XsArray_copy(copy, thisPtr) 29 | #define XsSyncSettingList_append(thisPtr, other) XsArray_append(thisPtr, other) 30 | #define XsSyncSettingList_popFront(thisPtr, count) XsArray_erase(thisPtr, 0, count) 31 | #define XsSyncSettingList_popBack(thisPtr, count) XsArray_erase(thisPtr, (XsSize)-1, count) 32 | #define XsSyncSettingList_swap(a, b) XsArray_swap(a, b) 33 | #define XsSyncSettingList_erase(thisPtr, index, count) XsArray_erase(thisPtr, index, count) 34 | 35 | #endif 36 | #endif // file guard 37 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xstypes_include.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #include 16 | -------------------------------------------------------------------------------- /march_imu_manager/lib/include/xsens/xstypesinfo.h: -------------------------------------------------------------------------------- 1 | /* WARNING: COPYRIGHT (C) 2016 XSENS TECHNOLOGIES OR SUBSIDIARIES WORLDWIDE. ALL RIGHTS RESERVED. 2 | THIS FILE AND THE SOURCE CODE IT CONTAINS (AND/OR THE BINARY CODE FILES FOUND IN THE SAME 3 | FOLDER THAT CONTAINS THIS FILE) AND ALL RELATED SOFTWARE (COLLECTIVELY, "CODE") ARE SUBJECT 4 | TO A RESTRICTED LICENSE AGREEMENT ("AGREEMENT") BETWEEN XSENS AS LICENSOR AND THE AUTHORIZED 5 | LICENSEE UNDER THE AGREEMENT. THE CODE MUST BE USED SOLELY WITH XSENS PRODUCTS INCORPORATED 6 | INTO LICENSEE PRODUCTS IN ACCORDANCE WITH THE AGREEMENT. ANY USE, MODIFICATION, COPYING OR 7 | DISTRIBUTION OF THE CODE IS STRICTLY PROHIBITED UNLESS EXPRESSLY AUTHORIZED BY THE AGREEMENT. 8 | IF YOU ARE NOT AN AUTHORIZED USER OF THE CODE IN ACCORDANCE WITH THE AGREEMENT, YOU MUST STOP 9 | USING OR VIEWING THE CODE NOW, REMOVE ANY COPIES OF THE CODE FROM YOUR COMPUTER AND NOTIFY 10 | XSENS IMMEDIATELY BY EMAIL TO INFO@XSENS.COM. ANY COPIES OR DERIVATIVES OF THE CODE (IN WHOLE 11 | OR IN PART) IN SOURCE CODE FORM THAT ARE PERMITTED BY THE AGREEMENT MUST RETAIN THE ABOVE 12 | COPYRIGHT NOTICE AND THIS PARAGRAPH IN ITS ENTIRETY, AS REQUIRED BY THE AGREEMENT. 13 | */ 14 | 15 | #ifndef XSTYPESINFO_H 16 | #define XSTYPESINFO_H 17 | 18 | #include "xstypesconfig.h" 19 | 20 | struct XsVersion; 21 | 22 | #ifdef __cplusplus 23 | extern "C" 24 | #endif 25 | XSTYPES_DLL_API void XsTypesInfoGetVersion(struct XsVersion* version); 26 | 27 | #endif // file guard 28 | -------------------------------------------------------------------------------- /march_imu_manager/lib/libxsensdeviceapi.so: -------------------------------------------------------------------------------- 1 | libxsensdeviceapi.so.4 -------------------------------------------------------------------------------- /march_imu_manager/lib/libxsensdeviceapi.so.4: -------------------------------------------------------------------------------- 1 | libxsensdeviceapi.so.4.6.0 -------------------------------------------------------------------------------- /march_imu_manager/lib/libxsensdeviceapi.so.4.6.0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-march/hardware-interface/61c32d2b80b4186ae5b73da6d8037af1bdbcdbe7/march_imu_manager/lib/libxsensdeviceapi.so.4.6.0 -------------------------------------------------------------------------------- /march_imu_manager/lib/libxstypes.so: -------------------------------------------------------------------------------- 1 | libxstypes.so.4 -------------------------------------------------------------------------------- /march_imu_manager/lib/libxstypes.so.4: -------------------------------------------------------------------------------- 1 | libxstypes.so.4.6.0 -------------------------------------------------------------------------------- /march_imu_manager/lib/libxstypes.so.4.6.0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-march/hardware-interface/61c32d2b80b4186ae5b73da6d8037af1bdbcdbe7/march_imu_manager/lib/libxstypes.so.4.6.0 -------------------------------------------------------------------------------- /march_imu_manager/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | march_imu_manager 5 | 0.0.0 6 | The IMU manager that publishes IMU data 7 | 8 | Project March 9 | 10 | TODO 11 | 12 | catkin 13 | 14 | roscpp 15 | sensor_msgs 16 | 17 | code_coverage 18 | rosunit 19 | 20 | -------------------------------------------------------------------------------- /march_imu_manager/src/mtw.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March 2 | #include "march_imu_manager/mtw.h" 3 | 4 | Mtw::Mtw(XsDevice* device, size_t max_buffer_size) : device_(device), max_buffer_size_(max_buffer_size) 5 | { 6 | this->device_->addCallbackHandler(this); 7 | configure(); 8 | } 9 | 10 | void Mtw::configure() 11 | { 12 | XsOutputMode outputMode = XOM_Calibrated & XOM_Orientation; 13 | XsOutputSettings outputSettings = 14 | XOS_Timestamp_PacketCounter & XOS_OrientationMode_Matrix & XOS_CalibratedMode_AccGyrOnly; 15 | 16 | this->device_->setOutputMode(outputMode); 17 | this->device_->setOutputSettings(outputSettings); 18 | } 19 | 20 | bool Mtw::dataAvailable() 21 | { 22 | std::unique_lock lck(this->mutex_); 23 | return !this->packet_buffer_.empty(); 24 | } 25 | 26 | const XsDataPacket* Mtw::getOldestPacket() 27 | { 28 | std::unique_lock lck(this->mutex_); 29 | XsDataPacket const* packet = &this->packet_buffer_.front(); 30 | return packet; 31 | } 32 | 33 | void Mtw::deleteOldestPacket() 34 | { 35 | std::unique_lock lck(this->mutex_); 36 | this->packet_buffer_.pop_front(); 37 | } 38 | 39 | const XsDeviceId Mtw::getId() const 40 | { 41 | assert(this->device_ != 0); 42 | return this->device_->deviceId(); 43 | } 44 | 45 | void Mtw::onLiveDataAvailable(XsDevice*, const XsDataPacket* packet) 46 | { 47 | std::unique_lock lck(this->mutex_); 48 | 49 | // NOTE: Processing of packets should not be done in this thread. 50 | this->packet_buffer_.push_back(*packet); 51 | if (this->packet_buffer_.size() > this->max_buffer_size_) 52 | { 53 | ROS_WARN("Packet buffer is full, deleting oldest packet"); 54 | this->packet_buffer_.pop_front(); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /march_imu_manager/test/wireless_master_test.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March 2 | #include 3 | 4 | #include "march_imu_manager/wireless_master.h" 5 | 6 | TEST(WirelessMasterTest, emptyRates) 7 | { 8 | XsIntArray rates(0, nullptr); 9 | const int rate = WirelessMaster::findClosestUpdateRate(rates, 0); 10 | ASSERT_EQ(rate, 0); 11 | } 12 | 13 | TEST(WirelessMasterTest, oneRate) 14 | { 15 | const int supportedRate = 60; 16 | XsIntArray rates(1, &supportedRate); 17 | const int rate = WirelessMaster::findClosestUpdateRate(rates, 0); 18 | ASSERT_EQ(rate, supportedRate); 19 | } 20 | 21 | TEST(WirelessMasterTest, matchingRate) 22 | { 23 | const int supportedRates[3] = { 60, 80, 100 }; 24 | XsIntArray rates(3, supportedRates); 25 | const int rate = WirelessMaster::findClosestUpdateRate(rates, supportedRates[1]); 26 | ASSERT_EQ(rate, supportedRates[1]); 27 | } 28 | 29 | TEST(WirelessMasterTest, twoClosestRates) 30 | { 31 | const int supportedRates[2] = { 10, 20 }; 32 | XsIntArray rates(2, supportedRates); 33 | const int rate = WirelessMaster::findClosestUpdateRate(rates, 15); 34 | ASSERT_EQ(rate, supportedRates[0]); 35 | } 36 | 37 | int main(int argc, char* argv[]) 38 | { 39 | testing::InitGoogleTest(&argc, argv); 40 | return RUN_ALL_TESTS(); 41 | } 42 | -------------------------------------------------------------------------------- /march_joint_inertia_controller/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(march_joint_inertia_controller) 3 | 4 | add_compile_options(-std=c++14 -Wall -Wextra -Werror) 5 | 6 | find_package(catkin REQUIRED COMPONENTS 7 | actionlib 8 | actionlib_msgs 9 | control_msgs 10 | controller_interface 11 | controller_manager 12 | joint_state_controller 13 | joint_trajectory_controller 14 | march_hardware 15 | march_shared_resources 16 | pluginlib 17 | realtime_tools 18 | roscpp 19 | std_msgs 20 | urdf 21 | ) 22 | 23 | catkin_package( 24 | INCLUDE_DIRS include 25 | LIBRARIES ${PROJECT_NAME} 26 | CATKIN_DEPENDS 27 | actionlib_msgs 28 | control_msgs 29 | controller_interface 30 | pluginlib 31 | roscpp 32 | std_msgs 33 | ) 34 | 35 | include_directories(include SYSTEM ${catkin_INCLUDE_DIRS}) 36 | 37 | add_library(${PROJECT_NAME} 38 | include/${PROJECT_NAME}/inertia_estimator.h 39 | include/${PROJECT_NAME}/joint_trajectory_inertia_controller.h 40 | src/inertia_estimator.cpp 41 | src/joint_inertia_controller.cpp 42 | src/joint_trajectory_inertia_controller.cpp) 43 | target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES}) 44 | 45 | install(DIRECTORY include/${PROJECT_NAME}/ 46 | DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 47 | ) 48 | 49 | install(TARGETS ${PROJECT_NAME} 50 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 51 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 52 | ) 53 | 54 | install(FILES controller_plugins.xml 55 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 56 | ) 57 | -------------------------------------------------------------------------------- /march_joint_inertia_controller/controller_plugins.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | -------------------------------------------------------------------------------- /march_joint_inertia_controller/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | march_joint_inertia_controller 5 | 0.0.0 6 | ROS controller which can be customized to operate in different circumstances. 7 | 8 | Project March 9 | 10 | TODO 11 | 12 | catkin 13 | 14 | actionlib 15 | actionlib_msgs 16 | control_msgs 17 | controller_manager 18 | controller_interface 19 | joint_state_controller 20 | joint_trajectory_controller 21 | march_hardware 22 | march_shared_resources 23 | pluginlib 24 | realtime_tools 25 | roscpp 26 | std_msgs 27 | urdf 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /march_joint_inertia_controller/src/joint_trajectory_inertia_controller.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 2020 Project March. 2 | #include "march_joint_inertia_controller/joint_trajectory_inertia_controller.h" 3 | #include 4 | 5 | namespace inertia_trajectory_controller 6 | { 7 | typedef joint_trajectory_controller::JointTrajectoryController, 8 | hardware_interface::EffortJointInterface> 9 | JointTrajectoryController; 10 | 11 | } // namespace inertia_trajectory_controller 12 | 13 | PLUGINLIB_EXPORT_CLASS(inertia_trajectory_controller::JointTrajectoryController, controller_interface::ControllerBase); 14 | -------------------------------------------------------------------------------- /march_pdb_state_controller/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(march_pdb_state_controller) 3 | 4 | add_compile_options(-std=c++14 -Wall -Wextra -Werror) 5 | 6 | find_package(catkin REQUIRED COMPONENTS 7 | controller_interface 8 | hardware_interface 9 | march_hardware 10 | march_hardware_interface 11 | march_shared_resources 12 | pluginlib 13 | realtime_tools 14 | roscpp 15 | sensor_msgs 16 | ) 17 | 18 | catkin_package( 19 | INCLUDE_DIRS include 20 | LIBRARIES ${PROJECT_NAME} 21 | CATKIN_DEPENDS 22 | controller_interface 23 | hardware_interface 24 | march_hardware 25 | march_hardware_interface 26 | march_shared_resources 27 | pluginlib 28 | realtime_tools 29 | roscpp 30 | sensor_msgs 31 | ) 32 | 33 | include_directories(include SYSTEM ${Boost_INCLUDE_DIR} ${catkin_INCLUDE_DIRS}) 34 | 35 | add_library(${PROJECT_NAME} 36 | src/march_pdb_state_controller.cpp 37 | ) 38 | 39 | target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES}) 40 | 41 | install(DIRECTORY include/${PROJECT_NAME}/ 42 | DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 43 | ) 44 | 45 | install(TARGETS ${PROJECT_NAME} 46 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 47 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 48 | ) 49 | 50 | install(FILES march_pdb_state_plugin.xml 51 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 52 | ) 53 | -------------------------------------------------------------------------------- /march_pdb_state_controller/include/march_pdb_state_controller/march_pdb_state_controller.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | 3 | #ifndef MARCH_PDB_STATE_CONTROLLER_MARCH_PDB_STATE_CONTROLLER_H 4 | #define MARCH_PDB_STATE_CONTROLLER_MARCH_PDB_STATE_CONTROLLER_H 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | namespace march_pdb_state_controller 19 | { 20 | class MarchPdbStateController : public controller_interface::Controller 21 | { 22 | public: 23 | MarchPdbStateController(); 24 | 25 | bool init(MarchPdbStateInterface* hw, ros::NodeHandle& root_nh, ros::NodeHandle& controller_nh) override; 26 | void starting(const ros::Time& time) override; 27 | void update(const ros::Time& time, const ros::Duration& /*period*/) override; 28 | void stopping(const ros::Time& /*time*/) override; 29 | 30 | private: 31 | static std::vector 32 | createHighVoltageNetsMessage(march::HighVoltage high_voltage); 33 | static std::vector createLowVoltageNetsMessage(march::LowVoltage low_voltage); 34 | 35 | MarchPdbStateHandle pdb_state_; 36 | std::unique_ptr> rt_pub_; 37 | ros::Time last_publish_times_; 38 | double publish_rate_; 39 | }; 40 | } // namespace march_pdb_state_controller 41 | 42 | #endif // MARCH_PDB_STATE_CONTROLLER_MARCH_PDB_STATE_CONTROLLER_H 43 | -------------------------------------------------------------------------------- /march_pdb_state_controller/march_pdb_state_plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | This controller publishes the state pdb. 5 | 6 | 7 | -------------------------------------------------------------------------------- /march_pdb_state_controller/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | march_pdb_state_controller 5 | 0.0.0 6 | Controller to publish state of march PDB 7 | Project MARCH 8 | 9 | TODO 10 | 11 | catkin 12 | 13 | controller_interface 14 | hardware_interface 15 | march_hardware 16 | march_hardware_interface 17 | march_shared_resources 18 | pluginlib 19 | realtime_tools 20 | roscpp 21 | sensor_msgs 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /march_temperature_sensor_controller/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0.2) 2 | project(march_temperature_sensor_controller) 3 | 4 | add_compile_options(-std=c++14 -Wall -Wextra -Werror) 5 | 6 | find_package(catkin REQUIRED COMPONENTS 7 | controller_interface 8 | hardware_interface 9 | march_hardware_interface 10 | pluginlib 11 | realtime_tools 12 | roscpp 13 | sensor_msgs 14 | ) 15 | 16 | catkin_package( 17 | INCLUDE_DIRS include 18 | LIBRARIES ${PROJECT_NAME} 19 | CATKIN_DEPENDS 20 | controller_interface 21 | hardware_interface 22 | march_hardware_interface 23 | pluginlib 24 | realtime_tools 25 | roscpp 26 | sensor_msgs 27 | ) 28 | 29 | include_directories(include SYSTEM ${Boost_INCLUDE_DIR} ${catkin_INCLUDE_DIRS}) 30 | 31 | add_library(${PROJECT_NAME} 32 | src/march_temperature_sensor_controller.cpp 33 | ) 34 | 35 | target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES}) 36 | 37 | install(DIRECTORY include/${PROJECT_NAME}/ 38 | DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 39 | ) 40 | 41 | install(TARGETS ${PROJECT_NAME} 42 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 43 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 44 | ) 45 | 46 | install(FILES march_temperature_sensor_plugin.xml 47 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 48 | ) 49 | 50 | -------------------------------------------------------------------------------- /march_temperature_sensor_controller/include/march_temperature_sensor_controller/march_temperature_sensor_controller.h: -------------------------------------------------------------------------------- 1 | // Copyright 2019 Project March. 2 | #ifndef MARCH_TEMPERATURE_SENSOR_CONTROLLER_MARCH_TEMPERATURE_SENSOR_CONTROLLER_H 3 | #define MARCH_TEMPERATURE_SENSOR_CONTROLLER_MARCH_TEMPERATURE_SENSOR_CONTROLLER_H 4 | #include 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | namespace march_temperature_sensor_controller 14 | { 15 | // this controller gets access to the MarchTemperatureSensorInterface 16 | class MarchTemperatureSensorController : public controller_interface::Controller 17 | { 18 | public: 19 | MarchTemperatureSensorController() 20 | { 21 | } 22 | 23 | virtual bool init(MarchTemperatureSensorInterface* hw, ros::NodeHandle& root_nh, ros::NodeHandle& controller_nh); 24 | virtual void starting(const ros::Time& time); 25 | virtual void update(const ros::Time& time, const ros::Duration& /*period*/); 26 | virtual void stopping(const ros::Time& /*time*/); 27 | 28 | private: 29 | std::vector temperature_sensors_; 30 | typedef boost::shared_ptr > RtPublisherPtr; 31 | std::vector realtime_pubs_; 32 | std::vector last_publish_times_; 33 | double publish_rate_; 34 | }; 35 | } // namespace march_temperature_sensor_controller 36 | 37 | #endif // MARCH_TEMPERATURE_SENSOR_CONTROLLER_MARCH_TEMPERATURE_SENSOR_CONTROLLER_H 38 | -------------------------------------------------------------------------------- /march_temperature_sensor_controller/march_temperature_sensor_plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | This controller publishes the readings of the temperature sensors. 5 | 6 | 7 | -------------------------------------------------------------------------------- /march_temperature_sensor_controller/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | march_temperature_sensor_controller 5 | 0.0.0 6 | Controller to publish state of march temperature sensor 7 | Project MARCH 8 | 9 | TODO 10 | 11 | catkin 12 | 13 | controller_interface 14 | hardware_interface 15 | march_hardware_interface 16 | pluginlib 17 | realtime_tools 18 | roscpp 19 | sensor_msgs 20 | 21 | code_coverage 22 | rostest 23 | 24 | 25 | 26 | 27 | 28 | --------------------------------------------------------------------------------